ZGlmZiAtLWdpdCBhL2RvYy9sZnVuL0d1YXJkRXhpdCBiL2RvYy9sZnVuL0d1YXJkRXhpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE1M2M0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2xmdW4vR3VhcmRFeGl0CkBAIC0wLDAgKzEsODUgQEAKK0ZVTktUSU9OOgorICAgICBwcm90ZWN0ZWQgPGludHw8c3RyaW5nfGNsb3N1cmU+KiA+KiBHdWFyZEV4aXQob2JqZWN0IHJvb20sIGludCBob29raWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nfGNsb3N1cmU+KiBoZGF0YSk7CisKK0RFRklOSUVSVCBJTjoKKyAgICAgL3N0ZC9ucGMvbW92aW5nLmMKKworQVJHVU1FTlRFOgorICAgICByb29tCisgICAgICAgICAgRGVyIGRlbiBIb29rIGF1c2xvZXNlbmRlIFJhdW0gKGVudmlyb25tZW50KCkpCisgICAgIGhvb2tpZAorICAgICAgICAgIERpZSBJRCBkZXMgSG9va3MgKEhfSE9PS19FWElUX1VTRSkKKyAgICAgaGRhdGEKKyAgICAgICAgICBFaW4gQXJyYXkgbWl0IDMgRWxlbWVudGVuOgorICAgICAgICAgICh7CisgICAgICAgICAgICAgIHZlcmIgLSBEYXMgS29tbWFuZG92ZXJiL0F1c2dhbmdzbmFtZSAoc3RyaW5nKQorICAgICAgICAgICAgICBkZXN0IC0gWmllbHJhdW0gKHN0cmluZykgb2RlciBjbG9zdXJlIChzcGVjaWFsIGV4aXRzKQorICAgICAgICAgICAgICBtc2cgIC0gQmV3ZWd1bmdzcmljaHR1bmcgKHN0cmluZykgb2RlciAwCisgICAgICAgICAgfSkKKworQkVTQ0hSRUlCVU5HOgorICAgICBJc3QgZGllc2UgRnVua3Rpb24gaW4gZWluZW0gTlBDIGRlZmluaWVydCwgdHJhZWd0IHNpY2ggZGVyIE5QQyBiZWkgamVkZXIKKyAgICAgQmV3ZWd1bmcgYXV0b21hdGlzY2ggYWxzIEtvbnN1bWVudCB2b24gSF9IT09LX0VYSVRfVVNFIGVpbiB1bmQgZGllc2UKKyAgICAgRnVua3Rpb24gd2lyZCBpbW1lciBnZXJ1ZmVuLCB3ZW5uIGVpbiBMZWJld2VzZW4gaW0gZ2xlaWNoZW4gRW52aXJvbm1lbnQKKyAgICAgd2llIGRlciBOUEMgdmVyc3VjaHQsIGVpbmVuIEF1c2dhbmcgenUgYmVudXR6ZW4uCisgICAgIERlciBOUEMga2FubiBkYW5uIGRpZSBCZXdlZ3VuZyBhYmJyZWNoZW4gKHVuZCBzbyBkZW4gQXVzZ2FuZworICAgICBibG9ja2llcmVuKSwgWmllbCBvZGVyIEJld2VndW5nc21lbGR1bmcgYWVuZGVybiBvZGVyIGtlaW5lIFZlcmFlbmRlcnVuZworICAgICB2b3JuZWhtZW4uCisgICAgIERpZSBLb25zdGFudGVuIGZ1ZXIgSG9va2lkIHVuZCBIb29rc3RhdHVzIChzLiBSdWVja2dhYmV3ZXJ0KSBzaW5kIGluCisgICAgIDxob29rLmg+IGRlZmluaWVydC4KKworUlVlQ0tHQUJFV0VSVDoKKyAgICAgQXJyYXkgbWl0IHp3ZWkgRWxlbWVudGVuOgorICAgICAoeworICAgICAgICAgSF9OT19NT0QgLyBIX0FMVEVSRUQgLyBIX0NBTkNFTExFRCwKKyAgICAgICAgIGhkYXRhCisgICAgIH0pCisgICAgIGhkYXRhIGlzdCBnZ2YuIGRhcyBnZWFlbmRlcnRlIEFycmF5LCB3ZWxjaGVzIGRpZSBGdW5rdGlvbiB1ZWJlcmdlYmVuCisgICAgIHdpcmQuIFdlaXRlcmUgRGV0YWlscyBzLiBhdWNoIC9kb2Mvc3RkL2hvb2tzCisKK0JFTUVSS1VOR0VOOgorICAgICBEaWUgQW56YWhsIGFuIEtvbnN1bWVudGVuIGVpbmVzIEhvb2tzIGlzdCBiZWdyZW56dC4gRXMgaXN0IGRhaGVyCisgICAgIG1vZWdsaWNoLCBkYXNzIGRpZSBSZWdpc3RyaWVydW5nIG5pY2h0IGtsYXBwdCwgd2VubiB6dXZpZWxlICg+NSkgV2FlY2h0ZXIKKyAgICAgaW0gUmF1bSBzaW5kLiBXaWxsIG1hbiBkYXJhdWYgcmVhZ2llcmVuLCBtdWVzc3RlIG1hbiBkaWUgUmVnaXN0cmllcnVuZworICAgICBwcnVlZmVuLgorICAgICBFaW4gTlBDLCB3ZWxjaGVyIEd1YXJkRXhpdCgpIGRlZmluaWVydCwgYWJlciBpbSBha3R1ZWxsZW4gRW52aXJvbm1lbnQKKyAgICAga2VpbmUgV2FjaGUgaGFsdGVuIHdpbGwsIGv2bm50ZSBzaWNoIHNlbGJlciBkZS1yZWdpc3RyaWVyZW4uCisKK0JFSVNQSUVMRToKKyAgICAgPGludHw8c3RyaW5nfGNsb3N1cmU+KiA+KiBHdWFyZEV4aXQob2JqZWN0IHJvb20sIGludCBob29raWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmd8Y2xvc3VyZT4qIGhkYXRhKQorICAgICB7CisgICAgICAgLy8gTnVyIGluIEdlZmFlbmduaXNyYWV1bWVuIFdhY2hlIGhhbHRlbgorICAgICAgIGlmIChzdHJzdHIob2JqZWN0X25hbWUoZW52aXJvbm1lbnQoKSksICIvcm9vbS9qYWlsIik9PTApCisgICAgICAgeworICAgICAgICAgLy8gSGllciBnZWh0cyBuaWNodCByYXVzLiA7LSkKKyAgICAgICAgIGlmIChoZGF0YVswXSA9PSAicmF1cyIpIHsKKyAgICAgICAgICAgICB0ZWxsX29iamVjdCh0aGlzX3BsYXllcigpLCAuLi4pOworICAgICAgICAgICAgIHJldHVybiAoe0hfQ0FOQ0VMTEVELCBoZGF0YX0pOworICAgICAgICAgfQorICAgICAgICAgLy8gU3BlY2lhbCBleGl0cyBlcnNldHplbiB3aXIgZHVyY2ggZWluZW4gZWlnZW5lbgorICAgICAgICAgZWxzZSBpZiAoY2xvc3VyZXAoaGRhdGFbMV0pKSB7CisgICAgICAgICAgIGhkYXRhWzFdID0gIydteV9zcGVjaWFsX2V4aXQ7CisgICAgICAgICAgIHJldHVybiAoe0hfQUxURVJFRCwgaGRhdGF9KTsKKyAgICAgICAgIH0KKyAgICAgICAgIC8vIGFsbGUgYW5kZXJlbiBBdXNnYWVuZ2UgaW4gZGllIHBlcnNvZW5saWNoZSBaZWxsZQorICAgICAgICAgZWxzZSB7CisgICAgICAgICAgIHRlbGxfb2JqZWN0KHRoaXNfcGxheWVyKCksIC4uLik7CisgICAgICAgICAgIGhkYXRhWzFdID0gIi9yb29tL2phaWxfIitnZXR1aWQodGhpc19wbGF5ZXIoKSk7CisgICAgICAgICAgIGhkYXRhWzJdID0gIlN1ZWRlbiI7CisgICAgICAgICAgIHJldHVybiAoe0hfQUxURVJFRCwgaGRhdGF9KTsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIGluIGFsbGVuIGFuZGVyZW4gUmFldW1lbiBuaWNodCBlaW5ncmVpZmVuCisgICAgICByZXR1cm4gKHtIX05PX01PRCwgaGRhdGF9KTsKKyAgICB9CisKKworU0lFSEUgQVVDSDoKKyAgICAgQWRkRXhpdCwgQWRkU3BlY2lhbEV4aXQsIFJlbW92ZUV4aXQKKyAgICAgSFJlZ2lzdGVyVG9Ib29rLCBIUmVnaXN0ZXJNb2RpZmllciwgSFVucmVnaXN0ZXJGcm9tSG9vaworICAgICAvZG9jL3N0ZC9ob29rcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjAuMDIuMjAxNiwgWmVzc3RyYQorMjIuMDUuMjAxNiwgTXVwZmVsIChCZWlzcGllbCBrb3JyaWdpZXJ0KQo=