From: Date: July 3 2009 12:33pm Subject: bzr commit into mysql-5.1-telco-7.1 branch (magnus.blaudd:2929) List-Archive: http://lists.mysql.com/commits/77874 Message-Id: <20090703103402.0CFB913405D@pilot> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_e1+oOrLyYWQ96+I5uDGjLw)" --Boundary_(ID_e1+oOrLyYWQ96+I5uDGjLw) MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-transfer-encoding: BASE64 Content-disposition: inline I0F0IGZpbGU6Ly8vaG9tZS9tc3ZlbnNzb24vbXlzcWwvdG1wL0JZWjJSYnFoSHgv Ny4xLW5kYmluZm8vIGJhc2VkIG9uIHJldmlkOmpvbmFzQG15c3FsLmNvbS0yMDA5 MDcwMjE0MDMwNS1qajAwZzZzajBsb2oweXR6DQoNCiAyOTI5IE1hZ251cyBCbMOl dWRkCTIwMDktMDctMDMgW21lcmdlXQ0KICAgICAgTWVyZ2UNCg0KICAgIHJlbW92 ZWQ6DQogICAgICBzdG9yYWdlL25kYi9pbmNsdWRlL25kYmluZm8uaA0KICAgICAg c3RvcmFnZS9uZGIvc3JjL2NvbW1vbi91dGlsL25kYmluZm8uY3BwDQogICAgICBz dG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vbmRiaW5mb19oZWxw ZXJzLmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJp bmZvL25kYmluZm9fdGFibGVpZHMuaA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tl cm5lbC9ibG9ja3MvZGJpbmZvL25kYmluZm9fdGFibGVzLmgNCiAgICAgIHN0b3Jh Z2UvbmRiL3NyYy9tZ21zcnYvbWdtX25kYmluZm8uY3BwDQogICAgYWRkZWQ6DQog ICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL05kYmluZm8uY3BwDQogICAg ICBzdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL05kYmluZm8uaHBwDQogICAgbW9k aWZpZWQ6DQogICAgICBteXNxbC10ZXN0L3N1aXRlL25kYi9yL25kYmluZm8ucmVz dWx0DQogICAgICBzcWwvaGFfbmRiY2x1c3Rlci5jYw0KICAgICAgc3FsL2hhX25k YmluZm8uY2MNCiAgICAgIHN0b3JhZ2UvbmRiL2luY2x1ZGUvTWFrZWZpbGUuYW0N CiAgICAgIHN0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3NpZ25hbGRhdGEvRGJp bmZvU2Nhbi5ocHANCiAgICAgIHN0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3Np Z25hbGRhdGEvRHVtcFN0YXRlT3JkLmhwcA0KICAgICAgc3RvcmFnZS9uZGIvaW5j bHVkZS9rZXJuZWwvc2lnbmFsZGF0YS9TaWduYWxEYXRhLmhwcA0KICAgICAgc3Rv cmFnZS9uZGIvc3JjL2NvbW1vbi9kZWJ1Z2dlci9zaWduYWxkYXRhL0RiaW5mb1Nj YW4uY3BwDQogICAgICBzdG9yYWdlL25kYi9zcmMvY29tbW9uL2RlYnVnZ2VyL3Np Z25hbGRhdGEvU2lnbmFsRGF0YVByaW50LmNwcA0KICAgICAgc3RvcmFnZS9uZGIv c3JjL2NvbW1vbi91dGlsL01ha2VmaWxlLmFtDQogICAgICBzdG9yYWdlL25kYi9z cmMva2VybmVsL2Jsb2Nrcy9Mb2NhbFByb3h5LmNwcA0KICAgICAgc3RvcmFnZS9u ZGIvc3JjL2tlcm5lbC9ibG9ja3MvTG9jYWxQcm94eS5ocHANCiAgICAgIHN0b3Jh Z2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL01ha2VmaWxlLmFtDQogICAgICBzdG9y YWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9iYWNrdXAvQmFja3VwLmNwcA0KICAg ICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJhY2MvRGJhY2NNYWlu LmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJkaWN0 L0RiZGljdC5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tz L2RiaW5mby9DTWFrZUxpc3RzLnR4dA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tl cm5lbC9ibG9ja3MvZGJpbmZvL0RiaW5mby5jcHANCiAgICAgIHN0b3JhZ2UvbmRi L3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9EYmluZm8uaHBwDQogICAgICBzdG9y YWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnRjL0RidGNNYWluLmNwcA0KICAg ICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ0dXAvRGJ0dXBEZWJ1 Zy5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidHV4 L0RidHV4RGVidWcuY3BwDQogICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVsL2Js b2Nrcy9kYnV0aWwvRGJVdGlsLmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tl cm5lbC9ibG9ja3Mvc3VtYS9TdW1hLmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3Jj L2tlcm5lbC9ibG9ja3MvdHJpeC9Ucml4LmNwcA0KICAgICAgc3RvcmFnZS9uZGIv c3JjL2tlcm5lbC92bS9NYWtlZmlsZS5hbQ0KICAgICAgc3RvcmFnZS9uZGIvc3Jj L2tlcm5lbC92bS9TaW11bGF0ZWRCbG9jay5jcHANCiAgICAgIHN0b3JhZ2UvbmRi L3NyYy9rZXJuZWwvdm0vU2ltdWxhdGVkQmxvY2suaHBwDQogICAgICBzdG9yYWdl L25kYi9zcmMvbWdtc3J2L01ha2VmaWxlLmFtDQogICAgICBzdG9yYWdlL25kYi9z cmMvbmRiYXBpL05kYkluZm8uY3BwDQogICAgICBzdG9yYWdlL25kYi9zcmMvbmRi YXBpL05kYkluZm8uaHBwDQogICAgICBzdG9yYWdlL25kYi9zcmMvbmRiYXBpL05k YkluZm9TY2FuT3BlcmF0aW9uLmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL25k YmFwaS9OZGJJbmZvU2Nhbk9wZXJhdGlvbi5ocHANCiAgICAgIHN0b3JhZ2UvbmRi L3Rlc3QvbmRiYXBpL3Rlc3ROZGJpbmZvLmNwcA0KPT09IG1vZGlmaWVkIGZpbGUg J215c3FsLXRlc3Qvc3VpdGUvbmRiL3IvbmRiaW5mby5yZXN1bHQnDQotLS0gYS9t eXNxbC10ZXN0L3N1aXRlL25kYi9yL25kYmluZm8ucmVzdWx0CTIwMDktMDYtMjMg MTQ6MDc6NTggKzAwMDANCisrKyBiL215c3FsLXRlc3Qvc3VpdGUvbmRiL3IvbmRi aW5mby5yZXN1bHQJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTczLDkg KzczLDE1IEBAIFRBQkxFX0lECVRBQkxFX05BTUUJQ1JFQVRFX1NRTA0KIAlgRlJF RWAgSU5UIFVOU0lHTkVELA0KIAlgU0laRWAgSU5UIFVOU0lHTkVEDQogKSBFTkdJ TkU9TkRCSU5GTzsNCis3CVRFU1QJQ1JFQVRFIFRBQkxFIGBURVNUYCAoDQorCWBO T0RFX0lEYCBJTlQgVU5TSUdORUQsDQorCWBCTE9DS19OVU1CRVJgIElOVCBVTlNJ R05FRCwNCisJYEJMT0NLX0lOU1RBTkNFYCBJTlQgVU5TSUdORUQsDQorCWBDT1VO VEVSYCBJTlQgVU5TSUdORUQNCispIEVOR0lORT1OREJJTkZPOw0KIHNlbGVjdCBj b3VudCgqKSBmcm9tIFRBQkxFUzsNCiBjb3VudCgqKQ0KLTcNCis4DQogc2VsZWN0 ICogZnJvbSBUQUJMRVMgd2hlcmUgVEFCTEVfSUQgPSAyOw0KIFRBQkxFX0lECVRB QkxFX05BTUUJQ1JFQVRFX1NRTA0KIDIJTUVNVVNBR0UJQ1JFQVRFIFRBQkxFIGBN RU1VU0FHRWAgKA0KQEAgLTk3LDYgKzEwMywxMiBAQCBUQUJMRV9JRAlUQUJMRV9O QU1FCUNSRUFURV9TUUwNCiAJYEZSRUVgIElOVCBVTlNJR05FRCwNCiAJYFNJWkVg IElOVCBVTlNJR05FRA0KICkgRU5HSU5FPU5EQklORk87DQorNwlURVNUCUNSRUFU RSBUQUJMRSBgVEVTVGAgKA0KKwlgTk9ERV9JRGAgSU5UIFVOU0lHTkVELA0KKwlg QkxPQ0tfTlVNQkVSYCBJTlQgVU5TSUdORUQsDQorCWBCTE9DS19JTlNUQU5DRWAg SU5UIFVOU0lHTkVELA0KKwlgQ09VTlRFUmAgSU5UIFVOU0lHTkVEDQorKSBFTkdJ TkU9TkRCSU5GTzsNCiBzZWxlY3QgKiBmcm9tIFRBQkxFUyB3aGVyZSBUQUJMRV9O QU1FID0gJ0xPR0RFU1RJTkFUSU9OJzsNCiBUQUJMRV9JRAlUQUJMRV9OQU1FCUNS RUFURV9TUUwNCiAzCUxPR0RFU1RJTkFUSU9OCUNSRUFURSBUQUJMRSBgTE9HREVT VElOQVRJT05gICgNCkBAIC0xMDgsNyArMTIwLDcgQEAgVEFCTEVfSUQJVEFCTEVf TkFNRQlDUkVBVEVfU1FMDQogKSBFTkdJTkU9TkRCSU5GTzsNCiBzZWxlY3QgY291 bnQoKikgZnJvbSBUQUJMRVMgdDEsIFRBQkxFUyB0MiBXSEVSRSB0MS5UQUJMRV9J RCA9IHQxLlRBQkxFX0lEOw0KIGNvdW50KCopDQotNDkNCis2NA0KIHVwZGF0ZSBU QUJMRVMgc2V0IFRBQkxFX0lEPTIgd2hlcmUgVEFCTEVfSUQ9MzsNCiBFUlJPUiBI WTAwMDogVGFibGUgc3RvcmFnZSBlbmdpbmUgZm9yICdUQUJMRVMnIGRvZXNuJ3Qg aGF2ZSB0aGlzIG9wdGlvbg0KIEZMVVNIICBUQUJMRVM7DQpAQCAtMTIxLDUgKzEz Myw2IEBAIFRBQkxFX0lEDQogNA0KIDUNCiA2DQorNw0KIGRyb3AgdGFibGUgVEFC TEVTOw0KIERST1AgREFUQUJBU0UgbmRiJGluZm87DQoNCj09PSBtb2RpZmllZCBm aWxlICdzcWwvaGFfbmRiY2x1c3Rlci5jYycNCi0tLSBhL3NxbC9oYV9uZGJjbHVz dGVyLmNjCTIwMDktMDYtMTUgMTQ6MDE6MDEgKzAwMDANCisrKyBiL3NxbC9oYV9u ZGJjbHVzdGVyLmNjCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0xMzk4 NSw2ICsxMzk4NSw4IEBAIHN0cnVjdCBzdF9teXNxbF9zdG9yYWdlX2VuZ2luZSBu ZGJjbHVzdGUNCiANCiAjaW5jbHVkZSAiaGFfbmRiaW5mby5oIg0KIA0KK2V4dGVy biBzdHJ1Y3Qgc3RfbXlzcWxfc3lzX3ZhciogbmRiaW5mb19zeXN0ZW1fdmFyaWFi bGVzW107DQorDQogc3RydWN0IHN0X215c3FsX3N0b3JhZ2VfZW5naW5lIG5kYmlu Zm9fc3RvcmFnZV9lbmdpbmU9DQogeyBNWVNRTF9IQU5ETEVSVE9OX0lOVEVSRkFD RV9WRVJTSU9OIH07DQogDQpAQCAtMTQwMTQsNyArMTQwMTYsNyBAQCBteXNxbF9k ZWNsYXJlX3BsdWdpbihuZGJjbHVzdGVyKQ0KICAgbmRiaW5mb19kZWluaXQsICAg ICAgICAgICAgIC8qIHBsdWdpbiBkZWluaXQgKi8NCiAgIDB4MDAwMSwgICAgICAg ICAgICAgICAgICAgICAvKiBwbHVnaW4gdmVyc2lvbiAqLw0KICAgTlVMTCwgICAg ICAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyB2YXJpYWJsZXMgKi8NCi0gIE5V TEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBzeXN0ZW0gdmFyaWFibGVzICov DQorICBuZGJpbmZvX3N5c3RlbV92YXJpYWJsZXMsICAgLyogc3lzdGVtIHZhcmlh YmxlcyAqLw0KICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbmZp ZyBvcHRpb25zICovDQogfQ0KIG15c3FsX2RlY2xhcmVfcGx1Z2luX2VuZDsNCg0K PT09IG1vZGlmaWVkIGZpbGUgJ3NxbC9oYV9uZGJpbmZvLmNjJw0KLS0tIGEvc3Fs L2hhX25kYmluZm8uY2MJMjAwOS0wNi0yNCAwODozOTowOSArMDAwMA0KKysrIGIv c3FsL2hhX25kYmluZm8uY2MJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAg LTIwLDYgKzIwLDMyIEBADQogI2luY2x1ZGUgImhhX25kYmluZm8uaCINCiAjaW5j bHVkZSAiLi4vc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZvLmhwcCINCiAN CisNCitzdGF0aWMgTVlTUUxfVEhEVkFSX1VJTlQoDQorICBtYXhfcm93cywgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIG5hbWUgKi8NCisgIFBMVUdJTl9WQVJf UlFDTURBUkcsDQorICAiU3BlY2lmeSBtYXggbnVtYmVyIG9mIHJvd3MgdG8gZmV0 Y2ggcGVyIHJvdW5kdHJpcCB0byBjbHVzdGVyIiwNCisgIE5VTEwsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgZnVuYy4gKi8NCisgIE5VTEws ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdXBkYXRlIGZ1bmMuICov DQorICAxMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1 bHQgKi8NCisgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog bWluICovDQorICAyNTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IG1heCAqLw0KKyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBibG9jayAqLw0KKyk7DQorDQorc3RhdGljIE1ZU1FMX1RIRFZBUl9VSU5UKA0K KyAgbWF4X2J5dGVzLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYW1lICov DQorICBQTFVHSU5fVkFSX1JRQ01EQVJHLA0KKyAgIlNwZWNpZnkgYXBwcm94LiBt YXggbnVtYmVyIG9mIGJ5dGVzIHRvIGZldGNoIHBlciByb3VuZHRyaXAgdG8gY2x1 c3RlciIsDQorICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGNoZWNrIGZ1bmMuICovDQorICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHVwZGF0ZSBmdW5jLiAqLw0KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovDQorICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIG1pbiAqLw0KKyAgNjU1MzUsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXggKi8NCisgIDAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2sgKi8NCispOw0KKw0KKw0K IHN0YXRpYyBOZGJJbmZvKiBnX25kYmluZm87DQogDQogZXh0ZXJuIE5kYl9jbHVz dGVyX2Nvbm5lY3Rpb24qIGdfbmRiX2NsdXN0ZXJfY29ubmVjdGlvbjsNCkBAIC05 Miw2ICsxMTgsMTYgQEAgaW50IGhhX25kYmluZm86Om9wZW4oY29uc3QgY2hhciAq bmFtZSwgaQ0KIHsNCiAgIERCVUdfRU5URVIoImhhX25kYmluZm86Om9wZW4iKTsN CiAgIERCVUdfUFJJTlQoImVudGVyIiwgKCJuYW1lOiAlcywgbW9kZTogJWQiLCBu YW1lLCBtb2RlKSk7DQorDQorICBpZiAoIWdfbmRiaW5mbykNCisgIHsNCisgICAg cHVzaF93YXJuaW5nKGN1cnJlbnRfdGhkLCBNWVNRTF9FUlJPUjo6V0FSTl9MRVZF TF9OT1RFLCAxLA0KKyAgICAgICAgICAgICAgICAgIkNhbid0IG9wZW4gdGFibGUg LSAnbmRiaW5mbycgaGFzIGJlZW4gc3RhcnRlZCAiDQorICAgICAgICAgICAgICAg ICAiaW4gbGltaXRlZCBtb2RlIGJlY2F1c2UgdGhlICduZGJjbHVzdGVyJyAiDQor ICAgICAgICAgICAgICAgICAiZW5naW5lIGlzIGRpc2FibGVkIik7DQorICAgIERC VUdfUkVUVVJOKEhBX0VSUl9XUk9OR19DT01NQU5EKTsNCisgIH0NCisNCiAgIGFz c2VydChpc19jbG9zZWQoKSk7DQogDQogICBpbnQgZXJyID0gZ19uZGJpbmZvLT5v cGVuVGFibGUobmFtZSwgJm1faW1wbC5tX3RhYmxlKTsNCkBAIC0xMjMsMTAgKzE1 OSwxNCBAQCBpbnQgaGFfbmRiaW5mbzo6cm5kX2luaXQoYm9vbCBzY2FuKQ0KICAg REJVR19QUklOVCgiaW5mbyIsICgic2NhbjogJWQiLCBzY2FuKSk7DQogICBhc3Nl cnQoaXNfb3BlbigpKTsNCiAgIGFzc2VydChtX2ltcGwubV9zY2FuX29wID09IE5V TEwpOyAvLyBObyBzY2FuIGFscmVhZHkgb25nb2luZw0KKyAgVEhEKiB0aGQgPSBj dXJyZW50X3RoZDsNCiANCiAgIGludCBlcnI7DQogICBOZGJJbmZvU2Nhbk9wZXJh dGlvbiogc2Nhbl9vcCA9IE5VTEw7DQotICBpZiAoKGVyciA9IGdfbmRiaW5mby0+ Y3JlYXRlU2Nhbk9wZXJhdGlvbihtX2ltcGwubV90YWJsZSwgJnNjYW5fb3ApKSAh PSAwKQ0KKyAgaWYgKChlcnIgPSBnX25kYmluZm8tPmNyZWF0ZVNjYW5PcGVyYXRp b24obV9pbXBsLm1fdGFibGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmc2Nhbl9vcCwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRIRFZBUih0aGQsIG1heF9yb3dzKSwN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRI RFZBUih0aGQsIG1heF9ieXRlcykpKSAhPSAwKQ0KICAgICBEQlVHX1JFVFVSTihl cnIybXlzcWwoZXJyKSk7DQogDQogICBpZiAoKGVyciA9IHNjYW5fb3AtPnJlYWRU dXBsZXMoKSkgIT0gMCkNCkBAIC0yNzgsMTIgKzMxOCwxMCBAQCBpbnQgbmRiaW5m b19pbml0KHZvaWQgKnBsdWdpbikNCiAgIC8qIENoZWNrIGlmICduZGJjbHVzdGVy X2luaXQnIGhhcyBiZWVuIHJ1biBhbmQgY29ubmVjdGVkIHRvIGNsdXN0ZXIgKi8N CiAgIGlmICghZ19uZGJfY2x1c3Rlcl9jb25uZWN0aW9uKQ0KICAgew0KLSAgICBz cWxfcHJpbnRfd2FybmluZygiRGlzYWJsaW5nICduZGJpbmZvJyBiZWNhdXNlICdu ZGJjbHVzdGVyJyBpcyAiDQotICAgICAgICAgICAgICAgICAgICAgICJub3Qgc3Rh cnRlZCIpOw0KLSAgICAvLyBodG9uLT5zdGF0ZSA9IFNIT1dfT1BUSU9OX0RJU0FC TEVEOw0KLSAgICAvLyBUT0RPIF4gdGhpcyBkb2VzIG5vdCBtYXJrIHRoZSBlbmdp bmUgYXMgZGlzYWJsZWQNCi0gICAgLy8gV3JpdGUgc21hbGwgcGF0Y2ggZm9yIE15 U1FMIFNlcnZlciBhbGxvd2luZyBhbiBlbmdpbmUgdG8gZGlzYWJsZSBpdHNlbGY/ DQotICAgIERCVUdfUkVUVVJOKDEpOw0KKyAgICBzcWxfcHJpbnRfd2FybmluZygi U3RhcnRpbmcgJ25kYmluZm8nIGluIGxpbWl0ZWQgbW9kZSAiDQorICAgICAgICAg ICAgICAgICAgICAgICJiZWNhdXNlICduZGJjbHVzdGVyJyBlbmdpbmUgaXMgZGlz YWJsZWQiKTsNCisNCisgICAgREJVR19SRVRVUk4oMCk7DQogICB9DQogDQogICBi b29sIHVzZV9sb3dlcl9jYXNlID0gKGxvd2VyX2Nhc2VfdGFibGVfbmFtZXMgIT0g MCk7DQpAQCAtMzI2LDQgKzM2NCwxMSBAQCBpbnQgbmRiaW5mb19kZWluaXQodm9p ZCAqcGx1Z2luKQ0KICAgREJVR19SRVRVUk4oMCk7DQogfQ0KIA0KK3N0cnVjdCBz dF9teXNxbF9zeXNfdmFyKiBuZGJpbmZvX3N5c3RlbV92YXJpYWJsZXNbXT0gew0K KyAgTVlTUUxfU1lTVkFSKG1heF9yb3dzKSwNCisgIE1ZU1FMX1NZU1ZBUihtYXhf Ynl0ZXMpLA0KKw0KKyAgTlVMTA0KK307DQorDQogdGVtcGxhdGUgY2xhc3MgVmVj dG9yPGNvbnN0IE5kYkluZm9SZWNBdHRyKj47DQoNCj09PSBtb2RpZmllZCBmaWxl ICdzdG9yYWdlL25kYi9pbmNsdWRlL01ha2VmaWxlLmFtJw0KLS0tIGEvc3RvcmFn ZS9uZGIvaW5jbHVkZS9NYWtlZmlsZS5hbQkyMDA5LTA1LTI3IDE1OjIxOjQ1ICsw MDAwDQorKysgYi9zdG9yYWdlL25kYi9pbmNsdWRlL01ha2VmaWxlLmFtCTIwMDkt MDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0yMCw4ICsyMCw3IEBAIG5kYmluY2x1 ZGVfSEVBREVSUyA9IFwNCiBuZGJfY29uc3RhbnRzLmggXA0KIG5kYl9pbml0Lmgg XA0KIG5kYl90eXBlcy5oIFwNCi1uZGJfdmVyc2lvbi5oIFwNCi1uZGJpbmZvLmgN CituZGJfdmVyc2lvbi5oDQogDQogbmRiYXBpaW5jbHVkZV9IRUFERVJTID0gXA0K IG5kYmFwaS9uZGJhcGlfbGltaXRzLmggXA0KDQo9PT0gbW9kaWZpZWQgZmlsZSAn c3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJuZWwvc2lnbmFsZGF0YS9EYmluZm9TY2Fu LmhwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3NpZ25hbGRh dGEvRGJpbmZvU2Nhbi5ocHAJMjAwOS0wNi0yMyAxMTo0Mjo1NyArMDAwMA0KKysr IGIvc3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJuZWwvc2lnbmFsZGF0YS9EYmluZm9T Y2FuLmhwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMjAsMTM2ICsy MCw1NiBAQA0KIA0KIHN0cnVjdCBEYmluZm9TY2FuQ3Vyc29yDQogew0KLSAgVWlu dDMyIGN1cl9yZXF1ZXN0SW5mbzsNCi0gIFVpbnQzMiBjdXJfbm9kZTsNCi0gIFVp bnQzMiBjdXJfYmxvY2s7DQotICBVaW50MzIgY3VyX2l0ZW07DQorICBVaW50MzIg ZGF0YVsxMV07DQogfTsNCiANCi1zdHJ1Y3QgRGJpbmZvU2NhblJlcTsNCi1leHRl cm4gIkMiIHZvaWQgZGJpbmZvX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBkYmluZm9f cmF0ZWxpbWl0ICpybCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBEYmluZm9TY2FuUmVxICopOw0KLQ0KLXN0cnVjdCBEYmlu Zm9TY2FuUmVxDQorc3RydWN0IERiaW5mb1NjYW4NCiB7DQotICAvKiBSZWNpdmVy KHMpICovDQotICBmcmllbmQgY2xhc3MgQmFja3VwOw0KLSAgZnJpZW5kIGNsYXNz IERiYWNjOw0KLSAgZnJpZW5kIGNsYXNzIERiZGljdDsNCi0gIGZyaWVuZCBjbGFz cyBEYmluZm87DQotICBmcmllbmQgY2xhc3MgRGJ0YzsNCi0gIGZyaWVuZCBjbGFz cyBEYnR1cDsNCi0gIGZyaWVuZCBjbGFzcyBEYnR1eDsNCi0gIGZyaWVuZCBjbGFz cyBEYlV0aWw7DQotICBmcmllbmQgY2xhc3MgUW1ncjsNCi0gIGZyaWVuZCBjbGFz cyBTdW1hOw0KLSAgZnJpZW5kIGNsYXNzIFRyaXg7DQotDQotICBmcmllbmQgdm9p ZCBkYmluZm9fcmF0ZWxpbWl0X2luaXQoc3RydWN0IGRiaW5mb19yYXRlbGltaXQg KnJsLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBEYmluZm9TY2FuUmVxICpyKTsNCi0NCi0gIC8qIFNlbmRlcihzKSAqLw0KLSAg ZnJpZW5kIGNsYXNzIE5kYkluZm9TY2FuT3BlcmF0aW9uOw0KLQ0KLSAgZnJpZW5k IGJvb2wgcHJpbnREQklORk9fU0NBTl9SRVEoRklMRSAqIG91dHB1dCwgY29uc3Qg VWludDMyICogdGhlRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFVpbnQzMiBsZW4sIFVpbnQxNiByZWNlaXZlckJsb2NrTm8pOw0KLQ0K ICAgU1RBVElDX0NPTlNUKCBTaWduYWxMZW5ndGggPSAxMiApOw0KLSAgU1RBVElD X0NPTlNUKCBTaWduYWxMZW5ndGhXaXRoQ3Vyc29yID0gMTYgKTsNCiANCi0gIFVp bnQzMiB0YWJsZUlkOyAgICAgICAgIC8vIERCSU5GTyB0YWJsZSBJRA0KLSAgVWlu dDMyIGFwaVJlZjsgICAgICAgICAgLy8gQVBJIGRvaW5nIHNjYW4NCi0gIFVpbnQz MiBhcGlUeG5JZDsgICAgICAgIC8vIElEIHVuaXF1ZSB0byBBUEkuDQotICBVaW50 MzIgc2VuZGVyUmVmOyAgICAgICAvLyBTZW5kZXIsIERCSU5GTyBvciBwcm94eSBm b3IgbXVsdGktdGhyZWFkZWQgYmxvY2sNCi0gIFVpbnQzMiBpbnN0YW5jZTsgICAg ICAgIC8vIEJsb2NrIGluc3RhbmNlIGZvciBtdWx0aS10aHJlYWRlZCBibG9jaw0K LSAgVWludDMyIGNvbEJpdG1hcExvOyAgICAgLy8gYml0bWFwIG9mIHdoYXQgY29s dW1ucyB5b3Ugd2FudC4gKDY0Yml0KQ0KLSAgVWludDMyIGNvbEJpdG1hcEhpOw0K LSAgVWludDMyIHJlcXVlc3RJbmZvOyAgICAgLy8gc3RhcnQsIGVuZG9mZGF0YQ0K LQ0KLSAgU1RBVElDX0NPTlNUKCBTdGFydFNjYW4gID0gMHgxICk7DQotICBTVEFU SUNfQ09OU1QoIEFsbENvbHVtbnMgPSAweDIgKTsNCi0NCi0gIFVpbnQzMiBtYXhS b3dzOw0KLSAgVWludDMyIG1heEJ5dGVzOw0KLSAgVWludDMyIHJvd3NfdG90YWw7 DQotICBVaW50MzIgd29yZF90b3RhbDsNCi0NCi0gIHVuaW9uDQotICB7DQotICAg IFVpbnQzMiBjdXJzb3JkYXRhWzFdOw0KLSAgICBzdHJ1Y3QgRGJpbmZvU2NhbkN1 cnNvciBjdXJzb3I7DQotICB9Ow0KLX07DQotDQotDQotY2xhc3MgRGJpbmZvU2Nh bkNvbmYgew0KLSAgLyogUmVjaXZlcihzKSAqLw0KLSAgZnJpZW5kIGNsYXNzIE5k YkluZm9TY2FuT3BlcmF0aW9uOw0KLQ0KLSAgLyogU2VuZGVyKHMpICovDQotICBm cmllbmQgY2xhc3MgQmFja3VwOw0KLSAgZnJpZW5kIGNsYXNzIERiYWNjOw0KLSAg ZnJpZW5kIGNsYXNzIERiZGljdDsNCi0gIGZyaWVuZCBjbGFzcyBEYmluZm87DQot ICBmcmllbmQgY2xhc3MgRGJ0YzsNCi0gIGZyaWVuZCBjbGFzcyBEYnR1cDsNCi0g IGZyaWVuZCBjbGFzcyBEYnR1eDsNCi0gIGZyaWVuZCBjbGFzcyBEYlV0aWw7DQot ICBmcmllbmQgY2xhc3MgTG9jYWxQcm94eTsNCi0gIGZyaWVuZCBjbGFzcyBRbWdy Ow0KLSAgZnJpZW5kIGNsYXNzIFN1bWE7DQotICBmcmllbmQgY2xhc3MgVHJpeDsN Ci0NCi0gIGZyaWVuZCBib29sIHByaW50REJJTkZPX1NDQU5fQ09ORihGSUxFICog b3V0cHV0LCBjb25zdCBVaW50MzIgKiB0aGVEYXRhLA0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVpbnQzMiBsZW4sIFVpbnQxNiByZWNlaXZl ckJsb2NrTm8pOw0KLQ0KLSAgU1RBVElDX0NPTlNUKCBEb25lTGVuZ3RoID0gMyAp Ow0KLSAgU1RBVElDX0NPTlNUKCBTaWduYWxMZW5ndGggPSAxMiApOw0KLSAgU1RB VElDX0NPTlNUKCBTaWduYWxMZW5ndGhXaXRoQ3Vyc29yID0gMTYgKTsNCisgIC8v IEFQSSBpZGVudGlmaWVycw0KKyAgVWludDMyIHJlc3VsdERhdGE7ICAgICAgLy8g V2lsbCBiZSByZXR1cm5lZCBpbiBUcmFuc0lkQUk6OmNvbm5lY3RQdHINCisgIFVp bnQzMiB0cmFuc0lkWzJdOyAgICAgIC8vIElEIHVuaXF1ZSB0byBBUEkNCisgIFVp bnQzMiByZXN1bHRSZWY7ICAgICAgIC8vIFdoZXJlIHRvIHNlbmQgcmVzdWx0IHJv d3MNCiANCisgIC8vIFBhcmFtZXRlcnMgZm9yIHRoZSBzY2FuDQogICBVaW50MzIg dGFibGVJZDsgICAgICAgICAvLyBEQklORk8gdGFibGUgSUQNCi0gIFVpbnQzMiBh cGlSZWY7ICAgICAgICAgIC8vIEFQSSBkb2luZyBzY2FuDQotICBVaW50MzIgYXBp VHhuSWQ7ICAgICAgICAvLyBJRCB1bmlxdWUgdG8gQVBJLg0KLSAgVWludDMyIHNl bmRlclJlZjsgICAgICAgLy8gU2VuZGVyIG9mIERCSU5GT19TQ0FOUkVRDQotICBV aW50MzIgaW5zdGFuY2U7ICAgICAgICAvLyBCbG9jayBpbnN0YW5jZSBmb3IgbXVs dGktdGhyZWFkZWQgYmxvY2sNCi0gIFVpbnQzMiBjb2xCaXRtYXBMbzsgICAgIC8v IGJpdG1hcCBvZiB3aGF0IGNvbHVtbnMgeW91IHdhbnQuICg2NGJpdCkNCi0gIFVp bnQzMiBjb2xCaXRtYXBIaTsNCi0gIFVpbnQzMiByZXF1ZXN0SW5mbzsgICAgIC8v IHN0YXJ0LCBlbmRvZmRhdGENCi0NCi0gIFNUQVRJQ19DT05TVCggTW9yZURhdGEg ID0gMHgxICk7DQotICBTVEFUSUNfQ09OU1QoIEFsbENvbHVtbnMgPSAweDIgKTsN Ci0NCi0gIFVpbnQzMiBtYXhSb3dzOw0KLSAgVWludDMyIG1heEJ5dGVzOw0KLSAg VWludDMyIHJvd3NfdG90YWw7DQotICBVaW50MzIgd29yZF90b3RhbDsNCisgIFVp bnQzMiBjb2xCaXRtYXBbMl07ICAgICAvLyBiaXRtYXAgb2Ygd2hhdCBjb2x1bW5z IHlvdSB3YW50LiAoNjRiaXQpDQorICBVaW50MzIgcmVxdWVzdEluZm87ICAgICAv LyBmbGFncw0KKyAgVWludDMyIG1heFJvd3M7ICAgICAgICAgLy8gTWF4IG51bWJl ciBvZiByb3dzIHRvIHJldHVybiBwZXIgUkVRDQorICBVaW50MzIgbWF4Qnl0ZXM7 ICAgICAgICAvLyBNYXggbnVtYmVyIG9mIGJ5dGVzIHRvIHJldHVybiBwZXIgUkVR DQorDQorICAvLyBSZXN1bHQgZnJvbSB0aGUgc2Nhbg0KKyAgVWludDMyIHJldHVy bmVkUm93czsgICAgLy8gTnVtYmVyIG9mIHJvd3MgcmV0dXJuZWQgZm9yIHRoaXMg Q09ORg0KKw0KKyAgLy8gQ3Vyc29yIHRoYXQgY29udGFpbnMgZGF0YSB1c2VkIGJ5 IHRoZSBrZXJuZWwgZm9yIGtlZXBpbmcgdHJhY2sNCisgIC8vIG9mIHdoZXJlIGl0 IGlzLCBob3cgbWFueSBieXRlcyBvciByb3dzIGl0IGhhcyBzZW50IGV0Yy4NCisg IC8vIFNldCB0byB6ZXJvIGluIGxhc3QgQ09ORiB0byBpbmRpY2F0ZSB0aGF0IHNj YW4gaXMgZmluaXNoZWQNCisgIFVpbnQzMiBjdXJzb3Jfc3o7DQorICAvLyBDdXJz b3IgZGF0YSBvZiBjdXJzb3Jfc3ogc2l6ZSBmb2xsb3dzDQorICBEYmluZm9TY2Fu Q3Vyc29yIGN1cnNvcjsNCisNCisgIHN0YXRpYyBjb25zdCBVaW50MzIqIGdldEN1 cnNvclB0cihjb25zdCBEYmluZm9TY2FuKiBzaWcpIHsNCisgICAgcmV0dXJuIHNp Zy0+Y3Vyc29yLmRhdGE7DQorICB9DQorICBzdGF0aWMgVWludDMyKiBnZXRDdXJz b3JQdHJTZW5kKERiaW5mb1NjYW4qIHNpZykgew0KKyAgICByZXR1cm4gc2lnLT5j dXJzb3IuZGF0YTsNCisgIH0NCiANCi0gIHVuaW9uDQotICB7DQotICAgIFVpbnQz MiBjdXJzb3JkYXRhWzFdOw0KLSAgICBzdHJ1Y3QgRGJpbmZvU2NhbkN1cnNvciBj dXJzb3I7DQotICB9Ow0KIH07DQogDQotLyoqDQotICogU0VOREVSOiAgREJJTkZP DQotICogUkVDSVZFUjogQVBJLE1HTQ0KLSAqLw0KLWNsYXNzIERiaW5mb1NjYW5S ZWYgew0KLSAgLyogUmVjaXZlcihzKSAqLw0KLSAgZnJpZW5kIGNsYXNzIE5kYklu Zm9TY2FuT3BlcmF0aW9uOw0KLQ0KLSAgLyogU2VuZGVyKHMpICovDQotICBmcmll bmQgY2xhc3MgRGJpbmZvOw0KLSAgZnJpZW5kIGNsYXNzIExvY2FsUHJveHk7DQor dHlwZWRlZiBEYmluZm9TY2FuIERiaW5mb1NjYW5SZXE7DQordHlwZWRlZiBEYmlu Zm9TY2FuIERiaW5mb1NjYW5Db25mOw0KIA0KLSAgZnJpZW5kIGJvb2wgcHJpbnRE QklORk9fU0NBTl9SRUYoRklMRSAqIG91dHB1dCwgY29uc3QgVWludDMyICogdGhl RGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVpbnQz MiBsZW4sIFVpbnQxNiByZWNlaXZlckJsb2NrTm8pOw0KK3N0cnVjdCBEYmluZm9T Y2FuUmVmDQorew0KKyAgU1RBVElDX0NPTlNUKCBTaWduYWxMZW5ndGggPSA1ICk7 DQogDQotICBTVEFUSUNfQ09OU1QoIFNpZ25hbExlbmd0aCA9IDMgKTsNCisgIC8v IEFQSSBpZGVudGlmaWVycw0KKyAgVWludDMyIHJlc3VsdERhdGE7ICAgICAgLy8g V2lsbCBiZSByZXR1cm5lZCBpbiBUcmFuc0lkQUk6OmNvbm5lY3RQdHINCisgIFVp bnQzMiB0cmFuc0lkWzJdOyAgICAgIC8vIElEIHVuaXF1ZSB0byBBUEkNCisgIFVp bnQzMiByZXN1bHRSZWY7ICAgICAgIC8vIFdoZXJlIHRvIHNlbmQgcmVzdWx0IHJv d3MNCiANCi0gIFVpbnQzMiB0YWJsZUlkOyAgICAgICAgIC8vIERCSU5GTyB0YWJs ZSBJRA0KLSAgVWludDMyIGFwaVR4bklkOyAgICAgICAgLy8gSUQgdW5pcXVlIHRv IEFQSS4NCiAgIFVpbnQzMiBlcnJvckNvZGU7ICAgICAgIC8vIEVycm9yIENvZGUN CiAgIGVudW0gRXJyb3JDb2RlDQogICB7DQoNCj09PSBtb2RpZmllZCBmaWxlICdz dG9yYWdlL25kYi9pbmNsdWRlL2tlcm5lbC9zaWduYWxkYXRhL0R1bXBTdGF0ZU9y ZC5ocHAnDQotLS0gYS9zdG9yYWdlL25kYi9pbmNsdWRlL2tlcm5lbC9zaWduYWxk YXRhL0R1bXBTdGF0ZU9yZC5ocHAJMjAwOS0wNS0yNyAxNToyMTo0NSArMDAwMA0K KysrIGIvc3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJuZWwvc2lnbmFsZGF0YS9EdW1w U3RhdGVPcmQuaHBwCTIwMDktMDYtMjQgMjA6NTY6NTEgKzAwMDANCkBAIC0xNzYs NyArMTc2LDYgQEAgcHVibGljOg0KICAgICBEdW1wRGJpbmZvID0gMTQwMDAsDQog ICAgIERiaW5mb0xpc3RUYWJsZXMgPSAxNDAwMSwNCiAgICAgRGJpbmZvTGlzdENv bHVtbnMgPSAxNDAwMiwNCi0gICAgRGJpbmZvU2NhblRhYmxlID0gMTQwMDMsDQog DQogICAgIFNjaGVtYVJlc291cmNlU25hcHNob3QgPSA0MDAwLCAvLyBTYXZlIHJl c291cmNlIGNvbnN1bXB0aW9uDQogICAgIFNjaGVtYVJlc291cmNlQ2hlY2tMZWFr ID0gNDAwMSAvLyBjaGVjayBzYW1lIGFzIHNuYXBzaG90DQoNCj09PSBtb2RpZmll ZCBmaWxlICdzdG9yYWdlL25kYi9pbmNsdWRlL2tlcm5lbC9zaWduYWxkYXRhL1Np Z25hbERhdGEuaHBwJw0KLS0tIGEvc3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJuZWwv c2lnbmFsZGF0YS9TaWduYWxEYXRhLmhwcAkyMDA5LTA2LTE1IDEzOjEyOjE5ICsw MDAwDQorKysgYi9zdG9yYWdlL25kYi9pbmNsdWRlL2tlcm5lbC9zaWduYWxkYXRh L1NpZ25hbERhdGEuaHBwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0y NzksOCArMjc5LDcgQEAgR1NOX1BSSU5UX1NJR05BVFVSRShwcmludEJVSUxEX0lO RFhfSU1QTA0KIEdTTl9QUklOVF9TSUdOQVRVUkUocHJpbnRBUElfVkVSU0lPTl9S RVEpOw0KIEdTTl9QUklOVF9TSUdOQVRVUkUocHJpbnRBUElfVkVSU0lPTl9DT05G KTsNCiANCi1HU05fUFJJTlRfU0lHTkFUVVJFKHByaW50REJJTkZPX1NDQU5fUkVR KTsNCi1HU05fUFJJTlRfU0lHTkFUVVJFKHByaW50REJJTkZPX1NDQU5fQ09ORik7 DQorR1NOX1BSSU5UX1NJR05BVFVSRShwcmludERCSU5GT19TQ0FOKTsNCiBHU05f UFJJTlRfU0lHTkFUVVJFKHByaW50REJJTkZPX1NDQU5fUkVGKTsNCiANCiAjZW5k aWYNCg0KPT09IHJlbW92ZWQgZmlsZSAnc3RvcmFnZS9uZGIvaW5jbHVkZS9uZGJp bmZvLmgnDQotLS0gYS9zdG9yYWdlL25kYi9pbmNsdWRlL25kYmluZm8uaAkyMDA5 LTA2LTIzIDE0OjA3OjU4ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9pbmNsdWRl L25kYmluZm8uaAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwDQpAQCAtMSwxMzkg KzAsMCBAQA0KLS8qIENvcHlyaWdodCAoQykgMjAwNyBNeVNRTCBBQg0KLQ0KLSAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkN Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2Yg dGhlIExpY2Vuc2UuDQotDQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQotICAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YNCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQotICAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCi0NCi0gICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQ0KLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQotICAgRm91bmRhdGlvbiwgSW5jLiwg NTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEz MDcgIFVTQSAqLw0KLQ0KLSNpbmNsdWRlIDxuZGJfdHlwZXMuaD4NCi0NCi0jaWZu ZGVmIF9fTkRCSU5GT19IX18NCi0jZGVmaW5lIF9fTkRCSU5GT19IX18NCi0NCi0j aWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0NCi0j ZGVmaW5lIE5EQklORk9fVFlQRV9TVFJJTkcgMQ0KLSNkZWZpbmUgTkRCSU5GT19U WVBFX05VTUJFUiAyDQotDQotc3RydWN0IG5kYmluZm9fY29sdW1uIHsNCi0gIGNo YXIgbmFtZVs1MF07DQotICBpbnQgY29sdHlwZTsNCi19Ow0KLQ0KLSNkZWZpbmUg TkRCSU5GT19UQUJMRV9NRU1CRVJTIFwNCi0gIGNoYXIgbmFtZVs1MF07IFwNCi0g IGludCBuY29sczsgXA0KLSAgaW50IGZsYWdzOw0KLQ0KLXN0cnVjdCBuZGJpbmZv X3RhYmxlIHsNCi0gIE5EQklORk9fVEFCTEVfTUVNQkVSUw0KLSAgc3RydWN0IG5k YmluZm9fY29sdW1uIGNvbFsxXTsNCi19Ow0KLQ0KLSNkZWZpbmUgREVDTEFSRV9O REJJTkZPX1RBQkxFKHZhciwgbnVtKSAgICAgICAgIFwNCi1zdHJ1Y3QgbmRiaW5m b3N0cnVjdCMjdmFyIHsgICAgICAgICAgICAgICAgICAgICBcDQotICBOREJJTkZP X1RBQkxFX01FTUJFUlMgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgc3Ry dWN0IG5kYmluZm9fY29sdW1uIGNvbFtudW1dOyAgICAgICAgICAgICAgIFwNCi19 IHZhcg0KLQ0KLWludCBuZGJpbmZvX2NyZWF0ZV9zcWwoc3RydWN0IG5kYmluZm9f dGFibGUgKnQsIGNoYXIqIHNxbCwgaW50IGxlbik7DQotDQotc3RhdGljIGlubGlu ZSBjb25zdCBjaGFyKiBuZGJpbmZvX2NvbHR5cGVfdG9fc3RyaW5nKGludCBjb2x0 eXBlKQ0KLXsNCi0gIHN0YXRpYyBjb25zdCBjaGFyKiBuZGJpbmZvX3R5cGVfc3Ry aW5nW109IHsiTk9ORSIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlZBUkNIQVIoNTEyKSIsDQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklOVCBVTlNJR05FRCINCi0g IH07DQotDQotICBpZihjb2x0eXBlPjMpDQotICAgIGNvbHR5cGU9IDA7DQotDQot ICByZXR1cm4gbmRiaW5mb190eXBlX3N0cmluZ1tjb2x0eXBlXTsNCi19DQotDQot c3RydWN0IGRiaW5mb19yb3cgew0KLSAgVWludDMyKiBidWY7ICAgICAgLy8gU3Rh cnQgb2Ygcm93IGJ1ZmZlcg0KLSAgVWludDMyKiBjdXJyOyAgICAgLy8gQ3VycmVu dCBwb3NpdGlvbiBpbiByb3cgYnVmZmVyDQotICBVaW50MzIqIGVuZDsgICAgICAv LyBMYXN0IHBvc2l0aW9uIGluIGJ1ZmZlcg0KLSAgaW50IGNvbF9jb3VudDsgICAg Ly8gQ3VycmVudCBjb2x1bW4gY291bnRlcg0KLQ0KLSAgVWludDMyIHNpemUodm9p ZCkgY29uc3Qgew0KLSAgICByZXR1cm4gKFVpbnQzMikoY3VyciAtIGJ1Zik7DQot ICB9Ow0KLX07DQotDQotdm9pZCBkYmluZm9fd3JpdGVfcm93X2luaXQoc3RydWN0 IGRiaW5mb19yb3cgKnIsIGNoYXIqIGJ1ZiwgaW50IGxlbik7DQotDQotaW50IGRi aW5mb193cml0ZV9yb3dfY29sdW1uKHN0cnVjdCBkYmluZm9fcm93ICpyLCBjb25z dCBjaGFyKiBjb2wsIGludCBjbGVuKTsNCi0NCi1pbnQgZGJpbmZvX3dyaXRlX3Jv d19jb2x1bW5fdWludDMyKHN0cnVjdCBkYmluZm9fcm93ICpyLCBVaW50MzIgdmFs dWUpOw0KLQ0KLS8qDQotICogV2UgbmVlZCB0byBjYWxsIHByb3RlY3RlZCBmdW5j dGlvbiBvZiBTaW11bGF0ZWRCbG9jayAoc2VuZFNpZ25hbCkNCi0gKiBzbyBlYXNp ZXIgdG8gaW1wbGVtZW50IGFzIG1hY3JvLi4uDQotICovDQotI2RlZmluZSBkYmlu Zm9fc2VuZF9yb3coc2lnbmFsLCByLCBybCwgYXBpVHhuSWQsIHNlbmRlclJlZikg ICAgICAgICAgICAgXA0KLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIFRy YW5zSWRBSSAqdGlkYWk9IChUcmFuc0lkQUkqKXNpZ25hbC0+Z2V0RGF0YVB0clNl bmQoKTsgICAgICAgICAgICAgICBcDQotICB0aWRhaS0+Y29ubmVjdFB0cj0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XA0KLSAgdGlkYWktPnRyYW5zSWRbMF09IGFwaVR4bklkOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIHRpZGFpLT50cmFuc0lk WzFdPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcDQotICBMaW5lYXJTZWN0aW9uUHRyIHB0clszXTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgcHRyWzBd LnAgPSByLmJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCi0gIHB0clswXS5zeiA9IHIuc2l6ZSgpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQot ICBybC5yb3dzKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgcmwuYnl0ZXMgKz0gci5zaXpl KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwNCi0gIHNlbmRTaWduYWwoc2VuZGVyUmVmLCBHU05fREJJTkZPX1RSQU5T SURfQUksIHNpZ25hbCwgMywgSkJCLCBwdHIsIDEpOyBcDQotfSB3aGlsZSAoMCkN Ci0NCi0jZGVmaW5lIGRiaW5mb19yYXRlbGltaXRfc2VuZGNvbmYoc2lnbmFsLCBy ZXEsIHJsLCBpdGVtbnVtYmVyKSAgICAgICAgICBcDQotICBkbyB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KLSAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9TY2Fu Q29uZiopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOyAgICAgIFwNCi0gIGNvbmYt PnRhYmxlSWQ9IChyZXEpLnRhYmxlSWQ7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcDQotICBjb25mLT5zZW5kZXJSZWY9IChyZXEpLnNl bmRlclJlZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K LSAgY29uZi0+YXBpVHhuSWQ9IChyZXEpLmFwaVR4bklkOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIGNvbmYtPmNvbEJpdG1hcExv PSAocmVxKS5jb2xCaXRtYXBMbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcDQotICBjb25mLT5jb2xCaXRtYXBIaT0gKHJlcSkuY29sQml0bWFwSGk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgY29uZi0+cmVx dWVzdEluZm89IChyZXEpLnJlcXVlc3RJbmZvIHwgRGJpbmZvU2NhbkNvbmY6Ok1v cmVEYXRhOyAgICAgIFwNCi0gIGNvbmYtPmN1cnNvci5jdXJfcmVxdWVzdEluZm89 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICBj b25mLT5jdXJzb3IuY3VyX25vZGU9IGdldE93bk5vZGVJZCgpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXA0KLSAgY29uZi0+Y3Vyc29yLmN1cl9ibG9j az0gbnVtYmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwNCi0gIGNvbmYtPmN1cnNvci5jdXJfaXRlbT0gKGl0ZW1udW1iZXIpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICBjb25mLT5tYXhSb3dz PSAocmwpLm1heFJvd3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KLSAgY29uZi0+bWF4Qnl0ZXM9IChybCkubWF4Qnl0ZXM7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIGNvbmYt PnJvd3NfdG90YWw9IChybCkucm93c190b3RhbCArIChybCkucm93czsgICAgICAg ICAgICAgICAgICAgICAgICBcDQotICBjb25mLT53b3JkX3RvdGFsPSAocmwpLmJ5 dGVzX3RvdGFsKyAocmwpLmJ5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgXA0K LSAgc2VuZFNpZ25hbCgocmVxKS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNP TkYsIHNpZ25hbCwgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgRGJpbmZv U2NhbkNvbmY6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IsIEpCQik7ICAgICAgICAg ICAgICBcDQotfSB3aGlsZSAoMCkNCi0NCi0NCi1zdHJ1Y3QgZGJpbmZvX3JhdGVs aW1pdCB7DQotICBVaW50MzIgbWF4Um93czsNCi0gIFVpbnQzMiBtYXhCeXRlczsN Ci0gIFVpbnQzMiByb3dzX3RvdGFsOw0KLSAgVWludDMyIGJ5dGVzX3RvdGFsOw0K LSAgVWludDMyIHJvd3M7DQotICBVaW50MzIgYnl0ZXM7DQotfTsNCi0NCi1zdHJ1 Y3QgRGJpbmZvU2NhblJlcTsNCi12b2lkIGRiaW5mb19yYXRlbGltaXRfaW5pdChz dHJ1Y3QgZGJpbmZvX3JhdGVsaW1pdCAqcmwsIHN0cnVjdCBEYmluZm9TY2FuUmVx ICopOw0KLQ0KLWludCBkYmluZm9fcmF0ZWxpbWl0X2NvbnRpbnVlKHN0cnVjdCBk YmluZm9fcmF0ZWxpbWl0ICpybCk7DQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQot fQ0KLSNlbmRpZg0KLQ0KLSNlbmRpZg0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3Rv cmFnZS9uZGIvc3JjL2NvbW1vbi9kZWJ1Z2dlci9zaWduYWxkYXRhL0RiaW5mb1Nj YW4uY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi9kZWJ1Z2dlci9z aWduYWxkYXRhL0RiaW5mb1NjYW4uY3BwCTIwMDktMDYtMTUgMTM6MTI6MTkgKzAw MDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vZGVidWdnZXIvc2lnbmFs ZGF0YS9EYmluZm9TY2FuLmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpA QCAtMTksNTIgKzE5LDQzIEBADQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvRGJpbmZv U2Nhbi5ocHA+DQogDQogYm9vbA0KLXByaW50REJJTkZPX1NDQU5fUkVRKEZJTEUq IG91dHB1dCwgY29uc3QgVWludDMyKiB0aGVEYXRhLCBVaW50MzIgbGVuLCBVaW50 MTYpDQorcHJpbnREQklORk9fU0NBTihGSUxFKiBvdXRwdXQsIGNvbnN0IFVpbnQz MiogdGhlRGF0YSwgVWludDMyIGxlbiwgVWludDE2KQ0KIHsNCi0gIGNvbnN0IERi aW5mb1NjYW5SZXEqIHNpZyA9IChjb25zdCBEYmluZm9TY2FuUmVxKil0aGVEYXRh Ow0KLSAgZnByaW50ZihvdXRwdXQsICIgdGFibGVJZDogJXUiLCBzaWctPnRhYmxl SWQpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgYXBpUmVmOiAweCV4Iiwgc2lnLT5h cGlSZWYpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgYXBpVHhuSWQ6ICV1Iiwgc2ln LT5hcGlUeG5JZCk7DQotICBmcHJpbnRmKG91dHB1dCwgIiBzZW5kZXJSZWY6IDB4 JXgiLCBzaWctPnNlbmRlclJlZik7DQotICBmcHJpbnRmKG91dHB1dCwgIiBpbnN0 YW5jZTogJXUiLCBzaWctPmluc3RhbmNlKTsNCi0gIGZwcmludGYob3V0cHV0LCAi IGNvbEJpdG1hcExvOiAweCV4Iiwgc2lnLT5jb2xCaXRtYXBMbyk7DQotICBmcHJp bnRmKG91dHB1dCwgIiBjb2xCaXRtYXBIaTogMHgleCIsIHNpZy0+Y29sQml0bWFw SGkpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgcmVxdWVzdEluZm86ICV1Iiwgc2ln LT5yZXF1ZXN0SW5mbyk7DQotICBmcHJpbnRmKG91dHB1dCwgIlxuIik7DQotICBm cHJpbnRmKG91dHB1dCwgIiBtYXhSb3dzOiAldSIsIHNpZy0+bWF4Um93cyk7DQot ICBmcHJpbnRmKG91dHB1dCwgIiBtYXhCeXRlczogJXUiLCBzaWctPm1heEJ5dGVz KTsNCi0gIGZwcmludGYob3V0cHV0LCAiIHJvd3NfdG90YWw6ICV1Iiwgc2lnLT5y b3dzX3RvdGFsKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIHdvcmRfdG90YWw6ICV1 Iiwgc2lnLT53b3JkX3RvdGFsKTsNCisgIGNvbnN0IERiaW5mb1NjYW4qIHNpZyA9 IChjb25zdCBEYmluZm9TY2FuKil0aGVEYXRhOw0KKyAgZnByaW50ZihvdXRwdXQs ICIgcmVzdWx0RGF0YTogMHgleCIsIHNpZy0+cmVzdWx0RGF0YSk7DQorICBmcHJp bnRmKG91dHB1dCwgIiB0cmFuc2lkOiB7IDB4JXgsIDB4JXh9Iiwgc2lnLT50cmFu c0lkWzBdLCBzaWctPnRyYW5zSWRbMV0pOw0KKyAgZnByaW50ZihvdXRwdXQsICIg cmVzdWx0UmVmOiAweCV4Iiwgc2lnLT5yZXN1bHRSZWYpOw0KICAgZnByaW50Zihv dXRwdXQsICJcbiIpOw0KLSAgcmV0dXJuIHRydWU7DQotfQ0KLQ0KLWJvb2wNCi1w cmludERCSU5GT19TQ0FOX0NPTkYoRklMRSogb3V0cHV0LCBjb25zdCBVaW50MzIq IHRoZURhdGEsIFVpbnQzMiBsZW4sIFVpbnQxNikNCi17DQotICBjb25zdCBEYmlu Zm9TY2FuQ29uZiogc2lnID0gKGNvbnN0IERiaW5mb1NjYW5Db25mKil0aGVEYXRh Ow0KICAgZnByaW50ZihvdXRwdXQsICIgdGFibGVJZDogJXUiLCBzaWctPnRhYmxl SWQpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgYXBpUmVmOiAweCV4Iiwgc2lnLT5h cGlSZWYpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgYXBpVHhuSWQ6ICV1Iiwgc2ln LT5hcGlUeG5JZCk7DQotICBmcHJpbnRmKG91dHB1dCwgIiBzZW5kZXJSZWY6IDB4 JXgiLCBzaWctPnNlbmRlclJlZik7DQotICBmcHJpbnRmKG91dHB1dCwgIiBpbnN0 YW5jZTogJXUiLCBzaWctPmluc3RhbmNlKTsNCi0gIGZwcmludGYob3V0cHV0LCAi IGNvbEJpdG1hcExvOiAweCV4Iiwgc2lnLT5jb2xCaXRtYXBMbyk7DQotICBmcHJp bnRmKG91dHB1dCwgIiBjb2xCaXRtYXBIaTogMHgleCIsIHNpZy0+Y29sQml0bWFw SGkpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgcmVxdWVzdEluZm86ICV1Iiwgc2ln LT5yZXF1ZXN0SW5mbyk7DQorICBmcHJpbnRmKG91dHB1dCwgIiBjb2xCaXRtYXA6 IHsgMHgleCwgMHgleCB9IiwNCisgICAgICAgICAgc2lnLT5jb2xCaXRtYXBbMF0s IHNpZy0+Y29sQml0bWFwWzFdKTsNCisgIGZwcmludGYob3V0cHV0LCAiIHJlcXVl c3RJbmZvOiAweCV4Iiwgc2lnLT5yZXF1ZXN0SW5mbyk7DQogICBmcHJpbnRmKG91 dHB1dCwgIlxuIik7DQogICBmcHJpbnRmKG91dHB1dCwgIiBtYXhSb3dzOiAldSIs IHNpZy0+bWF4Um93cyk7DQogICBmcHJpbnRmKG91dHB1dCwgIiBtYXhCeXRlczog JXUiLCBzaWctPm1heEJ5dGVzKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIHJvd3Nf dG90YWw6ICV1Iiwgc2lnLT5yb3dzX3RvdGFsKTsNCi0gIGZwcmludGYob3V0cHV0 LCAiIHdvcmRfdG90YWw6ICV1Iiwgc2lnLT53b3JkX3RvdGFsKTsNCiAgIGZwcmlu dGYob3V0cHV0LCAiXG4iKTsNCisgIGZwcmludGYob3V0cHV0LCAiIHJldHVybmVk Um93czogJXUiLCBzaWctPnJldHVybmVkUm93cyk7DQorICBmcHJpbnRmKG91dHB1 dCwgIlxuIik7DQorICBmcHJpbnRmKG91dHB1dCwgIiBjdXJzb3Jfc3o6ICV1XG4i LCBzaWctPmN1cnNvcl9zeik7DQorICBjb25zdCBVaW50MzIqIGN1cnNvcl9kYXRh ID0gRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKHNpZyk7DQorICBmcHJpbnRmKG91 dHB1dCwgIiBzZW5kZXJSZWY6IDB4JXggc2F2ZVNlbmRlclJlZjogMHgleFxuIiwN CisgICAgICAgICAgY3Vyc29yX2RhdGFbMF0sIGN1cnNvcl9kYXRhWzFdKTsNCisg IGZwcmludGYob3V0cHV0LCAiIGN1cnJSZWY6IDB4JXggc2F2ZUN1cnJSZWY6IDB4 JXggZmxhZ3M6IDB4JXhcbiIsDQorICAgICAgICAgIGN1cnNvcl9kYXRhWzJdLCBj dXJzb3JfZGF0YVszXSwgY3Vyc29yX2RhdGFbNF0pOw0KKyAgZnByaW50ZihvdXRw dXQsICIgZGF0YTogWyAweCV4LCAweCV4LCAweCV4LCAweCV4IF1cbiIsDQorICAg ICAgICAgIGN1cnNvcl9kYXRhWzVdLCBjdXJzb3JfZGF0YVs2XSwgY3Vyc29yX2Rh dGFbN10sIGN1cnNvcl9kYXRhWzhdKTsNCisgIGZwcmludGYob3V0cHV0LCAiIHRv dGFsUm93czogJXUgdG90YWxCeXRlczogJXVcbiIsDQorICAgICAgICAgIGN1cnNv cl9kYXRhWzldLCBjdXJzb3JfZGF0YVsxMF0pOw0KICAgcmV0dXJuIHRydWU7DQog fQ0KIA0KIGJvb2wgcHJpbnREQklORk9fU0NBTl9SRUYoRklMRSogb3V0cHV0LCBj b25zdCBVaW50MzIqIHRoZURhdGEsIFVpbnQzMiBsZW4sIFVpbnQxNikNCiB7DQog ICBjb25zdCBEYmluZm9TY2FuUmVmKiBzaWcgPSAoY29uc3QgRGJpbmZvU2NhblJl ZiopdGhlRGF0YTsNCi0gIGZwcmludGYob3V0cHV0LCAiIHRhYmxlSWQ6ICV1Iiwg c2lnLT50YWJsZUlkKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIGFwaVR4bklkOiAl dSIsIHNpZy0+YXBpVHhuSWQpOw0KKyAgZnByaW50ZihvdXRwdXQsICIgcmVzdWx0 RGF0YTogMHgleCIsIHNpZy0+cmVzdWx0RGF0YSk7DQorICBmcHJpbnRmKG91dHB1 dCwgIiB0cmFuc2lkOiB7IDB4JXgsIDB4JXh9Iiwgc2lnLT50cmFuc0lkWzBdLCBz aWctPnRyYW5zSWRbMV0pOw0KKyAgZnByaW50ZihvdXRwdXQsICIgcmVzdWx0UmVm OiAweCV4Iiwgc2lnLT5yZXN1bHRSZWYpOw0KKyAgZnByaW50ZihvdXRwdXQsICJc biIpOw0KICAgZnByaW50ZihvdXRwdXQsICIgZXJyb3JDb2RlOiAldSIsIHNpZy0+ ZXJyb3JDb2RlKTsNCiAgIGZwcmludGYob3V0cHV0LCAiXG4iKTsNCiAgIHJldHVy biB0cnVlOw0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2Nv bW1vbi9kZWJ1Z2dlci9zaWduYWxkYXRhL1NpZ25hbERhdGFQcmludC5jcHAnDQot LS0gYS9zdG9yYWdlL25kYi9zcmMvY29tbW9uL2RlYnVnZ2VyL3NpZ25hbGRhdGEv U2lnbmFsRGF0YVByaW50LmNwcAkyMDA5LTA2LTE1IDEzOjEyOjE5ICswMDAwDQor KysgYi9zdG9yYWdlL25kYi9zcmMvY29tbW9uL2RlYnVnZ2VyL3NpZ25hbGRhdGEv U2lnbmFsRGF0YVByaW50LmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpA QCAtMjUxLDggKzI1MSw4IEBAIFNpZ25hbERhdGFQcmludEZ1bmN0aW9uc1tdID0g ew0KICAgLHsgR1NOX0FQSV9WRVJTSU9OX1JFUSwgcHJpbnRBUElfVkVSU0lPTl9S RVEgfQ0KICAgLHsgR1NOX0FQSV9WRVJTSU9OX0NPTkYsIHByaW50QVBJX1ZFUlNJ T05fQ09ORiB9DQogDQotICAseyBHU05fREJJTkZPX1NDQU5SRVEsIHByaW50REJJ TkZPX1NDQU5fUkVRIH0NCi0gICx7IEdTTl9EQklORk9fU0NBTkNPTkYsIHByaW50 REJJTkZPX1NDQU5fQ09ORiB9DQorICAseyBHU05fREJJTkZPX1NDQU5SRVEsIHBy aW50REJJTkZPX1NDQU4gfQ0KKyAgLHsgR1NOX0RCSU5GT19TQ0FOQ09ORiwgcHJp bnREQklORk9fU0NBTiB9DQogICAseyBHU05fREJJTkZPX1NDQU5SRUYsIHByaW50 REJJTkZPX1NDQU5fUkVGIH0NCiANCiAgICx7IDAsIDAgfQ0KDQo9PT0gbW9kaWZp ZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi91dGlsL01ha2VmaWxlLmFt Jw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi91dGlsL01ha2VmaWxlLmFt CTIwMDktMDYtMjMgMTE6NTU6NDEgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3Ny Yy9jb21tb24vdXRpbC9NYWtlZmlsZS5hbQkyMDA5LTA3LTAzIDEwOjMxOjMwICsw MDAwDQpAQCAtMjgsOCArMjgsNyBAQCBsaWJnZW5lcmFsX2xhX1NPVVJDRVMgPSBc DQogICAgICAgICAgICAgc3RyZHVwLmMgXA0KICAgICAgICAgICAgIENvbmZpZ1Zh bHVlcy5jcHAgbmRiX2luaXQuY3BwIGJhc2VzdHJpbmdfdnNucHJpbnRmLmMgXA0K ICAgICAgICAgICAgIEJpdG1hc2suY3BwIFwNCi0JICAgIG5kYl9yYW5kLmMgXA0K LQkgICAgbmRiaW5mby5jcHANCisJICAgIG5kYl9yYW5kLmMgDQogDQogSU5DTFVE RVNfTE9DID0gQFpMSUJfSU5DTFVERVNADQogDQoNCj09PSByZW1vdmVkIGZpbGUg J3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vdXRpbC9uZGJpbmZvLmNwcCcNCi0tLSBh L3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vdXRpbC9uZGJpbmZvLmNwcAkyMDA5LTA2 LTIzIDExOjU1OjQxICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMvY29tbW9u L3V0aWwvbmRiaW5mby5jcHAJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMA0KQEAg LTEsNTQgKzAsMCBAQA0KLS8qIENvcHlyaWdodCAoQykgMjAwNyBNeVNRTCBBQg0K LQ0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQotICAgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkNCi0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UuDQotDQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQotICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YNCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQotICAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCi0NCi0gICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQ0KLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQotICAgRm91bmRhdGlvbiwg SW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAy MTExLTEzMDcgIFVTQSAqLw0KLQ0KLSNpbmNsdWRlIDxzdGRpby5oPg0KLSNpbmNs dWRlIDxzdHJpbmcuaD4NCi0jaW5jbHVkZSA8ZXJybm8uaD4NCi0NCi0jaW5jbHVk ZSA8bmRiX2dsb2JhbC5oPg0KLSNpbmNsdWRlIDxteV9iYXNlLmg+DQotI2luY2x1 ZGUgPG1fc3RyaW5nLmg+IC8qIGZvciBteV9zbnByaW50ZiAqLw0KLQ0KLSNpbmNs dWRlIDxuZGJpbmZvLmg+DQotDQotaW50IG5kYmluZm9fY3JlYXRlX3NxbChzdHJ1 Y3QgbmRiaW5mb190YWJsZSAqdCwgY2hhciogc3FsLCBpbnQgbGVuKQ0KLXsNCi0g IGludCBpOw0KLQ0KLSAgbXlfc25wcmludGYoc3FsLGxlbiwiQ1JFQVRFIFRBQkxF IGAlc2AgKCIsIHQtPm5hbWUpOw0KLQ0KLSAgbGVuLT1zdHJsZW4oc3FsKTsNCi0g IHNxbCs9c3RybGVuKHNxbCk7DQotICBpZihsZW48MCkNCi0gICAgcmV0dXJuIEVO T01FTTsNCi0NCi0gIGZvcihpPTA7aTx0LT5uY29scztpKyspDQotICB7DQotICAg IG15X3NucHJpbnRmKHNxbCxsZW4sIlxuXHRgJXNgICVzLCIsDQotICAgICAgICAg ICAgIHQtPmNvbFtpXS5uYW1lLCBuZGJpbmZvX2NvbHR5cGVfdG9fc3RyaW5nKHQt PmNvbFtpXS5jb2x0eXBlKSk7DQotICAgIGxlbi09c3RybGVuKHNxbCk7DQotICAg IHNxbCs9c3RybGVuKHNxbCk7DQotICAgIGlmKGxlbjwwKQ0KLSAgICAgIHJldHVy biBFTk9NRU07DQotICB9DQotICAqKC0tc3FsKT0nXDAnOw0KLSAgbXlfc25wcmlu dGYoc3FsLGxlbiwiXG4pIEVOR0lORT1OREJJTkZPOyIpOw0KLSAgbGVuLT1zdHJs ZW4oc3FsKTsNCi0gIHNxbCs9c3RybGVuKHNxbCk7DQotICBpZihsZW48MCkNCi0g ICAgcmV0dXJuIEVOT01FTTsNCi0NCi0gIHJldHVybiAwOw0KLX0NCg0KPT09IG1v ZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL0xvY2Fs UHJveHkuY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3Mv TG9jYWxQcm94eS5jcHAJMjAwOS0wNi0xNSAxMzozMTozNyArMDAwMA0KKysrIGIv c3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvTG9jYWxQcm94eS5jcHAJMjAw OS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTk3Nyw2OCArOTc3LDE0MSBAQCBM b2NhbFByb3h5OjpzZW5kRFJPUF9UUklHX0lNUExfQ09ORihTaWduDQogDQogLy8g R1NOX0RCSU5GT19TQ0FOUkVRDQogDQotdm9pZA0KLUxvY2FsUHJveHk6OmV4ZWNE QklORk9fU0NBTlJFUShTaWduYWwqIHNpZ25hbCkNCitib29sDQorTG9jYWxQcm94 eTo6ZmluZF9uZXh0KE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvcikgY29uc3QN CiB7DQotICBTc19EQklORk9fU0NBTlJFUSYgc3MgPSBzc1NlaXplPFNzX0RCSU5G T19TQ0FOUkVRPigxKTsNCisgIGphbSgpOw0KKyAgY29uc3QgVWludDMyIG5vZGUg PSByZWZUb05vZGUoY3Vyc29yLT5jdXJyUmVmKTsNCisgIGNvbnN0IFVpbnQzMiBi bG9jayA9IHJlZlRvTWFpbihjdXJzb3ItPmN1cnJSZWYpOw0KKyAgVWludDMyIGlu c3RhbmNlID0gcmVmVG9JbnN0YW5jZShjdXJzb3ItPmN1cnJSZWYpOw0KIA0KLSAg Y29uc3QgRGJpbmZvU2NhblJlcSogcmVxID0gKGNvbnN0IERiaW5mb1NjYW5SZXEq KXNpZ25hbC0+Z2V0RGF0YVB0cigpOw0KLSAgc3MubV9yZXEgPSAqcmVxOw0KLSAg bmRicmVxdWlyZShzaWduYWwtPmdldExlbmd0aCgpID09IERiaW5mb1NjYW5SZXE6 OlNpZ25hbExlbmd0aCB8fA0KLSAgICAgICAgICAgICBzaWduYWwtPmdldExlbmd0 aCgpID09IERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IpOw0K LSAgc3MubV9sZW4gPSBzaWduYWwtPmdldExlbmd0aCgpOw0KLSAgc2VuZFJFUShz aWduYWwsIHNzKTsNCi19DQorICBuZGJyZXF1aXJlKG5vZGUgPT0gZ2V0T3duTm9k ZUlkKCkpOw0KKyAgbmRicmVxdWlyZShibG9jayA9PSBudW1iZXIoKSk7DQogDQot dm9pZA0KLUxvY2FsUHJveHk6OmV4ZWNEQklORk9fU0NBTkNPTkYoU2lnbmFsKiBz aWduYWwpDQotew0KLSAgU3NfREJJTkZPX1NDQU5SRVEmIHNzID0gc3NGaW5kPFNz X0RCSU5GT19TQ0FOUkVRPigxKTsNCi0gIHJlY3ZDT05GKHNpZ25hbCwgc3MpOw0K KyAgaWYgKGluc3RhbmNlKysgPCBjX3dvcmtlcnMpDQorICB7DQorICAgIGN1cnNv ci0+Y3VyclJlZiA9IG51bWJlclRvUmVmKGJsb2NrLCBpbnN0YW5jZSwgbm9kZSk7 DQorICAgIHJldHVybiB0cnVlOw0KKyAgfQ0KKw0KKyAgY3Vyc29yLT5jdXJyUmVm ID0gbnVtYmVyVG9SZWYoYmxvY2ssIG5vZGUpOw0KKyAgcmV0dXJuIGZhbHNlOw0K IH0NCiANCisNCisNCiB2b2lkDQotTG9jYWxQcm94eTo6c2VuZERCSU5GT19TQ0FO UkVRKFNpZ25hbCogc2lnbmFsLCBVaW50MzIgc3NJZCkNCitMb2NhbFByb3h5Ojpl eGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsKiBzaWduYWwpDQogew0KLSAgU3NfREJJ TkZPX1NDQU5SRVEmIHNzID0gc3NGaW5kPFNzX0RCSU5GT19TQ0FOUkVRPihzc0lk KTsNCisgIGphbUVudHJ5KCk7DQorICBjb25zdCBEYmluZm9TY2FuUmVxKiByZXEg PSAoY29uc3QgRGJpbmZvU2NhblJlcSopIHNpZ25hbC0+Z2V0RGF0YVB0cigpOw0K KyAgVWludDMyIHNpZ25hbF9sZW5ndGggPSBzaWduYWwtPmdldExlbmd0aCgpOw0K KyAgbmRicmVxdWlyZShzaWduYWxfbGVuZ3RoID09IERiaW5mb1NjYW5SZXE6OlNp Z25hbExlbmd0aCtyZXEtPmN1cnNvcl9zeik7DQorDQorICBOZGJpbmZvOjpTY2Fu Q3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAoTmRiaW5mbzo6U2NhbkN1cnNvciopRGJp bmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKHJlcSk7DQorDQorICBpZiAoTmRiaW5mbzo6 U2NhbkN1cnNvcjo6Z2V0SGFzTW9yZURhdGEoY3Vyc29yLT5mbGFncykgJiYNCisg ICAgICBjdXJzb3ItPnNhdmVDdXJyUmVmKQ0KKyAgew0KKyAgICAvKiBDb250aW51 ZSBpbiB0aGUgc2F2ZWQgYmxvY2sgcmVmICovDQorICAgIGN1cnNvci0+Y3VyclJl ZiA9IGN1cnNvci0+c2F2ZUN1cnJSZWY7DQorICAgIGN1cnNvci0+c2F2ZUN1cnJS ZWYgPSAwOw0KKw0KKyAgICAvLyBTZXQgdGhpcyBibG9jayBhcyBzZW5kZXIgYW5k IHJlbWVtYmVyIG9yaWdpbmFsIHNlbmRlcg0KKyAgICBjdXJzb3ItPnNhdmVTZW5k ZXJSZWYgPSBjdXJzb3ItPnNlbmRlclJlZjsNCisgICAgY3Vyc29yLT5zZW5kZXJS ZWYgPSByZWZlcmVuY2UoKTsNCisNCisgICAgc2VuZFNpZ25hbChjdXJzb3ItPmN1 cnJSZWYsIEdTTl9EQklORk9fU0NBTlJFUSwNCisgICAgICAgICAgICAgICBzaWdu YWwsIHNpZ25hbF9sZW5ndGgsIEpCQik7DQorICAgIHJldHVybjsNCisgIH0NCisN CisgIE5kYmluZm86OlNjYW5DdXJzb3I6OnNldEhhc01vcmVEYXRhKGN1cnNvci0+ ZmxhZ3MsIGZhbHNlKTsNCiANCi0gIERiaW5mb1NjYW5SZXEqIHJlcSA9IChEYmlu Zm9TY2FuUmVxKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQotICAqcmVxID0g c3MubV9yZXE7DQotICByZXEtPnNlbmRlclJlZiA9IHJlZmVyZW5jZSgpOw0KLSAg cmVxLT5pbnN0YW5jZSA9IHNzLm1fd29ya2VyOw0KLSAgc2VuZFNpZ25hbCh3b3Jr ZXJSZWYoc3MubV93b3JrZXIpLCBHU05fREJJTkZPX1NDQU5SRVEsDQotICAgICAg ICAgICAgIHNpZ25hbCwgc3MubV9sZW4sIEpCQik7DQorICBpZiAoZmluZF9uZXh0 KGN1cnNvcikpDQorICB7DQorICAgIGphbSgpOw0KKyAgICBuZGJyZXF1aXJlKGN1 cnNvci0+Y3VyclJlZik7DQorICAgIG5kYnJlcXVpcmUoY3Vyc29yLT5zYXZlQ3Vy clJlZiA9PSAwKTsNCisNCisgICAgLy8gU2V0IHRoaXMgYmxvY2sgYXMgc2VuZGVy IGFuZCByZW1lbWJlciBvcmlnaW5hbCBzZW5kZXINCisgICAgY3Vyc29yLT5zYXZl U2VuZGVyUmVmID0gY3Vyc29yLT5zZW5kZXJSZWY7DQorICAgIGN1cnNvci0+c2Vu ZGVyUmVmID0gcmVmZXJlbmNlKCk7DQorDQorICAgIHNlbmRTaWduYWwoY3Vyc29y LT5jdXJyUmVmLCBHU05fREJJTkZPX1NDQU5SRVEsDQorICAgICAgICAgICAgICAg c2lnbmFsLCBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KKyAgICByZXR1cm47DQorICB9 DQorDQorICAvKiBTY2FuIGlzIGRvbmUsIHNlbmQgU0NBTkNPTkYgYmFjayB0byBj YWxsZXIgICovDQorDQorICAvKiBTd2FwIGJhY2sgc2F2ZWQgc2VuZGVyUmVmICov DQorICBjb25zdCBVaW50MzIgc2VuZGVyUmVmID0gY3Vyc29yLT5zZW5kZXJSZWYg PSBjdXJzb3ItPnNhdmVTZW5kZXJSZWY7DQorICBjdXJzb3ItPnNhdmVTZW5kZXJS ZWYgPSAwOw0KKw0KKyAgbmRicmVxdWlyZShjdXJzb3ItPmN1cnJSZWYpOw0KKyAg bmRicmVxdWlyZShjdXJzb3ItPnNhdmVDdXJyUmVmID09IDApOw0KKw0KKyAgbmRi cmVxdWlyZShyZWZUb0luc3RhbmNlKGN1cnNvci0+Y3VyclJlZikgPT0gMCk7DQor ICBzZW5kU2lnbmFsKGN1cnNvci0+c2VuZGVyUmVmLCBHU05fREJJTkZPX1NDQU5D T05GLCBzaWduYWwsIHNpZ25hbF9sZW5ndGgsIEpCQik7DQorICByZXR1cm47DQog fQ0KIA0KIHZvaWQNCi1Mb2NhbFByb3h5OjpzZW5kREJJTkZPX1NDQU5DT05GKFNp Z25hbCogc2lnbmFsLCBVaW50MzIgc3NJZCkNCitMb2NhbFByb3h5OjpleGVjREJJ TkZPX1NDQU5DT05GKFNpZ25hbCogc2lnbmFsKQ0KIHsNCi0gIFNzX0RCSU5GT19T Q0FOUkVRJiBzcyA9IHNzRmluZDxTc19EQklORk9fU0NBTlJFUT4oc3NJZCk7DQor ICBqYW1FbnRyeSgpOw0KICAgY29uc3QgRGJpbmZvU2NhbkNvbmYqIGNvbmYgPSAo Y29uc3QgRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0cigpOw0KLSAg Y29uc3QgVWludDMyIHJlcWxlbmd0aCA9IHNpZ25hbC0+Z2V0TGVuZ3RoKCk7DQot ICBpZiAoIWxhc3RSZXBseShzcykpDQotICAgIHJldHVybjsNCisgIFVpbnQzMiBz aWduYWxfbGVuZ3RoID0gc2lnbmFsLT5nZXRMZW5ndGgoKTsNCisgIG5kYnJlcXVp cmUoc2lnbmFsX2xlbmd0aCA9PSBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3Ro K2NvbmYtPmN1cnNvcl9zeik7DQogDQotICBpZiAoc3MubV9lcnJvciA9PSAwKQ0K KyAgTmRiaW5mbzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86 OlNjYW5DdXJzb3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0cihjb25mKTsNCisN CisgIGlmIChOZGJpbmZvOjpTY2FuQ3Vyc29yOjpnZXRIYXNNb3JlRGF0YShjdXJz b3ItPmZsYWdzKSkNCiAgIHsNCisgICAgLyogVGhlIHVuZGVybHlpbmcgYmxvY2sg d2FudCB0byBjb250aW51ZSAqLw0KICAgICBqYW0oKTsNCi0gICAgRGJpbmZvU2Nh bkNvbmYgKmNvbmYgPSAoRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0 clNlbmQoKTsNCi0gICAgbWVtY3B5KGNvbmYsJnNzLm1fcmVxLCByZXFsZW5ndGgg KiBzaXplb2YoVWludDMyKSk7DQotICAgIGNvbmYtPnJlcXVlc3RJbmZvICY9IH4o RGJpbmZvU2NhbkNvbmY6Ok1vcmVEYXRhKTsNCi0gICAgc2VuZFNpZ25hbChzcy5t X3JlcS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsDQotICAgICAgICAg ICAgICAgc2lnbmFsLCBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3RoV2l0aEN1 cnNvciwgSkJCKTsNCi0gIH0NCi0gIGVsc2UNCisgICAgDQorICAgIC8qIFN3YXAg YmFjayBzYXZlZCBzZW5kZXJSZWYgKi8NCisgICAgY29uc3QgVWludDMyIHNlbmRl clJlZiA9IGN1cnNvci0+c2VuZGVyUmVmID0gY3Vyc29yLT5zYXZlU2VuZGVyUmVm Ow0KKyAgICBjdXJzb3ItPnNhdmVTZW5kZXJSZWYgPSAwOw0KKw0KKyAgICAvKiBT YXZlIGN1cnJSZWYgdG8gY29udGludWUgd2l0aCBzYW1lIGluc3RhbmNlIGFnYWlu ICovDQorICAgIGN1cnNvci0+c2F2ZUN1cnJSZWYgPSBjdXJzb3ItPmN1cnJSZWY7 DQorICAgIGN1cnNvci0+Y3VyclJlZiA9IHJlZmVyZW5jZSgpOw0KKw0KKyAgICBz ZW5kU2lnbmFsKHNlbmRlclJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFs LCBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KKyAgICByZXR1cm47DQorICB9IA0KKyAg DQorICAvKiBUaGUgdW5kZXJseWluZyBibG9jayByZXBvcnRlZCBjb21wbGV0ZWQs IGZpbmQgbmV4dCBpZiBhbnkgKi8NCisgIGlmIChmaW5kX25leHQoY3Vyc29yKSkN CiAgIHsNCiAgICAgamFtKCk7DQotICAgIERiaW5mb1NjYW5SZWYgKnJlZiA9IChE YmluZm9TY2FuUmVmKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQotICAgIHJl Zi0+dGFibGVJZCA9IGNvbmYtPnRhYmxlSWQ7DQotICAgIHJlZi0+YXBpVHhuSWQg PSBjb25mLT5hcGlUeG5JZDsNCi0gICAgcmVmLT5lcnJvckNvZGUgPSBzcy5tX2Vy cm9yOw0KLSAgICBzZW5kU2lnbmFsKHNzLm1fcmVxLnNlbmRlclJlZiwgR1NOX0RC SU5GT19TQ0FOUkVGLCBzaWduYWwsDQotICAgICAgICAgICAgICAgRGJpbmZvU2Nh blJlZjo6U2lnbmFsTGVuZ3RoLCBKQkIpOw0KKw0KKyAgICBuZGJyZXF1aXJlKGN1 cnNvci0+c2VuZGVyUmVmID09IHJlZmVyZW5jZSgpKTsNCisgICAgbmRicmVxdWly ZShjdXJzb3ItPnNhdmVTZW5kZXJSZWYpOyAvLyBTaG91bGQgYWxyZWFkeSBiZSBz ZXQNCisNCisgICAgbmRicmVxdWlyZShjdXJzb3ItPnNhdmVDdXJyUmVmID09IDAp Ow0KKw0KKyAgICBzZW5kU2lnbmFsKGN1cnNvci0+Y3VyclJlZiwgR1NOX0RCSU5G T19TQ0FOUkVRLA0KKyAgICAgICAgICAgICAgIHNpZ25hbCwgc2lnbmFsX2xlbmd0 aCwgSkJCKTsNCisgICAgcmV0dXJuOw0KICAgfQ0KLSAgc3NSZWxlYXNlPFNzX0RC SU5GT19TQ0FOUkVRPihzc0lkKTsNCisNCisgIC8qIFNjYW4gaW4gdGhpcyBibG9j ayBhbmQgaXRzIGluc3RhbmNlcyBhcmUgY29tcGxldGVkICovDQorDQorICAvKiBT d2FwIGJhY2sgc2F2ZWQgc2VuZGVyUmVmICovDQorICBjb25zdCBVaW50MzIgc2Vu ZGVyUmVmID0gY3Vyc29yLT5zZW5kZXJSZWYgPSBjdXJzb3ItPnNhdmVTZW5kZXJS ZWY7DQorICBjdXJzb3ItPnNhdmVTZW5kZXJSZWYgPSAwOw0KKw0KKyAgbmRicmVx dWlyZShjdXJzb3ItPmN1cnJSZWYpOw0KKyAgbmRicmVxdWlyZShjdXJzb3ItPnNh dmVDdXJyUmVmID09IDApOw0KKw0KKyAgc2VuZFNpZ25hbChzZW5kZXJSZWYsIEdT Tl9EQklORk9fU0NBTkNPTkYsIHNpZ25hbCwgc2lnbmFsX2xlbmd0aCwgSkJCKTsN CisgIHJldHVybjsNCiB9DQogDQogQkxPQ0tfRlVOQ1RJT05TKExvY2FsUHJveHkp DQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Js b2Nrcy9Mb2NhbFByb3h5LmhwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJu ZWwvYmxvY2tzL0xvY2FsUHJveHkuaHBwCTIwMDktMDYtMTUgMTM6MzE6MzcgKzAw MDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL0xvY2FsUHJv eHkuaHBwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC01NTYsMjMgKzU1 Niw5IEBAIHByb3RlY3RlZDoNCiAgIHZvaWQgc2VuZERST1BfVFJJR19JTVBMX0NP TkYoU2lnbmFsKiwgVWludDMyIHNzSWQpOw0KIA0KICAgLy8gR1NOX0RCSU5GT19T Q0FOUkVRDQotICBzdHJ1Y3QgU3NfREJJTkZPX1NDQU5SRVEgOiBTc1NlcXVlbnRp YWwgew0KLSAgICBEYmluZm9TY2FuUmVxIG1fcmVxOw0KLSAgICBVaW50MzIgbV9s ZW47DQotICAgIFNzX0RCSU5GT19TQ0FOUkVRKCkgew0KLSAgICAgIG1fc2VuZFJF USA9ICZMb2NhbFByb3h5OjpzZW5kREJJTkZPX1NDQU5SRVE7DQotICAgICAgbV9z ZW5kQ09ORiA9ICZMb2NhbFByb3h5OjpzZW5kREJJTkZPX1NDQU5DT05GOw0KLSAg ICB9DQotICAgIGVudW0geyBwb29sU2l6ZSA9IDMgfTsNCi0gICAgc3RhdGljIFNz UG9vbDxTc19EQklORk9fU0NBTlJFUT4mIHBvb2woTG9jYWxQcm94eSogcHJveHkp IHsNCi0gICAgICByZXR1cm4gcHJveHktPmNfc3NfREJJTkZPX1NDQU5SRVE7DQot ICAgIH0NCi0gIH07DQotICBTc1Bvb2w8U3NfREJJTkZPX1NDQU5SRVE+IGNfc3Nf REJJTkZPX1NDQU5SRVE7DQorICBib29sIGZpbmRfbmV4dChOZGJpbmZvOjpTY2Fu Q3Vyc29yKiBjdXJzb3IpIGNvbnN0Ow0KICAgdm9pZCBleGVjREJJTkZPX1NDQU5S RVEoU2lnbmFsKik7DQotICB2b2lkIHNlbmREQklORk9fU0NBTlJFUShTaWduYWwq LCBVaW50MzIgc3NJZCk7DQogICB2b2lkIGV4ZWNEQklORk9fU0NBTkNPTkYoU2ln bmFsKik7DQotICB2b2lkIHNlbmREQklORk9fU0NBTkNPTkYoU2lnbmFsKiwgVWlu dDMyIHNzSWQpOw0KIH07DQogDQogI2VuZGlmDQoNCj09PSBtb2RpZmllZCBmaWxl ICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9NYWtlZmlsZS5hbScNCi0t LSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL01ha2VmaWxlLmFtCTIw MDktMDUtMjcgMTU6MjE6NDUgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9r ZXJuZWwvYmxvY2tzL01ha2VmaWxlLmFtCTIwMDktMDctMDMgMTA6MzE6MzAgKzAw MDANCkBAIC02NSw3ICs2NSw2IEBAIGxpYmJsb2Nrc19hX1NPVVJDRVMgPSB0c21h bi5jcHAgbGdtYW4uY3ANCiAgIGJhY2t1cC9CYWNrdXBQcm94eS5jcHAgXA0KICAg UmVzdG9yZVByb3h5LmNwcCBcDQogICBkYmluZm8vRGJpbmZvLmNwcCBcDQotICBk YmluZm8vbmRiaW5mb19oZWxwZXJzLmNwcCBcDQogICBkYmxxaC9EYmxxaENvbW1v bi5jcHAgXA0KICAgUGdtYW5Qcm94eS5jcHAgXA0KICAgZGJ0dXAvRGJ0dXBDbGll bnQuY3BwDQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2Vy bmVsL2Jsb2Nrcy9iYWNrdXAvQmFja3VwLmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRi L3NyYy9rZXJuZWwvYmxvY2tzL2JhY2t1cC9CYWNrdXAuY3BwCTIwMDktMDYtMTUg MTM6MzE6MzcgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxv Y2tzL2JhY2t1cC9CYWNrdXAuY3BwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDAN CkBAIC02Myw4ICs2Myw2IEBADQogDQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvRGJp bmZvU2Nhbi5ocHA+DQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvVHJhbnNJZEFJLmhw cD4NCi0jaW5jbHVkZSA8bmRiaW5mby5oPg0KLSNpbmNsdWRlIDxkYmluZm8vbmRi aW5mb190YWJsZWlkcy5oPg0KIA0KICNpbmNsdWRlIDxOZGJUaWNrLmg+DQogI2lu Y2x1ZGUgPGRidHVwL0RidHVwLmhwcD4NCkBAIC02NjAsNTMgKzY1OCw2MiBAQCB2 b2lkIEJhY2t1cDo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqDQogew0KICAg amFtRW50cnkoKTsNCiAgIERiaW5mb1NjYW5SZXEgcmVxPSAqKERiaW5mb1NjYW5S ZXEqKXNpZ25hbC0+dGhlRGF0YTsNCisgIGNvbnN0IE5kYmluZm86OlNjYW5DdXJz b3IqIGN1cnNvciA9DQorICAgIChOZGJpbmZvOjpTY2FuQ3Vyc29yKilEYmluZm9T Y2FuOjpnZXRDdXJzb3JQdHIoJnJlcSk7DQogDQotICBjaGFyIGJ1Zls1MTJdOw0K LSAgc3RydWN0IGRiaW5mb19yYXRlbGltaXQgcmw7DQotICBzdHJ1Y3QgZGJpbmZv X3JvdyByOw0KKyAgTmRiaW5mbzo6UmF0ZWxpbWl0IHJsOw0KIA0KLSAgZGJpbmZv X3JhdGVsaW1pdF9pbml0KCZybCwgJnJlcSk7DQotDQotICBpZihyZXEudGFibGVJ ZCA9PSBOREJJTkZPX0JBQ0tVUF9SRUNPUkRTX1RBQkxFSUQpDQorICBpZihyZXEu dGFibGVJZCA9PSBOZGJpbmZvOjpCQUNLVVBfUkVDT1JEU19UQUJMRUlEKQ0KICAg ew0KKyNpZiAwDQorLy8gVE9ETw0KICAgICBCYWNrdXBSZWNvcmRQdHIgcHRyIExJ TlRfU0VUX1BUUjsNCi0gICAgZm9yKGNfYmFja3Vwcy5maXJzdChwdHIpOyBwdHIu aSAhPSBSTklMOyBjX2JhY2t1cHMubmV4dChwdHIpKQ0KKyAgICBwdHIuaSA9IGN1 cnNvci0+ZGF0YVswXTsNCisgICAgd2hpbGUoY19iYWNrdXBzLmdldChwdHIpKQ0K ICAgICB7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19pbml0KCZyLCBidWYsIHNp emVvZihidWYpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50 MzIoJnIsIGdldE93bk5vZGVJZCgpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93 X2NvbHVtbl91aW50MzIoJnIsIHB0ci5pKTsNCi0gICAgICBkYmluZm9fd3JpdGVf cm93X2NvbHVtbl91aW50MzIoJnIsIHB0ci5wLT5iYWNrdXBJZCk7DQotICAgICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwdHIucC0+bWFzdGVy UmVmKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIs IHB0ci5wLT5jbGllbnRSZWYpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29s dW1uX3VpbnQzMigmciwgcHRyLnAtPnNsYXZlU3RhdGUuZ2V0U3RhdGUoKSk7DQot ICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCAoVWludDMy KXB0ci5wLT5ub09mQnl0ZXMpOyAvLyBUT0RPDQotICAgICAgZGJpbmZvX3dyaXRl X3Jvd19jb2x1bW5fdWludDMyKCZyLCAoVWludDMyKXB0ci5wLT5ub09mUmVjb3Jk cyk7IC8vIFRPRE8NCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50 MzIoJnIsIChVaW50MzIpcHRyLnAtPm5vT2ZMb2dCeXRlcyk7IC8vIFRPRE8NCi0g ICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIChVaW50MzIp cHRyLnAtPm5vT2ZMb2dSZWNvcmRzKTsgLy9UT0RPDQotICAgICAgZGJpbmZvX3dy aXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwdHIucC0+ZXJyb3JDb2RlKTsNCi0g ICAgICBkYmluZm9fc2VuZF9yb3coc2lnbmFsLCByLCBybCwgcmVxLmFwaVR4bklk LCByZXEuYXBpUmVmKTsNCi0gICAgfQ0KLSAgfQ0KLSAgZWxzZSBpZiggcmVxLnRh YmxlSWQgPT0gTkRCSU5GT19CQUNLVVBfUEFSQU1FVEVSU19UQUJMRUlEICkNCi0g IHsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19pbml0KCZyLCBidWYsIHNpemVvZihi dWYpKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBn ZXRPd25Ob2RlSWQoKSk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3Vp bnQzMigmciwgbV9jdXJyX2Rpc2tfd3JpdGVfc3BlZWQpOw0KLSAgICBkYmluZm9f d3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIDQqbV93b3Jkc193cml0dGVuX3Ro aXNfcGVyaW9kKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMy KCZyLCBtX292ZXJmbG93X2Rpc2tfd3JpdGUpOw0KLSAgICBkYmluZm9fd3JpdGVf cm93X2NvbHVtbl91aW50MzIoJnIsIG1fcmVzZXRfZGVsYXlfdXNlZCk7DQotICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgMCk7IC8vIFVuaW50 ZXJlc3RpbmcgbV9yZXNldF9kaXNrX3NwZWVkX3RpbWUpOw0KLSAgICBkYmluZm9f d3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGNfYmFja3VwUG9vbC5nZXRTaXpl KCkpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGNf YmFja3VwRmlsZVBvb2wuZ2V0U2l6ZSgpKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jv d19jb2x1bW5fdWludDMyKCZyLCBjX3RhYmxlUG9vbC5nZXRTaXplKCkpOw0KLSAg ICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGNfdHJpZ2dlclBv b2wuZ2V0U2l6ZSgpKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWlu dDMyKCZyLCBjX2ZyYWdtZW50UG9vbC5nZXRTaXplKCkpOw0KLSAgICBkYmluZm9f d3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGNfcGFnZVBvb2wuZ2V0U2l6ZSgp KTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBjX2Rl ZmF1bHRzLm1fY29tcHJlc3NlZF9iYWNrdXApOw0KLSAgICBkYmluZm9fd3JpdGVf cm93X2NvbHVtbl91aW50MzIoJnIsIGNfZGVmYXVsdHMubV9jb21wcmVzc2VkX2xj cCk7DQotICAgIGRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHIsIHJsLCByZXEuYXBp VHhuSWQsIHJlcS5hcGlSZWYpOw0KKyAgICAgIE5kYmluZm86OlJvdyByb3coc2ln bmFsLCByZXEpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoZ2V0T3duTm9kZUlk KCkpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocHRyLmkpOw0KKyAgICAgIHJv dy53cml0ZV91aW50MzIocHRyLnAtPmJhY2t1cElkKTsNCisgICAgICByb3cud3Jp dGVfdWludDMyKHB0ci5wLT5tYXN0ZXJSZWYpOw0KKyAgICAgIHJvdy53cml0ZV91 aW50MzIocHRyLnAtPmNsaWVudFJlZik7DQorICAgICAgcm93LndyaXRlX3VpbnQz MihwdHIucC0+c2xhdmVTdGF0ZS5nZXRTdGF0ZSgpKTsNCisgICAgICByb3cud3Jp dGVfdWludDMyKChVaW50MzIpcHRyLnAtPm5vT2ZCeXRlcyk7IC8vIFRPRE8NCisg ICAgICByb3cud3JpdGVfdWludDMyKChVaW50MzIpcHRyLnAtPm5vT2ZSZWNvcmRz KTsgLy8gVE9ETw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoKFVpbnQzMilwdHIu cC0+bm9PZkxvZ0J5dGVzKTsgLy8gVE9ETw0KKyAgICAgIHJvdy53cml0ZV91aW50 MzIoKFVpbnQzMilwdHIucC0+bm9PZkxvZ1JlY29yZHMpOyAvL1RPRE8NCisgICAg ICByb3cud3JpdGVfdWludDMyKHB0ci5wLT5lcnJvckNvZGUpOw0KKyAgICAgIG5k YmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwpOw0KKyAgICAgIGNf YmFja3Vwcy5uZXh0KHB0cik7DQorICAgICAgaWYgKHJsLm5lZWRfYnJlYWsocmVx KSkNCisgICAgICB7DQorICAgICAgICBqYW0oKTsNCisgICAgICAgIG5kYmluZm9f c2VuZF9zY2FuX2JyZWFrKHNpZ25hbCwgcmVxLCBybCwgcG9vbCk7DQorICAgICAg ICByZXR1cm47DQorICAgICAgfQ0KKyAgICB9DQorI2VuZGlmDQorICB9DQorICBl bHNlIGlmKHJlcS50YWJsZUlkID09IE5kYmluZm86OkJBQ0tVUF9QQVJBTUVURVJT X1RBQkxFSUQpDQorICB7DQorICAgIE5kYmluZm86OlJvdyByb3coc2lnbmFsLCBy ZXEpOw0KKyAgICByb3cud3JpdGVfdWludDMyKGdldE93bk5vZGVJZCgpKTsNCisg ICAgcm93LndyaXRlX3VpbnQzMihtX2N1cnJfZGlza193cml0ZV9zcGVlZCk7DQor ICAgIHJvdy53cml0ZV91aW50MzIoNCptX3dvcmRzX3dyaXR0ZW5fdGhpc19wZXJp b2QpOw0KKyAgICByb3cud3JpdGVfdWludDMyKG1fb3ZlcmZsb3dfZGlza193cml0 ZSk7DQorICAgIHJvdy53cml0ZV91aW50MzIobV9yZXNldF9kZWxheV91c2VkKTsN CisgICAgcm93LndyaXRlX3VpbnQzMigwKTsgLy8gVW5pbnRlcmVzdGluZyBtX3Jl c2V0X2Rpc2tfc3BlZWRfdGltZSk7DQorICAgIHJvdy53cml0ZV91aW50MzIoY19i YWNrdXBQb29sLmdldFNpemUoKSk7DQorICAgIHJvdy53cml0ZV91aW50MzIoY19i YWNrdXBGaWxlUG9vbC5nZXRTaXplKCkpOw0KKyAgICByb3cud3JpdGVfdWludDMy KGNfdGFibGVQb29sLmdldFNpemUoKSk7DQorICAgIHJvdy53cml0ZV91aW50MzIo Y190cmlnZ2VyUG9vbC5nZXRTaXplKCkpOw0KKyAgICByb3cud3JpdGVfdWludDMy KGNfZnJhZ21lbnRQb29sLmdldFNpemUoKSk7DQorICAgIHJvdy53cml0ZV91aW50 MzIoY19wYWdlUG9vbC5nZXRTaXplKCkpOw0KKyAgICByb3cud3JpdGVfdWludDMy KGNfZGVmYXVsdHMubV9jb21wcmVzc2VkX2JhY2t1cCk7DQorICAgIHJvdy53cml0 ZV91aW50MzIoY19kZWZhdWx0cy5tX2NvbXByZXNzZWRfbGNwKTsNCisgICAgbmRi aW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93LCBybCk7DQogICB9DQotICBl bHNlIGlmKCByZXEudGFibGVJZCA9PSBOREJJTkZPX1BPT0xTX1RBQkxFSUQgKQ0K KyAgZWxzZSBpZihyZXEudGFibGVJZCA9PSBOZGJpbmZvOjpQT09MU19UQUJMRUlE KQ0KICAgew0KICAgICBzdHJ1Y3Qgew0KICAgICAgIGNvbnN0IGNoYXIqIHBvb2xu YW1lOw0KQEAgLTczNSwyNSArNzQyLDMwIEBAIHZvaWQgQmFja3VwOjpleGVjREJJ TkZPX1NDQU5SRVEoU2lnbmFsICoNCiAgICAgICAgICAgeyBOVUxMLCAwLCAwfQ0K ICAgICAgICAgfTsNCiANCisgICAgVWludDMyIHBvb2wgPSBjdXJzb3ItPmRhdGFb MF07DQogICAgIEJsb2NrTnVtYmVyIGJuID0gYmxvY2tUb01haW4obnVtYmVyKCkp Ow0KLSAgICBmb3IoaW50IGk9MDsgcG9vbHNbaV0ucG9vbG5hbWU7IGkrKykNCisg ICAgd2hpbGUocG9vbHNbcG9vbF0ucG9vbG5hbWUpDQogICAgIHsNCi0gICAgICBk YmluZm9fd3JpdGVfcm93X2luaXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAg ICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgZ2V0T3duTm9k ZUlkKCkpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigm ciwgYm4pOyAgICAgICAgICAgLy8gYmxvY2sgbnVtYmVyDQotICAgICAgZGJpbmZv X3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCByZXEuaW5zdGFuY2UpOyAvLyBi bG9jayBpbnN0YW5jZQ0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZy LCBwb29sc1tpXS5wb29sbmFtZSwgc3RybGVuKHBvb2xzW2ldLnBvb2xuYW1lKSk7 DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29s c1tpXS5mcmVlKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50 MzIoJnIsIHBvb2xzW2ldLnNpemUpOw0KLSAgICAgIGRiaW5mb19zZW5kX3Jvdyhz aWduYWwsIHIsIHJsLCByZXEuYXBpVHhuSWQsIHJlcS5hcGlSZWYpOw0KKyAgICAg IGphbSgpOw0KKyAgICAgIE5kYmluZm86OlJvdyByb3coc2lnbmFsLCByZXEpOw0K KyAgICAgIHJvdy53cml0ZV91aW50MzIoZ2V0T3duTm9kZUlkKCkpOw0KKyAgICAg IHJvdy53cml0ZV91aW50MzIoYm4pOyAgICAgICAgICAgLy8gYmxvY2sgbnVtYmVy DQorICAgICAgcm93LndyaXRlX3VpbnQzMihpbnN0YW5jZSgpKTsgLy8gYmxvY2sg aW5zdGFuY2UNCisgICAgICByb3cud3JpdGVfc3RyaW5nKHBvb2xzW3Bvb2xdLnBv b2xuYW1lKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKHBvb2xzW3Bvb2xdLmZy ZWUpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocG9vbHNbcG9vbF0uc2l6ZSk7 DQorICAgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93LCBybCk7 DQorICAgICAgcG9vbCsrOw0KKyAgICAgIGlmIChybC5uZWVkX2JyZWFrKHJlcSkp DQorICAgICAgew0KKyAgICAgICAgamFtKCk7DQorICAgICAgICBuZGJpbmZvX3Nl bmRfc2Nhbl9icmVhayhzaWduYWwsIHJlcSwgcmwsIHBvb2wpOw0KKyAgICAgICAg cmV0dXJuOw0KKyAgICAgIH0NCiAgICAgfQ0KICAgfQ0KIA0KLSAgRGJpbmZvU2Nh bkNvbmYgKmNvbmY9IChEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRy U2VuZCgpOw0KLSAgbWVtY3B5KGNvbmYsJnJlcSwgRGJpbmZvU2NhblJlcTo6U2ln bmFsTGVuZ3RoV2l0aEN1cnNvciAqIHNpemVvZihVaW50MzIpKTsNCi0gIGNvbmYt PnJlcXVlc3RJbmZvICY9IH4oRGJpbmZvU2NhbkNvbmY6Ok1vcmVEYXRhKTsNCi0g IHNlbmRTaWduYWwocmVxLnNlbmRlclJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwN Ci0gICAgICAgICAgICAgc2lnbmFsLCBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVu Z3RoV2l0aEN1cnNvciwgSkJCKTsNCisgIG5kYmluZm9fc2VuZF9zY2FuX2NvbmYo c2lnbmFsLCByZXEsIHJsKTsNCiB9DQogDQogYm9vbA0KDQo9PT0gbW9kaWZpZWQg ZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJhY2MvRGJhY2NN YWluLmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2Ri YWNjL0RiYWNjTWFpbi5jcHAJMjAwOS0wNi0xNSAxMzozMTozNyArMDAwMA0KKysr IGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJhY2MvRGJhY2NNYWlu LmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMzYsMTIgKzM2LDYg QEANCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9UcmFuc0lkQUkuaHBwPg0KICNpbmNs dWRlIDxLZXlEZXNjcmlwdG9yLmhwcD4NCiANCi0jaW5jbHVkZSA8bmRiaW5mby5o Pg0KLSNpbmNsdWRlIDxkYmluZm8vbmRiaW5mb190YWJsZWlkcy5oPg0KLQ0KLS8v IFRPX0RPX1JPTk0gaXMgYSBsYWJlbCBmb3IgY29tbWVudHMgb24gd2hhdCBuZWVk cyB0byBiZSBpbXByb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMNCi0vLyB3aGVuIG1v cmUgdGltZSBpcyBnaXZlbi4NCi0NCiAjaWZkZWYgVk1fVFJBQ0UNCiAjZGVmaW5l IERFQlVHKHgpIG5kYm91dCA8PCAiREJBQ0M6ICI8PCB4IDw8IGVuZGw7DQogI2Vs c2UNCkBAIC04MjI2LDMyICs4MjIwLDIzIEBAIHZvaWQgRGJhY2M6OmV4ZWNEQklO Rk9fU0NBTlJFUShTaWduYWwgKnMNCiAgIGphbUVudHJ5KCk7DQogICBEYmluZm9T Y2FuUmVxIHJlcT0gKihEYmluZm9TY2FuUmVxKilzaWduYWwtPnRoZURhdGE7DQog DQotICBjaGFyIGJ1Zls1MTJdOw0KLSAgc3RydWN0IGRiaW5mb19yYXRlbGltaXQg cmw7DQotICBzdHJ1Y3QgZGJpbmZvX3JvdyByOw0KLQ0KLSAgZGJpbmZvX3JhdGVs aW1pdF9pbml0KCZybCwgJnJlcSk7DQotDQotICBpZihyZXEudGFibGVJZCA9PSBO REJJTkZPX01FTVVTQUdFX1RBQkxFSUQpDQotICB7DQotICAgIGphbSgpOw0KLSAg ICBkYmluZm9fd3JpdGVfcm93X2luaXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0K LSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGdldE93bk5v ZGVJZCgpKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZy LCBibG9ja1RvTWFpbihudW1iZXIoKSkpOy8vIGJsb2NrIG51bWJlcg0KLSAgICBk YmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHJlcS5pbnN0YW5jZSk7 ICAgICAgICAgLy8gYmxvY2sgaW5zdGFuY2UNCi0gICAgZGJpbmZvX3dyaXRlX3Jv d19jb2x1bW4oJnIsICJJbmRleE1lbW9yeSIsIDExKTsNCi0gICAgVWludDMyIHBh Z2Vfc2l6ZV9rYj0gc2l6ZW9mKCpycFBhZ2VwdHIucCk7Ow0KLSAgICBkYmluZm9f d3JpdGVfcm93X2NvbHVtbigmciwgKGNoYXIqKSZwYWdlX3NpemVfa2IsIDQpOyAv LyA4a2INCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBj bm9PZkFsbG9jYXRlZFBhZ2VzKTsgLy8gYWxsb2NlZCBwYWdlcw0KLSAgICBkYmlu Zm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGNwYWdlc2l6ZSk7IC8vIG51 bWJlciBvZiBwYWdlcw0KLSAgICBkYmluZm9fc2VuZF9yb3coc2lnbmFsLCByLCBy bCwgcmVxLmFwaVR4bklkLCByZXEuYXBpUmVmKTsNCi0gIH0NCi0NCi0gIERiaW5m b1NjYW5Db25mICpjb25mPSAoRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0 YVB0clNlbmQoKTsNCi0gIG1lbWNweShjb25mLCZyZXEsIERiaW5mb1NjYW5SZXE6 OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IgKiBzaXplb2YoVWludDMyKSk7DQotICBj b25mLT5yZXF1ZXN0SW5mbyAmPSB+KERiaW5mb1NjYW5Db25mOjpNb3JlRGF0YSk7 DQotICBzZW5kU2lnbmFsKHJlcS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNP TkYsDQotICAgICAgICAgICAgIHNpZ25hbCwgRGJpbmZvU2NhbkNvbmY6OlNpZ25h bExlbmd0aFdpdGhDdXJzb3IsIEpCQik7DQorICBOZGJpbmZvOjpSYXRlbGltaXQg cmw7DQorDQorICBpZihyZXEudGFibGVJZCA9PSBOZGJpbmZvOjpNRU1VU0FHRV9U QUJMRUlEKQ0KKyAgew0KKyAgICBqYW0oKTsNCisgICAgTmRiaW5mbzo6Um93IHJv dyhzaWduYWwsIHJlcSk7DQorICAgIHJvdy53cml0ZV91aW50MzIoZ2V0T3duTm9k ZUlkKCkpOw0KKyAgICByb3cud3JpdGVfdWludDMyKGJsb2NrVG9NYWluKG51bWJl cigpKSk7IC8vIGJsb2NrIG51bWJlcg0KKyAgICByb3cud3JpdGVfdWludDMyKGlu c3RhbmNlKCkpOyAgICAgICAgICAgIC8vIGJsb2NrIGluc3RhbmNlDQorICAgIHJv dy53cml0ZV9zdHJpbmcoIkluZGV4TWVtb3J5Iik7DQorICAgIHJvdy53cml0ZV91 aW50MzIoc2l6ZW9mKCpycFBhZ2VwdHIucCkpOw0KKyAgICByb3cud3JpdGVfdWlu dDMyKGNub09mQWxsb2NhdGVkUGFnZXMpOyAgIC8vIGFsbG9jZWQgcGFnZXMNCisg ICAgcm93LndyaXRlX3VpbnQzMihjcGFnZXNpemUpOyAgICAgICAgICAgICAvLyBu dW1iZXIgb2YgcGFnZXMNCisgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJl cSwgcm93LCBybCk7DQorICB9DQorDQorICBuZGJpbmZvX3NlbmRfc2Nhbl9jb25m KHNpZ25hbCwgcmVxLCBybCk7DQogfQ0KIA0KIHZvaWQNCg0KPT09IG1vZGlmaWVk IGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiZGljdC9EYmRp Y3QuY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJk aWN0L0RiZGljdC5jcHAJMjAwOS0wNi0xNiAxMjoyNToxOCArMDAwMA0KKysrIGIv c3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJkaWN0L0RiZGljdC5jcHAJ MjAwOS0wNy0wMyAxMDozMzo0NCArMDAwMA0KQEAgLTk5LDggKzk5LDYgQEAgZXh0 ZXJuIEV2ZW50TG9nZ2VyICogZ19ldmVudExvZ2dlcjsNCiANCiAjaW5jbHVkZSA8 c2lnbmFsZGF0YS9EYmluZm9TY2FuLmhwcD4NCiAjaW5jbHVkZSA8c2lnbmFsZGF0 YS9UcmFuc0lkQUkuaHBwPg0KLSNpbmNsdWRlIDxuZGJpbmZvLmg+DQotI2luY2x1 ZGUgPGRiaW5mby9uZGJpbmZvX3RhYmxlaWRzLmg+DQogDQogI2RlZmluZSBaTk9U X0ZPVU5EIDYyNg0KICNkZWZpbmUgWkFMUkVBRFlFWElTVCA2MzANCkBAIC0yNzcs MTUgKzI3NSwxMyBAQCBEYmRpY3Q6OmV4ZWNEVU1QX1NUQVRFX09SRChTaWduYWwq IHNpZ25hDQogdm9pZCBEYmRpY3Q6OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwg KnNpZ25hbCkNCiB7DQogICBEYmluZm9TY2FuUmVxIHJlcT0gKihEYmluZm9TY2Fu UmVxKilzaWduYWwtPnRoZURhdGE7DQotICBjaGFyIGJ1Zls1MTJdOw0KLSAgc3Ry dWN0IGRiaW5mb19yb3cgcjsNCi0gIHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0IHJs Ow0KLQ0KLSAgZGJpbmZvX3JhdGVsaW1pdF9pbml0KCZybCwgJnJlcSk7DQorICBj b25zdCBOZGJpbmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAoTmRiaW5m bzo6U2NhbkN1cnNvciopRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKCZyZXEpOw0K KyAgTmRiaW5mbzo6UmF0ZWxpbWl0IHJsOw0KIA0KICAgamFtRW50cnkoKTsNCiAN Ci0gIGlmKHJlcS50YWJsZUlkID09IE5EQklORk9fUE9PTFNfVEFCTEVJRCkNCisg IGlmKHJlcS50YWJsZUlkID09IE5kYmluZm86OlBPT0xTX1RBQkxFSUQpDQogICB7 DQogICAgIHN0cnVjdCB7DQogICAgICAgY29uc3QgY2hhciogcG9vbG5hbWU7DQpA QCAtMzY4LDI1ICszNjQsMzAgQEAgdm9pZCBEYmRpY3Q6OmV4ZWNEQklORk9fU0NB TlJFUShTaWduYWwgKg0KICAgICAgICAgICB7IE5VTEwsIDAsIDB9DQogICAgICAg ICB9Ow0KIA0KKyAgICBVaW50MzIgcG9vbCA9IGN1cnNvci0+ZGF0YVswXTsNCiAg ICAgQmxvY2tOdW1iZXIgYm4gPSBibG9ja1RvTWFpbihudW1iZXIoKSk7DQotICAg IGZvcihpbnQgaT0wOyBwb29sc1tpXS5wb29sbmFtZTsgaSsrKQ0KKyAgICB3aGls ZShwb29sc1twb29sXS5wb29sbmFtZSkNCiAgICAgew0KLSAgICAgIGRiaW5mb193 cml0ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXplb2YoYnVmKSk7DQotICAgICAgZGJp bmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBnZXRPd25Ob2RlSWQoKSk7 DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBibik7 ICAgICAgICAgICAvLyBibG9jayBudW1iZXINCi0gICAgICBkYmluZm9fd3JpdGVf cm93X2NvbHVtbl91aW50MzIoJnIsIHJlcS5pbnN0YW5jZSk7IC8vIGJsb2NrIGlu c3RhbmNlDQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIHBvb2xz W2ldLnBvb2xuYW1lLCBzdHJsZW4ocG9vbHNbaV0ucG9vbG5hbWUpKTsNCi0gICAg ICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHBvb2xzW2ldLmZy ZWUpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwg cG9vbHNbaV0uc2l6ZSk7DQotICAgICAgZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwg ciwgcmwsIHJlcS5hcGlUeG5JZCwgcmVxLmFwaVJlZik7DQorICAgICAgamFtKCk7 DQorICAgICAgTmRiaW5mbzo6Um93IHJvdyhzaWduYWwsIHJlcSk7DQorICAgICAg cm93LndyaXRlX3VpbnQzMihnZXRPd25Ob2RlSWQoKSk7DQorICAgICAgcm93Lndy aXRlX3VpbnQzMihibik7ICAgICAgICAgICAvLyBibG9jayBudW1iZXINCisgICAg ICByb3cud3JpdGVfdWludDMyKGluc3RhbmNlKCkpOyAvLyBibG9jayBpbnN0YW5j ZQ0KKyAgICAgIHJvdy53cml0ZV9zdHJpbmcocG9vbHNbcG9vbF0ucG9vbG5hbWUp Ow0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocG9vbHNbcG9vbF0uZnJlZSk7DQor ICAgICAgcm93LndyaXRlX3VpbnQzMihwb29sc1twb29sXS5zaXplKTsNCisgICAg ICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCByb3csIHJsKTsNCisgICAg ICBwb29sKys7DQorICAgICAgaWYgKHJsLm5lZWRfYnJlYWsocmVxKSkNCisgICAg ICB7DQorICAgICAgICBqYW0oKTsNCisgICAgICAgIG5kYmluZm9fc2VuZF9zY2Fu X2JyZWFrKHNpZ25hbCwgcmVxLCBybCwgcG9vbCk7DQorICAgICAgICByZXR1cm47 DQorICAgICAgfQ0KICAgICB9DQogICB9DQogDQotICBEYmluZm9TY2FuQ29uZiAq Y29uZj0gKERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7 DQotICBtZW1jcHkoY29uZiwmcmVxLCBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5n dGhXaXRoQ3Vyc29yICogc2l6ZW9mKFVpbnQzMikpOw0KLSAgY29uZi0+cmVxdWVz dEluZm8gJj0gfihEYmluZm9TY2FuQ29uZjo6TW9yZURhdGEpOw0KLSAgc2VuZFNp Z25hbChyZXEuc2VuZGVyUmVmLCBHU05fREJJTkZPX1NDQU5DT05GLA0KLSAgICAg ICAgICAgICBzaWduYWwsIERiaW5mb1NjYW5Db25mOjpTaWduYWxMZW5ndGhXaXRo Q3Vyc29yLCBKQkIpOw0KKyAgbmRiaW5mb19zZW5kX3NjYW5fY29uZihzaWduYWws IHJlcSwgcmwpOw0KIH0NCiANCiANCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3Jh Z2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9DTWFrZUxpc3RzLnR4dCcN Ci0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9DTWFr ZUxpc3RzLnR4dAkyMDA4LTEwLTA4IDA4OjEyOjE4ICswMDAwDQorKysgYi9zdG9y YWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vQ01ha2VMaXN0cy50eHQJ MjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTE4LDcgKzE4LDYgQEAgSU5D TFVERV9ESVJFQ1RPUklFUygke0NNQUtFX1NPVVJDRV9ESVJ9Lw0KIElOQ0xVREUo JHtDTUFLRV9TT1VSQ0VfRElSfS9zdG9yYWdlL25kYi9jb25maWcvdHlwZV9rZXJu ZWwuY21ha2UpDQogDQogQUREX0xJQlJBUlkobmRiZGJpbmZvIFNUQVRJQw0KLQkJ ICAgICAgRGJpbmZvLmNwcA0KLQkJICAgICAgbmRiaW5mb19oZWxwZXJzLmNwcA0K KwlEYmluZm8uY3BwDQogKQ0KIA0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFn ZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL0RiaW5mby5jcHAnDQotLS0g YS9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vRGJpbmZvLmNw cAkyMDA5LTA2LTIzIDE0OjA3OjU4ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9z cmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vRGJpbmZvLmNwcAkyMDA5LTA3LTAzIDEw OjMxOjMwICswMDAwDQpAQCAtMSw0ICsxLDUgQEANCi0vKiBDb3B5cmlnaHQgKEMp IDIwMDcgTXlTUUwgQUINCisvKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBNeVNR TCBBQiwgMjAwOSBTdW4gTWljcm9zeXN0ZW1zIEluYy4NCisgICBBbGwgcmlnaHRz IHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zLg0KIA0K ICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogICAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkNCkBAIC0xNCw3ICsxNSw2IEBADQogICAgRm91bmRhdGlvbiwgSW5jLiwgNTkg VGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcg IFVTQSAqLw0KIA0KICNpbmNsdWRlICJEYmluZm8uaHBwIg0KLSNpbmNsdWRlIDxu ZGJpbmZvLmg+DQogDQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvTm9kZUZhaWxSZXAu aHBwPg0KICNpbmNsdWRlIDxzaWduYWxkYXRhL1JlYWROb2Rlc0NvbmYuaHBwPg0K QEAgLTIyLDkgKzIyLDYgQEANCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9EdW1wU3Rh dGVPcmQuaHBwPg0KICNpbmNsdWRlIDxzaWduYWxkYXRhL0RiaW5mb1NjYW4uaHBw Pg0KICNpbmNsdWRlIDxzaWduYWxkYXRhL1RyYW5zSWRBSS5ocHA+DQotI2luY2x1 ZGUgIm5kYmluZm9fdGFibGVzLmgiDQotI2luY2x1ZGUgIm5kYmluZm9fdGFibGVp ZHMuaCINCi0jaW5jbHVkZSA8QXR0cmlidXRlSGVhZGVyLmhwcD4NCiANCiBVaW50 MzIgZGJpbmZvX2Jsb2Nrc1tdID0geyBEQkFDQywgREJUVVAsIEJBQ0tVUCwgREJU QywgU1VNQSwgREJVVElMLCBUUklYLCBEQlRVWCwgREJESUNULCAwfTsNCiANCkBA IC0zNCw2ICszMSw4IEBAIERiaW5mbzo6RGJpbmZvKEJsb2NrX2NvbnRleHQmIGN0 eCkgOg0KIHsNCiAgIEJMT0NLX0NPTlNUUlVDVE9SKERiaW5mbyk7DQogDQorICBT VEFUSUNfQVNTRVJUKHNpemVvZihEYmluZm9TY2FuQ3Vyc29yKSA9PSBzaXplb2Yo TmRiaW5mbzo6U2NhbkN1cnNvcikpOw0KKw0KICAgY19ub2RlUG9vbC5zZXRTaXpl KE1BWF9OREJfTk9ERVMpOw0KIA0KICAgLyogQWRkIFJlY2VpdmVkIFNpZ25hbHMg Ki8NCkBAIC00NCw4ICs0Myw2IEBAIERiaW5mbzo6RGJpbmZvKEJsb2NrX2NvbnRl eHQmIGN0eCkgOg0KICAgYWRkUmVjU2lnbmFsKEdTTl9EQklORk9fU0NBTlJFUSwg JkRiaW5mbzo6ZXhlY0RCSU5GT19TQ0FOUkVRKTsNCiAgIGFkZFJlY1NpZ25hbChH U05fREJJTkZPX1NDQU5DT05GLCAmRGJpbmZvOjpleGVjREJJTkZPX1NDQU5DT05G KTsNCiANCi0gIGFkZFJlY1NpZ25hbChHU05fREJJTkZPX1RSQU5TSURfQUksICZE YmluZm86OmV4ZWNEQklORk9fVFJBTlNJRF9BSSk7DQotDQogICBhZGRSZWNTaWdu YWwoR1NOX1JFQURfTk9ERVNDT05GLCAmRGJpbmZvOjpleGVjUkVBRF9OT0RFU0NP TkYpOw0KICAgYWRkUmVjU2lnbmFsKEdTTl9OT0RFX0ZBSUxSRVAsICZEYmluZm86 OmV4ZWNOT0RFX0ZBSUxSRVApOw0KICAgYWRkUmVjU2lnbmFsKEdTTl9JTkNMX05P REVSRVEsICZEYmluZm86OmV4ZWNJTkNMX05PREVSRVEpOw0KQEAgLTEwMiw2OCAr OTksNiBAQCB2b2lkIERiaW5mbzo6c2VuZFNUVE9SUlkoU2lnbmFsKiBzaWduYWwp DQogICBzZW5kU2lnbmFsKE5EQkNOVFJfUkVGLCBHU05fU1RUT1JSWSwgc2lnbmFs LCA2LCBKQkIpOw0KIH0NCiANCi0vKg0KLSAqIEV4ZWN1dGluZyBEQklORk9fVFJB TlNJRF9BSSBpcyBvbmx5IGZvciBkZWJ1Z2dpbmcNCi0gKiBXZSB1c2UgdGhpcyBh cyBwYXJ0IG9mIHRoZSBEVU1QIGludGVyZmFjZQ0KLSAqIGFuZCBkdXJpbmcgZGVi dWdnaW5nLg0KLSAqLw0KLXZvaWQgRGJpbmZvOjpleGVjREJJTkZPX1RSQU5TSURf QUkoU2lnbmFsKiBzaWduYWwpDQotew0KLSAgamFtRW50cnkoKTsNCi0gIFRyYW5z SWRBSSAqdGlkYWk9IChUcmFuc0lkQUkqKXNpZ25hbC0+dGhlRGF0YTsNCi0NCi0g IGlmKCFhc3NlbWJsZUZyYWdtZW50cyhzaWduYWwpKXsNCi0gICAgcmV0dXJuOw0K LSAgfQ0KLQ0KLSAgY29uc3QgVWludDMyIHRhYmxlSWQ9IHRpZGFpLT50cmFuc0lk WzBdOw0KLSAgY29uc3QgaW50IG5jb2xzID0gbmRiaW5mb190YWJsZXNbdGFibGVJ ZF0tPm5jb2xzOw0KLQ0KLSAgU2VjdGlvbkhhbmRsZSBoYW5kbGUodGhpcywgc2ln bmFsKTsNCi0gIFNlZ21lbnRlZFNlY3Rpb25QdHIgcHRyOw0KLSAgaGFuZGxlLmdl dFNlY3Rpb24ocHRyLCAwKTsNCi0NCi0gIGNoYXIgcm93YnVmWzEwMjRdOw0KLSAg Y2hhciAqcm93PSByb3didWY7DQotICBjb3B5KChVaW50MzIqKXJvd2J1ZiwgcHRy KTsNCi0NCi0gIC8vVWludDMyIHJvd3N6PSBwdHIuc3o7DQotICBpbnQgbGVuOw0K LQ0KLSAgZm9yKGludCBpPTA7IGk8bmNvbHM7IGkrKykNCi0gIHsNCi0gICAgamFt KCk7DQotICAgIEF0dHJpYnV0ZUhlYWRlciBhaCgqKFVpbnQzMiopcm93KTsNCi0g ICAgcm93Kz1haC5nZXRIZWFkZXJTaXplKCkqc2l6ZW9mKFVpbnQzMik7DQotDQot ICAgIG5kYm91dCA8PCAiQUkgIiA8PCBhaC5nZXRBdHRyaWJ1dGVJZCgpIDw8ICIg IjsNCi0gICAgbGVuPSBhaC5nZXRCeXRlU2l6ZSgpOw0KLSAgICBuZGJvdXQgPDwg Inx8IiA8PCBsZW4gPDwgInx8IiA8PCAiICI7DQotICAgIG5kYm91dCA8PCAiVGFi bGUgIiA8PCB0YWJsZUlkIDw8ICIgOjo6ICI7DQotICAgIHN3aXRjaChuZGJpbmZv X3RhYmxlc1t0YWJsZUlkXS0+Y29sW2ldLmNvbHR5cGUpDQotICAgIHsNCi0gICAg Y2FzZSBOREJJTkZPX1RZUEVfTlVNQkVSOg0KLSAgICAgIGphbSgpOw0KLSAgICAg IG5kYm91dCA8PCAqKFVpbnQzMiopcm93Ow0KLSAgICAgIHJvdys9IGxlbjsNCi0g ICAgICBicmVhazsNCi0gICAgY2FzZSBOREJJTkZPX1RZUEVfU1RSSU5HOg0KLSAg ICAgIGphbSgpOw0KLSAgICAgIGNoYXIgYls1MTJdOw0KLSAgICAgIG1lbWNweShi LHJvdyxsZW4pOw0KLSAgICAgIGJbbGVuXT0wOw0KLSAgICAgIG5kYm91dCA8PCBi Ow0KLSAgICAgIHJvdys9IGxlbjsNCi0gICAgICBicmVhazsNCi0gICAgZGVmYXVs dDoNCi0gICAgICBuZGJhc3NlcnQoZmFsc2UpOw0KLSAgICAgIGJyZWFrOw0KLSAg ICB9Ow0KLSAgICBuZGJvdXQgPDwgZW5kbDsNCi0gIH0NCi0gIHJlbGVhc2VTZWN0 aW9ucyhoYW5kbGUpOw0KLX0NCi0NCiB2b2lkIERiaW5mbzo6ZXhlY0RVTVBfU1RB VEVfT1JEKFNpZ25hbCogc2lnbmFsKQ0KIHsNCiAgIGphbUVudHJ5KCk7DQpAQCAt MTc0LDExICsxMDksMTEgQEAgdm9pZCBEYmluZm86OmV4ZWNEVU1QX1NUQVRFX09S RChTaWduYWwqIA0KICAgICBqYW0oKTsNCiAgICAgbmRib3V0X2MoIi0tLSBCRUdJ TiBOREIkSU5GTy5UQUJMRVMgLS0tIik7DQogICAgIGNoYXIgY3JlYXRlX3NxbFs1 MTJdOw0KLSAgICBmb3IoVWludDMyIGk9MDtpPG51bWJlcl9uZGJpbmZvX3RhYmxl cztpKyspDQorICAgIGZvcihpbnQgaSA9IDA7IGkgPCBOZGJpbmZvOjpnZXROdW1U YWJsZXMoKTsgaSsrKQ0KICAgICB7DQotICAgICAgbmRiaW5mb19jcmVhdGVfc3Fs KG5kYmluZm9fdGFibGVzW2ldLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBj cmVhdGVfc3FsLCBzaXplb2YoY3JlYXRlX3NxbCkpOw0KLSAgICAgIG5kYm91dF9j KCIlZCwlcywlcyIsaSxuZGJpbmZvX3RhYmxlc1tpXS0+bmFtZSxjcmVhdGVfc3Fs KTsNCisgICAgICBjb25zdCBOZGJpbmZvOjpUYWJsZSYgdGFiID0gTmRiaW5mbzo6 Z2V0VGFibGUoaSk7DQorICAgICAgTmRiaW5mbzo6Y3JlYXRlX3NxbCh0YWIsIGNy ZWF0ZV9zcWwsIHNpemVvZihjcmVhdGVfc3FsKSk7DQorICAgICAgbmRib3V0X2Mo IiVkLCVzLCVzIiwgaSwgdGFiLm0ubmFtZSwgY3JlYXRlX3NxbCk7DQogICAgIH0N CiAgICAgbmRib3V0X2MoIi0tLSBFTkQgTkRCJElORk8uVEFCTEVTIC0tLSIpOw0K ICAgICBicmVhazsNCkBAIC0xODYsMzM5ICsxMjEsMzM1IEBAIHZvaWQgRGJpbmZv OjpleGVjRFVNUF9TVEFURV9PUkQoU2lnbmFsKiANCiAgIGNhc2UgRHVtcFN0YXRl T3JkOjpEYmluZm9MaXN0Q29sdW1uczoNCiAgICAgamFtKCk7DQogICAgIG5kYm91 dF9jKCItLS0gQkVHSU4gTkRCJElORk8uQ09MVU1OUyAtLS0iKTsNCi0gICAgZm9y KFVpbnQzMiBpPTA7aTxudW1iZXJfbmRiaW5mb190YWJsZXM7aSsrKQ0KKyAgICBm b3IoaW50IGkgPSAwOyBpIDwgTmRiaW5mbzo6Z2V0TnVtVGFibGVzKCk7IGkrKykN CiAgICAgew0KLSAgICAgIHN0cnVjdCBuZGJpbmZvX3RhYmxlICp0PSBuZGJpbmZv X3RhYmxlc1tpXTsNCisgICAgICBjb25zdCBOZGJpbmZvOjpUYWJsZSYgdGFiID0g TmRiaW5mbzo6Z2V0VGFibGUoaSk7DQogDQotICAgICAgZm9yKGludCBqPTA7ajx0 LT5uY29scztqKyspDQotICAgICAgICBuZGJvdXRfYygiJWQsJWQsJXMsJWQiLGks aix0LT5jb2xbal0ubmFtZSx0LT5jb2xbal0uY29sdHlwZSk7DQorICAgICAgZm9y KGludCBqID0gMDsgaiA8IHRhYi5tLm5jb2xzOyBqKyspDQorICAgICAgICBuZGJv dXRfYygiJWQsJWQsJXMsJWQiLCBpLCBqLA0KKyAgICAgICAgICAgICAgICAgdGFi LmNvbFtqXS5uYW1lLCB0YWIuY29sW2pdLmNvbHR5cGUpOw0KICAgICB9DQogICAg IG5kYm91dF9jKCItLS0gRU5EIE5EQiRJTkZPLkNPTFVNTlMgLS0tIik7DQogICAg IGJyZWFrOw0KIA0KLSAgY2FzZSBEdW1wU3RhdGVPcmQ6OkRiaW5mb1NjYW5UYWJs ZToNCi0gICAgamFtKCk7DQotICAgIGNvbnN0IFVpbnQzMiB0YWJsZUlkPSBzaWdu YWwtPnRoZURhdGFbMV07DQotDQotICAgIERiaW5mb1NjYW5SZXEgKnJlcSA9IChE YmluZm9TY2FuUmVxKilzaWduYWwtPnRoZURhdGE7DQotICAgIHJlcS0+dGFibGVJ ZD0gdGFibGVJZDsNCi0gICAgcmVxLT5zZW5kZXJSZWY9IHJlZmVyZW5jZSgpOw0K LSAgICByZXEtPmFwaVJlZj0gcmVmZXJlbmNlKCk7DQotICAgIHJlcS0+YXBpVHhu SWQ9IHRhYmxlSWQ7DQotICAgIHJlcS0+cmVxdWVzdEluZm89IERiaW5mb1NjYW5S ZXE6OkFsbENvbHVtbnMgfCBEYmluZm9TY2FuUmVxOjpTdGFydFNjYW47DQotICAg IHJlcS0+Y29sQml0bWFwTG89IH4wOw0KLSAgICByZXEtPmNvbEJpdG1hcEhpPSB+ MDsNCi0gICAgcmVxLT5tYXhSb3dzPSAyOw0KLSAgICByZXEtPm1heEJ5dGVzPSAw Ow0KLSAgICByZXEtPnJvd3NfdG90YWw9IDA7DQotICAgIHJlcS0+d29yZF90b3Rh bD0gMDsNCi0NCi0gICAgbmRib3V0X2MoIkJFR0lOIERCSU5GTyBEVU1QIFNDQU4g b24gJXUiLHRhYmxlSWQpOw0KLQ0KLSAgICBzZW5kU2lnbmFsKHJlZmVyZW5jZSgp LCBHU05fREJJTkZPX1NDQU5SRVEsDQotICAgICAgICAgICAgICAgc2lnbmFsLCBE YmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGgsIEpCQik7DQotICAgIGJyZWFrOw0K ICAgfTsNCiB9DQogDQotdm9pZCBEYmluZm86OmV4ZWNEQklORk9fU0NBTlJFUShT aWduYWwgKnNpZ25hbCkNCitVaW50MzIgRGJpbmZvOjpmaW5kX25leHRfbm9kZShV aW50MzIgbm9kZSkgY29uc3QNCiB7DQotICBqYW1FbnRyeSgpOw0KLSAgRGJpbmZv U2NhblJlcSByZXE9ICooRGJpbmZvU2NhblJlcSopc2lnbmFsLT50aGVEYXRhOw0K KyAgbm9kZSsrOw0KKyAgd2hpbGUoIWNfYWxpdmVOb2Rlcy5nZXQobm9kZSkgJiYN CisgICAgICAgIG5vZGUgPCBNQVhfTkRCX05PREVTKQ0KKyAgICAgbm9kZSsrOw0K IA0KLSAgY29uc3QgVWludDMyIHRhYmxlSWQ9IHJlcS50YWJsZUlkOw0KLSAgY29u c3QgVWludDMyIGFwaVJlZj0gcmVxLmFwaVJlZjsNCi0gIGNvbnN0IFVpbnQzMiBz ZW5kZXJSZWY9IHJlcS5zZW5kZXJSZWY7DQotICBjb25zdCBVaW50MzIgYXBpVHhu SWQ9IHJlcS5hcGlUeG5JZDsNCi0gIC8vY29uc3QgVWludDMyIGNvbEJpdG1hcExv PSByZXEuY29sQml0bWFwTG87DQotICAvL2NvbnN0IFVpbnQzMiBjb2xCaXRtYXBI aT0gcmVxLmNvbEJpdG1hcEhpOw0KLSAgLy9jb25zdCBVaW50MzIgcmVxdWVzdElu Zm89IHJlcS5yZXF1ZXN0SW5mbzsNCisgIGlmIChub2RlID09IE1BWF9OREJfTk9E RVMpDQorICAgIHJldHVybiAwOw0KKyAgcmV0dXJuIG5vZGU7DQorfQ0KIA0KLSAg VWludDMyIGk7DQotICBpbnQgajsNCi0gIGludCBzdGFydGlkPSAwOw0KK1VpbnQz MiBEYmluZm86OmZpbmRfbmV4dF9ibG9jayhVaW50MzIgYmxvY2spIGNvbnN0DQor ew0KKyAgaW50IGkgPSAwOw0KKyAgLy8gRmluZCBjdXJyZW50IGJsb2NrcyBwb3Np dGlvbg0KKyAgd2hpbGUgKGRiaW5mb19ibG9ja3NbaV0gIT0gYmxvY2sgJiYNCisg ICAgICAgICBkYmluZm9fYmxvY2tzW2ldICE9IDApDQorICAgIGkrKzsNCiANCi0g IGludCBzdGFydFRhYmxlSWQsIHN0YXJ0Q29sdW1uSWQ7DQorICAvLyBNYWtlIHN1 cmUgY3VycmVudCBibG9jayB3YXMgZm91bmQNCisgIG5kYnJlcXVpcmUoZGJpbmZv X2Jsb2Nrc1tpXSk7DQogDQotICBpbnQgY29udGludWVfc2VuZGluZzsNCisgIC8v IFJldHVybiB0aGUgbmV4dCBibG9jayh3aGljaCBtaWdodCBiZSAwKQ0KKyAgcmV0 dXJuIGRiaW5mb19ibG9ja3NbKytpXTsNCit9DQogDQotICBjaGFyIGJ1ZlsxMDI0 XTsNCi0gIHN0cnVjdCBkYmluZm9fcm93IHI7DQotICBzdHJ1Y3QgZGJpbmZvX3Jh dGVsaW1pdCBybDsNCitib29sIERiaW5mbzo6ZmluZF9uZXh0KE5kYmluZm86OlNj YW5DdXJzb3IqIGN1cnNvcikgY29uc3QNCit7DQorICBVaW50MzIgbm9kZSA9IHJl ZlRvTm9kZShjdXJzb3ItPmN1cnJSZWYpOw0KKyAgVWludDMyIGJsb2NrID0gcmVm VG9CbG9jayhjdXJzb3ItPmN1cnJSZWYpOw0KKyAgY29uc3QgVWludDMyIGluc3Rh bmNlID0gcmVmVG9JbnN0YW5jZShjdXJzb3ItPmN1cnJSZWYpOw0KKyAgbmRicmVx dWlyZShpbnN0YW5jZSA9PSAwKTsNCiANCi0gIHN3aXRjaChyZXEudGFibGVJZCkN CisgIGlmIChibG9jaykNCiAgIHsNCi0gIGNhc2UgTkRCSU5GT19UQUJMRVNfVEFC TEVJRDoNCiAgICAgamFtKCk7DQotDQotICAgIGNoYXIgY3JlYXRlX3NxbFs1MTJd Ow0KLQ0KLSAgICBkYmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCi0N Ci0gICAgaWYoIShyZXEucmVxdWVzdEluZm8gJiBEYmluZm9TY2FuUmVxOjpTdGFy dFNjYW4pKQ0KKyAgICBpZiAoYmxvY2sgPT0gREJJTkZPKQ0KICAgICB7DQogICAg ICAgamFtKCk7DQotICAgICAgc3RhcnRpZD0gcmVxLmN1cnNvci5jdXJfaXRlbTsN Ci0gICAgfQ0KIA0KLSAgICBmb3IoaT1zdGFydGlkO2RiaW5mb19yYXRlbGltaXRf Y29udGludWUoJnJsKSAmJiBpPG51bWJlcl9uZGJpbmZvX3RhYmxlcztpKyspDQot ICAgIHsNCi0gICAgICBqYW0oKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2lu aXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAgICAgIG5kYmluZm9fY3JlYXRl X3NxbChuZGJpbmZvX3RhYmxlc1tpXSwNCi0gICAgICAgICAgICAgICAgICAgICAg ICAgY3JlYXRlX3NxbCwgc2l6ZW9mKGNyZWF0ZV9zcWwpKTsNCi0NCi0gICAgICBk YmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGkpOw0KLSAgICAgIGRi aW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCBuZGJpbmZvX3RhYmxlc1tpXS0+bmFt ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4obmRiaW5m b190YWJsZXNbaV0tPm5hbWUpKzEpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3df Y29sdW1uKCZyLCBjcmVhdGVfc3FsLCBzdHJsZW4oY3JlYXRlX3NxbCkrMSk7DQor ICAgICAgLy8gU3RhcnRpbmcgc2NhbiBvbiB0aGlzIG5vZGUNCisgICAgICBuZGJy ZXF1aXJlKG5vZGUgPT0gZ2V0T3duTm9kZUlkKCkpOw0KIA0KLSAgICAgIGRiaW5m b19zZW5kX3JvdyhzaWduYWwscixybCxhcGlUeG5JZCxhcGlSZWYpOw0KKyAgICAg IC8vIFN0YXJ0IG9uIGZpcnN0IGJsb2NrDQorICAgICAgY3Vyc29yLT5jdXJyUmVm ID0gbnVtYmVyVG9SZWYoZGJpbmZvX2Jsb2Nrc1swXSwgbm9kZSk7DQorICAgICAg cmV0dXJuIHRydWU7DQogICAgIH0NCiANCi0gICAgaWYoIWRiaW5mb19yYXRlbGlt aXRfY29udGludWUoJnJsKSAmJiBpIDwgbnVtYmVyX25kYmluZm9fdGFibGVzKQ0K KyAgICAvLyBGaW5kIG5leHQgYmxvY2sNCisgICAgYmxvY2sgPSBmaW5kX25leHRf YmxvY2soYmxvY2spOw0KKyAgICBpZiAoYmxvY2spDQogICAgIHsNCiAgICAgICBq YW0oKTsNCi0gICAgICBkYmluZm9fcmF0ZWxpbWl0X3NlbmRjb25mKHNpZ25hbCxy ZXEscmwsaSk7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgamFt KCk7DQotICAgICAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9TY2FuQ29u Ziopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgICAgIGNvbmYtPnRhYmxl SWQ9IHJlcS50YWJsZUlkOw0KLSAgICAgIGNvbmYtPnNlbmRlclJlZj0gcmVxLnNl bmRlclJlZjsNCi0gICAgICBjb25mLT5hcGlUeG5JZD0gcmVxLmFwaVR4bklkOw0K LSAgICAgIGNvbmYtPnJlcXVlc3RJbmZvPSAwOw0KLSAgICAgIHNlbmRTaWduYWwo cmVxLnNlbmRlclJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFsLA0KLSAg ICAgICAgICAgICAgICAgRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExlbmd0aCwgSkJC KTsNCisgICAgICBjdXJzb3ItPmN1cnJSZWYgPSBudW1iZXJUb1JlZihibG9jaywg bm9kZSk7DQorICAgICAgcmV0dXJuIHRydWU7DQogICAgIH0NCisgIH0NCiANCi0g ICAgYnJlYWs7DQorICBub2RlID0gZmluZF9uZXh0X25vZGUobm9kZSk7DQorICBp ZiAobm9kZSkNCisgIHsNCisgICAgamFtKCk7DQorICAgIGJsb2NrID0gREJJTkZP Ow0KKyAgICBjdXJzb3ItPmN1cnJSZWYgPSBudW1iZXJUb1JlZihibG9jaywgbm9k ZSk7DQorICAgIHJldHVybiB0cnVlOw0KKyAgfQ0KIA0KLSAgY2FzZSBOREJJTkZP X0NPTFVNTlNfVEFCTEVJRDoNCisgIC8vIE5vIG1vcmUgbm9kZXMgLT4gZG9uZQ0K KyAgY3Vyc29yLT5jdXJyUmVmID0gMDsNCisgIHJldHVybiBmYWxzZTsNCit9DQor DQordm9pZCBEYmluZm86OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwgKnNpZ25h bCkNCit7DQorICBqYW1FbnRyeSgpOw0KKyAgRGJpbmZvU2NhblJlcSogcmVxX3B0 ciA9IChEYmluZm9TY2FuUmVxKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQor ICBjb25zdCBVaW50MzIgc2VuZGVyUmVmID0gc2lnbmFsLT5oZWFkZXIudGhlU2Vu ZGVyc0Jsb2NrUmVmOw0KKw0KKyAgLy8gQ29weSBzaWduYWwgb24gc3RhY2sNCisg IERiaW5mb1NjYW5SZXEgcmVxID0gKnJlcV9wdHI7DQorDQorICBjb25zdCBVaW50 MzIgcmVzdWx0RGF0YSA9IHJlcS5yZXN1bHREYXRhOw0KKyAgY29uc3QgVWludDMy IHRyYW5zSWQwID0gcmVxLnRyYW5zSWRbMF07DQorICBjb25zdCBVaW50MzIgdHJh bnNJZDEgPSByZXEudHJhbnNJZFsxXTsNCisgIGNvbnN0IFVpbnQzMiByZXN1bHRS ZWYgPSByZXEucmVzdWx0UmVmOw0KKw0KKyAgLy8gVmFsaWRhdGUgdGFibGVJZA0K KyAgY29uc3QgVWludDMyIHRhYmxlSWQgPSByZXEudGFibGVJZDsNCisgIGlmICh0 YWJsZUlkID49IE5kYmluZm86OmdldE51bVRhYmxlcygpKQ0KKyAgew0KKyAgICBq YW0oKTsNCisgICAgRGJpbmZvU2NhblJlZiAqcmVmPSAoRGJpbmZvU2NhblJlZiop c2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KKyAgICByZWYtPnJlc3VsdERhdGEg PSByZXN1bHREYXRhOw0KKyAgICByZWYtPnRyYW5zSWRbMF0gPSB0cmFuc0lkMDsN CisgICAgcmVmLT50cmFuc0lkWzFdID0gdHJhbnNJZDE7DQorICAgIHJlZi0+cmVz dWx0UmVmID0gcmVzdWx0UmVmOw0KKyAgICByZWYtPmVycm9yQ29kZT0gRGJpbmZv U2NhblJlZjo6Tm9UYWJsZTsNCisgICAgc2VuZFNpZ25hbChzZW5kZXJSZWYsIEdT Tl9EQklORk9fU0NBTlJFRiwgc2lnbmFsLA0KKyAgICAgICAgICAgICAgIERiaW5m b1NjYW5SZWY6OlNpZ25hbExlbmd0aCwgSkJCKTsNCisgICAgcmV0dXJuOw0KKyAg fQ0KKw0KKyAgLy8gVE9ETyBDaGVjayBhbGwgc2NhbiBwYXJhbWV0ZXJzDQorDQor ICBOZGJpbmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAoTmRiaW5mbzo6 U2NhbkN1cnNvciopRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKCZyZXEpOw0KKyAg VWludDMyIHNpZ25hbF9sZW5ndGggPSBzaWduYWwtPmdldExlbmd0aCgpOw0KKyAg aWYgKHNpZ25hbF9sZW5ndGggPT0gRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3Ro KQ0KKyAgew0KKyAgICAvLyBJbml0aWFsaXplIGN1cnNvcg0KICAgICBqYW0oKTsN CisgICAgY3Vyc29yLT5zZW5kZXJSZWYgPSBzZW5kZXJSZWY7DQorICAgIGN1cnNv ci0+c2F2ZVNlbmRlclJlZiA9IDA7DQorICAgIGN1cnNvci0+Y3VyclJlZiA9IDA7 DQorICAgIGN1cnNvci0+c2F2ZUN1cnJSZWYgPSAwOw0KKyAgICAvLyBSZXNldCBh bGwgZGF0YSBob2xkZXJzDQorICAgIG1lbXNldChjdXJzb3ItPmRhdGEsIDAsIHNp emVvZihjdXJzb3ItPmRhdGEpKTsNCisgICAgY3Vyc29yLT5mbGFncyA9IDA7DQor ICAgIGN1cnNvci0+dG90YWxSb3dzID0gMDsNCisgICAgY3Vyc29yLT50b3RhbEJ5 dGVzID0gMDsNCisgICAgcmVxLmN1cnNvcl9zeiA9IE5kYmluZm86OlNjYW5DdXJz b3I6Okxlbmd0aDsNCisgICAgc2lnbmFsX2xlbmd0aCArPSByZXEuY3Vyc29yX3N6 Ow0KKyAgfQ0KKyAgbmRicmVxdWlyZShzaWduYWxfbGVuZ3RoID09DQorICAgICAg ICAgICAgIERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aCArIE5kYmluZm86OlNj YW5DdXJzb3I6Okxlbmd0aCk7DQorICBuZGJyZXF1aXJlKHJlcS5jdXJzb3Jfc3og PT0gTmRiaW5mbzo6U2NhbkN1cnNvcjo6TGVuZ3RoKTsNCiANCi0gICAgc3RhcnRU YWJsZUlkPSAwOw0KLSAgICBzdGFydENvbHVtbklkPSAwOw0KKyAgc3dpdGNoKHRh YmxlSWQpDQorICB7DQorICBjYXNlIE5kYmluZm86OlRBQkxFU19UQUJMRUlEOg0K KyAgew0KKyAgICBqYW0oKTsNCiANCi0gICAgaWYoIShyZXEucmVxdWVzdEluZm8g JiBEYmluZm9TY2FuUmVxOjpTdGFydFNjYW4pKQ0KKyAgICBOZGJpbmZvOjpSYXRl bGltaXQgcmw7DQorICAgIGNoYXIgY3JlYXRlX3NxbFs1MTJdOw0KKyAgICBVaW50 MzIgdGFibGVJZCA9IGN1cnNvci0+ZGF0YVswXTsNCisNCisgICAgd2hpbGUodGFi bGVJZCA8IE5kYmluZm86OmdldE51bVRhYmxlcygpKQ0KICAgICB7DQogICAgICAg amFtKCk7DQotICAgICAgc3RhcnRUYWJsZUlkPSByZXEuY3Vyc29yLmN1cl9pdGVt ID4+IDg7DQotICAgICAgc3RhcnRDb2x1bW5JZD0gcmVxLmN1cnNvci5jdXJfaXRl bSAmIDB4RkY7DQorICAgICAgY29uc3QgTmRiaW5mbzo6VGFibGUmIHRhYiA9IE5k YmluZm86OmdldFRhYmxlKHRhYmxlSWQpOw0KKyAgICAgIE5kYmluZm86OlJvdyBy b3coc2lnbmFsLCByZXEpOw0KKyAgICAgIE5kYmluZm86OmNyZWF0ZV9zcWwodGFi LCBjcmVhdGVfc3FsLCBzaXplb2YoY3JlYXRlX3NxbCkpOw0KKyAgICAgIHJvdy53 cml0ZV91aW50MzIodGFibGVJZCk7DQorICAgICAgcm93LndyaXRlX3N0cmluZyh0 YWIubS5uYW1lKTsNCisgICAgICByb3cud3JpdGVfc3RyaW5nKGNyZWF0ZV9zcWwp Ow0KKyAgICAgIG5kYmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwp Ow0KKw0KKyAgICAgIHRhYmxlSWQrKzsNCisNCisgICAgICBpZiAocmwubmVlZF9i cmVhayhyZXEpKQ0KKyAgICAgIHsNCisgICAgICAgIGphbSgpOw0KKyAgICAgICAg bmRiaW5mb19zZW5kX3NjYW5fYnJlYWsoc2lnbmFsLCByZXEsIHJsLCB0YWJsZUlk KTsNCisgICAgICAgIHJldHVybjsNCisgICAgICB9DQogICAgIH0NCiANCi0gICAg c3RydWN0IG5kYmluZm9fdGFibGUgKnQ7DQorICAgIC8vIEFsbCB0YWJsZXMgc2Vu dA0KKyAgICByZXEuY3Vyc29yX3N6ID0gMDsgLy8gQ2xvc2UgY3Vyc29yDQorICAg IG5kYmluZm9fc2VuZF9zY2FuX2NvbmYoc2lnbmFsLCByZXEsIHJsKTsNCisgICAg cmV0dXJuOw0KKw0KKyAgICBicmVhazsNCisgIH0NCiANCi0gICAgZGJpbmZvX3Jh dGVsaW1pdF9pbml0KCZybCwgJnJlcSk7DQorICBjYXNlIE5kYmluZm86OkNPTFVN TlNfVEFCTEVJRDoNCisgIHsNCisgICAgamFtKCk7DQogDQotICAgIGNvbnRpbnVl X3NlbmRpbmc9IDE7DQorICAgIE5kYmluZm86OlJhdGVsaW1pdCBybDsNCisgICAg VWludDMyIHRhYmxlSWQgPSBjdXJzb3ItPmRhdGFbMF07DQorICAgIFVpbnQzMiBj b2x1bW5JZCA9IGN1cnNvci0+ZGF0YVsxXTsNCiANCi0gICAgZm9yKGk9c3RhcnRU YWJsZUlkOyBjb250aW51ZV9zZW5kaW5nICYmIGk8bnVtYmVyX25kYmluZm9fdGFi bGVzOyBpKyspDQorICAgIHdoaWxlKHRhYmxlSWQgPCBOZGJpbmZvOjpnZXROdW1U YWJsZXMoKSkNCiAgICAgew0KICAgICAgIGphbSgpOw0KLSAgICAgIHQ9IG5kYmlu Zm9fdGFibGVzW2ldOw0KLQ0KLSAgICAgIGZvcihqPXN0YXJ0Q29sdW1uSWQ7IGNv bnRpbnVlX3NlbmRpbmcgJiYgajx0LT5uY29scztqKyspDQorICAgICAgY29uc3Qg TmRiaW5mbzo6VGFibGUmIHRhYiA9IE5kYmluZm86OmdldFRhYmxlKHRhYmxlSWQp Ow0KKyAgICAgIHdoaWxlKGNvbHVtbklkIDwgdGFiLm0ubmNvbHMpDQogICAgICAg ew0KICAgICAgICAgamFtKCk7DQotICAgICAgICBkYmluZm9fd3JpdGVfcm93X2lu aXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAgICAgICAgZGJpbmZvX3dyaXRl X3Jvd19jb2x1bW5fdWludDMyKCZyLCBpKTsNCi0gICAgICAgIGRiaW5mb193cml0 ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgaik7DQotICAgICAgICBkYmluZm9fd3Jp dGVfcm93X2NvbHVtbigmciwgdC0+Y29sW2pdLm5hbWUsIHN0cmxlbih0LT5jb2xb al0ubmFtZSkrMSk7DQotICAgICAgICBjb25zdCBjaGFyKiBjb2x0eXBlX25hbWU9 IG5kYmluZm9fY29sdHlwZV90b19zdHJpbmcodC0+Y29sW2pdLmNvbHR5cGUpOw0K LSAgICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIGNvbHR5cGVfbmFt ZSwgc3RybGVuKGNvbHR5cGVfbmFtZSkrMSk7DQotICAgICAgICBkYmluZm9fc2Vu ZF9yb3coc2lnbmFsLHIscmwsIGFwaVR4bklkLGFwaVJlZik7DQorICAgICAgICBO ZGJpbmZvOjpSb3cgcm93KHNpZ25hbCwgcmVxKTsNCisgICAgICAgIHJvdy53cml0 ZV91aW50MzIodGFibGVJZCk7DQorICAgICAgICByb3cud3JpdGVfdWludDMyKGNv bHVtbklkKTsNCisgICAgICAgIHJvdy53cml0ZV9zdHJpbmcodGFiLmNvbFtjb2x1 bW5JZF0ubmFtZSk7DQorICAgICAgICByb3cud3JpdGVfc3RyaW5nKE5kYmluZm86 OmNvbHR5cGVfdG9fc3RyaW5nKHRhYi5jb2xbY29sdW1uSWRdLmNvbHR5cGUpKTsN CisgICAgICAgIG5kYmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwp Ow0KIA0KLSAgICAgICAgY29udGludWVfc2VuZGluZz0gZGJpbmZvX3JhdGVsaW1p dF9jb250aW51ZSgmcmwpOw0KKyAgICAgICAgYXNzZXJ0KGNvbHVtbklkIDwgMjU2 KTsNCisgICAgICAgIGNvbHVtbklkKys7DQorDQorICAgICAgICBpZihybC5uZWVk X2JyZWFrKHJlcSkpDQorICAgICAgICB7DQorICAgICAgICAgIGphbSgpOw0KKyAg ICAgICAgICBuZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhzaWduYWwsIHJlcSwgcmws IHRhYmxlSWQsIGNvbHVtbklkKTsNCisgICAgICAgICAgcmV0dXJuOw0KKyAgICAg ICAgfQ0KICAgICAgIH0NCi0gICAgICBzdGFydENvbHVtbklkPSAwOw0KKyAgICAg IGNvbHVtbklkID0gMDsNCisgICAgICB0YWJsZUlkKys7DQogICAgIH0NCiANCi0g ICAgaWYoKGkgPCBudW1iZXJfbmRiaW5mb190YWJsZXMgfHwgaiA8IHQtPm5jb2xz KSkNCi0gICAgew0KLSAgICAgIGphbSgpOw0KLSAgICAgIGktLTsNCi0gICAgICBk YmluZm9fcmF0ZWxpbWl0X3NlbmRjb25mKHNpZ25hbCwgcmVxLCBybCwgKGkgPDwg OCkgfCBqKTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICBqYW0o KTsNCi0gICAgICBEYmluZm9TY2FuQ29uZiAqY29uZj0gKERiaW5mb1NjYW5Db25m KilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQotICAgICAgY29uZi0+dGFibGVJ ZD0gcmVxLnRhYmxlSWQ7DQotICAgICAgY29uZi0+c2VuZGVyUmVmPSByZXEuc2Vu ZGVyUmVmOw0KLSAgICAgIGNvbmYtPmFwaVR4bklkPSByZXEuYXBpVHhuSWQ7DQot ICAgICAgY29uZi0+cmVxdWVzdEluZm89IDA7DQotICAgICAgc2VuZFNpZ25hbChy ZXEuc2VuZGVyUmVmLCBHU05fREJJTkZPX1NDQU5DT05GLCBzaWduYWwsDQotICAg ICAgICAgICAgICAgICBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3RoLCBKQkIp Ow0KLSAgICB9DQorICAgIC8vIEFsbCB0YWJsZXMgYW5kIGNvbHVtbnMgc2VudA0K KyAgICByZXEuY3Vyc29yX3N6ID0gMDsgLy8gQ2xvc2UgY3Vyc29yDQorICAgIG5k YmluZm9fc2VuZF9zY2FuX2NvbmYoc2lnbmFsLCByZXEsIHJsKTsNCiANCiAgICAg YnJlYWs7DQorICB9DQogDQogICBkZWZhdWx0Og0KKyAgew0KICAgICBqYW0oKTsN CiANCi0gICAgaWYodGFibGVJZCA+IG51bWJlcl9uZGJpbmZvX3RhYmxlcykNCi0g ICAgew0KLSAgICAgIGphbSgpOw0KLSAgICAgIERiaW5mb1NjYW5SZWYgKnJlZj0g KERiaW5mb1NjYW5SZWYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0gICAg ICByZWYtPnRhYmxlSWQ9IHRhYmxlSWQ7DQotICAgICAgcmVmLT5hcGlUeG5JZD0g YXBpVHhuSWQ7DQotICAgICAgcmVmLT5lcnJvckNvZGU9IERiaW5mb1NjYW5SZWY6 Ok5vVGFibGU7DQotICAgICAgc2VuZFNpZ25hbChzZW5kZXJSZWYsIEdTTl9EQklO Rk9fU0NBTlJFRiwgc2lnbmFsLA0KLSAgICAgICAgICAgICAgICAgRGJpbmZvU2Nh blJlZjo6U2lnbmFsTGVuZ3RoLCBKQkIpOw0KLSAgICAgIGJyZWFrOw0KLSAgICB9 DQotDQogICAgIG5kYmFzc2VydCh0YWJsZUlkID4gMSk7DQogDQotICAgIGlmKHNp Z25hbC0+Z2V0TGVuZ3RoKCkgPT0gRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3Ro KQ0KLSAgICB7DQotICAgICAgLyoNCi0gICAgICAgKiBXZSd2ZSBnb3R0ZW4gYSBy ZXF1ZXN0IGZyb20gYXBwbGljYXRpb24sIGZpcnN0DQotICAgICAgICogU2NhblJl cSBzaWduYWwuIHN0YXJ0IGZyb20gYmVnaW5uaW5nDQotICAgICAgICovDQorICAg IC8vcHJpbnRTaWduYWxIZWFkZXIoc3Rkb3V0LCBzaWduYWwtPmhlYWRlciwgOTks IDk4LCB0cnVlKTsNCisgICAgLy9wcmludERCSU5GT19TQ0FOKHN0ZG91dCwgc2ln bmFsLT50aGVEYXRhLCBzaWduYWwtPmdldExlbmd0aCgpLCAwKTsNCiANCisgICAg aWYgKE5kYmluZm86OlNjYW5DdXJzb3I6OmdldEhhc01vcmVEYXRhKGN1cnNvci0+ ZmxhZ3MpIHx8DQorICAgICAgICBmaW5kX25leHQoY3Vyc29yKSkNCisgICAgew0K ICAgICAgIGphbSgpOw0KKyAgICAgIG5kYnJlcXVpcmUoY3Vyc29yLT5jdXJyUmVm KTsNCiANCi0gICAgICBEYmluZm9TY2FuUmVxIGlyZXE9ICooRGJpbmZvU2NhblJl cSopc2lnbmFsLT50aGVEYXRhOw0KLSAgICAgIERiaW5mb1NjYW5SZXEgKm9yZXE9 IChEYmluZm9TY2FuUmVxKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQorICAg ICAgLy8gQ09ORiBvciBSRUYgc2hvdWxkIGJlIHNlbnQgYmFjayBoZXJlDQorICAg ICAgY3Vyc29yLT5zZW5kZXJSZWYgPSByZWZlcmVuY2UoKTsNCiANCi0gICAgICBt ZW1jcHkoc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpLCZpcmVxLERiaW5mb1NjYW5S ZXE6OlNpZ25hbExlbmd0aCpzaXplb2YoVWludDMyKSk7DQotICAgICAgb3JlcS0+ c2VuZGVyUmVmPSByZWZlcmVuY2UoKTsNCi0gICAgICBvcmVxLT5jdXJzb3IuY3Vy X3JlcXVlc3RJbmZvPSAwOw0KLSAgICAgIG9yZXEtPmN1cnNvci5jdXJfbm9kZT0g MDsNCi0gICAgICBvcmVxLT5jdXJzb3IuY3VyX2Jsb2NrPSBEQklORk87DQotICAg ICAgb3JlcS0+Y3Vyc29yLmN1cl9pdGVtPSAwOw0KLQ0KLSAgICAgIGZvcihvcmVx LT5jdXJzb3IuY3VyX25vZGU9IDA7DQotICAgICAgICAgICFjX2FsaXZlTm9kZXMu Z2V0KG9yZXEtPmN1cnNvci5jdXJfbm9kZSk7DQotICAgICAgICAgIG9yZXEtPmN1 cnNvci5jdXJfbm9kZSsrKQ0KLSAgICAgICAgOw0KLQ0KLSAgICAgIHNlbmRTaWdu YWwobnVtYmVyVG9SZWYoREJJTkZPLG9yZXEtPmN1cnNvci5jdXJfbm9kZSksIEdT Tl9EQklORk9fU0NBTlJFUSwNCi0gICAgICAgICAgICAgICAgIHNpZ25hbCwgRGJp bmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJCKTsNCisgICAg ICAvLyBTZW5kIFNDQU5SRVENCisgICAgICBNRU1DT1BZX05PX1dPUkRTKHJlcV9w dHIsDQorICAgICAgICAgICAgICAgICAgICAgICAmcmVxLCBzaWduYWxfbGVuZ3Ro KTsNCisgICAgICBzZW5kU2lnbmFsKGN1cnNvci0+Y3VyclJlZiwNCisgICAgICAg ICAgICAgICAgIEdTTl9EQklORk9fU0NBTlJFUSwNCisgICAgICAgICAgICAgICAg IHNpZ25hbCwgc2lnbmFsX2xlbmd0aCwgSkJCKTsNCiAgICAgfQ0KICAgICBlbHNl DQogICAgIHsNCi0gICAgICAvKioNCi0gICAgICAgKiBXZSBoYXZlIGEgY3Vyc29y LCBzbyB3ZSBuZWVkIHRvIGNvbnRpbnVlIHNjYW5uaW5nLg0KLSAgICAgICAqLw0K KyAgICAgIC8vIFNjYW4gaXMgZG9uZSwgc2VuZCBTQ0FOQ09ORiBiYWNrIHRvIGNh bGxlcg0KICAgICAgIGphbSgpOw0KLSAgICAgIGludCBuZXh0X2RiaW5mb19ibG9j az0gMDsNCi0gICAgICBpZihyZXEuY3Vyc29yLmN1cl9ibG9jayAhPSBEQklORk8p DQotICAgICAgew0KLSAgICAgICAgd2hpbGUoZGJpbmZvX2Jsb2Nrc1tuZXh0X2Ri aW5mb19ibG9ja10gIT0gcmVxLmN1cnNvci5jdXJfYmxvY2sNCi0gICAgICAgICAg ICAmJiBkYmluZm9fYmxvY2tzW25leHRfZGJpbmZvX2Jsb2NrXSAhPSAwKQ0KLSAg ICAgICAgew0KLSAgICAgICAgICBqYW0oKTsNCi0gICAgICAgICAgbmV4dF9kYmlu Zm9fYmxvY2srKzsNCi0gICAgICAgIH0NCi0gICAgICB9DQotDQotICAgICAgRGJp bmZvU2NhblJlcSBpcmVxPSAqKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+dGhlRGF0 YTsNCi0gICAgICBEYmluZm9TY2FuUmVxICpvcmVxPSAoRGJpbmZvU2NhblJlcSop c2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLQ0KLSAgICAgIG1lbWNweShzaWdu YWwtPmdldERhdGFQdHJTZW5kKCksJmlyZXEsc2lnbmFsLT5nZXRMZW5ndGgoKSpz aXplb2YoVWludDMyKSk7DQotICAgICAgb3JlcS0+c2VuZGVyUmVmPSByZWZlcmVu Y2UoKTsgLy9tYXJ0eQ0KLSAgICAgIG9yZXEtPmN1cnNvci5jdXJfYmxvY2s9IGRi aW5mb19ibG9ja3NbbmV4dF9kYmluZm9fYmxvY2tdOw0KLQ0KLSAgICAgIHNlbmRT aWduYWwobnVtYmVyVG9SZWYob3JlcS0+Y3Vyc29yLmN1cl9ibG9jaywgb3JlcS0+ Y3Vyc29yLmN1cl9ub2RlKSwNCi0gICAgICAgICAgICAgICAgIEdTTl9EQklORk9f U0NBTlJFUSwNCi0gICAgICAgICAgICAgICAgIHNpZ25hbCwgc2lnbmFsLT5nZXRM ZW5ndGgoKSwgSkJCKTsNCisgICAgICBEYmluZm9TY2FuQ29uZiAqYXBpY29uZj0g KERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQorICAg ICAgTUVNQ09QWV9OT19XT1JEUyhhcGljb25mLCAmcmVxLCBEYmluZm9TY2FuQ29u Zjo6U2lnbmFsTGVuZ3RoKTsNCisgICAgICAvLyBTZXQgY3Vyc29yX3N6IGJhY2sg dG8gMCB0byBpbmRpY2F0ZSBlbmQgb2Ygc2Nhbg0KKyAgICAgIGFwaWNvbmYtPmN1 cnNvcl9zeiA9IDA7DQorICAgICAgc2VuZFNpZ25hbChyZXN1bHRSZWYsIEdTTl9E QklORk9fU0NBTkNPTkYsIHNpZ25hbCwNCisgICAgICAgICAgICAgICAgIERiaW5m b1NjYW5Db25mOjpTaWduYWxMZW5ndGgsIEpCQik7DQogICAgIH0NCiAgICAgYnJl YWs7DQotICB9Ow0KKyAgfQ0KKyAgfQ0KIH0NCiANCiB2b2lkIERiaW5mbzo6ZXhl Y0RCSU5GT19TQ0FOQ09ORihTaWduYWwgKnNpZ25hbCkNCiB7DQotICBEYmluZm9T Y2FuQ29uZiBjb25mPSAqKERiaW5mb1NjYW5Db25mKilzaWduYWwtPnRoZURhdGE7 DQorICBjb25zdCBEYmluZm9TY2FuQ29uZiogY29uZl9wdHI9IChjb25zdCBEYmlu Zm9TY2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRyKCk7DQorICAvLyBDb3B5IHNp Z25hbCBvbiBzdGFjaw0KKyAgY29uc3QgRGJpbmZvU2NhbkNvbmYgY29uZj0gKmNv bmZfcHRyOw0KIA0KICAgamFtRW50cnkoKTsNCiANCi0gIGNvbnN0IFVpbnQzMiB0 YWJsZUlkPSBjb25mLnRhYmxlSWQ7DQotICBjb25zdCBVaW50MzIgc2VuZGVyUmVm PSBjb25mLnNlbmRlclJlZjsNCi0gIGNvbnN0IFVpbnQzMiBhcGlSZWY9IGNvbmYu YXBpUmVmOw0KLSAgY29uc3QgVWludDMyIGFwaVR4bklkPSBjb25mLmFwaVR4bklk Ow0KLSAgLy9jb25zdCBVaW50MzIgY29sQml0bWFwTG89IGNvbmYuY29sQml0bWFw TG87DQotICAvL2NvbnN0IFVpbnQzMiBjb2xCaXRtYXBIaT0gY29uZi5jb2xCaXRt YXBIaTsNCisgIC8vcHJpbnREQklORk9fU0NBTihzdGRvdXQsIHNpZ25hbC0+dGhl RGF0YSwgc2lnbmFsLT5nZXRMZW5ndGgoKSwgMCk7DQogDQotICBEYmluZm9TY2Fu UmVxICpvcmVxPSAoRGJpbmZvU2NhblJlcSopc2lnbmFsLT5nZXREYXRhUHRyU2Vu ZCgpOw0KKyAgVWludDMyIHNpZ25hbF9sZW5ndGggPSBzaWduYWwtPmdldExlbmd0 aCgpOw0KKyAgbmRicmVxdWlyZShzaWduYWxfbGVuZ3RoID09DQorICAgICAgICAg ICAgIERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aCtOZGJpbmZvOjpTY2FuQ3Vy c29yOjpMZW5ndGgpOw0KKyAgbmRicmVxdWlyZShjb25mLmN1cnNvcl9zeiA9PSBO ZGJpbmZvOjpTY2FuQ3Vyc29yOjpMZW5ndGgpOw0KIA0KLSAgbWVtY3B5KHNpZ25h bC0+Z2V0RGF0YVB0clNlbmQoKSwmY29uZixzaWduYWwtPmdldExlbmd0aCgpKnNp emVvZihVaW50MzIpKTsNCisgIC8vIFZhbGlkYXRlIHRhYmxlSWQNCisgIGNvbnN0 IFVpbnQzMiB0YWJsZUlkPSBjb25mLnRhYmxlSWQ7DQorICBuZGJhc3NlcnQodGFi bGVJZCA8IE5kYmluZm86OmdldE51bVRhYmxlcygpKTsNCiANCi0gIGlmKGNvbmYu cmVxdWVzdEluZm8gJiBEYmluZm9TY2FuQ29uZjo6TW9yZURhdGEpDQotICB7DQot ICAgIC8qDQotICAgICAqIENvbnRpbnVlIGEgRFVNUCBzY2FuIG9mIERCSU5GTyB0 YWJsZSAoaGl0IG1heHJvd3MvbWF4Ynl0ZXMpDQotICAgICAqLw0KLSAgICBqYW0o KTsNCi0gICAgb3JlcS0+cmVxdWVzdEluZm8gJj0gfihEYmluZm9TY2FuUmVxOjpT dGFydFNjYW4pOw0KLSAgICBzZW5kU2lnbmFsKG51bWJlclRvUmVmKG9yZXEtPmN1 cnNvci5jdXJfYmxvY2ssIG9yZXEtPmN1cnNvci5jdXJfbm9kZSksDQotICAgICAg ICAgICAgICAgR1NOX0RCSU5GT19TQ0FOUkVRLA0KLSAgICAgICAgICAgICAgIHNp Z25hbCwgc2lnbmFsLT5nZXRMZW5ndGgoKSwgSkJCKTsNCi0gICAgcmV0dXJuOw0K LSAgfQ0KKyAgY29uc3QgVWludDMyIHJlc3VsdFJlZiA9IGNvbmYucmVzdWx0UmVm Ow0KIA0KLSAgaW50IG5leHRfZGJpbmZvX2Jsb2NrPSAwOw0KKyAgLy8gQ29weSBj dXJzb3Igb24gc3RhY2sNCisgIG5kYnJlcXVpcmUoY29uZi5jdXJzb3Jfc3opOw0K KyAgTmRiaW5mbzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86 OlNjYW5DdXJzb3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0cigmY29uZik7DQog DQotICBpZihzaWduYWwtPmdldExlbmd0aCgpID09IERiaW5mb1NjYW5Db25mOjpE b25lTGVuZ3RoKSAvLyB3ZSBoYXZlIHRoZSBBQ0sgZnJvbSBhIERVTVAgaW5pdGlh dGVkIHNjYW4NCisgIGlmIChOZGJpbmZvOjpTY2FuQ3Vyc29yOjpnZXRIYXNNb3Jl RGF0YShjdXJzb3ItPmZsYWdzKSB8fCBjb25mLnJldHVybmVkUm93cykNCiAgIHsN CisgICAgLy8gUmF0ZSBsaW1pdCBicmVhaywgcGFzcyB0aHJvdWdoIHRvIEFQSQ0K ICAgICBqYW0oKTsNCi0gICAgbmRib3V0X2MoIkZJTklTSEVEIERCSU5GTyBEVU1Q IFNjYW4gb24gJXUiLHNpZ25hbC0+dGhlRGF0YVswXSk7DQorICAgIG5kYnJlcXVp cmUoY3Vyc29yLT5jdXJyUmVmKTsNCisgICAgRGJpbmZvU2NhbkNvbmYgKmFwaWNv bmYgPSAoRGJpbmZvU2NhbkNvbmYqKSBzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7 DQorICAgIE1FTUNPUFlfTk9fV09SRFMoYXBpY29uZiwgJmNvbmYsIHNpZ25hbF9s ZW5ndGgpOw0KKyAgICBzZW5kU2lnbmFsKHJlc3VsdFJlZiwgR1NOX0RCSU5GT19T Q0FOQ09ORiwgc2lnbmFsLCBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KICAgICByZXR1 cm47DQogICB9DQogDQotICBpZihjb25mLmN1cnNvci5jdXJfYmxvY2sgIT0gREJJ TkZPKQ0KKyAgaWYgKGZpbmRfbmV4dChjdXJzb3IpKQ0KICAgew0KICAgICBqYW0o KTsNCi0gICAgd2hpbGUoZGJpbmZvX2Jsb2Nrc1tuZXh0X2RiaW5mb19ibG9ja10g IT0gY29uZi5jdXJzb3IuY3VyX2Jsb2NrDQotICAgICAgICAgICYmIGRiaW5mb19i bG9ja3NbbmV4dF9kYmluZm9fYmxvY2tdICE9IDApDQotICAgIHsNCi0gICAgICBq YW0oKTsNCi0gICAgICBuZXh0X2RiaW5mb19ibG9jaysrOw0KLSAgICB9DQotICB9 DQorICAgIG5kYnJlcXVpcmUoY3Vyc29yLT5jdXJyUmVmKTsNCiANCi0gIG5leHRf ZGJpbmZvX2Jsb2NrKys7DQorICAgIC8vIENPTkYgb3IgUkVGIHNob3VsZCBiZSBz ZW50IGJhY2sgaGVyZQ0KKyAgICBjdXJzb3ItPnNlbmRlclJlZiA9IHJlZmVyZW5j ZSgpOw0KIA0KLSAgaWYoZGJpbmZvX2Jsb2Nrc1tuZXh0X2RiaW5mb19ibG9ja10h PTApDQotICB7DQotICAgIGphbSgpOw0KLSAgICBvcmVxLT5jdXJzb3IuY3VyX2Js b2NrPSBkYmluZm9fYmxvY2tzW25leHRfZGJpbmZvX2Jsb2NrXTsNCi0gIH0NCi0g IGVsc2UNCi0gIHsNCi0gICAgZm9yKG9yZXEtPmN1cnNvci5jdXJfbm9kZSsrOw0K LSAgICAgICAgIWNfYWxpdmVOb2Rlcy5nZXQob3JlcS0+Y3Vyc29yLmN1cl9ub2Rl KQ0KLSAgICAgICAgICAmJiBvcmVxLT5jdXJzb3IuY3VyX25vZGUgPCBNQVhfTkRC X05PREVTOw0KLSAgICAgICAgb3JlcS0+Y3Vyc29yLmN1cl9ub2RlKyspDQotICAg ICAgOw0KLQ0KLSAgICBpZihvcmVxLT5jdXJzb3IuY3VyX25vZGUgPCBNQVhfTkRC X05PREVTKQ0KLSAgICB7DQotICAgICAgamFtKCk7DQotICAgICAgb3JlcS0+Y3Vy c29yLmN1cl9yZXF1ZXN0SW5mbz0gMDsNCi0gICAgICBvcmVxLT5jdXJzb3IuY3Vy X2Jsb2NrPSBEQklORk87DQotICAgICAgb3JlcS0+Y3Vyc29yLmN1cl9pdGVtPSAw Ow0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgIGphbSgpOw0KLSAg ICAgIERiaW5mb1NjYW5Db25mICphcGljb25mPSAoRGJpbmZvU2NhbkNvbmYqKXNp Z25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0gICAgICBhcGljb25mLT50YWJsZUlk PSB0YWJsZUlkOw0KLSAgICAgIGFwaWNvbmYtPnNlbmRlclJlZj0gc2VuZGVyUmVm Ow0KLSAgICAgIGFwaWNvbmYtPmFwaVR4bklkPSBhcGlUeG5JZDsNCi0gICAgICBz ZW5kU2lnbmFsKGFwaVJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFsLA0K LSAgICAgICAgICAgICAgICAgRGJpbmZvU2NhbkNvbmY6OkRvbmVMZW5ndGgsIEpC Qik7DQotICAgICAgcmV0dXJuOw0KLSAgICB9DQorICAgIC8vIFNlbmQgU0NBTlJF UQ0KKyAgICBNRU1DT1BZX05PX1dPUkRTKHNpZ25hbC0+Z2V0RGF0YVB0clNlbmQo KSwNCisgICAgICAgICAgICAgICAgICAgICAmY29uZiwgc2lnbmFsX2xlbmd0aCk7 DQorICAgIHNlbmRTaWduYWwoY3Vyc29yLT5jdXJyUmVmLA0KKyAgICAgICAgICAg ICAgIEdTTl9EQklORk9fU0NBTlJFUSwNCisgICAgICAgICAgICAgICBzaWduYWws IHNpZ25hbF9sZW5ndGgsIEpCQik7DQorICAgIHJldHVybjsNCiAgIH0NCiANCi0g IHNlbmRTaWduYWwobnVtYmVyVG9SZWYob3JlcS0+Y3Vyc29yLmN1cl9ibG9jaywg b3JlcS0+Y3Vyc29yLmN1cl9ub2RlKSwNCi0gICAgICAgICAgICAgR1NOX0RCSU5G T19TQ0FOUkVRLA0KLSAgICAgICAgICAgICBzaWduYWwsIHNpZ25hbC0+Z2V0TGVu Z3RoKCksIEpCQik7DQorICAvLyBTY2FuIGlzIGRvbmUsIHNlbmQgU0NBTkNPTkYg YmFjayB0byBjYWxsZXINCisgIGphbSgpOw0KKyAgRGJpbmZvU2NhbkNvbmYgKmFw aWNvbmYgPSAoRGJpbmZvU2NhbkNvbmYqKSBzaWduYWwtPmdldERhdGFQdHJTZW5k KCk7DQorICBNRU1DT1BZX05PX1dPUkRTKGFwaWNvbmYsICZjb25mLCBEYmluZm9T Y2FuQ29uZjo6U2lnbmFsTGVuZ3RoKTsNCisNCisgIC8vIFNldCBjdXJzb3Jfc3og YmFjayB0byAwIHRvIGluZGljYXRlIGVuZCBvZiBzY2FuDQorICBhcGljb25mLT5j dXJzb3Jfc3ogPSAwOw0KKyAgc2VuZFNpZ25hbChyZXN1bHRSZWYsIEdTTl9EQklO Rk9fU0NBTkNPTkYsIHNpZ25hbCwNCisgICAgICAgICAgICAgRGJpbmZvU2NhbkNv bmY6OlNpZ25hbExlbmd0aCwgSkJCKTsNCisgIHJldHVybjsNCiB9DQogDQogDQoN Cj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nr cy9kYmluZm8vRGJpbmZvLmhwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJu ZWwvYmxvY2tzL2RiaW5mby9EYmluZm8uaHBwCTIwMDgtMTAtMDUgMDc6MTQ6Mzcg KzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5m by9EYmluZm8uaHBwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0xLDQg KzEsNSBAQA0KLS8qIENvcHlyaWdodCAoQykgMjAwNyBNeVNRTCBBQg0KKy8qIENv cHlyaWdodCAoQykgMjAwNy0yMDA4IE15U1FMIEFCLCAyMDA5IFN1biBNaWNyb3N5 c3RlbXMgSW5jLg0KKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJq ZWN0IHRvIGxpY2Vuc2UgdGVybXMuDQogDQogICAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkNCiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KQEAgLTQ5LDggKzUwLDEwIEBA IHByb3RlY3RlZDoNCiAgIHZvaWQgZXhlY1JFQURfQ09ORklHX1JFUShTaWduYWwq KTsNCiAgIHZvaWQgZXhlY0RVTVBfU1RBVEVfT1JEKFNpZ25hbCogc2lnbmFsKTsN CiANCisgIFVpbnQzMiBmaW5kX25leHRfbm9kZShVaW50MzIgbm9kZSkgY29uc3Q7 DQorICBVaW50MzIgZmluZF9uZXh0X2Jsb2NrKFVpbnQzMiBibG9jaykgY29uc3Q7 DQorICBib29sIGZpbmRfbmV4dChOZGJpbmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3Ip IGNvbnN0Ow0KICAgdm9pZCBleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsICpzaWdu YWwpOw0KLSAgdm9pZCBleGVjREJJTkZPX1RSQU5TSURfQUkoU2lnbmFsKiBzaWdu YWwpOw0KICAgdm9pZCBleGVjREJJTkZPX1NDQU5DT05GKFNpZ25hbCAqc2lnbmFs KTsNCiANCiAgIC8qIGZvciBtYWludGFpbmluZyBjX2FsaXZlTm9kZXMgKi8NCg0K PT09IHJlbW92ZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3Mv ZGJpbmZvL25kYmluZm9faGVscGVycy5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9z cmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vbmRiaW5mb19oZWxwZXJzLmNwcAkyMDA5 LTA2LTIzIDE1OjM5OjU1ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2Vy bmVsL2Jsb2Nrcy9kYmluZm8vbmRiaW5mb19oZWxwZXJzLmNwcAkxOTcwLTAxLTAx IDAwOjAwOjAwICswMDAwDQpAQCAtMSw2MSArMCwwIEBADQotI2luY2x1ZGUgIkRi aW5mby5ocHAiDQotI2luY2x1ZGUgPG5kYmluZm8uaD4NCi0jaW5jbHVkZSA8QXR0 cmlidXRlSGVhZGVyLmhwcD4NCi0jaW5jbHVkZSA8c2lnbmFsZGF0YS9EYmluZm9T Y2FuLmhwcD4NCi0NCi12b2lkIGRiaW5mb193cml0ZV9yb3dfaW5pdChzdHJ1Y3Qg ZGJpbmZvX3JvdyAqciwgY2hhciogYnVmLCBpbnQgbGVuKQ0KLXsNCi0gIHItPmJ1 ZiA9IHItPmN1cnIgPSAoVWludDMyKilidWY7DQotICByLT5lbmQgPSByLT5idWYg KyBsZW47DQotICByLT5jb2xfY291bnQgPSAwOw0KLX0NCi0NCi1pbnQgZGJpbmZv X3dyaXRlX3Jvd19jb2x1bW4oc3RydWN0IGRiaW5mb19yb3cgKnIsIGNvbnN0IGNo YXIqIGNvbCwgaW50IGNsZW4pDQotew0KLSAgLy8gQ3JlYXRlIEF0dHJpYnV0ZUhl YWRlcg0KLSAgQXR0cmlidXRlSGVhZGVyIGFoKHItPmNvbF9jb3VudCsrLCBjbGVu KTsNCi0gIGNvbnN0IFVpbnQzMiBoZWFkZXJfc3ogPSBhaC5nZXRIZWFkZXJTaXpl KCk7DQotICBjb25zdCBVaW50MzIgZGF0YV9zeiA9IGFoLmdldERhdGFTaXplKCk7 DQotDQotICAvLyBDaGVjayByb3cgYnVmZmVyIHNwYWNlDQotICBpZigoaGVhZGVy X3N6ICsgZGF0YV9zeikgPiAoVWludDMyKShyLT5lbmQgLSByLT5jdXJyKSkNCi0g IHsNCi0gICAgbmRib3V0X2MoIldhcm5pbmcsIHRvbyBzbWFsbCBuZGJpbmZvIHJv dyBidWZmZXIiKTsNCi0gICAgYXNzZXJ0KGZhbHNlKTsNCi0gICAgcmV0dXJuIC0x OyAvLyBOb3QgZW5vdWdoIHJvb20uDQotICB9DQotDQotICAvLyBXcml0ZSBBdHRy aWJ1dGVIZWFkZXIgdG8gYnVmZmVyDQotICBhaC5pbnNlcnRIZWFkZXIoci0+Y3Vy cik7DQotICByLT5jdXJyICs9IGhlYWRlcl9zejsNCi0NCi0gIC8vIFdyaXRlIGRh dGEgdG8gYnVmZmVyDQotICBtZW1jcHkoci0+Y3VyciwgY29sLCBjbGVuKTsNCi0g IHItPmN1cnIgKz0gZGF0YV9zejsNCi0NCi0gIGFzc2VydChyLT5jdXJyIDw9IHIt PmVuZCk7DQotICByZXR1cm4gMDsNCi19DQotDQotaW50IGRiaW5mb193cml0ZV9y b3dfY29sdW1uX3VpbnQzMihzdHJ1Y3QgZGJpbmZvX3JvdyAqciwgVWludDMyIHZh bHVlKQ0KLXsNCi0gIHJldHVybiBkYmluZm9fd3JpdGVfcm93X2NvbHVtbihyLCAo Y2hhciopJnZhbHVlLCBzaXplb2YoVWludDMyKSk7DQotfQ0KLQ0KLXZvaWQgZGJp bmZvX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0ICpybCwg c3RydWN0IERiaW5mb1NjYW5SZXEgKnIpDQotew0KLSAgcmwtPm1heFJvd3M9IHIt Pm1heFJvd3M7DQotICBybC0+bWF4Qnl0ZXM9IHItPm1heEJ5dGVzOw0KLSAgcmwt PnJvd3NfdG90YWw9IHItPnJvd3NfdG90YWw7DQotICBybC0+Ynl0ZXNfdG90YWw9 IHItPndvcmRfdG90YWw7DQotICBybC0+cm93cz0gMDsNCi0gIHJsLT5ieXRlcz0g MDsNCi19DQotDQotaW50IGRiaW5mb19yYXRlbGltaXRfY29udGludWUoc3RydWN0 IGRiaW5mb19yYXRlbGltaXQgKnJsKQ0KLXsNCi0gIGlmKCgocmwtPm1heFJvd3M9 PTApIHx8IChybC0+bWF4Um93cyA+IHJsLT5yb3dzKSkNCi0gICAgICYmICgocmwt Pm1heEJ5dGVzPT0wKSB8fCAocmwtPm1heEJ5dGVzID4gcmwtPmJ5dGVzKSkgKQ0K LSAgICByZXR1cm4gMTsNCi0gIHJldHVybiAwOw0KLX0NCg0KPT09IHJlbW92ZWQg ZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL25kYmlu Zm9fdGFibGVpZHMuaCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxv Y2tzL2RiaW5mby9uZGJpbmZvX3RhYmxlaWRzLmgJMjAwOC0xMC0wNSAwNzoxNDoy MSArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJp bmZvL25kYmluZm9fdGFibGVpZHMuaAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAw DQpAQCAtMSwyMSArMCwwIEBADQotDQotI2lmbmRlZiBOREJJTkZPX1RBQkxFSURT X0gNCi0jZGVmaW5lIE5EQklORk9fVEFCTEVJRFNfSA0KLQ0KLSNpZmRlZiBfX2Nw bHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLQ0KLSNkZWZpbmUgTkRC SU5GT19UQUJMRVNfVEFCTEVJRCAgICAwDQotI2RlZmluZSBOREJJTkZPX0NPTFVN TlNfVEFCTEVJRCAgIDENCi0jZGVmaW5lIE5EQklORk9fTUVNVVNBR0VfVEFCTEVJ RCAgMg0KLSNkZWZpbmUgTkRCSU5GT19MT0dERVNUSU5BVElPTl9UQUJMRUlEICAz DQotI2RlZmluZSBOREJJTkZPX0JBQ0tVUF9SRUNPUkRTX1RBQkxFSUQgNA0KLSNk ZWZpbmUgTkRCSU5GT19CQUNLVVBfUEFSQU1FVEVSU19UQUJMRUlEIDUNCi0jZGVm aW5lIE5EQklORk9fUE9PTFNfVEFCTEVJRCAgICAgICAgICAgICAgICAgICAgIDYN Ci0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19DQotI2VuZGlmDQotDQotI2VuZGlm DQoNCj09PSByZW1vdmVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxv Y2tzL2RiaW5mby9uZGJpbmZvX3RhYmxlcy5oJw0KLS0tIGEvc3RvcmFnZS9uZGIv c3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL25kYmluZm9fdGFibGVzLmgJMjAwOS0w Ni0xNSAxMzozMTozNyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5l bC9ibG9ja3MvZGJpbmZvL25kYmluZm9fdGFibGVzLmgJMTk3MC0wMS0wMSAwMDow MDowMCArMDAwMA0KQEAgLTEsMTMzICswLDAgQEANCi0vKiBDb3B5cmlnaHQgKEMp IDIwMDcgTXlTUUwgQUINCi0NCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KLSAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLg0KLQ0KLSAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLA0KLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQotICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQ0KLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuDQotDQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCi0gICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0K LSAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMw LCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EgKi8NCi0jaWZuZGVmIE5EQklO Rk9fVEFCTEVTX0gNCi0jZGVmaW5lIE5EQklORk9fVEFCTEVTX0gNCi0NCi0jaW5j bHVkZSA8bmRiaW5mby5oPg0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVy biAiQyIgew0KLSNlbmRpZg0KLQ0KLS8qKiBSZXNlcnZlZCBmb3IgREJJTkZPIG9u bHkgKi8NCi1ERUNMQVJFX05EQklORk9fVEFCTEUobmRiaW5mb19UQUJMRVMsMykN Ci0gICAgID0geyAiVEFCTEVTIiwgMywgMCwNCi0gICAgICAgIHsNCi0gICAgICAg ICAgeyJUQUJMRV9JRCIsICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgICAg ICAgeyJUQUJMRV9OQU1FIixOREJJTkZPX1RZUEVfU1RSSU5HfSwNCi0gICAgICAg ICAgeyJDUkVBVEVfU1FMIixOREJJTkZPX1RZUEVfU1RSSU5HfSwNCi0gICAgICAg IH19Ow0KLQ0KLS8qKiBSZXNlcnZlZCBmb3IgREJJTkZPIG9ubHkgKi8NCi1ERUNM QVJFX05EQklORk9fVEFCTEUobmRiaW5mb19DT0xVTU5TLDQpDQotICAgICA9IHsg IkNPTFVNTlMiLCA0LCAwLA0KLSAgICAgICAgew0KLSAgICAgICAgICB7IlRBQkxF X0lEIiwgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICAgICAgIHsiQ09M VU1OX0lEIiwgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgICAgICAgeyJD T0xVTU5fTkFNRSIsIE5EQklORk9fVFlQRV9TVFJJTkd9LA0KLSAgICAgICAgICB7 IkNPTFVNTl9UWVBFIiwgTkRCSU5GT19UWVBFX1NUUklOR30sDQotICAgICAgICB9 fTsNCi0NCi1ERUNMQVJFX05EQklORk9fVEFCTEUobmRiaW5mb19NRU1VU0FHRSw3 KQ0KLSAgICAgPSB7ICJNRU1VU0FHRSIsIDcsIDAsDQotICAgICAgICB7DQotICAg ICAgICAgIHsiTk9ERV9JRCIsICAgICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9 LA0KLSAgICAgICAgICB7IkJMT0NLX05VTUJFUiIsICAgICBOREJJTkZPX1RZUEVf TlVNQkVSfSwNCi0gICAgICAgICAgeyJCTE9DS19JTlNUQU5DRSIsICAgTkRCSU5G T19UWVBFX05VTUJFUn0sDQotICAgICAgICAgIHsiUkVTT1VSQ0VfTkFNRSIsICAg IE5EQklORk9fVFlQRV9TVFJJTkd9LA0KLSAgICAgICAgICB7IlBBR0VfU0laRSIs ICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgICAgICAgeyJQQUdF U19VU0VEIiwgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICAgICAg IHsiUEFHRVNfVE9UQUwiLCAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAg ICAgICAgfX07DQotDQotREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fTE9H REVTVElOQVRJT04sNSkgPQ0KLXsgIkxPR0RFU1RJTkFUSU9OIiwgNSwgMCwNCi0g ew0KLSAgIHsiTk9ERV9JRCIsTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgeyJU WVBFIixOREJJTkZPX1RZUEVfU1RSSU5HfSwNCi0gICB7IlBBUkFNUyIsTkRCSU5G T19UWVBFX1NUUklOR30sDQotICAgeyJDVVJSRU5UX1NJWkUiLE5EQklORk9fVFlQ RV9OVU1CRVJ9LA0KLSAgIHsiTUFYX1NJWkUiLE5EQklORk9fVFlQRV9OVU1CRVJ9 LA0KLSB9DQotfTsNCi0NCi1ERUNMQVJFX05EQklORk9fVEFCTEUobmRiaW5mb19C QUNLVVBfUkVDT1JEUywxMSkNCi09IHsgIkJBQ0tVUF9SRUNPUkRTIiwgMTEsIDAs DQotICAgew0KLSAgICAgeyJOT0RFX0lEIiwgICAgICAgICAgTkRCSU5GT19UWVBF X05VTUJFUn0sDQotICAgICB7IkJBQ0tVUF9SRUNPUkQiLCAgICBOREJJTkZPX1RZ UEVfTlVNQkVSfSwNCi0gICAgIHsiQkFDS1VQX0lEIiwgICAgICAgIE5EQklORk9f VFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJNQVNURVJfUkVGIiwgICAgICAgTkRCSU5G T19UWVBFX05VTUJFUn0sDQotICAgICB7IkNMSUVOVF9SRUYiLCAgICAgICBOREJJ TkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiU1RBVEUiLCAgICAgICAgICAgIE5E QklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJCWVRFUyIsICAgICAgICAgICAg TkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IlJFQ09SRFMiLCAgICAgICAg ICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiTE9HX0JZVEVTIiwgICAg ICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJMT0dfUkVDT1JEUyIs ICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IkVSUk9SX0NPREUi LCAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICB9DQotfTsNCi0NCi1E RUNMQVJFX05EQklORk9fVEFCTEUobmRiaW5mb19CQUNLVVBfUEFSQU1FVEVSUywx NCkNCi09IHsgIkJBQ0tVUF9QQVJBTUVURVJTIiwgMTQsIDAsDQotICAgew0KLSAg ICAgeyJOT0RFX0lEIiwgICAgICAgICAgICAgICAgICBOREJJTkZPX1RZUEVfTlVN QkVSfSwNCi0gICAgIHsiQ1VSUkVOVF9ESVNLX1dSSVRFX1NQRUVEIiwgTkRCSU5G T19UWVBFX05VTUJFUn0sDQotICAgICB7IkJZVEVTX1dSSVRURU5fVEhJU19QRVJJ T0QiLE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJPVkVSRkxPV19ESVNL X1dSSVRFIiwgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiUkVT RVRfREVMQVlfVVNFRCIsICAgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQot ICAgICB7IlJFU0VUX0RJU0tfU1BFRURfVElNRSIsICAgIE5EQklORk9fVFlQRV9O VU1CRVJ9LA0KLSAgICAgeyJCQUNLVVBfUE9PTF9TSVpFIiwgICAgICAgICBOREJJ TkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiQkFDS1VQX0ZJTEVfUE9PTF9TSVpF IiwgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IlRBQkxFX1BPT0xf U0laRSIsICAgICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJU UklHR0VSX1BPT0xfU0laRSIsICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwN Ci0gICAgIHsiRlJBR01FTlRfUE9PTF9TSVpFIiwgICAgICAgTkRCSU5GT19UWVBF X05VTUJFUn0sDQotICAgICB7IlBBR0VfUE9PTF9TSVpFIiwgICAgICAgICAgIE5E QklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJDT01QUkVTU0VEX0JBQ0tVUCIs ICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiQ09NUFJFU1NF RF9MQ1AiLCAgICAgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgfQ0K LX07DQotDQotREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fUE9PTFMsNikN Ci09IHsgIlBPT0xTIiwgNiwgMCwNCi0gICB7DQotICAgICB7Ik5PREVfSUQiLCAg ICAgICAgICAgICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJC TE9DS19OVU1CRVIiLCAgICAgICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwN Ci0gICAgIHsiQkxPQ0tfSU5TVEFOQ0UiLCAgICAgICAgICAgTkRCSU5GT19UWVBF X05VTUJFUn0sDQotICAgICB7IlBPT0xfTkFNRSIsICAgICAgICAgICAgICAgIE5E QklORk9fVFlQRV9TVFJJTkd9LA0KLSAgICAgeyJGUkVFIiwgICAgICAgICAgICAg ICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiU0laRSIsICAg ICAgICAgICAgICAgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgfQ0K LX07DQotDQotc3RhdGljIFVpbnQzMiBudW1iZXJfbmRiaW5mb190YWJsZXM9IDc7 DQotDQotI2RlZmluZSBEQklORk9UQkwoeCkgKHN0cnVjdCBuZGJpbmZvX3RhYmxl KikmeA0KLQ0KLXN0cnVjdCBuZGJpbmZvX3RhYmxlICpuZGJpbmZvX3RhYmxlc1td ID0gew0KLSAgREJJTkZPVEJMKG5kYmluZm9fVEFCTEVTKSwNCi0gIERCSU5GT1RC TChuZGJpbmZvX0NPTFVNTlMpLA0KLSAgREJJTkZPVEJMKG5kYmluZm9fTUVNVVNB R0UpLA0KLSAgREJJTkZPVEJMKG5kYmluZm9fTE9HREVTVElOQVRJT04pLA0KLSAg REJJTkZPVEJMKG5kYmluZm9fQkFDS1VQX1JFQ09SRFMpLA0KLSAgREJJTkZPVEJM KG5kYmluZm9fQkFDS1VQX1BBUkFNRVRFUlMpLA0KLSAgREJJTkZPVEJMKG5kYmlu Zm9fUE9PTFMpLA0KLX07DQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfQ0KLSNl bmRpZg0KLQ0KLSNlbmRpZg0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9u ZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ0Yy9EYnRjTWFpbi5jcHAnDQotLS0gYS9z dG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnRjL0RidGNNYWluLmNwcAky MDA5LTA2LTMwIDE4OjQ5OjUzICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMv a2VybmVsL2Jsb2Nrcy9kYnRjL0RidGNNYWluLmNwcAkyMDA5LTA3LTAzIDEwOjMz OjQ0ICswMDAwDQpAQCAtODgsOCArODgsNiBAQA0KIA0KICNpbmNsdWRlIDxzaWdu YWxkYXRhL0RiaW5mb1NjYW4uaHBwPg0KICNpbmNsdWRlIDxzaWduYWxkYXRhL1Ry YW5zSWRBSS5ocHA+DQotI2luY2x1ZGUgPG5kYmluZm8uaD4NCi0jaW5jbHVkZSA8 ZGJpbmZvL25kYmluZm9fdGFibGVpZHMuaD4NCiANCiANCiAvLyBVc2UgREVCVUcg dG8gcHJpbnQgbWVzc2FnZXMgdGhhdCBzaG91bGQgYmUNCkBAIC0xMTc4NiwxNCAr MTE3ODQsMTMgQEAgRGJ0Yzo6ZXhlY0RVTVBfU1RBVEVfT1JEKFNpZ25hbCogc2ln bmFsKQ0KIHZvaWQgRGJ0Yzo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqc2ln bmFsKQ0KIHsNCiAgIERiaW5mb1NjYW5SZXEgcmVxPSAqKERiaW5mb1NjYW5SZXEq KXNpZ25hbC0+dGhlRGF0YTsNCi0gIGNoYXIgYnVmWzUxMl07DQotICBzdHJ1Y3Qg ZGJpbmZvX3JvdyByOw0KLSAgc3RydWN0IGRiaW5mb19yYXRlbGltaXQgcmw7DQot ICBkYmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCisgIGNvbnN0IE5k YmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChOZGJpbmZvOjpTY2Fu Q3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIoJnJlcSk7DQorICBOZGJp bmZvOjpSYXRlbGltaXQgcmw7DQogDQogICBqYW1FbnRyeSgpOw0KIA0KLSAgaWYo cmVxLnRhYmxlSWQgPT0gTkRCSU5GT19QT09MU19UQUJMRUlEKQ0KKyAgaWYocmVx LnRhYmxlSWQgPT0gTmRiaW5mbzo6UE9PTFNfVEFCTEVJRCkNCiAgIHsNCiAgICAg c3RydWN0IHsNCiAgICAgICBjb25zdCBjaGFyKiBwb29sbmFtZTsNCkBAIC0xMTgy Miw2MyArMTE4MTksMzAgQEAgdm9pZCBEYnRjOjpleGVjREJJTkZPX1NDQU5SRVEo U2lnbmFsICpzaQ0KICAgICAgICAgICB7IE5VTEwsIDAsIDB9DQogICAgICAgICB9 Ow0KIA0KKyAgICBVaW50MzIgcG9vbCA9IGN1cnNvci0+ZGF0YVswXTsNCiAgICAg QmxvY2tOdW1iZXIgYm4gPSBibG9ja1RvTWFpbihudW1iZXIoKSk7DQotICAgIGZv cihpbnQgaT0wOyBwb29sc1tpXS5wb29sbmFtZTsgaSsrKQ0KLSAgICB7DQotICAg ICAgZGJpbmZvX3dyaXRlX3Jvd19pbml0KCZyLCBidWYsIHNpemVvZihidWYpKTsN Ci0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGdldE93 bk5vZGVJZCgpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50 MzIoJnIsIGJuKTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJlcg0KLSAgICAgIGRi aW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcmVxLmluc3RhbmNlKTsg Ly8gYmxvY2sgaW5zdGFuY2UNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVt bigmciwgcG9vbHNbaV0ucG9vbG5hbWUsIHN0cmxlbihwb29sc1tpXS5wb29sbmFt ZSkpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwg cG9vbHNbaV0uZnJlZSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5f dWludDMyKCZyLCBwb29sc1tpXS5zaXplKTsNCi0gICAgICBkYmluZm9fc2VuZF9y b3coc2lnbmFsLCByLCBybCwgcmVxLmFwaVR4bklkLCByZXEuYXBpUmVmKTsNCi0g ICAgfQ0KLSAgfQ0KLQ0KLSAgLyogIGlmKHJlcS0+dGFibGVJZCA9PQ0KLSAgZGJp bmZvX3JhdGVsaW1pdF9pbml0KCZybCwgJnJlcSk7DQotDQotICAgIGlmKCEocmVx LnJlcXVlc3RJbmZvICYgRGJpbmZvU2NhblJlcTo6U3RhcnRTY2FuKSkNCi0gICAg ICBzdGFydGlkPSByZXEuY3VyX2l0ZW07DQotDQotICAgIGZvcihpPXN0YXJ0aWQ7 ZGJpbmZvX3JhdGVsaW1pdF9jb250aW51ZSgmcmwpICYmIGk8bnVtYmVyX25kYmlu Zm9fdGFibGVzO2krKykNCisgICAgd2hpbGUocG9vbHNbcG9vbF0ucG9vbG5hbWUp DQogICAgIHsNCiAgICAgICBqYW0oKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93 X2luaXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAgICAgIG5kYmluZm9fY3Jl YXRlX3NxbChuZGJpbmZvX3RhYmxlc1tpXSwNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgY3JlYXRlX3NxbCwgc2l6ZW9mKGNyZWF0ZV9zcWwpKTsNCi0NCi0gICAg ICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwgKGNoYXIqKSZpLCBzaXplb2Yo aSkpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCBuZGJpbmZv X3RhYmxlc1tpXS0+bmFtZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJsZW4obmRiaW5mb190YWJsZXNbaV0tPm5hbWUpKTsNCi0gICAgICBkYmlu Zm9fd3JpdGVfcm93X2NvbHVtbigmciwgY3JlYXRlX3NxbCwgc3RybGVuKGNyZWF0 ZV9zcWwpKTsNCi0NCi0gICAgICBkYmluZm9fc2VuZF9yb3coc2lnbmFsLHIscmws YXBpVHhuSWQsYXBpUmVmKTsNCi0gICAgfQ0KLQ0KLSAgICBpZighZGJpbmZvX3Jh dGVsaW1pdF9jb250aW51ZSgmcmwpICYmIGkgPCBudW1iZXJfbmRiaW5mb190YWJs ZXMpDQotICAgIHsNCi0gICAgICBqYW0oKTsNCi0gICAgICBkYmluZm9fcmF0ZWxp bWl0X3NlbmRjb25mKHNpZ25hbCxyZXEscmwsaSk7DQotICAgIH0NCi0gICAgZWxz ZQ0KLSAgICB7DQotICAgICAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9T Y2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgICAgIGNvbmYt PnRhYmxlSWQ9IHJlcS50YWJsZUlkOw0KLSAgICAgIGNvbmYtPnNlbmRlclJlZj0g cmVxLnNlbmRlclJlZjsNCi0gICAgICBjb25mLT5hcGlUeG5JZD0gcmVxLmFwaVR4 bklkOw0KLSAgICAgIGNvbmYtPnJlcXVlc3RJbmZvPSAwOw0KLSAgICAgIHNlbmRT aWduYWwocmVxLnNlbmRlclJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFs LA0KLSAgICAgICAgICAgICAgICAgRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExlbmd0 aCwgSkJCKTsNCisgICAgICBOZGJpbmZvOjpSb3cgcm93KHNpZ25hbCwgcmVxKTsN CisgICAgICByb3cud3JpdGVfdWludDMyKGdldE93bk5vZGVJZCgpKTsNCisgICAg ICByb3cud3JpdGVfdWludDMyKGJuKTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJl cg0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoaW5zdGFuY2UoKSk7IC8vIGJsb2Nr IGluc3RhbmNlDQorICAgICAgcm93LndyaXRlX3N0cmluZyhwb29sc1twb29sXS5w b29sbmFtZSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwb29sc1twb29sXS5m cmVlKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKHBvb2xzW3Bvb2xdLnNpemUp Ow0KKyAgICAgIG5kYmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwp Ow0KKyAgICAgIHBvb2wrKzsNCisgICAgICBpZiAocmwubmVlZF9icmVhayhyZXEp KQ0KKyAgICAgIHsNCisgICAgICAgIGphbSgpOw0KKyAgICAgICAgbmRiaW5mb19z ZW5kX3NjYW5fYnJlYWsoc2lnbmFsLCByZXEsIHJsLCBwb29sKTsNCisgICAgICAg IHJldHVybjsNCisgICAgICB9DQogICAgIH0NCi0gICovDQorICB9DQogDQotICBE YmluZm9TY2FuQ29uZiAqY29uZj0gKERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdl dERhdGFQdHJTZW5kKCk7DQotICBtZW1jcHkoY29uZiwmcmVxLCBEYmluZm9TY2Fu UmVxOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yICogc2l6ZW9mKFVpbnQzMikpOw0K LSAgY29uZi0+cmVxdWVzdEluZm8gJj0gfihEYmluZm9TY2FuQ29uZjo6TW9yZURh dGEpOw0KLSAgc2VuZFNpZ25hbChyZXEuc2VuZGVyUmVmLCBHU05fREJJTkZPX1ND QU5DT05GLA0KLSAgICAgICAgICAgICBzaWduYWwsIERiaW5mb1NjYW5Db25mOjpT aWduYWxMZW5ndGhXaXRoQ3Vyc29yLCBKQkIpOw0KKyAgbmRiaW5mb19zZW5kX3Nj YW5fY29uZihzaWduYWwsIHJlcSwgcmwpOw0KIH0NCiANCiBib29sDQoNCj09PSBt b2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnR1 cC9EYnR1cERlYnVnLmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwv YmxvY2tzL2RidHVwL0RidHVwRGVidWcuY3BwCTIwMDktMDYtMzAgMTg6MjI6NTYg KzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidHVw L0RidHVwRGVidWcuY3BwCTIwMDktMDctMDMgMTA6MzM6NDQgKzAwMDANCkBAIC0z MCw4ICszMCw2IEBADQogDQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvRGJpbmZvU2Nh bi5ocHA+DQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvVHJhbnNJZEFJLmhwcD4NCi0j aW5jbHVkZSA8bmRiaW5mby5oPg0KLSNpbmNsdWRlIDxkYmluZm8vbmRiaW5mb190 YWJsZWlkcy5oPg0KIA0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCkBAIC03 NiwzMyArNzQsMjggQEAgdm9pZCBEYnR1cDo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNp Z25hbCogcw0KIHsNCiAgIGphbUVudHJ5KCk7DQogICBEYmluZm9TY2FuUmVxIHJl cT0gKihEYmluZm9TY2FuUmVxKilzaWduYWwtPnRoZURhdGE7DQotICBjb25zdCBV aW50MzIgcmVxbGVuZ3RoPSBzaWduYWwtPmdldExlbmd0aCgpOw0KKyAgY29uc3Qg TmRiaW5mbzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86OlNj YW5DdXJzb3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0cigmcmVxKTsNCiANCi0g IGNvbnN0IFVpbnQzMiB0YWJsZUlkPSByZXEudGFibGVJZDsNCi0gIGNvbnN0IFVp bnQzMiBpbnN0YW5jZT0gcmVxLmluc3RhbmNlOw0KKyAgTmRiaW5mbzo6UmF0ZWxp bWl0IHJsOw0KIA0KLSAgY2hhciBidWZbMTAyNF07DQotICBzdHJ1Y3QgZGJpbmZv X3JvdyByOw0KLSAgc3RydWN0IGRiaW5mb19yYXRlbGltaXQgcmw7DQotDQotICBk YmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCi0NCi0gIGlmKHRhYmxl SWQgPT0gTkRCSU5GT19NRU1VU0FHRV9UQUJMRUlEKQ0KKyAgaWYocmVxLnRhYmxl SWQgPT0gTmRiaW5mbzo6TUVNVVNBR0VfVEFCTEVJRCkNCiAgIHsNCiAgICAgamFt KCk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXplb2Yo YnVmKSk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwg Z2V0T3duTm9kZUlkKCkpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91 aW50MzIoJnIsIGJsb2NrVG9NYWluKG51bWJlcigpKSk7Ly8gYmxvY2sgbnVtYmVy DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgaW5zdGFu Y2UpOyAgICAgICAgICAgICAvLyBibG9jayBpbnN0YW5jZQ0KLSAgICBkYmluZm9f d3JpdGVfcm93X2NvbHVtbigmciwgIkRhdGFNZW1vcnkiLCAxMCk7DQotICAgIFVp bnQzMiBwYWdlX3NpemVfa2I9IHNpemVvZihQYWdlKTs7DQotICAgIGRiaW5mb193 cml0ZV9yb3dfY29sdW1uKCZyLCAoY2hhciopJnBhZ2Vfc2l6ZV9rYiwgNCk7IC8v IDhrYg0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGNU b3ROb0ZyYWdQYWdlcyk7IC8vIGFsbG9jZWQgcGFnZXMNCi0gICAgZGJpbmZvX3dy aXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBjVG90UGFnZXMpOyAvLyBudW1iZXIg b2YgcGFnZXMNCi0gICAgZGJpbmZvX3NlbmRfcm93KHNpZ25hbCxyLHJsLHJlcS5h cGlUeG5JZCxyZXEuYXBpUmVmKTsNCisgICAgTmRiaW5mbzo6Um93IHJvdyhzaWdu YWwsIHJlcSk7DQorICAgIHJvdy53cml0ZV91aW50MzIoZ2V0T3duTm9kZUlkKCkp Ow0KKyAgICByb3cud3JpdGVfdWludDMyKGJsb2NrVG9NYWluKG51bWJlcigpKSk7 IC8vIGJsb2NrIG51bWJlcg0KKyAgICByb3cud3JpdGVfdWludDMyKGluc3RhbmNl KCkpOyAgICAgICAgICAgIC8vIGJsb2NrIGluc3RhbmNlDQorICAgIHJvdy53cml0 ZV9zdHJpbmcoIkRhdGFNZW1vcnkiKTsNCisgICAgcm93LndyaXRlX3VpbnQzMihz aXplb2YoUGFnZSkpOw0KKyAgICByb3cud3JpdGVfdWludDMyKGNUb3ROb0ZyYWdQ YWdlcyk7ICAgICAgIC8vIGFsbG9jZWQgcGFnZXMNCisgICAgcm93LndyaXRlX3Vp bnQzMihjVG90UGFnZXMpOyAgICAgICAgICAgICAvLyBudW1iZXIgb2YgcGFnZXMN CisgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93LCBybCk7DQor DQogICB9DQotICBpZihyZXEudGFibGVJZCA9PSBOREJJTkZPX1BPT0xTX1RBQkxF SUQpDQorICBpZihyZXEudGFibGVJZCA9PSBOZGJpbmZvOjpQT09MU19UQUJMRUlE KQ0KICAgew0KKyAgICBqYW0oKTsNCiAgICAgc3RydWN0IHsNCiAgICAgICBjb25z dCBjaGFyKiBwb29sbmFtZTsNCiAgICAgICBVaW50MzIgZnJlZTsNCkBAIC0xMzMs MjUgKzEyNiw1MiBAQCB2b2lkIERidHVwOjpleGVjREJJTkZPX1NDQU5SRVEoU2ln bmFsKiBzDQogICAgICAgICAgIHsgTlVMTCwgMCwgMH0NCiAgICAgICAgIH07DQog DQorICAgIFVpbnQzMiBwb29sID0gY3Vyc29yLT5kYXRhWzBdOw0KICAgICBCbG9j a051bWJlciBibiA9IGJsb2NrVG9NYWluKG51bWJlcigpKTsNCi0gICAgZm9yKGlu dCBpPTA7IHBvb2xzW2ldLnBvb2xuYW1lOyBpKyspDQorICAgIHdoaWxlKHBvb2xz W3Bvb2xdLnBvb2xuYW1lKQ0KICAgICB7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jv d19pbml0KCZyLCBidWYsIHNpemVvZihidWYpKTsNCi0gICAgICBkYmluZm9fd3Jp dGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGdldE93bk5vZGVJZCgpKTsNCi0gICAg ICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGJuKTsgICAgICAg Ly8gYmxvY2sgbnVtYmVyDQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5f dWludDMyKCZyLCBpbnN0YW5jZSk7IC8vIGJsb2NrIGluc3RhbmNlDQotICAgICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIHBvb2xzW2ldLnBvb2xuYW1lLCBz dHJsZW4ocG9vbHNbaV0ucG9vbG5hbWUpKTsNCi0gICAgICBkYmluZm9fd3JpdGVf cm93X2NvbHVtbl91aW50MzIoJnIsIHBvb2xzW2ldLmZyZWUpOw0KLSAgICAgIGRi aW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcG9vbHNbaV0uc2l6ZSk7 DQotICAgICAgZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgciwgcmwsIHJlcS5hcGlU eG5JZCwgcmVxLmFwaVJlZik7DQorICAgICAgamFtKCk7DQorICAgICAgTmRiaW5m bzo6Um93IHJvdyhzaWduYWwsIHJlcSk7DQorICAgICAgcm93LndyaXRlX3VpbnQz MihnZXRPd25Ob2RlSWQoKSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihibik7 ICAgICAgICAgICAvLyBibG9jayBudW1iZXINCisgICAgICByb3cud3JpdGVfdWlu dDMyKGluc3RhbmNlKCkpOyAvLyBibG9jayBpbnN0YW5jZQ0KKyAgICAgIHJvdy53 cml0ZV9zdHJpbmcocG9vbHNbcG9vbF0ucG9vbG5hbWUpOw0KKyAgICAgIHJvdy53 cml0ZV91aW50MzIocG9vbHNbcG9vbF0uZnJlZSk7DQorICAgICAgcm93LndyaXRl X3VpbnQzMihwb29sc1twb29sXS5zaXplKTsNCisgICAgICBuZGJpbmZvX3NlbmRf cm93KHNpZ25hbCwgcmVxLCByb3csIHJsKTsNCisgICAgICBwb29sKys7DQorICAg ICAgaWYgKHJsLm5lZWRfYnJlYWsocmVxKSkNCisgICAgICB7DQorICAgICAgICBq YW0oKTsNCisgICAgICAgIG5kYmluZm9fc2VuZF9zY2FuX2JyZWFrKHNpZ25hbCwg cmVxLCBybCwgcG9vbCk7DQorICAgICAgICByZXR1cm47DQorICAgICAgfQ0KKyAg ICB9DQorICB9DQorICBpZihyZXEudGFibGVJZCA9PSBOZGJpbmZvOjpURVNUX1RB QkxFSUQpDQorICB7DQorICAgIFVpbnQzMiBjb3VudGVyID0gY3Vyc29yLT5kYXRh WzBdOw0KKyAgICBCbG9ja051bWJlciBibiA9IGJsb2NrVG9NYWluKG51bWJlcigp KTsNCisgICAgd2hpbGUoY291bnRlciA8IDEwMDApDQorICAgIHsNCisgICAgICBq YW0oKTsNCisgICAgICBOZGJpbmZvOjpSb3cgcm93KHNpZ25hbCwgcmVxKTsNCisg ICAgICByb3cud3JpdGVfdWludDMyKGdldE93bk5vZGVJZCgpKTsNCisgICAgICBy b3cud3JpdGVfdWludDMyKGJuKTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJlcg0K KyAgICAgIHJvdy53cml0ZV91aW50MzIoaW5zdGFuY2UoKSk7IC8vIGJsb2NrIGlu c3RhbmNlDQorICAgICAgcm93LndyaXRlX3VpbnQzMihjb3VudGVyKTsNCisgICAg ICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCByb3csIHJsKTsNCisgICAg ICBjb3VudGVyKys7DQorICAgICAgaWYgKHJsLm5lZWRfYnJlYWsocmVxKSkNCisg ICAgICB7DQorICAgICAgICBqYW0oKTsNCisgICAgICAgIG5kYmluZm9fc2VuZF9z Y2FuX2JyZWFrKHNpZ25hbCwgcmVxLCBybCwgY291bnRlcik7DQorICAgICAgICBy ZXR1cm47DQorICAgICAgfQ0KICAgICB9DQogICB9DQogDQotICBEYmluZm9TY2Fu Q29uZiAqY29uZj0gKERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHJT ZW5kKCk7DQotICBtZW1jcHkoY29uZiwmcmVxLCByZXFsZW5ndGggKiBzaXplb2Yo VWludDMyKSk7DQotICBjb25mLT5yZXF1ZXN0SW5mbyAmPSB+KERiaW5mb1NjYW5D b25mOjpNb3JlRGF0YSk7DQotICBzZW5kU2lnbmFsKHJlcS5zZW5kZXJSZWYsIEdT Tl9EQklORk9fU0NBTkNPTkYsDQotICAgICAgICAgICAgIHNpZ25hbCwgRGJpbmZv U2NhbkNvbmY6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IsIEpCQik7DQorICBuZGJp bmZvX3NlbmRfc2Nhbl9jb25mKHNpZ25hbCwgcmVxLCBybCk7DQogfQ0KIA0KICNp ZmRlZiBWTV9UUkFDRQ0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIv c3JjL2tlcm5lbC9ibG9ja3MvZGJ0dXgvRGJ0dXhEZWJ1Zy5jcHAnDQotLS0gYS9z dG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnR1eC9EYnR1eERlYnVnLmNw cAkyMDA5LTA2LTE1IDEzOjMxOjM3ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9z cmMva2VybmVsL2Jsb2Nrcy9kYnR1eC9EYnR1eERlYnVnLmNwcAkyMDA5LTA3LTAz IDEwOjMxOjMwICswMDAwDQpAQCAtMjEsMjAgKzIxLDE4IEBADQogDQogI2luY2x1 ZGUgPHNpZ25hbGRhdGEvRGJpbmZvU2Nhbi5ocHA+DQogI2luY2x1ZGUgPHNpZ25h bGRhdGEvVHJhbnNJZEFJLmhwcD4NCi0jaW5jbHVkZSA8bmRiaW5mby5oPg0KLSNp bmNsdWRlIDxkYmluZm8vbmRiaW5mb190YWJsZWlkcy5oPg0KKw0KIA0KIHZvaWQg RGJ0dXg6OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwgKnNpZ25hbCkNCiB7DQog ICBEYmluZm9TY2FuUmVxIHJlcT0gKihEYmluZm9TY2FuUmVxKilzaWduYWwtPnRo ZURhdGE7DQotICBjaGFyIGJ1Zls1MTJdOw0KLSAgc3RydWN0IGRiaW5mb19yb3cg cjsNCi0gIHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0IHJsOw0KLSAgZGJpbmZvX3Jh dGVsaW1pdF9pbml0KCZybCwgJnJlcSk7DQorICBjb25zdCBOZGJpbmZvOjpTY2Fu Q3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAoTmRiaW5mbzo6U2NhbkN1cnNvciopRGJp bmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKCZyZXEpOw0KKyAgTmRiaW5mbzo6UmF0ZWxp bWl0IHJsOw0KIA0KICAgamFtRW50cnkoKTsNCiANCi0gIGlmKHJlcS50YWJsZUlk ID09IE5EQklORk9fUE9PTFNfVEFCTEVJRCkNCisgIGlmKHJlcS50YWJsZUlkID09 IE5kYmluZm86OlBPT0xTX1RBQkxFSUQpDQogICB7DQogICAgIHN0cnVjdCB7DQog ICAgICAgY29uc3QgY2hhciogcG9vbG5hbWU7DQpAQCAtNjYsMjUgKzY0LDMwIEBA IHZvaWQgRGJ0dXg6OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwgKnMNCiAgICAg ICAgICAgeyBOVUxMLCAwLCAwfQ0KICAgICAgICAgfTsNCiANCisgICAgVWludDMy IHBvb2wgPSBjdXJzb3ItPmRhdGFbMF07DQogICAgIEJsb2NrTnVtYmVyIGJuID0g YmxvY2tUb01haW4obnVtYmVyKCkpOw0KLSAgICBmb3IoaW50IGk9MDsgcG9vbHNb aV0ucG9vbG5hbWU7IGkrKykNCisgICAgd2hpbGUocG9vbHNbcG9vbF0ucG9vbG5h bWUpDQogICAgIHsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2luaXQoJnIsIGJ1 Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1u X3VpbnQzMigmciwgZ2V0T3duTm9kZUlkKCkpOw0KLSAgICAgIGRiaW5mb193cml0 ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgYm4pOyAgICAgICAgICAgLy8gYmxvY2sg bnVtYmVyDQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZy LCByZXEuaW5zdGFuY2UpOyAvLyBibG9jayBpbnN0YW5jZQ0KLSAgICAgIGRiaW5m b193cml0ZV9yb3dfY29sdW1uKCZyLCBwb29sc1tpXS5wb29sbmFtZSwgc3RybGVu KHBvb2xzW2ldLnBvb2xuYW1lKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19j b2x1bW5fdWludDMyKCZyLCBwb29sc1tpXS5mcmVlKTsNCi0gICAgICBkYmluZm9f d3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHBvb2xzW2ldLnNpemUpOw0KLSAg ICAgIGRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHIsIHJsLCByZXEuYXBpVHhuSWQs IHJlcS5hcGlSZWYpOw0KKyAgICAgIGphbSgpOw0KKyAgICAgIE5kYmluZm86OlJv dyByb3coc2lnbmFsLCByZXEpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoZ2V0 T3duTm9kZUlkKCkpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoYm4pOyAgICAg ICAgICAgLy8gYmxvY2sgbnVtYmVyDQorICAgICAgcm93LndyaXRlX3VpbnQzMihp bnN0YW5jZSgpKTsgLy8gYmxvY2sgaW5zdGFuY2UNCisgICAgICByb3cud3JpdGVf c3RyaW5nKHBvb2xzW3Bvb2xdLnBvb2xuYW1lKTsNCisgICAgICByb3cud3JpdGVf dWludDMyKHBvb2xzW3Bvb2xdLmZyZWUpOw0KKyAgICAgIHJvdy53cml0ZV91aW50 MzIocG9vbHNbcG9vbF0uc2l6ZSk7DQorICAgICAgbmRiaW5mb19zZW5kX3Jvdyhz aWduYWwsIHJlcSwgcm93LCBybCk7DQorICAgICAgcG9vbCsrOw0KKyAgICAgIGlm IChybC5uZWVkX2JyZWFrKHJlcSkpDQorICAgICAgew0KKyAgICAgICAgamFtKCk7 DQorICAgICAgICBuZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhzaWduYWwsIHJlcSwg cmwsIHBvb2wpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCiAgICAgfQ0K ICAgfQ0KIA0KLSAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9TY2FuQ29u Ziopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgbWVtY3B5KGNvbmYsJnJl cSwgRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciAqIHNpemVv ZihVaW50MzIpKTsNCi0gIGNvbmYtPnJlcXVlc3RJbmZvICY9IH4oRGJpbmZvU2Nh bkNvbmY6Ok1vcmVEYXRhKTsNCi0gIHNlbmRTaWduYWwocmVxLnNlbmRlclJlZiwg R1NOX0RCSU5GT19TQ0FOQ09ORiwNCi0gICAgICAgICAgICAgc2lnbmFsLCBEYmlu Zm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJCKTsNCisgIG5k YmluZm9fc2VuZF9zY2FuX2NvbmYoc2lnbmFsLCByZXEsIHJsKTsNCiB9DQogDQog LyoNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwv YmxvY2tzL2RidXRpbC9EYlV0aWwuY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3Jj L2tlcm5lbC9ibG9ja3MvZGJ1dGlsL0RiVXRpbC5jcHAJMjAwOS0wNi0xNSAxMzoz MTozNyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3Mv ZGJ1dGlsL0RiVXRpbC5jcHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAg LTQ0LDggKzQ0LDYgQEANCiANCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9EYmluZm9T Y2FuLmhwcD4NCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9UcmFuc0lkQUkuaHBwPg0K LSNpbmNsdWRlIDxuZGJpbmZvLmg+DQotI2luY2x1ZGUgPGRiaW5mby9uZGJpbmZv X3RhYmxlaWRzLmg+DQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQog ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpAQCAtNjg2LDE1ICs2ODQsMTMg QEAgRGJVdGlsOjpleGVjRFVNUF9TVEFURV9PUkQoU2lnbmFsKiBzaWduYQ0KIHZv aWQgRGJVdGlsOjpleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsICpzaWduYWwpDQog ew0KICAgRGJpbmZvU2NhblJlcSByZXE9ICooRGJpbmZvU2NhblJlcSopc2lnbmFs LT50aGVEYXRhOw0KLSAgY2hhciBidWZbNTEyXTsNCi0gIHN0cnVjdCBkYmluZm9f cm93IHI7DQotICBzdHJ1Y3QgZGJpbmZvX3JhdGVsaW1pdCBybDsNCi0NCi0gIGRi aW5mb19yYXRlbGltaXRfaW5pdCgmcmwsICZyZXEpOw0KKyAgY29uc3QgTmRiaW5m bzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86OlNjYW5DdXJz b3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0cigmcmVxKTsNCisgIE5kYmluZm86 OlJhdGVsaW1pdCBybDsNCiANCiAgIGphbUVudHJ5KCk7DQogDQotICBpZihyZXEu dGFibGVJZCA9PSBOREJJTkZPX1BPT0xTX1RBQkxFSUQpDQorICBpZihyZXEudGFi bGVJZCA9PSBOZGJpbmZvOjpQT09MU19UQUJMRUlEKQ0KICAgew0KICAgICBzdHJ1 Y3Qgew0KICAgICAgIGNvbnN0IGNoYXIqIHBvb2xuYW1lOw0KQEAgLTcyNiwyNSAr NzIyLDMwIEBAIHZvaWQgRGJVdGlsOjpleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFs ICoNCiAgICAgICAgICAgeyBOVUxMLCAwLCAwfQ0KICAgICAgICAgfTsNCiANCisg ICAgVWludDMyIHBvb2wgPSBjdXJzb3ItPmRhdGFbMF07DQogICAgIEJsb2NrTnVt YmVyIGJuID0gYmxvY2tUb01haW4obnVtYmVyKCkpOw0KLSAgICBmb3IoaW50IGk9 MDsgcG9vbHNbaV0ucG9vbG5hbWU7IGkrKykNCisgICAgd2hpbGUocG9vbHNbcG9v bF0ucG9vbG5hbWUpDQogICAgIHsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2lu aXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAgICAgIGRiaW5mb193cml0ZV9y b3dfY29sdW1uX3VpbnQzMigmciwgZ2V0T3duTm9kZUlkKCkpOw0KLSAgICAgIGRi aW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgYm4pOyAgICAgICAgICAg Ly8gYmxvY2sgbnVtYmVyDQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5f dWludDMyKCZyLCByZXEuaW5zdGFuY2UpOyAvLyBibG9jayBpbnN0YW5jZQ0KLSAg ICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCBwb29sc1tpXS5wb29sbmFt ZSwgc3RybGVuKHBvb2xzW2ldLnBvb2xuYW1lKSk7DQotICAgICAgZGJpbmZvX3dy aXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29sc1tpXS5mcmVlKTsNCi0gICAg ICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHBvb2xzW2ldLnNp emUpOw0KLSAgICAgIGRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHIsIHJsLCByZXEu YXBpVHhuSWQsIHJlcS5hcGlSZWYpOw0KKyAgICAgIGphbSgpOw0KKyAgICAgIE5k YmluZm86OlJvdyByb3coc2lnbmFsLCByZXEpOw0KKyAgICAgIHJvdy53cml0ZV91 aW50MzIoZ2V0T3duTm9kZUlkKCkpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIo Ym4pOyAgICAgICAgICAgLy8gYmxvY2sgbnVtYmVyDQorICAgICAgcm93LndyaXRl X3VpbnQzMihpbnN0YW5jZSgpKTsgLy8gYmxvY2sgaW5zdGFuY2UNCisgICAgICBy b3cud3JpdGVfc3RyaW5nKHBvb2xzW3Bvb2xdLnBvb2xuYW1lKTsNCisgICAgICBy b3cud3JpdGVfdWludDMyKHBvb2xzW3Bvb2xdLmZyZWUpOw0KKyAgICAgIHJvdy53 cml0ZV91aW50MzIocG9vbHNbcG9vbF0uc2l6ZSk7DQorICAgICAgbmRiaW5mb19z ZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93LCBybCk7DQorICAgICAgcG9vbCsrOw0K KyAgICAgIGlmIChybC5uZWVkX2JyZWFrKHJlcSkpDQorICAgICAgew0KKyAgICAg ICAgamFtKCk7DQorICAgICAgICBuZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhzaWdu YWwsIHJlcSwgcmwsIHBvb2wpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0N CiAgICAgfQ0KICAgfQ0KIA0KLSAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9IChEYmlu Zm9TY2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgbWVtY3B5 KGNvbmYsJnJlcSwgRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNv ciAqIHNpemVvZihVaW50MzIpKTsNCi0gIGNvbmYtPnJlcXVlc3RJbmZvICY9IH4o RGJpbmZvU2NhbkNvbmY6Ok1vcmVEYXRhKTsNCi0gIHNlbmRTaWduYWwocmVxLnNl bmRlclJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwNCi0gICAgICAgICAgICAgc2ln bmFsLCBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJC KTsNCisgIG5kYmluZm9fc2VuZF9zY2FuX2NvbmYoc2lnbmFsLCByZXEsIHJsKTsN CiB9DQogdm9pZA0KIERiVXRpbDo6bXV0ZXhfY3JlYXRlZChTaWduYWwqIHNpZ25h bCwgVWludDMyIHB0ckksIFVpbnQzMiByZXRWYWwpew0KDQo9PT0gbW9kaWZpZWQg ZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3Mvc3VtYS9TdW1hLmNw cCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL3N1bWEvU3Vt YS5jcHAJMjAwOS0wNi0xNSAxMzozMTozNyArMDAwMA0KKysrIGIvc3RvcmFnZS9u ZGIvc3JjL2tlcm5lbC9ibG9ja3Mvc3VtYS9TdW1hLmNwcAkyMDA5LTA3LTAzIDEw OjMxOjMwICswMDAwDQpAQCAtNjMsOCArNjMsNiBAQA0KIA0KICNpbmNsdWRlIDxz aWduYWxkYXRhL0RiaW5mb1NjYW4uaHBwPg0KICNpbmNsdWRlIDxzaWduYWxkYXRh L1RyYW5zSWRBSS5ocHA+DQotI2luY2x1ZGUgPG5kYmluZm8uaD4NCi0jaW5jbHVk ZSA8ZGJpbmZvL25kYmluZm9fdGFibGVpZHMuaD4NCiANCiAjaW5jbHVkZSA8RXZl bnRMb2dnZXIuaHBwPg0KIGV4dGVybiBFdmVudExvZ2dlciAqIGdfZXZlbnRMb2dn ZXI7DQpAQCAtMTQ5NiwxNSArMTQ5NCwxMyBAQCBTdW1hOjpleGVjRFVNUF9TVEFU RV9PUkQoU2lnbmFsKiBzaWduYWwpDQogdm9pZCBTdW1hOjpleGVjREJJTkZPX1ND QU5SRVEoU2lnbmFsICpzaWduYWwpDQogew0KICAgRGJpbmZvU2NhblJlcSByZXE9 ICooRGJpbmZvU2NhblJlcSopc2lnbmFsLT50aGVEYXRhOw0KLSAgY2hhciBidWZb NTEyXTsNCi0gIHN0cnVjdCBkYmluZm9fcm93IHI7DQotICBzdHJ1Y3QgZGJpbmZv X3JhdGVsaW1pdCBybDsNCi0NCi0gIGRiaW5mb19yYXRlbGltaXRfaW5pdCgmcmws ICZyZXEpOw0KKyAgY29uc3QgTmRiaW5mbzo6U2NhbkN1cnNvciogY3Vyc29yID0N CisgICAgKE5kYmluZm86OlNjYW5DdXJzb3IqKURiaW5mb1NjYW46OmdldEN1cnNv clB0cigmcmVxKTsNCisgIE5kYmluZm86OlJhdGVsaW1pdCBybDsNCiANCiAgIGph bUVudHJ5KCk7DQogDQotICBpZihyZXEudGFibGVJZCA9PSBOREJJTkZPX1BPT0xT X1RBQkxFSUQpDQorICBpZihyZXEudGFibGVJZCA9PSBOZGJpbmZvOjpQT09MU19U QUJMRUlEKQ0KICAgew0KICAgICBzdHJ1Y3Qgew0KICAgICAgIGNvbnN0IGNoYXIq IHBvb2xuYW1lOw0KQEAgLTE1MzksMjUgKzE1MzUsMzAgQEAgdm9pZCBTdW1hOjpl eGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsICpzaQ0KICAgICAgICAgICB7IE5VTEws IDAsIDB9DQogICAgICAgICB9Ow0KIA0KKyAgICBVaW50MzIgcG9vbCA9IGN1cnNv ci0+ZGF0YVswXTsNCiAgICAgQmxvY2tOdW1iZXIgYm4gPSBibG9ja1RvTWFpbihu dW1iZXIoKSk7DQotICAgIGZvcihpbnQgaT0wOyBwb29sc1tpXS5wb29sbmFtZTsg aSsrKQ0KKyAgICB3aGlsZShwb29sc1twb29sXS5wb29sbmFtZSkNCiAgICAgew0K LSAgICAgIGRiaW5mb193cml0ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXplb2YoYnVm KSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBn ZXRPd25Ob2RlSWQoKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5f dWludDMyKCZyLCBibik7ICAgICAgICAgICAvLyBibG9jayBudW1iZXINCi0gICAg ICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHJlcS5pbnN0YW5j ZSk7IC8vIGJsb2NrIGluc3RhbmNlDQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19j b2x1bW4oJnIsIHBvb2xzW2ldLnBvb2xuYW1lLCBzdHJsZW4ocG9vbHNbaV0ucG9v bG5hbWUpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIo JnIsIHBvb2xzW2ldLmZyZWUpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29s dW1uX3VpbnQzMigmciwgcG9vbHNbaV0uc2l6ZSk7DQotICAgICAgZGJpbmZvX3Nl bmRfcm93KHNpZ25hbCwgciwgcmwsIHJlcS5hcGlUeG5JZCwgcmVxLmFwaVJlZik7 DQorICAgICAgamFtKCk7DQorICAgICAgTmRiaW5mbzo6Um93IHJvdyhzaWduYWws IHJlcSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihnZXRPd25Ob2RlSWQoKSk7 DQorICAgICAgcm93LndyaXRlX3VpbnQzMihibik7ICAgICAgICAgICAvLyBibG9j ayBudW1iZXINCisgICAgICByb3cud3JpdGVfdWludDMyKGluc3RhbmNlKCkpOyAv LyBibG9jayBpbnN0YW5jZQ0KKyAgICAgIHJvdy53cml0ZV9zdHJpbmcocG9vbHNb cG9vbF0ucG9vbG5hbWUpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocG9vbHNb cG9vbF0uZnJlZSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwb29sc1twb29s XS5zaXplKTsNCisgICAgICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCBy b3csIHJsKTsNCisgICAgICBwb29sKys7DQorICAgICAgaWYgKHJsLm5lZWRfYnJl YWsocmVxKSkNCisgICAgICB7DQorICAgICAgICBqYW0oKTsNCisgICAgICAgIG5k YmluZm9fc2VuZF9zY2FuX2JyZWFrKHNpZ25hbCwgcmVxLCBybCwgcG9vbCk7DQor ICAgICAgICByZXR1cm47DQorICAgICAgfQ0KICAgICB9DQogICB9DQogDQotICBE YmluZm9TY2FuQ29uZiAqY29uZj0gKERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdl dERhdGFQdHJTZW5kKCk7DQotICBtZW1jcHkoY29uZiwmcmVxLCBEYmluZm9TY2Fu UmVxOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yICogc2l6ZW9mKFVpbnQzMikpOw0K LSAgY29uZi0+cmVxdWVzdEluZm8gJj0gfihEYmluZm9TY2FuQ29uZjo6TW9yZURh dGEpOw0KLSAgc2VuZFNpZ25hbChyZXEuc2VuZGVyUmVmLCBHU05fREJJTkZPX1ND QU5DT05GLA0KLSAgICAgICAgICAgICBzaWduYWwsIERiaW5mb1NjYW5Db25mOjpT aWduYWxMZW5ndGhXaXRoQ3Vyc29yLCBKQkIpOw0KKyAgbmRiaW5mb19zZW5kX3Nj YW5fY29uZihzaWduYWwsIHJlcSwgcmwpOw0KIH0NCiANCiAvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Kg0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9i bG9ja3MvdHJpeC9Ucml4LmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJu ZWwvYmxvY2tzL3RyaXgvVHJpeC5jcHAJMjAwOS0wNi0xNSAxMzozMTozNyArMDAw MA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvdHJpeC9Ucml4 LmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMzksOSArMzksNiBA QA0KIA0KICNpbmNsdWRlIDxzaWduYWxkYXRhL0RiaW5mb1NjYW4uaHBwPg0KICNp bmNsdWRlIDxzaWduYWxkYXRhL1RyYW5zSWRBSS5ocHA+DQotI2luY2x1ZGUgPG5k YmluZm8uaD4NCi0jaW5jbHVkZSA8ZGJpbmZvL25kYmluZm9fdGFibGVpZHMuaD4N Ci0NCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9XYWl0R0NQLmhwcD4NCiANCiAjZGVm aW5lIENPTlNUUkFJTlRfVklPTEFUSU9OIDg5Mw0KQEAgLTQ5NSwxNSArNDkyLDEz IEBAIFRyaXg6OmV4ZWNEVU1QX1NUQVRFX09SRChTaWduYWwqIHNpZ25hbCkNCiB2 b2lkIFRyaXg6OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwgKnNpZ25hbCkNCiB7 DQogICBEYmluZm9TY2FuUmVxIHJlcT0gKihEYmluZm9TY2FuUmVxKilzaWduYWwt PnRoZURhdGE7DQotICBjaGFyIGJ1Zls1MTJdOw0KLSAgc3RydWN0IGRiaW5mb19y b3cgcjsNCi0gIHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0IHJsOw0KLQ0KLSAgZGJp bmZvX3JhdGVsaW1pdF9pbml0KCZybCwgJnJlcSk7DQorICBjb25zdCBOZGJpbmZv OjpTY2FuQ3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAoTmRiaW5mbzo6U2NhbkN1cnNv ciopRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKCZyZXEpOw0KKyAgTmRiaW5mbzo6 UmF0ZWxpbWl0IHJsOw0KIA0KICAgamFtRW50cnkoKTsNCiANCi0gIGlmKHJlcS50 YWJsZUlkID09IE5EQklORk9fUE9PTFNfVEFCTEVJRCkNCisgIGlmKHJlcS50YWJs ZUlkID09IE5kYmluZm86OlBPT0xTX1RBQkxFSUQpDQogICB7DQogICAgIHN0cnVj dCB7DQogICAgICAgY29uc3QgY2hhciogcG9vbG5hbWU7DQpAQCAtNTIwLDI1ICs1 MTUsMzAgQEAgdm9pZCBUcml4OjpleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsICpz aQ0KICAgICAgICAgICB7IE5VTEwsIDAsIDB9DQogICAgICAgICB9Ow0KIA0KKyAg ICBVaW50MzIgcG9vbCA9IGN1cnNvci0+ZGF0YVswXTsNCiAgICAgQmxvY2tOdW1i ZXIgYm4gPSBibG9ja1RvTWFpbihudW1iZXIoKSk7DQotICAgIGZvcihpbnQgaT0w OyBwb29sc1tpXS5wb29sbmFtZTsgaSsrKQ0KKyAgICB3aGlsZShwb29sc1twb29s XS5wb29sbmFtZSkNCiAgICAgew0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfaW5p dCgmciwgYnVmLCBzaXplb2YoYnVmKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jv d19jb2x1bW5fdWludDMyKCZyLCBnZXRPd25Ob2RlSWQoKSk7DQotICAgICAgZGJp bmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBibik7ICAgICAgICAgICAv LyBibG9jayBudW1iZXINCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91 aW50MzIoJnIsIHJlcS5pbnN0YW5jZSk7IC8vIGJsb2NrIGluc3RhbmNlDQotICAg ICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIHBvb2xzW2ldLnBvb2xuYW1l LCBzdHJsZW4ocG9vbHNbaV0ucG9vbG5hbWUpKTsNCi0gICAgICBkYmluZm9fd3Jp dGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHBvb2xzW2ldLmZyZWUpOw0KLSAgICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcG9vbHNbaV0uc2l6 ZSk7DQotICAgICAgZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgciwgcmwsIHJlcS5h cGlUeG5JZCwgcmVxLmFwaVJlZik7DQorICAgICAgamFtKCk7DQorICAgICAgTmRi aW5mbzo6Um93IHJvdyhzaWduYWwsIHJlcSk7DQorICAgICAgcm93LndyaXRlX3Vp bnQzMihnZXRPd25Ob2RlSWQoKSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihi bik7ICAgICAgICAgICAvLyBibG9jayBudW1iZXINCisgICAgICByb3cud3JpdGVf dWludDMyKGluc3RhbmNlKCkpOyAvLyBibG9jayBpbnN0YW5jZQ0KKyAgICAgIHJv dy53cml0ZV9zdHJpbmcocG9vbHNbcG9vbF0ucG9vbG5hbWUpOw0KKyAgICAgIHJv dy53cml0ZV91aW50MzIocG9vbHNbcG9vbF0uZnJlZSk7DQorICAgICAgcm93Lndy aXRlX3VpbnQzMihwb29sc1twb29sXS5zaXplKTsNCisgICAgICBuZGJpbmZvX3Nl bmRfcm93KHNpZ25hbCwgcmVxLCByb3csIHJsKTsNCisgICAgICBwb29sKys7DQor ICAgICAgaWYgKHJsLm5lZWRfYnJlYWsocmVxKSkNCisgICAgICB7DQorICAgICAg ICBqYW0oKTsNCisgICAgICAgIG5kYmluZm9fc2VuZF9zY2FuX2JyZWFrKHNpZ25h bCwgcmVxLCBybCwgcG9vbCk7DQorICAgICAgICByZXR1cm47DQorICAgICAgfQ0K ICAgICB9DQogICB9DQogDQotICBEYmluZm9TY2FuQ29uZiAqY29uZj0gKERiaW5m b1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQotICBtZW1jcHko Y29uZiwmcmVxLCBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29y ICogc2l6ZW9mKFVpbnQzMikpOw0KLSAgY29uZi0+cmVxdWVzdEluZm8gJj0gfihE YmluZm9TY2FuQ29uZjo6TW9yZURhdGEpOw0KLSAgc2VuZFNpZ25hbChyZXEuc2Vu ZGVyUmVmLCBHU05fREJJTkZPX1NDQU5DT05GLA0KLSAgICAgICAgICAgICBzaWdu YWwsIERiaW5mb1NjYW5Db25mOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yLCBKQkIp Ow0KKyAgbmRiaW5mb19zZW5kX3NjYW5fY29uZihzaWduYWwsIHJlcSwgcmwpOw0K IH0NCiANCiAvLyBCdWlsZCBpbmRleA0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3Rv cmFnZS9uZGIvc3JjL2tlcm5lbC92bS9NYWtlZmlsZS5hbScNCi0tLSBhL3N0b3Jh Z2UvbmRiL3NyYy9rZXJuZWwvdm0vTWFrZWZpbGUuYW0JMjAwOS0wNS0yNyAxNToy MTo0NSArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9NYWtl ZmlsZS5hbQkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMzgsNyArMzgs OCBAQCBsaWJrZXJuZWxfYV9TT1VSQ0VTID0gXA0KIAluZGJkX21hbGxvY19pbXBs LmNwcCBcDQogCVBvb2wuY3BwIFdPUG9vbC5jcHAgUldQb29sLmNwcCBEeW5BcnIy NTYuY3BwIExvY2tRdWV1ZS5jcHAgXA0KIAlHbG9iYWxEYXRhLmNwcCBcDQotCVNh ZmVNdXRleC5jcHANCisJU2FmZU11dGV4LmNwcCBcDQorCU5kYmluZm8uY3BwDQog DQogbGlic2NoZWRfYV9TT1VSQ0VTID0gVGltZVF1ZXVlLmNwcAkJXA0KICAgICAg ICAgICAgICAgICAgICAgIFRocmVhZENvbmZpZy5jcHAgXA0KQEAgLTEyMCw0ICsx MjEsMyBAQCB0ZXN0U2FmZU11dGV4X0xERkxBR1MgPSBAbmRiX2Jpbl9hbV9sZGZs DQogICAkKHRvcF9idWlsZGRpcikvc3RyaW5ncy9saWJteXN0cmluZ3NsdC5sYSBc DQogICBAcmVhZGxpbmVfbGlua0AgQFRFUk1DQVBfTElCQA0KIA0KLQ0KDQo9PT0g YWRkZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9OZGJpbmZvLmNw cCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vTmRiaW5mby5jcHAJ MTk3MC0wMS0wMSAwMDowMDowMCArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3Jj L2tlcm5lbC92bS9OZGJpbmZvLmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAw DQpAQCAtMCwwICsxLDI5MSBAQA0KKy8qDQorICAgQ29weXJpZ2h0IChDKSAyMDA5 IFN1biBNaWNyb3N5c3RlbXMgSW5jLg0KKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQu IFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMuDQorDQorICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkNCisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZS4NCisNCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zg0KKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl DQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUNCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSAgVVNB DQorKi8NCisNCisjaW5jbHVkZSAiTmRiaW5mby5ocHAiDQorI2luY2x1ZGUgIlNp bXVsYXRlZEJsb2NrLmhwcCINCisjaW5jbHVkZSA8QXR0cmlidXRlSGVhZGVyLmhw cD4NCisjaW5jbHVkZSA8c2lnbmFsZGF0YS9UcmFuc0lkQUkuaHBwPg0KKw0KK05k YmluZm86OlJvdzo6Um93KFNpZ25hbCogc2lnbmFsLCBEYmluZm9TY2FuUmVxJiBy ZXEpIDoNCisgIGNvbF9jb3VudGVyKDApLA0KKyAgbV9yZXEocmVxKQ0KK3sNCisg IC8vIFVzZSB0aGUgInRlbXBvcmFyeSIgcGFydCBvZiBzaWduYWwtPnRoZURhdGEg YXMgcm93IGJ1ZmZlcg0KKyAgc3RhcnQgPSBzaWduYWwtPmdldERhdGFQdHJTZW5k KCkgKyBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGg7DQorICBjb25zdCBVaW50 MzIgZGF0YV9zeiA9IHNpemVvZihzaWduYWwtPnRoZURhdGEpL3NpemVvZihzaWdu YWwtPnRoZURhdGFbMF0pOw0KKyAgZW5kID0gc2lnbmFsLT5nZXREYXRhUHRyU2Vu ZCgpICsgZGF0YV9zejsNCisgIGFzc2VydChzdGFydCA8IGVuZCk7DQorDQorICBj dXJyID0gc3RhcnQ7DQorfQ0KKw0KK2Jvb2wNCitOZGJpbmZvOjpSb3c6OmNoZWNr X2J1ZmZlcl9zcGFjZShBdHRyaWJ1dGVIZWFkZXImIGFoKSBjb25zdA0KK3sNCisg IGNvbnN0IFVpbnQzMiBuZWVkZWQgPSAgYWguZ2V0SGVhZGVyU2l6ZSgpICsgYWgu Z2V0RGF0YVNpemUoKTsNCisgIGNvbnN0IFVpbnQzMiBhdmFpbCA9IChVaW50MzIp KGVuZCAtIGN1cnIpOw0KKw0KKyAgaWYobmVlZGVkID4gYXZhaWwpDQorICB7DQor ICAgIG5kYm91dF9jKCJXYXJuaW5nLCB0b28gc21hbGwgcm93IGJ1ZmZlciBmb3Ig YXR0cmlidXRlOiAlZCwgIg0KKyAgICAgICAgICAgICAibmVlZGVkOiAlZCwgYXZh aWw6ICVkIiwgYWguZ2V0QXR0cmlidXRlSWQoKSwgbmVlZGVkLCBhdmFpbCk7DQor ICAgIGFzc2VydChmYWxzZSk7DQorICAgIHJldHVybiBmYWxzZTsgLy8gTm90IGVu b3VnaCByb29tIGluIHJvdyBidWZmZXINCisgIH0NCisgIHJldHVybiB0cnVlOw0K K30NCisNCit2b2lkDQorTmRiaW5mbzo6Um93OjpjaGVja19hdHRyaWJ1dGVfdHlw ZShBdHRyaWJ1dGVIZWFkZXImIGFoLCBDb2x1bW5UeXBlIHR5cGUpIGNvbnN0DQor ew0KKyAgY29uc3QgVGFibGUmIHRhYiA9IGdldFRhYmxlKG1fcmVxLnRhYmxlSWQp Ow0KKyAgY29uc3QgVWludDMyIGNvbGlkID0gYWguZ2V0QXR0cmlidXRlSWQoKTsN CisgIGFzc2VydChjb2xpZCA8IHRhYi5tLm5jb2xzKTsNCisgIGFzc2VydCh0YWIu Y29sW2NvbGlkXS5jb2x0eXBlID09IHR5cGUpOw0KK30NCisNCit2b2lkDQorTmRi aW5mbzo6Um93Ojp3cml0ZV9zdHJpbmcoY29uc3QgY2hhciogc3RyKQ0KK3sNCisg IGNvbnN0IHNpemVfdCBjbGVuID0gc3RybGVuKHN0cikgKyAxOw0KKyAgLy8gQ3Jl YXRlIEF0dHJpYnV0ZUhlYWRlcg0KKyAgQXR0cmlidXRlSGVhZGVyIGFoKGNvbF9j b3VudGVyKyssIGNsZW4pOw0KKyAgY2hlY2tfYXR0cmlidXRlX3R5cGUoYWgsIE5k YmluZm86OlN0cmluZyk7DQorICBpZiAoIWNoZWNrX2J1ZmZlcl9zcGFjZShhaCkp DQorICAgIHJldHVybjsNCisNCisgIC8vIFdyaXRlIEF0dHJpYnV0ZUhlYWRlciB0 byBidWZmZXINCisgIGFoLmluc2VydEhlYWRlcihjdXJyKTsNCisgIGN1cnIgKz0g YWguZ2V0SGVhZGVyU2l6ZSgpOw0KKw0KKyAgLy8gV3JpdGUgZGF0YSB0byBidWZm ZXINCisgIG1lbWNweShjdXJyLCBzdHIsIGNsZW4pOw0KKyAgY3VyciArPSBhaC5n ZXREYXRhU2l6ZSgpOw0KKw0KKyAgYXNzZXJ0KGN1cnIgPD0gZW5kKTsNCisgIHJl dHVybjsNCit9DQorDQordm9pZA0KK05kYmluZm86OlJvdzo6d3JpdGVfdWludDMy KFVpbnQzMiB2YWx1ZSkNCit7DQorICAvLyBDcmVhdGUgQXR0cmlidXRlSGVhZGVy DQorICBBdHRyaWJ1dGVIZWFkZXIgYWgoY29sX2NvdW50ZXIrKywgc2l6ZW9mKFVp bnQzMikpOw0KKyAgY2hlY2tfYXR0cmlidXRlX3R5cGUoYWgsIE5kYmluZm86Ok51 bWJlcik7DQorICBpZiAoIWNoZWNrX2J1ZmZlcl9zcGFjZShhaCkpDQorICAgIHJl dHVybjsNCisNCisgIC8vIFdyaXRlIEF0dHJpYnV0ZUhlYWRlciB0byBidWZmZXIN CisgIGFoLmluc2VydEhlYWRlcihjdXJyKTsNCisgIGN1cnIgKz0gYWguZ2V0SGVh ZGVyU2l6ZSgpOw0KKw0KKyAgLy8gV3JpdGUgZGF0YSB0byBidWZmZXINCisgIG1l bWNweShjdXJyLCAmdmFsdWUsIHNpemVvZihVaW50MzIpKTsNCisgIGN1cnIgKz0g YWguZ2V0RGF0YVNpemUoKTsNCisNCisgIGFzc2VydChjdXJyIDw9IGVuZCk7DQor ICByZXR1cm47DQorfQ0KKw0KKw0KKyNkZWZpbmUgREVDTEFSRV9OREJJTkZPX1RB QkxFKHZhciwgbnVtKSAgXA0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgIHsgICAgICAg ICAgICAgICAgICAgXA0KKyAgTmRiaW5mbzo6VGFibGU6Ok1lbWJlcnMgbTsgICAg ICAgICAgICAgXA0KKyAgTmRiaW5mbzo6Q29sdW1uIGNvbFtudW1dOyAgICAgICAg ICAgICAgXA0KK30gdmFyDQorDQorDQorLyoqIFJlc2VydmVkIGZvciBEQklORk8g b25seSAqLw0KK0RFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJpbmZvX1RBQkxFUywz KSA9DQoreyAiVEFCTEVTIiwgMywgMCwNCisgIHsNCisgICAgeyJUQUJMRV9JRCIs ICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IlRBQkxFX05BTUUiLE5kYmluZm86 OlN0cmluZ30sDQorICAgIHsiQ1JFQVRFX1NRTCIsTmRiaW5mbzo6U3RyaW5nfSwN CisgIH19Ow0KKw0KKy8qKiBSZXNlcnZlZCBmb3IgREJJTkZPIG9ubHkgKi8NCitE RUNMQVJFX05EQklORk9fVEFCTEUobmRiaW5mb19DT0xVTU5TLDQpID0NCit7ICJD T0xVTU5TIiwgNCwgMCwNCisgIHsNCisgICAgeyJUQUJMRV9JRCIsICAgIE5kYmlu Zm86Ok51bWJlcn0sDQorICAgIHsiQ09MVU1OX0lEIiwgICBOZGJpbmZvOjpOdW1i ZXJ9LA0KKyAgICB7IkNPTFVNTl9OQU1FIiwgTmRiaW5mbzo6U3RyaW5nfSwNCisg ICAgeyJDT0xVTU5fVFlQRSIsIE5kYmluZm86OlN0cmluZ30sDQorICB9fTsNCisN CitERUNMQVJFX05EQklORk9fVEFCTEUobmRiaW5mb19NRU1VU0FHRSw3KSA9DQor eyAiTUVNVVNBR0UiLCA3LCAwLA0KKyAgew0KKyAgICB7Ik5PREVfSUQiLCAgICAg ICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IkJMT0NLX05VTUJFUiIsICAg ICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IkJMT0NLX0lOU1RBTkNFIiwgICBO ZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IlJFU09VUkNFX05BTUUiLCAgICBOZGJp bmZvOjpTdHJpbmd9LA0KKyAgICB7IlBBR0VfU0laRSIsICAgICAgICBOZGJpbmZv OjpOdW1iZXJ9LA0KKyAgICB7IlBBR0VTX1VTRUQiLCAgICAgICBOZGJpbmZvOjpO dW1iZXJ9LA0KKyAgICB7IlBBR0VTX1RPVEFMIiwgICAgICBOZGJpbmZvOjpOdW1i ZXJ9LA0KKyAgfX07DQorDQorREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9f TE9HREVTVElOQVRJT04sNSkgPQ0KK3sgIkxPR0RFU1RJTkFUSU9OIiwgNSwgMCwN CisgIHsNCisgICAgeyJOT0RFX0lEIixOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7 IlRZUEUiLE5kYmluZm86OlN0cmluZ30sDQorICAgIHsiUEFSQU1TIixOZGJpbmZv OjpTdHJpbmd9LA0KKyAgICB7IkNVUlJFTlRfU0laRSIsTmRiaW5mbzo6TnVtYmVy fSwNCisgICAgeyJNQVhfU0laRSIsTmRiaW5mbzo6TnVtYmVyfSwNCisgIH0NCit9 Ow0KKw0KK0RFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJpbmZvX0JBQ0tVUF9SRUNP UkRTLDExKSA9DQoreyAiQkFDS1VQX1JFQ09SRFMiLCAxMSwgMCwNCisgIHsNCisg ICAgeyJOT0RFX0lEIiwgICAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAg eyJCQUNLVVBfUkVDT1JEIiwgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJC QUNLVVBfSUQiLCAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJNQVNU RVJfUkVGIiwgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJDTElFTlRf UkVGIiwgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJTVEFURSIsICAg ICAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJCWVRFUyIsICAgICAg ICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJSRUNPUkRTIiwgICAgICAg ICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJMT0dfQllURVMiLCAgICAgICAg TmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJMT0dfUkVDT1JEUyIsICAgICAgTmRi aW5mbzo6TnVtYmVyfSwNCisgICAgeyJFUlJPUl9DT0RFIiwgICAgICAgTmRiaW5m bzo6TnVtYmVyfSwNCisgIH0NCit9Ow0KKw0KK0RFQ0xBUkVfTkRCSU5GT19UQUJM RShuZGJpbmZvX0JBQ0tVUF9QQVJBTUVURVJTLDE0KSA9DQoreyAiQkFDS1VQX1BB UkFNRVRFUlMiLCAxNCwgMCwNCisgIHsNCisgICAgeyJOT0RFX0lEIiwgICAgICAg ICAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IkNVUlJFTlRfRElT S19XUklURV9TUEVFRCIsIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiQllURVNf V1JJVFRFTl9USElTX1BFUklPRCIsTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJP VkVSRkxPV19ESVNLX1dSSVRFIiwgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAg ICB7IlJFU0VUX0RFTEFZX1VTRUQiLCAgICAgICAgIE5kYmluZm86Ok51bWJlcn0s DQorICAgIHsiUkVTRVRfRElTS19TUEVFRF9USU1FIiwgICAgTmRiaW5mbzo6TnVt YmVyfSwNCisgICAgeyJCQUNLVVBfUE9PTF9TSVpFIiwgICAgICAgICBOZGJpbmZv OjpOdW1iZXJ9LA0KKyAgICB7IkJBQ0tVUF9GSUxFX1BPT0xfU0laRSIsICAgIE5k YmluZm86Ok51bWJlcn0sDQorICAgIHsiVEFCTEVfUE9PTF9TSVpFIiwgICAgICAg ICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJUUklHR0VSX1BPT0xfU0laRSIs ICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IkZSQUdNRU5UX1BPT0xf U0laRSIsICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiUEFHRV9QT09M X1NJWkUiLCAgICAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJDT01Q UkVTU0VEX0JBQ0tVUCIsICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7 IkNPTVBSRVNTRURfTENQIiwgICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQor ICB9DQorfTsNCisNCitERUNMQVJFX05EQklORk9fVEFCTEUobmRiaW5mb19QT09M Uyw2KSA9DQoreyAiUE9PTFMiLCA2LCAwLA0KKyAgew0KKyAgICB7Ik5PREVfSUQi LCAgICAgICAgICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiQkxP Q0tfTlVNQkVSIiwgICAgICAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAg eyJCTE9DS19JTlNUQU5DRSIsICAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0K KyAgICB7IlBPT0xfTkFNRSIsICAgICAgICAgICAgICAgIE5kYmluZm86OlN0cmlu Z30sDQorICAgIHsiRlJFRSIsICAgICAgICAgICAgICAgICAgICAgTmRiaW5mbzo6 TnVtYmVyfSwNCisgICAgeyJTSVpFIiwgICAgICAgICAgICAgICAgICAgICBOZGJp bmZvOjpOdW1iZXJ9LA0KKyAgfQ0KK307DQorDQorREVDTEFSRV9OREJJTkZPX1RB QkxFKG5kYmluZm9fVEVTVCw0KSA9DQoreyAiVEVTVCIsIDQsIDAsDQorICB7DQor ICAgIHsiTk9ERV9JRCIsICAgICAgICAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9 LA0KKyAgICB7IkJMT0NLX05VTUJFUiIsICAgICAgICAgICAgTmRiaW5mbzo6TnVt YmVyfSwNCisgICAgeyJCTE9DS19JTlNUQU5DRSIsICAgICAgICAgIE5kYmluZm86 Ok51bWJlcn0sDQorICAgIHsiQ09VTlRFUiIsICAgICAgICAgICAgICAgICBOZGJp bmZvOjpOdW1iZXJ9LA0KKyAgfQ0KK307DQorDQorI2RlZmluZSBEQklORk9UQkwo eCkgKE5kYmluZm86OlRhYmxlKikmeA0KKw0KK3N0YXRpYyBOZGJpbmZvOjpUYWJs ZSAqbmRiaW5mb190YWJsZXNbXSA9IHsNCisgIERCSU5GT1RCTChuZGJpbmZvX1RB QkxFUyksDQorICBEQklORk9UQkwobmRiaW5mb19DT0xVTU5TKSwNCisgIERCSU5G T1RCTChuZGJpbmZvX01FTVVTQUdFKSwNCisgIERCSU5GT1RCTChuZGJpbmZvX0xP R0RFU1RJTkFUSU9OKSwNCisgIERCSU5GT1RCTChuZGJpbmZvX0JBQ0tVUF9SRUNP UkRTKSwNCisgIERCSU5GT1RCTChuZGJpbmZvX0JBQ0tVUF9QQVJBTUVURVJTKSwN CisgIERCSU5GT1RCTChuZGJpbmZvX1BPT0xTKSwNCisgIERCSU5GT1RCTChuZGJp bmZvX1RFU1QpLA0KK307DQorDQorc3RhdGljIGludCBudW1iZXJfbmRiaW5mb190 YWJsZXMgPQ0KKyAgc2l6ZW9mKG5kYmluZm9fdGFibGVzKSAvIHNpemVvZihuZGJp bmZvX3RhYmxlc1swXSk7DQorDQorDQoraW50IE5kYmluZm86OmdldE51bVRhYmxl cygpew0KKyAgcmV0dXJuIG51bWJlcl9uZGJpbmZvX3RhYmxlczsNCit9DQorDQor Y29uc3QgTmRiaW5mbzo6VGFibGUmIE5kYmluZm86OmdldFRhYmxlKGludCBpKQ0K K3sNCisgIGFzc2VydChpID49IDAgJiYgaSA8IG51bWJlcl9uZGJpbmZvX3RhYmxl cyk7DQorICByZXR1cm4gKm5kYmluZm9fdGFibGVzW2ldOw0KK30NCisNCitjb25z dCBOZGJpbmZvOjpUYWJsZSYgTmRiaW5mbzo6Z2V0VGFibGUoVWludDMyIGkpDQor ew0KKyAgcmV0dXJuIGdldFRhYmxlKChpbnQpaSk7DQorfQ0KKw0KK2ludA0KK05k YmluZm86OmNyZWF0ZV9zcWwoY29uc3QgTmRiaW5mbzo6VGFibGUmIHRhYiwNCisg ICAgICAgICAgICAgICAgICAgIGNoYXIqIHNxbCwgaW50IGxlbiwNCisgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxpbmVfc2VwYXJhdG9yKQ0KK3sNCisg IG15X3NucHJpbnRmKHNxbCxsZW4sIkNSRUFURSBUQUJMRSBgJXNgICgiLCB0YWIu bS5uYW1lKTsNCisNCisgIGxlbi09c3RybGVuKHNxbCk7DQorICBzcWwrPXN0cmxl bihzcWwpOw0KKyAgaWYobGVuPDApDQorICAgIHJldHVybiBFTk9NRU07DQorDQor ICBmb3IoaW50IGkgPSAwOyBpIDwgdGFiLm0ubmNvbHM7IGkrKykNCisgIHsNCisg ICAgbXlfc25wcmludGYoc3FsLCBsZW4sICIlc1x0YCVzYCAlcywiLA0KKyAgICAg ICAgICAgICAgICBsaW5lX3NlcGFyYXRvciwgdGFiLmNvbFtpXS5uYW1lLA0KKyAg ICAgICAgICAgICAgICBjb2x0eXBlX3RvX3N0cmluZyh0YWIuY29sW2ldLmNvbHR5 cGUpKTsNCisgICAgbGVuLT1zdHJsZW4oc3FsKTsNCisgICAgc3FsKz1zdHJsZW4o c3FsKTsNCisgICAgaWYobGVuPDApDQorICAgICAgcmV0dXJuIEVOT01FTTsNCisg IH0NCisgICooLS1zcWwpPSdcMCc7DQorICBteV9zbnByaW50ZihzcWwsbGVuLCIl cykgRU5HSU5FPU5EQklORk87IiwgbGluZV9zZXBhcmF0b3IpOw0KKyAgbGVuLT1z dHJsZW4oc3FsKTsNCisgIHNxbCs9c3RybGVuKHNxbCk7DQorICBpZihsZW48MCkN CisgICAgcmV0dXJuIEVOT01FTTsNCisNCisgIHJldHVybiAwOw0KK30NCisNCitj b25zdCBjaGFyKg0KK05kYmluZm86OmNvbHR5cGVfdG9fc3RyaW5nKENvbHVtblR5 cGUgY29sdHlwZSkgew0KKyAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVfc3RyaW5n W109IHsiTk9ORSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJWQVJDSEFSKDUxMikiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiSU5UIFVOU0lHTkVEIg0KKyAgfTsNCisNCisgIGlmKGNvbHR5 cGU+MykNCisgICAgY29sdHlwZT0gKENvbHVtblR5cGUpMDsNCisNCisgIHJldHVy biB0eXBlX3N0cmluZ1tjb2x0eXBlXTsNCit9DQorDQorDQoNCj09PSBhZGRlZCBm aWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL05kYmluZm8uaHBwJw0KLS0t IGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9OZGJpbmZvLmhwcAkxOTcwLTAx LTAxIDAwOjAwOjAwICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVs L3ZtL05kYmluZm8uaHBwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0w LDAgKzEsMTU5IEBADQorLyoNCisgICBDb3B5cmlnaHQgKEMpIDIwMDkgU3VuIE1p Y3Jvc3lzdGVtcyBJbmMuDQorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlz IHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcy4NCisNCisgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQ0KKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQorICAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLg0K Kw0KKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQ0KKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuDQorDQorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQ0KKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxICBVU0ENCisqLw0K Kw0KKyNpZm5kZWYgS0VSTkVMX05EQklORk9fSFBQDQorI2RlZmluZSBLRVJORUxf TkRCSU5GT19IUFANCisNCisjaW5jbHVkZSA8c2lnbmFsZGF0YS9EYmluZm9TY2Fu LmhwcD4NCisNCitjbGFzcyBOZGJpbmZvIHsNCitwdWJsaWM6DQorDQorICBlbnVt IENvbHVtblR5cGUgew0KKyAgICBTdHJpbmcgPSAxLA0KKyAgICBOdW1iZXIgPSAy DQorICB9Ow0KKw0KKyAgc3RydWN0IENvbHVtbiB7DQorICAgIGNoYXIgbmFtZVs1 MF07DQorICAgIENvbHVtblR5cGUgY29sdHlwZTsNCisgIH07DQorDQorICBzdGF0 aWMgY29uc3QgY2hhciogY29sdHlwZV90b19zdHJpbmcoQ29sdW1uVHlwZSBjb2x0 eXBlKTsNCisNCisgIGVudW0gVGFibGVJZCB7DQorICAgIFRBQkxFU19UQUJMRUlE ID0gICAgICAgICAgICAgMCwNCisgICAgQ09MVU1OU19UQUJMRUlEID0gICAgICAg ICAgICAxLA0KKyAgICBNRU1VU0FHRV9UQUJMRUlEID0gICAgICAgICAgIDIsDQor ICAgIExPR0RFU1RJTkFUSU9OX1RBQkxFSUQgPSAgICAgMywNCisgICAgQkFDS1VQ X1JFQ09SRFNfVEFCTEVJRCA9ICAgICA0LA0KKyAgICBCQUNLVVBfUEFSQU1FVEVS U19UQUJMRUlEID0gIDUsDQorICAgIFBPT0xTX1RBQkxFSUQgPSAgICAgICAgICAg ICAgNiwNCisgICAgVEVTVF9UQUJMRUlEID0gICAgICAgICAgICAgICA3DQorICB9 Ow0KKw0KKyAgc3RydWN0IFRhYmxlIHsNCisgICAgc3RydWN0IE1lbWJlcnMgew0K KyAgICAgIGNoYXIgbmFtZVs1MF07DQorICAgICAgaW50IG5jb2xzOw0KKyAgICAg IGludCBmbGFnczsNCisgICAgfSBtOw0KKyAgICBDb2x1bW4gY29sWzFdOw0KKw0K KyAgICBpbnQgY29sdW1ucyh2b2lkKSBjb25zdCB7DQorICAgICAgcmV0dXJuIG0u bmNvbHM7DQorICAgIH0NCisgIH07DQorICBzdGF0aWMgaW50IGdldE51bVRhYmxl cygpOw0KKyAgc3RhdGljIGNvbnN0IFRhYmxlJiBnZXRUYWJsZShpbnQgaSk7DQor ICBzdGF0aWMgY29uc3QgVGFibGUmIGdldFRhYmxlKFVpbnQzMiBpKTsNCisgIHN0 YXRpYyBpbnQgY3JlYXRlX3NxbChjb25zdCBUYWJsZSYgdCwgY2hhciogc3FsLCBp bnQgbGVuLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxp bmVfc2VwYXJhdG9yID0gIlxuIik7DQorDQorICBjbGFzcyBSb3cgew0KKyAgICBm cmllbmQgY2xhc3MgU2ltdWxhdGVkQmxvY2s7DQorICAgIFVpbnQzMiogc3RhcnQ7 ICAgICAgLy8gU3RhcnQgb2Ygcm93IGJ1ZmZlcg0KKyAgICBVaW50MzIqIGN1cnI7 ICAgICAgIC8vIEN1cnJlbnQgcG9zaXRpb24gaW4gcm93IGJ1ZmZlcg0KKyAgICBV aW50MzIqIGVuZDsgICAgICAgIC8vIEVuZCBvZiBidWZmZXINCisgICAgaW50IGNv bF9jb3VudGVyOyAgICAvLyBDdXJyZW50IGNvbHVtbiBjb3VudGVyDQorICAgIERi aW5mb1NjYW4mIG1fcmVxOyAgLy8gVGhlIHNjYW4gcGFyYW1ldGVycw0KKyAgICBS b3coKTsgICAgICAgICAgICAgIC8vIE5vdCBpbXBsDQorICAgIFJvdyhjb25zdCBS b3cmKTsgICAgLy8gTm90IGltcGwNCisgIHB1YmxpYzoNCisNCisgICAgUm93KGNs YXNzIFNpZ25hbCogc2lnbmFsLCBEYmluZm9TY2FuUmVxJiByZXEpOw0KKw0KKyAg ICBVaW50MzIgZ2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsNCisgICAgICByZXR1cm4g KFVpbnQzMikoY3VyciAtIHN0YXJ0KTsNCisgICAgfQ0KKw0KKyAgICBVaW50MzIq IGdldERhdGFQdHIoKSBjb25zdCB7DQorICAgICAgcmV0dXJuIHN0YXJ0Ow0KKyAg ICB9DQorDQorICAgIHZvaWQgd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIqIGNvbCk7 DQorICAgIHZvaWQgd3JpdGVfdWludDMyKFVpbnQzMiB2YWx1ZSk7DQorDQorICAg IGludCBjb2x1bW5zKHZvaWQpIGNvbnN0IHsNCisgICAgICByZXR1cm4gY29sX2Nv dW50ZXI7DQorICAgIH0NCisNCisgIHByaXZhdGU6DQorICAgIGJvb2wgY2hlY2tf YnVmZmVyX3NwYWNlKGNsYXNzIEF0dHJpYnV0ZUhlYWRlciYgYWgpIGNvbnN0Ow0K KyAgICB2b2lkIGNoZWNrX2F0dHJpYnV0ZV90eXBlKGNsYXNzIEF0dHJpYnV0ZUhl YWRlciYgYWgsIENvbHVtblR5cGUpIGNvbnN0Ow0KKyAgfTsNCisNCisgIHN0cnVj dCBTY2FuQ3Vyc29yDQorICB7DQorICAgIFVpbnQzMiBzZW5kZXJSZWY7DQorICAg IFVpbnQzMiBzYXZlU2VuZGVyUmVmOw0KKyAgICBVaW50MzIgY3VyclJlZjsgLy8g VGhlIGN1cnJlbnQgbm9kZSwgYmxvY2sgYW5kIGluc3RhbmNlDQorICAgIFVpbnQz MiBzYXZlQ3VyclJlZjsNCisgICAgLyoqDQorICAgICAqIEZsYWdzDQorICAgICAq DQorICAgICBtID0gTW9yZSBkYXRhICAgICAgICAgLSAxICBCaXQgMQ0KKw0KKyAg ICAgICAgICAgICAgIDExMTExMTExMTEyMjIyMjIyMjIyMzMNCisgICAgIDAxMjM0 NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxDQorICAgICBtDQorICAgICovDQor ICAgIFVpbnQzMiBmbGFnczsNCisgICAgVWludDMyIGRhdGFbNF07ICAvLyBDdXJz b3IgZGF0YQ0KKw0KKyAgICBVaW50MzIgdG90YWxSb3dzOyAvLyBNQVNWIGhtbT8g SXMgaXQgcmVhbGx5IHVzZWQuLi4NCisgICAgVWludDMyIHRvdGFsQnl0ZXM7DQor ICAgIFNUQVRJQ19DT05TVCggTGVuZ3RoID0gMTAgKTsNCisgICAgDQorICAgIFNU QVRJQ19DT05TVCggTU9SRURBVEFfU0hJRlQgPSAwICk7DQorICAgIFNUQVRJQ19D T05TVCggTU9SRURBVEFfTUFTSyA9IDEgKTsNCisNCisgICAgc3RhdGljIGJvb2wg Z2V0SGFzTW9yZURhdGEoY29uc3QgVWludFIgJiBmbGFncyl7DQorICAgICAgcmV0 dXJuIChib29sKSgoZmxhZ3MgPj4gTU9SRURBVEFfU0hJRlQpICYgTU9SRURBVEFf TUFTSyk7DQorICAgIH0NCisgICAgc3RhdGljIHZvaWQgc2V0SGFzTW9yZURhdGEo VWludFIgJiBmbGFncywgYm9vbCB2YWx1ZSl7DQorICAgICAgZmxhZ3MgPSAoZmxh Z3MgJiB+KE1PUkVEQVRBX01BU0sgPDwgTU9SRURBVEFfU0hJRlQpKSB8DQorICAg ICAgICAgICAgICAoKHZhbHVlICYgTU9SRURBVEFfTUFTSykgPDwgTU9SRURBVEFf U0hJRlQpOw0KKyAgICB9DQorICB9Ow0KKw0KKyAgY2xhc3MgUmF0ZWxpbWl0IHsN CisgICAgZnJpZW5kIGNsYXNzIFNpbXVsYXRlZEJsb2NrOw0KKyAgICBVaW50MzIg cm93czsNCisgICAgVWludDMyIGJ5dGVzOw0KKyAgICBSYXRlbGltaXQoY29uc3Qg UmF0ZWxpbWl0Jik7Ly8gTm90IGltcGwNCisgIHB1YmxpYzoNCisgICAgUmF0ZWxp bWl0KCkgOg0KKyAgICAgIHJvd3MoMCksDQorICAgICAgYnl0ZXMoMCl7DQorICAg IH0NCisNCisgICAgYm9vbCBuZWVkX2JyZWFrKGNvbnN0IERiaW5mb1NjYW4mIHNj YW4pIGNvbnN0IHsNCisgICAgICAvLyBBdXRvbWF0aWNhbGx5IGxpbWl0IHRoZSBt YXhSb3dzIHZhbHVlDQorICAgICAgVWludDMyIG1heFJvd3MgPSBtaW4oc2Nhbi5t YXhSb3dzID8gc2Nhbi5tYXhSb3dzIDogMjU2LCAyNTYpOw0KKw0KKyAgICAgIGlm IChtYXhSb3dzICE9IDAgJiYgcm93cyA+PSBtYXhSb3dzKQ0KKyAgICAgICAgcmV0 dXJuIHRydWU7IC8vIE1vcmUgdGhhbiBtYXggcm93cyBhbHJlYWR5IHNlbnQNCisg ICAgICBpZiAoc2Nhbi5tYXhCeXRlcyAhPSAwICYmICBieXRlcyA+PSBzY2FuLm1h eEJ5dGVzKQ0KKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIE1vcmUgdGhhbiBtYXgg Ynl0ZXMgYWxyZWFkeSBzZW50DQorICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9 DQorICB9Ow0KK307DQorDQorI2VuZGlmDQoNCj09PSBtb2RpZmllZCBmaWxlICdz dG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL1NpbXVsYXRlZEJsb2NrLmNwcCcNCi0t LSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vU2ltdWxhdGVkQmxvY2suY3Bw CTIwMDktMDYtMzAgMTg6NDk6NTMgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3Ny Yy9rZXJuZWwvdm0vU2ltdWxhdGVkQmxvY2suY3BwCTIwMDktMDctMDMgMTA6MzM6 NDQgKzAwMDANCkBAIC01NCw2ICs1NCw4IEBADQogI2luY2x1ZGUgPHNpZ25hbGRh dGEvQ2FsbGJhY2tTaWduYWwuaHBwPg0KICNpbmNsdWRlICJMb25nU2lnbmFsSW1w bC5ocHAiDQogDQorI2luY2x1ZGUgPHNpZ25hbGRhdGEvVHJhbnNJZEFJLmhwcD4N CisNCiAjaW5jbHVkZSA8RXZlbnRMb2dnZXIuaHBwPg0KIGV4dGVybiBFdmVudExv Z2dlciAqIGdfZXZlbnRMb2dnZXI7DQogDQpAQCAtMzY2MywzICszNjY1LDk2IEBA IFNpbXVsYXRlZEJsb2NrOjpkZWJ1Z091dFRhZyhjaGFyICpidWYsIGkNCiAgIHJl dHVybiBidWY7DQogfQ0KICNlbmRpZg0KKw0KK3ZvaWQNCitTaW11bGF0ZWRCbG9j azo6bmRiaW5mb19zZW5kX3JvdyhTaWduYWwqIHNpZ25hbCwNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEYmluZm9TY2FuUmVxJiByZXEs DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmRiaW5m bzo6Um93JiByb3csDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TmRiaW5mbzo6UmF0ZWxpbWl0JiBybCkgY29uc3QNCit7DQorICAvLyBDaGVjayBj b3JyZWN0IG51bWJlciBvZiBjb2x1bW5zIGFnYWluc3QgdGFibGUNCisgIGFzc2Vy dChyb3cuY29sdW1ucygpID09IE5kYmluZm86OmdldFRhYmxlKHJlcS50YWJsZUlk KS5jb2x1bW5zKCkpOw0KKw0KKyAgVHJhbnNJZEFJICp0aWRhaT0gKFRyYW5zSWRB SSopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KKyAgdGlkYWktPmNvbm5lY3RQ dHI9IHJlcS5yZXN1bHREYXRhOw0KKyAgdGlkYWktPnRyYW5zSWRbMF09IHJlcS50 cmFuc0lkWzBdOw0KKyAgdGlkYWktPnRyYW5zSWRbMV09IHJlcS50cmFuc0lkWzFd Ow0KKw0KKyAgTGluZWFyU2VjdGlvblB0ciBwdHJbM107DQorICBwdHJbMF0ucCA9 IHJvdy5nZXREYXRhUHRyKCk7DQorICBwdHJbMF0uc3ogPSByb3cuZ2V0TGVuZ3Ro KCk7DQorDQorICBybC5yb3dzKys7DQorICBybC5ieXRlcyArPSByb3cuZ2V0TGVu Z3RoKCk7DQorDQorICBzZW5kU2lnbmFsKHJlcS5yZXN1bHRSZWYsIEdTTl9EQklO Rk9fVFJBTlNJRF9BSSwNCisgICAgICAgICAgICAgc2lnbmFsLCBUcmFuc0lkQUk6 OkhlYWRlckxlbmd0aCwgSkJCLCBwdHIsIDEpOw0KK30NCisNCit2b2lkDQorU2lt dWxhdGVkQmxvY2s6Om5kYmluZm9fc2VuZF9zY2FuX2JyZWFrKFNpZ25hbCogc2ln bmFsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERi aW5mb1NjYW5SZXEmIHJlcSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBOZGJpbmZvOjpSYXRlbGltaXQmIHJsLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVpbnQzMiBkYXRhMSwg VWludDMyIGRhdGEyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFVpbnQzMiBkYXRhMywgVWludDMyIGRhdGE0KSBjb25zdA0KK3sNCisg IERiaW5mb1NjYW5Db25mKiBjb25mPSAoRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+ Z2V0RGF0YVB0clNlbmQoKTsNCisgIGNvbnN0IFVpbnQzMiBzaWduYWxfbGVuZ3Ro ID0gRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoICsgcmVxLmN1cnNvcl9zejsN CisgIE1FTUNPUFlfTk9fV09SRFMoY29uZiwgJnJlcSwgc2lnbmFsX2xlbmd0aCk7 DQorDQorICBjb25mLT5yZXR1cm5lZFJvd3MgPSBybC5yb3dzOw0KKw0KKyAgLy8g VXBkYXRlIHRoZSBjdXJzb3Igd2l0aCBjdXJyZW50IGl0ZW0gbnVtYmVyDQorICBO ZGJpbmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAoTmRiaW5mbzo6U2Nh bkN1cnNvciopRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyU2VuZChjb25mKTsNCisN CisgIGN1cnNvci0+ZGF0YVswXSA9IGRhdGExOw0KKyAgY3Vyc29yLT5kYXRhWzFd ID0gZGF0YTI7DQorICBjdXJzb3ItPmRhdGFbMl0gPSBkYXRhMzsNCisgIGN1cnNv ci0+ZGF0YVszXSA9IGRhdGE0Ow0KKw0KKyAgLy8gSW5jcmVhc2UgbnVtYmVyIG9m IHJvd3MgYW5kIGJ5dGVzIHNlbnQgdG8gZmFyDQorICBjdXJzb3ItPnRvdGFsUm93 cyArPSBybC5yb3dzOw0KKyAgY3Vyc29yLT50b3RhbEJ5dGVzICs9IHJsLmJ5dGVz Ow0KKw0KKyAgTmRiaW5mbzo6U2NhbkN1cnNvcjo6c2V0SGFzTW9yZURhdGEoY3Vy c29yLT5mbGFncywgdHJ1ZSk7DQorDQorICBzZW5kU2lnbmFsKGN1cnNvci0+c2Vu ZGVyUmVmLCBHU05fREJJTkZPX1NDQU5DT05GLCBzaWduYWwsDQorICAgICAgICAg ICAgIHNpZ25hbF9sZW5ndGgsIEpCQik7DQorfQ0KKw0KK3ZvaWQNCitTaW11bGF0 ZWRCbG9jazo6bmRiaW5mb19zZW5kX3NjYW5fY29uZihTaWduYWwqIHNpZ25hbCwN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYmluZm9T Y2FuUmVxJiByZXEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgTmRiaW5mbzo6UmF0ZWxpbWl0JiBybCkgY29uc3QNCit7DQor ICBEYmluZm9TY2FuQ29uZiogY29uZj0gKERiaW5mb1NjYW5Db25mKilzaWduYWwt PmdldERhdGFQdHJTZW5kKCk7DQorICBjb25zdCBVaW50MzIgc2lnbmFsX2xlbmd0 aCA9IERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aCArIHJlcS5jdXJzb3Jfc3o7 DQorICBVaW50MzIgc2VuZGVyX3JlZiA9IHJlcS5yZXN1bHRSZWY7DQorICBNRU1D T1BZX05PX1dPUkRTKGNvbmYsICZyZXEsIHNpZ25hbF9sZW5ndGgpOw0KKw0KKyAg Y29uZi0+cmV0dXJuZWRSb3dzID0gcmwucm93czsNCisNCisgIGlmIChyZXEuY3Vy c29yX3N6KQ0KKyAgew0KKyAgICBqYW0oKTsNCisgICAgLy8gVXBkYXRlIHRoZSBj dXJzb3Igd2l0aCBjdXJyZW50IGl0ZW0gbnVtYmVyDQorICAgIE5kYmluZm86OlNj YW5DdXJzb3IqIGN1cnNvciA9DQorICAgICAgKE5kYmluZm86OlNjYW5DdXJzb3Iq KURiaW5mb1NjYW46OmdldEN1cnNvclB0clNlbmQoY29uZik7DQorDQorICAgIC8v IFJlc2V0IGFsbCBkYXRhIGhvbGRlcnMNCisgICAgbWVtc2V0KGN1cnNvci0+ZGF0 YSwgMCwgc2l6ZW9mKGN1cnNvci0+ZGF0YSkpOw0KKw0KKyAgICAvLyBJbmNyZWFz ZSBudW1iZXIgb2Ygcm93cyBhbmQgYnl0ZXMgc2VudCB0byBmYXINCisgICAgY3Vy c29yLT50b3RhbFJvd3MgKz0gcmwucm93czsNCisgICAgY3Vyc29yLT50b3RhbEJ5 dGVzICs9IHJsLmJ5dGVzOw0KKw0KKyAgICBOZGJpbmZvOjpTY2FuQ3Vyc29yOjpz ZXRIYXNNb3JlRGF0YShjdXJzb3ItPmZsYWdzLCBmYWxzZSk7DQorDQorICAgIHNl bmRlcl9yZWYgPSBjdXJzb3ItPnNlbmRlclJlZjsNCisNCisgIH0NCisgIHNlbmRT aWduYWwoc2VuZGVyX3JlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFsLA0K KyAgICAgICAgICAgICBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KK30NCisNCg0KPT09 IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vU2ltdWxh dGVkQmxvY2suaHBwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9T aW11bGF0ZWRCbG9jay5ocHAJMjAwOS0wNi0zMCAxODo0OTo1MyArMDAwMA0KKysr IGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9TaW11bGF0ZWRCbG9jay5ocHAJ MjAwOS0wNy0wMyAxMDozMzo0NCArMDAwMA0KQEAgLTU4LDYgKzU4LDggQEANCiAj aW5jbHVkZSAibmRiZF9tYWxsb2NfaW1wbC5ocHAiDQogI2luY2x1ZGUgPGJsb2Nr cy9yZWNvcmRfdHlwZXMuaHBwPg0KIA0KKyNpbmNsdWRlICJOZGJpbmZvLmhwcCIN CisNCiAjaWZkZWYgVk1fVFJBQ0UNCiAjZGVmaW5lIEQoeCkgXA0KICAgZG8geyBc DQpAQCAtMTAwNiw2ICsxMDA4LDIxIEBAIHB1YmxpYzoNCiAgIHZvaWQgZGVidWdP dXRVbmxvY2soKSB7IGdsb2JhbFNpZ25hbExvZ2dlcnMudW5sb2NrKCk7IH0NCiAg IGNvbnN0IGNoYXIqIGRlYnVnT3V0VGFnKGNoYXIqIGJ1ZiwgaW50IGxpbmUpOw0K ICNlbmRpZg0KKw0KKyAgdm9pZCBuZGJpbmZvX3NlbmRfcm93KFNpZ25hbCogc2ln bmFsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERiaW5mb1NjYW5S ZXEmIHJlcSwNCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOZGJpbmZv OjpSb3cmIHJvdywNCisgICAgICAgICAgICAgICAgICAgICAgICBOZGJpbmZvOjpS YXRlbGltaXQmIHJsKSBjb25zdDsNCisNCisgIHZvaWQgbmRiaW5mb19zZW5kX3Nj YW5fYnJlYWsoU2lnbmFsKiBzaWduYWwsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERiaW5mb1NjYW5SZXEmIHJlcSwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgTmRiaW5mbzo6UmF0ZWxpbWl0JiBybCwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVWludDMyIGRhdGExLCBVaW50 MzIgZGF0YTIgPSAwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV aW50MzIgZGF0YTMgPSAwLCBVaW50MzIgZGF0YTQgPSAwKSBjb25zdDsNCisNCisg IHZvaWQgbmRiaW5mb19zZW5kX3NjYW5fY29uZihTaWduYWwqIHNpZ25hbCwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYmluZm9TY2FuUmVxJiByZXEs DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmRiaW5mbzo6 UmF0ZWxpbWl0JiBybCkgY29uc3Q7DQogfTsNCiANCiAvLyBvdXRzaWRlIGJsb2Nr cyBlLmcuIHdpdGhpbiBhIHN0cnVjdA0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3Rv cmFnZS9uZGIvc3JjL21nbXNydi9NYWtlZmlsZS5hbScNCi0tLSBhL3N0b3JhZ2Uv bmRiL3NyYy9tZ21zcnYvTWFrZWZpbGUuYW0JMjAwOS0wNS0yNyAxNToyMTo0NSAr MDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL21nbXNydi9NYWtlZmlsZS5hbQky MDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMzAsNyArMzAsNiBAQCBuZGJf bWdtZF9TT1VSQ0VTID0gXA0KIAlDb25maWdJbmZvLmNwcCBcDQogCUluaXRDb25m aWdGaWxlUGFyc2VyLmNwcCBcDQogCUNvbmZpZy5jcHAgXA0KLQltZ21fbmRiaW5m by5jcHAgXA0KIAlDb25maWdNYW5hZ2VyLmNwcCBcDQogCURpckl0ZXJhdG9yLmNw cA0KIA0KDQo9PT0gcmVtb3ZlZCBmaWxlICdzdG9yYWdlL25kYi9zcmMvbWdtc3J2 L21nbV9uZGJpbmZvLmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9tZ21zcnYv bWdtX25kYmluZm8uY3BwCTIwMDgtMTAtMDYgMDY6NTM6MDQgKzAwMDANCisrKyBi L3N0b3JhZ2UvbmRiL3NyYy9tZ21zcnYvbWdtX25kYmluZm8uY3BwCTE5NzAtMDEt MDEgMDA6MDA6MDAgKzAwMDANCkBAIC0xLDE0ICswLDAgQEANCi0NCi0jaW5jbHVk ZSA8QmFzZVN0cmluZy5ocHA+DQotI2luY2x1ZGUgPG5kYmluZm8uaD4NCi0NCi1p bnQgcHJpbnRfbmRiaW5mb190YWJsZV9tZ20oc3RydWN0IG5kYmluZm9fdGFibGUq IHQsIEJhc2VTdHJpbmcgJm91dCkNCi17DQotICBpbnQgaTsNCi0gIG91dC5hcHBm bXQoIiVkXG4iLHQtPm5jb2xzKTsNCi0NCi0gIGZvcihpPTA7aTx0LT5uY29scztp KyspDQotICAgIG91dC5hcHBmbXQoIiVzXG4iLHQtPmNvbFtpXS5uYW1lKTsNCi0N Ci0gIHJldHVybiAwOw0KLX0NCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2Uv bmRiL3NyYy9uZGJhcGkvTmRiSW5mby5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9z cmMvbmRiYXBpL05kYkluZm8uY3BwCTIwMDktMDYtMjQgMDg6Mzk6MDkgKzAwMDAN CisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiSW5mby5jcHAJMjAwOS0w Ny0wMyAxMDozMTozMCArMDAwMA0KQEAgLTI2NywxMyArMjY3LDE3IEBAIGJvb2wg TmRiSW5mbzo6bG9hZF90YWJsZXMoKQ0KIH0NCiANCiBpbnQgTmRiSW5mbzo6Y3Jl YXRlU2Nhbk9wZXJhdGlvbihjb25zdCBJbmZvVGFibGUqIHRhYmxlLA0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5kYkluZm9TY2FuT3BlcmF0aW9u KiogcmV0X3NjYW5fb3ApDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTmRiSW5mb1NjYW5PcGVyYXRpb24qKiByZXRfc2Nhbl9vcCwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50MzIgbWF4X3Jvd3MsIFVpbnQz MiBtYXhfYnl0ZXMpDQogew0KLSAgTmRiSW5mb1NjYW5PcGVyYXRpb24qIHNjYW5f b3AgPSBuZXcgTmRiSW5mb1NjYW5PcGVyYXRpb24obV9jb25uZWN0aW9uLCB0YWJs ZSk7DQorICBOZGJJbmZvU2Nhbk9wZXJhdGlvbiogc2Nhbl9vcCA9IG5ldyBOZGJJ bmZvU2Nhbk9wZXJhdGlvbihtX2Nvbm5lY3Rpb24sDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJs ZSwgbWF4X3Jvd3MsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfYnl0ZXMpOw0KICAgaWYgKCFz Y2FuX29wKQ0KICAgICByZXR1cm4gRVJSX091dE9mTWVtb3J5Ow0KLQ0KLSAgaWYg KCFzY2FuX29wLT5pbml0KCkpDQorICAvLyBHbG9iYWwgaWQgY291bnRlciwgbm90 IGNyaXRpY2FsIGlmIHlvdSBnZXQgc2FtZSBpZCBvbiB0d28gaW5zdGFuY2VzDQor ICAvLyBzaW5jZSByZWZlcmVuY2UgaXMgYWxzbyBwYXJ0IG9mIHRoZSB1bmlxdWUg aWRlbnRpZmllci4NCisgIGlmICghc2Nhbl9vcC0+aW5pdChtX2lkX2NvdW50ZXIr KykpDQogICB7DQogICAgIGRlbGV0ZSBzY2FuX29wOw0KICAgICByZXR1cm4gRVJS X0NsdXN0ZXJGYWlsdXJlOw0KQEAgLTI4NCw3ICsyODgsNyBAQCBpbnQgTmRiSW5m bzo6Y3JlYXRlU2Nhbk9wZXJhdGlvbihjb25zdCBJDQogICByZXR1cm4gMDsNCiB9 DQogDQotdm9pZCBOZGJJbmZvOjpyZWxlYXNlU2Nhbk9wZXJhdGlvbihOZGJJbmZv U2Nhbk9wZXJhdGlvbiogc2Nhbl9vcCkNCit2b2lkIE5kYkluZm86OnJlbGVhc2VT Y2FuT3BlcmF0aW9uKE5kYkluZm9TY2FuT3BlcmF0aW9uKiBzY2FuX29wKSBjb25z dA0KIHsNCiAgIGRlbGV0ZSBzY2FuX29wOw0KIH0NCkBAIC0yOTcsMTEgKzMwMSw5 IEBAIHZvaWQgTmRiSW5mbzo6Zmx1c2hfdGFibGVzKCkNCiAgIGFzc2VydChtX3Rh Ymxlcy5lbnRyaWVzKCkgPT0gTlVNX0hBUkRDT0RFRF9UQUJMRVMpOw0KIH0NCiAN Ci1pbnQNCi1OZGJJbmZvOjpvcGVuVGFibGUoY29uc3QgY2hhciogdGFibGVfbmFt ZSwNCi0gICAgICAgICAgICAgICAgICAgY29uc3QgTmRiSW5mbzo6SW5mb1RhYmxl KiogdGFibGVfY29weSkNCitib29sDQorTmRiSW5mbzo6Y2hlY2tfdGFibGVzKCkN CiB7DQotICBwdGhyZWFkX211dGV4X2xvY2soJm1fbXV0ZXgpOw0KICAgaWYgKG1f Y29ubmVjdGlvbi0+Z2V0X2Nvbm5lY3RfY291bnQoKSAhPSBtX2Nvbm5lY3RfY291 bnQpDQogICB7DQogICAgIC8vIENvbm5lY3QgY291bnQgaGFzIGNoYW5nZWQgLT4g Zmx1c2ggdGhlIGNhY2hlZCB0YWJsZSBkZWZpbml0aW9ucw0KQEAgLTMxMywxMiAr MzE1LDI1IEBAIE5kYkluZm86Om9wZW5UYWJsZShjb25zdCBjaGFyKiB0YWJsZV9u YW0NCiAgICAgLy8gZmx1c2hlZCwgdHJ5IHRvIGxvYWQgaXQNCiAgICAgaWYgKCFs b2FkX3RhYmxlcygpKQ0KICAgICB7DQotICAgICAgcHRocmVhZF9tdXRleF91bmxv Y2soJm1fbXV0ZXgpOw0KLSAgICAgIHJldHVybiBFUlJfQ2x1c3RlckZhaWx1cmU7 DQorICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICB9DQogICB9DQogICAvLyBNYWtl IHN1cmUgdGhhdCBzb21lIGR5bmFtaWMgdGFibGVzIGhhdmUgYmVlbiBsb2FkZWQN CiAgIGFzc2VydChtX3RhYmxlcy5lbnRyaWVzKCkgPiBOVU1fSEFSRENPREVEX1RB QkxFUyk7DQorICByZXR1cm4gdHJ1ZTsNCit9DQorDQorDQoraW50DQorTmRiSW5m bzo6b3BlblRhYmxlKGNvbnN0IGNoYXIqIHRhYmxlX25hbWUsDQorICAgICAgICAg ICAgICAgICAgIGNvbnN0IE5kYkluZm86OkluZm9UYWJsZSoqIHRhYmxlX2NvcHkp DQorew0KKyAgcHRocmVhZF9tdXRleF9sb2NrKCZtX211dGV4KTsNCisNCisgIGlm ICghY2hlY2tfdGFibGVzKCkpew0KKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygm bV9tdXRleCk7DQorICAgIHJldHVybiBFUlJfQ2x1c3RlckZhaWx1cmU7DQorICB9 DQogDQogICBJbmZvVGFibGUqIHRhYjsNCiAgIGlmICghbV90YWJsZXMuc2VhcmNo KHRhYmxlX25hbWUsICZ0YWIpKQ0KQEAgLTMzNSw2ICszNTAsNDIgQEAgTmRiSW5m bzo6b3BlblRhYmxlKGNvbnN0IGNoYXIqIHRhYmxlX25hbQ0KICAgcmV0dXJuIDA7 DQogfQ0KIA0KK2ludA0KK05kYkluZm86Om9wZW5UYWJsZShVaW50MzIgdGFibGVJ ZCwNCisgICAgICAgICAgICAgICAgICAgY29uc3QgTmRiSW5mbzo6SW5mb1RhYmxl KiogdGFibGVfY29weSkNCit7DQorICBwdGhyZWFkX211dGV4X2xvY2soJm1fbXV0 ZXgpOw0KKw0KKyAgaWYgKCFjaGVja190YWJsZXMoKSl7DQorICAgIHB0aHJlYWRf bXV0ZXhfdW5sb2NrKCZtX211dGV4KTsNCisgICAgcmV0dXJuIEVSUl9DbHVzdGVy RmFpbHVyZTsNCisgIH0NCisNCisgIC8vIEZpbmQgdGhlIHRhYmxlIHdpdGggY29y cmVjdCBpZA0KKyAgY29uc3QgSW5mb1RhYmxlKiB0YWJsZSA9IE5VTEw7DQorICBm b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGFibGVzLmVudHJpZXMoKTsgaSsrKQ0K KyAgew0KKyAgICBjb25zdCBJbmZvVGFibGUqIHRtcCA9IG1fdGFibGVzLnZhbHVl KGkpOw0KKyAgICBpZiAodG1wLT5tX3RhYmxlX2lkID09IHRhYmxlSWQpDQorICAg IHsNCisgICAgICB0YWJsZSA9IHRtcDsNCisgICAgICBicmVhazsNCisgICAgfQ0K KyAgfQ0KKyAgaWYgKHRhYmxlID09IE5VTEwpDQorICB7DQorICAgIC8vIE5vIHN1 Y2ggdGFibGUgZXhpc3RlZA0KKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbV9t dXRleCk7DQorICAgIHJldHVybiBFUlJfTm9TdWNoVGFibGU7DQorICB9DQorDQor ICAvLyBSZXR1cm4gYSBfY29weV8gb2YgdGhlIHRhYmxlDQorICAqdGFibGVfY29w eSA9IG5ldyBJbmZvVGFibGUoKnRhYmxlKTsNCisNCisgIHB0aHJlYWRfbXV0ZXhf dW5sb2NrKCZtX211dGV4KTsNCisgIHJldHVybiAwOw0KK30NCisNCiB2b2lkIE5k YkluZm86OmNsb3NlVGFibGUoY29uc3QgSW5mb1RhYmxlKiB0YWJsZSkgew0KICAg ZGVsZXRlIHRhYmxlOw0KIH0NCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2Uv bmRiL3NyYy9uZGJhcGkvTmRiSW5mby5ocHAnDQotLS0gYS9zdG9yYWdlL25kYi9z cmMvbmRiYXBpL05kYkluZm8uaHBwCTIwMDktMDYtMjQgMDg6Mzk6MDkgKzAwMDAN CisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiSW5mby5ocHAJMjAwOS0w Ny0wMyAxMDozMTozMCArMDAwMA0KQEAgLTkzLDExICs5MywxMyBAQCBwdWJsaWM6 DQogICB2b2lkIGZsdXNoX3RhYmxlcygpOw0KIA0KICAgaW50IG9wZW5UYWJsZShj b25zdCBjaGFyKiB0YWJsZV9uYW1lLCBjb25zdCBJbmZvVGFibGUqKik7DQorICBp bnQgb3BlblRhYmxlKFVpbnQzMiB0YWJsZUlkLCBjb25zdCBJbmZvVGFibGUqKik7 DQogICB2b2lkIGNsb3NlVGFibGUoY29uc3QgSW5mb1RhYmxlKiB0YWJsZSk7DQog DQogICBpbnQgY3JlYXRlU2Nhbk9wZXJhdGlvbihjb25zdCBJbmZvVGFibGUqLA0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTmRiSW5mb1NjYW5PcGVy YXRpb24qKik7DQotICB2b2lkIHJlbGVhc2VTY2FuT3BlcmF0aW9uKGNsYXNzIE5k YkluZm9TY2FuT3BlcmF0aW9uKik7DQorICAgICAgICAgICAgICAgICAgICAgICAg ICBjbGFzcyBOZGJJbmZvU2Nhbk9wZXJhdGlvbioqLA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgVWludDMyIG1heF9yb3dzID0gMjU2LCBVaW50MzIgbWF4X2J5 dGVzID0gMCk7DQorICB2b2lkIHJlbGVhc2VTY2FuT3BlcmF0aW9uKGNsYXNzIE5k YkluZm9TY2FuT3BlcmF0aW9uKikgY29uc3Q7DQogDQogcHJpdmF0ZToNCiAgIHN0 YXRpYyBjb25zdCBzaXplX3QgTlVNX0hBUkRDT0RFRF9UQUJMRVMgPSAyOw0KQEAg LTEwOSwxMiArMTExLDE0IEBAIHByaXZhdGU6DQogICBJbmZvVGFibGUqIG1fY29s dW1uc190YWJsZTsNCiAgIEJhc2VTdHJpbmcgbV9wcmVmaXg7DQogICBib29sIG1f dXNlX2xvd2VyX2Nhc2U7DQorICBVaW50MzIgbV9pZF9jb3VudGVyOw0KIA0KICAg Ym9vbCBhZGRDb2x1bW4oVWludDMyIHRhYmxlSWQsIGNvbnN0IEluZm9Db2x1bW4g YUNvbCk7DQogDQogICBib29sIGxvYWRfbmRiaW5mb190YWJsZXMoKTsNCiAgIGJv b2wgbG9hZF9oYXJkY29kZWRfdGFibGVzKHZvaWQpOw0KICAgYm9vbCBsb2FkX3Rh YmxlcygpOw0KKyAgYm9vbCBjaGVja190YWJsZXMoKTsNCiANCiAgIEJhc2VTdHJp bmcgbXlzcWxfdGFibGVfbmFtZShjb25zdCBjaGFyKiB0YWJsZV9uYW1lKSBjb25z dDsNCiANCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9uZGJh cGkvTmRiSW5mb1NjYW5PcGVyYXRpb24uY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIv c3JjL25kYmFwaS9OZGJJbmZvU2Nhbk9wZXJhdGlvbi5jcHAJMjAwOS0wNi0yOSAy MDo1NjozNyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJ bmZvU2Nhbk9wZXJhdGlvbi5jcHAJMjAwOS0wNy0wMyAxMDozMzo0NCArMDAwMA0K QEAgLTI4LDE3ICsyOCwyMiBAQA0KICNpbmNsdWRlICJOZGJBcGlTaWduYWwuaHBw Ig0KIA0KIE5kYkluZm9TY2FuT3BlcmF0aW9uOjpOZGJJbmZvU2Nhbk9wZXJhdGlv bihOZGJfY2x1c3Rlcl9jb25uZWN0aW9uKiBjb25uZWN0aW9uLA0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOZGJJbmZv OjpJbmZvVGFibGUqIHRhYmxlKSA6DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IE5kYkluZm86OkluZm9UYWJsZSogdGFi bGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVpbnQzMiBtYXhfcm93cywgVWludDMyIG1heF9ieXRlcykgOg0KICAgbV9zdGF0 ZShVbmRlZmluZWQpLA0KICAgbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pLA0KICAg bV9zaWduYWxfc2VuZGVyKE5VTEwpLA0KICAgbV90YWJsZSh0YWJsZSksDQotICBt X25vZGVfaWQoMCkNCisgIG1fbm9kZV9pZCgwKSwNCisgIG1fbWF4X3Jvd3MobWF4 X3Jvd3MpLA0KKyAgbV9tYXhfYnl0ZXMobWF4X2J5dGVzKSwNCisgIG1fcmVzdWx0 X2RhdGEoMHgzNyksDQorICBtX3JlY2VpdmVkX3Jvd3MoMCkNCiB7DQogfQ0KIA0K IGJvb2wNCi1OZGJJbmZvU2Nhbk9wZXJhdGlvbjo6aW5pdCh2b2lkKQ0KK05kYklu Zm9TY2FuT3BlcmF0aW9uOjppbml0KFVpbnQzMiBpZCkNCiB7DQogICBEQlVHX0VO VEVSKCJOZGJJbmZvU2Nhbm9wZXJhdGlvbjo6aW5pdCIpOw0KICAgaWYgKG1fc3Rh dGUgIT0gVW5kZWZpbmVkKQ0KQEAgLTQ4LDYgKzUzLDEwIEBAIE5kYkluZm9TY2Fu T3BlcmF0aW9uOjppbml0KHZvaWQpDQogICBpZiAoIW1fc2lnbmFsX3NlbmRlcikN CiAgICAgREJVR19SRVRVUk4oZmFsc2UpOw0KIA0KKyAgbV90cmFuc2lkMCA9IGlk Ow0KKyAgbV90cmFuc2lkMSA9IG1fdGFibGUtPmdldFRhYmxlSWQoKTsNCisgIG1f cmVzdWx0X3JlZiA9IG1fc2lnbmFsX3NlbmRlci0+Z2V0T3duUmVmKCk7DQorDQog ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90YWJsZS0+Y29sdW1ucygpOyBp KyspDQogICAgIG1fcmVjQXR0cnMucHVzaF9iYWNrKE5VTEwpOw0KIA0KQEAgLTEw NywzMiArMTE2LDE5IEBAIGludCBOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6ZXhlY3V0 ZSgpDQogICBpZiAobV9zdGF0ZSAhPSBQcmVwYXJlZCkNCiAgICAgREJVR19SRVRV Uk4oLTEpOw0KIA0KLSAgU2ltcGxlU2lnbmFsIHNzOw0KLSAgRGJpbmZvU2NhblJl cSAqIHJlcSA9IENBU1RfUFRSKERiaW5mb1NjYW5SZXEsIHNzLmdldERhdGFQdHJT ZW5kKCkpOw0KLSAgcmVxLT5yZXF1ZXN0SW5mbyA9IERiaW5mb1NjYW5SZXE6OkFs bENvbHVtbnMgfCBEYmluZm9TY2FuUmVxOjpTdGFydFNjYW47DQotICByZXEtPnRh YmxlSWQgPSBtX3RhYmxlLT5nZXRUYWJsZUlkKCk7DQotICByZXEtPmFwaVJlZiA9 IG1fc2lnbmFsX3NlbmRlci0+Z2V0T3duUmVmKCk7DQotICByZXEtPmFwaVR4bklk ID0gMzc7IC8vbV9pZDsgLy8gTUFTViBDYW4gYmUgcmVtb3ZlZA0KLSAgcmVxLT5z ZW5kZXJSZWYgPSBtX3NpZ25hbF9zZW5kZXItPmdldE93blJlZigpOw0KLSAgcmVx LT5pbnN0YW5jZSA9IDA7DQotICByZXEtPmNvbEJpdG1hcExvID0gfjA7DQotICBy ZXEtPmNvbEJpdG1hcEhpID0gfjA7DQotICByZXEtPm1heFJvd3MgPSAyOw0KLSAg cmVxLT5tYXhCeXRlcyA9IDA7DQotICByZXEtPnJvd3NfdG90YWwgPSAwOw0KLSAg cmVxLT53b3JkX3RvdGFsID0gMDsNCisgIGFzc2VydChtX2N1cnNvci5zaXplKCkg PT0gMCk7DQogDQogICBtX3NpZ25hbF9zZW5kZXItPmxvY2soKTsNCi0gIGludCBy ZXQgPSBzZW5kREJJTkZPX1NDQU5SRVEoc3MsIERiaW5mb1NjYW5SZXE6OlNpZ25h bExlbmd0aCk7DQorICBpbnQgcmV0ID0gc2VuZERCSU5GT19TQ0FOUkVRKCk7DQog ICBtX3NpZ25hbF9zZW5kZXItPnVubG9jaygpOw0KIA0KLSAgbV9zdGF0ZSA9IFN0 YXJ0ZWQ7DQorICBtX3N0YXRlID0gTW9yZURhdGE7DQogDQogICBEQlVHX1JFVFVS TihyZXQpOw0KIH0NCiANCiBpbnQNCi1OZGJJbmZvU2Nhbk9wZXJhdGlvbjo6c2Vu ZERCSU5GT19TQ0FOUkVRKFNpbXBsZVNpZ25hbCAmc3MsIFVpbnQzMiBzaWduYWxf bGVuKQ0KK05kYkluZm9TY2FuT3BlcmF0aW9uOjpzZW5kREJJTkZPX1NDQU5SRVEo dm9pZCkNCiB7DQogICBEQlVHX0VOVEVSKCJOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6 c2VuZERCSU5GT19TQ0FOUkVRIik7DQogDQpAQCAtMTQzLDEzICsxMzksNDMgQEAg TmRiSW5mb1NjYW5PcGVyYXRpb246OnNlbmREQklORk9fU0NBTlJFUQ0KICAgICAg IERCVUdfUkVUVVJOKE5kYkluZm86OkVSUl9DbHVzdGVyRmFpbHVyZSk7DQogICB9 DQogDQorICBTaW1wbGVTaWduYWwgc3M7DQorICBEYmluZm9TY2FuUmVxICogcmVx ID0gQ0FTVF9QVFIoRGJpbmZvU2NhblJlcSwgc3MuZ2V0RGF0YVB0clNlbmQoKSk7 DQorDQorICAvLyBBUEkgSWRlbnRpZmllcnMNCisgIHJlcS0+cmVzdWx0RGF0YSA9 IG1fcmVzdWx0X2RhdGE7DQorICByZXEtPnRyYW5zSWRbMF0gPSBtX3RyYW5zaWQw Ow0KKyAgcmVxLT50cmFuc0lkWzFdID0gbV90cmFuc2lkMTsNCisgIHJlcS0+cmVz dWx0UmVmID0gbV9yZXN1bHRfcmVmOw0KKw0KKyAgLy8gU2NhbiBwYXJhbWV0ZXJz DQorICByZXEtPnRhYmxlSWQgPSBtX3RhYmxlLT5nZXRUYWJsZUlkKCk7DQorICBy ZXEtPmNvbEJpdG1hcFswXSA9IH4wOw0KKyAgcmVxLT5jb2xCaXRtYXBbMV0gPSB+ MDsNCisgIHJlcS0+cmVxdWVzdEluZm8gPSAwOw0KKyAgcmVxLT5tYXhSb3dzID0g bV9tYXhfcm93czsNCisgIHJlcS0+bWF4Qnl0ZXMgPSBtX21heF9ieXRlczsNCisN CisgIC8vIFNjYW4gcmVzdWx0DQorICByZXEtPnJldHVybmVkUm93cyA9IDA7DQor DQorICAvLyBDdXJzb3IgZGF0YQ0KKyAgVWludDMyKiBjdXJzb3JfcHRyID0gRGJp bmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyU2VuZChyZXEpOw0KKyAgZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IG1fY3Vyc29yLnNpemUoKTsgaSsrKQ0KKyAgew0KKyAgICAq Y3Vyc29yX3B0ciA9IG1fY3Vyc29yW2ldOw0KKyAgICBEQlVHX1BSSU5UKCJpbmZv IiwgKCJjdXJzb3JbJXVdOiAweCV4IiwgaSwgbV9jdXJzb3JbaV0pKTsNCisgICAg Y3Vyc29yX3B0cisrOw0KKyAgfQ0KKyAgcmVxLT5jdXJzb3Jfc3ogPSBtX2N1cnNv ci5zaXplKCk7DQorICBtX2N1cnNvci5jbGVhcigpOw0KKw0KICAgYXNzZXJ0KG1f bm9kZV9pZCk7DQorICBVaW50MzIgbGVuID0gRGJpbmZvU2NhblJlcTo6U2lnbmFs TGVuZ3RoICsgcmVxLT5jdXJzb3Jfc3o7DQogICBpZiAobV9zaWduYWxfc2VuZGVy LT5zZW5kU2lnbmFsKG1fbm9kZV9pZCwgc3MsIERCSU5GTywNCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR1NOX0RCSU5GT19TQ0FOUkVRLA0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWxfbGVuKSAhPSBT RU5EX09LKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU05f REJJTkZPX1NDQU5SRVEsIGxlbikgIT0gU0VORF9PSykNCiAgICAgREJVR19SRVRV Uk4oTmRiSW5mbzo6RVJSX0NsdXN0ZXJGYWlsdXJlKTsNCiANCi0NCiAgIERCVUdf UkVUVVJOKDApOw0KIH0NCiANCkBAIC0xNjEsMTQgKzE4NywxOSBAQCBpbnQgTmRi SW5mb1NjYW5PcGVyYXRpb246OnJlY2VpdmUodm9pZCkNCiAgICAgY29uc3QgU2lt cGxlU2lnbmFsKiBzaWcgPSBtX3NpZ25hbF9zZW5kZXItPndhaXRGb3IoKTsNCiAg ICAgaWYgKCFzaWcpDQogICAgICAgREJVR19SRVRVUk4oLTEpOw0KKyAgICAvL3Np Zy0+cHJpbnQoKTsNCiANCiAgICAgaW50IHNpZ19udW1iZXIgPSBzaWctPnJlYWRT aWduYWxOdW1iZXIoKTsNCiAgICAgc3dpdGNoIChzaWdfbnVtYmVyKSB7DQogDQog ICAgIGNhc2UgR1NOX0RCSU5GT19UUkFOU0lEX0FJOg0KLSAgICAgIGV4ZWNEQklO Rk9fVFJBTlNJRF9BSShzaWcpOw0KLSAgICAgIERCVUdfUkVUVVJOKDEpOyAvLyBN b3JlIGRhdGENCisgICAgew0KKyAgICAgIGludCByZXQgPSBleGVjREJJTkZPX1RS QU5TSURfQUkoc2lnKTsNCisgICAgICBpZiAocmV0ID09IDApDQorICAgICAgICBj b250aW51ZTsNCisgICAgICBEQlVHX1JFVFVSTihyZXQpOyAvLyBNb3JlIGRhdGEN CiAgICAgICBicmVhazsNCisgICAgfQ0KIA0KICAgICBjYXNlIEdTTl9EQklORk9f U0NBTkNPTkY6DQogICAgIHsNCkBAIC0xODAsMjIgKzIxMSwyMSBAQCBpbnQgTmRi SW5mb1NjYW5PcGVyYXRpb246OnJlY2VpdmUodm9pZCkNCiAgICAgfQ0KIA0KICAg ICBjYXNlIEdTTl9EQklORk9fU0NBTlJFRjoNCi0gICAgICBEQlVHX1JFVFVSTihl eGVjREJJTkZPX1NDQU5SRUYoc2lnKSk7DQorICAgIHsNCisgICAgICBpbnQgcmV0 ID0gZXhlY0RCSU5GT19TQ0FOUkVGKHNpZyk7DQorICAgICAgaWYgKHJldCA9PSAw KQ0KKyAgICAgICAgY29udGludWU7DQorICAgICAgREJVR19SRVRVUk4ocmV0KTsN CiAgICAgICBicmVhazsNCisgICAgfQ0KIA0KICAgICBjYXNlIEdTTl9OT0RFX0ZB SUxSRVA6DQogICAgICAgLy8gSWdub3JlIGFuZCB3YWl0IGZvciBORl9DT01QTEVU RVJFUA0KICAgICAgIGJyZWFrOw0KIA0KICAgICBjYXNlIEdTTl9ORl9DT01QTEVU RVJFUDoNCi0gICAgew0KLSAgICAgIGNvbnN0IE5GQ29tcGxldGVSZXAgKiBjb25z dCByZXAgPQ0KLSAgICAgICAgQ0FTVF9DT05TVFBUUihORkNvbXBsZXRlUmVwLCBz aWctPmdldERhdGFQdHIoKSk7DQotICAgICAgTm9kZUlkIG5vZGVJZD0gcmVwLT5m YWlsZWROb2RlSWQ7DQotICAgICAgaWYgKG5vZGVJZCA9PSBtX25vZGVfaWQpDQot ICAgICAgICBEQlVHX1JFVFVSTigtMyk7DQorICAgICAgREJVR19SRVRVUk4oLTMp Ow0KICAgICAgIGJyZWFrOw0KLSAgICB9DQogDQogICAgIGNhc2UgR1NOX1NVQl9H Q1BfQ09NUExFVEVfUkVQOg0KICAgICBjYXNlIEdTTl9BUElfUkVHQ09ORjoNCkBA IC0yMjAsNyArMjUwLDYgQEAgTmRiSW5mb1NjYW5PcGVyYXRpb246Om5leHRSZXN1 bHQoKQ0KIA0KICAgc3dpdGNoKG1fc3RhdGUpDQogICB7DQotICBjYXNlIFN0YXJ0 ZWQ6DQogICBjYXNlIE1vcmVEYXRhOg0KICAgew0KICAgICBtX3NpZ25hbF9zZW5k ZXItPmxvY2soKTsNCkBAIC0yMzAsNyArMjU5LDYgQEAgTmRiSW5mb1NjYW5PcGVy YXRpb246Om5leHRSZXN1bHQoKQ0KICAgICBicmVhazsNCiAgIH0NCiAgIGNhc2Ug RW5kOg0KLSAgICBhc3NlcnQoZmFsc2UpOw0KICAgICBEQlVHX1JFVFVSTigwKTsg Ly8gRU9GDQogICAgIGJyZWFrOw0KICAgZGVmYXVsdDoNCkBAIC0yNTYsMTAgKzI4 NCwyMSBAQCBOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6Y2xvc2UoKQ0KICAgREJVR19W T0lEX1JFVFVSTjsNCiB9DQogDQotdm9pZA0KK2ludA0KIE5kYkluZm9TY2FuT3Bl cmF0aW9uOjpleGVjREJJTkZPX1RSQU5TSURfQUkoY29uc3QgU2ltcGxlU2lnbmFs ICogc2lnbmFsKQ0KIHsNCiAgIERCVUdfRU5URVIoIk5kYkluZm9TY2FuT3BlcmF0 aW9uOjpleGVjREJJTkZPX1RSQU5TSURfQUkiKTsNCisgIGNvbnN0IFRyYW5zSWRB SSogdHJhbnNpZCA9DQorICAgICAgICAgIENBU1RfQ09OU1RQVFIoVHJhbnNJZEFJ LCBzaWduYWwtPmdldERhdGFQdHIoKSk7DQorICBpZiAodHJhbnNpZC0+Y29ubmVj dFB0ciAhPSBtX3Jlc3VsdF9kYXRhIHx8DQorICAgICAgdHJhbnNpZC0+dHJhbnNJ ZFswXSAhPSBtX3RyYW5zaWQwIHx8DQorICAgICAgdHJhbnNpZC0+dHJhbnNJZFsx XSAhPSBtX3RyYW5zaWQxKQ0KKyAgew0KKyAgICAvLyBEcm9wIHNpZ25hbCB0aGF0 IGJlbG9uZ3MgdG8gcHJldmlvdXMgc2Nhbg0KKyAgICBEQlVHX1JFVFVSTigwKTsN CisgIH0NCisgIG1fcmVjZWl2ZWRfcm93cysrOw0KKw0KICAgY29uc3QgVWludDMy KiBzdGFydCA9IHNpZ25hbC0+cHRyWzBdLnA7DQogICBjb25zdCBVaW50MzIqIGVu ZCA9IHN0YXJ0ICsgc2lnbmFsLT5wdHJbMF0uc3o7DQogDQpAQCAtMjg4LDggKzMy Nyw3IEBAIE5kYkluZm9TY2FuT3BlcmF0aW9uOjpleGVjREJJTkZPX1RSQU5TSUQN CiAgICAgLy8gTm8gcmVhZGluZyBiZXlvbmQgZW5kIG9mIHNpZ25hbCBzaXplDQog ICAgIGFzc2VydChzdGFydCA8PSBlbmQpOw0KICAgfQ0KLQ0KLSAgREJVR19WT0lE X1JFVFVSTjsNCisgIERCVUdfUkVUVVJOKDEpOw0KIH0NCiANCiBpbnQNCkBAIC0y OTksMTggKzMzNywzOSBAQCBOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6ZXhlY0RCSU5G T19TQ0FOQ09ODQogICBjb25zdCBEYmluZm9TY2FuQ29uZiogY29uZiA9DQogICAg ICAgICAgIENBU1RfQ09OU1RQVFIoRGJpbmZvU2NhbkNvbmYsIHNpZy0+Z2V0RGF0 YVB0cigpKTsNCiANCi0gIGlmIChjb25mLT5yZXF1ZXN0SW5mbyAmIERiaW5mb1Nj YW5Db25mOjpNb3JlRGF0YSkNCisgIGlmIChjb25mLT5yZXN1bHREYXRhICE9IG1f cmVzdWx0X2RhdGEgfHwNCisgICAgICBjb25mLT50cmFuc0lkWzBdICE9IG1fdHJh bnNpZDAgfHwNCisgICAgICBjb25mLT50cmFuc0lkWzFdICE9IG1fdHJhbnNpZDEg fHwNCisgICAgICBjb25mLT5yZXN1bHRSZWYgIT0gbV9yZXN1bHRfcmVmKQ0KICAg ew0KLSAgICBEQlVHX1BSSU5UKCJpbmZvIiwgKCJSZXF1ZXN0IG1vcmUgZGF0YSIp KTsNCi0gICAgU2ltcGxlU2lnbmFsIHNzOw0KLSAgICBEYmluZm9TY2FuUmVxICog cmVxID0gQ0FTVF9QVFIoRGJpbmZvU2NhblJlcSwNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNzLmdldERhdGFQdHJTZW5kKCkpOw0KLSAgICBt ZW1jcHkocmVxLCBjb25mLCBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGhXaXRo Q3Vyc29yKnNpemVvZihVaW50MzIpKTsNCi0gICAgcmVxLT5yZXF1ZXN0SW5mbyAm PSB+KERiaW5mb1NjYW5SZXE6OlN0YXJ0U2Nhbik7DQotICAgIHJlcS0+YXBpUmVm ID0gbV9zaWduYWxfc2VuZGVyLT5nZXRPd25SZWYoKTsgLy8gTUFTViBzb21laG93 IGJlY29tZXMgaW52YWxpZA0KKyAgICAvLyBEcm9wIHNpZ25hbCB0aGF0IGJlbG9u Z3MgdG8gcHJldmlvdXMgc2Nhbg0KKyAgICBEQlVHX1JFVFVSTigxKTsgLy8gQ29u dGludWUgd2FpdGluZw0KKyAgfQ0KKyAgY29uc3QgVWludDMyIHRhYmxlSWQgPSBj b25mLT50YWJsZUlkOw0KKyAgYXNzZXJ0KHRhYmxlSWQgPT0gbV90YWJsZS0+Z2V0 VGFibGVJZCgpKTsNCiANCi0gICAgaW50IGVyciA9IHNlbmREQklORk9fU0NBTlJF UShzcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYmluZm9T Y2FuUmVxOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yKTsNCisgIC8vIEFzc2VydCBh bGwgc2NhbiBzZXR0aW5ncyBpcyB1bmNoYW5nZWQNCisgIGFzc2VydChjb25mLT5j b2xCaXRtYXBbMF0gPT0gfjApOw0KKyAgYXNzZXJ0KGNvbmYtPmNvbEJpdG1hcFsx XSA9PSB+MCk7DQorICBhc3NlcnQoY29uZi0+cmVxdWVzdEluZm8gPT0gMCk7DQor ICBhc3NlcnQoY29uZi0+bWF4Um93cyA9PSBtX21heF9yb3dzKTsNCisgIGFzc2Vy dChjb25mLT5tYXhCeXRlcyA9PSBtX21heF9ieXRlcyk7DQorDQorICAvLyBTYXZl IGN1cnNvciBkYXRhDQorICBhc3NlcnQobV9jdXJzb3Iuc2l6ZSgpID09IDApOw0K KyAgY29uc3QgVWludDMyKiBjdXJzb3JfcHRyID0gRGJpbmZvU2Nhbjo6Z2V0Q3Vy c29yUHRyKGNvbmYpOw0KKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbmYt PmN1cnNvcl9zejsgaSsrKQ0KKyAgew0KKyAgICBtX2N1cnNvci5wdXNoX2JhY2so KmN1cnNvcl9wdHIpOw0KKyAgICBEQlVHX1BSSU5UKCJpbmZvIiwgKCJjdXJzb3Jb JXVdOiAweCV4IiwgaSwgbV9jdXJzb3JbaV0pKTsNCisgICAgY3Vyc29yX3B0cisr Ow0KKyAgfQ0KKyAgYXNzZXJ0KGNvbmYtPmN1cnNvcl9zeiA9PSBtX2N1cnNvci5z aXplKCkpOw0KKw0KKyAgaWYgKGNvbmYtPmN1cnNvcl9zeikNCisgIHsNCisgICAg REJVR19QUklOVCgiaW5mbyIsICgiUmVxdWVzdCBtb3JlIGRhdGEiKSk7DQorICAg IGludCBlcnIgPSBzZW5kREJJTkZPX1NDQU5SRVEoKTsNCiAgICAgaWYgKGVyciAh PSAwKQ0KICAgICB7DQogICAgICAgREJVR19QUklOVCgiaW5mbyIsICgiRmFpbGVk IHRvIHJldXFlc3QgbW9yZSBkYXRhIikpOw0KQEAgLTMzMyw2ICszOTIsMTUgQEAg TmRiSW5mb1NjYW5PcGVyYXRpb246OmV4ZWNEQklORk9fU0NBTlJFRg0KICAgY29u c3QgRGJpbmZvU2NhblJlZiogcmVmID0NCiAgICAgICAgICAgQ0FTVF9DT05TVFBU UihEYmluZm9TY2FuUmVmLCBzaWduYWwtPmdldERhdGFQdHIoKSk7DQogDQorICBp ZiAocmVmLT5yZXN1bHREYXRhICE9IG1fcmVzdWx0X2RhdGEgfHwNCisgICAgICBy ZWYtPnRyYW5zSWRbMF0gIT0gbV90cmFuc2lkMCB8fA0KKyAgICAgIHJlZi0+dHJh bnNJZFsxXSAhPSBtX3RyYW5zaWQxIHx8DQorICAgICAgcmVmLT5yZXN1bHRSZWYg IT0gbV9yZXN1bHRfcmVmKTsNCisgIHsNCisgICAgLy8gRHJvcCBzaWduYWwgdGhh dCBiZWxvbmdzIHRvIHByZXZpb3VzIHNjYW4NCisgICAgREJVR19SRVRVUk4oMCk7 IC8vIENvbnRpbnVlIHdhaXRpbmcNCisgIH0NCisNCiAgIG1fc3RhdGUgPSBFcnJv cjsNCiAgIERCVUdfUkVUVVJOKHJlZi0+ZXJyb3JDb2RlKTsNCiB9DQoNCj09PSBt b2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYkluZm9TY2Fu T3BlcmF0aW9uLmhwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRi SW5mb1NjYW5PcGVyYXRpb24uaHBwCTIwMDktMDYtMjQgMDg6MDQ6MzMgKzAwMDAN CisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiSW5mb1NjYW5PcGVyYXRp b24uaHBwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0yOSwyNSArMjks MzQgQEAgcHVibGljOg0KIHByb3RlY3RlZDoNCiAgIGZyaWVuZCBjbGFzcyBOZGJJ bmZvOw0KICAgTmRiSW5mb1NjYW5PcGVyYXRpb24oY2xhc3MgTmRiX2NsdXN0ZXJf Y29ubmVjdGlvbiosDQotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOZGJJ bmZvOjpJbmZvVGFibGUqKTsNCi0gIGJvb2wgaW5pdCh2b2lkKTsNCisgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IE5kYkluZm86OkluZm9UYWJsZSosDQorICAg ICAgICAgICAgICAgICAgICAgICBVaW50MzIgbWF4X3Jvd3MsIFVpbnQzMiBtYXhf Ynl0ZXMpOw0KKyAgYm9vbCBpbml0KFVpbnQzMiBpZCk7DQogICB+TmRiSW5mb1Nj YW5PcGVyYXRpb24oKTsNCiAgIHZvaWQgY2xvc2UoKTsNCiBwcml2YXRlOg0KLSAg dm9pZCBleGVjREJJTkZPX1RSQU5TSURfQUkoY29uc3Qgc3RydWN0IFNpbXBsZVNp Z25hbCAqIHNpZ25hbCk7DQorICBpbnQgZXhlY0RCSU5GT19UUkFOU0lEX0FJKGNv bnN0IHN0cnVjdCBTaW1wbGVTaWduYWwgKiBzaWduYWwpOw0KICAgaW50IGV4ZWNE QklORk9fU0NBTkNPTkYoY29uc3Qgc3RydWN0IFNpbXBsZVNpZ25hbCAqIHNpZ25h bCk7DQogICBpbnQgZXhlY0RCSU5GT19TQ0FOUkVGKGNvbnN0IHN0cnVjdCBTaW1w bGVTaWduYWwgKiBzaWduYWwpOw0KLSAgaW50IHNlbmREQklORk9fU0NBTlJFUShz dHJ1Y3QgU2ltcGxlU2lnbmFsJiBzcywgVWludDMyIHNpZ25hbF9sZW4pOw0KKyAg aW50IHNlbmREQklORk9fU0NBTlJFUSgpOw0KIA0KICAgaW50IHJlY2VpdmUodm9p ZCk7DQogDQogICBlbnVtIFN0YXRlIHsgVW5kZWZpbmVkLCBJbml0aWFsLCBQcmVw YXJlZCwNCi0gICAgICAgICAgICAgICBTdGFydGVkLCBNb3JlRGF0YSwgRW5kLCBF cnJvciB9IG1fc3RhdGU7DQorICAgICAgICAgICAgICAgTW9yZURhdGEsIEVuZCwg RXJyb3IgfSBtX3N0YXRlOw0KICAgY2xhc3MgTmRiX2NsdXN0ZXJfY29ubmVjdGlv biogbV9jb25uZWN0aW9uOw0KICAgY2xhc3MgU2lnbmFsU2VuZGVyKiAgICAgICAg ICAgbV9zaWduYWxfc2VuZGVyOw0KICAgY29uc3QgTmRiSW5mbzo6SW5mb1RhYmxl KiAgICAgbV90YWJsZTsNCiAgIFZlY3RvcjxOZGJJbmZvUmVjQXR0cio+ICAgICAg IG1fcmVjQXR0cnM7DQorICBWZWN0b3I8VWludDMyPiAgICAgICAgICAgICAgICBt X2N1cnNvcjsNCiAgIFVpbnQzMiBtX25vZGVfaWQ7DQorICBVaW50MzIgbV90cmFu c2lkMDsNCisgIFVpbnQzMiBtX3RyYW5zaWQxOw0KKyAgVWludDMyIG1fcmVzdWx0 X3JlZjsNCisgIFVpbnQzMiBtX21heF9yb3dzOw0KKyAgVWludDMyIG1fbWF4X2J5 dGVzOw0KKyAgVWludDMyIG1fcmVzdWx0X2RhdGE7DQorICBVaW50MzIgbV9yZWNl aXZlZF9yb3dzOw0KIH07DQogDQogDQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9y YWdlL25kYi90ZXN0L25kYmFwaS90ZXN0TmRiaW5mby5jcHAnDQotLS0gYS9zdG9y YWdlL25kYi90ZXN0L25kYmFwaS90ZXN0TmRiaW5mby5jcHAJMjAwOS0wNi0yNCAw ODowNDozMyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvdGVzdC9uZGJhcGkvdGVz dE5kYmluZm8uY3BwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0yMyw3 ICsyMyw3IEBADQogDQogaW50IHJ1blRlc3ROZGJJbmZvKE5EQlRfQ29udGV4dCog Y3R4LCBOREJUX1N0ZXAqIHN0ZXApDQogew0KLSAgTmRiSW5mbyBuZGJpbmZvKCZj dHgtPm1fY2x1c3Rlcl9jb25uZWN0aW9uLCAibmRiaW5mbyIpOw0KKyAgTmRiSW5m byBuZGJpbmZvKCZjdHgtPm1fY2x1c3Rlcl9jb25uZWN0aW9uLCAibmRiaW5mby8i KTsNCiAgIGlmICghbmRiaW5mby5pbml0KCkpDQogICB7DQogICAgIGdfZXJyIDw8 ICJuZGJpbmZvLmluaXQgZmFpbGVkIiA8PCBlbmRsOw0KQEAgLTMxLDkgKzMxLDkg QEAgaW50IHJ1blRlc3ROZGJJbmZvKE5EQlRfQ29udGV4dCogY3R4LCBORA0KICAg fQ0KIA0KICAgY29uc3QgTmRiSW5mbzo6SW5mb1RhYmxlKiB0YWJsZTsNCi0gIGlm IChuZGJpbmZvLm9wZW5UYWJsZSgiLi9uZGJpbmZvL1RBQkxFUyIsICZ0YWJsZSkg IT0gMCkNCisgIGlmIChuZGJpbmZvLm9wZW5UYWJsZSgibmRiaW5mby9UQUJMRVMi LCAmdGFibGUpICE9IDApDQogICB7DQotICAgIGdfZXJyIDw8ICJGYWlsZWQgdG8g Z2V0VGFibGUoVEFCTEVTKSIgPDwgZW5kbDsNCisgICAgZ19lcnIgPDwgIkZhaWxl ZCB0byBvcGVuVGFibGUoVEFCTEVTKSIgPDwgZW5kbDsNCiAgICAgcmV0dXJuIE5E QlRfRkFJTEVEOw0KICAgfQ0KIA0KQEAgLTYyLDcgKzYyLDcgQEAgaW50IHJ1blRl c3ROZGJJbmZvKE5EQlRfQ29udGV4dCogY3R4LCBORA0KICAgICAgIHJldHVybiBO REJUX0ZBSUxFRDsNCiAgICAgfQ0KIA0KLSAgICB3aGlsZShzY2FuT3AtPm5leHRS ZXN1bHQoKSkNCisgICAgd2hpbGUoc2Nhbk9wLT5uZXh0UmVzdWx0KCkgPT0gMSkN CiAgICAgew0KICAgICAgIGdfaW5mbyA8PCAiTkFNRTogIiA8PCB0YWJsZU5hbWUt PmNfc3RyKCkgPDwgZW5kbDsNCiAgICAgICBnX2luZm8gPDwgIlNRTDogIiA8PCBj cmVhdGVTUUwtPmNfc3RyKCkgPDwgZW5kbDsNCkBAIC03NCw2ICs3NCwzMDYgQEAg aW50IHJ1blRlc3ROZGJJbmZvKE5EQlRfQ29udGV4dCogY3R4LCBORA0KICAgcmV0 dXJuIE5EQlRfT0s7DQogfQ0KIA0KKw0KK2ludCBydW5TY2FuQWxsKE5EQlRfQ29u dGV4dCogY3R4LCBOREJUX1N0ZXAqIHN0ZXApDQorew0KKyAgTmRiSW5mbyBuZGJp bmZvKCZjdHgtPm1fY2x1c3Rlcl9jb25uZWN0aW9uLCAibmRiaW5mby8iKTsNCisg IGlmICghbmRiaW5mby5pbml0KCkpDQorICB7DQorICAgIGdfZXJyIDw8ICJuZGJp bmZvLmluaXQgZmFpbGVkIiA8PCBlbmRsOw0KKyAgICByZXR1cm4gTkRCVF9GQUlM RUQ7DQorICB9DQorDQorICBVaW50MzIgdGFibGVJZCA9IDA7DQorICB3aGlsZSh0 cnVlKSB7DQorICAgIGNvbnN0IE5kYkluZm86OkluZm9UYWJsZSogdGFibGU7DQor DQorICAgIGludCBlcnIgPSBuZGJpbmZvLm9wZW5UYWJsZSh0YWJsZUlkLCAmdGFi bGUpOw0KKyAgICBpZiAoZXJyID09IE5kYkluZm86OkVSUl9Ob1N1Y2hUYWJsZSkN CisgICAgew0KKyAgICAgIC8vIE5vIG1vcmUgdGFibGVzIC0+IHJldHVybg0KKyAg ICAgIHJldHVybiBOREJUX09LOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGVyciAh PSAwKQ0KKyAgICB7DQorICAgICAgLy8gVW5leHBlY3RlZCByZXR1cm4gY29kZQ0K KyAgICAgIGdfZXJyIDw8ICJGYWlsZWQgdG8gb3BlblRhYmxlKCIgPDwgdGFibGVJ ZCA8PCAiKSwgZXJyOiAiIDw8IGVyciA8PCBlbmRsOw0KKyAgICAgIHJldHVybiBO REJUX0ZBSUxFRDsNCisgICAgfQ0KKyAgICBuZGJvdXQgPDwgInRhYmxlKCI8PHRh YmxlSWQ8PCIpOiAiIDw8IHRhYmxlLT5nZXROYW1lKCkgPDwgZW5kbDsNCisNCisg ICAgZm9yIChpbnQgbCA9IDA7IGwgPCBjdHgtPmdldE51bUxvb3BzKCk7IGwrKykN CisgICAgew0KKyAgICAgIE5kYkluZm9TY2FuT3BlcmF0aW9uKiBzY2FuT3AgPSBO VUxMOw0KKyAgICAgIGlmIChuZGJpbmZvLmNyZWF0ZVNjYW5PcGVyYXRpb24odGFi bGUsICZzY2FuT3ApKQ0KKyAgICAgIHsNCisgICAgICAgIGdfZXJyIDw8ICJObyBO ZGJJbmZvU2Nhbk9wZXJhdGlvbiIgPDwgZW5kbDsNCisgICAgICAgIHJldHVybiBO REJUX0ZBSUxFRDsNCisgICAgICB9DQorDQorICAgICAgaWYgKHNjYW5PcC0+cmVh ZFR1cGxlcygpICE9IDApDQorICAgICAgew0KKyAgICAgICAgZ19lcnIgPDwgInNj YW5PcC0+cmVhZFR1cGxlcyBmYWlsZWQiIDw8IGVuZGw7DQorICAgICAgICByZXR1 cm4gTkRCVF9GQUlMRUQ7DQorICAgICAgfQ0KKw0KKyAgICAgIGludCBjb2x1bW5J ZCA9IDA7DQorICAgICAgd2hpbGUgKHNjYW5PcC0+Z2V0VmFsdWUoY29sdW1uSWQp KQ0KKyAgICAgICAgY29sdW1uSWQrKzsNCisgICAgICAvLyBBdCBsZWFzdCBvbmUg Y29sdW1uDQorICAgICAgYXNzZXJ0KGNvbHVtbklkID49IDEpOw0KKw0KKyAgICAg IGlmKHNjYW5PcC0+ZXhlY3V0ZSgpICE9IDApDQorICAgICAgew0KKyAgICAgICAg Z19lcnIgPDwgInNjYW5PcC0+ZXhlY3V0ZSBmYWlsZWQiIDw8IGVuZGw7DQorICAg ICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgICAgfQ0KKw0KKyAgICAgIGlu dCByb3cgPSAwOw0KKyAgICAgIHdoaWxlKHNjYW5PcC0+bmV4dFJlc3VsdCgpID09 IDEpDQorICAgICAgICByb3crKzsNCisgICAgICBuZGJvdXQgPDwgInJvd3M6ICIg PDwgcm93IDw8IGVuZGw7DQorICAgICAgbmRiaW5mby5yZWxlYXNlU2Nhbk9wZXJh dGlvbihzY2FuT3ApOw0KKyAgICB9DQorICAgIG5kYmluZm8uY2xvc2VUYWJsZSh0 YWJsZSk7DQorICAgIHRhYmxlSWQrKzsNCisgIH0NCisNCisgIC8vIFNob3VsZCBu ZXZlciBjb21lIGhlcmUNCisgIGFzc2VydChmYWxzZSk7DQorICByZXR1cm4gTkRC VF9GQUlMRUQ7DQorfQ0KKw0KK2ludCBydW5TY2FuU3RvcChOREJUX0NvbnRleHQq IGN0eCwgTkRCVF9TdGVwKiBzdGVwKQ0KK3sNCisgIE5kYkluZm8gbmRiaW5mbygm Y3R4LT5tX2NsdXN0ZXJfY29ubmVjdGlvbiwgIm5kYmluZm8vIik7DQorICBpZiAo IW5kYmluZm8uaW5pdCgpKQ0KKyAgew0KKyAgICBnX2VyciA8PCAibmRiaW5mby5p bml0IGZhaWxlZCIgPDwgZW5kbDsNCisgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0K KyAgfQ0KKw0KKyAgVWludDMyIHRhYmxlSWQgPSAwOw0KKyAgd2hpbGUodHJ1ZSkg ew0KKyAgICBjb25zdCBOZGJJbmZvOjpJbmZvVGFibGUqIHRhYmxlOw0KKw0KKyAg ICBpbnQgZXJyID0gbmRiaW5mby5vcGVuVGFibGUodGFibGVJZCwgJnRhYmxlKTsN CisgICAgaWYgKGVyciA9PSBOZGJJbmZvOjpFUlJfTm9TdWNoVGFibGUpDQorICAg IHsNCisgICAgICAvLyBObyBtb3JlIHRhYmxlcyAtPiByZXR1cm4NCisgICAgICBy ZXR1cm4gTkRCVF9PSzsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChlcnIgIT0gMCkN CisgICAgew0KKyAgICAgIC8vIFVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUNCisgICAg ICBnX2VyciA8PCAiRmFpbGVkIHRvIG9wZW5UYWJsZSgiIDw8IHRhYmxlSWQgPDwg IiksIGVycjogIiA8PCBlcnIgPDwgZW5kbDsNCisgICAgICByZXR1cm4gTkRCVF9G QUlMRUQ7DQorICAgIH0NCisgICAgbmRib3V0IDw8ICJ0YWJsZTogIiA8PCB0YWJs ZS0+Z2V0TmFtZSgpIDw8IGVuZGw7DQorDQorICAgIGZvciAoaW50IGwgPSAwOyBs IDwgY3R4LT5nZXROdW1Mb29wcygpKjEwOyBsKyspDQorICAgIHsNCisgICAgICBO ZGJJbmZvU2Nhbk9wZXJhdGlvbiogc2Nhbk9wID0gTlVMTDsNCisgICAgICBpZiAo bmRiaW5mby5jcmVhdGVTY2FuT3BlcmF0aW9uKHRhYmxlLCAmc2Nhbk9wKSkNCisg ICAgICB7DQorICAgICAgICBnX2VyciA8PCAiTm8gTmRiSW5mb1NjYW5PcGVyYXRp b24iIDw8IGVuZGw7DQorICAgICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAg ICAgfQ0KKw0KKyAgICAgIGlmIChzY2FuT3AtPnJlYWRUdXBsZXMoKSAhPSAwKQ0K KyAgICAgIHsNCisgICAgICAgIGdfZXJyIDw8ICJzY2FuT3AtPnJlYWRUdXBsZXMg ZmFpbGVkIiA8PCBlbmRsOw0KKyAgICAgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0K KyAgICAgIH0NCisNCisgICAgICBpbnQgY29sdW1uSWQgPSAwOw0KKyAgICAgIHdo aWxlIChzY2FuT3AtPmdldFZhbHVlKGNvbHVtbklkKSkNCisgICAgICAgIGNvbHVt bklkKys7DQorICAgICAgLy8gQXQgbGVhc3Qgb25lIGNvbHVtbg0KKyAgICAgIGFz c2VydChjb2x1bW5JZCA+PSAxKTsNCisNCisgICAgICBpZihzY2FuT3AtPmV4ZWN1 dGUoKSAhPSAwKQ0KKyAgICAgIHsNCisgICAgICAgIGdfZXJyIDw8ICJzY2FuT3At PmV4ZWN1dGUgZmFpbGVkIiA8PCBlbmRsOw0KKyAgICAgICAgcmV0dXJuIE5EQlRf RkFJTEVEOw0KKyAgICAgIH0NCisNCisgICAgICBpbnQgc3RvcFJvdyA9IHJhbmQo KSAlIDEwMDsNCisgICAgICBpbnQgcm93ID0gMDsNCisgICAgICB3aGlsZShzY2Fu T3AtPm5leHRSZXN1bHQoKSA9PSAxKQ0KKyAgICAgIHsNCisgICAgICAgIHJvdysr Ow0KKyAgICAgICAgaWYgKHJvdyA9PSBzdG9wUm93KQ0KKyAgICAgICAgew0KKyAg ICAgICAgICBuZGJvdXRfYygiQWJvcnRpbmcgc2NhbiBhdCByb3cgJWQiLCBzdG9w Um93KTsNCisgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgICAgfQ0K KyAgICAgIG5kYmluZm8ucmVsZWFzZVNjYW5PcGVyYXRpb24oc2Nhbk9wKTsNCisg ICAgfQ0KKyAgICBuZGJpbmZvLmNsb3NlVGFibGUodGFibGUpOw0KKyAgICB0YWJs ZUlkKys7DQorICB9DQorDQorICAvLyBTaG91bGQgbmV2ZXIgY29tZSBoZXJlDQor ICBhc3NlcnQoZmFsc2UpOw0KKyAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KK30NCisN CisNCitpbnQgcnVuUmF0ZWxpbWl0KE5EQlRfQ29udGV4dCogY3R4LCBOREJUX1N0 ZXAqIHN0ZXApDQorew0KKyAgTmRiSW5mbyBuZGJpbmZvKCZjdHgtPm1fY2x1c3Rl cl9jb25uZWN0aW9uLCAibmRiaW5mby8iKTsNCisgIGlmICghbmRiaW5mby5pbml0 KCkpDQorICB7DQorICAgIGdfZXJyIDw8ICJuZGJpbmZvLmluaXQgZmFpbGVkIiA8 PCBlbmRsOw0KKyAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICB9DQorDQorICBV aW50MzIgdGFibGVJZCA9IDY7IC8vIE1BU1YgMA0KKyAgd2hpbGUodHJ1ZSkgew0K Kw0KKyAgICBjb25zdCBOZGJJbmZvOjpJbmZvVGFibGUqIHRhYmxlOw0KKw0KKyAg ICBpbnQgZXJyID0gbmRiaW5mby5vcGVuVGFibGUodGFibGVJZCwgJnRhYmxlKTsN CisgICAgaWYgKGVyciA9PSBOZGJJbmZvOjpFUlJfTm9TdWNoVGFibGUpDQorICAg IHsNCisgICAgICAvLyBObyBtb3JlIHRhYmxlcyAtPiByZXR1cm4NCisgICAgICBy ZXR1cm4gTkRCVF9PSzsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChlcnIgIT0gMCkN CisgICAgew0KKyAgICAgIC8vIFVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUNCisgICAg ICBnX2VyciA8PCAiRmFpbGVkIHRvIG9wZW5UYWJsZSgiIDw8IHRhYmxlSWQgPDwg IiksIGVycjogIiA8PCBlcnIgPDwgZW5kbDsNCisgICAgICByZXR1cm4gTkRCVF9G QUlMRUQ7DQorICAgIH0NCisgICAgbmRib3V0IDw8ICJ0YWJsZTogIiA8PCB0YWJs ZS0+Z2V0TmFtZSgpIDw8IGVuZGw7DQorICAgIA0KKw0KKyAgICBzdHJ1Y3QgeyBV aW50MzIgcm93czsgVWludDMyIGJ5dGVzOyB9IGxpbWl0c1tdID0gew0KKyAgICAg IHsgMCwgMCB9LA0KKyAgICAgIHsgMSwgMCB9LCB7IDIsIDAgfSwgeyAxMCwgMCB9 LCB7IDM3LCAwIH0sIHsgMTAwMCwgMCB9LA0KKyAgICAgIHsgMCwgMSB9LCB7IDAs IDIgfSwgeyAwLCAxMCB9LCB7IDAsIDM3IH0sIHsgMCwgMTAwMCB9LA0KKyAgICAg IHsgMSwgMSB9LCB7IDIsIDIgfSwgeyAxMCwgMTAgfSwgeyAzNywgMzcgfSwgeyAx MDAwLCAxMDAwIH0NCisgICAgfTsNCisNCisgICAgaW50IGxhc3RSb3dzID0gMDsN CisgICAgZm9yIChpbnQgbCA9IDA7IGwgPCBzaXplb2YobGltaXRzKS9zaXplb2Yo bGltaXRzWzBdKTsgbCsrKQ0KKyAgICB7DQorDQorICAgICAgVWludDMyIG1heFJv d3MgPSBsaW1pdHNbbF0ucm93czsNCisgICAgICBVaW50MzIgbWF4Qnl0ZXMgPSBs aW1pdHNbbF0uYnl0ZXM7DQorDQorICAgICAgTmRiSW5mb1NjYW5PcGVyYXRpb24q IHNjYW5PcCA9IE5VTEw7DQorICAgICAgaWYgKG5kYmluZm8uY3JlYXRlU2Nhbk9w ZXJhdGlvbih0YWJsZSwgJnNjYW5PcCwgbWF4Um93cywgbWF4Qnl0ZXMpKQ0KKyAg ICAgIHsNCisgICAgICAgIGdfZXJyIDw8ICJObyBOZGJJbmZvU2Nhbk9wZXJhdGlv biIgPDwgZW5kbDsNCisgICAgICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisgICAg ICB9DQorDQorICAgICAgaWYgKHNjYW5PcC0+cmVhZFR1cGxlcygpICE9IDApDQor ICAgICAgew0KKyAgICAgICAgZ19lcnIgPDwgInNjYW5PcC0+cmVhZFR1cGxlcyBm YWlsZWQiIDw8IGVuZGw7DQorICAgICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQor ICAgICAgfQ0KKw0KKyAgICAgIGludCBjb2x1bW5JZCA9IDA7DQorICAgICAgd2hp bGUgKHNjYW5PcC0+Z2V0VmFsdWUoY29sdW1uSWQpKQ0KKyAgICAgICAgY29sdW1u SWQrKzsNCisgICAgICAvLyBBdCBsZWFzdCBvbmUgY29sdW1uDQorICAgICAgYXNz ZXJ0KGNvbHVtbklkID49IDEpOw0KKw0KKyAgICAgIGlmKHNjYW5PcC0+ZXhlY3V0 ZSgpICE9IDApDQorICAgICAgew0KKyAgICAgICAgZ19lcnIgPDwgInNjYW5PcC0+ ZXhlY3V0ZSBmYWlsZWQiIDw8IGVuZGw7DQorICAgICAgICByZXR1cm4gTkRCVF9G QUlMRUQ7DQorICAgICAgfQ0KKw0KKyAgICAgIGludCByb3cgPSAwOw0KKyAgICAg IHdoaWxlKHNjYW5PcC0+bmV4dFJlc3VsdCgpID09IDEpDQorICAgICAgICByb3cr KzsNCisgICAgICBuZGJpbmZvLnJlbGVhc2VTY2FuT3BlcmF0aW9uKHNjYW5PcCk7 DQorDQorICAgICAgbmRib3V0X2MoIlsldSwldV0gcm93czogJWQiLCBtYXhSb3dz LCBtYXhCeXRlcywgcm93KTsNCisgICAgICBpZiAobGFzdFJvd3MgIT0gMCkNCisg ICAgICB7DQorICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBudW1iZXIgb2Ygcm93 cyBpcyBzYW1lIGFzIGxhc3Qgcm91bmQgb24gc2FtZSB0YWJsZQ0KKyAgICAgICAg aWYgKGxhc3RSb3dzICE9IHJvdykNCisgICAgICAgIHsNCisgICAgICAgICAgZ19l cnIgPDwgIkdvdCBkaWZmZXJlbnQgbnVtYmVyIG9mIHJvd3MgdGhpcyByb3VuZCwg ZXhwZWN0ZWQ6ICINCisgICAgICAgICAgICAgICAgPDwgbGFzdFJvd3MgPDwgIiwg Z290OiAiIDw8IHJvdyA8PCBlbmRsOw0KKyAgICAgICAgICBuZGJpbmZvLmNsb3Nl VGFibGUodGFibGUpOw0KKyAgICAgICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQor ICAgICAgICB9DQorICAgICAgfQ0KKyAgICAgIGxhc3RSb3dzID0gcm93Ow0KKyAg ICB9DQorICAgIG5kYmluZm8uY2xvc2VUYWJsZSh0YWJsZSk7DQorICAgIHRhYmxl SWQrKzsNCisgIH0NCisNCisgIC8vIFNob3VsZCBuZXZlciBjb21lIGhlcmUNCisg IGFzc2VydChmYWxzZSk7DQorICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorfQ0KKw0K K2ludCBydW5UZXN0VGFibGUoTkRCVF9Db250ZXh0KiBjdHgsIE5EQlRfU3RlcCog c3RlcCkNCit7DQorICBOZGJJbmZvIG5kYmluZm8oJmN0eC0+bV9jbHVzdGVyX2Nv bm5lY3Rpb24sICJuZGJpbmZvLyIpOw0KKyAgaWYgKCFuZGJpbmZvLmluaXQoKSkN CisgIHsNCisgICAgZ19lcnIgPDwgIm5kYmluZm8uaW5pdCBmYWlsZWQiIDw8IGVu ZGw7DQorICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisgIH0NCisNCisgIGNvbnN0 IE5kYkluZm86OkluZm9UYWJsZSogdGFibGU7DQorICBpZiAobmRiaW5mby5vcGVu VGFibGUoIm5kYmluZm8vVEVTVCIsICZ0YWJsZSkgIT0gMCkNCisgIHsNCisgICAg Z19lcnIgPDwgIkZhaWxlZCB0byBvcGVuVGFibGUoVEVTVCkiIDw8IGVuZGw7DQor ICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisgIH0NCisNCisgIGZvciAoaW50IGwg PSAwOyBsIDwgY3R4LT5nZXROdW1Mb29wcygpOyBsKyspDQorICB7DQorDQorICAg IE5kYkluZm9TY2FuT3BlcmF0aW9uKiBzY2FuT3AgPSBOVUxMOw0KKyAgICBpZiAo bmRiaW5mby5jcmVhdGVTY2FuT3BlcmF0aW9uKHRhYmxlLCAmc2Nhbk9wKSkNCisg ICAgew0KKyAgICAgIGdfZXJyIDw8ICJObyBOZGJJbmZvU2Nhbk9wZXJhdGlvbiIg PDwgZW5kbDsNCisgICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgIH0NCisN CisgICAgaWYgKHNjYW5PcC0+cmVhZFR1cGxlcygpICE9IDApDQorICAgIHsNCisg ICAgICBnX2VyciA8PCAic2Nhbk9wLT5yZWFkVHVwbGVzIGZhaWxlZCIgPDwgZW5k bDsNCisgICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgIH0NCisNCisgICAg Y29uc3QgTmRiSW5mb1JlY0F0dHIqIG5vZGVJZD0gc2Nhbk9wLT5nZXRWYWx1ZSgi Tk9ERV9JRCIpOw0KKyAgICBjb25zdCBOZGJJbmZvUmVjQXR0ciogYmxvY2tOdW1i ZXI9IHNjYW5PcC0+Z2V0VmFsdWUoIkJMT0NLX05VTUJFUiIpOw0KKyAgICBjb25z dCBOZGJJbmZvUmVjQXR0ciogYmxvY2tJbnN0YW5jZT0gc2Nhbk9wLT5nZXRWYWx1 ZSgiQkxPQ0tfSU5TVEFOQ0UiKTsNCisgICAgY29uc3QgTmRiSW5mb1JlY0F0dHIq IGNvdW50ZXI9IHNjYW5PcC0+Z2V0VmFsdWUoIkNPVU5URVIiKTsNCisNCisgICAg aWYoc2Nhbk9wLT5leGVjdXRlKCkgIT0gMCkNCisgICAgew0KKyAgICAgIGdfZXJy IDw8ICJzY2FuT3AtPmV4ZWN1dGUgZmFpbGVkIiA8PCBlbmRsOw0KKyAgICAgIHJl dHVybiBOREJUX0ZBSUxFRDsNCisgICAgfQ0KKw0KKyAgICBpbnQgcm93cyA9IDA7 DQorICAgIHdoaWxlKHNjYW5PcC0+bmV4dFJlc3VsdCgpID09IDEpDQorICAgIHsN CisgICAgICByb3dzKys7Ly8NCisgICAgfQ0KKyAgICBuZGJvdXQgPDwgInJvd3M6 ICIgPDwgcm93cyA8PCBlbmRsOw0KKyAgICBuZGJpbmZvLnJlbGVhc2VTY2FuT3Bl cmF0aW9uKHNjYW5PcCk7DQorICB9DQorDQorICBuZGJpbmZvLmNsb3NlVGFibGUo dGFibGUpOw0KKyAgcmV0dXJuIE5EQlRfT0s7DQorfQ0KKw0KKw0KIE5EQlRfVEVT VFNVSVRFKHRlc3ROZGJpbmZvKTsNCiBURVNUQ0FTRSgiTmRiaW5mbyIsDQogICAg ICAgICAgIlRlc3QgbmRiYXBpIGludGVyZmFjZSB0byBOREIkSU5GTyIpew0KQEAg LTgzLDYgKzM4MywyMyBAQCBURVNUQ0FTRSgiTmRiaW5mbzEwIiwNCiAgICAgICAg ICAiVGVzdCBuZGJhcGkgaW50ZXJmYWNlIHRvIE5EQiRJTkZPIil7DQogICBTVEVQ UyhydW5UZXN0TmRiSW5mbywgMTApOw0KIH0NCitURVNUQ0FTRSgiU2NhbkFsbCIs DQorICAgICAgICAgIlNjYW4gYWxsIGNvbHVtcyBvZiBhbGwgdGFibGUga25vd24g dG8gTmRiSW5mbyIpew0KKyAgU1RFUFMocnVuU2NhbkFsbCwgMSk7DQorfQ0KK1RF U1RDQVNFKCJTY2FuU3RvcCIsDQorICAgICAgICAgIlJhbmRvbWx5IHN0b3AgdGhl IHNjYW4iKXsNCisgIFNURVBTKHJ1blNjYW5TdG9wLCAxKTsNCit9DQorVEVTVENB U0UoIlJhdGVsaW1pdCIsDQorICAgICAgICAgIlNjYW4gd2l0IGRpZmZlcmVudCBj b21iaW5hdGlvbnMgb2YgcmF0ZWxpbWl0Iil7DQorICBTVEVQUyhydW5SYXRlbGlt aXQsIDEpOw0KK30NCitURVNUQ0FTRSgiVGVzdFRhYmxlIiwNCisgICAgICAgICAi U2NhbiB0aGUgdGVzdCB0YWJsZSBhbmQgbWFrZSBzdXJlIGl0IHJldHVybnMgY29y cmVjdCBudW1iZXIgIg0KKyAgICAgICAgICAib2Ygcm93cyB3aGljaCB3aWxsIGRl cGVuZCBvbiBob3cgbWFueSBUVVAgYmxvY2tzIGFyZSBjb25maWd1cmVkIil7DQor ICBTVEVQKHJ1blRlc3RUYWJsZSk7DQorfQ0KIE5EQlRfVEVTVFNVSVRFX0VORCh0 ZXN0TmRiaW5mbyk7DQogDQogDQoNCg== --Boundary_(ID_e1+oOrLyYWQ96+I5uDGjLw) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/magnus.blaudd@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/magnus.blaudd@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: magnus.blaudd@stripped # target_branch: file:///home/msvensson/mysql/tmp/BYZ2RbqhHx/7.1-\ # ndbinfo/ # testament_sha1: 36b06cd1ba517859721cb830ede83b0559f51c97 # timestamp: 2009-07-03 12:34:01 +0200 # source_branch: file:///home/msvensson/mysql/7.1-ndbinfo/ # base_revision_id: jonas@stripped # # Begin bundle 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 7ERhSH/8XckU4UJDE6ZGuA== --Boundary_(ID_e1+oOrLyYWQ96+I5uDGjLw)--