From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Mattia Verga To: git-commits@fedoraproject.org Subject: [rpms/rawtherapee] f44: Update to 5.13 (Fedora#2491090) Date: Sun, 02 Aug 2026 11:47:55 GMT Message-ID: <178567127519.1.9310074674217912161.rpms-rawtherapee-20926a6e2522@fedoraproject.org> List-ID: X-Git-Repo: rpms/rawtherapee X-Git-Branch: f44 X-Git-Rev: 20926a6e25228d457f45349e29edc5a054083624 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvcmF3dGhlcmFwZWUK QnJhbmNoIDogZjQ0CkNvbW1pdCA6IDIwOTI2YTZlMjUyMjhkNDU3ZjQ1MzQ5ZTI5ZWRjNWEwNTQw ODM2MjQKQXV0aG9yIDogTWF0dGlhIFZlcmdhIDxtYXR0aWEudmVyZ2FAcHJvdG9uLm1lPgpEYXRl ICAgOiAyMDI2LTA4LTAyVDEzOjI5OjUyKzAyOjAwClN0YXRzICA6ICsxNi8tNTg1NyBpbiA1IGZp bGUocykKVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9yYXd0aGVy YXBlZS9jLzIwOTI2YTZlMjUyMjhkNDU3ZjQ1MzQ5ZTI5ZWRjNWEwNTQwODM2MjQ/YnJhbmNoPWY0 NAoKTG9nOgpVcGRhdGUgdG8gNS4xMyAoRmVkb3JhIzI0OTEwOTApCgotLS0KZGlmZiAtLWdpdCBh Ly5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGEwNDllNGYuLmU3YzRhYmUgMTAwNjQ0Ci0t LSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMzUsMyArMzUsNCBAQCByYXd0aGVy YXBlZS0zLjAtYTEudGFyLmJ6MgogL3Jhd3RoZXJhcGVlLTUuMTEudGFyLnh6CiAvcmF3dGhlcmFw ZWUtNS4xMi1yYzEudGFyLnh6CiAvcmF3dGhlcmFwZWUtNS4xMi50YXIueHoKKy9yYXd0aGVyYXBl ZS01LjEzLnRhci54egoKZGlmZiAtLWdpdCBhLzAwMDEtRml4LXN0YXRpYy1pbml0LW9yZGVyLWZp YXNjby1jcmFzaGVzLnBhdGNoIGIvMDAwMS1GaXgtc3RhdGljLWluaXQtb3JkZXItZmlhc2NvLWNy YXNoZXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZjQ4M2MuLjAwMDAw MDAKLS0tIGEvMDAwMS1GaXgtc3RhdGljLWluaXQtb3JkZXItZmlhc2NvLWNyYXNoZXMucGF0Y2gK KysrIC9kZXYvbnVsbApAQCAtMSw1ODEwICswLDAgQEAKLUZyb20gOWNlNmE0ZGQyOTdkNDcwNDRj MTU5MzZjODljYjI3ZjNkNWNmOTRiZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERh bmllbCBHYW8gPGRhbmllbC5nYW8ud29ya0BnbWFpbC5jb20+Ci1EYXRlOiBTdW4sIDI5IEp1biAy MDI1IDE1OjA4OjU0IC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBzdGF0aWMgaW5pdCBvcmRl ciBmaWFzY28gY3Jhc2hlcwotCi0tIEZpeCByZWFkIGJlZm9yZSBpbml0aWFsaXplIG9mIG9wdGlv bnMucnRTZXR0aW5ncy5zcmdiCi0tIFVzZSBNZXllcidzIHNpbmdsZXRvbiBmb3IgZGVmYXVsdCBj bXAKLS0gR3JvdXAgZXh0ZXJuIHZhcmlhYmxlcyBpbnRvIEFwcCBzaW5nbGV0b24KLS0gRml4IHJl Y3Vyc2l2ZSBpbml0IGFuZCBidWlsZCBpc3N1ZXMKLS0gRml4IEFwcGxlIGJ1aWxkCi0tLS0KLSBy dGVuZ2luZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgfCAgIDMgKy0KLSBydGVuZ2luZS9G VGJsb2NrRE4uY2MgICAgICAgICAgICAgICAgfCAgMTMgKy0KLSBydGVuZ2luZS9jbHV0c3RvcmUu Y2MgICAgICAgICAgICAgICAgfCAgIDQgKy0KLSBydGVuZ2luZS9kY3AuY2MgICAgICAgICAgICAg ICAgICAgICAgfCAgIDkgKy0KLSBydGVuZ2luZS9kZm1hbmFnZXIuY2MgICAgICAgICAgICAgICAg fCAgIDIgKwotIHJ0ZW5naW5lL2R1YWxfZGVtb3NhaWNfUlQuY2MgICAgICAgICB8ICAgMSArCi0g cnRlbmdpbmUvZmZtYW5hZ2VyLmNjICAgICAgICAgICAgICAgIHwgICAyICsKLSBydGVuZ2luZS9p Y2NzdG9yZS5jYyAgICAgICAgICAgICAgICAgfCAgIDIgKwotIHJ0ZW5naW5lL2ltYWdlaW8uY2Mg ICAgICAgICAgICAgICAgICB8ICAgMiArLQotIHJ0ZW5naW5lL2ltcHJvY2Nvb3JkaW5hdG9yLmNj ICAgICAgICB8ICAgOSArLQotIHJ0ZW5naW5lL2lwd2F2ZWxldC5jYyAgICAgICAgICAgICAgICB8 ICAgNSArLQotIHJ0ZW5naW5lL3BpeGVsc2hpZnQuY2MgICAgICAgICAgICAgICB8ICAgMiArCi0g cnRlbmdpbmUvcHJvY3BhcmFtcy5jYyAgICAgICAgICAgICAgIHwgIDE4ICsrLQotIHJ0ZW5naW5l L3Byb2ZpbGVzdG9yZS5jYyAgICAgICAgICAgICB8ICAgNyArLQotIHJ0ZW5naW5lL3Jhd2ltYWdl c291cmNlLmNjICAgICAgICAgICB8ICAgMiArCi0gcnRlbmdpbmUvcnRhcHAuY2MgICAgICAgICAg ICAgICAgICAgIHwgIDU3ICsrKysrKysrCi0gcnRlbmdpbmUvcnRhcHAuaCAgICAgICAgICAgICAg ICAgICAgIHwgIDgxICsrKysrKysrKysrKwotIHJ0ZW5naW5lL3NpbXBsZXByb2Nlc3MuY2MgICAg ICAgICAgICB8ICAgMSArCi0gcnRndWkvYWRqdXN0ZXIuY2MgICAgICAgICAgICAgICAgICAgIHwg ICA0ICstCi0gcnRndWkvYmF0Y2hxdWV1ZS5jYyAgICAgICAgICAgICAgICAgIHwgIDI1ICsrLS0K LSBydGd1aS9iYXRjaHF1ZXVlZW50cnkuY2MgICAgICAgICAgICAgfCAgIDEgKwotIHJ0Z3VpL2Jh dGNocXVldWVwYW5lbC5jYyAgICAgICAgICAgICB8ICAxNSArKy0KLSBydGd1aS9iYXRjaHRvb2xw YW5lbGNvb3JkLmNjICAgICAgICAgfCAgIDIgKwotIHJ0Z3VpL2JheWVycHJlcHJvY2Vzcy5jYyAg ICAgICAgICAgICB8ICAgMyArLQotIHJ0Z3VpL2JheWVycHJvY2Vzcy5jYyAgICAgICAgICAgICAg ICB8ICAgMyArLQotIHJ0Z3VpL2JheWVycmF3ZXhwb3N1cmUuY2MgICAgICAgICAgICB8ICAgMyAr LQotIHJ0Z3VpL2JsYWNrd2hpdGUuY2MgICAgICAgICAgICAgICAgICB8ICAgMSArCi0gcnRndWkv YnFlbnRyeXVwZGF0ZXIuY2MgICAgICAgICAgICAgIHwgICAxICsKLSBydGd1aS9jYWNoZW1hbmFn ZXIuY2MgICAgICAgICAgICAgICAgfCAgIDcgKy0KLSBydGd1aS9jb2xvcmFwcGVhcmFuY2UuY2Mg ICAgICAgICAgICAgfCAgIDIgKwotIHJ0Z3VpL2NvbG9ydG9uaW5nLmNjICAgICAgICAgICAgICAg ICB8ICAgMiArCi0gcnRndWkvY29udHJvbHNwb3RwYW5lbC5jYyAgICAgICAgICAgIHwgICA2ICst Ci0gcnRndWkvY3JvcC5jYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCi0gcnRndWkv Y3JvcHdpbmRvdy5jYyAgICAgICAgICAgICAgICAgIHwgIDE0ICstCi0gcnRndWkvY3VydmVlZGl0 b3Jncm91cC5jYyAgICAgICAgICAgIHwgICAzICstCi0gcnRndWkvY3VydmVlZGl0b3Jncm91cC5o ICAgICAgICAgICAgIHwgICAyICstCi0gcnRndWkvZGFya2ZyYW1lLmNjICAgICAgICAgICAgICAg ICAgIHwgICAyICsKLSBydGd1aS9kZWZyaW5nZS5jYyAgICAgICAgICAgICAgICAgICAgfCAgIDEg KwotIHJ0Z3VpL2RpYWdvbmFsY3VydmVlZGl0b3JzdWJncm91cC5jYyB8ICAgMSArCi0gcnRndWkv ZGlyYnJvd3Nlci5jYyAgICAgICAgICAgICAgICAgIHwgICA3ICstCi0gcnRndWkvZGlycHlyZGVu b2lzZS5jYyAgICAgICAgICAgICAgIHwgICA1ICstCi0gcnRndWkvZWRpdG9ycGFuZWwuY2MgICAg ICAgICAgICAgICAgIHwgIDY2ICsrKysrKy0tLS0KLSBydGd1aS9lZGl0d2luZG93LmNjICAgICAg ICAgICAgICAgICAgfCAgIDkgKy0KLSBydGd1aS9leHBvcnRwYW5lbC5jYyAgICAgICAgICAgICAg ICAgfCAgIDMgKwotIHJ0Z3VpL2V4dHByb2cuY2MgICAgICAgICAgICAgICAgICAgICB8ICAgNCAr LQotIHJ0Z3VpL2ZpbGVicm93c2VyLmNjICAgICAgICAgICAgICAgICB8ICAyOCArKy0tCi0gcnRn dWkvZmlsZWJyb3dzZXJlbnRyeS5jYyAgICAgICAgICAgIHwgICA2ICstCi0gcnRndWkvZmlsZWNh dGFsb2cuY2MgICAgICAgICAgICAgICAgIHwgMTkwICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0t LQotIHJ0Z3VpL2ZpbGVwYW5lbC5jYyAgICAgICAgICAgICAgICAgICB8ICAxNCArLQotIHJ0Z3Vp L2ZpbG1uZWdhdGl2ZS5jYyAgICAgICAgICAgICAgICB8ICAgMyArCi0gcnRndWkvZmlsbXNpbXVs YXRpb24uY2MgICAgICAgICAgICAgIHwgIDEwICstCi0gcnRndWkvZmxhdGN1cnZlZWRpdG9yc3Vi Z3JvdXAuY2MgICAgIHwgICAxICsKLSBydGd1aS9mbGF0ZmllbGQuY2MgICAgICAgICAgICAgICAg ICAgfCAgIDMgKwotIHJ0Z3VpL2d1aXV0aWxzLmNjICAgICAgICAgICAgICAgICAgICB8ICAgNSAr LQotIHJ0Z3VpL2hpc3RvZ3JhbXBhbmVsLmNjICAgICAgICAgICAgICB8ICA2NiArKysrKy0tLS0t Ci0gcnRndWkvaHN2ZXF1YWxpemVyLmNjICAgICAgICAgICAgICAgIHwgICAyICstCi0gcnRndWkv aWNjcHJvZmlsZWNyZWF0b3IuY2MgICAgICAgICAgIHwgIDMzICsrLS0tCi0gcnRndWkvaWNtcGFu ZWwuY2MgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCi0gcnRndWkvaW1hZ2VhcmVhLmNjICAg ICAgICAgICAgICAgICAgIHwgICA5ICstCi0gcnRndWkvaW5kY2xpcHBlZHBhbmVsLmNjICAgICAg ICAgICAgIHwgICAxICsKLSBydGd1aS9pbnNwZWN0b3IuY2MgICAgICAgICAgICAgICAgICAgfCAg IDQgKwotIHJ0Z3VpL2xhYmN1cnZlLmNjICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQotIHJ0 Z3VpL2xhYmdyaWQuY2MgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCi0gcnRndWkvbGVuc3By b2ZpbGUuY2MgICAgICAgICAgICAgICAgIHwgICAzICstCi0gcnRndWkvbG9jYWxsYWIuY2MgICAg ICAgICAgICAgICAgICAgIHwgICA0ICstCi0gcnRndWkvbG9jYWxsYWJ0b29scy5jYyAgICAgICAg ICAgICAgIHwgIDYxICsrKysrLS0tLQotIHJ0Z3VpL2xvY2FsbGFidG9vbHMyLmNjICAgICAgICAg ICAgICB8ICA4MCArKysrKystLS0tLQotIHJ0Z3VpL2xvY2thYmxlY29sb3JwaWNrZXIuY2MgICAg ICAgICB8ICAxMSArLQotIHJ0Z3VpL21haW4tY2xpLmNjICAgICAgICAgICAgICAgICAgICB8ICA1 NyArKysrLS0tLQotIHJ0Z3VpL21haW4uY2MgICAgICAgICAgICAgICAgICAgICAgICB8ICA5NiAr KysrKystLS0tLS0tLQotIHJ0Z3VpL25hdmlnYXRvci5jYyAgICAgICAgICAgICAgICAgICB8ICAx NyArLS0KLSBydGd1aS9vcHRpb25zLmNjICAgICAgICAgICAgICAgICAgICAgfCAxNDggKysrKysr KysrKy0tLS0tLS0tLS0tCi0gcnRndWkvb3B0aW9ucy5oICAgICAgICAgICAgICAgICAgICAgIHwg IDM0ICsrLS0tCi0gcnRndWkvcGFyYW1zZWRpdGVkLmNjICAgICAgICAgICAgICAgIHwgICAzICsK LSBydGd1aS9wZHNoYXJwZW5pbmcuY2MgICAgICAgICAgICAgICAgfCAgIDEgKwotIHJ0Z3VpL3Bs YWNlc2Jyb3dzZXIuY2MgICAgICAgICAgICAgICB8ICAgMyArCi0gcnRndWkvcHJlZmVyZW5jZXMu Y2MgICAgICAgICAgICAgICAgIHwgIDIyICsrLS0KLSBydGd1aS9wcmVwcm9jZXNzLmNjICAgICAg ICAgICAgICAgICAgfCAgIDMgKy0KLSBydGd1aS9wcmV2aWV3bW9kZXBhbmVsLmNjICAgICAgICAg ICAgfCAgIDEgKwotIHJ0Z3VpL3ByZXZpZXd3aW5kb3cuY2MgICAgICAgICAgICAgICB8ICAgMiAr Ci0gcnRndWkvcHJvZmlsZXBhbmVsLmNjICAgICAgICAgICAgICAgIHwgIDE4ICstLQotIHJ0Z3Vp L3Byb2ZpbGVzdG9yZWNvbWJvYm94LmNjICAgICAgICB8ICAgMiArLQotIHJ0Z3VpL3Jhd2NhY29y cmVjdGlvbi5jYyAgICAgICAgICAgICB8ICAgMSArCi0gcnRndWkvcmF3ZXhwb3N1cmUuY2MgICAg ICAgICAgICAgICAgIHwgICAxICsKLSBydGd1aS9yZWNlbnRicm93c2VyLmNjICAgICAgICAgICAg ICAgfCAgIDMgKy0KLSBydGd1aS9yZXRpbmV4LmNjICAgICAgICAgICAgICAgICAgICAgfCAgIDIg KwotIHJ0Z3VpL3JnYmN1cnZlcy5jYyAgICAgICAgICAgICAgICAgICB8ICAgMSArCi0gcnRndWkv cnRzY2FsYWJsZS5jYyAgICAgICAgICAgICAgICAgIHwgICA3ICstCi0gcnRndWkvcnR3aW5kb3cu Y2MgICAgICAgICAgICAgICAgICAgIHwgIDU4ICsrKystLS0tCi0gcnRndWkvc2F2ZWFzZGxnLmNj ICAgICAgICAgICAgICAgICAgIHwgICA3ICstCi0gcnRndWkvc2F2ZWZvcm1hdHBhbmVsLmNjICAg ICAgICAgICAgIHwgICAyICstCi0gcnRndWkvc2F2ZWZvcm1hdHBhbmVsLmggICAgICAgICAgICAg IHwgICAyICstCi0gcnRndWkvc2hhcnBlbmVkZ2UuY2MgICAgICAgICAgICAgICAgIHwgICAxICsK LSBydGd1aS9zb3VuZG1hbi5jYyAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KLSBydGd1aS9z cGxhc2guY2MgICAgICAgICAgICAgICAgICAgICAgfCAgMTUgKy0tCi0gcnRndWkvdGhyZXNob2xk YWRqdXN0ZXIuY2MgICAgICAgICAgIHwgICAyICstCi0gcnRndWkvdGh1bWJicm93c2VyYmFzZS5j YyAgICAgICAgICAgIHwgIDEwICstCi0gcnRndWkvdGh1bWJicm93c2VyYmFzZS5oICAgICAgICAg ICAgIHwgICAyICstCi0gcnRndWkvdGh1bWJicm93c2VyZW50cnliYXNlLmNjICAgICAgIHwgICA1 ICsKLSBydGd1aS90aHVtYm5haWwuY2MgICAgICAgICAgICAgICAgICAgfCAgNDggKysrKy0tLQot IHJ0Z3VpL3RvbmVjdXJ2ZS5jYyAgICAgICAgICAgICAgICAgICB8ICAgMSArCi0gcnRndWkvdG9v bHBhbmVsY29vcmQuY2MgICAgICAgICAgICAgIHwgICA3ICsKLSBydGd1aS92aWJyYW5jZS5jYyAg ICAgICAgICAgICAgICAgICAgfCAgIDEgKwotIHJ0Z3VpL3dhdmVsZXQuY2MgICAgICAgICAgICAg ICAgICAgICB8ICAyOCArKy0tCi0gcnRndWkvd2hpdGViYWxhbmNlLmNjICAgICAgICAgICAgICAg IHwgICA1ICstCi0gcnRndWkveHRyYW5zcHJvY2Vzcy5jYyAgICAgICAgICAgICAgIHwgICAzICst Ci0gcnRndWkveHRyYW5zcmF3ZXhwb3N1cmUuY2MgICAgICAgICAgIHwgICAxICsKLSAxMDcgZmls ZXMgY2hhbmdlZCwgOTQyIGluc2VydGlvbnMoKyksIDYzNyBkZWxldGlvbnMoLSkKLSBjcmVhdGUg bW9kZSAxMDA2NDQgcnRlbmdpbmUvcnRhcHAuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgcnRlbmdp bmUvcnRhcHAuaAotCi1kaWZmIC0tZ2l0IGEvcnRlbmdpbmUvQ01ha2VMaXN0cy50eHQgYi9ydGVu Z2luZS9DTWFrZUxpc3RzLnR4dAotaW5kZXggNmIzODhjZWQ0Li4xYmExMzc2ZjQgMTAwNjQ0Ci0t LS0gYS9ydGVuZ2luZS9DTWFrZUxpc3RzLnR4dAotKysrIGIvcnRlbmdpbmUvQ01ha2VMaXN0cy50 eHQKLUBAIC0xNzUsNiArMTc1LDcgQEAgc2V0KFJURU5HSU5FU09VUkNFRklMRVMKLSAgICAgcmNk X2RlbW9zYWljLmNjCi0gICAgIHJlZnJlc2htYXAuY2MKLSAgICAgcnRfYWxnby5jYwotKyAgICBy dGFwcC5jYwotICAgICBydGxlbnNmdW4uY2MKLSAgICAgcnR0aHVtYm5haWwuY2MKLSAgICAgc2ht YXAuY2MKLUBAIC0yNDUsNyArMjQ2LDcgQEAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMocnRl bmdpbmUKLSAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfQotICkKLSAjIFVwZGF0 ZUluZm8gY3JlYXRlcyAicnRndWkvdmVyc2lvbi5oIgotLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9y aWVzKHJ0ZW5naW5lIEJFRk9SRSBQUklWQVRFICR7Q01BS0VfQklOQVJZX0RJUn0pCi0rdGFyZ2V0 X2luY2x1ZGVfZGlyZWN0b3JpZXMocnRlbmdpbmUgQkVGT1JFIFBVQkxJQyAke0NNQUtFX0JJTkFS WV9ESVJ9KQotIAotIHRhcmdldF9saW5rX2xpYnJhcmllcyhydGVuZ2luZQotICAgICAke0VYUEFU X0xJQlJBUklFU30KLWRpZmYgLS1naXQgYS9ydGVuZ2luZS9GVGJsb2NrRE4uY2MgYi9ydGVuZ2lu ZS9GVGJsb2NrRE4uY2MKLWluZGV4IDRhNzhlMDYwMi4uMmNkMWM1NmIwIDEwMDY0NAotLS0tIGEv cnRlbmdpbmUvRlRibG9ja0ROLmNjCi0rKysgYi9ydGVuZ2luZS9GVGJsb2NrRE4uY2MKLUBAIC03 MTAsNiArNzEwLDcgQEAgQkVOQ0hGVU4KLSAKLSAgICAgICAgIGJvb2wgbWVtb3J5QWxsb2NhdGlv bkZhaWxlZCA9IGZhbHNlOwotIAotKyAgICAgICAgY29uc3QgYXV0byByZ2JEZW5vaXNlVGhyZWFk TGltaXQgPSBBcHA6OmdldCgpLm9wdGlvbnMoKS5yZ2JEZW5vaXNlVGhyZWFkTGltaXQ7Ci0gICAg ICAgICBkbyB7Ci0gICAgICAgICAgICAgKytudW1UcmllczsKLSAKLUBAIC03MTksNyArNzIwLDcg QEAgQkVOQ0hGVU4KLSAKLSAgICAgICAgICAgICBpbnQgbnVtdGlsZXNfVywgbnVtdGlsZXNfSCwg dGlsZXdpZHRoLCB0aWxlaGVpZ2h0LCB0aWxlV3NraXAsIHRpbGVIc2tpcDsKLSAKLS0gICAgICAg ICAgICBUaWxlX2NhbGModGlsZXNpemUsIG92ZXJsYXAsIChvcHRpb25zLnJnYkRlbm9pc2VUaHJl YWRMaW1pdCA9PSAwICYmICFwb25kZXIpID8gKG51bVRyaWVzID09IDEgPyAwIDogMikgOiAyLCBp bXdpZHRoLCBpbWhlaWdodCwgbnVtdGlsZXNfVywgbnVtdGlsZXNfSCwgdGlsZXdpZHRoLCB0aWxl aGVpZ2h0LCB0aWxlV3NraXAsIHRpbGVIc2tpcCk7Ci0rICAgICAgICAgICAgVGlsZV9jYWxjKHRp bGVzaXplLCBvdmVybGFwLCAocmdiRGVub2lzZVRocmVhZExpbWl0ID09IDAgJiYgIXBvbmRlcikg PyAobnVtVHJpZXMgPT0gMSA/IDAgOiAyKSA6IDIsIGltd2lkdGgsIGltaGVpZ2h0LCBudW10aWxl c19XLCBudW10aWxlc19ILCB0aWxld2lkdGgsIHRpbGVoZWlnaHQsIHRpbGVXc2tpcCwgdGlsZUhz a2lwKTsKLSAgICAgICAgICAgICBtZW1vcnlBbGxvY2F0aW9uRmFpbGVkID0gZmFsc2U7Ci0gICAg ICAgICAgICAgY29uc3QgaW50IG51bXRpbGVzID0gbnVtdGlsZXNfVyAqIG51bXRpbGVzX0g7Ci0g Ci1AQCAtNzgzLDggKzc4NCw4IEBAIEJFTkNIRlVOCi0gICAgICAgICAgICAgLy8gQ2FsY3VsYXRl IG51bWJlciBvZiB0aWxlcy4gSWYgbGVzcyB0aGFuIG9tcF9nZXRfbWF4X3RocmVhZHMoKSwgdGhl biBsaW1pdCBudW1fdGhyZWFkcyB0byBudW1iZXIgb2YgdGlsZXMKLSAgICAgICAgICAgICBpbnQg bnVtdGhyZWFkcyA9IE1JTihudW10aWxlcywgb21wX2dldF9tYXhfdGhyZWFkcygpKTsKLSAKLS0g ICAgICAgICAgICBpZiAob3B0aW9ucy5yZ2JEZW5vaXNlVGhyZWFkTGltaXQgPiAwKSB7Ci0tICAg ICAgICAgICAgICAgIG51bXRocmVhZHMgPSBNSU4obnVtdGhyZWFkcywgb3B0aW9ucy5yZ2JEZW5v aXNlVGhyZWFkTGltaXQpOwotKyAgICAgICAgICAgIGlmIChyZ2JEZW5vaXNlVGhyZWFkTGltaXQg PiAwKSB7Ci0rICAgICAgICAgICAgICAgIG51bXRocmVhZHMgPSBNSU4obnVtdGhyZWFkcywgcmdi RGVub2lzZVRocmVhZExpbWl0KTsKLSAgICAgICAgICAgICB9Ci0gCi0gI2lmZGVmIF9PUEVOTVAK LUBAIC03OTcsOCArNzk4LDggQEAgQkVOQ0hGVU4KLSAgICAgICAgICAgICAgICAgb21wX3NldF9u ZXN0ZWQodHJ1ZSk7Ci0gICAgICAgICAgICAgfQotIAotLSAgICAgICAgICAgIGlmIChvcHRpb25z LnJnYkRlbm9pc2VUaHJlYWRMaW1pdCA+IDApCi0tICAgICAgICAgICAgICAgIHdoaWxlIChkZW5v aXNlTmVzdGVkTGV2ZWxzICogbnVtdGhyZWFkcyA+IG9wdGlvbnMucmdiRGVub2lzZVRocmVhZExp bWl0KSB7Ci0rICAgICAgICAgICAgaWYgKHJnYkRlbm9pc2VUaHJlYWRMaW1pdCA+IDApCi0rICAg ICAgICAgICAgICAgIHdoaWxlIChkZW5vaXNlTmVzdGVkTGV2ZWxzICogbnVtdGhyZWFkcyA+IHJn YkRlbm9pc2VUaHJlYWRMaW1pdCkgewotICAgICAgICAgICAgICAgICAgICAgZGVub2lzZU5lc3Rl ZExldmVscy0tOwotICAgICAgICAgICAgICAgICB9Ci0gCi1AQCAtMTc2NCw3ICsxNzY1LDcgQEAg QkVOQ0hGVU4KLSAgICAgICAgICAgICAgICAgZmZ0d2ZfZGVzdHJveV9wbGFuKHBsYW5fZm9yd2Fy ZF9ibG94WzFdKTsKLSAgICAgICAgICAgICAgICAgZmZ0d2ZfZGVzdHJveV9wbGFuKHBsYW5fYmFj a3dhcmRfYmxveFsxXSk7Ci0gICAgICAgICAgICAgfQotLSAgICAgICAgfSB3aGlsZSAobWVtb3J5 QWxsb2NhdGlvbkZhaWxlZCAmJiBudW1UcmllcyA8IDIgJiYgKG9wdGlvbnMucmdiRGVub2lzZVRo cmVhZExpbWl0ID09IDApICYmICFwb25kZXIpOwotKyAgICAgICAgfSB3aGlsZSAobWVtb3J5QWxs b2NhdGlvbkZhaWxlZCAmJiBudW1UcmllcyA8IDIgJiYgKHJnYkRlbm9pc2VUaHJlYWRMaW1pdCA9 PSAwKSAmJiAhcG9uZGVyKTsKLSAKLSAgICAgICAgIGlmIChtZW1vcnlBbGxvY2F0aW9uRmFpbGVk KSB7Ci0gICAgICAgICAgICAgcHJpbnRmKCJ0aWxlZCBkZW5vaXNlIGZhaWxlZCBkdWUgdG8gaXN1 ZmZpY2llbnQgbWVtb3J5LiBPdXRwdXQgaXMgbm90IGRlbm9pc2VkIVxuIik7Ci1kaWZmIC0tZ2l0 IGEvcnRlbmdpbmUvY2x1dHN0b3JlLmNjIGIvcnRlbmdpbmUvY2x1dHN0b3JlLmNjCi1pbmRleCBk YjIyMTZhOGMuLmZiNDlkMmUxYyAxMDA2NDQKLS0tLSBhL3J0ZW5naW5lL2NsdXRzdG9yZS5jYwot KysrIGIvcnRlbmdpbmUvY2x1dHN0b3JlLmNjCi1AQCAtMzE5LDcgKzMxOSw3IEBAIHN0ZDo6c2hh cmVkX3B0cjxydGVuZ2luZTo6SGFsZENMVVQ+IHJ0ZW5naW5lOjpDTFVUU3RvcmU6OmdldENsdXQo Y29uc3QgR2xpYjo6dXN0Ci0gCi0gICAgIGNvbnN0IEdsaWI6OnVzdHJpbmcgZnVsbF9maWxlbmFt ZSA9Ci0gICAgICAgICAhR2xpYjo6cGF0aF9pc19hYnNvbHV0ZShmaWxlbmFtZSkKLS0gICAgICAg ICAgICA/IEdsaWI6OnVzdHJpbmcoR2xpYjo6YnVpbGRfZmlsZW5hbWUob3B0aW9ucy5jbHV0c0Rp ciwgZmlsZW5hbWUpKQotKyAgICAgICAgICAgID8gR2xpYjo6dXN0cmluZyhHbGliOjpidWlsZF9m aWxlbmFtZShBcHA6OmdldCgpLm9wdGlvbnMoKS5jbHV0c0RpciwgZmlsZW5hbWUpKQotICAgICAg ICAgICAgIDogZmlsZW5hbWU7Ci0gCi0gICAgIGlmICghY2FjaGUuZ2V0KGZ1bGxfZmlsZW5hbWUs IHJlc3VsdCkpIHsKLUBAIC0zNDAsNiArMzQwLDYgQEAgdm9pZCBydGVuZ2luZTo6Q0xVVFN0b3Jl OjpjbGVhckNhY2hlKCkKLSB9Ci0gCi0gcnRlbmdpbmU6OkNMVVRTdG9yZTo6Q0xVVFN0b3JlKCkg OgotLSAgICBjYWNoZShvcHRpb25zLmNsdXRDYWNoZVNpemUpCi0rICAgIGNhY2hlKEFwcDo6Z2V0 KCkub3B0aW9ucygpLmNsdXRDYWNoZVNpemUpCi0gewotIH0KLWRpZmYgLS1naXQgYS9ydGVuZ2lu ZS9kY3AuY2MgYi9ydGVuZ2luZS9kY3AuY2MKLWluZGV4IDNjNmM1NGQzMy4uNDNjODgyZjJlIDEw MDY0NAotLS0tIGEvcnRlbmdpbmUvZGNwLmNjCi0rKysgYi9ydGVuZ2luZS9kY3AuY2MKLUBAIC0y MTU2LDE1ICsyMTU2LDE0IEBAIHZvaWQgRENQU3RvcmU6OmluaXQoY29uc3QgR2xpYjo6dXN0cmlu ZyYgcnRfcHJvZmlsZV9kaXIsIGJvb2wgbG9hZEFsbCkKLSAKLSAgICAgZmlsZV9zdGRfcHJvZmls ZXMuY2xlYXIoKTsKLSAKLSsgICAgYXV0byBwcm9maWxlX2RpcnBhdGggPSBHbGliOjpidWlsZF9m aWxlbmFtZShBcHA6OmdldCgpLm9wdGlvbnMoKS5ydGRpciwgImRjcHByb2ZpbGVzIik7Ci0rCi0g ICAgIGlmICghbG9hZEFsbCkgewotLSAgICAgICAgcHJvZmlsZURpciA9IHsgcnRfcHJvZmlsZV9k aXIsIEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKG9wdGlvbnMucnRkaXIsICJkY3Bwcm9maWxlcyIpIH07 Ci0rICAgICAgICBwcm9maWxlRGlyID0geyBydF9wcm9maWxlX2RpciwgcHJvZmlsZV9kaXJwYXRo IH07Ci0gICAgICAgICByZXR1cm47Ci0gICAgIH0KLSAKLS0gICAgc3RkOjpkZXF1ZTxHbGliOjp1 c3RyaW5nPiBkaXJzID0gewotLSAgICAgICAgcnRfcHJvZmlsZV9kaXIsCi0tICAgICAgICBHbGli OjpidWlsZF9maWxlbmFtZShvcHRpb25zLnJ0ZGlyLCAiZGNwcHJvZmlsZXMiKQotLSAgICB9Owot KyAgICBzdGQ6OmRlcXVlPEdsaWI6OnVzdHJpbmc+IGRpcnMgPSB7IHJ0X3Byb2ZpbGVfZGlyLCBw cm9maWxlX2RpcnBhdGggfTsKLSAKLSAgICAgd2hpbGUgKCFkaXJzLmVtcHR5KCkpIHsKLSAgICAg ICAgIC8vIFByb2Nlc3MgZGlyZWN0b3J5Ci1kaWZmIC0tZ2l0IGEvcnRlbmdpbmUvZGZtYW5hZ2Vy LmNjIGIvcnRlbmdpbmUvZGZtYW5hZ2VyLmNjCi1pbmRleCA4NzU1MTdiMjQuLmM5YjUwNDk0MCAx MDA2NDQKLS0tLSBhL3J0ZW5naW5lL2RmbWFuYWdlci5jYwotKysrIGIvcnRlbmdpbmUvZGZtYW5h Z2VyLmNjCi1AQCAtNTI4LDYgKzUyOCw4IEBAIGNvbnN0IHN0ZDo6dmVjdG9yPHJ0ZW5naW5lOjpi YWRQaXg+KiBydGVuZ2luZTo6REZNYW5hZ2VyOjpJbXBsZW1lbnRhdGlvbjo6Z2V0QmFkCi0gCi0g ZGZJbmZvKiBydGVuZ2luZTo6REZNYW5hZ2VyOjpJbXBsZW1lbnRhdGlvbjo6YWRkRmlsZUluZm8o Y29uc3QgR2xpYjo6dXN0cmluZyYgZmlsZW5hbWUsIGJvb2wgcG9vbCkKLSB7Ci0rICAgIGNvbnN0 IE9wdGlvbnMmIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSsKLSAgICAgY29uc3Qg YXV0byBleHQgPSBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVuYW1lKTsKLSAKLSAgICAgaWYgKGV4dC5l bXB0eSgpIHx8ICFvcHRpb25zLmlzX2V4dGVudGlvbl9lbmFibGVkKGV4dCkpIHsKLWRpZmYgLS1n aXQgYS9ydGVuZ2luZS9kdWFsX2RlbW9zYWljX1JULmNjIGIvcnRlbmdpbmUvZHVhbF9kZW1vc2Fp Y19SVC5jYwotaW5kZXggNzQ5ZDA3ZWQ3Li4zMGRkYjFhNzggMTAwNjQ0Ci0tLS0gYS9ydGVuZ2lu ZS9kdWFsX2RlbW9zYWljX1JULmNjCi0rKysgYi9ydGVuZ2luZS9kdWFsX2RlbW9zYWljX1JULmNj Ci1AQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgcnRlbmdpbmUKLSAKLSB2b2lkIFJhd0ltYWdl U291cmNlOjpkdWFsX2RlbW9zYWljX1JUKGJvb2wgaXNCYXllciwgY29uc3QgcHJvY3BhcmFtczo6 UkFXUGFyYW1zICZyYXcsIGludCB3aW53LCBpbnQgd2luaCwgY29uc3QgYXJyYXkyRDxmbG9hdD4g JnJhd0RhdGEsIGFycmF5MkQ8ZmxvYXQ+ICZyZWQsIGFycmF5MkQ8ZmxvYXQ+ICZncmVlbiwgYXJy YXkyRDxmbG9hdD4gJmJsdWUsIGRvdWJsZSAmY29udHJhc3QsIGJvb2wgYXV0b0NvbnRyYXN0KQot IHsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotIAot ICAgICBpZiAoY29udHJhc3QgPT0gMC4wICYmICFhdXRvQ29udHJhc3QpIHsKLSAgICAgICAgIC8v IGNvbnRyYXN0ID09IDAuMCBtZWFucyBvbmx5IGZpcnN0IGRlbW9zYWljZXIgd2lsbCBiZSB1c2Vk Ci1kaWZmIC0tZ2l0IGEvcnRlbmdpbmUvZmZtYW5hZ2VyLmNjIGIvcnRlbmdpbmUvZmZtYW5hZ2Vy LmNjCi1pbmRleCA5ODRhZjFlODIuLjg5YWFhODQ3ZCAxMDA2NDQKLS0tLSBhL3J0ZW5naW5lL2Zm bWFuYWdlci5jYwotKysrIGIvcnRlbmdpbmUvZmZtYW5hZ2VyLmNjCi1AQCAtMzAyLDYgKzMwMiw4 IEBAIHZvaWQgRkZNYW5hZ2VyOjppbml0KGNvbnN0IEdsaWI6OnVzdHJpbmcmIHBhdGhuYW1lKQot IAotIGZmSW5mbyogRkZNYW5hZ2VyOjphZGRGaWxlSW5mbyAoY29uc3QgR2xpYjo6dXN0cmluZyYg ZmlsZW5hbWUsIGJvb2wgcG9vbCkKLSB7Ci0rICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMgPSBB cHA6OmdldCgpLm9wdGlvbnMoKTsKLSsKLSAgICAgYXV0byBleHQgPSBnZXRGaWxlRXh0ZW5zaW9u KGZpbGVuYW1lKTsKLSAKLSAgICAgaWYgKGV4dC5lbXB0eSgpIHx8ICFvcHRpb25zLmlzX2V4dGVu dGlvbl9lbmFibGVkKGV4dCkpIHsKLWRpZmYgLS1naXQgYS9ydGVuZ2luZS9pY2NzdG9yZS5jYyBi L3J0ZW5naW5lL2ljY3N0b3JlLmNjCi1pbmRleCA5Njk2MmU3NzIuLjIzMDE5OTU5NSAxMDA2NDQK LS0tLSBhL3J0ZW5naW5lL2ljY3N0b3JlLmNjCi0rKysgYi9ydGVuZ2luZS9pY2NzdG9yZS5jYwot QEAgLTQ1Myw2ICs0NTMsOCBAQCBwdWJsaWM6Ci0gICAgICAgICBmaWxlUHJvZmlsZXMuY2xlYXIo KTsKLSAgICAgICAgIGZpbGVQcm9maWxlQ29udGVudHMuY2xlYXIoKTsKLSAKLSsgICAgICAgIGNv bnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSsKLSAgICAgICAgIGlm IChsb2FkQWxsKSB7Ci0gICAgICAgICAgICAgbG9hZFByb2ZpbGVzKHByb2ZpbGVzRGlyLCAmZmls ZVByb2ZpbGVzLCAmZmlsZVByb2ZpbGVDb250ZW50cywgbnVsbHB0ciwgZmFsc2UpOwotICAgICAg ICAgICAgIGxvYWRQcm9maWxlcyh1c2VySUNDRGlyLCAmZmlsZVByb2ZpbGVzLCAmZmlsZVByb2Zp bGVDb250ZW50cywgbnVsbHB0ciwgZmFsc2UpOwotZGlmZiAtLWdpdCBhL3J0ZW5naW5lL2ltYWdl aW8uY2MgYi9ydGVuZ2luZS9pbWFnZWlvLmNjCi1pbmRleCAxYTE2MDUzMzQuLmJjMzQyODdmMyAx MDA2NDQKLS0tLSBhL3J0ZW5naW5lL2ltYWdlaW8uY2MKLSsrKyBiL3J0ZW5naW5lL2ltYWdlaW8u Y2MKLUBAIC02ODgsNyArNjg4LDcgQEAgaW50IEltYWdlSU86OmxvYWRUSUZGIChjb25zdCBHbGli Ojp1c3RyaW5nICZmbmFtZSkKLSAgICAgc3RhdGljIE15TXV0ZXggdGh1bWJNdXRleDsKLSAgICAg TXlNdXRleDo6TXlMb2NrIGxvY2sodGh1bWJNdXRleCk7Ci0gCi0tICAgIGlmKCFvcHRpb25zLnNl cmlhbGl6ZVRpZmZSZWFkKSB7Ci0rICAgIGlmKCFBcHA6OmdldCgpLm9wdGlvbnMoKS5zZXJpYWxp emVUaWZmUmVhZCkgewotICAgICAgICAgbG9jay5yZWxlYXNlKCk7Ci0gICAgIH0KLSAKLWRpZmYg LS1naXQgYS9ydGVuZ2luZS9pbXByb2Njb29yZGluYXRvci5jYyBiL3J0ZW5naW5lL2ltcHJvY2Nv b3JkaW5hdG9yLmNjCi1pbmRleCAzNzZhNjc4NDIuLmIwYmY2ODc5ZiAxMDA2NDQKLS0tLSBhL3J0 ZW5naW5lL2ltcHJvY2Nvb3JkaW5hdG9yLmNjCi0rKysgYi9ydGVuZ2luZS9pbXByb2Njb29yZGlu YXRvci5jYwotQEAgLTMzOCw3ICszMzgsOCBAQCB2b2lkIEltUHJvY0Nvb3JkaW5hdG9yOjp1cGRh dGVQcmV2aWV3SW1hZ2UoaW50IHRvZG8sIGJvb2wgcGFubmluZ1JlbGF0ZWRDaGFuZ2UpCi0gICAg IC8vIFRPRE8gTG9jYWxsYWIgcHJpbnRmCi0gICAgIE15TXV0ZXg6Ok15TG9jayBwcm9jZXNzaW5n TG9jayhtUHJvY2Vzc2luZyk7Ci0gCi0tICAgIGJvb2wgaGlnaERldGFpbE5lZWRlZCA9IG9wdGlv bnMucHJldmRlbW8gPT0gUERfU2lkZWNhciA/IHRydWUgOiAodG9kbyAmIE1fSElHSFFVQUwpOwot KyAgICBjb25zdCBhdXRvIHByZXZkZW1vID0gQXBwOjpnZXQoKS5vcHRpb25zKCkucHJldmRlbW87 Ci0rICAgIGJvb2wgaGlnaERldGFpbE5lZWRlZCA9IHByZXZkZW1vID09IFBEX1NpZGVjYXIgPyB0 cnVlIDogKHRvZG8gJiBNX0hJR0hRVUFMKTsKLSAgICAgLy8gICAgcHJpbnRmKCJtZXR3Yj0lcyBc biIsIHBhcmFtcy0+d2IubWV0aG9kLmNfc3RyKCkpOwotIAotICAgICAvLyBDaGVjayBpZiBhbnkg ZGV0YWlsIGNyb3BzIG5lZWQgaGlnaCBkZXRhaWwuIElmIG5vdCwgdGFrZSBhIGZhc3QgcGF0aCBz aG9ydCBjdXQKLUBAIC0zNTEsNyArMzUyLDcgQEAgdm9pZCBJbVByb2NDb29yZGluYXRvcjo6dXBk YXRlUHJldmlld0ltYWdlKGludCB0b2RvLCBib29sIHBhbm5pbmdSZWxhdGVkQ2hhbmdlKQotICAg ICAgICAgfQotICAgICB9Ci0gCi0tICAgIGlmICgoKHRvZG8gJiBBTEwpID09IEFMTCkgfHwgKHRv ZG8gJiBNX01PTklUT1IpIHx8IHBhbm5pbmdSZWxhdGVkQ2hhbmdlIHx8IChoaWdoRGV0YWlsTmVl ZGVkICYmIG9wdGlvbnMucHJldmRlbW8gIT0gUERfU2lkZWNhcikpIHsKLSsgICAgaWYgKCgodG9k byAmIEFMTCkgPT0gQUxMKSB8fCAodG9kbyAmIE1fTU9OSVRPUikgfHwgcGFubmluZ1JlbGF0ZWRD aGFuZ2UgfHwgKGhpZ2hEZXRhaWxOZWVkZWQgJiYgcHJldmRlbW8gIT0gUERfU2lkZWNhcikpIHsK LSAgICAgICAgIGJ3QXV0b1IgPSBid0F1dG9HID0gYndBdXRvQiA9IC05MDAwLmY7Ci0gCi0gICAg ICAgICBpZiAodG9kbyA9PSBDUk9QICYmIGlwZi5uZWVkc1BDVmlnbmV0dGluZygpKSB7Ci1AQCAt MjQ2Niw3ICsyNDY3LDcgQEAgdm9pZCBJbVByb2NDb29yZGluYXRvcjo6dXBkYXRlUHJldmlld0lt YWdlKGludCB0b2RvLCBib29sIHBhbm5pbmdSZWxhdGVkQ2hhbmdlKQotIAotIC8vIHByb2Nlc3Mg Y3JvcCwgaWYgbmVlZGVkCi0gICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3JvcHMuc2l6ZSgp OyBpKyspCi0tICAgICAgICBpZiAoY3JvcHNbaV0tPmhhc0xpc3RlbmVyKCkgJiYgKHBhbm5pbmdS ZWxhdGVkQ2hhbmdlIHx8IChoaWdoRGV0YWlsTmVlZGVkICYmIG9wdGlvbnMucHJldmRlbW8gIT0g UERfU2lkZWNhcikgfHwgKHRvZG8gJiAoTV9NT05JVE9SIHwgTV9SR0JDVVJWRSB8IE1fTFVNQUNV UlZFKSkgfHwgY3JvcHNbaV0tPmdldF9za2lwKCkgPT0gMSkpIHsKLSsgICAgICAgIGlmIChjcm9w c1tpXS0+aGFzTGlzdGVuZXIoKSAmJiAocGFubmluZ1JlbGF0ZWRDaGFuZ2UgfHwgKGhpZ2hEZXRh aWxOZWVkZWQgJiYgcHJldmRlbW8gIT0gUERfU2lkZWNhcikgfHwgKHRvZG8gJiAoTV9NT05JVE9S IHwgTV9SR0JDVVJWRSB8IE1fTFVNQUNVUlZFKSkgfHwgY3JvcHNbaV0tPmdldF9za2lwKCkgPT0g MSkpIHsKLSAgICAgICAgICAgICBjcm9wc1tpXS0+dXBkYXRlKHRvZG8pOyAgICAgLy8gbWF5IGNh bGwgb3Vyc2VsdmVzCi0gICAgICAgICB9Ci0gCi1AQCAtMzM0Miw3ICszMzQzLDcgQEAgYm9vbCBJ bVByb2NDb29yZGluYXRvcjo6Z2V0SGlnaFF1YWxDb21wdXRlZCgpCi0gewotICAgICAvLyB0aGlz IGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIGRldGFpbCB3aW5kb3dzCi0gICAgIGlm ICghaGlnaFF1YWxpdHlDb21wdXRlZCkgewotLSAgICAgICAgaWYgKG9wdGlvbnMucHJldmRlbW8g PT0gUERfU2lkZWNhcikgewotKyAgICAgICAgaWYgKEFwcDo6Z2V0KCkub3B0aW9ucygpLnByZXZk ZW1vID09IFBEX1NpZGVjYXIpIHsKLSAgICAgICAgICAgICAvLyB3ZSBhbHJlYWR5IGhhdmUgaGln aCBxdWFsaXR5IHByZXZpZXcKLSAgICAgICAgICAgICBzZXRIaWdoUXVhbENvbXB1dGVkKCk7Ci0g ICAgICAgICB9IGVsc2UgewotZGlmZiAtLWdpdCBhL3J0ZW5naW5lL2lwd2F2ZWxldC5jYyBiL3J0 ZW5naW5lL2lwd2F2ZWxldC5jYwotaW5kZXggZDlkNWZiMmU0Li44NWE2YzEzYTQgMTAwNjQ0Ci0t LS0gYS9ydGVuZ2luZS9pcHdhdmVsZXQuY2MKLSsrKyBiL3J0ZW5naW5lL2lwd2F2ZWxldC5jYwot QEAgLTgxNSw4ICs4MTUsOSBAQCB2b2lkIEltUHJvY0Z1bmN0aW9uczo6aXBfd2F2ZWxldChMYWJJ bWFnZSAqIGxhYiwgTGFiSW1hZ2UgKiBkc3QsIGludCBrYWxsLCBjb25zdAotIAotIAotICAgICAv LyBDYWxjdWxhdGUgbnVtYmVyIG9mIHRpbGVzLiBJZiBsZXNzIHRoYW4gb21wX2dldF9tYXhfdGhy ZWFkcygpLCB0aGVuIGxpbWl0IG51bV90aHJlYWRzIHRvIG51bWJlciBvZiB0aWxlcwotLSAgICBp ZiAob3B0aW9ucy5yZ2JEZW5vaXNlVGhyZWFkTGltaXQgPiAwKSB7Ci0tICAgICAgICBtYXhudW1i ZXJvZnRocmVhZHNmb3J3YXZlbGV0ID0gcnRlbmdpbmU6OkxJTShvcHRpb25zLnJnYkRlbm9pc2VU aHJlYWRMaW1pdCAvIDIsIDEsIG1heG51bWJlcm9mdGhyZWFkc2ZvcndhdmVsZXQpOwotKyAgICBj b25zdCBhdXRvIHJnYkRlbm9pc2VUaHJlYWRMaW1pdCA9IEFwcDo6Z2V0KCkub3B0aW9ucygpLnJn YkRlbm9pc2VUaHJlYWRMaW1pdDsKLSsgICAgaWYgKHJnYkRlbm9pc2VUaHJlYWRMaW1pdCA+IDAp IHsKLSsgICAgICAgIG1heG51bWJlcm9mdGhyZWFkc2ZvcndhdmVsZXQgPSBydGVuZ2luZTo6TElN KHJnYkRlbm9pc2VUaHJlYWRMaW1pdCAvIDIsIDEsIG1heG51bWJlcm9mdGhyZWFkc2ZvcndhdmVs ZXQpOwotICAgICB9Ci0gCi0gICAgIG51bXRocmVhZHMgPSBydGVuZ2luZTo6bWluKG51bXRpbGVz LCBvbXBfZ2V0X21heF90aHJlYWRzKCkpOwotZGlmZiAtLWdpdCBhL3J0ZW5naW5lL3BpeGVsc2hp ZnQuY2MgYi9ydGVuZ2luZS9waXhlbHNoaWZ0LmNjCi1pbmRleCBiZjE3Yjk3NDAuLmEwMTcyODgy MCAxMDA2NDQKLS0tLSBhL3J0ZW5naW5lL3BpeGVsc2hpZnQuY2MKLSsrKyBiL3J0ZW5naW5lL3Bp eGVsc2hpZnQuY2MKLUBAIC0zMDgsNiArMzA4LDggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLSB1 c2luZyBuYW1lc3BhY2UgcnRlbmdpbmU7Ci0gdm9pZCBSYXdJbWFnZVNvdXJjZTo6cGl4ZWxzaGlm dChpbnQgd2lueCwgaW50IHdpbnksIGludCB3aW53LCBpbnQgd2luaCwgY29uc3QgcHJvY3BhcmFt czo6UkFXUGFyYW1zICZyYXdQYXJhbXNJbiwgdW5zaWduZWQgaW50IGZyYW1lLCBjb25zdCBzdGQ6 OnN0cmluZyAmbWFrZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm1vZGVsLCBmbG9hdCByYXdXcENvcnJl Y3Rpb24pCi0gewotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25z KCk7Ci0rCi0gQkVOQ0hGVU4KLSAgICAgaWYobnVtRnJhbWVzICE9IDQpIHsgLy8gZmFsbGJhY2sg Zm9yIG5vbiBwaXhlbHNoaWZ0IGZpbGVzCi0gICAgICAgICBhbWF6ZV9kZW1vc2FpY19SVCh3aW54 LCB3aW55LCB3aW53LCB3aW5oLCByYXdEYXRhLCByZWQsIGdyZWVuLCBibHVlLCBvcHRpb25zLmNo dW5rU2l6ZUFNQVpFLCBvcHRpb25zLm1lYXN1cmUpOwotZGlmZiAtLWdpdCBhL3J0ZW5naW5lL3By b2NwYXJhbXMuY2MgYi9ydGVuZ2luZS9wcm9jcGFyYW1zLmNjCi1pbmRleCAyYWJiMzA1OTMuLmE4 NDFjOTIyMSAxMDA2NDQKLS0tLSBhL3J0ZW5naW5lL3Byb2NwYXJhbXMuY2MKLSsrKyBiL3J0ZW5n aW5lL3Byb2NwYXJhbXMuY2MKLUBAIC0yNzEzLDcgKzI3MTMsNyBAQCBDb2xvck1hbmFnZW1lbnRQ YXJhbXM6OkNvbG9yTWFuYWdlbWVudFBhcmFtcygpIDoKLSAgICAgbGFiZ3JpZGNpZU14KDAuKSwv LwotICAgICBsYWJncmlkY2llTXkoMC4pLC8vCi0gICAgIGFSZW5kSW50ZW50KFJJX1JFTEFUSVZF KSwKLS0gICAgb3V0cHV0UHJvZmlsZShvcHRpb25zLnJ0U2V0dGluZ3Muc3JnYiksCi0rICAgIG91 dHB1dFByb2ZpbGUoQXBwOjpnZXQoKS5vcHRpb25zKCkucnRTZXR0aW5ncy5zcmdiKSwKLSAgICAg b3V0cHV0SW50ZW50KFJJX1JFTEFUSVZFKSwKLSAgICAgb3V0cHV0QlBDKHRydWUpCi0gewotQEAg LTMzMTUsNyArMzMxNSw3IEBAIExvY2FsbGFiUGFyYW1zOjpMb2NhbGxhYlNwb3Q6OkxvY2FsbGFi U3BvdCgpIDoKLSAgICAgYXZvaWRyYWQoMC4pLAotICAgICB0cmFuc2l0d2VhaygxLjApLAotICAg ICB0cmFuc2l0Z3JhZCgwLjApLAotLSAgICBoaXNob3cob3B0aW9ucy5jb21wbGV4aXR5ICE9IDIp LAotKyAgICBoaXNob3coQXBwOjpnZXQoKS5vcHRpb25zKCkuY29tcGxleGl0eSAhPSAyKSwKLSAg ICAgYWN0aXYodHJ1ZSksCi0gICAgIGF2b2lkbmVnKHRydWUpLAotICAgICBibHdoKGZhbHNlKSwK LUBAIC01MTI2LDEzICs1MTI2LDE1IEBAIExvY2FsbGFiUGFyYW1zOjpMb2NhbGxhYlNwb3Q6Okxv Y2FsbGFiU3BvdCgpIDoKLSAgIC8vIGluaXQgc2V0dGluZ3Mgd2l0aCBQcmVmZXJlbmNlcyAvIG9w dGlvbnMgOiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGNhbGwgdG8gc3BvdE1ldGhvZENoYW5nZWQgaW4g Y29udHJvbHNwb3RwYW5lbC5jYyAgKGlkbGVfcmVnaXN0ZXIpCi0gICAvLyBuZXcgdmFsdWVzIGRl ZmF1bHQgd2l0aCBkaWZmZXJlbnQgU3BvdE1ldGhvZC4KLSAKLS0gICAgaWYob3B0aW9ucy5zcG90 bWV0ID09IDMpIHsvL2dsb2JhbAotKyAgICBjb25zdCBhdXRvIHNwb3RtZXQgPSBBcHA6OmdldCgp Lm9wdGlvbnMoKS5zcG90bWV0OwotKwotKyAgICBpZihzcG90bWV0ID09IDMpIHsvL2dsb2JhbAot ICAgICAgICAgc3BvdE1ldGhvZCA9ICJtYWluIjsKLSAgICAgICAgIGxvYyA9IHszMDAwLCAzMDAw LCAzMDAwLCAzMDAwfTsKLSAgICAgICAgIHRyYW5zaXQgPTEwMC47Ci0gICAgICAgICBzaGFwZSA9 ICJSRUNUIjsKLSAKLS0gICAgfSBlbHNlIGlmKG9wdGlvbnMuc3BvdG1ldCA9PSAyKSB7Ly9mdWxs IGltYWdlCi0rICAgIH0gZWxzZSBpZihzcG90bWV0ID09IDIpIHsvL2Z1bGwgaW1hZ2UKLSAgICAg ICAgIHNwb3RNZXRob2QgPSAiZnVsbCI7Ci0gICAgICAgICBsb2MgPSB7MzAwMCwgMzAwMCwgMzAw MCwgMzAwMH07Ci0gICAgICAgICB0cmFuc2l0ID0xMDAuOwotQEAgLTUxNTMsNyArNTE1NSw3IEBA IExvY2FsbGFiUGFyYW1zOjpMb2NhbGxhYlNwb3Q6OkxvY2FsbGFiU3BvdCgpIDoKLSAgICAgICAg IHNlbnNpbWFzayA9IDYwOwotICAgICAgICAgc2Vuc2ljaWUgPSA2MDsKLSAgICAgICAgIAotLSAg ICB9IGVsc2UgaWYob3B0aW9ucy5zcG90bWV0ID09IDEpIHsvL2V4Y2x1ZGUKLSsgICAgfSBlbHNl IGlmKHNwb3RtZXQgPT0gMSkgey8vZXhjbHVkZQotICAgICAgICAgc3BvdE1ldGhvZCA9ICJleGMi OwotICAgICAgICAgc2hhcGUgPSAiRUxJIjsKLSAgICAgICAgIGxvYyA9IHsxNTAsIDE1MCwgMTUw LCAxNTB9OwotQEAgLTUxNzMsNyArNTE3NSw3IEBAIExvY2FsbGFiUGFyYW1zOjpMb2NhbGxhYlNw b3Q6OkxvY2FsbGFiU3BvdCgpIDoKLSAgICAgICAgIHNlbnNpbWFzayA9IDYwOwotICAgICAgICAg c2Vuc2ljaWUgPSA2MDsKLSAgICAgICAgIAotLSAgICB9IGVsc2UgaWYob3B0aW9ucy5zcG90bWV0 ID09IDApIHsvL25vcm1hbAotKyAgICB9IGVsc2UgaWYoc3BvdG1ldCA9PSAwKSB7Ly9ub3JtYWwK LSAgICAgICAgIHNwb3RNZXRob2QgPSAibm9ybSI7Ci0gICAgICAgICBzaGFwZSA9ICJFTEkiOwot ICAgICAgICAgbG9jID0gezE1MCwgMTUwLCAxNTAsIDE1MH07Ci1AQCAtNjczNSw2ICs2NzM3LDgg QEAgaW50IFByb2NQYXJhbXM6OnNhdmUoY29uc3QgR2xpYjo6dXN0cmluZyYgZm5hbWUsIGNvbnN0 IEdsaWI6OnVzdHJpbmcmIGZuYW1lMiwgYm8KLSAgICAgICAgIHJldHVybiAwOwotICAgICB9Ci0g Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSsKLSAg ICAgR2xpYjo6dXN0cmluZyBzUFBhcmFtczsKLSAKLSAgICAgdHJ5IHsKLUBAIC04NjcwLDYgKzg2 NzQsOCBAQCBpbnQgUHJvY1BhcmFtczo6bG9hZChjb25zdCBHbGliOjp1c3RyaW5nJiBmbmFtZSwg UGFyYW1zRWRpdGVkKiBwZWRpdGVkKQotICAgICAgICAgcmV0dXJuIDE7Ci0gICAgIH0KLSAKLSsg ICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotKwotICAgICBH bGliOjpLZXlGaWxlIGtleUZpbGU7Ci0gCi0gICAgIHRyeSB7Ci1kaWZmIC0tZ2l0IGEvcnRlbmdp bmUvcHJvZmlsZXN0b3JlLmNjIGIvcnRlbmdpbmUvcHJvZmlsZXN0b3JlLmNjCi1pbmRleCA4NDll NzgxNjUuLjU1NWYzMDE0NiAxMDA2NDQKLS0tLSBhL3J0ZW5naW5lL3Byb2ZpbGVzdG9yZS5jYwot KysrIGIvcnRlbmdpbmUvcHJvZmlsZXN0b3JlLmNjCi1AQCAtMTI2LDYgKzEyNiw3IEBAIHZvaWQg UHJvZmlsZVN0b3JlOjpfcGFyc2VQcm9maWxlcyAoKQotIAotICAgICBmb2xkZXJzLnB1c2hfYmFj ayAoIjw8PCBST09UID4+PiIpOyAvLyBGYWtlIHBhdGgsIHNvIHBhcmVudEZvbGRlcklkID09IDAg d2lsbCBiZSB1c2VkIHRvIGF0dGFjaCBhIFByb2ZpbGVTdG9yZUVudHJ5IHRvIHRoZSByb290IGNv bnRhaW5lciwgbm90IHN1Yi1tZW51Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgp Lm11dF9vcHRpb25zKCk7Ci0gICAgIEdsaWI6OnVzdHJpbmcgcDEgPSBvcHRpb25zLmdldFVzZXJQ cm9maWxlUGF0aCgpOwotICAgICBHbGliOjp1c3RyaW5nIHAyID0gb3B0aW9ucy5nZXRHbG9iYWxQ cm9maWxlUGF0aCgpOwotICAgICBib29sIGRpc3BsYXlMZXZlbDAgPSBvcHRpb25zLnVzZUJ1bmRs ZWRQcm9maWxlcyAmJiAhcDEuZW1wdHkoKSAmJiAhcDIuZW1wdHkoKSAmJiBwMSAhPSBwMjsKLUBA IC0yMjEsNyArMjIyLDcgQEAgYm9vbCBQcm9maWxlU3RvcmU6OnBhcnNlRGlyIChHbGliOjp1c3Ry aW5nJiByZWFsUGF0aCwgR2xpYjo6dXN0cmluZyYgdmlydHVhbFBhdGgKLSAgICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgICBzaXplX3QgbGFzdGRvdCA9IGN1cnJEaXIuZmluZF9s YXN0X29mICgnLicpOwotIAotLSAgICAgICAgICAgICAgICBpZiAobGFzdGRvdCAhPSBHbGliOjp1 c3RyaW5nOjpucG9zICYmIGxhc3Rkb3QgPT0gY3VyckRpci5sZW5ndGgoKSAtIDQgJiYgY3VyckRp ci5zdWJzdHIgKGxhc3Rkb3QpLmNhc2Vmb2xkKCkgPT0gcGFyYW1GaWxlRXh0ZW5zaW9uKSB7Ci0r ICAgICAgICAgICAgICAgIGlmIChsYXN0ZG90ICE9IEdsaWI6OnVzdHJpbmc6Om5wb3MgJiYgbGFz dGRvdCA9PSBjdXJyRGlyLmxlbmd0aCgpIC0gNCAmJiBjdXJyRGlyLnN1YnN0ciAobGFzdGRvdCku Y2FzZWZvbGQoKSA9PSBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAvLyBmaWxlIGZvdW5kCi0gICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3Mt PnZlcmJvc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCJQcm9jZXNzaW5n IGZpbGUgJXMuLi4iLCBmbmFtZS5jX3N0cigpKTsKLUBAIC0zMDcsNyArMzA4LDcgQEAgY29uc3Qg UHJvZmlsZVN0b3JlRW50cnkqIFByb2ZpbGVTdG9yZTo6ZmluZEVudHJ5RnJvbUZ1bGxQYXRoVSAo R2xpYjo6dXN0cmluZyBwYXQKLSAgICAgaWYgKAotICAgICAgICAgbGFzdGRvdF9wb3MgIT0gR2xp Yjo6dXN0cmluZzo6bnBvcwotICAgICAgICAgJiYgbGFzdGRvdF9wb3MgPD0gY2FzZWZvbGRlZF9w YXRoLnNpemUoKSAtIDQKLS0gICAgICAgICYmICFjYXNlZm9sZGVkX3BhdGguY29tcGFyZSAobGFz dGRvdF9wb3MsIDQsIHBhcmFtRmlsZUV4dGVuc2lvbikKLSsgICAgICAgICYmICFjYXNlZm9sZGVk X3BhdGguY29tcGFyZSAobGFzdGRvdF9wb3MsIDQsIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04p Ci0gICAgICkgewotICAgICAgICAgLy8gcmVtb3ZpbmcgdGhlIGV4dGVuc2lvbgotICAgICAgICAg Ly8gbm93IHVzZSBkb3QgcG9zaXRpb24gd2l0aG91dCBjYXNlZm9sZCgpCi1AQCAtNDMyLDYgKzQz Myw3IEBAIGNvbnN0IFByb2NQYXJhbXMqIFByb2ZpbGVTdG9yZTo6Z2V0RGVmYXVsdFByb2NQYXJh bXMgKGJvb2wgaXNSYXcpCi0gICAgIC8vTm90ZTogdGhlIG11dGV4IGlzIGxvY2tlZCBpbiBnZXRQ cm9maWxlLCBjYWxsZWQgYmVsb3cKLSAgICAgLy8gICAgICBldmVudHVhbCBpbml0aWFsaXphdGlv biBpcyBkb25lIHRoZXJlIHRvbwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpn ZXQoKS5vcHRpb25zKCk7Ci0gICAgIGNvbnN0IFBhcnRpYWxQcm9maWxlKiBwUHJvZiA9IGdldFBy b2ZpbGUgKGlzUmF3ID8gb3B0aW9ucy5kZWZQcm9mUmF3IDogb3B0aW9ucy5kZWZQcm9mSW1nKTsK LSAKLSAgICAgaWYgKCFwUHJvZikgewotQEAgLTQ1Miw2ICs0NTQsNyBAQCBjb25zdCBQYXJ0aWFs UHJvZmlsZSogUHJvZmlsZVN0b3JlOjpnZXREZWZhdWx0UGFydGlhbFByb2ZpbGUgKGJvb2wgaXNS YXcpCi0gICAgIC8vTm90ZTogdGhlIG11dGV4IGlzIGxvY2tlZCBpbiBnZXRQcm9maWxlLCBjYWxs ZWQgYmVsb3cKLSAgICAgLy8gICAgICBldmVudHVhbCBpbml0aWFsaXphdGlvbiBpcyBkb25lIHRo ZXJlIHRvbwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25z KCk7Ci0gICAgIGNvbnN0IFBhcnRpYWxQcm9maWxlKiBwUHJvZiA9IGdldFByb2ZpbGUgKGlzUmF3 ID8gb3B0aW9ucy5kZWZQcm9mUmF3IDogb3B0aW9ucy5kZWZQcm9mSW1nKTsKLSAKLSAgICAgaWYg KCFwUHJvZikgewotZGlmZiAtLWdpdCBhL3J0ZW5naW5lL3Jhd2ltYWdlc291cmNlLmNjIGIvcnRl bmdpbmUvcmF3aW1hZ2Vzb3VyY2UuY2MKLWluZGV4IGMzOWVlNDgyMy4uOWE3ZmJlZmQzIDEwMDY0 NAotLS0tIGEvcnRlbmdpbmUvcmF3aW1hZ2Vzb3VyY2UuY2MKLSsrKyBiL3J0ZW5naW5lL3Jhd2lt YWdlc291cmNlLmNjCi1AQCAtMTc1OSw2ICsxNzU5LDcgQEAgdm9pZCBSYXdJbWFnZVNvdXJjZTo6 cHJlcHJvY2Vzcyhjb25zdCBSQVdQYXJhbXMgJnJhdywgY29uc3QgTGVuc1Byb2ZQYXJhbXMgJmxl bnMKLSAgICAgICAgICAgICBwbGlzdGVuZXItPnNldFByb2dyZXNzKDAuMCk7Ci0gICAgICAgICB9 Ci0gCi0rICAgICAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7 Ci0gICAgICAgICBpZiAobnVtRnJhbWVzID09IDQpIHsKLSAgICAgICAgICAgICBkb3VibGUgZml0 UGFyYW1zWzY0XTsKLSAgICAgICAgICAgICBmbG9hdCAqYnVmZmVyID0gQ0FfY29ycmVjdF9SVChy YXcuY2FfYXV0b2NvcnJlY3QsIHJhdy5jYWF1dG9pdGVyYXRpb25zLCByYXcuY2FyZWQsIHJhdy5j YWJsdWUsIHJhdy5jYV9hdm9pZGNvbG91cnNoaWZ0LCByYXcuYmF5ZXJzZW5zb3IuYm9yZGVyLCAq cmF3RGF0YUZyYW1lc1swXSwgZml0UGFyYW1zLCBmYWxzZSwgdHJ1ZSwgbnVsbHB0ciwgZmFsc2Us IG9wdGlvbnMuY2h1bmtTaXplQ0EsIG9wdGlvbnMubWVhc3VyZSk7Ci1AQCAtMTc5OSw2ICsxODAw LDcgQEAgdm9pZCBSYXdJbWFnZVNvdXJjZTo6ZGVtb3NhaWMoY29uc3QgUkFXUGFyYW1zICZyYXcs IGJvb2wgYXV0b0NvbnRyYXN0LCBkb3VibGUgJmMKLSAgICAgTXlUaW1lIHQxLCB0MjsKLSAgICAg dDEuc2V0KCk7Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlv bnMoKTsKLSAgICAgaWYgKHJpLT5nZXRTZW5zb3JUeXBlKCkgPT0gU1RfQkFZRVIpIHsKLSAgICAg ICAgIGlmIChyYXcuYmF5ZXJzZW5zb3IubWV0aG9kID09IFJBV1BhcmFtczo6QmF5ZXJTZW5zb3I6 OmdldE1ldGhvZFN0cmluZyhSQVdQYXJhbXM6OkJheWVyU2Vuc29yOjpNZXRob2Q6OkhQSEQpKSB7 Ci0gICAgICAgICAgICAgaHBoZF9kZW1vc2FpYygpOwotZGlmZiAtLWdpdCBhL3J0ZW5naW5lL3J0 YXBwLmNjIGIvcnRlbmdpbmUvcnRhcHAuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAw MDAwMDAwMDAuLjcwMzU4YWNjOQotLS0tIC9kZXYvbnVsbAotKysrIGIvcnRlbmdpbmUvcnRhcHAu Y2MKLUBAIC0wLDAgKzEsNTcgQEAKLSsvKgotKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSYXdU aGVyYXBlZS4KLSsgKgotKyAqICBDb3B5cmlnaHQgKGMpIDIwMjUgRGFuaWVsIEdhbyA8ZGFuaWVs Lmdhby53b3JrQGdtYWlsLmNvbT4KLSsgKgotKyAqICBSYXdUaGVyYXBlZSBpcyBmcmVlIHNvZnR3 YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rICogIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5Ci0rICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCi0rICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCi0rICoKLSsgKiAgUmF3VGhlcmFwZWUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgKiAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAqICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyAqCi0rICogIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl Ci0rICogIGFsb25nIHdpdGggUmF3VGhlcmFwZWUuICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgotKyAqLwotKwotKyNpbmNsdWRlICJydGFwcC5oIgotKwotKyNp bmNsdWRlICJydGVuZ2luZS9wcm9jcGFyYW1zLmgiCi0rI2luY2x1ZGUgInJ0ZW5naW5lL3NldHRp bmdzLmgiCi0rI2luY2x1ZGUgInJ0Z3VpL29wdGlvbnMuaCIKLSsjaW5jbHVkZSAicnRndWkvdmVy c2lvbi5oIgotKwotK3VzaW5nIG5hbWVzcGFjZSBydGVuZ2luZTsKLSsKLStjb25zdCBHbGliOjp1 c3RyaW5nIEFwcDo6VkVSU0lPTiA9IFJUVkVSU0lPTjsKLStjb25zdCBHbGliOjp1c3RyaW5nIEFw cDo6UEFSQU1fRklMRV9FWFRFTlNJT04gPSAiLnBwMyI7Ci0rCi0rQXBwJiBBcHA6OmdldCgpCi0r ewotKyAgICBzdGF0aWMgQXBwIGluc3Q7Ci0rICAgIHJldHVybiBpbnN0OwotK30KLSsKLStBcHA6 OkFwcCgpCi0rICAgIDogbV9vcHRpb25zKG5ldyBPcHRpb25zKCkpCi0rICAgICwgbV9zaW1wbGVf ZWRpdG9yKGZhbHNlKQotKyAgICAsIG1fZ2ltcF9wbHVnaW4oZmFsc2UpCi0rICAgICwgbV9yZW1v dGUoZmFsc2UpCi0rewotK30KLSsKLStjb25zdCBydGVuZ2luZTo6U2V0dGluZ3MmIEFwcDo6c2V0 dGluZ3MoKSBjb25zdAotK3sKLSsgICAgcmV0dXJuIG1fb3B0aW9ucy0+cnRTZXR0aW5nczsKLSt9 Ci0rCi0rY29uc3QgcnRlbmdpbmU6OnByb2NwYXJhbXM6OkNvbG9yTWFuYWdlbWVudFBhcmFtcyYg QXBwOjpmYWxsYmFja0NvbG9yQ21wKCkgY29uc3QKLSt7Ci0rICAgIC8vIENvbnN0cnVjdG9yIGFj Y2Vzc2VzIEFwcDo6Z2V0KCkub3B0aW9ucygpLCBzbyB3ZSBjYW4ndCBpbml0aWFsaXplIHRoaXMK LSsgICAgLy8gaW4gdGhlIGNvbnN0cnVjdG9yIG9mIEFwcC4gSXQgd291bGQgYmUgYSByZWN1cnNp dmUgaW5pdC4KLSsgICAgc3RhdGljIHJ0ZW5naW5lOjpwcm9jcGFyYW1zOjpDb2xvck1hbmFnZW1l bnRQYXJhbXMgY21wOwotKyAgICByZXR1cm4gY21wOwotK30KLWRpZmYgLS1naXQgYS9ydGVuZ2lu ZS9ydGFwcC5oIGIvcnRlbmdpbmUvcnRhcHAuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4 IDAwMDAwMDAwMC4uMmRjMGJhNmZiCi0tLS0gL2Rldi9udWxsCi0rKysgYi9ydGVuZ2luZS9ydGFw cC5oCi1AQCAtMCwwICsxLDgxIEBACi0rLyoKLSsgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmF3 VGhlcmFwZWUuCi0rICoKLSsgKiAgQ29weXJpZ2h0IChjKSAyMDI1IERhbmllbCBHYW8gPGRhbmll bC5nYW8ud29ya0BnbWFpbC5jb20+Ci0rICoKLSsgKiAgUmF3VGhlcmFwZWUgaXMgZnJlZSBzb2Z0 d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAqICBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQotKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgotKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgotKyAqCi0rICogIFJhd1RoZXJhcGVlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICogIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsgKiAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsgKgotKyAqICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQotKyAqICBhbG9uZyB3aXRoIFJhd1RoZXJhcGVlLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KLSsgKi8KLSsKLSsjcHJhZ21hIG9uY2UKLSsKLSsjaW5jbHVk ZSA8Z2xpYm1tL3VzdHJpbmcuaD4KLSsKLSsjaW5jbHVkZSA8bWVtb3J5PgotKwotK2NsYXNzIE9w dGlvbnM7Ci0rCi0rbmFtZXNwYWNlIHJ0ZW5naW5lIHsKLStjbGFzcyBTZXR0aW5nczsKLSsKLStu YW1lc3BhY2UgcHJvY3BhcmFtcyB7Ci0rY2xhc3MgQ29sb3JNYW5hZ2VtZW50UGFyYW1zOwotK30g Ly8gbmFtZXNwYWNlIHByb2NwYXJhbXMKLSsKLSt9IC8vIG5hbWVzcGFjZSBydGVuZ2luZQotKwot K2NsYXNzIEFwcCB7Ci0rcHVibGljOgotKyAgICBzdGF0aWMgY29uc3QgR2xpYjo6dXN0cmluZyBW RVJTSU9OOwotKyAgICBzdGF0aWMgY29uc3QgR2xpYjo6dXN0cmluZyBQQVJBTV9GSUxFX0VYVEVO U0lPTjsKLSsKLSsgICAgc3RhdGljIEFwcCYgZ2V0KCk7Ci0rCi0rICAgIGNvbnN0IE9wdGlvbnMm IG9wdGlvbnMoKSBjb25zdCB7IHJldHVybiAqbV9vcHRpb25zOyB9Ci0rICAgIE9wdGlvbnMmIG11 dF9vcHRpb25zKCkgeyByZXR1cm4gKm1fb3B0aW9uczsgfQotKyAgICBjb25zdCBydGVuZ2luZTo6 U2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3Q7Ci0rCi0rICAgIGNvbnN0IHJ0ZW5naW5lOjpwcm9j cGFyYW1zOjpDb2xvck1hbmFnZW1lbnRQYXJhbXMmIGZhbGxiYWNrQ29sb3JDbXAoKSBjb25zdDsK LSsKLSsgICAgY29uc3QgR2xpYjo6dXN0cmluZyYgYXJndjAoKSBjb25zdCB7IHJldHVybiBtX2Fy Z3YwOyB9Ci0rICAgIGNvbnN0IEdsaWI6OnVzdHJpbmcmIGFyZ3YxKCkgY29uc3QgeyByZXR1cm4g bV9hcmd2MTsgfQotKyAgICBjb25zdCBHbGliOjp1c3RyaW5nJiBjcmVkaXRzUGF0aCgpIGNvbnN0 IHsgcmV0dXJuIG1fY3JlZGl0c19wYXRoOyB9Ci0rICAgIGNvbnN0IEdsaWI6OnVzdHJpbmcmIGxp Y2Vuc2VQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9saWNlbnNlX3BhdGg7IH0KLSsKLSsgICAgYm9v bCBpc1NpbXBsZUVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2ltcGxlX2VkaXRvcjsgfQotKyAg ICBib29sIGlzR2ltcFBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZ2ltcF9wbHVnaW47IH0KLSsg ICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVtb3RlOyB9Ci0rCi0rICAgIHZv aWQgc2V0QXJndjAoY29uc3QgR2xpYjo6dXN0cmluZyYgdmFsKSB7IG1fYXJndjAgPSB2YWw7IH0K LSsgICAgdm9pZCBzZXRBcmd2MShjb25zdCBHbGliOjp1c3RyaW5nJiB2YWwpIHsgbV9hcmd2MSA9 IHZhbDsgfQotKyAgICB2b2lkIHNldENyZWRpdHNQYXRoKGNvbnN0IEdsaWI6OnVzdHJpbmcmIHBh dGgpIHsgbV9jcmVkaXRzX3BhdGggPSBwYXRoOyB9Ci0rICAgIHZvaWQgc2V0TGljZW5zZVBhdGgo Y29uc3QgR2xpYjo6dXN0cmluZyYgcGF0aCkgeyBtX2xpY2Vuc2VfcGF0aCA9IHBhdGg7IH0KLSsK LSsgICAgdm9pZCBzZXRJc1NpbXBsZUVkaXRvcihib29sIHZhbCkgeyBtX3NpbXBsZV9lZGl0b3Ig PSB2YWw7IH0KLSsgICAgdm9pZCBzZXRJc0dpbXBQbHVnaW4oYm9vbCB2YWwpIHsgbV9naW1wX3Bs dWdpbiA9IHZhbDsgfQotKyAgICB2b2lkIHNldElzUmVtb3RlKGJvb2wgdmFsKSB7IG1fcmVtb3Rl ID0gdmFsOyB9Ci0rCi0rcHJpdmF0ZToKLSsgICAgQXBwKCk7Ci0rCi0rICAgIEdsaWI6OnVzdHJp bmcgbV9hcmd2MDsKLSsgICAgR2xpYjo6dXN0cmluZyBtX2FyZ3YxOwotKyAgICBHbGliOjp1c3Ry aW5nIG1fY3JlZGl0c19wYXRoOwotKyAgICBHbGliOjp1c3RyaW5nIG1fbGljZW5zZV9wYXRoOwot KwotKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T3B0aW9ucz4gbV9vcHRpb25zOwotKwotKyAgICBib29s IG1fc2ltcGxlX2VkaXRvcjsKLSsgICAgYm9vbCBtX2dpbXBfcGx1Z2luOwotKyAgICBib29sIG1f cmVtb3RlOwotK307Ci1kaWZmIC0tZ2l0IGEvcnRlbmdpbmUvc2ltcGxlcHJvY2Vzcy5jYyBiL3J0 ZW5naW5lL3NpbXBsZXByb2Nlc3MuY2MKLWluZGV4IGM5MzA3ZDYyMy4uMDRlZWE3NzM1IDEwMDY0 NAotLS0tIGEvcnRlbmdpbmUvc2ltcGxlcHJvY2Vzcy5jYwotKysrIGIvcnRlbmdpbmUvc2ltcGxl cHJvY2Vzcy5jYwotQEAgLTE0NTcsNiArMTQ1Nyw3IEBAIHByaXZhdGU6Ci0gCi0gICAgICAgICBM VVR1IGhpc3RUb25lQ3VydmU7Ci0gCi0rICAgICAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBw OjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgICAgICBpcGYucmdiUHJvYyhiYXNlSW1nLCBsYWJWaWV3 LCBudWxscHRyLCBjdXJ2ZTEsIGN1cnZlMiwgY3VydmUsIHBhcmFtcy50b25lQ3VydmUuc2F0dXJh dGlvbiwgckN1cnZlLCBnQ3VydmUsIGJDdXJ2ZSwgc2F0TGltaXQsIHNhdExpbWl0T3BhY2l0eSwg Y3RDb2xvckN1cnZlLCBjdE9wYWNpdHlDdXJ2ZSwgb3BhdXRpbGksIGNsVG9uaW5nY3VydmUsIGNs MlRvbmluZ2N1cnZlLCBjdXN0b21Ub25lQ3VydmUxLCBjdXN0b21Ub25lQ3VydmUyLCBjdXN0b21U b25lQ3VydmVidzEsIGN1c3RvbVRvbmVDdXJ2ZWJ3MiwgcnJtLCBnZ20sIGJibSwgYXV0b3IsIGF1 dG9nLCBhdXRvYiwgZXhwY29tcCwgaGxjb21wciwgaGxjb21wcnRocmVzaCwgZGNwUHJvZiwgYXMs IGhpc3RUb25lQ3VydmUsIG9wdGlvbnMuY2h1bmtTaXplUkdCLCBvcHRpb25zLm1lYXN1cmUpOwot IAotICAgICAgICAgaWYgKHNldHRpbmdzLT52ZXJib3NlKSB7Ci1kaWZmIC0tZ2l0IGEvcnRndWkv YWRqdXN0ZXIuY2MgYi9ydGd1aS9hZGp1c3Rlci5jYwotaW5kZXggYjEyNmQ5MWQ5Li4xZDdiYzQy ZTQgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9hZGp1c3Rlci5jYwotKysrIGIvcnRndWkvYWRqdXN0ZXIu Y2MKLUBAIC01NSw4ICs1NSw4IEBAIEFkanVzdGVyOjpBZGp1c3RlcigKLSAgICAgaW1hZ2VJY29u MihpbWdJY29uMiksCi0gICAgIGF1dG9tYXRpYyhudWxscHRyKSwKLSAgICAgYWRqdXN0ZXJMaXN0 ZW5lcihudWxscHRyKSwKLS0gICAgc3BpbkNoYW5nZShvcHRpb25zLmFkanVzdGVyTWluRGVsYXks IG9wdGlvbnMuYWRqdXN0ZXJNYXhEZWxheSksCi0tICAgIHNsaWRlckNoYW5nZShvcHRpb25zLmFk anVzdGVyTWluRGVsYXksIG9wdGlvbnMuYWRqdXN0ZXJNYXhEZWxheSksCi0rICAgIHNwaW5DaGFu Z2UoQXBwOjpnZXQoKS5vcHRpb25zKCkuYWRqdXN0ZXJNaW5EZWxheSwgQXBwOjpnZXQoKS5vcHRp b25zKCkuYWRqdXN0ZXJNYXhEZWxheSksCi0rICAgIHNsaWRlckNoYW5nZShBcHA6OmdldCgpLm9w dGlvbnMoKS5hZGp1c3Rlck1pbkRlbGF5LCBBcHA6OmdldCgpLm9wdGlvbnMoKS5hZGp1c3Rlck1h eERlbGF5KSwKLSAgICAgZWRpdGVkQ2hlY2tCb3gobnVsbHB0ciksCi0gICAgIGFmdGVyUmVzZXQo ZmFsc2UpLAotICAgICBibG9ja2VkKGZhbHNlKSwKLWRpZmYgLS1naXQgYS9ydGd1aS9iYXRjaHF1 ZXVlLmNjIGIvcnRndWkvYmF0Y2hxdWV1ZS5jYwotaW5kZXggYTYyZDE1MGYwLi4wMzk2YmQwN2Eg MTAwNjQ0Ci0tLS0gYS9ydGd1aS9iYXRjaHF1ZXVlLmNjCi0rKysgYi9ydGd1aS9iYXRjaHF1ZXVl LmNjCi1AQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgICAvLyBsb2NhbCBoZWxwZXIgZnVuY3Rp b25zCi0gICAgIC8vIEZvciBOLCByZXR1cm4gTnRoIGluZGV4IGZyb20gdGhlIGVuZCwgYW5kIGZv ciAtTiByZXR1cm4gdGhlIE50aCBpbmRleCBmcm9tIHRoZSBzdGFydC4KLSAgICAgLy8gTiBpcyBh IGRpZ2l0IDEgdGhyb3VnaCA5LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgbm90IHJhbmdlLWNoZWNr ZWQsIHNvIGl0IG1heSBiZSA+PW51bVBhdGhFbGVtZW50cy4KLSAgICAgLy8gb3IgbmVnYXRpdmUu IFRoZSBjYWxsZXIgcGVyZm9ybXMgYW55IHJlcXVpcmVkIHJhbmdlLWNoZWNraW5nLgotLSAgICBp bnQgZGVjb2RlUGF0aEluZGV4KHVuc2lnbmVkIGludCYgaXgsIEdsaWI6OnVzdHJpbmcmIHRlbXBs YXRlVGV4dCwgc2l6ZV90IG51bVBhdGhFbGVtZW50cykKLSsgICAgaW50IGRlY29kZVBhdGhJbmRl eCh1bnNpZ25lZCBpbnQmIGl4LCBjb25zdCBHbGliOjp1c3RyaW5nJiB0ZW1wbGF0ZVRleHQsIHNp emVfdCBudW1QYXRoRWxlbWVudHMpCi0gICAgIHsKLSAgICAgICAgIGludCBwYXRoSW5kZXggPSBz dGF0aWNfY2FzdDxpbnQ+KG51bVBhdGhFbGVtZW50cyk7ICAgIC8vIGEgdmFsdWUgdGhhdCBtZWFu cyBpbnB1dCB3YXMgaW52YWxpZAotICAgICAgICAgYm9vbCBmcm9tU3RhcnQgPSBmYWxzZTsKLUBA IC0xOTYsNyArMTk2LDcgQEAgdm9pZCBCYXRjaFF1ZXVlOjpyZXNpemVMb2FkZWRRdWV1ZSgpCi0g Ly8gbGVhZGluZyB0byB2ZXJ5IGxvbmcgd2FpdGluZyB3aGVuIGFkZGluZyBtb3JlIGltYWdlcwot IGludCBCYXRjaFF1ZXVlOjpjYWxjTWF4VGh1bWJuYWlsSGVpZ2h0KCkKLSB7Ci0tICAgIHJldHVy biBzdGQ6Om1pbihvcHRpb25zLm1heFRodW1ibmFpbEhlaWdodCwgMjAwKTsKLSsgICAgcmV0dXJu IHN0ZDo6bWluKEFwcDo6Z2V0KCkub3B0aW9ucygpLm1heFRodW1ibmFpbEhlaWdodCwgMjAwKTsK LSB9Ci0gCi0gLy8gRnVuY3Rpb24gZm9yIHZpcnR1YWwgb3ZlcnJpZGUgaW4gdGh1bWJicm93c2Vy IGJhc2UKLUBAIC0yMDcsMTMgKzIwNywxMyBAQCBpbnQgQmF0Y2hRdWV1ZTo6Z2V0TWF4VGh1bWJu YWlsSGVpZ2h0KCkgY29uc3QKLSAKLSB2b2lkIEJhdGNoUXVldWU6OnNhdmVUaHVtYm5haWxIZWln aHQgKGludCBoZWlnaHQpCi0gewotLSAgICBvcHRpb25zLnRodW1iU2l6ZVF1ZXVlID0gaGVpZ2h0 OwotKyAgICBBcHA6OmdldCgpLm11dF9vcHRpb25zKCkudGh1bWJTaXplUXVldWUgPSBoZWlnaHQ7 Ci0gfQotIAotIGludCBCYXRjaFF1ZXVlOjpnZXRUaHVtYm5haWxIZWlnaHQgKCkKLSB7Ci0gICAg IC8vIFRoZSB1c2VyIGNvdWxkIGhhdmUgbWFudWFsbHkgZm9yY2VkIHRoZSBvcHRpb24gdG8gYSB0 b28gYmlnIHZhbHVlCi0tICAgIHJldHVybiBzdGQ6Om1heChzdGQ6Om1pbihvcHRpb25zLnRodW1i U2l6ZVF1ZXVlLCAyMDApLCAxMCk7Ci0rICAgIHJldHVybiBzdGQ6Om1heChzdGQ6Om1pbihBcHA6 OmdldCgpLm9wdGlvbnMoKS50aHVtYlNpemVRdWV1ZSwgMjAwKSwgMTApOwotIH0KLSAKLSB2b2lk IEJhdGNoUXVldWU6OnJpZ2h0Q2xpY2tlZCAoKQotQEAgLTI5Nyw3ICsyOTcsNyBAQCB2b2lkIEJh dGNoUXVldWU6OmFkZEVudHJpZXMgKGNvbnN0IHN0ZDo6dmVjdG9yPEJhdGNoUXVldWVFbnRyeSo+ JiBlbnRyaWVzLCBib29sCi0gCi0gYm9vbCBCYXRjaFF1ZXVlOjpzYXZlQmF0Y2hRdWV1ZSAoKQot IHsKLS0gICAgY29uc3QgYXV0byBmaWxlTmFtZSA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lIChvcHRp b25zLnJ0ZGlyLCAiYmF0Y2giLCAicXVldWUuY3N2Iik7Ci0rICAgIGNvbnN0IGF1dG8gZmlsZU5h bWUgPSBHbGliOjpidWlsZF9maWxlbmFtZSAoQXBwOjpnZXQoKS5vcHRpb25zKCkucnRkaXIsICJi YXRjaCIsICJxdWV1ZS5jc3YiKTsKLSAKLSAgICAgc3RkOjpvZnN0cmVhbSBmaWxlIChmaWxlTmFt ZSwgc3RkOjppb3M6OmJpbmFyeSB8IHN0ZDo6aW9zOjp0cnVuYyk7Ci0gCi1AQCAtMzQzLDYgKzM0 Myw3IEBAIGJvb2wgQmF0Y2hRdWV1ZTo6c2F2ZUJhdGNoUXVldWUgKCkKLSAKLSBib29sIEJhdGNo UXVldWU6OmxvYWRCYXRjaFF1ZXVlICgpCi0gewotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0g QXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGNvbnN0IGF1dG8gZmlsZU5hbWUgPSBHbGliOjpi dWlsZF9maWxlbmFtZSAob3B0aW9ucy5ydGRpciwgImJhdGNoIiwgInF1ZXVlLmNzdiIpOwotIAot ICAgICBzdGQ6Omlmc3RyZWFtIGZpbGUgKGZpbGVOYW1lLCBzdGQ6Omlvczo6YmluYXJ5KTsKLUBA IC00NzEsMTIgKzQ3MiwxMiBAQCBHbGliOjp1c3RyaW5nIEJhdGNoUXVldWU6OmdldFRlbXBGaWxl bmFtZUZvclBhcmFtcyggY29uc3QgR2xpYjo6dXN0cmluZyAmZmlsZW5hbQotICAgICB0aW1laW5m byA9IGxvY2FsdGltZSAoICZyYXd0aW1lICk7Ci0gICAgIHN0cmZ0aW1lIChzdHJpbmdUaW1lc3Rh bXAsIHNpemVvZihzdHJpbmdUaW1lc3RhbXApLCAiXyVZJW0lZCVIJU0lU18iLCB0aW1laW5mbyk7 Ci0gICAgIEdsaWI6OnVzdHJpbmcgc2F2ZWRQYXJhbVBhdGg7Ci0tICAgIHNhdmVkUGFyYW1QYXRo ID0gb3B0aW9ucy5ydGRpciArICIvYmF0Y2gvIjsKLSsgICAgc2F2ZWRQYXJhbVBhdGggPSBBcHA6 OmdldCgpLm9wdGlvbnMoKS5ydGRpciArICIvYmF0Y2gvIjsKLSAgICAgZ19ta2Rpcl93aXRoX3Bh cmVudHMgKHNhdmVkUGFyYW1QYXRoLmNfc3RyICgpLCAwNzU1KTsKLSAgICAgc2F2ZWRQYXJhbVBh dGggKz0gR2xpYjo6cGF0aF9nZXRfYmFzZW5hbWUgKGZpbGVuYW1lKTsKLSAgICAgc2F2ZWRQYXJh bVBhdGggKz0gc3RyaW5nVGltZXN0YW1wOwotICAgICBzYXZlZFBhcmFtUGF0aCArPSBtc2Vjb25k czsKLS0gICAgc2F2ZWRQYXJhbVBhdGggKz0gcGFyYW1GaWxlRXh0ZW5zaW9uOwotKyAgICBzYXZl ZFBhcmFtUGF0aCArPSBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OOwotICAgICByZXR1cm4gc2F2 ZWRQYXJhbVBhdGg7Ci0gfQotIAotQEAgLTY0Myw2ICs2NDQsNyBAQCB2b2lkIEJhdGNoUXVldWU6 OnVwZGF0ZURlc3RpbmF0aW9uUGF0aFByZXZpZXcoKQotICAgICBpZiAoIXNlbGVjdGVkLmVtcHR5 KCkpIHsKLSAgICAgICAgIGF1dG8mIGVudHJ5ID0gKnNlbGVjdGVkLmF0KDApOwotICAgICAgICAg aW50IHNlcXVlbmNlID0gMDsgICAvLyBTZXF1ZW5jZSBkdXJpbmcgc3Vic2VxdWVudCBxdWV1ZSBw cm9jZXNzaW5nIGNhbid0IGJlIGRldGVybWluZWQgaGVyZQotKyAgICAgICAgY29uc3QgYXV0byYg b3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICAgICAgR2xpYjo6dXN0cmluZyBi YXNlRGVzdGluYXRpb24gPSBjYWxjQXV0b0ZpbGVOYW1lQmFzZShlbnRyeS5maWxlbmFtZSwgc2Vx dWVuY2UpOwotICAgICAgICAgR2xpYjo6dXN0cmluZyBkZXN0aW5hdGlvbiA9IEdsaWI6OnVzdHJp bmc6OmNvbXBvc2UgKCIlMS4lMiIsIGJhc2VEZXN0aW5hdGlvbiwgb3B0aW9ucy5zYXZlRm9ybWF0 QmF0Y2guZm9ybWF0KTsKLSAKLUBAIC03NTgsNiArNzYwLDcgQEAgcnRlbmdpbmU6OlByb2Nlc3Np bmdKb2IqIEJhdGNoUXVldWU6OmltYWdlUmVhZHkocnRlbmdpbmU6OklJbWFnZWZsb2F0KiBpbWcp Ci0gICAgIEdsaWI6OnVzdHJpbmcgZm5hbWU7Ci0gICAgIFNhdmVGb3JtYXQgc2F2ZUZvcm1hdDsK LSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAg ICBpZiAocHJvY2Vzc2luZy0+b3V0RmlsZU5hbWUuZW1wdHkoKSkgeyAvLyBhdXRvIGZpbGUgbmFt ZQotICAgICAgICAgR2xpYjo6dXN0cmluZyBzID0gY2FsY0F1dG9GaWxlTmFtZUJhc2UgKHByb2Nl c3NpbmctPmZpbGVuYW1lLCBwcm9jZXNzaW5nLT5zZXF1ZW5jZSk7Ci0gICAgICAgICBzYXZlRm9y bWF0ID0gb3B0aW9ucy5zYXZlRm9ybWF0QmF0Y2g7Ci1AQCAtODAzLDggKzgwNiw4IEBAIHJ0ZW5n aW5lOjpQcm9jZXNzaW5nSm9iKiBCYXRjaFF1ZXVlOjppbWFnZVJlYWR5KHJ0ZW5naW5lOjpJSW1h Z2VmbG9hdCogaW1nKQotICAgICAgICAgaWYgKHNhdmVGb3JtYXQuc2F2ZVBhcmFtcykgewotICAg ICAgICAgICAgIC8vIFdlIGtlZXAgdGhlIGV4dGVuc2lvbiB0byBhdm9pZCBvdmVyd3JpdGluZyB0 aGUgcHJvZmlsZSB3aGVuIHdlIGhhdmUKLSAgICAgICAgICAgICAvLyB0aGUgc2FtZSBvdXRwdXQg ZmlsZW5hbWUgd2l0aCBkaWZmZXJlbnQgZXh0ZW5zaW9uCi0tICAgICAgICAgICAgLy9wcm9jZXNz aW5nLT5wYXJhbXMuc2F2ZSAocmVtb3ZlRXh0ZW5zaW9uKGZuYW1lKSArIHBhcmFtRmlsZUV4dGVu c2lvbik7Ci0tICAgICAgICAgICAgcHJvY2Vzc2luZy0+cGFyYW1zLT5zYXZlIChmbmFtZSArICIu b3V0IiArIHBhcmFtRmlsZUV4dGVuc2lvbik7Ci0rICAgICAgICAgICAgLy9wcm9jZXNzaW5nLT5w YXJhbXMuc2F2ZSAocmVtb3ZlRXh0ZW5zaW9uKGZuYW1lKSArIEFwcDo6UEFSQU1fRklMRV9FWFRF TlNJT04pOwotKyAgICAgICAgICAgIHByb2Nlc3NpbmctPnBhcmFtcy0+c2F2ZSAoZm5hbWUgKyAi Lm91dCIgKyBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OKTsKLSAgICAgICAgIH0KLSAKLSAgICAg ICAgIGlmIChwcm9jZXNzaW5nLT50aHVtYm5haWwpIHsKLUBAIC05MzIsNiArOTM1LDggQEAgR2xp Yjo6dXN0cmluZyBCYXRjaFF1ZXVlOjpjYWxjQXV0b0ZpbGVOYW1lQmFzZSAoY29uc3QgR2xpYjo6 dXN0cmluZyYgb3JpZ0ZpbGVOYW0KLSAgICAgICAgIGZpbGVuYW1lID0gb3JpZ0ZpbGVOYW1lW2td ICsgZmlsZW5hbWU7Ci0gICAgIH0KLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6 Z2V0KCkub3B0aW9ucygpOwotKwotIC8vICAgIHByaW50ZiAoIiVkLCB8JXN8XG4iLCBleHRwb3Ms IGZpbGVuYW1lLmNfc3RyKCkpOwotIAotICAgICAvLyBjb25zdHJ1Y3RpbmcgZnVsbCBvdXRwdXQg cGF0aAotQEAgLTk5NCw3ICs5OTksNyBAQCBHbGliOjp1c3RyaW5nIEJhdGNoUXVldWU6OmNhbGNB dXRvRmlsZU5hbWVCYXNlIChjb25zdCBHbGliOjp1c3RyaW5nJiBvcmlnRmlsZU5hbQotICAgICAg ICAgICAgICAgICAgICAgY2hhciByYW5rOwotICAgICAgICAgICAgICAgICAgICAgcnRlbmdpbmU6 OnByb2NwYXJhbXM6OlByb2NQYXJhbXMgcHBhcmFtczsKLSAKLS0gICAgICAgICAgICAgICAgICAg IGlmKCBwcGFyYW1zLmxvYWQob3JpZ0ZpbGVOYW1lICsgcGFyYW1GaWxlRXh0ZW5zaW9uKSA9PSAw ICkgewotKyAgICAgICAgICAgICAgICAgICAgaWYoIHBwYXJhbXMubG9hZChvcmlnRmlsZU5hbWUg KyBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OKSA9PSAwICkgewotICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICghcHBhcmFtcy5pblRyYXNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJhbmsgPSBwcGFyYW1zLnJhbmsgKyAnMCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKLWRpZmYgLS1naXQgYS9ydGd1aS9iYXRjaHF1ZXVlZW50cnkuY2MgYi9ydGd1aS9i YXRjaHF1ZXVlZW50cnkuY2MKLWluZGV4IDgxZjcxNzZiMy4uMzA1NzQwN2IzIDEwMDY0NAotLS0t IGEvcnRndWkvYmF0Y2hxdWV1ZWVudHJ5LmNjCi0rKysgYi9ydGd1aS9iYXRjaHF1ZXVlZW50cnku Y2MKLUBAIC0xMDgsNiArMTA4LDcgQEAgdm9pZCBCYXRjaFF1ZXVlRW50cnk6OnJlZnJlc2hUaHVt Ym5haWxJbWFnZSAoKQotIHZvaWQgQmF0Y2hRdWV1ZUVudHJ5OjpjYWxjVGh1bWJuYWlsU2l6ZSAo KQotIHsKLSAgICAgcHJldyA9IHByZWggKiBvcmlncHcgLyBvcmlncGg7Ci0rICAgIGNvbnN0IGF1 dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaWYgKHByZXcgPiBvcHRp b25zLm1heFRodW1ibmFpbFdpZHRoKSB7Ci0gICAgICAgICBjb25zdCBmbG9hdCBzID0gc3RhdGlj X2Nhc3Q8ZmxvYXQ+KG9wdGlvbnMubWF4VGh1bWJuYWlsV2lkdGgpIC8gcHJldzsKLSAgICAgICAg IHByZXcgPSBvcHRpb25zLm1heFRodW1ibmFpbFdpZHRoOwotZGlmZiAtLWdpdCBhL3J0Z3VpL2Jh dGNocXVldWVwYW5lbC5jYyBiL3J0Z3VpL2JhdGNocXVldWVwYW5lbC5jYwotaW5kZXggYjQ3Nzc5 MGZjLi41MjlmMDNmYTEgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9iYXRjaHF1ZXVlcGFuZWwuY2MKLSsr KyBiL3J0Z3VpL2JhdGNocXVldWVwYW5lbC5jYwotQEAgLTQyLDYgKzQyLDggQEAgc3RhdGljIEds aWI6OnVzdHJpbmcgbWFrZUZvbGRlckxhYmVsKEdsaWI6OnVzdHJpbmcgcGF0aCkKLSAKLSBCYXRj aFF1ZXVlUGFuZWw6OkJhdGNoUXVldWVQYW5lbCAoRmlsZUNhdGFsb2cqIGFGaWxlQ2F0YWxvZykg OiBwYXJlbnQobnVsbHB0cikKLSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6Omdl dCgpLm9wdGlvbnMoKTsKLSsKLSAgICAgc2V0X29yaWVudGF0aW9uKEd0azo6T1JJRU5UQVRJT05f VkVSVElDQUwpOwotICAgICBiYXRjaFF1ZXVlID0gR3RrOjptYW5hZ2UoIG5ldyBCYXRjaFF1ZXVl KGFGaWxlQ2F0YWxvZykgKTsKLSAKLUBAIC0yMTUsNyArMjE3LDcgQEAgdm9pZCBCYXRjaFF1ZXVl UGFuZWw6OmluaXQgKFJUV2luZG93ICpwYXJlbnQpCi0gewotICAgICB0aGlzLT5wYXJlbnQgPSBw YXJlbnQ7Ci0gCi0tICAgIHNhdmVGb3JtYXRQYW5lbC0+aW5pdCAob3B0aW9ucy5zYXZlRm9ybWF0 QmF0Y2gpOwotKyAgICBzYXZlRm9ybWF0UGFuZWwtPmluaXQgKEFwcDo6Z2V0KCkub3B0aW9ucygp LnNhdmVGb3JtYXRCYXRjaCk7Ci0gfQotIAotIC8vIGl0IGlzIGV4cGVjdGVkIHRvIGhhdmUgYSBu b24gbnVsbCBmb3JjZU9yaWVudGF0aW9uIHZhbHVlIG9uIFByZWZlcmVuY2VzIHVwZGF0ZSBvbmx5 LiBJbiB0aGlzIGNhc2UsIHFzaXplIGlzIGlnbm9yZWQgYW5kIGNvbXB1dGVkIGF1dG9tYXRpY2Fs bHkKLUBAIC0yMjgsNyArMjMwLDcgQEAgdm9pZCBCYXRjaFF1ZXVlUGFuZWw6OnVwZGF0ZVRhYiAo aW50IHFzaXplLCBpbnQgZm9yY2VPcmllbnRhdGlvbikKLSAgICAgfQotIAotICAgICBHdGs6Okdy aWQqIGdyaWQgPSBHdGs6Om1hbmFnZSAobmV3IEd0azo6R3JpZCAoKSk7Ci0tICAgIGlmICgoZm9y Y2VPcmllbnRhdGlvbiA9PSAwICYmIG9wdGlvbnMubWFpbk5CVmVydGljYWwpIHx8IChmb3JjZU9y aWVudGF0aW9uID09IDIpKSB7Ci0rICAgIGlmICgoZm9yY2VPcmllbnRhdGlvbiA9PSAwICYmIEFw cDo6Z2V0KCkub3B0aW9ucygpLm1haW5OQlZlcnRpY2FsKSB8fCAoZm9yY2VPcmllbnRhdGlvbiA9 PSAyKSkgewotICAgICAgICAgR3RrOjpMYWJlbCogbDsKLSAKLSAgICAgICAgIGlmKCFxc2l6ZSAp IHsKLUBAIC0yNzksNyArMjgxLDcgQEAgdm9pZCBCYXRjaFF1ZXVlUGFuZWw6OnF1ZXVlU2l6ZUNo YW5nZWQoaW50IHFzaXplLCBib29sIHF1ZXVlUnVubmluZywgYm9vbCBxdWV1ZUUKLSAgICAgICAg IC8vIFRoZXJlIHdhcyB3b3JrLCBidXQgaXQgaXMgYWxsIGRvbmUgbm93LgotICAgICAgICAgcXVl dWVTaG91bGRSdW4gPSBmYWxzZTsKLSAKLS0gICAgICAgIFNvdW5kTWFuYWdlcjo6cGxheVNvdW5k QXN5bmMob3B0aW9ucy5zbmRCYXRjaFF1ZXVlRG9uZSk7Ci0rICAgICAgICBTb3VuZE1hbmFnZXI6 OnBsYXlTb3VuZEFzeW5jKEFwcDo6Z2V0KCkub3B0aW9ucygpLnNuZEJhdGNoUXVldWVEb25lKTsK LSAgICAgfQotIAotICAgICBpZiAocXVldWVFcnJvcikgewotQEAgLTM1Myw2ICszNTUsOCBAQCB2 b2lkIEJhdGNoUXVldWVQYW5lbDo6dGVtcGxhdGVIZWxwQnV0dG9uVG9nZ2xlZCgpCi0gCi0gdm9p ZCBCYXRjaFF1ZXVlUGFuZWw6OnBvcHVsYXRlVGVtcGxhdGVIZWxwQnVmZmVyKEdsaWI6OlJlZlB0 cjxHdGs6OlRleHRCdWZmZXI+IGJ1ZmZlcikKLSB7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6 OmdldCgpLm11dF9vcHRpb25zKCk7Ci0rCi0gICAgIGF1dG8gcG9zID0gYnVmZmVyLT5iZWdpbigp OwotICAgICBjb25zdCBhdXRvIGluc2VydFRvcGljSGVhZGluZyA9IFsmcG9zLCBidWZmZXJdKGNv bnN0IEdsaWI6OnVzdHJpbmcmIHRleHQpIHsKLSAgICAgICAgIHBvcyA9IGJ1ZmZlci0+aW5zZXJ0 X21hcmt1cChwb3MsIEdsaWI6OnVzdHJpbmc6OmZvcm1hdCgiXG5cbjx1PjxiPiIsIHRleHQsICI8 L2I+PC91PlxuIikpOwotQEAgLTQwMyw2ICs0MDcsNyBAQCB2b2lkIEJhdGNoUXVldWVQYW5lbDo6 cG9wdWxhdGVUZW1wbGF0ZUhlbHBCdWZmZXIoR2xpYjo6UmVmUHRyPEd0azo6VGV4dEJ1ZmZlcj4g YgotICAgICAvLyBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHBhdGguCi0gICAgIGNvbnN0IGF1 dG8gaW5zZXJ0UGF0aEV4YW1wbGVzID0gWyZidWZmZXIsICZwb3MsIHBhdGhFbGVtZW50Q291bnQs IGV4YW1wbGVGaWxlUGF0aF0oY2hhciBsZXR0ZXIsIGludCBvZmZzZXQxLCBpbnQgbXVsdDEsIGlu dCBvZmZzZXQyLCBpbnQgbXVsdDIpCi0gICAgIHsKLSsgICAgICAgIGF1dG8mIG9wdGlvbnMgPSBB cHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgICAgICBmb3IgKGludCBuPTA7IG48cGF0aEVs ZW1lbnRDb3VudDsgbisrKSB7Ci0gICAgICAgICAgICAgYXV0byBwYXRoMSA9IEdsaWI6OnVzdHJp bmc6OmZvcm1hdCgiJSIsIGxldHRlciwgb2Zmc2V0MStuKm11bHQxKTsKLSAgICAgICAgICAgICBh dXRvIHBhdGgyID0gR2xpYjo6dXN0cmluZzo6Zm9ybWF0KCIlIiwgbGV0dGVyLCBvZmZzZXQyK24q bXVsdDIpOwotQEAgLTQ2NSw2ICs0NzAsNyBAQCB2b2lkIEJhdGNoUXVldWVQYW5lbDo6YWRkQmF0 Y2hRdWV1ZUpvYnMoY29uc3Qgc3RkOjp2ZWN0b3I8QmF0Y2hRdWV1ZUVudHJ5Kj4mIGVudAotIAot IHZvaWQgQmF0Y2hRdWV1ZVBhbmVsOjpzYXZlT3B0aW9ucyAoKQotIHsKLSsgICAgYXV0byYgb3B0 aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAKLSAgICAgb3B0aW9ucy5zYXZlUGF0 aFRlbXBsYXRlICAgID0gb3V0ZGlyVGVtcGxhdGUtPmdldF90ZXh0KCk7Ci0gICAgIG9wdGlvbnMu c2F2ZVVzZVBhdGhUZW1wbGF0ZSA9IHVzZVRlbXBsYXRlLT5nZXRfYWN0aXZlKCk7Ci1AQCAtNTA2 LDYgKzUxMiw3IEBAIHZvaWQgQmF0Y2hRdWV1ZVBhbmVsOjpzZXREZXN0aW5hdGlvblByZXZpZXdU ZXh0KGNvbnN0IEdsaWI6OnVzdHJpbmcgJmRlc3RpbmF0aW9uCi0gCi0gdm9pZCBCYXRjaFF1ZXVl UGFuZWw6OnBhdGhGb2xkZXJCdXR0b25QcmVzc2VkICgpCi0gewotKyAgICBhdXRvJiBvcHRpb25z ID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotIAotICAgICBHdGs6OkZpbGVDaG9vc2VyRGlh bG9nIGZjIChnZXRUb3BsZXZlbFdpbmRvdyAodGhpcyksIE0oIlFVRVVFX0xPQ0FUSU9OX0ZPTERF UiIpLCBHdGs6OkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0VMRUNUX0ZPTERFUiApOwotICAgICBmYy5h ZGRfYnV0dG9uKCAiX0NhbmNlbCIsIEd0azo6UkVTUE9OU0VfQ0FOQ0VMKTsgLy8gU1RPQ0tJQ09O IFdBUyBUSEVSRQotQEAgLTUyNiwxMiArNTMzLDE0IEBAIHZvaWQgQmF0Y2hRdWV1ZVBhbmVsOjpw YXRoRm9sZGVyQnV0dG9uUHJlc3NlZCAoKQotIC8vIHNpbmNlIHRoZXNlIHNldHRpbmdzIGFyZSBz aGFyZWQgd2l0aCBlZGl0b3JwYW5lbCA6Ci0gdm9pZCBCYXRjaFF1ZXVlUGFuZWw6OnBhdGhGb2xk ZXJDaGFuZ2VkICgpCi0gewotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0 aW9ucygpOwotICAgICBvcHRpb25zLnNhdmVQYXRoRm9sZGVyID0gb3V0ZGlyRm9sZGVyLT5nZXRf ZmlsZW5hbWUoKTsKLSAgICAgYmF0Y2hRdWV1ZS0+dXBkYXRlRGVzdGluYXRpb25QYXRoUHJldmll dygpOwotIH0KLSAKLSB2b2lkIEJhdGNoUXVldWVQYW5lbDo6Zm9ybWF0Q2hhbmdlZChjb25zdCBH bGliOjp1c3RyaW5nJiBmb3JtYXQpCi0gewotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQo KS5tdXRfb3B0aW9ucygpOwotICAgICBvcHRpb25zLnNhdmVGb3JtYXRCYXRjaCA9IHNhdmVGb3Jt YXRQYW5lbC0+Z2V0Rm9ybWF0KCk7Ci0gICAgIGJhdGNoUXVldWUtPnVwZGF0ZURlc3RpbmF0aW9u UGF0aFByZXZpZXcoKTsKLSB9Ci1kaWZmIC0tZ2l0IGEvcnRndWkvYmF0Y2h0b29scGFuZWxjb29y ZC5jYyBiL3J0Z3VpL2JhdGNodG9vbHBhbmVsY29vcmQuY2MKLWluZGV4IDRiNmUxNmRjYS4uNDI2 YzhhNmVlIDEwMDY0NAotLS0tIGEvcnRndWkvYmF0Y2h0b29scGFuZWxjb29yZC5jYwotKysrIGIv cnRndWkvYmF0Y2h0b29scGFuZWxjb29yZC5jYwotQEAgLTE4NCw2ICsxODQsNyBAQCB2b2lkIEJh dGNoVG9vbFBhbmVsQ29vcmRpbmF0b3I6OmluaXRTZXNzaW9uICgpCi0gICAgICAgICAgICAgYmF5 ZXJyYXdleHBvc3VyZS0+c2V0QWRqdXN0ZXJCZWhhdmlvciAoZmFsc2UpOwotICAgICAgICAgICAg IHh0cmFuc3Jhd2V4cG9zdXJlLT5zZXRBZGp1c3RlckJlaGF2aW9yIChmYWxzZSk7Ci0gICAgICAg ICB9IGVsc2UgewotKyAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMgPSBBcHA6Omdl dCgpLm9wdGlvbnMoKTsKLSAKLSAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRv b2xQYW5lbHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgdG9vbFBhbmVscy5hdCAo aSktPnNldE11bHRpSW1hZ2UgKHRydWUpOwotQEAgLTc1Nyw2ICs3NTgsNyBAQCB2b2lkIEJhdGNo VG9vbFBhbmVsQ29vcmRpbmF0b3I6OnNwb3RXQnNlbGVjdGVkIChpbnQgeCwgaW50IHksIFRodW1i bmFpbCogdGhtKQotIAotIC8vICAgIHRvb2xCYXItPnNldFRvb2wgKFRPT0xfSEFORCk7Ci0gICAg IGlmICh4ID4gMCAmJiB5ID4gMCAmJiB0aG0pIHsKLSsgICAgICAgIGNvbnN0IGF1dG8mIG9wdGlv bnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp IDwgc2VsZWN0ZWQuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgaWYgKHNlbGVjdGVkW2ldID09 IHRobSkgewotICAgICAgICAgICAgICAgICBkb3VibGUgdGVtcDsKLWRpZmYgLS1naXQgYS9ydGd1 aS9iYXllcnByZXByb2Nlc3MuY2MgYi9ydGd1aS9iYXllcnByZXByb2Nlc3MuY2MKLWluZGV4IGFj MmZhZjU4Zi4uZDIzNTU0YTEzIDEwMDY0NAotLS0tIGEvcnRndWkvYmF5ZXJwcmVwcm9jZXNzLmNj Ci0rKysgYi9ydGd1aS9iYXllcnByZXByb2Nlc3MuY2MKLUBAIC0zMCw4ICszMCw5IEBAIHVzaW5n IG5hbWVzcGFjZSBydGVuZ2luZTo6cHJvY3BhcmFtczsKLSAKLSBjb25zdCBHbGliOjp1c3RyaW5n IEJheWVyUHJlUHJvY2Vzczo6VE9PTF9OQU1FID0gImJheWVycHJlcHJvY2VzcyI7Ci0gCi0tQmF5 ZXJQcmVQcm9jZXNzOjpCYXllclByZVByb2Nlc3MoKSA6IEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMs IFRPT0xfTkFNRSwgTSgiVFBfUFJFUFJPQ0VTU19MQUJFTCIpLCBvcHRpb25zLnByZXZkZW1vICE9 IFBEX1NpZGVjYXIpCi0rQmF5ZXJQcmVQcm9jZXNzOjpCYXllclByZVByb2Nlc3MoKSA6IEZvbGRh YmxlVG9vbFBhbmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBfUFJFUFJPQ0VTU19MQUJFTCIpLCBB cHA6OmdldCgpLm9wdGlvbnMoKS5wcmV2ZGVtbyAhPSBQRF9TaWRlY2FyKQotIHsKLSsgICAgY29u c3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBhdXRvIG0gPSBQ cm9jRXZlbnRNYXBwZXI6OmdldEluc3RhbmNlKCk7Ci0gICAgIEV2TGluZURlbm9pc2VEaXJlY3Rp b24gPSBtLT5uZXdFdmVudChEQVJLRlJBTUUsICJISVNUT1JZX01TR19QUkVQUk9DRVNTX0xJTkVE RU5PSVNFX0RJUkVDVElPTiIpOwotICAgICBFdlBEQUZMaW5lc0ZpbHRlciA9IG0tPm5ld0V2ZW50 KERBUktGUkFNRSwgIkhJU1RPUllfTVNHX1BSRVBST0NFU1NfUERBRkxJTkVTRklMVEVSIik7Ci1k aWZmIC0tZ2l0IGEvcnRndWkvYmF5ZXJwcm9jZXNzLmNjIGIvcnRndWkvYmF5ZXJwcm9jZXNzLmNj Ci1pbmRleCA0ZDVkMGZhNWMuLjljZGQzMGI3NyAxMDA2NDQKLS0tLSBhL3J0Z3VpL2JheWVycHJv Y2Vzcy5jYwotKysrIGIvcnRndWkvYmF5ZXJwcm9jZXNzLmNjCi1AQCAtMzEsOSArMzEsMTAgQEAg dXNpbmcgbmFtZXNwYWNlIHJ0ZW5naW5lOjpwcm9jcGFyYW1zOwotIGNvbnN0IEdsaWI6OnVzdHJp bmcgQmF5ZXJQcm9jZXNzOjpUT09MX05BTUUgPSAiYmF5ZXJwcm9jZXNzIjsKLSAKLSBCYXllclBy b2Nlc3M6OkJheWVyUHJvY2VzcyAoKSA6Ci0tICAgIEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMsIFRP T0xfTkFNRSwgTSgiVFBfUkFXX0xBQkVMIiksIG9wdGlvbnMucHJldmRlbW8gIT0gUERfU2lkZWNh ciksCi0rICAgIEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBfUkFXX0xB QkVMIiksIEFwcDo6Z2V0KCkub3B0aW9ucygpLnByZXZkZW1vICE9IFBEX1NpZGVjYXIpLAotICAg ICBvbGRNZXRob2QoLTEpCi0gewotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQo KS5vcHRpb25zKCk7Ci0gCi0gICAgIGF1dG8gbSA9IFByb2NFdmVudE1hcHBlcjo6Z2V0SW5zdGFu Y2UoKTsKLSAgICAgRXZEZW1vc2FpY0JvcmRlciA9IG0tPm5ld0V2ZW50KERBUktGUkFNRSwgIkhJ U1RPUllfTVNHX1JBV19CT1JERVIiKTsKLWRpZmYgLS1naXQgYS9ydGd1aS9iYXllcnJhd2V4cG9z dXJlLmNjIGIvcnRndWkvYmF5ZXJyYXdleHBvc3VyZS5jYwotaW5kZXggZGI2Y2VlYTQxLi5mZDM3 MTQyZDUgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9iYXllcnJhd2V4cG9zdXJlLmNjCi0rKysgYi9ydGd1 aS9iYXllcnJhd2V4cG9zdXJlLmNjCi1AQCAtMjgsOCArMjgsOSBAQCB1c2luZyBuYW1lc3BhY2Ug cnRlbmdpbmU6OnByb2NwYXJhbXM7Ci0gCi0gY29uc3QgR2xpYjo6dXN0cmluZyBCYXllclJBV0V4 cG9zdXJlOjpUT09MX05BTUUgPSAiYmF5ZXJyYXdleHBvc3VyZSI7Ci0gCi0tQmF5ZXJSQVdFeHBv c3VyZTo6QmF5ZXJSQVdFeHBvc3VyZSAoKSA6IEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMsIFRPT0xf TkFNRSwgTSgiVFBfRVhQT1NfQkxBQ0tQT0lOVF9MQUJFTCIpLCBvcHRpb25zLnByZXZkZW1vICE9 IFBEX1NpZGVjYXIpCi0rQmF5ZXJSQVdFeHBvc3VyZTo6QmF5ZXJSQVdFeHBvc3VyZSAoKSA6IEZv bGRhYmxlVG9vbFBhbmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBfRVhQT1NfQkxBQ0tQT0lOVF9M QUJFTCIpLCBBcHA6OmdldCgpLm9wdGlvbnMoKS5wcmV2ZGVtbyAhPSBQRF9TaWRlY2FyKQotIHsK LSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBh dXRvIG0gPSBQcm9jRXZlbnRNYXBwZXI6OmdldEluc3RhbmNlKCk7Ci0gICAgIEV2RGVoYWJsYWNr ID0gbS0+bmV3RXZlbnQoREFSS0ZSQU1FLCAiSElTVE9SWV9NU0dfREVIQUJMQUNLIik7Ci0gICAg IEV2RGVoYWJsYWNrVm9pZCA9IG0tPm5ld0V2ZW50KE1fVk9JRCwgIkhJU1RPUllfTVNHX0RFSEFC TEFDSyIpOwotZGlmZiAtLWdpdCBhL3J0Z3VpL2JsYWNrd2hpdGUuY2MgYi9ydGd1aS9ibGFja3do aXRlLmNjCi1pbmRleCBmNjdlZTliN2YuLjE1ZDgxMzFjYSAxMDA2NDQKLS0tLSBhL3J0Z3VpL2Js YWNrd2hpdGUuY2MKLSsrKyBiL3J0Z3VpL2JsYWNrd2hpdGUuY2MKLUBAIC03Nyw2ICs3Nyw3IEBA IEJsYWNrV2hpdGU6OkJsYWNrV2hpdGUgKCk6IEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMsIFRPT0xf TkFNRSwgTSgiVFBfQldNSVhfTEFCRUwiCi0gICAgICAgICBib3R0b21NaWxlc3RvbmVzLnB1c2hf YmFjayggR3JhZGllbnRNaWxlc3RvbmUoZG91YmxlKHgpLCBkb3VibGUoUiksIGRvdWJsZShHKSwg ZG91YmxlKEIpKSApOwotICAgICB9Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgp Lm11dF9vcHRpb25zKCk7Ci0gICAgIGx1bWluYW5jZUNFRyA9IG5ldyBDdXJ2ZUVkaXRvckdyb3Vw IChvcHRpb25zLmxhc3RCV0N1cnZlc0RpciwgTSgiVFBfQldNSVhfQ0hBTk5FTCIpKTsKLSAgICAg bHVtaW5hbmNlQ0VHLT5zZXRDdXJ2ZUxpc3RlbmVyICh0aGlzKTsKLSAgICAgbHVtaW5hbmNlQ3Vy dmUgPSBzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihsdW1pbmFuY2VDRUctPmFkZEN1cnZl KENUX0ZsYXQsIE0oIlRQX0JXTUlYX1ZBTCIpKSk7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvYnFlbnRy eXVwZGF0ZXIuY2MgYi9ydGd1aS9icWVudHJ5dXBkYXRlci5jYwotaW5kZXggZTBiODg3ZWFhLi4x MDdiZmEzZDQgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9icWVudHJ5dXBkYXRlci5jYwotKysrIGIvcnRn dWkvYnFlbnRyeXVwZGF0ZXIuY2MKLUBAIC0yOCw2ICsyOCw3IEBAIG5hbWVzcGFjZQotIAotIHZv aWQgdGh1bWJJbnRlcnAoY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCBpbnQgc3csIGludCBzaCwg dW5zaWduZWQgY2hhciogZHN0LCBpbnQgZHcsIGludCBkaCkKLSB7Ci0rICAgIGNvbnN0IGF1dG8m IG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAKLSAgICAgaWYgKG9wdGlvbnMudGh1 bWJJbnRlcnAgPT0gMCkgewotICAgICAgICAgcnRlbmdpbmU6Om5lYXJlc3RJbnRlcnAgKHNyYywg c3csIHNoLCBkc3QsIGR3LCBkaCk7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvY2FjaGVtYW5hZ2VyLmNj IGIvcnRndWkvY2FjaGVtYW5hZ2VyLmNjCi1pbmRleCA3ODA0YjY5YjQuLjFlODQxZWEwYiAxMDA2 NDQKLS0tLSBhL3J0Z3VpL2NhY2hlbWFuYWdlci5jYwotKysrIGIvcnRndWkvY2FjaGVtYW5hZ2Vy LmNjCi1AQCAtNTQsNyArNTQsNyBAQCB2b2lkIENhY2hlTWFuYWdlcjo6aW5pdCAoKQotICAgICBN eU11dGV4OjpNeUxvY2sgbG9jayAobXV0ZXgpOwotIAotICAgICBvcGVuRW50cmllcy5jbGVhciAo KTsKLS0gICAgYmFzZURpciA9IG9wdGlvbnMuY2FjaGVCYXNlRGlyOwotKyAgICBiYXNlRGlyID0g QXBwOjpnZXQoKS5vcHRpb25zKCkuY2FjaGVCYXNlRGlyOwotIAotICAgICBhdXRvIGVycm9yID0g Z19ta2Rpcl93aXRoX3BhcmVudHMgKGJhc2VEaXIuY19zdHIoKSwgY2FjaGVEaXJNb2RlKTsKLSAK LUBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBDYWNoZU1hbmFnZXI6OnJlbmFtZUVudHJ5IChjb25z dCBzdGQ6OnN0cmluZyYgb2xkZmlsZW5hbWUsIGNvbnN0IHN0ZDo6c3RyaW4KLSAKLSAgICAgY29u c3QgYXV0byBuZXdtZDUgPSBnZXRNRDUgKG5ld2ZpbGVuYW1lKTsKLSAKLS0gICAgYXV0byBlcnJv ciA9IGdfcmVuYW1lIChnZXRDYWNoZUZpbGVOYW1lICgicHJvZmlsZXMiLCBvbGRmaWxlbmFtZSwg cGFyYW1GaWxlRXh0ZW5zaW9uLCBvbGRtZDUpLmNfc3RyICgpLCBnZXRDYWNoZUZpbGVOYW1lICgi cHJvZmlsZXMiLCBuZXdmaWxlbmFtZSwgcGFyYW1GaWxlRXh0ZW5zaW9uLCBuZXdtZDUpLmNfc3Ry ICgpKTsKLSsgICAgYXV0byBlcnJvciA9IGdfcmVuYW1lIChnZXRDYWNoZUZpbGVOYW1lICgicHJv ZmlsZXMiLCBvbGRmaWxlbmFtZSwgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTiwgb2xkbWQ1KS5j X3N0ciAoKSwgZ2V0Q2FjaGVGaWxlTmFtZSAoInByb2ZpbGVzIiwgbmV3ZmlsZW5hbWUsIEFwcDo6 UEFSQU1fRklMRV9FWFRFTlNJT04sIG5ld21kNSkuY19zdHIgKCkpOwotICAgICBlcnJvciB8PSBn X3JlbmFtZSAoZ2V0Q2FjaGVGaWxlTmFtZSAoImltYWdlcyIsIG9sZGZpbGVuYW1lLCAiLnJ0dGki LCBvbGRtZDUpLmNfc3RyICgpLCBnZXRDYWNoZUZpbGVOYW1lICgiaW1hZ2VzIiwgbmV3ZmlsZW5h bWUsICIucnR0aSIsIG5ld21kNSkuY19zdHIgKCkpOwotICAgICBlcnJvciB8PSBnX3JlbmFtZSAo Z2V0Q2FjaGVGaWxlTmFtZSAoImVtYnByb2ZpbGVzIiwgb2xkZmlsZW5hbWUsICIuaWNjIiwgb2xk bWQ1KS5jX3N0ciAoKSwgZ2V0Q2FjaGVGaWxlTmFtZSAoImVtYnByb2ZpbGVzIiwgbmV3ZmlsZW5h bWUsICIuaWNjIiwgbmV3bWQ1KS5jX3N0ciAoKSk7Ci0gICAgIGVycm9yIHw9IGdfcmVuYW1lIChn ZXRDYWNoZUZpbGVOYW1lICgiZGF0YSIsIG9sZGZpbGVuYW1lLCAiLnR4dCIsIG9sZG1kNSkuY19z dHIgKCksIGdldENhY2hlRmlsZU5hbWUgKCJkYXRhIiwgbmV3ZmlsZW5hbWUsICIudHh0IiwgbmV3 bWQ1KS5jX3N0ciAoKSk7Ci1AQCAtMjk5LDcgKzI5OSw3IEBAIHZvaWQgQ2FjaGVNYW5hZ2VyOjpk ZWxldGVGaWxlcyAoY29uc3QgR2xpYjo6dXN0cmluZyYgZm5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5n JiBtCi0gICAgIH0KLSAKLSAgICAgaWYgKHB1cmdlUHJvZmlsZSkgewotLSAgICAgICAgZXJyb3Ig fD0gZ19yZW1vdmUgKGdldENhY2hlRmlsZU5hbWUgKCJwcm9maWxlcyIsIGZuYW1lLCBwYXJhbUZp bGVFeHRlbnNpb24sIG1kNSkuY19zdHIgKCkpOwotKyAgICAgICAgZXJyb3IgfD0gZ19yZW1vdmUg KGdldENhY2hlRmlsZU5hbWUgKCJwcm9maWxlcyIsIGZuYW1lLCBBcHA6OlBBUkFNX0ZJTEVfRVhU RU5TSU9OLCBtZDUpLmNfc3RyICgpKTsKLSAgICAgfQotIAotICAgICBpZiAoZXJyb3IgIT0gMCAm JiBydGVuZ2luZTo6c2V0dGluZ3MtPnZlcmJvc2UpIHsKLUBAIC0zNzEsNiArMzcxLDcgQEAgdm9p ZCBDYWNoZU1hbmFnZXI6OmFwcGx5Q2FjaGVTaXplTGltaXRhdGlvbiAoKSBjb25zdAotICAgICAg ICAgbnVtRmlsZXMgLT0gMjsgLy8gYmVjYXVzZSAuIGFuZCAuLiBhcmUgY291bnRlZAotICAgICB9 Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAg ICAgaWYgKG51bUZpbGVzIDw9IG9wdGlvbnMubWF4Q2FjaGVFbnRyaWVzKSB7Ci0gICAgICAgICBy ZXR1cm47Ci0gICAgIH0KLWRpZmYgLS1naXQgYS9ydGd1aS9jb2xvcmFwcGVhcmFuY2UuY2MgYi9y dGd1aS9jb2xvcmFwcGVhcmFuY2UuY2MKLWluZGV4IDRlMzcxZGI0MC4uNjBjZjVmODEwIDEwMDY0 NAotLS0tIGEvcnRndWkvY29sb3JhcHBlYXJhbmNlLmNjCi0rKysgYi9ydGd1aS9jb2xvcmFwcGVh cmFuY2UuY2MKLUBAIC0yMTYsNiArMjE2LDggQEAgc3RhdGljIGRvdWJsZSB3YlRlbXAyU2xpZGVy IChkb3VibGUgdGVtcCkKLSAKLSBDb2xvckFwcGVhcmFuY2U6OkNvbG9yQXBwZWFyYW5jZSAoKSA6 IEZvbGRhYmxlVG9vbFBhbmVsICh0aGlzLCBUT09MX05BTUUsIE0gKCJUUF9DT0xPUkFQUF9MQUJF TCIpLCBmYWxzZSwgdHJ1ZSkKLSB7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11 dF9vcHRpb25zKCk7Ci0rCi0gICAgIEN1cnZlTGlzdGVuZXI6OnNldE11bHRpICh0cnVlKTsKLSAg ICAgc3RkOjp2ZWN0b3I8R3JhZGllbnRNaWxlc3RvbmU+IG1pbGVzdG9uZXM7Ci0gICAgIG1pbGVz dG9uZXMucHVzaF9iYWNrICggR3JhZGllbnRNaWxlc3RvbmUgKDAuLCAwLiwgMC4sIDAuKSApOwot ZGlmZiAtLWdpdCBhL3J0Z3VpL2NvbG9ydG9uaW5nLmNjIGIvcnRndWkvY29sb3J0b25pbmcuY2MK LWluZGV4IDU4NWQ5MDBlYi4uNDMyYWQ5NDk2IDEwMDY0NAotLS0tIGEvcnRndWkvY29sb3J0b25p bmcuY2MKLSsrKyBiL3J0Z3VpL2NvbG9ydG9uaW5nLmNjCi1AQCAtNjUsNiArNjUsOCBAQCBDb2xv clRvbmluZzo6Q29sb3JUb25pbmcgKCkgOiBGb2xkYWJsZVRvb2xQYW5lbCh0aGlzLCBUT09MX05B TUUsIE0oIlRQX0NPTE9SVE9OSQotICAgICBjb2xvclNlcCA9IEd0azo6bWFuYWdlIChuZXcgR3Rr OjpTZXBhcmF0b3IoR3RrOjpPUklFTlRBVElPTl9IT1JJWk9OVEFMKSk7Ci0gICAgIHBhY2tfc3Rh cnQgKCpjb2xvclNlcCk7Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9v cHRpb25zKCk7Ci0rCi0gICAgIGNvbG9yQ3VydmVFZGl0b3JHID0gbmV3IEN1cnZlRWRpdG9yR3Jv dXAgKG9wdGlvbnMubGFzdENvbG9yVG9uaW5nQ3VydmVzRGlyLCBNKCJUUF9DT0xPUlRPTklOR19D T0xPUiIpKTsKLSAgICAgY29sb3JDdXJ2ZUVkaXRvckctPnNldEN1cnZlTGlzdGVuZXIgKHRoaXMp OwotIAotZGlmZiAtLWdpdCBhL3J0Z3VpL2NvbnRyb2xzcG90cGFuZWwuY2MgYi9ydGd1aS9jb250 cm9sc3BvdHBhbmVsLmNjCi1pbmRleCBjMzAxZmIzZGYuLjYzMTUzZjhiMCAxMDA2NDQKLS0tLSBh L3J0Z3VpL2NvbnRyb2xzcG90cGFuZWwuY2MKLSsrKyBiL3J0Z3VpL2NvbnRyb2xzcG90cGFuZWwu Y2MKLUBAIC0yOSw4ICsyOSw2IEBACi0gdXNpbmcgbmFtZXNwYWNlIHJ0ZW5naW5lOwotIHVzaW5n IG5hbWVzcGFjZSBwcm9jcGFyYW1zOwotIAotLWV4dGVybiBPcHRpb25zIG9wdGlvbnM7Ci0tCi0g Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIC8vIENvbnRyb2xTcG90UGFuZWwKLSAvLy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi1AQCAtMTIwLDcgKzExOCw3IEBAIENvbnRyb2xTcG90UGFuZWw6OkNvbnRy b2xTcG90UGFuZWwoKToKLSAgICAgYXV0byBtID0gUHJvY0V2ZW50TWFwcGVyOjpnZXRJbnN0YW5j ZSgpOwotICAgICBFdkxvY2FsbGFiYXZvaWRnYW11dE1ldGhvZCA9IG0tPm5ld0V2ZW50KEFVVE9F WFAsICJISVNUT1JZX01TR19MT0NBTF9HQU1VVE1VTlNFTCIpOwotICAgICBFdkxvY2FsbGFiYXZv aWRuZWdhdGl2ZSA9ICBtLT5uZXdFdmVudChBVVRPRVhQLCAiSElTVE9SWV9NU0dfTE9DQUxfQVZP SURORUdBVElWRSIpOwotLSAgICBjb25zdCBib29sIHNob3d0b29sdGlwID0gb3B0aW9ucy5zaG93 dG9vbHRpcDsKLSsgICAgY29uc3QgYm9vbCBzaG93dG9vbHRpcCA9IEFwcDo6Z2V0KCkub3B0aW9u cygpLnNob3d0b29sdGlwOwotIAotIC8vICAgIHBhY2tfc3RhcnQoKmhpc2hvd18pOwotIAotQEAg LTI5MjIsNyArMjkyMCw3IEBAIHZvaWQgQ29udHJvbFNwb3RQYW5lbDo6dXBkYXRlZ3Vpc2V0KGlu dCBzcG90dHlwZSwgYm9vbCBpc2NvbG9yLCBib29sIGlzc2gsIGJvb2wKLSAKLSAgICAgICAgICAg ICAvLyBVcGRhdGUgR1VJIGZ1bGxpbWFnZSBvciBtYWluCi0gICAgICAgICAgICAgZGlzYWJsZUxp c3RlbmVyKCk7Ci0tICAgICAgICAgICAgaWYoc3BvdHR5cGUgPj0gMiAgJiYgb3B0aW9ucy5zcG90 bWV0ID49IDIpIHsvL29wdGltaXplIHVwZGF0ZQotKyAgICAgICAgICAgIGlmKHNwb3R0eXBlID49 IDIgICYmIEFwcDo6Z2V0KCkub3B0aW9ucygpLnNwb3RtZXQgPj0gMikgey8vb3B0aW1pemUgdXBk YXRlCi0gICAgICAgICAgICAgICAgIHNwb3RNZXRob2RDaGFuZ2VkKCk7Ci0gICAgICAgICAgICAg fQotICAgICAgICAgICAgIAotZGlmZiAtLWdpdCBhL3J0Z3VpL2Nyb3AuY2MgYi9ydGd1aS9jcm9w LmNjCi1pbmRleCAzNGYyNzllODAuLjUwYmVmOTYzZCAxMDA2NDQKLS0tLSBhL3J0Z3VpL2Nyb3Au Y2MKLSsrKyBiL3J0Z3VpL2Nyb3AuY2MKLUBAIC0zMzUsNyArMzM1LDcgQEAgQ3JvcDo6fkNyb3Ao KQotIHZvaWQgQ3JvcDo6d3JpdGVPcHRpb25zICgpCi0gewotIAotLSAgICBvcHRpb25zLmNyb3BQ UEkgPSAoaW50KXBwaS0+Z2V0X3ZhbHVlICgpOwotKyAgICBBcHA6OmdldCgpLm11dF9vcHRpb25z KCkuY3JvcFBQSSA9IChpbnQpcHBpLT5nZXRfdmFsdWUgKCk7Ci0gfQotIAotIHZvaWQgQ3JvcDo6 cmVhZE9wdGlvbnMgKCkKLUBAIC0zNDMsNyArMzQzLDcgQEAgdm9pZCBDcm9wOjpyZWFkT3B0aW9u cyAoKQotIAotICAgICBkaXNhYmxlTGlzdGVuZXIgKCk7Ci0gCi0tICAgIHBwaS0+c2V0X3ZhbHVl IChvcHRpb25zLmNyb3BQUEkpOwotKyAgICBwcGktPnNldF92YWx1ZSAoQXBwOjpnZXQoKS5vcHRp b25zKCkuY3JvcFBQSSk7Ci0gCi0gICAgIGVuYWJsZUxpc3RlbmVyICgpOwotIH0KLWRpZmYgLS1n aXQgYS9ydGd1aS9jcm9wd2luZG93LmNjIGIvcnRndWkvY3JvcHdpbmRvdy5jYwotaW5kZXggMTMx ODUxMzcyLi4zYmQ4OTlkMzAgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9jcm9wd2luZG93LmNjCi0rKysg Yi9ydGd1aS9jcm9wd2luZG93LmNjCi1AQCAtNzksNyArNzksNyBAQCBHbGliOjp1c3RyaW5nIENy b3BXaW5kb3c6OmNsb3NldHQ7Ci0gQ3JvcFdpbmRvdzo6Q3JvcFdpbmRvdyAoSW1hZ2VBcmVhKiBw YXJlbnQsIGJvb2wgaXNMb3dVcGRhdGVQcmlvcml0eV8sIGJvb2wgaXNEZXRhaWxXaW5kb3cpCi0g ICAgIDogT2JqZWN0TU9CdWZmZXIocGFyZW50KSwgc3RhdGUoU05vcm1hbCksIHByZXNzX3goMCks IHByZXNzX3koMCksIGFjdGlvbl94KDApLCBhY3Rpb25feSgwKSwgcGlja2VkT2JqZWN0KC0xKSwg cGlja01vZGlmaWVyS2V5KDApLCByb3RfZGVnKDApLCBvblJlc2l6ZUFyZWEoZmFsc2UpLCBkZWxl dGVkKGZhbHNlKSwKLSAgICAgICBmaXRab29tRW5hYmxlZCh0cnVlKSwgZml0Wm9vbShmYWxzZSks IGN1cnNvcl90eXBlKENTQXJyb3cpLCAvKmlzTG93VXBkYXRlUHJpb3JpdHkoaXNMb3dVcGRhdGVQ cmlvcml0eV8pLCovIGhvdmVyZWRQaWNrZXIobnVsbHB0ciksIGNyb3BMYWJlbChHbGliOjp1c3Ry aW5nKCIxMDAlIikpLAotLSAgICAgIGJhY2tDb2xvcihvcHRpb25zLmJnY29sb3IpLCBkZWNvcmF0 ZWQodHJ1ZSksIGlzRmxhd25PdmVyKGZhbHNlKSwgdGl0bGVIZWlnaHQoMzApLCBzaWRlQm9yZGVy V2lkdGgoMyksIGxvd2VyQm9yZGVyV2lkdGgoMyksCi0rICAgICAgYmFja0NvbG9yKEFwcDo6Z2V0 KCkub3B0aW9ucygpLmJnY29sb3IpLCBkZWNvcmF0ZWQodHJ1ZSksIGlzRmxhd25PdmVyKGZhbHNl KSwgdGl0bGVIZWlnaHQoMzApLCBzaWRlQm9yZGVyV2lkdGgoMyksIGxvd2VyQm9yZGVyV2lkdGgo MyksCi0gICAgICAgdXBwZXJCb3JkZXJXaWR0aCgxKSwgc2VwV2lkdGgoMiksIHhwb3MoMzApLCB5 cG9zKDMwKSwgd2lkdGgoMCksIGhlaWdodCgwKSwgaW1nQXJlYVgoMCksIGltZ0FyZWFZKDApLCBp bWdBcmVhVygwKSwgaW1nQXJlYUgoMCksCi0gICAgICAgaW1nWCgtMSksIGltZ1koLTEpLCBpbWdX KDEpLCBpbWdIKDEpLCBpYXJlYShwYXJlbnQpLCBjcm9wWm9vbSgwKSwgem9vbVZlcnNpb24oMCks IGV4cG9zZVZlcnNpb24oMCksIGNyb3BnbChudWxscHRyKSwKLSAgICAgICBwbWxpc3RlbmVyKG51 bGxwdHIpLCBwbWhsaXN0ZW5lcihudWxscHRyKSwgc2Nyb2xsQWNjdW0oMC4wKSwgb2JzZXJ2ZWRD cm9wV2luKG51bGxwdHIpLAotQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIENyb3BXaW5kb3c6OmJ1 dHRvblByZXNzIChpbnQgYnV0dG9uLCBpbnQgdHlwZSwgaW50IGJzdGF0ZSwgaW50IHgsIGludCB5 KQotICAgICAgICAgICAgICAgICAgICAgc2NyZWVuQ29vcmRUb0ltYWdlICh4LCB5LCBhY3Rpb25f eCwgYWN0aW9uX3kpOwotICAgICAgICAgICAgICAgICAgICAgY2hhbmdlWm9vbSAoem9vbTExaW5k ZXgsIHRydWUsIGFjdGlvbl94LCBhY3Rpb25feSk7Ci0gICAgICAgICAgICAgICAgICAgICBmaXRa b29tID0gZmFsc2U7Ci0tICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5jcm9wQXV0 b0ZpdCkgewotKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFwcDo6Z2V0KCkub3B0aW9ucygp LmNyb3BBdXRvRml0KSB7Ci0gICAgICAgICAgICAgICAgICAgICB6b29tRml0Q3JvcCgpOwotICAg ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgem9vbUZpdCgpOwot QEAgLTY4NSw2ICs2ODUsNyBAQCB2b2lkIENyb3BXaW5kb3c6OmJ1dHRvblByZXNzIChpbnQgYnV0 dG9uLCBpbnQgdHlwZSwgaW50IGJzdGF0ZSwgaW50IHgsIGludCB5KQotIAotIHZvaWQgQ3JvcFdp bmRvdzo6YnV0dG9uUmVsZWFzZSAoaW50IGJ1dHRvbiwgaW50IG51bSwgaW50IGJzdGF0ZSwgaW50 IHgsIGludCB5KQotIHsKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlv bnMoKTsKLSAKLSAgICAgRWRpdFN1YnNjcmliZXIgKmVkaXRTdWJzY3JpYmVyID0gaWFyZWEtPmdl dEN1cnJTdWJzY3JpYmVyKCk7Ci0gCi1AQCAtODkxLDYgKzg5Miw3IEBAIHZvaWQgQ3JvcFdpbmRv dzo6cG9pbnRlck1vdmVkIChpbnQgYnN0YXRlLCBpbnQgeCwgaW50IHkpCi0gCi0gICAgICAgICBp YXJlYS0+cmVkcmF3ICgpOwotICAgICB9IGVsc2UgaWYgKHN0YXRlID09IFNDcm9wSW1nTW92ZSkg ewotKyAgICAgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwot ICAgICAgICAgLy8gbXVsdGlwbGllciBpcyB0aGUgYW1wbGlmaWNhdGlvbiBmYWN0b3IgOyBkaXNh YmxlZCBpZiB0aGUgdXNlciBzZWxlY3RlZCAiMSIgKG5vIGFtcGxpZmljYXRpb24pCi0gICAgICAg ICBkb3VibGUgZmFjdG9yID0gb3B0aW9ucy5wYW5BY2NlbEZhY3RvciA9PSAxID8gMS4wIDogb3B0 aW9ucy5wYW5BY2NlbEZhY3RvciAqIHpvb21TdGVwc1tjcm9wWm9vbV0uem9vbTsKLSAKLUBAIC0x NDQ5LDYgKzE0NTEsOCBAQCB2b2lkIENyb3BXaW5kb3c6OmV4cG9zZSAoQ2Fpcm86OlJlZlB0cjxD YWlybzo6Q29udGV4dD4gY3IpCi0gICAgICAgICBkcmF3RGVjb3JhdGlvbiAoY3IpOwotICAgICB9 Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0rCi0g ICAgIGludCB4ID0geHBvcywgeSA9IHlwb3M7Ci0gCi0gICAgIC8vIGRyYXcgdGhlIGJhY2tncm91 bmQKLUBAIC0yMjUxLDcgKzIyNTUsNyBAQCB2b2lkIENyb3BXaW5kb3c6Onpvb21GaXRDcm9wICgp Ci0gICAgICAgICBjZW50ZXJZID0gY3JvcEhhbmRsZXIuY3JvcFBhcmFtcy0+eSArIGNyb3BIYW5k bGVyLmNyb3BQYXJhbXMtPmggLyAyOwotICAgICAgICAgc2V0Q3JvcEFuY2hvclBvc2l0aW9uKGNl bnRlclgsIGNlbnRlclkpOwotICAgICAgICAgY2hhbmdlWm9vbSAoY3osIHRydWUsIGNlbnRlclgs IGNlbnRlclkpOwotLSAgICAgICAgZml0Wm9vbSA9IG9wdGlvbnMuY3JvcEF1dG9GaXQ7Ci0rICAg ICAgICBmaXRab29tID0gQXBwOjpnZXQoKS5vcHRpb25zKCkuY3JvcEF1dG9GaXQ7Ci0gICAgIH0g ZWxzZSB7Ci0gICAgICAgICB6b29tRml0KCk7Ci0gICAgIH0KLUBAIC0yMzIwLDcgKzIzMjQsNyBA QCB2b2lkIENyb3BXaW5kb3c6OmNoYW5nZVpvb20gKGludCB6b29tLCBib29sIG5vdGlmeSwgaW50 IGNlbnRlcngsIGludCBjZW50ZXJ5LCBibwotICAgICB9Ci0gCi0gICAgIC8vIExpbWl0IHpvb20g YWNjb3JkaW5nIHRvIHVzZXIgcHJlZmVyZW5jZXMKLS0gICAgZG91YmxlIHpvb21MaW1pdCA9IHpv b21MaW1pdFRvRnJhY3Rpb24ob3B0aW9ucy5tYXhab29tTGltaXQpOwotKyAgICBkb3VibGUgem9v bUxpbWl0ID0gem9vbUxpbWl0VG9GcmFjdGlvbihBcHA6OmdldCgpLm9wdGlvbnMoKS5tYXhab29t TGltaXQpOwotICAgICB3aGlsZSh6b29tU3RlcHNbem9vbV0uem9vbSA+IHpvb21MaW1pdCAmJiB6 b29tICE9IDApIHsKLSAgICAgICAgIC0tem9vbTsKLSAgICAgfQotQEAgLTI2ODEsNiArMjY4NSw4 IEBAIHZvaWQgQ3JvcFdpbmRvdzo6ZHJhd09ic2VydmVkRnJhbWUgKENhaXJvOjpSZWZQdHI8Q2Fp cm86OkNvbnRleHQ+IGNyLCBpbnQgcncsIGluCi0gICAgIGNyLT5yZWN0YW5nbGUgKHggLSAwLjUs IHkgLSAwLjUsIHcgKyA0LCBoICsgNCk7Ci0gICAgIGNyLT5zdHJva2UgKCk7Ci0gCi0rICAgIGNv bnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSsKLSAgICAgLy8gZHJh dyBhICJmcmFtZSIgbGluZS4gQ29sb3Igb2YgZnJhbWUgbGluZSBjYW4gYmUgc2V0IGluIHByZWZl cmVuY2VzCi0gICAgIGNyLT5zZXRfc291cmNlX3JnYmEob3B0aW9ucy5uYXZHdWlkZUJydXNoWzBd LCBvcHRpb25zLm5hdkd1aWRlQnJ1c2hbMV0sIG9wdGlvbnMubmF2R3VpZGVCcnVzaFsyXSwgb3B0 aW9ucy5uYXZHdWlkZUJydXNoWzNdKTsgLy8oIDEsIDEsIDEsIDEuMCk7Ci0gICAgIGNyLT5yZWN0 YW5nbGUgKHggLSAxLjUsIHkgLSAxLjUsIHcgKyA0LCBoICsgNCk7Ci1kaWZmIC0tZ2l0IGEvcnRn dWkvY3VydmVlZGl0b3Jncm91cC5jYyBiL3J0Z3VpL2N1cnZlZWRpdG9yZ3JvdXAuY2MKLWluZGV4 IDVjZTM3NjVhMi4uZGVkZmYyNTY1IDEwMDY0NAotLS0tIGEvcnRndWkvY3VydmVlZGl0b3Jncm91 cC5jYwotKysrIGIvcnRndWkvY3VydmVlZGl0b3Jncm91cC5jYwotQEAgLTMwLDcgKzMwLDcgQEAK LSAjaW5jbHVkZSAicGF0aHV0aWxzLmgiCi0gI2luY2x1ZGUgInJ0c2NhbGFibGUuaCIKLSAKLS1D dXJ2ZUVkaXRvckdyb3VwOjpDdXJ2ZUVkaXRvckdyb3VwIChHbGliOjp1c3RyaW5nJiBjdXJ2ZURp ciwgR2xpYjo6dXN0cmluZyBncm91cExhYmVsLCBpbnQgYmxhbmspIDogY3VydmVEaXIoY3VydmVE aXIpLCBsaW5lKDApLCBjdXJ2ZV9yZXNldChudWxscHRyKSwKLStDdXJ2ZUVkaXRvckdyb3VwOjpD dXJ2ZUVkaXRvckdyb3VwIChHbGliOjp1c3RyaW5nJiBjdXJ2ZURpciwgY29uc3QgR2xpYjo6dXN0 cmluZyYgZ3JvdXBMYWJlbCwgaW50IGJsYW5rKSA6IGN1cnZlRGlyKGN1cnZlRGlyKSwgbGluZSgw KSwgY3VydmVfcmVzZXQobnVsbHB0ciksCi0gICAgIGRpc3BsYXllZEN1cnZlKG51bGxwdHIpLCBm bGF0U3ViR3JvdXAobnVsbHB0ciksIGRpYWdvbmFsU3ViR3JvdXAobnVsbHB0ciksIGNsKG51bGxw dHIpLCBudW1iZXJPZlBhY2tlZEN1cnZlKDApCi0gewotIAotQEAgLTQyNiw2ICs0MjYsNyBAQCBD dXJ2ZUVkaXRvclN1Ykdyb3VwOjp+Q3VydmVFZGl0b3JTdWJHcm91cCgpCi0gCi0gdm9pZCBDdXJ2 ZUVkaXRvclN1Ykdyb3VwOjppbml0QnV0dG9uIChHdGs6OkJ1dHRvbiAmYnV0dG9uLCBjb25zdCBH bGliOjp1c3RyaW5nICZpY29uTmFtZSwgR3RrOjpBbGlnbiBhbGlnbiwgYm9vbCBzZXBhcmF0b3JC dXR0b24sIGNvbnN0IEdsaWI6OnVzdHJpbmcgJnRvb2x0aXApCi0gewotKyAgICBjb25zdCBhdXRv JiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGJvb2wgaEV4cGFuZCwgdkV4 cGFuZDsKLSAgICAgaWYgKHNlcGFyYXRvckJ1dHRvbikgewotICAgICAgICAgaEV4cGFuZCA9IHZF eHBhbmQgPSB0cnVlOwotZGlmZiAtLWdpdCBhL3J0Z3VpL2N1cnZlZWRpdG9yZ3JvdXAuaCBiL3J0 Z3VpL2N1cnZlZWRpdG9yZ3JvdXAuaAotaW5kZXggYWE5NzY1OTI2Li5iY2MxMzI3M2YgMTAwNjQ0 Ci0tLS0gYS9ydGd1aS9jdXJ2ZWVkaXRvcmdyb3VwLmgKLSsrKyBiL3J0Z3VpL2N1cnZlZWRpdG9y Z3JvdXAuaAotQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgotICAgICAgKiAgICAgICAgICAgICAg ICAgZGlhbG9ncy4KLSAgICAgICovCi0gCi0tICAgIGV4cGxpY2l0IEN1cnZlRWRpdG9yR3JvdXAo R2xpYjo6dXN0cmluZyYgY3VydmVEaXIsIEdsaWI6OnVzdHJpbmcgZ3JvdXBMYWJlbCA9ICIiLCBp bnQgYmxhbmsgPSAwKTsKLSsgICAgZXhwbGljaXQgQ3VydmVFZGl0b3JHcm91cChHbGliOjp1c3Ry aW5nJiBjdXJ2ZURpciwgY29uc3QgR2xpYjo6dXN0cmluZyYgZ3JvdXBMYWJlbCA9ICIiLCBpbnQg YmxhbmsgPSAwKTsKLSAgICAgfkN1cnZlRWRpdG9yR3JvdXAoKSBvdmVycmlkZTsKLSAgICAgdm9p ZCBuZXdMaW5lKCk7Ci0gICAgIHZvaWQgY3VydmVMaXN0Q29tcGxldGUoKTsKLWRpZmYgLS1naXQg YS9ydGd1aS9kYXJrZnJhbWUuY2MgYi9ydGd1aS9kYXJrZnJhbWUuY2MKLWluZGV4IGVjNjI4ZGE2 NC4uMDE1MWVjNjQ5IDEwMDY0NAotLS0tIGEvcnRndWkvZGFya2ZyYW1lLmNjCi0rKysgYi9ydGd1 aS9kYXJrZnJhbWUuY2MKLUBAIC0zNyw2ICszNyw3IEBAIERhcmtGcmFtZTo6RGFya0ZyYW1lICgp IDogRm9sZGFibGVUb29sUGFuZWwodGhpcywgVE9PTF9OQU1FLCBNKCJUUF9EQVJLRlJBTUVfTEFC Ci0gICAgIGhiZGYgPSBHdGs6Om1hbmFnZShuZXcgR3RrOjpCb3goKSk7Ci0gICAgIGhiZGYtPnNl dF9zcGFjaW5nKDQpOwotICAgICBkYXJrRnJhbWVGaWxlID0gR3RrOjptYW5hZ2UobmV3IE15Rmls ZUNob29zZXJCdXR0b24oTSgiVFBfREFSS0ZSQU1FX0xBQkVMIiksIEd0azo6RklMRV9DSE9PU0VS X0FDVElPTl9PUEVOKSk7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRp b25zKCk7Ci0gICAgIGJpbmRDdXJyZW50Rm9sZGVyICgqZGFya0ZyYW1lRmlsZSwgb3B0aW9ucy5s YXN0RGFya2ZyYW1lRGlyKTsKLSAgICAgZGZMYWJlbCA9IEd0azo6bWFuYWdlKG5ldyBHdGs6Okxh YmVsKE0oIkdFTkVSQUxfRklMRSIpKSk7Ci0gICAgIGJ0blJlc2V0ID0gR3RrOjptYW5hZ2UobmV3 IEd0azo6QnV0dG9uKCkpOwotQEAgLTIxMSw2ICsyMTIsNyBAQCB2b2lkIERhcmtGcmFtZTo6ZGFy a0ZyYW1lQ2hhbmdlZCgpCi0gdm9pZCBEYXJrRnJhbWU6OmRhcmtGcmFtZVJlc2V0KCkKLSB7Ci0g ICAgIGRmQ2hhbmdlZCA9IHRydWU7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6Omdl dCgpLm9wdGlvbnMoKTsKLSAKLSAvLyBjYXV0aW9uOiBJIGhhZCB0byBtYWtlIHRoaXMgaGFjaywg YmVjYXVzZSBzZXRfY3VycmVudF9mb2xkZXIoKSBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IQotIC8v ICAgICAgICAgIEJlY2F1c2Ugc3pldmEgZG9lc24ndCBleGlzdCBzaW5jZSBoZSB3YXMgY29tbWl0 dGVkIHRvIGhhcHB5IGh1bnRpbmcgZ3JvdW5kIGluIElzc3VlIDMxNgotZGlmZiAtLWdpdCBhL3J0 Z3VpL2RlZnJpbmdlLmNjIGIvcnRndWkvZGVmcmluZ2UuY2MKLWluZGV4IDE2MjUzOGRiMC4uNTMx OTBjNzJhIDEwMDY0NAotLS0tIGEvcnRndWkvZGVmcmluZ2UuY2MKLSsrKyBiL3J0Z3VpL2RlZnJp bmdlLmNjCi1AQCAtNDQsNiArNDQsNyBAQCBEZWZyaW5nZTo6RGVmcmluZ2UgKCkgOiBGb2xkYWJs ZVRvb2xQYW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQX0RFRlJJTkdFX0xBQkVMIgotICAgICAg ICAgYm90dG9tTWlsZXN0b25lcy5wdXNoX2JhY2soIEdyYWRpZW50TWlsZXN0b25lKGRvdWJsZSh4 KSwgZG91YmxlKFIpLCBkb3VibGUoRyksIGRvdWJsZShCKSkgKTsKLSAgICAgfQotIAotKyAgICBh dXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBjdXJ2ZUVkaXRv clBGID0gbmV3IEN1cnZlRWRpdG9yR3JvdXAgKG9wdGlvbnMubGFzdFBGQ3VydmVzRGlyKTsKLSAg ICAgY3VydmVFZGl0b3JQRi0+c2V0Q3VydmVMaXN0ZW5lciAodGhpcyk7Ci0gICAgIGNoc2hhcGUg PSBzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihjdXJ2ZUVkaXRvclBGLT5hZGRDdXJ2ZShD VF9GbGF0LCBNKCJUUF9QRkNVUlZFX0NVUlZFRURJVE9SX0NIIikpKTsKLWRpZmYgLS1naXQgYS9y dGd1aS9kaWFnb25hbGN1cnZlZWRpdG9yc3ViZ3JvdXAuY2MgYi9ydGd1aS9kaWFnb25hbGN1cnZl ZWRpdG9yc3ViZ3JvdXAuY2MKLWluZGV4IGMzMGFhNTk5YS4uMjA5MDg3NzM3IDEwMDY0NAotLS0t IGEvcnRndWkvZGlhZ29uYWxjdXJ2ZWVkaXRvcnN1Ymdyb3VwLmNjCi0rKysgYi9ydGd1aS9kaWFn b25hbGN1cnZlZWRpdG9yc3ViZ3JvdXAuY2MKLUBAIC0zOCw2ICszOCw3IEBACi0gCi0gRGlhZ29u YWxDdXJ2ZUVkaXRvclN1Ykdyb3VwOjpEaWFnb25hbEN1cnZlRWRpdG9yU3ViR3JvdXAgKEN1cnZl RWRpdG9yR3JvdXAqIHBydCwgR2xpYjo6dXN0cmluZyYgY3VydmVEaXIpIDogQ3VydmVFZGl0b3JT dWJHcm91cChjdXJ2ZURpcikKLSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6Omdl dCgpLm9wdGlvbnMoKTsKLSAKLSAgICAgZWRpdGVkQWRqdXN0ZXIgPSBudWxscHRyOwotICAgICBl ZGl0ZWRBZGp1c3RlclZhbHVlID0gMDsKLWRpZmYgLS1naXQgYS9ydGd1aS9kaXJicm93c2VyLmNj IGIvcnRndWkvZGlyYnJvd3Nlci5jYwotaW5kZXggZmRkZTQ4NjM3Li5jZTYxMTIyOTAgMTAwNjQ0 Ci0tLS0gYS9ydGd1aS9kaXJicm93c2VyLmNjCi0rKysgYi9ydGd1aS9kaXJicm93c2VyLmNjCi1A QCAtMTQ0LDYgKzE0NCw3IEBAIHZvaWQgRGlyQnJvd3Nlcjo6ZmlsbERpclRyZWUgKCkKLSAKLSAg ICAgZGlydHJlZS0+YXBwZW5kX2NvbHVtbih0dmMpOwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRp b25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIHR2Yy5zZXRfc29ydF9vcmRlcihvcHRp b25zLmRpckJyb3dzZXJTb3J0VHlwZSk7Ci0gICAgIHR2Yy5zZXRfc29ydF9jb2x1bW4oZHRDb2x1 bW5zLmZpbGVuYW1lKTsKLSAgICAgdHZjLnNldF9zb3J0X2luZGljYXRvcih0cnVlKTsKLUBAIC0y NjcsNiArMjY4LDcgQEAgdm9pZCBEaXJCcm93c2VyOjpmaWxsUm9vdCAoKQotIAotIHZvaWQgRGly QnJvd3Nlcjo6b25fc29ydF9jb2x1bW5fY2hhbmdlZCgpIGNvbnN0Ci0gewotKyAgICBhdXRvJiBv cHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBvcHRpb25zLmRpckJyb3dz ZXJTb3J0VHlwZSA9IHR2Yy5nZXRfc29ydF9vcmRlcigpOwotIH0KLSAKLUBAIC0yODUsMTMgKzI4 NywxNCBAQCB2b2lkIERpckJyb3dzZXI6OnJvd19leHBhbmRlZCAoY29uc3QgR3RrOjpUcmVlTW9k ZWw6Oml0ZXJhdG9yJiBpdGVyLCBjb25zdCBHdGs6OgotICAgICBkaXJUcmVlTW9kZWwtPmdldF9z b3J0X2NvbHVtbl9pZChwcmV2U29ydENvbHVtbiwgcHJldlNvcnRUeXBlKTsKLSAgICAgZGlyVHJl ZU1vZGVsLT5zZXRfc29ydF9jb2x1bW4oR3RrOjpUcmVlU29ydGFibGU6OkRFRkFVTFRfVU5TT1JU RURfQ09MVU1OX0lELCBHdGs6OlNPUlRfQVNDRU5ESU5HKTsKLSAKLSsgICAgY29uc3QgYXV0byYg b3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBhdXRvIGRpciA9IEdpbzo6Rmls ZTo6Y3JlYXRlX2Zvcl9wYXRoIChpdGVyLT5nZXRfdmFsdWUgKGR0Q29sdW1ucy5kaXJuYW1lKSk7 Ci0gICAgIGF1dG8gc3ViRGlycyA9IGxpc3RTdWJEaXJzIChkaXIsIG9wdGlvbnMuZmJTaG93SGlk ZGVuKTsKLSAKLSAgICAgR3RrOjpUcmVlTm9kZUNoaWxkcmVuIGNoaWxkcmVuID0gaXRlci0+Y2hp bGRyZW4oKTsKLSAgICAgc3RkOjpsaXN0PEd0azo6VHJlZUl0ZXI+IGZvckVyYXNlKGNoaWxkcmVu LmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpKTsKLSAKLS0gICAgc3RkOjpzb3J0IChzdWJEaXJzLmJl Z2luICgpLCBzdWJEaXJzLmVuZCAoKSwgW10gKGNvbnN0IEdsaWI6OnVzdHJpbmcmIGZpcnN0RGly LCBjb25zdCBHbGliOjp1c3RyaW5nJiBzZWNvbmREaXIpCi0rICAgIHN0ZDo6c29ydCAoc3ViRGly cy5iZWdpbiAoKSwgc3ViRGlycy5lbmQgKCksIFsmXShjb25zdCBHbGliOjp1c3RyaW5nJiBmaXJz dERpciwgY29uc3QgR2xpYjo6dXN0cmluZyYgc2Vjb25kRGlyKQotICAgICB7Ci0gICAgICAgICBz d2l0Y2ggKG9wdGlvbnMuZGlyQnJvd3NlclNvcnRUeXBlKSB7Ci0gICAgICAgICBkZWZhdWx0Ogot QEAgLTM1Myw3ICszNTYsNyBAQCB2b2lkIERpckJyb3dzZXI6OnVwZGF0ZURpciAoY29uc3QgR3Rr OjpUcmVlTW9kZWw6Oml0ZXJhdG9yJiBpdGVyKQotIAotICAgICAvLyB0ZXN0IGlmIG5ldyBmaWxl cyBhcmUgY3JlYXRlZAotICAgICBhdXRvIGRpciA9IEdpbzo6RmlsZTo6Y3JlYXRlX2Zvcl9wYXRo IChpdGVyLT5nZXRfdmFsdWUgKGR0Q29sdW1ucy5kaXJuYW1lKSk7Ci0tICAgIGF1dG8gc3ViRGly cyA9IGxpc3RTdWJEaXJzIChkaXIsIG9wdGlvbnMuZmJTaG93SGlkZGVuKTsKLSsgICAgYXV0byBz dWJEaXJzID0gbGlzdFN1YkRpcnMgKGRpciwgQXBwOjpnZXQoKS5vcHRpb25zKCkuZmJTaG93SGlk ZGVuKTsKLSAKLSAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJEaXJzLnNpemUoKTsgaSsr KSB7Ci0gICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvZGly cHlyZGVub2lzZS5jYyBiL3J0Z3VpL2RpcnB5cmRlbm9pc2UuY2MKLWluZGV4IDYyOTg5OGQ1Mi4u MzYxNmU3YjQwIDEwMDY0NAotLS0tIGEvcnRndWkvZGlycHlyZGVub2lzZS5jYwotKysrIGIvcnRn dWkvZGlycHlyZGVub2lzZS5jYwotQEAgLTcwLDYgKzcwLDcgQEAgRGlyUHlyRGVub2lzZTo6RGly UHlyRGVub2lzZSAoKSA6IEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBf RElSUFkKLSAKLSAgICAgbHVtYSAgPSBHdGs6Om1hbmFnZSAobmV3IEFkanVzdGVyIChNKCJUUF9E SVJQWVJERU5PSVNFX0xVTUlOQU5DRV9TTU9PVEhJTkciKSwgMCwgMTAwLCAwLjAxLCAwKSk7Ci0g ICAgIExkZXRhaWwgID0gR3RrOjptYW5hZ2UgKG5ldyBBZGp1c3RlciAoTSgiVFBfRElSUFlSREVO T0lTRV9MVU1JTkFOQ0VfREVUQUlMIiksIDAsIDEwMCwgMC4wMSwgMCkpOwotKyAgICBhdXRvJiBv cHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBOb2lzY3VydmVFZGl0b3JH ID0gbmV3IEN1cnZlRWRpdG9yR3JvdXAgKG9wdGlvbnMubGFzdERlbm9pc2VDdXJ2ZXNEaXIsIE0o IlRQX0RJUlBZUkRFTk9JU0VfTFVNSU5BTkNFX0NVUlZFIikpOwotICAgICAvL2N1cnZlRWRpdG9y RyA9IG5ldyBDdXJ2ZUVkaXRvckdyb3VwIChvcHRpb25zLmxhc3RMYWJDdXJ2ZXNEaXIpOwotICAg ICBOb2lzY3VydmVFZGl0b3JHLT5zZXRDdXJ2ZUxpc3RlbmVyICh0aGlzKTsKLUBAIC00NDQsNyAr NDQ1LDcgQEAgdm9pZCBEaXJQeXJEZW5vaXNlOjpyZWFkIChjb25zdCBQcm9jUGFyYW1zKiBwcCwg Y29uc3QgUGFyYW1zRWRpdGVkKiBwZWRpdGVkKQotIAotICAgICBMbWV0aG9kQ2hhbmdlZCgpOwot IAotLSAgICBpZihvcHRpb25zLnJ0U2V0dGluZ3MubGV2ZWxkbmF1dHNpbXBsID09IDEpIHsKLSsg ICAgaWYoQXBwOjpnZXQoKS5vcHRpb25zKCkucnRTZXR0aW5ncy5sZXZlbGRuYXV0c2ltcGwgPT0g MSkgewotICAgICAgICAgQ21ldGhvZC0+c2V0X2FjdGl2ZSAoMCk7Ci0gCi0gICAgICAgICBpZiAo cHAtPmRpcnB5ckRlbm9pc2UuQ21ldGhvZCA9PSAiTUFOIikgewotQEAgLTY5MCw3ICs2OTEsNyBA QCB2b2lkIERpclB5ckRlbm9pc2U6OndyaXRlIChQcm9jUGFyYW1zKiBwcCwgUGFyYW1zRWRpdGVk KiBwZWRpdGVkKQotICAgICAgICAgcHAtPmRpcnB5ckRlbm9pc2UuTG1ldGhvZCA9ICJTTEkiOwot ICAgICB9Ci0gCi0tICAgIGlmKG9wdGlvbnMucnRTZXR0aW5ncy5sZXZlbGRuYXV0c2ltcGwgPT0g MSkgewotKyAgICBpZihBcHA6OmdldCgpLm9wdGlvbnMoKS5ydFNldHRpbmdzLmxldmVsZG5hdXRz aW1wbCA9PSAxKSB7Ci0gICAgICAgICBpZiAoQ21ldGhvZC0+Z2V0X2FjdGl2ZV9yb3dfbnVtYmVy KCkgPT0gMCkgewotICAgICAgICAgICAgIHBwLT5kaXJweXJEZW5vaXNlLkNtZXRob2QgPSAiTUFO IjsKLSAgICAgICAgIH0gZWxzZSBpZiAoQ21ldGhvZC0+Z2V0X2FjdGl2ZV9yb3dfbnVtYmVyKCkg PT0gMSkgewotZGlmZiAtLWdpdCBhL3J0Z3VpL2VkaXRvcnBhbmVsLmNjIGIvcnRndWkvZWRpdG9y cGFuZWwuY2MKLWluZGV4IGFiZTBhMWVjNi4uNGVkZDk5Y2RiIDEwMDY0NAotLS0tIGEvcnRndWkv ZWRpdG9ycGFuZWwuY2MKLSsrKyBiL3J0Z3VpL2VkaXRvcnBhbmVsLmNjCi1AQCAtMzk2LDcgKzM5 Niw3IEBAIHByaXZhdGU6Ci0gICAgICAgICBpZiAoZmluZF9kZWZhdWx0X21vbml0b3JfcHJvZmls ZSAocHJvZmlsZUJveC5nZXRfcm9vdF93aW5kb3coKS0+Z29iaigpLCBkZWZwcm9mLCBkZWZwcm9m bmFtZSkpIHsKLSAgICAgICAgICAgICBwcm9maWxlQm94LmFwcGVuZCAoTSAoIk1PTklUT1JfUFJP RklMRV9TWVNURU0iKSArICIgKCIgKyBkZWZwcm9mbmFtZSArICIpIik7Ci0gCi0tICAgICAgICAg ICAgaWYgKG9wdGlvbnMucnRTZXR0aW5ncy5hdXRvTW9uaXRvclByb2ZpbGUpIHsKLSsgICAgICAg ICAgICBpZiAoQXBwOjpnZXQoKS5vcHRpb25zKCkucnRTZXR0aW5ncy5hdXRvTW9uaXRvclByb2Zp bGUpIHsKLSAgICAgICAgICAgICAgICAgcnRlbmdpbmU6OklDQ1N0b3JlOjpnZXRJbnN0YW5jZSgp LT5zZXREZWZhdWx0TW9uaXRvclByb2ZpbGVOYW1lIChkZWZwcm9mKTsKLSAgICAgICAgICAgICAg ICAgcHJvZmlsZUJveC5zZXRfYWN0aXZlICgxKTsKLSAgICAgICAgICAgICB9IGVsc2UgewotQEAg LTQ4MCw2ICs0ODAsNyBAQCBwcml2YXRlOgotICAgICAgICAgQ29ubmVjdGlvbkJsb2NrZXIgaW50 ZW50QmxvY2tlciAoaW50ZW50Q29ubik7Ci0gCi0gICAgICAgICBHbGliOjp1c3RyaW5nIHByb2Zp bGU7Ci0rICAgICAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7 Ci0gCi0gI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgLy8gbW9uaXRvciBwcm9maWxlIG5vdCBzdXBw b3J0ZWQgb24gYXBwbGUKLSAKLUBAIC02NDUsNiArNjQ2LDggQEAgcHVibGljOgotIAotICAgICB2 b2lkIHJlc2V0ICgpCi0gICAgIHsKLSsgICAgICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6 OmdldCgpLm9wdGlvbnMoKTsKLSsKLSAgICAgICAgIENvbm5lY3Rpb25CbG9ja2VyIGludGVudEJs b2NrZXIgKGludGVudENvbm4pOwotICNpZiAhZGVmaW5lZChfX0FQUExFX18pIC8vIG1vbml0b3Ig cHJvZmlsZSBub3Qgc3VwcG9ydGVkIG9uIGFwcGxlCi0gICAgICAgICBDb25uZWN0aW9uQmxvY2tl ciBwcm9maWxlQmxvY2tlciAocHJvZmlsZUNvbm4pOwotQEAgLTc4NSw2ICs3ODgsNyBAQCBFZGl0 b3JQYW5lbDo6RWRpdG9yUGFuZWwgKEZpbGVQYW5lbCogZmlsZVBhbmVsKQotICAgICBpSGlzdG9y eVNob3cgPSBuZXcgUlRJbWFnZSAoInBhbmVsLXRvLXJpZ2h0IiwgR3RrOjpJQ09OX1NJWkVfTEFS R0VfVE9PTEJBUik7Ci0gICAgIGlIaXN0b3J5SGlkZSA9IG5ldyBSVEltYWdlICgicGFuZWwtdG8t bGVmdCIsIEd0azo6SUNPTl9TSVpFX0xBUkdFX1RPT0xCQVIpOwotIAotKyAgICBjb25zdCBhdXRv JiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGhpZGVocC0+c2V0X3JlbGll ZiAoR3RrOjpSRUxJRUZfTk9ORSk7Ci0gICAgIGhpZGVocC0+c2V0X2FjdGl2ZSAob3B0aW9ucy5z aG93SGlzdG9yeSk7Ci0gICAgIGhpZGVocC0+c2V0X3Rvb2x0aXBfbWFya3VwIChNICgiTUFJTl9U T09MVElQX0hJREVIUCIpKTsKLUBAIC03OTcsNyArODAxLDcgQEAgRWRpdG9yUGFuZWw6OkVkaXRv clBhbmVsIChGaWxlUGFuZWwqIGZpbGVQYW5lbCkKLSAKLSAgICAgdGJUb3BQYW5lbF8xID0gbnVs bHB0cjsKLSAKLS0gICAgaWYgKCFzaW1wbGVFZGl0b3IgJiYgZmlsZVBhbmVsKSB7Ci0rICAgIGlm ICghQXBwOjpnZXQoKS5pc1NpbXBsZUVkaXRvcigpICYmIGZpbGVQYW5lbCkgewotICAgICAgICAg dGJUb3BQYW5lbF8xID0gbmV3IEd0azo6VG9nZ2xlQnV0dG9uICgpOwotICAgICAgICAgaVRvcFBh bmVsXzFfU2hvdyA9IG5ldyBSVEltYWdlICgicGFuZWwtdG8tYm90dG9tIiwgR3RrOjpJQ09OX1NJ WkVfTEFSR0VfVE9PTEJBUik7Ci0gICAgICAgICBpVG9wUGFuZWxfMV9IaWRlID0gbmV3IFJUSW1h Z2UgKCJwYW5lbC10by10b3AiLCBHdGs6OklDT05fU0laRV9MQVJHRV9UT09MQkFSKTsKLUBAIC05 NDIsNyArOTQ2LDcgQEAgRWRpdG9yUGFuZWw6OkVkaXRvclBhbmVsIChGaWxlUGFuZWwqIGZpbGVQ YW5lbCkKLSAKLSAgICAgbmF2UHJldiA9IG5hdk5leHQgPSBuYXZTeW5jID0gbnVsbHB0cjsKLSAK LS0gICAgaWYgKCFzaW1wbGVFZGl0b3IgJiYgIW9wdGlvbnMudGFiYmVkVUkpIHsKLSsgICAgaWYg KCFBcHA6OmdldCgpLmlzU2ltcGxlRWRpdG9yKCkgJiYgIW9wdGlvbnMudGFiYmVkVUkpIHsKLSAg ICAgICAgIC8vIE5hdmlnYXRpb24gYnV0dG9ucwotICAgICAgICAgR3RrOjpJbWFnZSAqbmF2UHJl dkltYWdlID0gR3RrOjptYW5hZ2UgKG5ldyBSVEltYWdlICgiYXJyb3cyLWxlZnQiLCBHdGs6OklD T05fU0laRV9MQVJHRV9UT09MQkFSKSk7Ci0gICAgICAgICBuYXZQcmV2SW1hZ2UtPnNldF9wYWRk aW5nICgwLCAwKTsKLUBAIC05NzYsMTUgKzk4MCwxNSBAQCBFZGl0b3JQYW5lbDo6RWRpdG9yUGFu ZWwgKEZpbGVQYW5lbCogZmlsZVBhbmVsKQotICAgICBpb3BzLT5hdHRhY2hfbmV4dF90byAoKnBy b2dyZXNzTGFiZWwsIEd0azo6UE9TX0xFRlQsIDEsIDEpOwotICAgICBpb3BzLT5hdHRhY2hfbmV4 dF90byAoKnZzZXAxLCBHdGs6OlBPU19MRUZULCAxLCAxKTsKLSAKLS0gICAgaWYgKCFnaW1wUGx1 Z2luKSB7Ci0rICAgIGlmICghQXBwOjpnZXQoKS5pc0dpbXBQbHVnaW4oKSkgewotICAgICAgICAg aW9wcy0+YXR0YWNoX25leHRfdG8oKnNlbmRfdG9fZXh0ZXJuYWwtPmJ1dHRvbkdyb3VwLCBHdGs6 OlBPU19MRUZULCAxLCAxKTsKLSAgICAgfQotIAotLSAgICBpZiAoIWdpbXBQbHVnaW4gJiYgIXNp bXBsZUVkaXRvcikgewotKyAgICBpZiAoIUFwcDo6Z2V0KCkuaXNHaW1wUGx1Z2luKCkgJiYgIUFw cDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSkgewotICAgICAgICAgaW9wcy0+YXR0YWNoX25leHRf dG8gKCpxdWV1ZWltZywgR3RrOjpQT1NfTEVGVCwgMSwgMSk7Ci0gICAgIH0KLSAKLS0gICAgaWYg KCFnaW1wUGx1Z2luKSB7Ci0rICAgIGlmICghQXBwOjpnZXQoKS5pc0dpbXBQbHVnaW4oKSkgewot ICAgICAgICAgaW9wcy0+YXR0YWNoX25leHRfdG8gKCpzYXZlaW1nYXMsIEd0azo6UE9TX0xFRlQs IDEsIDEpOwotICAgICB9Ci0gCi1AQCAtOTkzLDcgKzk5Nyw3IEBAIEVkaXRvclBhbmVsOjpFZGl0 b3JQYW5lbCAoRmlsZVBhbmVsKiBmaWxlUGFuZWwpCi0gICAgIGNvbG9yTWdtdFRvb2xCYXIucmVz ZXQgKG5ldyBDb2xvck1hbmFnZW1lbnRUb29sYmFyIChpcGMpKTsKLSAgICAgY29sb3JNZ210VG9v bEJhci0+cGFja19yaWdodF9pbiAoaW9wcyk7Ci0gCi0tICAgIGlmICghc2ltcGxlRWRpdG9yICYm ICFvcHRpb25zLnRhYmJlZFVJKSB7Ci0rICAgIGlmICghQXBwOjpnZXQoKS5pc1NpbXBsZUVkaXRv cigpICYmICFvcHRpb25zLnRhYmJlZFVJKSB7Ci0gICAgICAgICBHdGs6OlNlcGFyYXRvciogdnNl cDMgPSBHdGs6Om1hbmFnZSAobmV3IEd0azo6U2VwYXJhdG9yKEd0azo6T1JJRU5UQVRJT05fVkVS VElDQUwpKTsKLSAgICAgICAgIGlvcHMtPmF0dGFjaF9uZXh0X3RvICgqdnNlcDMsIEd0azo6UE9T X1JJR0hULCAxLCAxKTsKLSAgICAgICAgIGlvcHMtPmF0dGFjaF9uZXh0X3RvICgqbmF2UHJldiwg R3RrOjpQT1NfUklHSFQsIDEsIDEpOwotQEAgLTExNjgsNyArMTE3Miw3IEBAIHZvaWQgRWRpdG9y UGFuZWw6OmxlZnRQYW5lQnV0dG9uUmVsZWFzZWQgKEdka0V2ZW50QnV0dG9uICpldmVudCkKLSB7 Ci0gICAgIGlmIChldmVudC0+YnV0dG9uID09IDEpIHsKLSAgICAgICAgIC8vIEJ1dHRvbiAxIHJl bGVhc2VkIDogaXQncyBhIHJlc2l6ZQotLSAgICAgICAgb3B0aW9ucy5oaXN0b3J5UGFuZWxXaWR0 aCA9IGhwYW5lZGwtPmdldF9wb3NpdGlvbigpOwotKyAgICAgICAgQXBwOjpnZXQoKS5tdXRfb3B0 aW9ucygpLmhpc3RvcnlQYW5lbFdpZHRoID0gaHBhbmVkbC0+Z2V0X3Bvc2l0aW9uKCk7Ci0gICAg IH0KLSAKLSAgICAgLyplbHNlIGlmIChldmVudC0+YnV0dG9uID09IDMpIHsKLUBAIC0xMTgxLDcg KzExODUsNyBAQCB2b2lkIEVkaXRvclBhbmVsOjpyaWdodFBhbmVCdXR0b25SZWxlYXNlZCAoR2Rr RXZlbnRCdXR0b24gKmV2ZW50KQotICAgICAgICAgaW50IHdpblcsIHdpbkg7Ci0gICAgICAgICBw YXJlbnRXaW5kb3ctPmdldF9zaXplICh3aW5XLCB3aW5IKTsKLSAgICAgICAgIC8vIEJ1dHRvbiAx IHJlbGVhc2VkIDogaXQncyBhIHJlc2l6ZQotLSAgICAgICAgb3B0aW9ucy50b29sUGFuZWxXaWR0 aCA9IHdpblcgLSBocGFuZWRyLT5nZXRfcG9zaXRpb24oKTsKLSsgICAgICAgIEFwcDo6Z2V0KCku bXV0X29wdGlvbnMoKS50b29sUGFuZWxXaWR0aCA9IHdpblcgLSBocGFuZWRyLT5nZXRfcG9zaXRp b24oKTsKLSAgICAgfQotIAotICAgICAvKmVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMykgewot QEAgLTEyMjMsNiArMTIyNyw3IEBAIHZvaWQgRWRpdG9yUGFuZWw6OnNob3dUb3BQYW5lbCAoYm9v bCBzaG93KQotIAotIHZvaWQgRWRpdG9yUGFuZWw6OnNldEFzcGVjdCAoKQotIHsKLSsgICAgY29u c3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBpbnQgd2luVywg d2luSDsKLSAgICAgcGFyZW50V2luZG93LT5nZXRfc2l6ZSAod2luVywgd2luSCk7Ci0gICAgIGhw YW5lZGwtPnNldF9wb3NpdGlvbiAob3B0aW9ucy5oaXN0b3J5UGFuZWxXaWR0aCk7Ci1AQCAtMTI4 MSw2ICsxMjg2LDcgQEAgdm9pZCBFZGl0b3JQYW5lbDo6b3BlbiAoVGh1bWJuYWlsKiB0bWIsIHJ0 ZW5naW5lOjpJbml0aWFsSW1hZ2UqIGlzcmMpCi0gICAgIC8vIHRyeSB0byBsb2FkIHRoZSBsYXN0 IHNhdmVkIHBhcmFtZXRlcnMgZnJvbSB0aGUgY2FjaGUgb3IgZnJvbSB0aGUgcGFyYW1maWxlIGZp bGUKLSAgICAgUHJvY1BhcmFtcyogbGRwcm9mID0gb3BlblRobS0+Y3JlYXRlUHJvY1BhcmFtc0Zv clVwZGF0ZSAodHJ1ZSwgZmFsc2UpOyAvLyB3aWxsIGJlIGZyZWVkIGJ5IGluaXRQcm9maWxlCi0g Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAg Ly8gaW5pdGlhbGl6ZSBwcm9maWxlCi0gICAgIEdsaWI6OnVzdHJpbmcgZGVmUHJvZiA9IG9wZW5U aG0tPmdldFR5cGUoKSA9PSBGVF9SYXcgPyBvcHRpb25zLmRlZlByb2ZSYXcgOiBvcHRpb25zLmRl ZlByb2ZJbWc7Ci0gICAgIHByb2ZpbGVwLT5pbml0UHJvZmlsZSAoZGVmUHJvZiwgbGRwcm9mKTsK LUBAIC0xNTM1LDYgKzE1NDEsNyBAQCB2b2lkIEVkaXRvclBhbmVsOjpyZWZyZXNoUHJvY2Vzc2lu Z1N0YXRlIChib29sIGluUHJvY2Vzc2luZ1ApCi0gICAgICAgICBpZiAocHJvY2Vzc2luZ1N0YXJ0 ZWRUaW1lICE9IDApIHsKLSAgICAgICAgICAgICB0aW1lX3QgY3VyVGltZSA9IDo6dGltZSAobnVs bHB0cik7Ci0gCi0rICAgICAgICAgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCku b3B0aW9ucygpOwotICAgICAgICAgICAgIGlmICg6OmRpZmZ0aW1lIChjdXJUaW1lLCBwcm9jZXNz aW5nU3RhcnRlZFRpbWUpID4gb3B0aW9ucy5zbmRMbmdFZGl0UHJvY0RvbmVTZWNzKSB7Ci0gICAg ICAgICAgICAgICAgIFNvdW5kTWFuYWdlcjo6cGxheVNvdW5kQXN5bmMgKG9wdGlvbnMuc25kTG5n RWRpdFByb2NEb25lKTsKLSAgICAgICAgICAgICB9Ci1AQCAtMTY0MSw2ICsxNjQ4LDcgQEAgdm9p ZCBFZGl0b3JQYW5lbDo6aGlkZUhpc3RvcnlBY3RpdmF0ZWQgKCkKLSAgICAgICAgIGhwYW5lZGwt PnBhY2sxICgqbGVmdGJveCwgZmFsc2UsIGZhbHNlKTsKLSAgICAgfQotIAotKyAgICBhdXRvJiBv cHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBvcHRpb25zLnNob3dIaXN0 b3J5ID0gaGlkZWhwLT5nZXRfYWN0aXZlKCk7Ci0gCi0gICAgIGlmIChvcHRpb25zLnNob3dIaXN0 b3J5KSB7Ci1AQCAtMTY5Nyw2ICsxNzA1LDcgQEAgdm9pZCBFZGl0b3JQYW5lbDo6dGJUb3BQYW5l bF8xX3RvZ2dsZWQgKCkKLSAKLSAgICAgaWYgKGNhdGFsb2dQYW5lKSB7IC8vIGNhdGFsb2dQYW5l IGRvZXMgbm90IGV4aXN0IGluIG11bHRpdGFiIG1vZGUKLSAKLSsgICAgICAgIGF1dG8mIG9wdGlv bnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgICAgICBpZiAodGJUb3BQYW5lbF8x LT5nZXRfYWN0aXZlKCkpIHsKLSAgICAgICAgICAgICBjYXRhbG9nUGFuZS0+c2hvdygpOwotICAg ICAgICAgICAgIHRiVG9wUGFuZWxfMS0+c2V0X2ltYWdlICgqaVRvcFBhbmVsXzFfSGlkZSk7Ci1A QCAtMTg4Miw3ICsxODkxLDcgQEAgYm9vbCBFZGl0b3JQYW5lbDo6aGFuZGxlU2hvcnRjdXRLZXkg KEdka0V2ZW50S2V5KiBldmVudCkKLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot IAotICAgICAgICAgICAgICAgICBjYXNlIEdES19LRVlfeTogLy8gc3luY2hyb25pemUgZmlsZWJy b3dzZXIgd2l0aCBpbWFnZSBpbiBFZGl0b3IKLS0gICAgICAgICAgICAgICAgICAgIGlmICghc2lt cGxlRWRpdG9yICYmIGZQYW5lbCAmJiAhZm5hbWUuZW1wdHkoKSkgewotKyAgICAgICAgICAgICAg ICAgICAgaWYgKCFBcHA6OmdldCgpLmlzU2ltcGxlRWRpdG9yKCkgJiYgZlBhbmVsICYmICFmbmFt ZS5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgZlBhbmVsLT5maWxlQ2F0YWxv Zy0+c2VsZWN0SW1hZ2UgKGZuYW1lLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci1AQCAtMTg5MCw3ICsxODk5LDcg QEAgYm9vbCBFZGl0b3JQYW5lbDo6aGFuZGxlU2hvcnRjdXRLZXkgKEdka0V2ZW50S2V5KiBldmVu dCkKLSAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyB0byBhdm9pZCBnY2MgY29tcGxhaW4K LSAKLSAgICAgICAgICAgICAgICAgY2FzZSBHREtfS0VZX3g6IC8vIGNsZWFyIGZpbHRlcnMgYW5k IHN5bmNocm9uaXplIGZpbGVicm93c2VyIHdpdGggaW1hZ2UgaW4gRWRpdG9yCi0tICAgICAgICAg ICAgICAgICAgICBpZiAoIXNpbXBsZUVkaXRvciAmJiBmUGFuZWwgJiYgIWZuYW1lLmVtcHR5KCkp IHsKLSsgICAgICAgICAgICAgICAgICAgIGlmICghQXBwOjpnZXQoKS5pc1NpbXBsZUVkaXRvcigp ICYmIGZQYW5lbCAmJiAhZm5hbWUuZW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg IGZQYW5lbC0+ZmlsZUNhdGFsb2ctPnNlbGVjdEltYWdlIChmbmFtZSwgdHJ1ZSk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci1A QCAtMTkwNiwyMSArMTkxNSwyMSBAQCBib29sIEVkaXRvclBhbmVsOjpoYW5kbGVTaG9ydGN1dEtl eSAoR2RrRXZlbnRLZXkqIGV2ZW50KQotICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7 Ci0gCi0gICAgICAgICAgICAgICAgIGNhc2UgR0RLX0tFWV9zOgotLSAgICAgICAgICAgICAgICAg ICAgaWYgKCFnaW1wUGx1Z2luKSB7Ci0rICAgICAgICAgICAgICAgICAgICBpZiAoIUFwcDo6Z2V0 KCkuaXNHaW1wUGx1Z2luKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlQXNQcmVz c2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gCi0gICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKLSAKLSAgICAgICAgICAgICAgICAgY2FzZSBHREtfS0VZX2I6Ci0tICAgICAg ICAgICAgICAgICAgICBpZiAoIWdpbXBQbHVnaW4gJiYgIXNpbXBsZUVkaXRvcikgewotKyAgICAg ICAgICAgICAgICAgICAgaWYgKCFBcHA6OmdldCgpLmlzR2ltcFBsdWdpbigpICYmICFBcHA6Omdl dCgpLmlzU2ltcGxlRWRpdG9yKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZUlt Z1ByZXNzZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAKLSAgICAgICAgICAgICAgICAg ICAgIHJldHVybiB0cnVlOwotIAotICAgICAgICAgICAgICAgICBjYXNlIEdES19LRVlfZToKLS0g ICAgICAgICAgICAgICAgICAgIGlmICghZ2ltcFBsdWdpbikgewotKyAgICAgICAgICAgICAgICAg ICAgaWYgKCFBcHA6OmdldCgpLmlzR2ltcFBsdWdpbigpKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgc2VuZFRvRXh0ZXJuYWxQcmVzc2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0g Ci1AQCAtMTk2Miw3ICsxOTcxLDcgQEAgYm9vbCBFZGl0b3JQYW5lbDo6aGFuZGxlU2hvcnRjdXRL ZXkgKEdka0V2ZW50S2V5KiBldmVudCkKLSAgICAgaWYgKHNoaWZ0KSB7Ci0gICAgICAgICBzd2l0 Y2ggKGV2ZW50LT5rZXl2YWwpIHsKLSAgICAgICAgICAgICBjYXNlIEdES19LRVlfRjM6IC8vIG9w ZW4gUHJldmlvdXMgaW1hZ2UgZnJvbSBFZGl0b3IncyBwZXJzcGVjdGl2ZQotLSAgICAgICAgICAg ICAgICBpZiAoIXNpbXBsZUVkaXRvciAmJiBmUGFuZWwgJiYgIWZuYW1lLmVtcHR5KCkpIHsKLSsg ICAgICAgICAgICAgICAgaWYgKCFBcHA6OmdldCgpLmlzU2ltcGxlRWRpdG9yKCkgJiYgZlBhbmVs ICYmICFmbmFtZS5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICBFZGl0b3JQYW5lbDo6 b3BlblByZXZpb3VzRWRpdG9ySW1hZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0 cnVlOwotICAgICAgICAgICAgICAgICB9Ci1AQCAtMTk3MCw3ICsxOTc5LDcgQEAgYm9vbCBFZGl0 b3JQYW5lbDo6aGFuZGxlU2hvcnRjdXRLZXkgKEdka0V2ZW50S2V5KiBldmVudCkKLSAgICAgICAg ICAgICAgICAgYnJlYWs7IC8vIHRvIGF2b2lkIGdjYyBjb21wbGFpbgotIAotICAgICAgICAgICAg IGNhc2UgR0RLX0tFWV9GNDogLy8gb3BlbiBuZXh0IGltYWdlIGZyb20gRWRpdG9yJ3MgcGVyc3Bl Y3RpdmUKLS0gICAgICAgICAgICAgICAgaWYgKCFzaW1wbGVFZGl0b3IgJiYgZlBhbmVsICYmICFm bmFtZS5lbXB0eSgpKSB7Ci0rICAgICAgICAgICAgICAgIGlmICghQXBwOjpnZXQoKS5pc1NpbXBs ZUVkaXRvcigpICYmIGZQYW5lbCAmJiAhZm5hbWUuZW1wdHkoKSkgewotICAgICAgICAgICAgICAg ICAgICAgRWRpdG9yUGFuZWw6Om9wZW5OZXh0RWRpdG9ySW1hZ2UoKTsKLSAgICAgICAgICAgICAg ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICB9Ci1AQCAtMTk4Nyw3ICsxOTk2 LDcgQEAgYm9vbCBFZGl0b3JQYW5lbDo6aGFuZGxlU2hvcnRjdXRLZXkgKEdka0V2ZW50S2V5KiBl dmVudCkKLSAgICAgICAgIHJldHVybiB0cnVlOwotICAgICB9Ci0gCi0tICAgIGlmICghc2ltcGxl RWRpdG9yICYmIGZQYW5lbCkgewotKyAgICBpZiAoIUFwcDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3Io KSAmJiBmUGFuZWwpIHsKLSAgICAgICAgIGlmIChmUGFuZWwtPmhhbmRsZVNob3J0Y3V0S2V5IChl dmVudCkpIHsKLSAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgIH0KLUBAIC0yMDYw LDcgKzIwNjksNyBAQCBib29sIEVkaXRvclBhbmVsOjppZGxlX2ltYWdlU2F2ZWQgKFByb2dyZXNz Q29ubmVjdG9yPGludD4gKnBjLCBydGVuZ2luZTo6SUltYWdlZgotICAgICAgICAgaWYgKHNmLnNh dmVQYXJhbXMpIHsKLSAgICAgICAgICAgICAvLyBXZSBrZWVwIHRoZSBleHRlbnNpb24gdG8gYXZv aWQgb3ZlcndyaXRpbmcgdGhlIHByb2ZpbGUgd2hlbiB3ZSBoYXZlCi0gICAgICAgICAgICAgLy8g dGhlIHNhbWUgb3V0cHV0IGZpbGVuYW1lIHdpdGggZGlmZmVyZW50IGV4dGVuc2lvbgotLSAgICAg ICAgICAgIHBwYXJhbXMuc2F2ZSAoZm5hbWUgKyAiLm91dCIgKyBwYXJhbUZpbGVFeHRlbnNpb24p OwotKyAgICAgICAgICAgIHBwYXJhbXMuc2F2ZSAoZm5hbWUgKyAiLm91dCIgKyBBcHA6OlBBUkFN X0ZJTEVfRVhURU5TSU9OKTsKLSAgICAgICAgIH0KLSAgICAgfSBlbHNlIHsKLSAgICAgICAgIGVy cm9yIChNICgiTUFJTl9NU0dfQ0FOTk9UU0FWRSIpLCBmbmFtZSk7Ci1AQCAtMjA3NSw3ICsyMDg0 LDcgQEAgYm9vbCBFZGl0b3JQYW5lbDo6aWRsZV9pbWFnZVNhdmVkIChQcm9ncmVzc0Nvbm5lY3Rv cjxpbnQ+ICpwYywgcnRlbmdpbmU6OklJbWFnZWYKLSAgICAgc2V0UHJvZ3Jlc3NTdGF0ZSAoZmFs c2UpOwotIAotICAgICBkZWxldGUgcGM7Ci0tICAgIFNvdW5kTWFuYWdlcjo6cGxheVNvdW5kQXN5 bmMgKG9wdGlvbnMuc25kQmF0Y2hRdWV1ZURvbmUpOwotKyAgICBTb3VuZE1hbmFnZXI6OnBsYXlT b3VuZEFzeW5jIChBcHA6OmdldCgpLm9wdGlvbnMoKS5zbmRCYXRjaFF1ZXVlRG9uZSk7Ci0gICAg IGlzUHJvY2Vzc2luZyA9IGZhbHNlOwotICAgICByZXR1cm4gZmFsc2U7Ci0gfQotQEAgLTIwOTEs NyArMjEwMCw3IEBAIEJhdGNoUXVldWVFbnRyeSogRWRpdG9yUGFuZWw6OmNyZWF0ZUJhdGNoUXVl dWVFbnRyeSAoKQotICAgICBpc3JjLT5nZXRJbWFnZVNvdXJjZSgpLT5nZXRGdWxsU2l6ZSAoZnVs bFcsIGZ1bGxILCBwcGFyYW1zLmNvYXJzZS5yb3RhdGUgPT0gOTAgfHwgcHBhcmFtcy5jb2Fyc2Uu cm90YXRlID09IDI3MCA/IFRSX1I5MCA6IFRSX05PTkUpOwotICAgICBpbnQgcHJldmggPSBCYXRj aFF1ZXVlOjpjYWxjTWF4VGh1bWJuYWlsSGVpZ2h0KCk7Ci0gICAgIGludCBwcmV2dyA9IGludCAo KHNpemVfdClmdWxsVyAqIChzaXplX3QpcHJldmggLyAoc2l6ZV90KWZ1bGxIKTsKLS0gICAgcmV0 dXJuIG5ldyBCYXRjaFF1ZXVlRW50cnkgKGpvYiwgcHBhcmFtcywgb3BlblRobS0+Z2V0RmlsZU5h bWUoKSwgcHJldncsIHByZXZoLCBvcGVuVGhtLCBvcHRpb25zLm92ZXJ3cml0ZU91dHB1dEZpbGUp OwotKyAgICByZXR1cm4gbmV3IEJhdGNoUXVldWVFbnRyeSAoam9iLCBwcGFyYW1zLCBvcGVuVGht LT5nZXRGaWxlTmFtZSgpLCBwcmV2dywgcHJldmgsIG9wZW5UaG0sIEFwcDo6Z2V0KCkub3B0aW9u cygpLm92ZXJ3cml0ZU91dHB1dEZpbGUpOwotIH0KLSAKLSAKLUBAIC0yMTA4LDYgKzIxMTcsNyBA QCB2b2lkIEVkaXRvclBhbmVsOjpzYXZlQXNQcmVzc2VkICgpCi0gICAgIFNhdmVBc0RpYWxvZyog c2F2ZUFzRGlhbG9nOwotICAgICBhdXRvIHRvcGxldmVsID0gc3RhdGljX2Nhc3Q8R3RrOjpXaW5k b3cqPiAoZ2V0X3RvcGxldmVsICgpKTsKLSAKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0 KCkubXV0X29wdGlvbnMoKTsKLSAgICAgaWYgKEdsaWI6OmZpbGVfdGVzdCAob3B0aW9ucy5sYXN0 U2F2ZUFzUGF0aCwgR2xpYjo6RklMRV9URVNUX0lTX0RJUikpIHsKLSAgICAgICAgIHNhdmVBc0Rp YWxvZyA9IG5ldyBTYXZlQXNEaWFsb2cgKG9wdGlvbnMubGFzdFNhdmVBc1BhdGgsIHRvcGxldmVs KTsKLSAgICAgfSBlbHNlIHsKLUBAIC0yMjE4LDcgKzIyMjgsNyBAQCB2b2lkIEVkaXRvclBhbmVs OjpzZW5kVG9FeHRlcm5hbCgpCi0gICAgIC8vIGRldmVsb3AgaW1hZ2UKLSAgICAgcnRlbmdpbmU6 OnByb2NwYXJhbXM6OlByb2NQYXJhbXMgcHBhcmFtczsKLSAgICAgaXBjLT5nZXRQYXJhbXMgKCZw cGFyYW1zKTsKLS0gICAgaWYgKG9wdGlvbnMuZWRpdG9yX2J5cGFzc19vdXRwdXRfcHJvZmlsZSkg ewotKyAgICBpZiAoQXBwOjpnZXQoKS5vcHRpb25zKCkuZWRpdG9yX2J5cGFzc19vdXRwdXRfcHJv ZmlsZSkgewotICAgICAgICAgcHBhcmFtcy5pY20ub3V0cHV0UHJvZmlsZSA9IHJ0ZW5naW5lOjpw cm9jcGFyYW1zOjpDb2xvck1hbmFnZW1lbnRQYXJhbXM6Ok5vUHJvZmlsZVN0cmluZzsKLSAgICAg fQotIAotQEAgLTIyNDEsNiArMjI1MSw3IEBAIHZvaWQgRWRpdG9yUGFuZWw6OnNlbmRUb0V4dGVy bmFsKCkKLSB2b2lkIEVkaXRvclBhbmVsOjpzZW5kVG9FeHRlcm5hbENoYW5nZWQoaW50KQotIHsK LSAgICAgaW50IGluZGV4ID0gc2VuZF90b19leHRlcm5hbC0+Z2V0U2VsZWN0ZWQoKTsKLSsgICAg YXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgaWYgKGluZGV4 ID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA9PSBvcHRpb25zLmV4dGVybmFs RWRpdG9ycy5zaXplKCkpIHsKLSAgICAgICAgIGluZGV4ID0gLTE7Ci0gICAgIH0KLUBAIC0yMjUy LDYgKzIyNjMsNyBAQCB2b2lkIEVkaXRvclBhbmVsOjpzZW5kVG9FeHRlcm5hbENoYW5nZWQoaW50 KQotIAotIHZvaWQgRWRpdG9yUGFuZWw6OnNlbmRUb0V4dGVybmFsUHJlc3NlZCgpCi0gewotKyAg ICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGlmIChv cHRpb25zLmV4dGVybmFsRWRpdG9ySW5kZXggPT0gLTEpIHsKLSAgICAgICAgIC8vICJPdGhlciIg ZXh0ZXJuYWwgZWRpdG9yLiBTaG93IGFwcCBjaG9vc2VyIGRpYWxvZyB0byBsZXQgdXNlciBwaWNr LgotICAgICAgICAgUlRBcHBDaG9vc2VyRGlhbG9nICpkaWFsb2cgPSBnZXRBcHBDaG9vc2VyRGlh bG9nKCk7Ci1AQCAtMjI3OSw3ICsyMjkxLDcgQEAgYm9vbCBFZGl0b3JQYW5lbDo6c2F2ZUltbWVk aWF0ZWx5IChjb25zdCBHbGliOjp1c3RyaW5nICZmaWxlbmFtZSwgY29uc3QgU2F2ZUZvcm0KLSAK LSAgICAgaW50IGVyciA9IDA7Ci0gCi0tICAgIGlmIChnaW1wUGx1Z2luKSB7Ci0rICAgIGlmIChB cHA6OmdldCgpLmlzR2ltcFBsdWdpbigpKSB7Ci0gICAgICAgICBlcnIgPSBpbWctPnNhdmVBc1RJ RkYgKGZpbGVuYW1lLCAzMiwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgIH0gZWxzZSBpZiAoc2YuZm9ybWF0 ID09ICJ0aWYiKSB7Ci0gICAgICAgICBlcnIgPSBpbWctPnNhdmVBc1RJRkYgKGZpbGVuYW1lLCBz Zi50aWZmQml0cywgc2YudGlmZkZsb2F0LCBzZi50aWZmVW5jb21wcmVzc2VkLCBzZi5iaWdUaWZm KTsKLUBAIC0yMjk4LDIxICsyMzEwLDIxIEBAIGJvb2wgRWRpdG9yUGFuZWw6OnNhdmVJbW1lZGlh dGVseSAoY29uc3QgR2xpYjo6dXN0cmluZyAmZmlsZW5hbWUsIGNvbnN0IFNhdmVGb3JtCi0gCi0g dm9pZCBFZGl0b3JQYW5lbDo6b3BlblByZXZpb3VzRWRpdG9ySW1hZ2UoKQotIHsKLS0gICAgaWYg KCFzaW1wbGVFZGl0b3IgJiYgZlBhbmVsICYmICFmbmFtZS5lbXB0eSgpKSB7Ci0rICAgIGlmICgh QXBwOjpnZXQoKS5pc1NpbXBsZUVkaXRvcigpICYmIGZQYW5lbCAmJiAhZm5hbWUuZW1wdHkoKSkg ewotICAgICAgICAgZlBhbmVsLT5maWxlQ2F0YWxvZy0+b3Blbk5leHRQcmV2aW91c0VkaXRvcklt YWdlIChmbmFtZSwgZmFsc2UsIE5BVl9QUkVWSU9VUyk7Ci0gICAgIH0KLSB9Ci0gCi0gdm9pZCBF ZGl0b3JQYW5lbDo6b3Blbk5leHRFZGl0b3JJbWFnZSgpCi0gewotLSAgICBpZiAoIXNpbXBsZUVk aXRvciAmJiBmUGFuZWwgJiYgIWZuYW1lLmVtcHR5KCkpIHsKLSsgICAgaWYgKCFBcHA6OmdldCgp LmlzU2ltcGxlRWRpdG9yKCkgJiYgZlBhbmVsICYmICFmbmFtZS5lbXB0eSgpKSB7Ci0gICAgICAg ICBmUGFuZWwtPmZpbGVDYXRhbG9nLT5vcGVuTmV4dFByZXZpb3VzRWRpdG9ySW1hZ2UgKGZuYW1l LCBmYWxzZSwgTkFWX05FWFQpOwotICAgICB9Ci0gfQotIAotIHZvaWQgRWRpdG9yUGFuZWw6OnN5 bmNGaWxlQnJvd3NlcigpICAgLy8gc3luY2hyb25pemUgZmlsZWJyb3dzZXIgd2l0aCBpbWFnZSBp biBFZGl0b3IKLSB7Ci0tICAgIGlmICghc2ltcGxlRWRpdG9yICYmIGZQYW5lbCAmJiAhZm5hbWUu ZW1wdHkoKSkgewotKyAgICBpZiAoIUFwcDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSAmJiBmUGFu ZWwgJiYgIWZuYW1lLmVtcHR5KCkpIHsKLSAgICAgICAgIGZQYW5lbC0+ZmlsZUNhdGFsb2ctPnNl bGVjdEltYWdlIChmbmFtZSwgZmFsc2UpOwotICAgICB9Ci0gfQotQEAgLTIzMzYsNiArMjM0OCw3 IEBAIHZvaWQgRWRpdG9yUGFuZWw6OnNldEV4dGVybmFsRWRpdG9yQ2hhbmdlZFNpZ25hbChFeHRl cm5hbEVkaXRvckNoYW5nZWRTaWduYWwgKnNpCi0gCi0gdm9pZCBFZGl0b3JQYW5lbDo6aGlzdG9n cmFtUHJvZmlsZV90b2dnbGVkKCkKLSB7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgp Lm11dF9vcHRpb25zKCk7Ci0gICAgIG9wdGlvbnMucnRTZXR0aW5ncy5IaXN0b2dyYW1Xb3JraW5n ID0gdG9nZ2xlSGlzdG9ncmFtUHJvZmlsZS0+Z2V0X2FjdGl2ZSgpOwotICAgICBjb2xvck1nbXRU b29sQmFyLT51cGRhdGVIaXN0b2dyYW0oKTsKLSB9Ci1AQCAtMjM0Niw2ICsyMzU5LDcgQEAgYm9v bCBFZGl0b3JQYW5lbDo6aWRsZV9zZW5kVG9HaW1wICggUHJvZ3Jlc3NDb25uZWN0b3I8cnRlbmdp bmU6OklJbWFnZWZsb2F0Kj4gKnAKLSAgICAgcnRlbmdpbmU6OklJbWFnZWZsb2F0KiBpbWcgPSBw Yy0+cmV0dXJuVmFsdWUoKTsKLSAgICAgZGVsZXRlIHBjOwotIAotKyAgICBjb25zdCBhdXRvJiBv cHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGlmIChpbWcpIHsKLSAgICAgICAg IC8vIGdldCBmaWxlIG5hbWUgYmFzZQotICAgICAgICAgR2xpYjo6dXN0cmluZyBzaG9ydG5hbWUg PSByZW1vdmVFeHRlbnNpb24oR2xpYjo6cGF0aF9nZXRfYmFzZW5hbWUoZm5hbWUpKTsKLUBAIC0y NDc3LDYgKzI0OTEsNyBAQCB2b2lkIEVkaXRvclBhbmVsOjpvbkFwcENob29zZXJEaWFsb2dSZXNw b25zZShpbnQgcmVzcG9uc2VJZCkKLSAKLSB2b2lkIEVkaXRvclBhbmVsOjp1cGRhdGVFeHRlcm5h bEVkaXRvclNlbGVjdGlvbigpCi0gewotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpn ZXQoKS5vcHRpb25zKCk7Ci0gICAgIGludCBpbmRleCA9IHNlbmRfdG9fZXh0ZXJuYWwtPmdldFNl bGVjdGVkKCk7Ci0gICAgIGlmIChpbmRleCA+PSAwICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihp bmRleCkgPT0gb3B0aW9ucy5leHRlcm5hbEVkaXRvcnMuc2l6ZSgpKSB7Ci0gICAgICAgICBpbmRl eCA9IC0xOwotQEAgLTI4MTYsNiArMjgzMSw3IEBAIHZvaWQgRWRpdG9yUGFuZWw6OnVwZGF0ZVRQ VlNjcm9sbGJhciAoYm9vbCBoaWRlKQotIAotIHZvaWQgRWRpdG9yUGFuZWw6OnVwZGF0ZUhpc3Rv Z3JhbVBvc2l0aW9uIChpbnQgb2xkUG9zaXRpb24sIGludCBuZXdQb3NpdGlvbikKLSB7Ci0rICAg IGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAKLSAgICAgc3dp dGNoIChuZXdQb3NpdGlvbikgewotICAgICAgICAgY2FzZSAwOgotZGlmZiAtLWdpdCBhL3J0Z3Vp L2VkaXR3aW5kb3cuY2MgYi9ydGd1aS9lZGl0d2luZG93LmNjCi1pbmRleCBjZTM5ZjVkNmYuLmY0 ODE5OWIwMyAxMDA2NDQKLS0tLSBhL3J0Z3VpL2VkaXR3aW5kb3cuY2MKLSsrKyBiL3J0Z3VpL2Vk aXR3aW5kb3cuY2MKLUBAIC0yNiwxNSArMjYsMTMgQEAKLSAjaW5jbHVkZSA8Z3RrL2d0ay5oPgot ICNpbmNsdWRlICJ0aHJlYWR1dGlscy5oIgotIAotLWV4dGVybiBHbGliOjp1c3RyaW5nIGFyZ3Yw OwotLQotIC8vIENoZWNrIGlmIHRoZSBzeXN0ZW0gaGFzIG1vcmUgdGhhbiBvbmUgZGlzcGxheSBh bmQgb3B0aW9uIGlzIHNldAotIGJvb2wgRWRpdFdpbmRvdzo6aXNNdWx0aURpc3BsYXlFbmFibGVk KCkKLSB7Ci0gICAgIGNvbnN0IGF1dG8gc2NyZWVuID0gR2RrOjpTY3JlZW46OmdldF9kZWZhdWx0 KCk7Ci0gCi0gICAgIGlmIChzY3JlZW4pIHsKLS0gICAgICAgIHJldHVybiBvcHRpb25zLm11bHRp RGlzcGxheU1vZGUgPiAwICYmIHNjcmVlbi0+Z2V0X2Rpc3BsYXkoKS0+Z2V0X25fbW9uaXRvcnMo KSA+IDE7Ci0rICAgICAgICByZXR1cm4gQXBwOjpnZXQoKS5vcHRpb25zKCkubXVsdGlEaXNwbGF5 TW9kZSA+IDAgJiYgc2NyZWVuLT5nZXRfZGlzcGxheSgpLT5nZXRfbl9tb25pdG9ycygpID4gMTsK LSAgICAgfSBlbHNlIHsKLSAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhlcmUgaXMgbm8gZGVm YXVsdCBzY3JlZW4KLSAgICAgfQotQEAgLTcwLDYgKzY4LDcgQEAgRWRpdFdpbmRvdzo6RWRpdFdp bmRvdyAoUlRXaW5kb3cqIHApCi0gICAgIHNldF90aXRsZV9kZWNvcmF0ZWQoIiIpOwotICAgICBz ZXRfbW9kYWwoZmFsc2UpOwotICAgICBzZXRfcmVzaXphYmxlKHRydWUpOwotKyAgICBjb25zdCBh dXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIHNldF9kZWZhdWx0X3Np emUob3B0aW9ucy5tZW93V2lkdGgsIG9wdGlvbnMubWVvd0hlaWdodCk7Ci0gCi0gICAgIHByb3Bl cnR5X2Rlc3Ryb3lfd2l0aF9wYXJlbnQoKS5zZXRfdmFsdWUoZmFsc2UpOwotQEAgLTk2LDYgKzk1 LDcgQEAgdm9pZCBFZGl0V2luZG93OjpyZXN0b3JlV2luZG93KCkKLSAKLSAgICAgICAgIGludCBt ZW93TW9uaXRvciA9IDA7IC8vIEJ5IGRlZmF1bHQsIHNldCB0byBtYWluIG1vbml0b3IKLSAgICAg ICAgIGNvbnN0IGF1dG8gZGlzcGxheSA9IGdldF9zY3JlZW4oKS0+Z2V0X2Rpc3BsYXkoKTsKLSsg ICAgICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAKLSAg ICAgICAgIGlmIChpc011bHRpRGlzcGxheUVuYWJsZWQoKSkgewotICAgICAgICAgICAgIGlmIChv cHRpb25zLm1lb3dNb25pdG9yID49IDApIHsgLy8gVXNlIGRpc3BsYXkgZnJvbSBsYXN0IHNlc3Np b24gaWYgYXZhaWxhYmxlCi1AQCAtMTY4LDYgKzE2OCw3IEBAIHZvaWQgRWRpdFdpbmRvdzo6b25f cmVhbGl6ZSAoKQotIAotIGJvb2wgRWRpdFdpbmRvdzo6b25fY29uZmlndXJlX2V2ZW50KEdka0V2 ZW50Q29uZmlndXJlKiBldmVudCkKLSB7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgp Lm11dF9vcHRpb25zKCk7Ci0gICAgIGlmICghb3B0aW9ucy5tZW93TWF4aW1pemVkICYmICFpc0Z1 bGxzY3JlZW4gJiYgIWlzTWluaW1pemVkKSB7Ci0gICAgICAgICBnZXRfcG9zaXRpb24ob3B0aW9u cy5tZW93WCwgb3B0aW9ucy5tZW93WSk7Ci0gICAgICAgICBnZXRfc2l6ZShvcHRpb25zLm1lb3dX aWR0aCwgb3B0aW9ucy5tZW93SGVpZ2h0KTsKLUBAIC0xNzgsNiArMTc5LDcgQEAgYm9vbCBFZGl0 V2luZG93Ojpvbl9jb25maWd1cmVfZXZlbnQoR2RrRXZlbnRDb25maWd1cmUqIGV2ZW50KQotIAot IGJvb2wgRWRpdFdpbmRvdzo6b25fd2luZG93X3N0YXRlX2V2ZW50KEdka0V2ZW50V2luZG93U3Rh dGUqIGV2ZW50KQotIHsKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlv bnMoKTsKLSAgICAgLy8gUmV0cmlldmUgUlQgd2luZG93IHN0YXRlcwotICAgICBvcHRpb25zLm1l b3dNYXhpbWl6ZWQgPSBldmVudC0+bmV3X3dpbmRvd19zdGF0ZSAmIEdES19XSU5ET1dfU1RBVEVf TUFYSU1JWkVEOwotICAgICBpc01pbmltaXplZCA9IGV2ZW50LT5uZXdfd2luZG93X3N0YXRlICYg R0RLX1dJTkRPV19TVEFURV9JQ09OSUZJRUQ7Ci1AQCAtMzQ2LDYgKzM0OCw3IEBAIHZvaWQgRWRp dFdpbmRvdzo6Z2V0X3Bvc2l0aW9uKGludCYgeCwgaW50JiB5KSBjb25zdAotIAotIHZvaWQgRWRp dFdpbmRvdzo6d3JpdGVPcHRpb25zKCkKLSB7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6Omdl dCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGlmIChpc192aXNpYmxlKCkpIHsKLSAgICAgICAgIGlm IChpc011bHRpRGlzcGxheUVuYWJsZWQoKSkgewotICAgICAgICAgICAgIC8vIFJldHJpZXZlIHdp bmRvdyBtb25pdG9yIElECi1kaWZmIC0tZ2l0IGEvcnRndWkvZXhwb3J0cGFuZWwuY2MgYi9ydGd1 aS9leHBvcnRwYW5lbC5jYwotaW5kZXggNmU5YzEzZmM4Li44NDU2YzI1YWEgMTAwNjQ0Ci0tLS0g YS9ydGd1aS9leHBvcnRwYW5lbC5jYwotKysrIGIvcnRndWkvZXhwb3J0cGFuZWwuY2MKLUBAIC0x NjksNiArMTY5LDcgQEAgRXhwb3J0UGFuZWw6OkV4cG9ydFBhbmVsICgpIDogbGlzdGVuZXIgKG51 bGxwdHIpLCBvcm5hbWVudFN1cmZhY2UobmV3IFJUU3VyZmFjZSgKLSAgICAgcGFja19zdGFydCAo Kndib3gsIEd0azo6UEFDS19TSFJJTkssIDQpOwotICAgICBwYWNrX3N0YXJ0ICgqaGJveCwgR3Rr OjpQQUNLX1NIUklOSywgNCk7Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6Omdl dCgpLm9wdGlvbnMoKTsKLSAgICAgTWF4V2lkdGgtPnNldF9kaWdpdHMgKDApOwotICAgICBNYXhX aWR0aC0+c2V0X3dpZHRoX2NoYXJzICg1KTsKLSAgICAgTWF4V2lkdGgtPnNldF9tYXhfd2lkdGhf Y2hhcnMgKDUpOwotQEAgLTI1NSw2ICsyNTYsNyBAQCB2b2lkIEV4cG9ydFBhbmVsOjpTYXZlU2V0 dGluZ3NBc0RlZmF1bHQoKQotICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOyAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgIH0gd2hpbGUgKGZhbHNlKQotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpn ZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICAvLyBTYXZlIGZhc3QgZXhwb3J0IHNldHRpbmdzIHRv IG9wdGlvbnMKLSAgICAgRkVfT1BUX1NUT1JFXyAob3B0aW9ucy5mYXN0ZXhwb3J0X2J5cGFzc19z aGFycGVuaW5nLCBieXBhc3Nfc2hhcnBlbmluZy0+Z2V0X2FjdGl2ZSAgICAgICAgKCkpOwotICAg ICBGRV9PUFRfU1RPUkVfIChvcHRpb25zLmZhc3RleHBvcnRfYnlwYXNzX3NoYXJwZW5FZGdlLCBi eXBhc3Nfc2hhcnBlbkVkZ2UtPmdldF9hY3RpdmUgICAgICAgKCkpOwotQEAgLTMxOCw2ICszMjAs NyBAQCB2b2lkIEV4cG9ydFBhbmVsOjpTYXZlU2V0dGluZ3NBc0RlZmF1bHQoKQotIAotIHZvaWQg RXhwb3J0UGFuZWw6OkxvYWREZWZhdWx0U2V0dGluZ3MoKQotIHsKLSsgICAgY29uc3QgYXV0byYg b3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICAvLyBMb2FkIGZhc3QgZXhwb3J0 IHNldHRpbmdzIGZyb20gb3B0aW9ucwotICAgICBieXBhc3Nfc2hhcnBlbmluZy0+c2V0X2FjdGl2 ZSAgICAgICAgKG9wdGlvbnMuZmFzdGV4cG9ydF9ieXBhc3Nfc2hhcnBlbmluZyAgICAgICAgICk7 Ci0gICAgIGJ5cGFzc19zaGFycGVuRWRnZS0+c2V0X2FjdGl2ZSAgICAgICAob3B0aW9ucy5mYXN0 ZXhwb3J0X2J5cGFzc19zaGFycGVuRWRnZSAgICAgICAgKTsKLWRpZmYgLS1naXQgYS9ydGd1aS9l eHRwcm9nLmNjIGIvcnRndWkvZXh0cHJvZy5jYwotaW5kZXggZGMzY2I2MWI0Li44NTc5MDYyZTQg MTAwNjQ0Ci0tLS0gYS9ydGd1aS9leHRwcm9nLmNjCi0rKysgYi9ydGd1aS9leHRwcm9nLmNjCi1A QCAtMjQyLDYgKzI0Miw3IEBAIGJvb2wgRXh0UHJvZ1N0b3JlOjpvcGVuSW5HaW1wIChjb25zdCBH bGliOjp1c3RyaW5nJiBmaWxlTmFtZSkKLSB7Ci0gI2lmIGRlZmluZWQgX1dJTjMyCi0gCi0rICAg IGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgYXV0byBl eGVjdXRhYmxlID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUgKG9wdGlvbnMuZ2ltcERpciwgImJpbiIs ICJnaW1wLXdpbi1yZW1vdGUiKTsKLSAgICAgYXV0byBzdWNjZXNzID0gU2hlbGxFeGVjdXRlKCBO VUxMLCAib3BlbiIsIGV4ZWN1dGFibGUuY19zdHIoKSwgZmlsZU5hbWUuY19zdHIoKSwgTlVMTCwg U1dfU0hPV05PUk1BTCApOwotIAotQEAgLTMwMCw2ICszMDEsNyBAQCBib29sIEV4dFByb2dTdG9y ZTo6b3BlbkluR2ltcCAoY29uc3QgR2xpYjo6dXN0cmluZyYgZmlsZU5hbWUpCi0gCi0gYm9vbCBF eHRQcm9nU3RvcmU6Om9wZW5JblBob3Rvc2hvcCAoY29uc3QgR2xpYjo6dXN0cmluZyYgZmlsZU5h bWUpCi0gewotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7 Ci0gI2lmIGRlZmluZWQgX1dJTjMyCi0gCi0gICAgIGNvbnN0IGF1dG8gZXhlY3V0YWJsZSA9IEds aWI6OmJ1aWxkX2ZpbGVuYW1lKG9wdGlvbnMucHNEaXIsICJQaG90b3Nob3AuZXhlIik7Ci1AQCAt MzIxLDcgKzMyMyw3IEBAIGJvb2wgRXh0UHJvZ1N0b3JlOjpvcGVuSW5QaG90b3Nob3AgKGNvbnN0 IEdsaWI6OnVzdHJpbmcmIGZpbGVOYW1lKQotIGJvb2wgRXh0UHJvZ1N0b3JlOjpvcGVuSW5DdXN0 b21FZGl0b3IgKGNvbnN0IEdsaWI6OnVzdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBHbGliOjp1c3Ry aW5nKiBjb21tYW5kKQotIHsKLSAgICAgaWYgKCFjb21tYW5kKSB7Ci0tICAgICAgICBjb21tYW5k ID0gJihvcHRpb25zLmN1c3RvbUVkaXRvclByb2cpOwotKyAgICAgICAgY29tbWFuZCA9ICYoQXBw OjpnZXQoKS5vcHRpb25zKCkuY3VzdG9tRWRpdG9yUHJvZyk7Ci0gICAgIH0KLSAKLSAjaWYgZGVm aW5lZCBfV0lOMzIKLWRpZmYgLS1naXQgYS9ydGd1aS9maWxlYnJvd3Nlci5jYyBiL3J0Z3VpL2Zp bGVicm93c2VyLmNjCi1pbmRleCBhMTA0M2Q2NjEuLjUwMzVhZDZlMiAxMDA2NDQKLS0tLSBhL3J0 Z3VpL2ZpbGVicm93c2VyLmNjCi0rKysgYi9ydGd1aS9maWxlYnJvd3Nlci5jYwotQEAgLTUxLDcg KzUxLDcgQEAgY29uc3QgR2xpYjo6dXN0cmluZyogZ2V0T3JpZ2luYWxFeHRlbnNpb24gKGNvbnN0 IFRodW1iQnJvd3NlckVudHJ5QmFzZSogZW50cnkpCi0gICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8 R2xpYjo6dXN0cmluZz4gRXh0ZW5zaW9uVmVjdG9yOwotICAgICB0eXBlZGVmIEV4dGVuc2lvblZl Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgRXh0ZW5zaW9uSXRlcmF0b3I7Ci0gCi0tICAgIGNvbnN0IEV4 dGVuc2lvblZlY3RvciYgb3JpZ2luYWxFeHRlbnNpb25zID0gb3B0aW9ucy5wYXJzZWRFeHRlbnNp b25zOwotKyAgICBjb25zdCBFeHRlbnNpb25WZWN0b3ImIG9yaWdpbmFsRXh0ZW5zaW9ucyA9IEFw cDo6Z2V0KCkub3B0aW9ucygpLnBhcnNlZEV4dGVuc2lvbnM7Ci0gCi0gICAgIC8vIEV4dHJhY3Qg ZXh0ZW5zaW9uIGZyb20gYmFzZW5hbWUKLSAgICAgY29uc3QgR2xpYjo6dXN0cmluZyBiYXNlbmFt ZSA9IEdsaWI6OnBhdGhfZ2V0X2Jhc2VuYW1lIChlbnRyeS0+ZmlsZW5hbWUubG93ZXJjYXNlKCkp OwotQEAgLTE0OCw2ICsxNDgsNyBAQCBGaWxlQnJvd3Nlcjo6RmlsZUJyb3dzZXIgKCkgOgotICAg ICBzZXNzaW9uX2lkXyA9IDA7Ci0gCi0gICAgIFByb2ZpbGVTdG9yZTo6Z2V0SW5zdGFuY2UoKS0+ YWRkTGlzdGVuZXIodGhpcyk7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgp Lm9wdGlvbnMoKTsKLSAKLSAgICAgaW50IHAgPSAwOwotICAgICBwbWVudSA9IG5ldyBHdGs6Ok1l bnUgKCk7Ci1AQCAtNzcxLDYgKzc3Miw4IEBAIHZvaWQgRmlsZUJyb3dzZXI6Om1lbnVJdGVtQWN0 aXZhdGVkIChHdGs6Ok1lbnVJdGVtKiBtKQotICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg IH0KLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwot KwotICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1NZW51RXh0UHJvZ3Muc2l6ZSgpOyBqKysp IHsKLSAgICAgICAgIGlmIChtID09IGFtaUV4dFByb2dbal0pIHsKLSAgICAgICAgICAgICBjb25z dCBhdXRvIHBBY3QgPSBtTWVudUV4dFByb2dzW20tPmdldF9sYWJlbCgpXTsKLUBAIC04NjksNyAr ODcyLDcgQEAgdm9pZCBGaWxlQnJvd3Nlcjo6bWVudUl0ZW1BY3RpdmF0ZWQgKEd0azo6TWVudUl0 ZW0qIG0pCi0gICAgICAgICBpZiggIW1zZWxlY3RlZC5lbXB0eSgpICkgewotICAgICAgICAgICAg IHJ0ZW5naW5lOjpwcm9jcGFyYW1zOjpQcm9jUGFyYW1zIHBwID0gbXNlbGVjdGVkWzBdLT50aHVt Ym5haWwtPmdldFByb2NQYXJhbXMoKTsKLSAgICAgICAgICAgICBHdGs6OkZpbGVDaG9vc2VyRGlh bG9nIGZjIChnZXRUb3BsZXZlbFdpbmRvdyAodGhpcyksICJEYXJrIEZyYW1lIiwgR3RrOjpGSUxF X0NIT09TRVJfQUNUSU9OX09QRU4gKTsKLS0gICAgICAgICAgICBiaW5kQ3VycmVudEZvbGRlciAo ZmMsIG9wdGlvbnMubGFzdERhcmtmcmFtZURpcik7Ci0rICAgICAgICAgICAgYmluZEN1cnJlbnRG b2xkZXIgKGZjLCBBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdERhcmtmcmFtZURpcik7Ci0g ICAgICAgICAgICAgZmMuYWRkX2J1dHRvbiggTSgiR0VORVJBTF9DQU5DRUwiKSwgR3RrOjpSRVNQ T05TRV9DQU5DRUwpOwotICAgICAgICAgICAgIGZjLmFkZF9idXR0b24oIE0oIkdFTkVSQUxfQVBQ TFkiKSwgR3RrOjpSRVNQT05TRV9BUFBMWSk7Ci0gCi1AQCAtOTEzLDcgKzkxNiw3IEBAIHZvaWQg RmlsZUJyb3dzZXI6Om1lbnVJdGVtQWN0aXZhdGVkIChHdGs6Ok1lbnVJdGVtKiBtKQotICAgICAg ICAgICAgICAgICBydGVuZ2luZTo6REZNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmluaXQoIG9wdGlv bnMucnRTZXR0aW5ncy5kYXJrRnJhbWVzUGF0aCApOwotICAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgIC8vIFRhcmdldCBkaXJlY3RvcnkgY3JlYXRpb24gZmFpbGVkLCB3ZSBj bGVhciB0aGUgZGFya0ZyYW1lc1BhdGggc2V0dGluZwotLSAgICAgICAgICAgICAgICBvcHRpb25z LnJ0U2V0dGluZ3MuZGFya0ZyYW1lc1BhdGguY2xlYXIoKTsKLSsgICAgICAgICAgICAgICAgQXBw OjpnZXQoKS5tdXRfb3B0aW9ucygpLnJ0U2V0dGluZ3MuZGFya0ZyYW1lc1BhdGguY2xlYXIoKTsK LSAgICAgICAgICAgICAgICAgR2xpYjo6dXN0cmluZyBtc2dfID0gR2xpYjo6dXN0cmluZzo6Y29t cG9zZSAoTSgiTUFJTl9NU0dfUEFUSERPRVNOVEVYSVNUIiksIGVzY2FwZUh0bWxDaGFycyhvcHRp b25zLnJ0U2V0dGluZ3MuZGFya0ZyYW1lc1BhdGgpKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArICJcblxuIiArIE0oIk1BSU5fTVNHX09QRVJBVElPTkNBTkNFTExFRCIp OwotICAgICAgICAgICAgICAgICBHdGs6Ok1lc3NhZ2VEaWFsb2cgbXNnZCAobXNnXywgdHJ1ZSwg R3RrOjpNRVNTQUdFX0VSUk9SLCBHdGs6OkJVVFRPTlNfT0ssIHRydWUpOwotQEAgLTk0NSw3ICs5 NDgsNyBAQCB2b2lkIEZpbGVCcm93c2VyOjptZW51SXRlbUFjdGl2YXRlZCAoR3RrOjpNZW51SXRl bSogbSkKLSAgICAgICAgIGlmKCAhbXNlbGVjdGVkLmVtcHR5KCkgKSB7Ci0gICAgICAgICAgICAg cnRlbmdpbmU6OnByb2NwYXJhbXM6OlByb2NQYXJhbXMgcHAgPSBtc2VsZWN0ZWRbMF0tPnRodW1i bmFpbC0+Z2V0UHJvY1BhcmFtcygpOwotICAgICAgICAgICAgIEd0azo6RmlsZUNob29zZXJEaWFs b2cgZmMgKGdldFRvcGxldmVsV2luZG93ICh0aGlzKSwgIkZsYXQgRmllbGQiLCBHdGs6OkZJTEVf Q0hPT1NFUl9BQ1RJT05fT1BFTiApOwotLSAgICAgICAgICAgIGJpbmRDdXJyZW50Rm9sZGVyIChm Yywgb3B0aW9ucy5sYXN0RmxhdGZpZWxkRGlyKTsKLSsgICAgICAgICAgICBiaW5kQ3VycmVudEZv bGRlciAoZmMsIEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0RmxhdGZpZWxkRGlyKTsKLSAg ICAgICAgICAgICBmYy5hZGRfYnV0dG9uKCBNKCJHRU5FUkFMX0NBTkNFTCIpLCBHdGs6OlJFU1BP TlNFX0NBTkNFTCk7Ci0gICAgICAgICAgICAgZmMuYWRkX2J1dHRvbiggTSgiR0VORVJBTF9BUFBM WSIpLCBHdGs6OlJFU1BPTlNFX0FQUExZKTsKLSAKLUBAIC05ODksNyArOTkyLDcgQEAgdm9pZCBG aWxlQnJvd3Nlcjo6bWVudUl0ZW1BY3RpdmF0ZWQgKEd0azo6TWVudUl0ZW0qIG0pCi0gICAgICAg ICAgICAgICAgIHJ0ZW5naW5lOjpmZm0uaW5pdCggb3B0aW9ucy5ydFNldHRpbmdzLmZsYXRGaWVs ZHNQYXRoICk7Ci0gICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgLy8gVGFy Z2V0IGRpcmVjdG9yeSBjcmVhdGlvbiBmYWlsZWQsIHdlIGNsZWFyIHRoZSBmbGF0RmllbGRzUGF0 aCBzZXR0aW5nCi0tICAgICAgICAgICAgICAgIG9wdGlvbnMucnRTZXR0aW5ncy5mbGF0RmllbGRz UGF0aC5jbGVhcigpOwotKyAgICAgICAgICAgICAgICBBcHA6OmdldCgpLm11dF9vcHRpb25zKCku cnRTZXR0aW5ncy5mbGF0RmllbGRzUGF0aC5jbGVhcigpOwotICAgICAgICAgICAgICAgICBHbGli Ojp1c3RyaW5nIG1zZ18gPSBHbGliOjp1c3RyaW5nOjpjb21wb3NlIChNKCJNQUlOX01TR19QQVRI RE9FU05URVhJU1QiKSwgZXNjYXBlSHRtbENoYXJzKG9wdGlvbnMucnRTZXR0aW5ncy5mbGF0Rmll bGRzUGF0aCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIlxuXG4i ICsgTSgiTUFJTl9NU0dfT1BFUkFUSU9OQ0FOQ0VMTEVEIik7Ci0gICAgICAgICAgICAgICAgIEd0 azo6TWVzc2FnZURpYWxvZyBtc2dkIChtc2dfLCB0cnVlLCBHdGs6Ok1FU1NBR0VfRVJST1IsIEd0 azo6QlVUVE9OU19PSywgdHJ1ZSk7Ci1AQCAtMTM5Miw2ICsxMzk1LDcgQEAgYm9vbCBGaWxlQnJv d3Nlcjo6a2V5UHJlc3NlZCAoR2RrRXZlbnRLZXkqIGV2ZW50KQotIAotIHZvaWQgRmlsZUJyb3dz ZXI6OnNhdmVUaHVtYm5haWxIZWlnaHQgKGludCBoZWlnaHQpCi0gewotKyAgICBhdXRvJiBvcHRp b25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBpZiAoIW9wdGlvbnMuc2FtZVRo dW1iU2l6ZSAmJiBnZXRMb2NhdGlvbigpID09IFRITE9DX0VESVRPUikgewotICAgICAgICAgb3B0 aW9ucy50aHVtYlNpemVUYWIgPSBoZWlnaHQ7Ci0gICAgIH0gZWxzZSB7Ci1AQCAtMTQwMSw2ICsx NDA1LDcgQEAgdm9pZCBGaWxlQnJvd3Nlcjo6c2F2ZVRodW1ibmFpbEhlaWdodCAoaW50IGhlaWdo dCkKLSAKLSBpbnQgRmlsZUJyb3dzZXI6OmdldFRodW1ibmFpbEhlaWdodCAoKQotIHsKLSsgICAg Y29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICAvLyBUaGUg dXNlciBjb3VsZCBoYXZlIG1hbnVhbGx5IGZvcmNlZCB0aGUgb3B0aW9uIHRvIGEgdG9vIGJpZyB2 YWx1ZQotICAgICBpZiAoIW9wdGlvbnMuc2FtZVRodW1iU2l6ZSAmJiBnZXRMb2NhdGlvbigpID09 IFRITE9DX0VESVRPUikgewotICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHN0ZDo6bWluKG9wdGlv bnMudGh1bWJTaXplVGFiLCA4MDApLCAxMCk7Ci1AQCAtMTQxMiw2ICsxNDE3LDcgQEAgaW50IEZp bGVCcm93c2VyOjpnZXRUaHVtYm5haWxIZWlnaHQgKCkKLSB2b2lkIEZpbGVCcm93c2VyOjplbmFi bGVUYWJNb2RlKGJvb2wgZW5hYmxlKQotIHsKLSAgICAgVGh1bWJCcm93c2VyQmFzZTo6ZW5hYmxl VGFiTW9kZShlbmFibGUpOwotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5v cHRpb25zKCk7Ci0gICAgIGlmIChvcHRpb25zLmluc3BlY3RvcldpbmRvdykgewotICAgICAgICAg aWYgKGVuYWJsZSkgewotICAgICAgICAgICAgIGluc3BlY3QtPnJlbW92ZV9hY2NlbGVyYXRvcihw bWVudS0+Z2V0X2FjY2VsX2dyb3VwKCksIEdES19LRVlfZiwgKEdkazo6TW9kaWZpZXJUeXBlKTAp OwotQEAgLTE2NjksMTIgKzE2NzUsMTQgQEAgdm9pZCBGaWxlQnJvd3Nlcjo6ZnJvbVRyYXNoUmVx dWVzdGVkIChzdGQ6OnZlY3RvcjxGaWxlQnJvd3NlckVudHJ5Kj4gdGJlKQotIAotIHZvaWQgRmls ZUJyb3dzZXI6OnNvcnRNZXRob2RSZXF1ZXN0ZWQgKGludCBtZXRob2QpCi0gewotKyAgICBhdXRv JiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBvcHRpb25zLnNvcnRN ZXRob2QgPSBPcHRpb25zOjpTb3J0TWV0aG9kKG1ldGhvZCk7Ci0gICAgIHJlc29ydCAoKTsKLSB9 Ci0gCi0gdm9pZCBGaWxlQnJvd3Nlcjo6c29ydE9yZGVyUmVxdWVzdGVkIChpbnQgb3JkZXIpCi0g ewotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBv cHRpb25zLnNvcnREZXNjZW5kaW5nID0gISFvcmRlcjsKLSAgICAgcmVzb3J0ICgpOwotIH0KLUBA IC0xODAwLDcgKzE4MDgsNyBAQCB2b2lkIEZpbGVCcm93c2VyOjpvcGVuTmV4dEltYWdlKCkKLSB7 Ci0gICAgIE1ZV1JJVEVSTE9DSyhsLCBlbnRyeVJXKTsKLSAKLS0gICAgaWYgKCFmZC5lbXB0eSgp ICYmIHNlbGVjdGVkLnNpemUoKSA+IDAgJiYgIW9wdGlvbnMudGFiYmVkVUkpIHsKLSsgICAgaWYg KCFmZC5lbXB0eSgpICYmIHNlbGVjdGVkLnNpemUoKSA+IDAgJiYgIUFwcDo6Z2V0KCkub3B0aW9u cygpLnRhYmJlZFVJKSB7Ci0gICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZkLnNpemUo KSAtIDE7IGkrKykgewotICAgICAgICAgICAgIGlmIChzZWxlY3RlZFswXS0+dGh1bWJuYWlsLT5n ZXRGaWxlTmFtZSgpID09IGZkW2ldLT5maWxlbmFtZSkgeyAvLyBsb2NhdGVkIDEtc3QgaW1hZ2Ug aW4gY3VycmVudCBzZWxlY3Rpb24KLSAgICAgICAgICAgICAgICAgaWYgKGkgPCBmZC5zaXplKCkg JiYgdGJsKSB7Ci1AQCAtMTg2Myw3ICsxODcxLDcgQEAgdm9pZCBGaWxlQnJvd3Nlcjo6b3BlblBy ZXZJbWFnZSgpCi0gewotICAgICBNWVdSSVRFUkxPQ0sobCwgZW50cnlSVyk7Ci0gCi0tICAgIGlm ICghZmQuZW1wdHkoKSAmJiBzZWxlY3RlZC5zaXplKCkgPiAwICYmICFvcHRpb25zLnRhYmJlZFVJ KSB7Ci0rICAgIGlmICghZmQuZW1wdHkoKSAmJiBzZWxlY3RlZC5zaXplKCkgPiAwICYmICFBcHA6 OmdldCgpLm9wdGlvbnMoKS50YWJiZWRVSSkgewotICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7 IGkgPCBmZC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgIGlmIChzZWxlY3RlZFswXS0+dGh1 bWJuYWlsLT5nZXRGaWxlTmFtZSgpID09IGZkW2ldLT5maWxlbmFtZSkgeyAvLyBsb2NhdGVkIDEt c3QgaW1hZ2UgaW4gY3VycmVudCBzZWxlY3Rpb24KLSAgICAgICAgICAgICAgICAgaWYgKGkgPiAw ICYmIHRibCkgewotQEAgLTE5MjYsNyArMTkzNCw3IEBAIHZvaWQgRmlsZUJyb3dzZXI6OnNlbGVj dEltYWdlKGNvbnN0IEdsaWI6OnVzdHJpbmcmIGZuYW1lLCBib29sIGRvU2Nyb2xsKQotIHsKLSAg ICAgTVlXUklURVJMT0NLKGwsIGVudHJ5UlcpOwotIAotLSAgICBpZiAoIWZkLmVtcHR5KCkgJiYg IW9wdGlvbnMudGFiYmVkVUkpIHsKLSsgICAgaWYgKCFmZC5lbXB0eSgpICYmICFBcHA6OmdldCgp Lm9wdGlvbnMoKS50YWJiZWRVSSkgewotICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm ZC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgIGlmIChmbmFtZSA9PSBmZFtpXS0+ZmlsZW5h bWUgJiYgIWZkW2ldLT5maWx0ZXJlZCkgewotICAgICAgICAgICAgICAgICAvLyBtYXRjaGluZyBm aWxlIGZvdW5kIGZvciBzeW5jCi1AQCAtMjA1OCw2ICsyMDY2LDggQEAgdm9pZCBGaWxlQnJvd3Nl cjo6dXBkYXRlUHJvZmlsZUxpc3QoKQotIAotICAgICBzdWJNZW51TGlzdFswXSA9IEd0azo6bWFu YWdlIChuZXcgR3RrOjpNZW51ICgpKTsgLy8gYWRkaW5nIHRoZSByb290IHN1Ym1lbnUKLSAKLSsg ICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotKwotICAgICAv LyBpdGVyYXRlIHRoZSBwcm9maWxlIHN0b3JlJ3MgcHJvZmlsZSBsaXN0Ci0gICAgIGZvciAoc2l6 ZV90IGkgPSAwOyBpIDwgcHJvZkVudHJpZXMtPnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAvLyBj cmVhdGUgYSBuZXcgbGFiZWwgZm9yIHRoZSBjdXJyZW50IGVudHJ5IChiZSBpdCBhIGZvbGRlciBv ciBmaWxlKQotQEAgLTIxNDksNyArMjE1OSw3IEBAIHZvaWQgRmlsZUJyb3dzZXI6Om9wZW5SZXF1 ZXN0ZWQoIHN0ZDo6dmVjdG9yPEZpbGVCcm93c2VyRW50cnkqPiBtc2VsZWN0ZWQpCi0gewotICAg ICBzdGQ6OnZlY3RvcjxUaHVtYm5haWwqPiBlbnRyaWVzOwotICAgICAvLyBpbiBTaW5nbGUgRWRp dG9yIE1vZGUgb3BlbiBvbmx5IGxhc3Qgc2VsZWN0ZWQgaW1hZ2UKLS0gICAgc2l6ZV90IG9wZW5T dGFydCA9IG9wdGlvbnMudGFiYmVkVUkgPyAwIDogKCBtc2VsZWN0ZWQuc2l6ZSgpID4gMCA/IG1z ZWxlY3RlZC5zaXplKCkgLSAxIDogMCk7Ci0rICAgIHNpemVfdCBvcGVuU3RhcnQgPSBBcHA6Omdl dCgpLm9wdGlvbnMoKS50YWJiZWRVSSA/IDAgOiAoIG1zZWxlY3RlZC5zaXplKCkgPiAwID8gbXNl bGVjdGVkLnNpemUoKSAtIDEgOiAwKTsKLSAKLSAgICAgZm9yIChzaXplX3QgaSA9IG9wZW5TdGFy dDsgaSA8IG1zZWxlY3RlZC5zaXplKCk7IGkrKykgewotICAgICAgICAgZW50cmllcy5wdXNoX2Jh Y2sgKG1zZWxlY3RlZFtpXS0+dGh1bWJuYWlsKTsKLWRpZmYgLS1naXQgYS9ydGd1aS9maWxlYnJv d3NlcmVudHJ5LmNjIGIvcnRndWkvZmlsZWJyb3dzZXJlbnRyeS5jYwotaW5kZXggODVlYzBmYWQz Li5iYjY3MmVmZGEgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9maWxlYnJvd3NlcmVudHJ5LmNjCi0rKysg Yi9ydGd1aS9maWxlYnJvd3NlcmVudHJ5LmNjCi1AQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgRmls ZUJyb3dzZXJFbnRyeTo6cmVmcmVzaFF1aWNrVGh1bWJuYWlsSW1hZ2UgKCkKLSAgICAgfQotIAot ICAgICAvLyBPbmx5IG1ha2UgYSAoc2xvdykgcHJvY2Vzc2VkIHByZXZpZXcgaWYgdGhlIHBpY3R1 cmUgaGFzIGJlZW4gZWRpdGVkIGF0IGFsbAotLSAgICBib29sIHVwZ3JhZGVfdG9fcHJvY2Vzc2Vk ID0gKCFvcHRpb25zLmludGVybmFsVGh1bWJJZlVudG91Y2hlZCB8fCB0aHVtYm5haWwtPmlzUFBh cmFtc1ZhbGlkKCkpOwotKyAgICBib29sIHVwZ3JhZGVfdG9fcHJvY2Vzc2VkID0gKCFBcHA6Omdl dCgpLm9wdGlvbnMoKS5pbnRlcm5hbFRodW1iSWZVbnRvdWNoZWQgfHwgdGh1bWJuYWlsLT5pc1BQ YXJhbXNWYWxpZCgpKTsKLSAgICAgdGh1bWJJbWFnZVVwZGF0ZXItPmFkZCh0aGlzLCAmdXBkYXRl cHJpb3JpdHksIHVwZ3JhZGVfdG9fcHJvY2Vzc2VkLCBmYWxzZSwgdGhpcyk7Ci0gfQotIAotQEAg LTE3Niw3ICsxNzYsNyBAQCB2b2lkIEZpbGVCcm93c2VyRW50cnk6OmN1c3RvbUJhY2tCdWZmZXJV cGRhdGUgKENhaXJvOjpSZWZQdHI8Q2Fpcm86OkNvbnRleHQ+IGMpCi0gICAgICAgICAgICAgZHJh d0Nyb3AgKGMsIHByZXgsIHByZXksIHByZXcsIHByZWgsIDAsIDAsIHNjYWxlLCAqY3JvcFBhcmFt cywgdHJ1ZSwgZmFsc2UpOwotICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICBydGVuZ2lu ZTo6cHJvY3BhcmFtczo6Q3JvcFBhcmFtcyBjcGFyYW1zID0gdGh1bWJuYWlsLT5nZXRQcm9jUGFy YW1zKCkuY3JvcDsKLS0gICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuY3JvcEd1aWRlcykgewot KyAgICAgICAgICAgIHN3aXRjaCAoQXBwOjpnZXQoKS5vcHRpb25zKCkuY3JvcEd1aWRlcykgewot ICAgICAgICAgICAgIGNhc2UgT3B0aW9uczo6Q1JPUF9HVUlERV9OT05FOgotICAgICAgICAgICAg ICAgICBjcGFyYW1zLmd1aWRlID0gcnRlbmdpbmU6OnByb2NwYXJhbXM6OkNyb3BQYXJhbXM6Okd1 aWRlOjpOT05FOwotICAgICAgICAgICAgICAgICBicmVhazsKLUBAIC0yOTYsNyArMjk2LDcgQEAg Ym9vbCBGaWxlQnJvd3NlckVudHJ5Ojptb3Rpb25Ob3RpZnkgKGludCB4LCBpbnQgeSkKLSAKLSAg ICAgSW5zcGVjdG9yKiBpbnNwZWN0b3IgPSBwYXJlbnQtPmdldEluc3BlY3RvcigpOwotIAotLSAg ICBpZiAoaW5zcGVjdG9yICYmIGluc3BlY3Rvci0+aXNBY3RpdmUoKSAmJiAoIXBhcmVudC0+aXNJ blRhYk1vZGUoKSB8fCBvcHRpb25zLmluc3BlY3RvcldpbmRvdykpIHsKLSsgICAgaWYgKGluc3Bl Y3RvciAmJiBpbnNwZWN0b3ItPmlzQWN0aXZlKCkgJiYgKCFwYXJlbnQtPmlzSW5UYWJNb2RlKCkg fHwgQXBwOjpnZXQoKS5vcHRpb25zKCkuaW5zcGVjdG9yV2luZG93KSkgewotICAgICAgICAgY29u c3QgcnRlbmdpbmU6OkNvb3JkMkQgY29vcmQoZ2V0UG9zSW5JbWdTcGFjZSh4LCB5KSk7Ci0gCi0g ICAgICAgICBpZiAoY29vcmQueCAhPSAtMS4pIHsKLWRpZmYgLS1naXQgYS9ydGd1aS9maWxlY2F0 YWxvZy5jYyBiL3J0Z3VpL2ZpbGVjYXRhbG9nLmNjCi1pbmRleCBjZTIyYmJmZDguLjlkNGFjYzYy NCAxMDA2NDQKLS0tLSBhL3J0Z3VpL2ZpbGVjYXRhbG9nLmNjCi0rKysgYi9ydGd1aS9maWxlY2F0 YWxvZy5jYwotQEAgLTQ4LDYgKzQ4LDgzIEBACi0gCi0gdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLSAK LStuYW1lc3BhY2UgewotKwotK3ZvaWQgZ2V0RmlsZXNSZWN1cnNpdmVseSgKLSsgICAgY29uc3Qg R2xpYjo6dXN0cmluZyAmZGlyX3BhdGgsCi0rICAgIGludCBtYXhfZGVwdGgsCi0rICAgIGludCAm ZGlyX3F1b3RhLAotKyAgICBzdGQ6OnZlY3RvcjxHbGliOjp1c3RyaW5nPiAmZmlsZV9uYW1lcywK LSsgICAgc3RkOjp2ZWN0b3I8R2xpYjo6UmVmUHRyPEdpbzo6RmlsZT4+ICpkaXJlY3Rvcmllc19l eHBsb3JlZCkKLSt7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlv bnMoKTsKLSsgICAgdHJ5IHsKLSsgICAgICAgIGNvbnN0IGF1dG8gZGlyID0gR2lvOjpGaWxlOjpj cmVhdGVfZm9yX3BhdGgoZGlyX3BhdGgpOwotKwotKyAgICAgICAgc3RhdGljIGNvbnN0IGF1dG8g ZW51bWVyYXRlX2F0dHJzID0KLSsgICAgICAgICAgICBzdGQ6OnN0cmluZyhHX0ZJTEVfQVRUUklC VVRFX1NUQU5EQVJEX05BTUUpICsgIiwiICsKLSsgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRF X1NUQU5EQVJEX1RZUEUgKyAiLCIgKwotKyAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RB TkRBUkRfSVNfSElEREVOICsgIiwiICsKLSsgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NU QU5EQVJEX1NZTUxJTktfVEFSR0VUOwotKyAgICAgICAgYXV0byBlbnVtZXJhdG9yID0gZGlyLT5l bnVtZXJhdGVfY2hpbGRyZW4oCi0rICAgICAgICAgICAgZW51bWVyYXRlX2F0dHJzLAotKyAgICAg ICAgICAgIG9wdGlvbnMuYnJvd3NlUmVjdXJzaXZlRm9sbG93TGlua3MKLSsgICAgICAgICAgICAg ICAgPyBHaW86OkZpbGVRdWVyeUluZm9GbGFnczo6RklMRV9RVUVSWV9JTkZPX05PTkUKLSsgICAg ICAgICAgICAgICAgOiBHaW86OkZpbGVRdWVyeUluZm9GbGFnczo6RklMRV9RVUVSWV9JTkZPX05P Rk9MTE9XX1NZTUxJTktTKTsKLSsKLSsgICAgICAgIGlmIChkaXJlY3Rvcmllc19leHBsb3JlZCkg ewotKyAgICAgICAgICAgIGRpcmVjdG9yaWVzX2V4cGxvcmVkLT5wdXNoX2JhY2soZGlyKTsKLSsg ICAgICAgIH0KLSsKLSsgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0rICAgICAgICAgICAgdHJ5IHsK LSsgICAgICAgICAgICAgICAgY29uc3QgYXV0byBmaWxlID0gZW51bWVyYXRvci0+bmV4dF9maWxl KCk7Ci0rICAgICAgICAgICAgICAgIGlmICghZmlsZSkgewotKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0rICAgICAgICAgICAgICAgIH0KLSsKLSsgICAgICAgICAgICAgICAgaWYgKCFvcHRp b25zLmZiU2hvd0hpZGRlbiAmJiBmaWxlLT5pc19oaWRkZW4oKSkgewotKyAgICAgICAgICAgICAg ICAgICAgY29udGludWU7Ci0rICAgICAgICAgICAgICAgIH0KLSsKLSsgICAgICAgICAgICAgICAg aWYgKGZpbGUtPmdldF9maWxlX3R5cGUoKSA9PSBHaW86OkZJTEVfVFlQRV9ESVJFQ1RPUlkpIHsK LSsgICAgICAgICAgICAgICAgICAgIGlmIChtYXhfZGVwdGggPiAwICYmIGRpcl9xdW90YSA+IDAp IHsKLSsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbGliOjp1c3RyaW5nIGNoaWxkX2Rp cl9wYXRoID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoZGlyX3BhdGgsIGZpbGUtPmdldF9uYW1lKCkp OwotKyAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGVzUmVjdXJzaXZlbHkoY2hpbGRfZGly X3BhdGgsIG1heF9kZXB0aCAtIDEsIC0tZGlyX3F1b3RhLCBmaWxlX25hbWVzLCBkaXJlY3Rvcmll c19leHBsb3JlZCk7Ci0rICAgICAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKLSsgICAgICAgICAgICAgICAgfQotKwotKyAgICAgICAgICAgICAgICBjb25z dCBHbGliOjp1c3RyaW5nIGZuYW1lID0gZmlsZS0+Z2V0X25hbWUoKTsKLSsgICAgICAgICAgICAg ICAgY29uc3QgYXV0byBsYXN0ZG90ID0gZm5hbWUuZmluZF9sYXN0X29mKCcuJyk7Ci0rCi0rICAg ICAgICAgICAgICAgIGlmIChsYXN0ZG90ID49IGZuYW1lLmxlbmd0aCgpIC0gMSkgewotKyAgICAg ICAgICAgICAgICAgICAgY29udGludWU7Ci0rICAgICAgICAgICAgICAgIH0KLSsKLSsgICAgICAg ICAgICAgICAgY29uc3QgYXV0byYgZXh0ZW5zaW9ucyA9IG9wdGlvbnMucGFyc2VkRXh0ZW5zaW9u c1NldDsKLSsgICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbnMuZmluZChmbmFtZS5zdWJzdHIo bGFzdGRvdCArIDEpLmxvd2VyY2FzZSgpKSA9PSBleHRlbnNpb25zLmVuZCgpKSB7Ci0rICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAgICAgICAgICAgfQotKwotKyAgICAgICAg ICAgICAgICBmaWxlX25hbWVzLmVtcGxhY2VfYmFjayhHbGliOjpidWlsZF9maWxlbmFtZShkaXJf cGF0aCwgZm5hbWUpKTsKLSsgICAgICAgICAgICB9IGNhdGNoIChjb25zdCBHbGliOjpFeGNlcHRp b24mIGV4Y2VwdGlvbikgewotKyAgICAgICAgICAgICAgICBpZiAocnRlbmdpbmU6OnNldHRpbmdz LT52ZXJib3NlKSB7Ci0rICAgICAgICAgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgZXhjZXB0aW9u LndoYXQoKSA8PCBzdGQ6OmVuZGw7Ci0rICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICB9 Ci0rICAgICAgICB9Ci0rCi0rICAgIH0gY2F0Y2ggKGNvbnN0IEdsaWI6OkV4Y2VwdGlvbiYgZXhj ZXB0aW9uKSB7Ci0rICAgICAgICBpZiAocnRlbmdpbmU6OnNldHRpbmdzLT52ZXJib3NlKSB7Ci0r ICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gbGlzdCBkaXJlY3RvcnkgXCIiIDw8 IGRpcl9wYXRoIDw8ICJcIjogIiA8PCBleGNlcHRpb24ud2hhdCgpIDw8IHN0ZDo6ZW5kbDsKLSsg ICAgICAgIH0KLSsgICAgfQotK30KLSsKLSsKLSt9IC8vIG5hbWVzcGFjZQotKwotIEZpbGVDYXRh bG9nOjpGaWxlQ2F0YWxvZyAoQ29hcnNlUGFuZWwqIGNwLCBUb29sQmFyKiB0YiwgRmlsZVBhbmVs KiBmaWxlcGFuZWwpIDoKLSAgICAgZmlsZXBhbmVsKGZpbGVwYW5lbCksCi0gICAgIHNlbGVjdGVk RGlyZWN0b3J5SWQoMSksCi1AQCAtMTM2LDYgKzIxMyw4IEBAIEZpbGVDYXRhbG9nOjpGaWxlQ2F0 YWxvZyAoQ29hcnNlUGFuZWwqIGNwLCBUb29sQmFyKiB0YiwgRmlsZVBhbmVsKiBmaWxlcGFuZWwp IDoKLSAgICAgUXVlcnktPnNpZ25hbF9hY3RpdmF0ZSgpLmNvbm5lY3QgKHNpZ2M6Om1lbV9mdW4o KnRoaXMsICZGaWxlQ2F0YWxvZzo6ZXhlY3V0ZVF1ZXJ5KSk7IC8vcmVzcG9uZCB0byB0aGUgRW50 ZXIga2V5Ci0gICAgIFF1ZXJ5LT5zaWduYWxfa2V5X3ByZXNzX2V2ZW50KCkuY29ubmVjdChzaWdj OjptZW1fZnVuKCp0aGlzLCAmRmlsZUNhdGFsb2c6OlF1ZXJ5X2tleV9wcmVzc2VkKSk7Ci0gCi0r ICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSsKLSAgICAg Ly8gaWYgTk9UIGEgc2luZ2xlIHJvdyB0b29sYmFyCi0gICAgIGlmICghb3B0aW9ucy5GaWxlQnJv d3NlclRvb2xiYXJTaW5nbGVSb3cpIHsKLSAgICAgICAgIGhiVG9vbEJhcjFTVEIgPSBHdGs6Om1h bmFnZShuZXcgTXlTY3JvbGxlZFRvb2xiYXIoKSk7Ci1AQCAtNTIxLDYgKzYwMCw3IEBAIGJvb2wg RmlsZUNhdGFsb2c6OmNhcHR1cmVfZXZlbnQoR2RrRXZlbnRCdXR0b24qIGV2ZW50KQotIAotIHZv aWQgRmlsZUNhdGFsb2c6OmV4aWZJbmZvQnV0dG9uVG9nZ2xlZCgpCi0gewotKyAgICBhdXRvJiBv cHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBpZiAoaW5UYWJNb2RlKSB7 Ci0gICAgICAgICBvcHRpb25zLmZpbG1TdHJpcFNob3dGaWxlTmFtZXMgPSAgZXhpZkluZm8tPmdl dF9hY3RpdmUoKTsKLSAgICAgfSBlbHNlIHsKLUBAIC01NzcsNzggKzY1Nyw5IEBAIHZvaWQgRmls ZUNhdGFsb2c6OmNsb3NlRGlyICgpCi0gCi0gc3RkOjp2ZWN0b3I8R2xpYjo6dXN0cmluZz4gRmls ZUNhdGFsb2c6OmdldEZpbGVMaXN0KHN0ZDo6dmVjdG9yPEdsaWI6OlJlZlB0cjxHaW86OkZpbGU+ PiAqZGlyc19leHBsb3JlZCkKLSB7Ci0tCi0gICAgIHN0ZDo6dmVjdG9yPEdsaWI6OnVzdHJpbmc+ IG5hbWVzOwotIAotLSAgICBjb25zdCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGV4dGVuc2lvbnMg PSBvcHRpb25zLnBhcnNlZEV4dGVuc2lvbnNTZXQ7Ci0tCi0tICAgIHN0YXRpYyB2b2lkICgqZ2V0 RmlsZXNSZWN1cnNpdmVseSkoY29uc3QgR2xpYjo6dXN0cmluZyAmLCBpbnQsIGludCAmLCBzdGQ6 OnZlY3RvcjxHbGliOjp1c3RyaW5nPiAmLCBzdGQ6OnZlY3RvcjxHbGliOjpSZWZQdHI8R2lvOjpG aWxlPj4gKikgPSBbXShjb25zdCBHbGliOjp1c3RyaW5nICZkaXJfcGF0aCwgaW50IG1heF9kZXB0 aCwgaW50ICZkaXJfcXVvdGEsIHN0ZDo6dmVjdG9yPEdsaWI6OnVzdHJpbmc+ICZmaWxlX25hbWVz LCBzdGQ6OnZlY3RvcjxHbGliOjpSZWZQdHI8R2lvOjpGaWxlPj4gKiBkaXJlY3Rvcmllc19leHBs b3JlZCkgewotLSAgICAgICAgdHJ5IHsKLS0KLS0gICAgICAgICAgICBjb25zdCBhdXRvIGRpciA9 IEdpbzo6RmlsZTo6Y3JlYXRlX2Zvcl9wYXRoKGRpcl9wYXRoKTsKLS0KLS0gICAgICAgICAgICBz dGF0aWMgY29uc3QgYXV0byBlbnVtZXJhdGVfYXR0cnMgPQotLSAgICAgICAgICAgICAgICBzdGQ6 OnN0cmluZyhHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX05BTUUpICsgIiwiICsKLS0gICAgICAg ICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9UWVBFICsgIiwiICsKLS0gICAgICAg ICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9JU19ISURERU4gKyAiLCIgKwotLSAg ICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NZTUxJTktfVEFSR0VUOwot LSAgICAgICAgICAgIGF1dG8gZW51bWVyYXRvciA9IGRpci0+ZW51bWVyYXRlX2NoaWxkcmVuKAot LSAgICAgICAgICAgICAgICBlbnVtZXJhdGVfYXR0cnMsCi0tICAgICAgICAgICAgICAgIG9wdGlv bnMuYnJvd3NlUmVjdXJzaXZlRm9sbG93TGlua3MKLS0gICAgICAgICAgICAgICAgICAgID8gR2lv OjpGaWxlUXVlcnlJbmZvRmxhZ3M6OkZJTEVfUVVFUllfSU5GT19OT05FCi0tICAgICAgICAgICAg ICAgICAgICA6IEdpbzo6RmlsZVF1ZXJ5SW5mb0ZsYWdzOjpGSUxFX1FVRVJZX0lORk9fTk9GT0xM T1dfU1lNTElOS1MpOwotLQotLSAgICAgICAgICAgIGlmIChkaXJlY3Rvcmllc19leHBsb3JlZCkg ewotLSAgICAgICAgICAgICAgICBkaXJlY3Rvcmllc19leHBsb3JlZC0+cHVzaF9iYWNrKGRpcik7 Ci0tICAgICAgICAgICAgfQotLQotLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0tICAgICAg ICAgICAgICAgIHRyeSB7Ci0tICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGZpbGUgPSBl bnVtZXJhdG9yLT5uZXh0X2ZpbGUoKTsKLS0gICAgICAgICAgICAgICAgICAgIGlmICghZmlsZSkg ewotLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotLSAgICAgICAgICAgICAgICAgICAg fQotLQotLSAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLmZiU2hvd0hpZGRlbiAmJiBm aWxlLT5pc19oaWRkZW4oKSkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot LSAgICAgICAgICAgICAgICAgICAgfQotLQotLSAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGUt PmdldF9maWxlX3R5cGUoKSA9PSBHaW86OkZJTEVfVFlQRV9ESVJFQ1RPUlkpIHsKLS0gICAgICAg ICAgICAgICAgICAgICAgICBpZiAobWF4X2RlcHRoID4gMCAmJiBkaXJfcXVvdGEgPiAwKSB7Ci0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdsaWI6OnVzdHJpbmcgY2hpbGRfZGly X3BhdGggPSBHbGliOjpidWlsZF9maWxlbmFtZShkaXJfcGF0aCwgZmlsZS0+Z2V0X25hbWUoKSk7 Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpbGVzUmVjdXJzaXZlbHkoY2hpbGRf ZGlyX3BhdGgsIG1heF9kZXB0aCAtIDEsIC0tZGlyX3F1b3RhLCBmaWxlX25hbWVzLCBkaXJlY3Rv cmllc19leHBsb3JlZCk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwotLSAgICAgICAgICAgICAgICAgICAgfQotLQotLSAgICAg ICAgICAgICAgICAgICAgY29uc3QgR2xpYjo6dXN0cmluZyBmbmFtZSA9IGZpbGUtPmdldF9uYW1l KCk7Ci0tICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGxhc3Rkb3QgPSBmbmFtZS5maW5k X2xhc3Rfb2YoJy4nKTsKLS0KLS0gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0ZG90ID49IGZu YW1lLmxlbmd0aCgpIC0gMSkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot LSAgICAgICAgICAgICAgICAgICAgfQotLQotLSAgICAgICAgICAgICAgICAgICAgaWYgKGV4dGVu c2lvbnMuZmluZChmbmFtZS5zdWJzdHIobGFzdGRvdCArIDEpLmxvd2VyY2FzZSgpKSA9PSBleHRl bnNpb25zLmVuZCgpKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0tICAg ICAgICAgICAgICAgICAgICB9Ci0tCi0tICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWVzLmVt cGxhY2VfYmFjayhHbGliOjpidWlsZF9maWxlbmFtZShkaXJfcGF0aCwgZm5hbWUpKTsKLS0gICAg ICAgICAgICAgICAgfSBjYXRjaCAoR2xpYjo6RXhjZXB0aW9uJiBleGNlcHRpb24pIHsKLS0gICAg ICAgICAgICAgICAgICAgIGlmIChydGVuZ2luZTo6c2V0dGluZ3MtPnZlcmJvc2UpIHsKLS0gICAg ICAgICAgICAgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgZXhjZXB0aW9uLndoYXQoKSA8PCBzdGQ6 OmVuZGw7Ci0tICAgICAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAgICAgIH0KLS0gICAg ICAgICAgICB9Ci0tCi0tICAgICAgICB9IGNhdGNoIChHbGliOjpFeGNlcHRpb24mIGV4Y2VwdGlv bikgewotLQotLSAgICAgICAgICAgIGlmIChydGVuZ2luZTo6c2V0dGluZ3MtPnZlcmJvc2UpIHsK LS0gICAgICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gbGlzdCBkaXJlY3Rvcnkg XCIiIDw8IGRpcl9wYXRoIDw8ICJcIjogIiA8PCBleGNlcHRpb24ud2hhdCgpIDw8IHN0ZDo6ZW5k bDsKLS0gICAgICAgICAgICB9Ci0tCi0tICAgICAgICB9Ci0tICAgIH07Ci0tCi0rICAgIGNvbnN0 IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaW50IGRpcnNfbGVm dCA9IG9wdGlvbnMuYnJvd3NlUmVjdXJzaXZlID8gb3B0aW9ucy5icm93c2VSZWN1cnNpdmVNYXhE aXJzIDogMDsKLSAgICAgZ2V0RmlsZXNSZWN1cnNpdmVseShzZWxlY3RlZERpcmVjdG9yeSwgb3B0 aW9ucy5icm93c2VSZWN1cnNpdmVEZXB0aCwgZGlyc19sZWZ0LCBuYW1lcywgZGlyc19leHBsb3Jl ZCk7Ci0gCi1AQCAtNzM4LDYgKzc0OSw3IEBAIHZvaWQgRmlsZUNhdGFsb2c6OmVuYWJsZVRhYk1v ZGUoYm9vbCBlbmFibGUpCi0gewotICAgICBpblRhYk1vZGUgPSBlbmFibGU7Ci0gCi0rICAgIGNv bnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaWYgKGVuYWJs ZSkgewotICAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0ZpbG1TdHJpcFRvb2xCYXIpIHsKLSAgICAg ICAgICAgICBzaG93VG9vbEJhcigpOwotQEAgLTc2OSw2ICs3ODEsNyBAQCB2b2lkIEZpbGVDYXRh bG9nOjpfcmVmcmVzaFByb2dyZXNzQmFyICgpCi0gICAgIGlmICghaW5UYWJNb2RlICYmICghcHJl dmlld3NUb0xvYWQgfHwgc3RkOjpmbG9vcigxMDAuZiAqIHByZXZpZXdzTG9hZGVkIC8gcHJldmll d3NUb0xvYWQpICE9IHN0ZDo6Zmxvb3IoMTAwLmYgKiAocHJldmlld3NMb2FkZWQgLSAxKSAvIHBy ZXZpZXdzVG9Mb2FkKSkpIHsKLSAgICAgICAgIEdUaHJlYWRMb2NrIGxvY2s7IC8vIEFsbCBHVUkg YWNjZXNzIGZyb20gaWRsZV9hZGQgY2FsbGJhY2tzIG9yIHNlcGFyYXRlIHRocmVhZCBIQVZFIHRv IGJlIHByb3RlY3RlZAotIAotKyAgICAgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0 KCkub3B0aW9ucygpOwotICAgICAgICAgaWYgKCFwcm9ncmVzc0ltYWdlIHx8ICFwcm9ncmVzc0xh YmVsKSB7Ci0gICAgICAgICAgICAgLy8gY3JlYXRlIHRhYiBsYWJlbCBvbmNlCi0gICAgICAgICAg ICAgR3RrOjpOb3RlYm9vayAqbmIgPSAoR3RrOjpOb3RlYm9vayAqKShmaWxlcGFuZWwtPmdldF9w YXJlbnQoKSk7Ci1AQCAtOTgxLDcgKzk5NCw3IEBAIHZvaWQgRmlsZUNhdGFsb2c6Ol9vcGVuSW1h Z2UoY29uc3Qgc3RkOjp2ZWN0b3I8VGh1bWJuYWlsKj4mIHRtYikKLSAgICAgICAgIGZvciAoc2l6 ZV90IGkgPSAwOyBpIDwgdG1iLnNpemUoKSAmJiBjb250aW51ZVRvTG9hZDsgaSsrKSB7Ci0gICAg ICAgICAgICAgLy8gT3BlbiB0aGUgaW1hZ2UgaGVyZSwgYW5kIHN0b3AgaWYgaW4gU2luZ2xlIEVk aXRvciBtb2RlLCBvciBpZiBhbiBpbWFnZSBjb3VsZG4ndAotICAgICAgICAgICAgIC8vIGJlIG9w ZW5lZCwgd291bGQgaXQgYmUgYmVjYXVzZSB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IG9yIGJlY2F1 c2Ugb2YgbGFjayBvZiBSQU0KLS0gICAgICAgICAgICBpZiggIShsaXN0ZW5lci0+ZmlsZVNlbGVj dGVkICh0bWJbaV0pKSAmJiAhb3B0aW9ucy50YWJiZWRVSSApIHsKLSsgICAgICAgICAgICBpZigg IShsaXN0ZW5lci0+ZmlsZVNlbGVjdGVkICh0bWJbaV0pKSAmJiAhQXBwOjpnZXQoKS5vcHRpb25z KCkudGFiYmVkVUkgKSB7Ci0gICAgICAgICAgICAgICAgIGNvbnRpbnVlVG9Mb2FkID0gZmFsc2U7 Ci0gICAgICAgICAgICAgfQotIAotQEAgLTEwMzksMTcgKzEwNTIsMTggQEAgdm9pZCBGaWxlQ2F0 YWxvZzo6ZGVsZXRlUmVxdWVzdGVkKGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVCcm93c2VyRW50cnkq PiYgdGJlLCBib28KLSAgICAgICAgICAgICAvLyBkZWxldGUgZnJvbSBmaWxlIHN5c3RlbQotICAg ICAgICAgICAgIDo6Z19yZW1vdmUgKGZuYW1lLmNfc3RyICgpKTsKLSAgICAgICAgICAgICAvLyBk ZWxldGUgcGFyYW1maWxlIGlmIGZvdW5kCi0tICAgICAgICAgICAgOjpnX3JlbW92ZSAoKGZuYW1l ICsgcGFyYW1GaWxlRXh0ZW5zaW9uKS5jX3N0ciAoKSk7Ci0tICAgICAgICAgICAgOjpnX3JlbW92 ZSAoKHJlbW92ZUV4dGVuc2lvbihmbmFtZSkgKyBwYXJhbUZpbGVFeHRlbnNpb24pLmNfc3RyICgp KTsKLSsgICAgICAgICAgICA6OmdfcmVtb3ZlICgoZm5hbWUgKyBBcHA6OlBBUkFNX0ZJTEVfRVhU RU5TSU9OKS5jX3N0ciAoKSk7Ci0rICAgICAgICAgICAgOjpnX3JlbW92ZSAoKHJlbW92ZUV4dGVu c2lvbihmbmFtZSkgKyBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OKS5jX3N0ciAoKSk7Ci0gICAg ICAgICAgICAgLy8gZGVsZXRlIC50aG0gZmlsZQotICAgICAgICAgICAgIDo6Z19yZW1vdmUgKChy ZW1vdmVFeHRlbnNpb24oZm5hbWUpICsgIi50aG0iKS5jX3N0ciAoKSk7Ci0gICAgICAgICAgICAg OjpnX3JlbW92ZSAoKHJlbW92ZUV4dGVuc2lvbihmbmFtZSkgKyAiLlRITSIpLmNfc3RyICgpKTsK LSAKLSAgICAgICAgICAgICBpZiAoaW5jbEJhdGNoUHJvY2Vzc2VkKSB7Ci0rICAgICAgICAgICAg ICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgICAg ICAgICAgICAgR2xpYjo6dXN0cmluZyBwcm9jZk5hbWUgPSBHbGliOjp1c3RyaW5nOjpjb21wb3Nl ICgiJTEuJTIiLCBCYXRjaFF1ZXVlOjpjYWxjQXV0b0ZpbGVOYW1lQmFzZShmbmFtZSksIG9wdGlv bnMuc2F2ZUZvcm1hdEJhdGNoLmZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgIDo6Z19yZW1vdmUg KHByb2NmTmFtZS5jX3N0ciAoKSk7Ci0gCi0tICAgICAgICAgICAgICAgIEdsaWI6OnVzdHJpbmcg cHJvY2ZOYW1lUGFyYW1GaWxlID0gR2xpYjo6dXN0cmluZzo6Y29tcG9zZSAoIiUxLiUyLm91dCUz IiwgQmF0Y2hRdWV1ZTo6Y2FsY0F1dG9GaWxlTmFtZUJhc2UoZm5hbWUpLCBvcHRpb25zLnNhdmVG b3JtYXRCYXRjaC5mb3JtYXQsIHBhcmFtRmlsZUV4dGVuc2lvbik7Ci0rICAgICAgICAgICAgICAg IEdsaWI6OnVzdHJpbmcgcHJvY2ZOYW1lUGFyYW1GaWxlID0gR2xpYjo6dXN0cmluZzo6Y29tcG9z ZSAoIiUxLiUyLm91dCUzIiwgQmF0Y2hRdWV1ZTo6Y2FsY0F1dG9GaWxlTmFtZUJhc2UoZm5hbWUp LCBvcHRpb25zLnNhdmVGb3JtYXRCYXRjaC5mb3JtYXQsIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJ T04pOwotICAgICAgICAgICAgICAgICA6OmdfcmVtb3ZlIChwcm9jZk5hbWVQYXJhbUZpbGUuY19z dHIgKCkpOwotICAgICAgICAgICAgIH0KLSAKLUBAIC0xMDc4LDYgKzEwOTIsNyBAQCB2b2lkIEZp bGVDYXRhbG9nOjpjb3B5TW92ZVJlcXVlc3RlZChjb25zdCBzdGQ6OnZlY3RvcjxGaWxlQnJvd3Nl ckVudHJ5Kj4mIHRiZSwgYgotICAgICBHdGs6OkZpbGVDaG9vc2VyRGlhbG9nIGZjIChnZXRUb3Bs ZXZlbFdpbmRvdyAodGhpcyksIGZjX3RpdGxlLCBHdGs6OkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0VM RUNUX0ZPTERFUiApOwotICAgICBmYy5hZGRfYnV0dG9uKCBNKCJHRU5FUkFMX0NBTkNFTCIpLCBH dGs6OlJFU1BPTlNFX0NBTkNFTCk7Ci0gICAgIGZjLmFkZF9idXR0b24oIE0oIkdFTkVSQUxfT0si KSwgR3RrOjpSRVNQT05TRV9PSyk7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11 dF9vcHRpb25zKCk7Ci0gICAgIGlmICghb3B0aW9ucy5sYXN0Q29weU1vdmVQYXRoLmVtcHR5KCkg JiYgR2xpYjo6ZmlsZV90ZXN0KG9wdGlvbnMubGFzdENvcHlNb3ZlUGF0aCwgR2xpYjo6RklMRV9U RVNUX0lTX0RJUikpIHsKLSAgICAgICAgIGZjLnNldF9jdXJyZW50X2ZvbGRlcihvcHRpb25zLmxh c3RDb3B5TW92ZVBhdGgpOwotICAgICB9IGVsc2UgewotQEAgLTExMDUsNyArMTEyMCw3IEBAIHZv aWQgRmlsZUNhdGFsb2c6OmNvcHlNb3ZlUmVxdWVzdGVkKGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVC cm93c2VyRW50cnkqPiYgdGJlLCBiCi0gCi0gICAgICAgICAgICAgLy8gY29uc3RydWN0ICBkZXN0 aW5hdGlvbiBGaWxlIFBhdGhzCi0gICAgICAgICAgICAgR2xpYjo6dXN0cmluZyBkZXN0X2ZQYXRo ID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUgKG9wdGlvbnMubGFzdENvcHlNb3ZlUGF0aCwgZm5hbWUp OwotLSAgICAgICAgICAgIEdsaWI6OnVzdHJpbmcgZGVzdF9mUGF0aF9wYXJhbSA9IGRlc3RfZlBh dGggKyBwYXJhbUZpbGVFeHRlbnNpb247Ci0rICAgICAgICAgICAgR2xpYjo6dXN0cmluZyBkZXN0 X2ZQYXRoX3BhcmFtID0gZGVzdF9mUGF0aCArIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT047Ci0g Ci0gICAgICAgICAgICAgaWYgKG1vdmVSZXF1ZXN0ZWQgJiYgKHNyY19EaXIgPT0gb3B0aW9ucy5s YXN0Q29weU1vdmVQYXRoKSkgewotICAgICAgICAgICAgICAgICBjb250aW51ZTsKLUBAIC0xMTM4 LDE3ICsxMTUzLDE3IEBAIHZvaWQgRmlsZUNhdGFsb2c6OmNvcHlNb3ZlUmVxdWVzdGVkKGNvbnN0 IHN0ZDo6dmVjdG9yPEZpbGVCcm93c2VyRW50cnkqPiYgdGJlLCBiCi0gCi0gCi0gICAgICAgICAg ICAgICAgICAgICAvLyBhdHRlbXB0IHRvIGNvcHkvbW92ZSBwYXJhbUZpbGUgb25seSBpZiBpdCBl eGlzdCBuZXh0IHRvIHRoZSBzcmMKLS0gICAgICAgICAgICAgICAgICAgIEdsaWI6OlJlZlB0cjxH aW86OkZpbGU+IHNjcl9wYXJhbSA9IEdpbzo6RmlsZTo6Y3JlYXRlX2Zvcl9wYXRoICggIHNyY19m UGF0aCArIHBhcmFtRmlsZUV4dGVuc2lvbiApOwotKyAgICAgICAgICAgICAgICAgICAgR2xpYjo6 UmVmUHRyPEdpbzo6RmlsZT4gc2NyX3BhcmFtID0gR2lvOjpGaWxlOjpjcmVhdGVfZm9yX3BhdGgg KCAgc3JjX2ZQYXRoICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTiApOwotIAotLSAgICAgICAg ICAgICAgICAgICAgaWYgKEdsaWI6OmZpbGVfdGVzdCggc3JjX2ZQYXRoICsgcGFyYW1GaWxlRXh0 ZW5zaW9uLCBHbGliOjpGSUxFX1RFU1RfRVhJU1RTKSkgewotKyAgICAgICAgICAgICAgICAgICAg aWYgKEdsaWI6OmZpbGVfdGVzdCggc3JjX2ZQYXRoICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lP TiwgR2xpYjo6RklMRV9URVNUX0VYSVNUUykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICBH bGliOjpSZWZQdHI8R2lvOjpGaWxlPiBkZXN0X3BhcmFtID0gR2lvOjpGaWxlOjpjcmVhdGVfZm9y X3BhdGggKCBkZXN0X2ZQYXRoX3BhcmFtKTsKLSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAv LyBjb3B5L21vdmUgcGFyYW1GaWxlIHRvIGRlc3RpbmF0aW9uCi0gICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKG1vdmVSZXF1ZXN0ZWQpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKEdsaWI6OmZpbGVfdGVzdCggZGVzdF9mUGF0aCArIHBhcmFtRmlsZUV4dGVuc2lvbiwgR2xp Yjo6RklMRV9URVNUX0VYSVNUUykpIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KEdsaWI6OmZpbGVfdGVzdCggZGVzdF9mUGF0aCArIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04s IEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBwcm9maWxlIGFscmVhZHkgZ290IGNvcGllZCB0byBkZXN0aW5hdGlvbiBmcm9tIGNh Y2hlIGFmdGVyIGNhY2hlTWdyLT5yZW5hbWVFbnRyeQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gZGVsZXRlIHNvdXJjZSBwcm9maWxlIGFzIGNsZWFudXAKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6Z19yZW1vdmUgKChzcmNfZlBhdGggKyBwYXJhbUZpbGVF eHRlbnNpb24pLmNfc3RyICgpKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 Z19yZW1vdmUgKChzcmNfZlBhdGggKyBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9OKS5jX3N0ciAo KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzY3JfcGFyYW0tPm1vdmUoZGVzdF9wYXJhbSk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KLUBAIC0xMTYzLDcgKzExNzgsNyBAQCB2b2lkIEZpbGVD YXRhbG9nOjpjb3B5TW92ZVJlcXVlc3RlZChjb25zdCBzdGQ6OnZlY3RvcjxGaWxlQnJvd3NlckVu dHJ5Kj4mIHRiZSwgYgotICAgICAgICAgICAgICAgICAgICAgR2xpYjo6dXN0cmluZyBkZXN0X2Zu YW1lID0gR2xpYjo6dXN0cmluZzo6Y29tcG9zZSgiJTElMiUzJTQlNSIsIGZuYW1lX25vRXh0LCAi XyIsIGlfY29weWluZGV4LCAiLiIsIGZuYW1lX0V4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAv LyByZS1jb25zdHJ1Y3QgIGRlc3RpbmF0aW9uIEZpbGUgUGF0aHMKLSAgICAgICAgICAgICAgICAg ICAgIGRlc3RfZlBhdGggPSBHbGliOjpidWlsZF9maWxlbmFtZSAob3B0aW9ucy5sYXN0Q29weU1v dmVQYXRoLCBkZXN0X2ZuYW1lKTsKLS0gICAgICAgICAgICAgICAgICAgIGRlc3RfZlBhdGhfcGFy YW0gPSBkZXN0X2ZQYXRoICsgcGFyYW1GaWxlRXh0ZW5zaW9uOwotKyAgICAgICAgICAgICAgICAg ICAgZGVzdF9mUGF0aF9wYXJhbSA9IGRlc3RfZlBhdGggKyBBcHA6OlBBUkFNX0ZJTEVfRVhURU5T SU9OOwotICAgICAgICAgICAgICAgICAgICAgaV9jb3B5aW5kZXgrKzsKLSAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgIH0vL3doaWxlCi1AQCAtMTE4Nyw2ICsxMjAyLDggQEAgdm9pZCBG aWxlQ2F0YWxvZzo6ZGV2ZWxvcFJlcXVlc3RlZChjb25zdCBzdGQ6OnZlY3RvcjxGaWxlQnJvd3Nl ckVudHJ5Kj4mIHRiZSwgYm8KLSAgICAgICAgICAgICBUaHVtYm5haWwqIHRoID0gZmJlLT50aHVt Ym5haWw7Ci0gICAgICAgICAgICAgcnRlbmdpbmU6OnByb2NwYXJhbXM6OlByb2NQYXJhbXMgcGFy YW1zID0gdGgtPmdldFByb2NQYXJhbXMoKTsKLSAKLSsgICAgICAgICAgICBjb25zdCBhdXRvJiBv cHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0rCi0gICAgICAgICAgICAgLy8gaWYgZmFz dCBtb2RlIGlzIHNlbGVjdGVkLCBvdmVycmlkZSAoZGlzYWJsZSkgcGFyYW1zCi0gICAgICAgICAg ICAgLy8gY29udHJvbGxpbmcgdGltZSBhbmQgcmVzb3VyY2UgY29uc3VtaW5nIHRhc2tzCi0gICAg ICAgICAgICAgLy8gYW5kIGFsc28gdGhvc2Ugd2hpY2ggZWZmZWN0IGlzIG5vdCBwcm9ub3VuY2Vk IGFmdGVyIHJlZHVjaW5nIHRoZSBpbWFnZSBzaXplCi1AQCAtMTM1Miw3ICsxMzY5LDcgQEAgdm9p ZCBGaWxlQ2F0YWxvZzo6cmVuYW1lUmVxdWVzdGVkKGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVCcm93 c2VyRW50cnkqPiYgdGJlKQotIAotICAgICAgICAgICAgICAgICAgICAgaWYgKDo6Z19yZW5hbWUg KG9mbmFtZS5jX3N0ciAoKSwgbmZuYW1lLmNfc3RyICgpKSA9PSAwKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgY2FjaGVNZ3ItPnJlbmFtZUVudHJ5IChvZm5hbWUsIHRiZVtpXS0+dGh1bWJu YWlsLT5nZXRNRDUoKSwgbmZuYW1lKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICA6OmdfcmVt b3ZlKChvZm5hbWUgKyBwYXJhbUZpbGVFeHRlbnNpb24pLmNfc3RyICgpKTsKLSsgICAgICAgICAg ICAgICAgICAgICAgICA6OmdfcmVtb3ZlKChvZm5hbWUgKyBBcHA6OlBBUkFNX0ZJTEVfRVhURU5T SU9OKS5jX3N0ciAoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXJzZURpcmVjdG9y eSAoKTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgfQotQEAgLTE2 NDQsNyArMTY2MSw3IEBAIHZvaWQgRmlsZUNhdGFsb2c6OmNhdGVnb3J5QnV0dG9uVG9nZ2xlZCAo R3RrOjpUb2dnbGVCdXR0b24qIGIsIGJvb2wgaXNNb3VzZUNsaWNrCi0gCi0gdm9pZCBGaWxlQ2F0 YWxvZzo6c2hvd1JlY3Vyc2l2ZVRvZ2dsZWQoKQotIHsKLS0gICAgb3B0aW9ucy5icm93c2VSZWN1 cnNpdmUgPSBiUmVjdXJzaXZlLT5nZXRfYWN0aXZlKCk7Ci0rICAgIEFwcDo6Z2V0KCkubXV0X29w dGlvbnMoKS5icm93c2VSZWN1cnNpdmUgPSBiUmVjdXJzaXZlLT5nZXRfYWN0aXZlKCk7Ci0gICAg IHJlcGFyc2VEaXJlY3RvcnkoKTsKLSB9Ci0gCi1AQCAtMTc5MSw3ICsxODA4LDcgQEAgdm9pZCBG aWxlQ2F0YWxvZzo6cmVwYXJzZURpcmVjdG9yeSAoKQotICAgICAgICAgICAgIGZpbGVOYW1lc1Rv RGVsLnB1c2hfYmFjayhlbnRyeS0+ZmlsZW5hbWUpOwotICAgICAgICAgICAgIGZpbGVOYW1lc1Rv UmVtb3ZlLnB1c2hfYmFjayhlbnRyeS0+ZmlsZW5hbWUpOwotICAgICAgICAgfQotLSAgICAgICAg ZWxzZSBpZiAoIW9wdGlvbnMuYnJvd3NlUmVjdXJzaXZlICYmIEdsaWI6OnBhdGhfZ2V0X2Rpcm5h bWUoZW50cnktPmZpbGVuYW1lKSAhPSBzZWxlY3RlZERpcmVjdG9yeSkgewotKyAgICAgICAgZWxz ZSBpZiAoIUFwcDo6Z2V0KCkub3B0aW9ucygpLmJyb3dzZVJlY3Vyc2l2ZSAmJiBHbGliOjpwYXRo X2dldF9kaXJuYW1lKGVudHJ5LT5maWxlbmFtZSkgIT0gc2VsZWN0ZWREaXJlY3RvcnkpIHsKLSAg ICAgICAgICAgICBmaWxlTmFtZXNUb1JlbW92ZS5wdXNoX2JhY2soZW50cnktPmZpbGVuYW1lKTsK LSAgICAgICAgIH0KLSAgICAgfQotQEAgLTE4MzAsNyArMTg0Nyw3IEBAIHZvaWQgRmlsZUNhdGFs b2c6OnJlcGFyc2VEaXJlY3RvcnkgKCkKLSB2b2lkIEZpbGVDYXRhbG9nOjpvbl9kaXJfY2hhbmdl ZCAoY29uc3QgR2xpYjo6UmVmUHRyPEdpbzo6RmlsZT4mIGZpbGUsIGNvbnN0IEdsaWI6OlJlZlB0 cjxHaW86OkZpbGU+JiBvdGhlcl9maWxlLCBHaW86OkZpbGVNb25pdG9yRXZlbnQgZXZlbnRfdHlw ZSwgYm9vbCBpbnRlcm5hbCkKLSB7Ci0gCi0tICAgIGlmICgob3B0aW9ucy5oYXNfcmV0YWluZWRf ZXh0ZW50aW9uKGZpbGUtPmdldF9wYXJzZV9uYW1lKCkpCi0rICAgIGlmICgoQXBwOjpnZXQoKS5v cHRpb25zKCkuaGFzX3JldGFpbmVkX2V4dGVudGlvbihmaWxlLT5nZXRfcGFyc2VfbmFtZSgpKQot ICAgICAgICAgICAgICYmIChldmVudF90eXBlID09IEdpbzo6RklMRV9NT05JVE9SX0VWRU5UX0NS RUFURUQgfHwgZXZlbnRfdHlwZSA9PSBHaW86OkZJTEVfTU9OSVRPUl9FVkVOVF9ERUxFVEVEIHx8 IGV2ZW50X3R5cGUgPT0gR2lvOjpGSUxFX01PTklUT1JfRVZFTlRfQ0hBTkdFRCkpCi0gICAgICAg ICAgICAgIHx8IChldmVudF90eXBlID09IEdpbzo6RklMRV9NT05JVE9SX0VWRU5UX0NSRUFURUQg JiYgR2xpYjo6ZmlsZV90ZXN0KGZpbGUtPmdldF9wYXRoKCksIEdsaWI6OkZpbGVUZXN0OjpGSUxF X1RFU1RfSVNfRElSKSkKLSAgICAgICAgICAgICAgfHwgKGV2ZW50X3R5cGUgPT0gR2lvOjpGSUxF X01PTklUT1JfRVZFTlRfREVMRVRFRCAmJiBzdGQ6OmZpbmRfaWYoZGlyTW9uaXRvcnMuY2JlZ2lu KCksIGRpck1vbml0b3JzLmNlbmQoKSwgWyZmaWxlXShjb25zdCBGaWxlTW9uaXRvckluZm8gJm1v bml0b3IpIHsgcmV0dXJuIG1vbml0b3IuZmlsZVBhdGggPT0gZmlsZS0+Z2V0X3BhdGgoKTsgfSkg IT0gZGlyTW9uaXRvcnMuY2VuZCgpKSkgewotQEAgLTE4NzMsNyArMTg5MCw3IEBAIHZvaWQgRmls ZUNhdGFsb2c6OmFkZEFuZE9wZW5GaWxlIChjb25zdCBHbGliOjp1c3RyaW5nJiBmbmFtZSkKLSAK LSAgICAgICAgIGNvbnN0IGF1dG8gbGFzdGRvdCA9IGluZm8tPmdldF9uYW1lKCkuZmluZF9sYXN0 X29mKCcuJyk7Ci0gICAgICAgICBpZiAobGFzdGRvdCAhPSBHbGliOjp1c3RyaW5nOjpucG9zKSB7 Ci0tICAgICAgICAgICAgaWYgKCFvcHRpb25zLmlzX2V4dGVudGlvbl9lbmFibGVkKGluZm8tPmdl dF9uYW1lKCkuc3Vic3RyKGxhc3Rkb3QgKyAxKSkpIHsKLSsgICAgICAgICAgICBpZiAoIUFwcDo6 Z2V0KCkub3B0aW9ucygpLmlzX2V4dGVudGlvbl9lbmFibGVkKGluZm8tPmdldF9uYW1lKCkuc3Vi c3RyKGxhc3Rkb3QgKyAxKSkpIHsKLSAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg ICAgIH0KLSAgICAgICAgIH0gZWxzZSB7Ci1AQCAtMjE1Myw2ICsyMTcwLDcgQEAgdm9pZCBGaWxl Q2F0YWxvZzo6dGJMZWZ0UGFuZWxfMV90b2dnbGVkICgpCi0gewotICAgICByZW1vdmVJZlRoZXJl IChmaWxlcGFuZWwtPmRpcnBhbmVkLCBmaWxlcGFuZWwtPnBsYWNlc3BhbmVkLCBmYWxzZSk7Ci0g Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGlm ICh0YkxlZnRQYW5lbF8xLT5nZXRfYWN0aXZlKCkpIHsKLSAgICAgICAgIGZpbGVwYW5lbC0+ZGly cGFuZWQtPnBhY2sxICgqZmlsZXBhbmVsLT5wbGFjZXNwYW5lZCwgZmFsc2UsIHRydWUpOwotICAg ICAgICAgdGJMZWZ0UGFuZWxfMS0+c2V0X2ltYWdlICgqaUxlZnRQYW5lbF8xX0hpZGUpOwotQEAg LTIxNjUsNiArMjE4Myw3IEBAIHZvaWQgRmlsZUNhdGFsb2c6OnRiTGVmdFBhbmVsXzFfdG9nZ2xl ZCAoKQotIAotIHZvaWQgRmlsZUNhdGFsb2c6OnRiUmlnaHRQYW5lbF8xX3RvZ2dsZWQgKCkKLSB7 Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGlm ICh0YlJpZ2h0UGFuZWxfMS0+Z2V0X2FjdGl2ZSgpKSB7Ci0gICAgICAgICBmaWxlcGFuZWwtPnJp Z2h0Qm94LT5zaG93KCk7Ci0gICAgICAgICB0YlJpZ2h0UGFuZWxfMS0+c2V0X2ltYWdlICgqaVJp Z2h0UGFuZWxfMV9IaWRlKTsKLUBAIC0yNTA3LDYgKzI1MjYsNyBAQCBib29sIEZpbGVDYXRhbG9n OjpoYW5kbGVTaG9ydGN1dEtleSAoR2RrRXZlbnRLZXkqIGV2ZW50KQotICAgICAgICAgfQotICAg ICB9Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0g ICAgIGlmICghY3RybCB8fCAoYWx0ICYmICFvcHRpb25zLnRhYmJlZFVJKSkgewotICAgICAgICAg c3dpdGNoKGV2ZW50LT5rZXl2YWwpIHsKLSAKLWRpZmYgLS1naXQgYS9ydGd1aS9maWxlcGFuZWwu Y2MgYi9ydGd1aS9maWxlcGFuZWwuY2MKLWluZGV4IDEwMzJiNDVlMS4uZjA2OWYwOTllIDEwMDY0 NAotLS0tIGEvcnRndWkvZmlsZXBhbmVsLmNjCi0rKysgYi9ydGd1aS9maWxlcGFuZWwuY2MKLUBA IC0zMiw2ICszMiw3IEBACi0gCi0gRmlsZVBhbmVsOjpGaWxlUGFuZWwgKCkgOiBwYXJlbnQobnVs bHB0ciksIGVycm9yKDApCi0gewotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQo KS5vcHRpb25zKCk7Ci0gCi0gICAgIC8vIENvbnRhaW5zIGV2ZXJ5dGhpbmcgZXhjZXB0IGZvciB0 aGUgYmF0Y2ggVG9vbCBQYW5lbCBhbmQgdGFicyAoRmFzdCBFeHBvcnQsIEluc3BlY3QsIGV0YykK LSAgICAgZGlycGFuZWQgPSBHdGs6Om1hbmFnZSAoIG5ldyBHdGs6OlBhbmVkICgpICk7Ci1AQCAt MTg2LDYgKzE4Nyw3IEBAIHZvaWQgRmlsZVBhbmVsOjpzZXRBc3BlY3QgKCkKLSB7Ci0gICAgIGlu dCB3aW5XLCB3aW5IOwotICAgICBwYXJlbnQtPmdldF9zaXplKHdpblcsIHdpbkgpOwotKyAgICBj b25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIHBsYWNlc3Bh bmVkLT5zZXRfcG9zaXRpb24ob3B0aW9ucy5kaXJCcm93c2VySGVpZ2h0KTsKLSAgICAgZGlycGFu ZWQtPnNldF9wb3NpdGlvbihvcHRpb25zLmRpckJyb3dzZXJXaWR0aCk7Ci0gICAgIHRwY1BhbmVk LT5zZXRfcG9zaXRpb24ob3B0aW9ucy5icm93c2VyVG9vbFBhbmVsSGVpZ2h0KTsKLUBAIC0yMDYs MTcgKzIwOCwxOCBAQCB2b2lkIEZpbGVQYW5lbDo6aW5pdCAoKQotICAgICBkaXJCcm93c2VyLT5m aWxsRGlyVHJlZSAoKTsKLSAgICAgcGxhY2VzQnJvd3Nlci0+cmVmcmVzaFBsYWNlc0xpc3QgKCk7 Ci0gCi0tICAgIGlmICghYXJndjEuZW1wdHkoKSAmJiBHbGliOjpmaWxlX3Rlc3QgKGFyZ3YxLCBH bGliOjpGSUxFX1RFU1RfRVhJU1RTKSkgewotLSAgICAgICAgR2xpYjo6dXN0cmluZyBkKGFyZ3Yx KTsKLSsgICAgaWYgKCFBcHA6OmdldCgpLmFyZ3YwKCkuZW1wdHkoKSAmJiBHbGliOjpmaWxlX3Rl c3QgKEFwcDo6Z2V0KCkuYXJndjEoKSwgR2xpYjo6RklMRV9URVNUX0VYSVNUUykpIHsKLSsgICAg ICAgIEdsaWI6OnVzdHJpbmcgZChBcHA6OmdldCgpLmFyZ3YxKCkpOwotICAgICAgICAgaWYgKCFH bGliOjpmaWxlX3Rlc3QoZCwgR2xpYjo6RklMRV9URVNUX0lTX0RJUikpIHsKLSAgICAgICAgICAg ICBkID0gR2xpYjo6cGF0aF9nZXRfZGlybmFtZShkKTsKLSAgICAgICAgIH0KLSAgICAgICAgIGRp ckJyb3dzZXItPm9wZW4oZCk7Ci0gICAgIH0gZWxzZSB7Ci0rICAgICAgICBjb25zdCBhdXRvJiBv cHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgICAgICBpZiAob3B0aW9ucy5zdGFy dHVwRGlyID09IFNUQVJUVVBESVJfSE9NRSkgewotICAgICAgICAgICAgIGRpckJyb3dzZXItPm9w ZW4gKFBsYWNlc0Jyb3dzZXI6OnVzZXJQaWN0dXJlc0RpciAoKSk7Ci0gICAgICAgICB9IGVsc2Ug aWYgKG9wdGlvbnMuc3RhcnR1cERpciA9PSBTVEFSVFVQRElSX0NVUlJFTlQpIHsKLS0gICAgICAg ICAgICBkaXJCcm93c2VyLT5vcGVuIChhcmd2MCk7Ci0rICAgICAgICAgICAgZGlyQnJvd3Nlci0+ b3BlbiAoQXBwOjpnZXQoKS5hcmd2MCgpKTsKLSAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5z dGFydHVwRGlyID09IFNUQVJUVVBESVJfQ1VTVE9NIHx8IG9wdGlvbnMuc3RhcnR1cERpciA9PSBT VEFSVFVQRElSX0xBU1QpIHsKLSAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdGFydHVwUGF0aC5s ZW5ndGgoKSAmJiBHbGliOjpmaWxlX3Rlc3Qob3B0aW9ucy5zdGFydHVwUGF0aCwgR2xpYjo6RklM RV9URVNUX0VYSVNUUykgJiYgR2xpYjo6ZmlsZV90ZXN0KG9wdGlvbnMuc3RhcnR1cFBhdGgsIEds aWI6OkZJTEVfVEVTVF9JU19ESVIpKSB7Ci0gICAgICAgICAgICAgICAgIGRpckJyb3dzZXItPm9w ZW4gKG9wdGlvbnMuc3RhcnR1cFBhdGgpOwotQEAgLTI0Niw3ICsyNDksNyBAQCBib29sIEZpbGVQ YW5lbDo6ZmlsZVNlbGVjdGVkIChUaHVtYm5haWwqIHRobSkKLSAgICAgfQotIAotICAgICAvLyBD aGVjayBpZiBpdCdzIGFscmVhZHkgb3BlbiBCRUZPUkUgbG9hZGluZyB0aGUgZmlsZQotLSAgICBp ZiAob3B0aW9ucy50YWJiZWRVSSAmJiBwYXJlbnQtPnNlbGVjdEVkaXRvclBhbmVsKHRobS0+Z2V0 RmlsZU5hbWUoKSkpIHsKLSsgICAgaWYgKEFwcDo6Z2V0KCkub3B0aW9ucygpLnRhYmJlZFVJICYm IHBhcmVudC0+c2VsZWN0RWRpdG9yUGFuZWwodGhtLT5nZXRGaWxlTmFtZSgpKSkgewotICAgICAg ICAgcmV0dXJuIHRydWU7Ci0gICAgIH0KLSAKLUBAIC0yOTQsNiArMjk3LDggQEAgYm9vbCBGaWxl UGFuZWw6OmltYWdlTG9hZGVkKCBUaHVtYm5haWwqIHRobSwgUHJvZ3Jlc3NDb25uZWN0b3I8cnRl bmdpbmU6OkluaXRpYWwKLSAgICAgICAgIH0KLSAgICAgfQotIAotKyAgICBjb25zdCBhdXRvJiBv cHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0rCi0gICAgIC8vIFRoZSBwdXJwb3NlIG9m IHRoZSBwZW5kaW5nTG9hZHMgdmVjdG9yIGlzIHRvIG9wZW4gdGFicyBpbiB0aGUgc2FtZSBvcmRl ciBhcyB0aGUgbG9hZHMgd2hlcmUgaW5pdGlhdGVkLiBJdCBoYXMgbm8gZWZmZWN0IG9uIHNpbmds ZSBlZGl0b3IgbW9kZS4KLSAgICAgd2hpbGUgKHBlbmRpbmdMb2Fkcy5zaXplKCkgPiAwICYmIHBl bmRpbmdMb2Fkcy5mcm9udCgpLT5jb21wbGV0ZSkgewotICAgICAgICAgcGVuZGluZ0xvYWQgKnBs ID0gcGVuZGluZ0xvYWRzLmZyb250KCk7Ci1AQCAtMzYzLDYgKzM2OCw3IEBAIE1BWEdESUhBTkRM RVNSRUFDSEVEOgotIAotIHZvaWQgRmlsZVBhbmVsOjpzYXZlT3B0aW9ucyAoKQotIHsKLSsgICAg YXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAKLSAgICAgaW50IHdp blcsIHdpbkg7Ci0gICAgIHBhcmVudC0+Z2V0X3NpemUod2luVywgd2luSCk7Ci1kaWZmIC0tZ2l0 IGEvcnRndWkvZmlsbW5lZ2F0aXZlLmNjIGIvcnRndWkvZmlsbW5lZ2F0aXZlLmNjCi1pbmRleCA3 M2I5NDBkYTIuLmZkMmZkMjRjYyAxMDA2NDQKLS0tLSBhL3J0Z3VpL2ZpbG1uZWdhdGl2ZS5jYwot KysrIGIvcnRndWkvZmlsbW5lZ2F0aXZlLmNjCi1AQCAtNTUsNiArNTUsNyBAQCBBZGp1c3Rlciog Y3JlYXRlRXhwb25lbnRBZGp1c3RlcihBZGp1c3Rlckxpc3RlbmVyKiBsaXN0ZW5lciwgY29uc3Qg R2xpYjo6dXN0cmluZwotICAgICBhZGotPnNldEFkanVzdGVyTGlzdGVuZXIobGlzdGVuZXIpOwot ICAgICBhZGotPnNldExvZ1NjYWxlKDYsIDEsIHRydWUpOwotIAotKyAgICBjb25zdCBhdXRvJiBv cHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGFkai0+c2V0RGVsYXkoc3RkOjpt YXgob3B0aW9ucy5hZGp1c3Rlck1pbkRlbGF5LCBvcHRpb25zLmFkanVzdGVyTWF4RGVsYXkpKTsK LSAKLSAgICAgYWRqLT5zaG93KCk7Ci1AQCAtNjgsNiArNjksNyBAQCBBZGp1c3RlciogY3JlYXRl TGV2ZWxBZGp1c3RlcihBZGp1c3Rlckxpc3RlbmVyKiBsaXN0ZW5lciwgY29uc3QgR2xpYjo6dXN0 cmluZyYgbAotICAgICBhZGotPnNldEFkanVzdGVyTGlzdGVuZXIobGlzdGVuZXIpOwotIC8vICAg IGFkai0+c2V0TG9nU2NhbGUoNiwgMTAwMC4wLCB0cnVlKTsKLSAKLSsgICAgY29uc3QgYXV0byYg b3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBhZGotPnNldERlbGF5KHN0ZDo6 bWF4KG9wdGlvbnMuYWRqdXN0ZXJNaW5EZWxheSwgb3B0aW9ucy5hZGp1c3Rlck1heERlbGF5KSk7 Ci0gCi0gICAgIGFkai0+c2hvdygpOwotQEAgLTgyLDYgKzg0LDcgQEAgQWRqdXN0ZXIqIGNyZWF0 ZUJhbGFuY2VBZGp1c3RlcihBZGp1c3Rlckxpc3RlbmVyKiBsaXN0ZW5lciwgY29uc3QgR2xpYjo6 dXN0cmluZyYKLSAgICAgYWRqLT5zZXRBZGp1c3Rlckxpc3RlbmVyKGxpc3RlbmVyKTsKLSAgICAg YWRqLT5zZXRMb2dTY2FsZSg5LCAwLCB0cnVlKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9u cyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBhZGotPnNldERlbGF5KHN0ZDo6bWF4KG9w dGlvbnMuYWRqdXN0ZXJNaW5EZWxheSwgb3B0aW9ucy5hZGp1c3Rlck1heERlbGF5KSk7Ci0gCi0g ICAgIGFkai0+c2hvdygpOwotZGlmZiAtLWdpdCBhL3J0Z3VpL2ZpbG1zaW11bGF0aW9uLmNjIGIv cnRndWkvZmlsbXNpbXVsYXRpb24uY2MKLWluZGV4IGE0YTdlOWJiNy4uNzY5ZDU1ZGE2IDEwMDY0 NAotLS0tIGEvcnRndWkvZmlsbXNpbXVsYXRpb24uY2MKLSsrKyBiL3J0Z3VpL2ZpbG1zaW11bGF0 aW9uLmNjCi1AQCAtNjUsNyArNjUsNyBAQCBib29sIG5vdGlmeVNsb3dQYXJzZURpciAoY29uc3Qg c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCYgc3RhcnRlZEF0KQotIEZpbG1T aW11bGF0aW9uOjpGaWxtU2ltdWxhdGlvbigpCi0gICAgIDogICBGb2xkYWJsZVRvb2xQYW5lbCgg dGhpcywgVE9PTF9OQU1FLCBNKCJUUF9GSUxNU0lNVUxBVElPTl9MQUJFTCIpLCBmYWxzZSwgdHJ1 ZSApCi0gewotLSAgICBtX2NsdXRDb21ib0JveCA9IEd0azo6bWFuYWdlKCBuZXcgQ2x1dENvbWJv Qm94KG9wdGlvbnMuY2x1dHNEaXIpICk7Ci0rICAgIG1fY2x1dENvbWJvQm94ID0gR3RrOjptYW5h Z2UoIG5ldyBDbHV0Q29tYm9Cb3goQXBwOjpnZXQoKS5vcHRpb25zKCkuY2x1dHNEaXIpICk7Ci0g Ci0gICAgIGludCBmb3VuZENsdXRzQ291bnQgPSBtX2NsdXRDb21ib0JveC0+Zm91bmRDbHV0c0Nv dW50KCk7Ci0gCi1AQCAtMTMyLDYgKzEzMiw3IEBAIHZvaWQgRmlsbVNpbXVsYXRpb246OnJlYWQo IGNvbnN0IHJ0ZW5naW5lOjpwcm9jcGFyYW1zOjpQcm9jUGFyYW1zKiBwcCwgY29uc3QgUGFyCi0g Ci0gICAgIHNldEVuYWJsZWQocHAtPmZpbG1TaW11bGF0aW9uLmVuYWJsZWQpOwotIAotKyAgICBj b25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGlmICghcHAt PmZpbG1TaW11bGF0aW9uLmNsdXRGaWxlbmFtZS5lbXB0eSgpKSB7Ci0gICAgICAgICBtX2NsdXRD b21ib0JveC0+c2V0U2VsZWN0ZWRDbHV0KAotICAgICAgICAgICAgICFHbGliOjpwYXRoX2lzX2Fi c29sdXRlKHBwLT5maWxtU2ltdWxhdGlvbi5jbHV0RmlsZW5hbWUpCi1AQCAtMTg1LDcgKzE4Niw3 IEBAIHZvaWQgRmlsbVNpbXVsYXRpb246OndyaXRlKCBydGVuZ2luZTo6cHJvY3BhcmFtczo6UHJv Y1BhcmFtcyogcHAsIFBhcmFtc0VkaXRlZCoKLSAgICAgY29uc3QgR2xpYjo6dXN0cmluZyBjbHV0 Rk5hbWUgPSBtX2NsdXRDb21ib0JveC0+Z2V0U2VsZWN0ZWRDbHV0KCk7Ci0gCi0gICAgIGlmIChj bHV0Rk5hbWUgIT0gIk5VTEwiKSB7IC8vIFdlIGRvIG5vdCB3YW50IHRvIHNldCAiTlVMTCIgaW4g Y2x1dEZpbGVuYW1lLCBldmVuIGlmICJ1bmVkaXRlZCIKLS0gICAgICAgIHBwLT5maWxtU2ltdWxh dGlvbi5jbHV0RmlsZW5hbWUgPSBzdHJpcFByZWZpeERpcihjbHV0Rk5hbWUsIG9wdGlvbnMuY2x1 dHNEaXIpOwotKyAgICAgICAgcHAtPmZpbG1TaW11bGF0aW9uLmNsdXRGaWxlbmFtZSA9IHN0cmlw UHJlZml4RGlyKGNsdXRGTmFtZSwgQXBwOjpnZXQoKS5vcHRpb25zKCkuY2x1dHNEaXIpOwotICAg ICB9Ci0gCi0gICAgIHBwLT5maWxtU2ltdWxhdGlvbi5zdHJlbmd0aCA9IG1fc3RyZW5ndGgtPmdl dFZhbHVlKCk7Ci1AQCAtMjE0LDYgKzIxNSw3IEBAIENsdXRDb21ib0JveDo6Q2x1dENvbWJvQm94 KGNvbnN0IEdsaWI6OnVzdHJpbmcgJnBhdGgpOgotICAgICBpZiAoIWNtKSB7Ci0gICAgICAgICBj bS5yZXNldChuZXcgQ2x1dE1vZGVsKHBhdGgpKTsKLSAgICAgfQotKyAgICBjb25zdCBhdXRvJiBv cHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGlmICghY20yICYmIG9wdGlvbnMu bXVsdGlEaXNwbGF5TW9kZSkgewotICAgICAgICAgY20yLnJlc2V0KG5ldyBDbHV0TW9kZWwocGF0 aCkpOwotICAgICB9Ci1AQCAtMjM2LDcgKzIzOCw3IEBAIENsdXRDb21ib0JveDo6Q2x1dENvbWJv Qm94KGNvbnN0IEdsaWI6OnVzdHJpbmcgJnBhdGgpOgotIAotIGlubGluZSBHbGliOjpSZWZQdHI8 R3RrOjpUcmVlU3RvcmU+ICZDbHV0Q29tYm9Cb3g6Om1fbW9kZWwoKQotIHsKLS0gICAgaWYgKCFi YXRjaE1vZGUgfHwgIW9wdGlvbnMubXVsdGlEaXNwbGF5TW9kZSkgewotKyAgICBpZiAoIWJhdGNo TW9kZSB8fCAhQXBwOjpnZXQoKS5vcHRpb25zKCkubXVsdGlEaXNwbGF5TW9kZSkgewotICAgICAg ICAgcmV0dXJuIGNtLT5tX21vZGVsOwotICAgICB9IGVsc2UgewotICAgICAgICAgcmV0dXJuIGNt Mi0+bV9tb2RlbDsKLUBAIC0yNDYsNyArMjQ4LDcgQEAgaW5saW5lIEdsaWI6OlJlZlB0cjxHdGs6 OlRyZWVTdG9yZT4gJkNsdXRDb21ib0JveDo6bV9tb2RlbCgpCi0gCi0gaW5saW5lIENsdXRDb21i b0JveDo6Q2x1dENvbHVtbnMgJkNsdXRDb21ib0JveDo6bV9jb2x1bW5zKCkKLSB7Ci0tICAgIGlm ICghYmF0Y2hNb2RlIHx8ICFvcHRpb25zLm11bHRpRGlzcGxheU1vZGUpIHsKLSsgICAgaWYgKCFi YXRjaE1vZGUgfHwgIUFwcDo6Z2V0KCkub3B0aW9ucygpLm11bHRpRGlzcGxheU1vZGUpIHsKLSAg ICAgICAgIHJldHVybiBjbS0+bV9jb2x1bW5zOwotICAgICB9IGVsc2UgewotICAgICAgICAgcmV0 dXJuIGNtMi0+bV9jb2x1bW5zOwotZGlmZiAtLWdpdCBhL3J0Z3VpL2ZsYXRjdXJ2ZWVkaXRvcnN1 Ymdyb3VwLmNjIGIvcnRndWkvZmxhdGN1cnZlZWRpdG9yc3ViZ3JvdXAuY2MKLWluZGV4IGFmZDlk OGJkNi4uZmJmZWNiNmQwIDEwMDY0NAotLS0tIGEvcnRndWkvZmxhdGN1cnZlZWRpdG9yc3ViZ3Jv dXAuY2MKLSsrKyBiL3J0Z3VpL2ZsYXRjdXJ2ZWVkaXRvcnN1Ymdyb3VwLmNjCi1AQCAtNDQsNiAr NDQsNyBAQCBGbGF0Q3VydmVFZGl0b3JTdWJHcm91cDo6RmxhdEN1cnZlRWRpdG9yU3ViR3JvdXAg KEN1cnZlRWRpdG9yR3JvdXAqIHBydCwgR2xpYjo6dQotICAgICB2YWxVbmNoYW5nZWQgPSAoaW50 KUZDVF9VbmNoYW5nZWQ7Ci0gICAgIHBhcmVudCA9IHBydDsKLSAKLSsgICAgY29uc3QgYXV0byYg b3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBHdGs6OlBvc2l0aW9uVHlwZSBz aWRlU3RhcnQgPSBvcHRpb25zLmN1cnZlYmJveHBvcyA9PSAwIHx8IG9wdGlvbnMuY3VydmViYm94 cG9zID09IDIgPyBHdGs6OlBPU19MRUZUIDogR3RrOjpQT1NfVE9QOwotICAgICBHdGs6OlBvc2l0 aW9uVHlwZSBzaWRlRW5kID0gb3B0aW9ucy5jdXJ2ZWJib3hwb3MgPT0gMCB8fCBvcHRpb25zLmN1 cnZlYmJveHBvcyA9PSAyID8gR3RrOjpQT1NfUklHSFQgOiBHdGs6OlBPU19CT1RUT007Ci0gCi1k aWZmIC0tZ2l0IGEvcnRndWkvZmxhdGZpZWxkLmNjIGIvcnRndWkvZmxhdGZpZWxkLmNjCi1pbmRl eCBkMTJlMzk3MzAuLmRiOTQ1NzNkOCAxMDA2NDQKLS0tLSBhL3J0Z3VpL2ZsYXRmaWVsZC5jYwot KysrIGIvcnRndWkvZmxhdGZpZWxkLmNjCi1AQCAtMzgsNiArMzgsOCBAQCBGbGF0RmllbGQ6OkZs YXRGaWVsZCAoKSA6IEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBfRkxB VEZJRUxEX0xBQgotICAgICBhdXRvIG0gPSBQcm9jRXZlbnRNYXBwZXI6OmdldEluc3RhbmNlKCk7 Ci0gICAgIEV2RmxhdEZpZWxkRnJvbU1ldGFEYXRhID0gbS0+bmV3RXZlbnQoREFSS0ZSQU1FLCAi SElTVE9SWV9NU0dfRkZfRlJPTU1FVEFEQVRBIik7Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBB cHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0rCi0gICAgIGhiZmYgPSBHdGs6Om1hbmFnZShuZXcg R3RrOjpCb3goKSk7Ci0gICAgIGZsYXRGaWVsZEZpbGUgPSBHdGs6Om1hbmFnZShuZXcgTXlGaWxl Q2hvb3NlckJ1dHRvbihNKCJUUF9GTEFURklFTERfTEFCRUwiKSwgR3RrOjpGSUxFX0NIT09TRVJf QUNUSU9OX09QRU4pKTsKLSAgICAgYmluZEN1cnJlbnRGb2xkZXIgKCpmbGF0RmllbGRGaWxlLCBv cHRpb25zLmxhc3RGbGF0ZmllbGREaXIpOwotQEAgLTMzMiw2ICszMzQsNyBAQCB2b2lkIEZsYXRG aWVsZDo6ZmxhdEZpZWxkRmlsZUNoYW5nZWQoKQotIHZvaWQgRmxhdEZpZWxkOjpmbGF0RmllbGRG aWxlX1Jlc2V0KCkKLSB7Ci0gICAgIGZmQ2hhbmdlZCA9IHRydWU7Ci0rICAgIGNvbnN0IGF1dG8m IG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAKLSAvLyBjYXV0aW9uOiBJIGhhZCB0 byBtYWtlIHRoaXMgaGFjaywgYmVjYXVzZSBzZXRfY3VycmVudF9mb2xkZXIoKSBkb2Vzbid0IHdv cmsgY29ycmVjdGx5IQotIC8vICAgICAgICAgIEJlY2F1c2Ugc3pldmEgZG9lc24ndCBleGlzdCBz aW5jZSBoZSB3YXMgY29tbWl0dGVkIHRvIGhhcHB5IGh1bnRpbmcgZ3JvdW5kIGluIElzc3VlIDMx NgotZGlmZiAtLWdpdCBhL3J0Z3VpL2d1aXV0aWxzLmNjIGIvcnRndWkvZ3VpdXRpbHMuY2MKLWlu ZGV4IDg2NDU3NzFlZS4uNTRmMjcxZjgzIDEwMDY0NAotLS0tIGEvcnRndWkvZ3VpdXRpbHMuY2MK LSsrKyBiL3J0Z3VpL2d1aXV0aWxzLmNjCi1AQCAtMjIyLDYgKzIyMiw3IEBAIHZvaWQgZHJhd0Ny b3AgKENhaXJvOjpSZWZQdHI8Q2Fpcm86OkNvbnRleHQ+IGNyLCBpbnQgaW14LCBpbnQgaW15LCBp bnQgaW13LCBpbnQKLSAgICAgZG91YmxlIGMyeCA9IChjcGFyYW1zLnggKyBjcGFyYW1zLncgLSBz dGFydHgpICogc2NhbGUgLSAoZnVsbEltYWdlVmlzaWJsZSA/IDAuMCA6IDEuMCk7Ci0gICAgIGRv dWJsZSBjMnkgPSAoY3BhcmFtcy55ICsgY3BhcmFtcy5oIC0gc3RhcnR5KSAqIHNjYWxlIC0gKGZ1 bGxJbWFnZVZpc2libGUgPyAwLjAgOiAxLjApOwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25z ID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIC8vIGNyb3Agb3ZlcmxheSBjb2xvciwgbGlu a2VkIHdpdGggY3JvcCB3aW5kb3dzIGJhY2tncm91bmQKLSAgICAgaWYgKG9wdGlvbnMuYmdjb2xv ciA9PSAwIHx8ICF1c2VCZ0NvbG9yKSB7Ci0gICAgICAgICBjci0+c2V0X3NvdXJjZV9yZ2JhIChv cHRpb25zLmN1dE92ZXJsYXlCcnVzaFswXSwgb3B0aW9ucy5jdXRPdmVybGF5QnJ1c2hbMV0sIG9w dGlvbnMuY3V0T3ZlcmxheUJydXNoWzJdLCBvcHRpb25zLmN1dE92ZXJsYXlCcnVzaFszXSk7Ci1A QCAtNzE1LDcgKzcxNiw3IEBAIGJvb2wgTXlFeHBhbmRlcjo6b25fZW50ZXJfbGVhdmVfZW5hYmxl IChHZGtFdmVudENyb3NzaW5nKiBldmVudCkKLSAKLSB2b2lkIE15RXhwYW5kZXI6OnVwZGF0ZVN0 eWxlKCkKLSB7Ci0tICAgIHVwZGF0ZVZTY3JvbGxiYXJzKG9wdGlvbnMuaGlkZVRQVlNjcm9sbGJh cik7Ci0rICAgIHVwZGF0ZVZTY3JvbGxiYXJzKEFwcDo6Z2V0KCkub3B0aW9ucygpLmhpZGVUUFZT Y3JvbGxiYXIpOwotIAotIC8vR1RLMzE4Ci0gI2lmIEdUS19NQUpPUl9WRVJTSU9OID09IDMgJiYg R1RLX01JTk9SX1ZFUlNJT04gPCAyMAotQEAgLTk0Miw3ICs5NDMsNyBAQCBNeVNjcm9sbGVkV2lu ZG93OjpNeVNjcm9sbGVkV2luZG93ICgpCi0gCi0gYm9vbCBNeVNjcm9sbGVkV2luZG93Ojpvbl9z Y3JvbGxfZXZlbnQgKEdka0V2ZW50U2Nyb2xsKiBldmVudCkKLSB7Ci0tICAgIGlmICghb3B0aW9u cy5oaWRlVFBWU2Nyb2xsYmFyKSB7Ci0rICAgIGlmICghQXBwOjpnZXQoKS5vcHRpb25zKCkuaGlk ZVRQVlNjcm9sbGJhcikgewotICAgICAgICAgR3RrOjpTY3JvbGxlZFdpbmRvdzo6b25fc2Nyb2xs X2V2ZW50IChldmVudCk7Ci0gICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgfQotZGlmZiAtLWdp dCBhL3J0Z3VpL2hpc3RvZ3JhbXBhbmVsLmNjIGIvcnRndWkvaGlzdG9ncmFtcGFuZWwuY2MKLWlu ZGV4IDk3Yzc4MjY3Ny4uNmVlNzY5NDhlIDEwMDY0NAotLS0tIGEvcnRndWkvaGlzdG9ncmFtcGFu ZWwuY2MKLSsrKyBiL3J0Z3VpL2hpc3RvZ3JhbXBhbmVsLmNjCi1AQCAtMzYsMTQgKzM2LDYgQEAg Y29uc3RleHByIGZsb2F0IEhpc3RvZ3JhbUFyZWE6Ok1JTl9CUklHSFQ7Ci0gCi0gdXNpbmcgU2Nv cGVUeXBlID0gT3B0aW9uczo6U2NvcGVUeXBlOwotIAotLQotLW5hbWVzcGFjZQotLXsKLS0KLS1j b25zdCBydGVuZ2luZTo6cHJvY3BhcmFtczo6Q29sb3JNYW5hZ2VtZW50UGFyYW1zIERFRkFVTFRf Q01QOwotLQotLX0KLS0KLSAvLwotIC8vCi0gLy8gSGlzdG9ncmFtUGFuZWwKLUBAIC05NCw2ICs4 Niw3IEBAIEhpc3RvZ3JhbVBhbmVsOjpIaXN0b2dyYW1QYW5lbCAoKSA6Ci0gICAgIGhpc3RvZ3Jh bVJHQkFyZWFWZXJ0LnJlc2V0KG5ldyBIaXN0b2dyYW1SR0JBcmVhVmVydCgpKTsKLSAgICAgc2V0 RXhwYW5kQWxpZ25Qcm9wZXJ0aWVzKGhpc3RvZ3JhbVJHQkFyZWFWZXJ0LmdldCgpLCBmYWxzZSwg dHJ1ZSwgR3RrOjpBTElHTl9FTkQsIEd0azo6QUxJR05fRklMTCk7Ci0gCi0rICAgIGNvbnN0IGF1 dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgc3dpdGNoIChvcHRpb25z Lmhpc3RvZ3JhbVNjb3BlVHlwZSkgewotICAgICAgICAgY2FzZSBTY29wZVR5cGU6Ok5PTkU6Ci0g ICAgICAgICBjYXNlIFNjb3BlVHlwZTo6SElTVE9HUkFNX1JBVzoKLUBAIC00NDAsNyArNDMzLDcg QEAgdm9pZCBIaXN0b2dyYW1QYW5lbDo6cmVzaXplZCAoR3RrOjpBbGxvY2F0aW9uJiByZXEpCi0g ICAgIH0KLSAKLSAgICAgLy8gU3RvcmUgY3VycmVudCBoZWlnaHQgb2YgdGhlIGhpc3RvZ3JhbQot LSAgICBvcHRpb25zLmhpc3RvZ3JhbUhlaWdodCA9IGdldF9oZWlnaHQoKTsKLSsgICAgQXBwOjpn ZXQoKS5tdXRfb3B0aW9ucygpLmhpc3RvZ3JhbUhlaWdodCA9IGdldF9oZWlnaHQoKTsKLSAKLSAg ICAgb2xkX2hlaWdodCA9IHJlcS5nZXRfaGVpZ2h0KCk7Ci0gICAgIG9sZF93aWR0aCA9IHJlcS5n ZXRfd2lkdGgoKTsKLUBAIC00NTEsNyArNDQ0LDcgQEAgdm9pZCBIaXN0b2dyYW1QYW5lbDo6cmVk X3RvZ2dsZWQgKCkKLSAgICAgLy8gVXBkYXRlIGJ1dHRvbiBpbWFnZQotICAgICBzaG93UmVkLT5z ZXRfaW1hZ2Uoc2hvd1JlZC0+Z2V0X2FjdGl2ZSgpID8gKnJlZEltYWdlIDogKnJlZEltYWdlX2cp OwotICAgICAvLyBVcGRhdGUgb3B0aW9ucyB2YWx1ZQotLSAgICBvcHRpb25zLmhpc3RvZ3JhbVJl ZCA9IHNob3dSZWQtPmdldF9hY3RpdmUoKSA/IHRydWUgOiBmYWxzZTsKLSsgICAgQXBwOjpnZXQo KS5tdXRfb3B0aW9ucygpLmhpc3RvZ3JhbVJlZCA9IHNob3dSZWQtPmdldF9hY3RpdmUoKSA/IHRy dWUgOiBmYWxzZTsKLSAgICAgLy8gVXBkYXRlIGRyYXdpbmcgYXJlYXMKLSAgICAgcmdidl90b2dn bGVkKCk7Ci0gfQotQEAgLTQ2MSw3ICs0NTQsNyBAQCB2b2lkIEhpc3RvZ3JhbVBhbmVsOjpncmVl bl90b2dnbGVkICgpCi0gICAgIC8vIFVwZGF0ZSBidXR0b24gaW1hZ2UKLSAgICAgc2hvd0dyZWVu LT5zZXRfaW1hZ2Uoc2hvd0dyZWVuLT5nZXRfYWN0aXZlKCkgPyAqZ3JlZW5JbWFnZSA6ICpncmVl bkltYWdlX2cpOwotICAgICAvLyBVcGRhdGUgb3B0aW9ucyB2YWx1ZQotLSAgICBvcHRpb25zLmhp c3RvZ3JhbUdyZWVuID0gc2hvd0dyZWVuLT5nZXRfYWN0aXZlKCkgPyB0cnVlIDogZmFsc2U7Ci0r ICAgIEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5oaXN0b2dyYW1HcmVlbiA9IHNob3dHcmVlbi0+ Z2V0X2FjdGl2ZSgpID8gdHJ1ZSA6IGZhbHNlOwotICAgICAvLyBVcGRhdGUgZHJhd2luZyBhcmVh cwotICAgICByZ2J2X3RvZ2dsZWQoKTsKLSB9Ci1AQCAtNDcxLDcgKzQ2NCw3IEBAIHZvaWQgSGlz dG9ncmFtUGFuZWw6OmJsdWVfdG9nZ2xlZCAoKQotICAgICAvLyBVcGRhdGUgYnV0dG9uIGltYWdl Ci0gICAgIHNob3dCbHVlLT5zZXRfaW1hZ2Uoc2hvd0JsdWUtPmdldF9hY3RpdmUoKSA/ICpibHVl SW1hZ2UgOiAqYmx1ZUltYWdlX2cpOwotICAgICAvLyBVcGRhdGUgb3B0aW9ucyB2YWx1ZQotLSAg ICBvcHRpb25zLmhpc3RvZ3JhbUJsdWUgPSBzaG93Qmx1ZS0+Z2V0X2FjdGl2ZSgpID8gdHJ1ZSA6 IGZhbHNlOwotKyAgICBBcHA6OmdldCgpLm11dF9vcHRpb25zKCkuaGlzdG9ncmFtQmx1ZSA9IHNo b3dCbHVlLT5nZXRfYWN0aXZlKCkgPyB0cnVlIDogZmFsc2U7Ci0gICAgIC8vIFVwZGF0ZSBkcmF3 aW5nIGFyZWFzCi0gICAgIHJnYnZfdG9nZ2xlZCgpOwotIH0KLUBAIC00ODAsNyArNDczLDcgQEAg dm9pZCBIaXN0b2dyYW1QYW5lbDo6dmFsdWVfdG9nZ2xlZCAoKQotICAgICAvLyBVcGRhdGUgYnV0 dG9uIGltYWdlCi0gICAgIHNob3dWYWx1ZS0+c2V0X2ltYWdlKHNob3dWYWx1ZS0+Z2V0X2FjdGl2 ZSgpID8gKnZhbHVlSW1hZ2UgOiAqdmFsdWVJbWFnZV9nKTsKLSAgICAgLy8gVXBkYXRlIG9wdGlv bnMgdmFsdWUKLS0gICAgb3B0aW9ucy5oaXN0b2dyYW1MdW1hID0gc2hvd1ZhbHVlLT5nZXRfYWN0 aXZlKCkgPyB0cnVlIDogZmFsc2U7Ci0rICAgIEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5oaXN0 b2dyYW1MdW1hID0gc2hvd1ZhbHVlLT5nZXRfYWN0aXZlKCkgPyB0cnVlIDogZmFsc2U7Ci0gICAg IC8vIFVwZGF0ZSBkcmF3aW5nIGFyZWFzCi0gICAgIHJnYnZfdG9nZ2xlZCgpOwotIH0KLUBAIC00 ODksMTMgKzQ4MiwxNCBAQCB2b2lkIEhpc3RvZ3JhbVBhbmVsOjpjaHJvX3RvZ2dsZWQgKCkKLSAg ICAgLy8gVXBkYXRlIGJ1dHRvbiBpbWFnZQotICAgICBzaG93Q2hyby0+c2V0X2ltYWdlKHNob3dD aHJvLT5nZXRfYWN0aXZlKCkgPyAqY2hyb0ltYWdlIDogKmNocm9JbWFnZV9nKTsKLSAgICAgLy8g VXBkYXRlIG9wdGlvbnMgdmFsdWUKLS0gICAgb3B0aW9ucy5oaXN0b2dyYW1DaHJvbWEgPSBzaG93 Q2hyby0+Z2V0X2FjdGl2ZSgpID8gdHJ1ZSA6IGZhbHNlOwotKyAgICBBcHA6OmdldCgpLm11dF9v cHRpb25zKCkuaGlzdG9ncmFtQ2hyb21hID0gc2hvd0Nocm8tPmdldF9hY3RpdmUoKSA/IHRydWUg OiBmYWxzZTsKLSAgICAgLy8gVXBkYXRlIGRyYXdpbmcgYXJlYXMKLSAgICAgcmdidl90b2dnbGVk KCk7Ci0gfQotIAotIHZvaWQgSGlzdG9ncmFtUGFuZWw6Om1vZGVfcmVsZWFzZWQgKCkKLSB7Ci0r ICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIC8vIFVw ZGF0ZSBvcHRpb25zIHZhbHVlCi0gICAgIG9wdGlvbnMuaGlzdG9ncmFtRHJhd01vZGUgPSAob3B0 aW9ucy5oaXN0b2dyYW1EcmF3TW9kZSArIDEpICUgMzsKLSAgICAgLy8gVXBkYXRlIGJ1dHRvbiBp bWFnZQotQEAgLTUxNCwxOSArNTA4LDE5IEBAIHZvaWQgSGlzdG9ncmFtUGFuZWw6OmJyaWdodG5l c3NXaWRnZXRWYWx1ZUNoYW5nZWQodm9pZCkKLSB7Ci0gICAgIENvbm5lY3Rpb25CbG9ja2VyIGJs b2NrZXIoYnJpZ2h0bmVzc19jaGFuZ2VkX2Nvbm5lY3Rpb24pOwotICAgICBoaXN0b2dyYW1BcmVh LT5zZXRCcmlnaHRuZXNzKGV4cChicmlnaHRuZXNzV2lkZ2V0LT5nZXRfdmFsdWUoKSkpOwotLSAg ICBvcHRpb25zLmhpc3RvZ3JhbVRyYWNlQnJpZ2h0bmVzcyA9IGhpc3RvZ3JhbUFyZWEtPmdldEJy aWdodG5lc3MoKTsKLSsgICAgQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmhpc3RvZ3JhbVRyYWNl QnJpZ2h0bmVzcyA9IGhpc3RvZ3JhbUFyZWEtPmdldEJyaWdodG5lc3MoKTsKLSB9Ci0gCi0gdm9p ZCBIaXN0b2dyYW1QYW5lbDo6YnJpZ2h0bmVzc1VwZGF0ZWQoZmxvYXQgYnJpZ2h0bmVzcykKLSB7 Ci0gICAgIGJyaWdodG5lc3NXaWRnZXQtPnNldF92YWx1ZShsb2coYnJpZ2h0bmVzcykpOwotLSAg ICBvcHRpb25zLmhpc3RvZ3JhbVRyYWNlQnJpZ2h0bmVzcyA9IGhpc3RvZ3JhbUFyZWEtPmdldEJy aWdodG5lc3MoKTsKLSsgICAgQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmhpc3RvZ3JhbVRyYWNl QnJpZ2h0bmVzcyA9IGhpc3RvZ3JhbUFyZWEtPmdldEJyaWdodG5lc3MoKTsKLSB9Ci0gCi0gdm9p ZCBIaXN0b2dyYW1QYW5lbDo6c2NvcGVPcHRpb25zVG9nZ2xlZCgpCi0gewotICAgICAvLyBVcGRh dGUgb3B0aW9ucyB2YWx1ZQotLSAgICBvcHRpb25zLmhpc3RvZ3JhbVNob3dPcHRpb25CdXR0b25z ID0gc2NvcGVPcHRpb25zLT5nZXRfYWN0aXZlKCk7Ci0rICAgIEFwcDo6Z2V0KCkubXV0X29wdGlv bnMoKS5oaXN0b2dyYW1TaG93T3B0aW9uQnV0dG9ucyA9IHNjb3BlT3B0aW9ucy0+Z2V0X2FjdGl2 ZSgpOwotICAgICAvLyBTaG93L2hpZGUgc2Vjb25kYXJ5IGJ1dHRvbnMgY29sdW1uCi0gICAgIG9w dGlvbkJ1dHRvbnMtPnNldF92aXNpYmxlKHNjb3BlT3B0aW9ucy0+Z2V0X2FjdGl2ZSgpKTsKLSB9 Ci1AQCAtNTUwLDYgKzU0NCw3IEBAIHZvaWQgSGlzdG9ncmFtUGFuZWw6OnR5cGVfc2VsZWN0ZWQo R3RrOjpSYWRpb0J1dHRvbiogYnV0dG9uKQotICAgICAgICAgbmV3X3R5cGUgPSBTY29wZVR5cGU6 OlZFQ1RPUlNDT1BFX0hTOwotICAgICB9Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6Omdl dCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIC8vIERvIG5vdCB1cGRhdGUgaWYgc2VsZWN0ZWQgcmFk aW8gYnV0dG9uIGlzIGlkZW50aWNhbAotICAgICBpZiAobmV3X3R5cGUgPT0gb3B0aW9ucy5oaXN0 b2dyYW1TY29wZVR5cGUpIHsKLSAgICAgICAgIHJldHVybjsKLUBAIC01ODMsNiArNTc4LDcgQEAg dm9pZCBIaXN0b2dyYW1QYW5lbDo6dHlwZV9zZWxlY3RlZChHdGs6OlJhZGlvQnV0dG9uKiBidXR0 b24pCi0gCi0gdm9pZCBIaXN0b2dyYW1QYW5lbDo6dHlwZV9jaGFuZ2VkKCkKLSB7Ci0rICAgIGNv bnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgc3dpdGNoIChv cHRpb25zLmhpc3RvZ3JhbVNjb3BlVHlwZSkgewotICAgICAgICAgY2FzZSBTY29wZVR5cGU6OkhJ U1RPR1JBTToKLSAgICAgICAgICAgICBzaG93UmVkLT5zaG93KCk7Ci1AQCAtNjUxLDcgKzY0Nyw3 IEBAIHZvaWQgSGlzdG9ncmFtUGFuZWw6OmJhcl90b2dnbGVkICgpCi0gICAgIC8vIFVwZGF0ZSBi dXR0b24gaW1hZ2UKLSAgICAgc2hvd0JBUi0+c2V0X2ltYWdlKHNob3dCQVItPmdldF9hY3RpdmUo KSA/ICpiYXJJbWFnZSA6ICpiYXJJbWFnZV9nKTsKLSAgICAgLy8gVXBkYXRlIG9wdGlvbnMgdmFs dWUKLS0gICAgb3B0aW9ucy5oaXN0b2dyYW1CYXIgPSBzaG93QkFSLT5nZXRfYWN0aXZlKCkgPyB0 cnVlIDogZmFsc2U7Ci0rICAgIEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5oaXN0b2dyYW1CYXIg PSBzaG93QkFSLT5nZXRfYWN0aXZlKCkgPyB0cnVlIDogZmFsc2U7Ci0gICAgIC8vIFVwZGF0ZSBk cmF3aW5nIGFyZWFzCi0gICAgIHJnYnZfdG9nZ2xlZCgpOwotICAgICAvLyBVcGRhdGUgaGlzdG9n cmFtIGJhciB2aXNpYmlsaXR5Ci1AQCAtNzIxLDYgKzcxNyw3IEBAIHZvaWQgSGlzdG9ncmFtUGFu ZWw6OnJlb3JkZXIgKEd0azo6UG9zaXRpb25UeXBlIGFsaWduKQotIC8vIERyYXdNb2RlTGlzdGVu ZXIgaW50ZXJmYWNlOgotIHZvaWQgSGlzdG9ncmFtUGFuZWw6OnRvZ2dsZUJ1dHRvbk1vZGUgKCkK LSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAg ICAgaWYgKG9wdGlvbnMuaGlzdG9ncmFtRHJhd01vZGUgPT0gMCkKLSAgICAgICAgIHNob3dNb2Rl LT5zZXRfaW1hZ2UoKm1vZGUwSW1hZ2UpOwotICAgICBlbHNlIGlmIChvcHRpb25zLmhpc3RvZ3Jh bURyYXdNb2RlID09IDEpCi1AQCAtNzM0LDcgKzczMSw3IEBAIHZvaWQgSGlzdG9ncmFtUGFuZWw6 OnNldFBhbmVsTGlzdGVuZXIoSGlzdG9ncmFtUGFuZWxMaXN0ZW5lciogbGlzdGVuZXIpCi0gICAg IHBhbmVsX2xpc3RlbmVyID0gbGlzdGVuZXI7Ci0gCi0gICAgIGlmIChsaXN0ZW5lcikgewotLSAg ICAgICAgbGlzdGVuZXItPnNjb3BlVHlwZUNoYW5nZWQob3B0aW9ucy5oaXN0b2dyYW1TY29wZVR5 cGUpOwotKyAgICAgICAgbGlzdGVuZXItPnNjb3BlVHlwZUNoYW5nZWQoQXBwOjpnZXQoKS5vcHRp b25zKCkuaGlzdG9ncmFtU2NvcGVUeXBlKTsKLSAgICAgfQotIH0KLSAKLUBAIC03NTYsMTAgKzc1 MywxMCBAQCBIaXN0b2dyYW1SR0JBcmVhOjpIaXN0b2dyYW1SR0JBcmVhICgpIDoKLSAgICAgLy8g U2F2ZWQgcG9pbnRlciBwYXJhbWV0ZXJzCi0gICAgIHIoLTEpLCBnKC0xKSwgYigtMSksIGxhYl9M KDAuZiksIGxhYl9hKDAuZiksIGxhYl9iKDAuZiksIHBvaW50ZXJWYWxpZChmYWxzZSksCi0gICAg IC8vIERyYXdpbmcgb3B0aW9ucyAoaW5pdGlhbGl6ZWQgYXQgb3B0aW9ucyBmaWxlIHZhbHVlcykK LS0gICAgbmVlZFJlZChvcHRpb25zLmhpc3RvZ3JhbVJlZCksIG5lZWRHcmVlbihvcHRpb25zLmhp c3RvZ3JhbUdyZWVuKSwKLS0gICAgbmVlZEJsdWUob3B0aW9ucy5oaXN0b2dyYW1CbHVlKSwgbmVl ZEx1bWEob3B0aW9ucy5oaXN0b2dyYW1MdW1hKSwKLS0gICAgbmVlZENocm9tYShvcHRpb25zLmhp c3RvZ3JhbUNocm9tYSksIHNjb3BlVHlwZShvcHRpb25zLmhpc3RvZ3JhbVNjb3BlVHlwZSksCi0t ICAgIHNjYWxlTW9kZShvcHRpb25zLmhpc3RvZ3JhbURyYXdNb2RlKSwgc2hvd0JhcihvcHRpb25z Lmhpc3RvZ3JhbUJhcikKLSsgICAgbmVlZFJlZChBcHA6OmdldCgpLm9wdGlvbnMoKS5oaXN0b2dy YW1SZWQpLCBuZWVkR3JlZW4oQXBwOjpnZXQoKS5vcHRpb25zKCkuaGlzdG9ncmFtR3JlZW4pLAot KyAgICBuZWVkQmx1ZShBcHA6OmdldCgpLm9wdGlvbnMoKS5oaXN0b2dyYW1CbHVlKSwgbmVlZEx1 bWEoQXBwOjpnZXQoKS5vcHRpb25zKCkuaGlzdG9ncmFtTHVtYSksCi0rICAgIG5lZWRDaHJvbWEo QXBwOjpnZXQoKS5vcHRpb25zKCkuaGlzdG9ncmFtQ2hyb21hKSwgc2NvcGVUeXBlKEFwcDo6Z2V0 KCkub3B0aW9ucygpLmhpc3RvZ3JhbVNjb3BlVHlwZSksCi0rICAgIHNjYWxlTW9kZShBcHA6Omdl dCgpLm9wdGlvbnMoKS5oaXN0b2dyYW1EcmF3TW9kZSksIHNob3dCYXIoQXBwOjpnZXQoKS5vcHRp b25zKCkuaGlzdG9ncmFtQmFyKQotIHsKLSAgICAgZ2V0X3N0eWxlX2NvbnRleHQoKS0+YWRkX2Ns YXNzKCJkcmF3aW5nYXJlYSIpOwotICAgICBzZXRfbmFtZSgiSGlzdG9ncmFtUkdCQXJlYSIpOwot QEAgLTg5OCw3ICs4OTUsNyBAQCBib29sIEhpc3RvZ3JhbVJHQkFyZWE6OnVwZGF0ZVBvaW50ZXIg KGNvbnN0IGludCBuZXdfciwgY29uc3QgaW50IG5ld19nLCBjb25zdCBpbgotICAgICAgICAgICAg IHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oZyksCi0gICAgICAgICAgICAgc3RhdGljX2Nhc3Q8 c3RkOjp1aW50OF90PihiKSwKLSAgICAgICAgICAgICBsYWJfTCwgbGFiX2EsIGxhYl9iLAotLSAg ICAgICAgICAgIGNtcCAhPSBudWxscHRyID8gKmNtcCA6IERFRkFVTFRfQ01QLAotKyAgICAgICAg ICAgIGNtcCAhPSBudWxscHRyID8gKmNtcCA6IEFwcDo6Z2V0KCkuZmFsbGJhY2tDb2xvckNtcCgp LAotICAgICAgICAgICAgIHRydWUpOwotICAgICAgICAgcG9pbnRlclZhbGlkID0gdHJ1ZTsKLSAg ICAgfQotQEAgLTkwOCw2ICs5MDUsNyBAQCBib29sIEhpc3RvZ3JhbVJHQkFyZWE6OnVwZGF0ZVBv aW50ZXIgKGNvbnN0IGludCBuZXdfciwgY29uc3QgaW50IG5ld19nLCBjb25zdCBpbgotIAotIHZv aWQgSGlzdG9ncmFtUkdCQXJlYTo6dXBkYXRlRnJvbU9wdGlvbnMgKCkKLSB7Ci0rICAgIGNvbnN0 IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgbmVlZFJlZCA9IG9w dGlvbnMuaGlzdG9ncmFtUmVkOwotICAgICBuZWVkR3JlZW4gPSBvcHRpb25zLmhpc3RvZ3JhbUdy ZWVuOwotICAgICBuZWVkQmx1ZSA9IG9wdGlvbnMuaGlzdG9ncmFtQmx1ZTsKLUBAIC05NjAsNyAr OTU4LDcgQEAgdm9pZCBIaXN0b2dyYW1SR0JBcmVhOjpmYWN0b3JDaGFuZ2VkIChkb3VibGUgbmV3 RmFjdG9yKQotIHZvaWQgSGlzdG9ncmFtUkdCQXJlYUhvcmk6OmRyYXdCYXIoY29uc3QgQ2Fpcm86 OlJlZlB0cjxDYWlybzo6Q29udGV4dD4gJmNjLCBjb25zdCBkb3VibGUgdmFsdWUsIGNvbnN0IGRv dWJsZSBtYXhfdmFsdWUsIGNvbnN0IGludCB3aW53LCBjb25zdCBpbnQgd2luaCkKLSB7Ci0gICAg IGRvdWJsZSBwb3M7Ci0tICAgIGlmIChvcHRpb25zLmhpc3RvZ3JhbURyYXdNb2RlIDwgMikgewot KyAgICBpZiAoQXBwOjpnZXQoKS5vcHRpb25zKCkuaGlzdG9ncmFtRHJhd01vZGUgPCAyKSB7Ci0g ICAgICAgICBwb3MgPSBwYWRkaW5nICsgdmFsdWUgKiAod2ludyAtIHBhZGRpbmcgKiAyLjApIC8g bWF4X3ZhbHVlOwotICAgICB9IGVsc2UgewotICAgICAgICAgcG9zID0gcGFkZGluZyArIEhpc3Rv Z3JhbVNjYWxpbmc6OmxvZyAobWF4X3ZhbHVlLCB2YWx1ZSkgKiAod2ludyAtIHBhZGRpbmcgKiAy LjApIC8gbWF4X3ZhbHVlOwotQEAgLTk5OCw2ICs5OTYsNyBAQCB2b2lkIEhpc3RvZ3JhbVJHQkFy ZWFIb3JpOjpnZXRfcHJlZmVycmVkX3dpZHRoX2Zvcl9oZWlnaHRfdmZ1bmMgKGludCBoZWlnaHQs IGludAotIHZvaWQgSGlzdG9ncmFtUkdCQXJlYVZlcnQ6OmRyYXdCYXIoY29uc3QgQ2Fpcm86OlJl ZlB0cjxDYWlybzo6Q29udGV4dD4gJmNjLCBjb25zdCBkb3VibGUgdmFsdWUsIGNvbnN0IGRvdWJs ZSBtYXhfdmFsdWUsIGNvbnN0IGludCB3aW53LCBjb25zdCBpbnQgd2luaCkKLSB7Ci0gICAgIGRv dWJsZSBwb3M7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMo KTsKLSAgICAgaWYgKG9wdGlvbnMuaGlzdG9ncmFtRHJhd01vZGUgPCAyIHx8IG9wdGlvbnMuaGlz dG9ncmFtU2NvcGVUeXBlID09IFNjb3BlVHlwZTo6UEFSQURFIHx8IG9wdGlvbnMuaGlzdG9ncmFt U2NvcGVUeXBlID09IFNjb3BlVHlwZTo6V0FWRUZPUk0pIHsKLSAgICAgICAgIHBvcyA9IHBhZGRp bmcgKyB2YWx1ZSAqICh3aW5oIC0gcGFkZGluZyAqIDIuMCAtIDEpIC8gbWF4X3ZhbHVlICsgMC41 OwotICAgICB9IGVsc2UgewotQEAgLTEwNTUsMTEgKzEwNTQsMTQgQEAgSGlzdG9ncmFtQXJlYTo6 SGlzdG9ncmFtQXJlYSAoRHJhd01vZGVMaXN0ZW5lciAqZm1sKSA6Ci0gICAgIHBvaW50ZXJfYSgw LmYpLCBwb2ludGVyX2IoMC5mKSwKLSAgICAgcG9pbnRlcl92YWxpZChmYWxzZSksCi0gICAgIC8v IERyYXdpbmcgb3B0aW9ucwotLSAgICBuZWVkUmVkKG9wdGlvbnMuaGlzdG9ncmFtUmVkKSwgbmVl ZEdyZWVuKG9wdGlvbnMuaGlzdG9ncmFtR3JlZW4pLCBuZWVkQmx1ZShvcHRpb25zLmhpc3RvZ3Jh bUJsdWUpLAotLSAgICBuZWVkTHVtYShvcHRpb25zLmhpc3RvZ3JhbUx1bWEpLCBuZWVkQ2hyb21h KG9wdGlvbnMuaGlzdG9ncmFtQ2hyb21hKSwKLS0gICAgbmVlZFBvaW50ZXIob3B0aW9ucy5oaXN0 b2dyYW1CYXIpLAotLSAgICBzY29wZVR5cGUob3B0aW9ucy5oaXN0b2dyYW1TY29wZVR5cGUpLAot LSAgICBkcmF3TW9kZShvcHRpb25zLmhpc3RvZ3JhbURyYXdNb2RlKSwgbXlEcmF3TW9kZUxpc3Rl bmVyKGZtbCksCi0rICAgIG5lZWRSZWQoQXBwOjpnZXQoKS5vcHRpb25zKCkuaGlzdG9ncmFtUmVk KSwKLSsgICAgbmVlZEdyZWVuKEFwcDo6Z2V0KCkub3B0aW9ucygpLmhpc3RvZ3JhbUdyZWVuKSwK LSsgICAgbmVlZEJsdWUoQXBwOjpnZXQoKS5vcHRpb25zKCkuaGlzdG9ncmFtQmx1ZSksCi0rICAg IG5lZWRMdW1hKEFwcDo6Z2V0KCkub3B0aW9ucygpLmhpc3RvZ3JhbUx1bWEpLAotKyAgICBuZWVk Q2hyb21hKEFwcDo6Z2V0KCkub3B0aW9ucygpLmhpc3RvZ3JhbUNocm9tYSksCi0rICAgIG5lZWRQ b2ludGVyKEFwcDo6Z2V0KCkub3B0aW9ucygpLmhpc3RvZ3JhbUJhciksCi0rICAgIHNjb3BlVHlw ZShBcHA6OmdldCgpLm9wdGlvbnMoKS5oaXN0b2dyYW1TY29wZVR5cGUpLAotKyAgICBkcmF3TW9k ZShBcHA6OmdldCgpLm9wdGlvbnMoKS5oaXN0b2dyYW1EcmF3TW9kZSksIG15RHJhd01vZGVMaXN0 ZW5lcihmbWwpLAotICAgICAvLyBNb3Rpb24gZXZlbnQgbWFuYWdlbWVudAotICAgICBpc1ByZXNz ZWQoZmFsc2UpLCBtb3ZpbmdQb3NpdGlvbigwLjApCi0gewotQEAgLTExMDgsNiArMTExMCw3IEBA IHZvaWQgSGlzdG9ncmFtQXJlYTo6Z2V0X3ByZWZlcnJlZF93aWR0aF9mb3JfaGVpZ2h0X3ZmdW5j IChpbnQgaGVpZ2h0LCBpbnQgJm1pbmltCi0gCi0gdm9pZCBIaXN0b2dyYW1BcmVhOjp1cGRhdGVG cm9tT3B0aW9ucyAoKQotIHsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCku b3B0aW9ucygpOwotICAgICB3YXZlX2J1ZmZlcl9kaXJ0eSA9IHdhdmVfYnVmZmVyX2RpcnR5IHx8 IG5lZWRSZWQgIT0gb3B0aW9ucy5oaXN0b2dyYW1SZWQgfHwKLSAgICAgICAgICAgICBuZWVkR3Jl ZW4gIT0gb3B0aW9ucy5oaXN0b2dyYW1HcmVlbiB8fCBuZWVkQmx1ZSAhPSBvcHRpb25zLmhpc3Rv Z3JhbUJsdWU7Ci0gCi1AQCAtMTQyNiw3ICsxNDI5LDcgQEAgYm9vbCBIaXN0b2dyYW1BcmVhOjp1 cGRhdGVQb2ludGVyKGNvbnN0IGludCByLCBjb25zdCBpbnQgZywgY29uc3QgaW50IGIsIGNvbnN0 IHIKLSAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KGcpLAotICAgICAgICAg ICAgIHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oYiksCi0gICAgICAgICAgICAgTCwgcG9pbnRl cl9hLCBwb2ludGVyX2IsCi0tICAgICAgICAgICAgY21wICE9IG51bGxwdHIgPyAqY21wIDogREVG QVVMVF9DTVAsCi0rICAgICAgICAgICAgY21wICE9IG51bGxwdHIgPyAqY21wIDogQXBwOjpnZXQo KS5mYWxsYmFja0NvbG9yQ21wKCksCi0gICAgICAgICAgICAgdHJ1ZSk7Ci0gICAgICAgICBMIC89 IDMyNy42OGY7Ci0gICAgICAgICBwb2ludGVyX2EgLz0gMzI3LjY4ZjsKLUBAIC0xODc5LDYgKzE4 ODIsNyBAQCBib29sIEhpc3RvZ3JhbUFyZWE6Om9uX2J1dHRvbl9wcmVzc19ldmVudCAoR2RrRXZl bnRCdXR0b24qIGV2ZW50KQotICAgICApIHsKLSAKLSAgICAgICAgIGRyYXdNb2RlID0gKGRyYXdN b2RlICsgMSkgJSAzOwotKyAgICAgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29w dGlvbnMoKTsKLSAgICAgICAgIG9wdGlvbnMuaGlzdG9ncmFtRHJhd01vZGUgPSAob3B0aW9ucy5o aXN0b2dyYW1EcmF3TW9kZSArIDEpICUgMzsKLSAKLSAgICAgICAgIGlmIChteURyYXdNb2RlTGlz dGVuZXIpIHsKLWRpZmYgLS1naXQgYS9ydGd1aS9oc3ZlcXVhbGl6ZXIuY2MgYi9ydGd1aS9oc3Zl cXVhbGl6ZXIuY2MKLWluZGV4IDJjNjA2NjQ0Mi4uYWQyNDc2NmRkIDEwMDY0NAotLS0tIGEvcnRn dWkvaHN2ZXF1YWxpemVyLmNjCi0rKysgYi9ydGd1aS9oc3ZlcXVhbGl6ZXIuY2MKLUBAIC00NSw3 ICs0NSw3IEBAIEhTVkVxdWFsaXplcjo6SFNWRXF1YWxpemVyICgpIDogRm9sZGFibGVUb29sUGFu ZWwodGhpcywgVE9PTF9OQU1FLCBNKCJUUF9IU1ZFUVVBCi0gICAgICAgICBib3R0b21NaWxlc3Rv bmVzLnB1c2hfYmFjayggR3JhZGllbnRNaWxlc3RvbmUoZG91YmxlKHgpLCBkb3VibGUoUiksIGRv dWJsZShHKSwgZG91YmxlKEIpKSApOwotICAgICB9Ci0gCi0tICAgIGN1cnZlRWRpdG9yRyA9IG5l dyBDdXJ2ZUVkaXRvckdyb3VwIChvcHRpb25zLmxhc3RIc3ZDdXJ2ZXNEaXIsIE0oIlRQX0hTVkVR VUFMSVpFUl9DSEFOTkVMIikpOwotKyAgICBjdXJ2ZUVkaXRvckcgPSBuZXcgQ3VydmVFZGl0b3JH cm91cCAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3RIc3ZDdXJ2ZXNEaXIsIE0oIlRQX0hT VkVRVUFMSVpFUl9DSEFOTkVMIikpOwotICAgICBjdXJ2ZUVkaXRvckctPnNldEN1cnZlTGlzdGVu ZXIgKHRoaXMpOwotIAotICAgICBoc2hhcGUgPSBzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3Iq PihjdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsIE0oIlRQX0hTVkVRVUFMSVpFUl9IVUUi KSkpOwotZGlmZiAtLWdpdCBhL3J0Z3VpL2ljY3Byb2ZpbGVjcmVhdG9yLmNjIGIvcnRndWkvaWNj cHJvZmlsZWNyZWF0b3IuY2MKLWluZGV4IGI3ZDNhMWIyZC4uODE5OTRhYmQyIDEwMDY0NAotLS0t IGEvcnRndWkvaWNjcHJvZmlsZWNyZWF0b3IuY2MKLSsrKyBiL3J0Z3VpL2ljY3Byb2ZpbGVjcmVh dG9yLmNjCi1AQCAtNTMsMjEgKzUzLDIxIEBAIGNtc1RvbmVDdXJ2ZSAqbWFrZV90cmMoc2l6ZV90 IHNpemUsIGZsb2F0ICgqdHJjRnVuYykoZmxvYXQsIGJvb2wpKQotIAotIElDQ1Byb2ZpbGVDcmVh dG9yOjpJQ0NQcm9maWxlQ3JlYXRvcihSVFdpbmRvdyAqcnR3aW5kb3cpCi0gICAgIDogR3RrOjpE aWFsb2coTSgiTUFJTl9CVVRUT05fSUNDUFJPRkNSRUFUT1IiKSwgKnJ0d2luZG93LCB0cnVlKQot LSAgICAsIHByaW1hcmllc1ByZXNldChvcHRpb25zLklDQ1BDX3ByaW1hcmllc1ByZXNldCkKLS0g ICAgLCByZWRQcmltYXJ5WChvcHRpb25zLklDQ1BDX3JlZFByaW1hcnlYKQotLSAgICAsIHJlZFBy aW1hcnlZKG9wdGlvbnMuSUNDUENfcmVkUHJpbWFyeVkpCi0tICAgICwgZ3JlZW5QcmltYXJ5WChv cHRpb25zLklDQ1BDX2dyZWVuUHJpbWFyeVgpCi0tICAgICwgZ3JlZW5QcmltYXJ5WShvcHRpb25z LklDQ1BDX2dyZWVuUHJpbWFyeVkpCi0tICAgICwgYmx1ZVByaW1hcnlYKG9wdGlvbnMuSUNDUENf Ymx1ZVByaW1hcnlYKQotLSAgICAsIGJsdWVQcmltYXJ5WShvcHRpb25zLklDQ1BDX2JsdWVQcmlt YXJ5WSkKLS0gICAgLCBnYW1tYVByZXNldChvcHRpb25zLklDQ1BDX2dhbW1hUHJlc2V0KQotLSAg ICAsIGdhbW1hKG9wdGlvbnMuSUNDUENfZ2FtbWEpCi0tICAgICwgc2xvcGUob3B0aW9ucy5JQ0NQ Q19zbG9wZSkKLS0gICAgLCBhcHBlbmRQYXJhbXNUb0Rlc2Mob3B0aW9ucy5JQ0NQQ19hcHBlbmRQ YXJhbXNUb0Rlc2MpCi0tICAgICwgcHJvZmlsZVZlcnNpb24ob3B0aW9ucy5JQ0NQQ19wcm9maWxl VmVyc2lvbikKLS0gICAgLCBpbGx1bWluYW50KG9wdGlvbnMuSUNDUENfaWxsdW1pbmFudCkKLS0g ICAgLCBkZXNjcmlwdGlvbihvcHRpb25zLklDQ1BDX2Rlc2NyaXB0aW9uKQotLSAgICAsIGNvcHly aWdodChvcHRpb25zLklDQ1BDX2NvcHlyaWdodCkKLSsgICAgLCBwcmltYXJpZXNQcmVzZXQoQXBw OjpnZXQoKS5vcHRpb25zKCkuSUNDUENfcHJpbWFyaWVzUHJlc2V0KQotKyAgICAsIHJlZFByaW1h cnlYKEFwcDo6Z2V0KCkub3B0aW9ucygpLklDQ1BDX3JlZFByaW1hcnlYKQotKyAgICAsIHJlZFBy aW1hcnlZKEFwcDo6Z2V0KCkub3B0aW9ucygpLklDQ1BDX3JlZFByaW1hcnlZKQotKyAgICAsIGdy ZWVuUHJpbWFyeVgoQXBwOjpnZXQoKS5vcHRpb25zKCkuSUNDUENfZ3JlZW5QcmltYXJ5WCkKLSsg ICAgLCBncmVlblByaW1hcnlZKEFwcDo6Z2V0KCkub3B0aW9ucygpLklDQ1BDX2dyZWVuUHJpbWFy eVkpCi0rICAgICwgYmx1ZVByaW1hcnlYKEFwcDo6Z2V0KCkub3B0aW9ucygpLklDQ1BDX2JsdWVQ cmltYXJ5WCkKLSsgICAgLCBibHVlUHJpbWFyeVkoQXBwOjpnZXQoKS5vcHRpb25zKCkuSUNDUENf Ymx1ZVByaW1hcnlZKQotKyAgICAsIGdhbW1hUHJlc2V0KEFwcDo6Z2V0KCkub3B0aW9ucygpLklD Q1BDX2dhbW1hUHJlc2V0KQotKyAgICAsIGdhbW1hKEFwcDo6Z2V0KCkub3B0aW9ucygpLklDQ1BD X2dhbW1hKQotKyAgICAsIHNsb3BlKEFwcDo6Z2V0KCkub3B0aW9ucygpLklDQ1BDX3Nsb3BlKQot KyAgICAsIGFwcGVuZFBhcmFtc1RvRGVzYyhBcHA6OmdldCgpLm9wdGlvbnMoKS5JQ0NQQ19hcHBl bmRQYXJhbXNUb0Rlc2MpCi0rICAgICwgcHJvZmlsZVZlcnNpb24oQXBwOjpnZXQoKS5vcHRpb25z KCkuSUNDUENfcHJvZmlsZVZlcnNpb24pCi0rICAgICwgaWxsdW1pbmFudChBcHA6OmdldCgpLm9w dGlvbnMoKS5JQ0NQQ19pbGx1bWluYW50KQotKyAgICAsIGRlc2NyaXB0aW9uKEFwcDo6Z2V0KCku b3B0aW9ucygpLklDQ1BDX2Rlc2NyaXB0aW9uKQotKyAgICAsIGNvcHlyaWdodChBcHA6OmdldCgp Lm9wdGlvbnMoKS5JQ0NQQ19jb3B5cmlnaHQpCi0gICAgICwgcGFyZW50KHJ0d2luZG93KQotIHsK LSAKLUBAIC0xNTQsNiArMTU0LDcgQEAgSUNDUHJvZmlsZUNyZWF0b3I6OklDQ1Byb2ZpbGVDcmVh dG9yKFJUV2luZG93ICpydHdpbmRvdykKLSAgICAgYUdhbW1hID0gR3RrOjptYW5hZ2UobmV3IEFk anVzdGVyKE0oIklDQ1BST0ZDUkVBVE9SX0dBTU1BIiksIDEsIDMuNSwgMC4wMDAwMSwgMi40KSk7 Ci0gICAgIHNldEV4cGFuZEFsaWduUHJvcGVydGllcyhhR2FtbWEsIHRydWUsIGZhbHNlLCBHdGs6 OkFMSUdOX0ZJTEwsIEd0azo6QUxJR05fQkFTRUxJTkUpOwotIAotKyAgICBjb25zdCBhdXRvJiBv cHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGFHYW1tYS0+c2V0RGVsYXkoc3Rk OjptYXgob3B0aW9ucy5hZGp1c3Rlck1pbkRlbGF5LCBvcHRpb25zLmFkanVzdGVyTWF4RGVsYXkp KTsKLSAKLSAgICAgYUdhbW1hLT5zaG93KCk7Ci1AQCAtNDI5LDYgKzQzMCw3IEBAIHZvaWQgSUND UHJvZmlsZUNyZWF0b3I6OnRyY1ByZXNldHNDaGFuZ2VkKCkKLSAKLSB2b2lkIElDQ1Byb2ZpbGVD cmVhdG9yOjpzdG9yZVZhbHVlcygpCi0gewotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQo KS5tdXRfb3B0aW9ucygpOwotICAgICBpZiAoaWNjVmVyc2lvbi0+Z2V0X2FjdGl2ZV90ZXh0KCkg PT0gTSgiSUNDUFJPRkNSRUFUT1JfUFJPRl9WNCIpKSB7Ci0gICAgICAgICBvcHRpb25zLklDQ1BD X3Byb2ZpbGVWZXJzaW9uID0gcHJvZmlsZVZlcnNpb24gPSAidjQiOwotICAgICB9IGVsc2UgaWYg KGljY1ZlcnNpb24tPmdldF9hY3RpdmVfdGV4dCgpID09IE0oIklDQ1BST0ZDUkVBVE9SX1BST0Zf VjIiKSkgewotQEAgLTY4Myw2ICs2ODUsNyBAQCB2b2lkIElDQ1Byb2ZpbGVDcmVhdG9yOjpzYXZl UHJlc3NlZCgpCi0gCi0gICAgIC8vbmVjZXNzYXJ5IGZvciBWMiBwcm9maWxlCi0gCi0rICAgIGF1 dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGlmICghdjJleGNl cHQpIHsKLSAgICAgICAgIC8vdXNlZCBwYXJ0aWFsbHkgZm9yIHY0LCBhbmQgaW4gY2FzZSBvZiBp ZiB3ZSB3YW50IHRvIGJhY2sgdG8gb2xkIG1hbm5lciBmb3IgdjIKLSAgICAgICAgIGlmIChwcmlt YXJpZXNQcmVzZXQgPT0gIkFDRVMtQVAwIiAgICYmIHJ0ZW5naW5lOjpJQ0NTdG9yZTo6Z2V0SW5z dGFuY2UoKS0+b3V0cHV0UHJvZmlsZUV4aXN0KG9wdGlvbnMucnRTZXR0aW5ncy5BQ0VTcDApKSB7 Ci1kaWZmIC0tZ2l0IGEvcnRndWkvaWNtcGFuZWwuY2MgYi9ydGd1aS9pY21wYW5lbC5jYwotaW5k ZXggZWNkNDgwODJlLi5kZjcyZGM1MTkgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9pY21wYW5lbC5jYwot KysrIGIvcnRndWkvaWNtcGFuZWwuY2MKLUBAIC04NCw2ICs4NCw4IEBAIElDTVBhbmVsOjpJQ01Q YW5lbCgpIDogRm9sZGFibGVUb29sUGFuZWwodGhpcywgVE9PTF9OQU1FLCBNKCJUUF9JQ01fTEFC RUwiKSksIGl1Ci0gICAgIEV2SUNNcmVzaWR0cmMgPSBtLT5uZXdFdmVudChMVU1JTkFOQ0VDVVJW RSwgIkhJU1RPUllfTVNHX0lDTV9SRVNJRFRSQyIpOwotICAgICBFdklDTXdhdkV4cCA9IG0tPm5l d0V2ZW50KExVTUlOQU5DRUNVUlZFLCAiSElTVE9SWV9NU0dfSUNNX1dBVkVYUCIpOwotIAotKyAg ICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotKwotICAgICBpc0Jh dGNoTW9kZSA9IGxhc3RUb25lQ3VydmUgPSBsYXN0QXBwbHlMb29rVGFibGUgPSBsYXN0QXBwbHlC YXNlbGluZUV4cG9zdXJlT2Zmc2V0ID0gbGFzdEFwcGx5SHVlU2F0TWFwID0gZmFsc2U7Ci0gCi0g ICAgIGlwRGlhbG9nID0gR3RrOjptYW5hZ2UobmV3IE15RmlsZUNob29zZXJCdXR0b24oTSgiVFBf SUNNX0lOUFVURExHTEFCRUwiKSwgR3RrOjpGSUxFX0NIT09TRVJfQUNUSU9OX09QRU4pKTsKLUBA IC0yNzAzLDcgKzI3MDUsNyBAQCB2b2lkIElDTVBhbmVsOjpzYXZlUmVmZXJlbmNlUHJlc3NlZCgp Ci0gICAgIH0KLSAKLSAgICAgR3RrOjpGaWxlQ2hvb3NlckRpYWxvZyBkaWFsb2coZ2V0VG9wbGV2 ZWxXaW5kb3codGhpcyksIE0oIlRQX0lDTV9TQVZFUkVGRVJFTkNFIiksIEd0azo6RklMRV9DSE9P U0VSX0FDVElPTl9TQVZFKTsKLS0gICAgYmluZEN1cnJlbnRGb2xkZXIoZGlhbG9nLCBvcHRpb25z Lmxhc3RQcm9maWxpbmdSZWZlcmVuY2VEaXIpOwotKyAgICBiaW5kQ3VycmVudEZvbGRlcihkaWFs b2csIEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0UHJvZmlsaW5nUmVmZXJlbmNlRGlyKTsK LSAgICAgZGlhbG9nLnNldF9jdXJyZW50X25hbWUobGFzdFJlZkZpbGVuYW1lKTsKLSAKLSAgICAg ZGlhbG9nLmFkZF9idXR0b24oTSgiR0VORVJBTF9DQU5DRUwiKSwgR3RrOjpSRVNQT05TRV9DQU5D RUwpOwotZGlmZiAtLWdpdCBhL3J0Z3VpL2ltYWdlYXJlYS5jYyBiL3J0Z3VpL2ltYWdlYXJlYS5j YwotaW5kZXggMjA5YjFkMGFiLi45NGZlNDRjNmIgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9pbWFnZWFy ZWEuY2MKLSsrKyBiL3J0Z3VpL2ltYWdlYXJlYS5jYwotQEAgLTI0LDcgKzI0LDYgQEAKLSAjaW5j bHVkZSAiY3JvcHdpbmRvdy5oIgotICNpbmNsdWRlICJydGVuZ2luZS9yZWZyZXNobWFwLmgiCi0g I2luY2x1ZGUgInJ0ZW5naW5lL3Byb2NwYXJhbXMuaCIKLS0jaW5jbHVkZSAib3B0aW9ucy5oIgot ICNpbmNsdWRlICJydHNjYWxhYmxlLmgiCi0gCi0gSW1hZ2VBcmVhOjpJbWFnZUFyZWEgKEltYWdl QXJlYVBhbmVsKiBwKSA6IHBhcmVudChwKSwgZnVsbEltYWdlV2lkdGgoMCksIGZ1bGxJbWFnZUhl aWdodCgwKQotQEAgLTE1NSw3ICsxNTQsNyBAQCB2b2lkIEltYWdlQXJlYTo6c2V0SW5mb1RleHQg KEdsaWI6OnVzdHJpbmcgdGV4dCkKLSAKLSAgICAgLy8gdXBkYXRlIGZvbnQKLSAgICAgZm9udGQu c2V0X3dlaWdodCAoUGFuZ286OldFSUdIVF9CT0xEKTsKLS0gICAgY29uc3QgaW50IGZvbnRTaXpl ID0gb3B0aW9ucy5mb250U2l6ZTsKLSsgICAgY29uc3QgaW50IGZvbnRTaXplID0gQXBwOjpnZXQo KS5vcHRpb25zKCkuZm9udFNpemU7Ci0gICAgIC8vIE5vbi1hYnNvbHV0ZSBzaXplIGlzIGRlZmlu ZWQgaW4gIlBhbmdvIHVuaXRzIiBhbmQgc2hhbGwgYmUgbXVsdGlwbGllZCBieQotICAgICAvLyBQ YW5nbzo6U0NBTEUgZnJvbSAicHQiOgotICAgICBmb250ZC5zZXRfc2l6ZSAoZm9udFNpemUgKiBQ YW5nbzo6U0NBTEUpOwotQEAgLTE5NSw3ICsxOTQsNyBAQCB2b2lkIEltYWdlQXJlYTo6c2V0SW5m b1RleHQgKEdsaWI6OnVzdHJpbmcgdGV4dCkKLSAKLSB2b2lkIEltYWdlQXJlYTo6aW5mb0VuYWJs ZWQgKGJvb2wgZSkKLSB7Ci0tCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9v cHRpb25zKCk7Ci0gICAgIGlmIChvcHRpb25zLnNob3dJbmZvICE9IGUpIHsKLSAgICAgICAgIG9w dGlvbnMuc2hvd0luZm8gPSBlOwotICAgICAgICAgcXVldWVfZHJhdyAoKTsKLUBAIC0yNTAsNyAr MjQ5LDcgQEAgYm9vbCBJbWFnZUFyZWE6Om9uX2RyYXcoY29uc3QgOjpDYWlybzo6UmVmUHRyPCBD YWlybzo6Q29udGV4dD4gJmNyKQotICAgICAgICAgKCppKS0+ZXhwb3NlIChjcik7Ci0gICAgIH0K LSAKLS0gICAgaWYgKG9wdGlvbnMuc2hvd0luZm8gJiYgIWluZm90ZXh0LmVtcHR5KCkpIHsKLSsg ICAgaWYgKEFwcDo6Z2V0KCkub3B0aW9ucygpLnNob3dJbmZvICYmICFpbmZvdGV4dC5lbXB0eSgp KSB7Ci0gICAgICAgICBpQmFja0J1ZmZlci5jb3B5U3VyZmFjZShjcik7Ci0gICAgIH0KLSAKLUBA IC00NjcsNiArNDY2LDcgQEAgdm9pZCBJbWFnZUFyZWE6OmFkZENyb3BXaW5kb3cgKCkKLSAgICAg Y3ctPnNldENyb3BHVUlMaXN0ZW5lciAoY3JvcGdsKTsKLSAgICAgY3ctPnNldFBvaW50ZXJNb3Rp b25MaXN0ZW5lciAocG1saXN0ZW5lcik7Ci0gICAgIGN3LT5zZXRQb2ludGVyTW90aW9uSExpc3Rl bmVyIChwbWhsaXN0ZW5lcik7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgp Lm9wdGlvbnMoKTsKLSAgICAgaW50IGxhc3RXaWR0aCA9IG9wdGlvbnMuZGV0YWlsV2luZG93V2lk dGg7Ci0gICAgIGludCBsYXN0SGVpZ2h0ID0gb3B0aW9ucy5kZXRhaWxXaW5kb3dIZWlnaHQ7Ci0g Ci1AQCAtNjg1LDYgKzY4NSw3IEBAIHZvaWQgSW1hZ2VBcmVhOjppbml0aWFsSW1hZ2VBcnJpdmVk ICgpCi0gICAgIGlmIChtYWluQ3JvcFdpbmRvdykgewotICAgICAgICAgaW50IHcsIGg7Ci0gICAg ICAgICBtYWluQ3JvcFdpbmRvdy0+Y3JvcEhhbmRsZXIuZ2V0RnVsbEltYWdlU2l6ZSh3LCBoKTsK LSsgICAgICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAg ICAgICAgIGlmKG9wdGlvbnMucHJldmRlbW8gIT0gUERfU2lkZWNhciB8fCAhb3B0aW9ucy5yZW1l bWJlclpvb21BbmRQYW4gfHwgdyAhPSBmdWxsSW1hZ2VXaWR0aCB8fCBoICE9IGZ1bGxJbWFnZUhl aWdodCkgewotICAgICAgICAgICAgIGlmIChvcHRpb25zLmNyb3BBdXRvRml0IHx8IG9wdGlvbnMu Ymdjb2xvciAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgIG1haW5Dcm9wV2luZG93LT56b29tRml0 Q3JvcCgpOwotZGlmZiAtLWdpdCBhL3J0Z3VpL2luZGNsaXBwZWRwYW5lbC5jYyBiL3J0Z3VpL2lu ZGNsaXBwZWRwYW5lbC5jYwotaW5kZXggNzJmNjg4ODdmLi5iYWI3Mzg3NmEgMTAwNjQ0Ci0tLS0g YS9ydGd1aS9pbmRjbGlwcGVkcGFuZWwuY2MKLSsrKyBiL3J0Z3VpL2luZGNsaXBwZWRwYW5lbC5j YwotQEAgLTQ1LDYgKzQ1LDcgQEAgSW5kaWNhdGVDbGlwcGVkUGFuZWw6OkluZGljYXRlQ2xpcHBl ZFBhbmVsIChJbWFnZUFyZWEqIGlhKSA6Ci0gICAgIGluZENsaXBwZWRIID0gR3RrOjptYW5hZ2Ug KG5ldyBHdGs6OlRvZ2dsZUJ1dHRvbiAoKSk7Ci0gICAgIGluZENsaXBwZWRILT5zZXRfcmVsaWVm KEd0azo6UkVMSUVGX05PTkUpOwotICAgICBpbmRDbGlwcGVkSC0+YWRkICgqR3RrOjptYW5hZ2Ug KG5ldyBSVEltYWdlICgid2FybmluZy1oaWdobGlnaHRzIiwgR3RrOjpJQ09OX1NJWkVfTEFSR0Vf VE9PTEJBUikpKTsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotICAgICB0dCA9IEdsaWI6OnVzdHJpbmc6OmNvbXBvc2UoIiUxXG4lMiA9ICUzIiwgTSgi TUFJTl9UT09MVElQX0lORENMSVBQRURIIiksIE0oIk1BSU5fVE9PTFRJUF9USFJFU0hPTEQiKSwg b3B0aW9ucy5oaWdobGlnaHRUaHJlc2hvbGQpOwotIAotICAgICBpZiAodHQuZmluZCgiJmx0OyIp ID09IEdsaWI6OnVzdHJpbmc6Om5wb3MgJiYgdHQuZmluZCgiJmd0OyIpID09IEdsaWI6OnVzdHJp bmc6Om5wb3MpIHsKLWRpZmYgLS1naXQgYS9ydGd1aS9pbnNwZWN0b3IuY2MgYi9ydGd1aS9pbnNw ZWN0b3IuY2MKLWluZGV4IGEwMWE2Y2U3Ny4uNDViODAzNzJmIDEwMDY0NAotLS0tIGEvcnRndWkv aW5zcGVjdG9yLmNjCi0rKysgYi9ydGd1aS9pbnNwZWN0b3IuY2MKLUBAIC04Nyw2ICs4Nyw3IEBA IEluc3BlY3Rvcjo6SW5zcGVjdG9yICgpIDogY3VyckltYWdlKG51bGxwdHIpLCBzY2FsZWQoZmFs c2UpLCBzY2FsZSgxLjApLCB6b29tU2NhCi0gewotICAgICBzZXRfbmFtZSgiSW5zcGVjdG9yIik7 Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAg ICAgaWYgKCFvcHRpb25zLmluc3BlY3RvcldpbmRvdykgewotICAgICAgICAgd2luZG93ID0gbnVs bHB0cjsKLSAgICAgfQotQEAgLTMyMSw2ICszMjIsNyBAQCBib29sIEluc3BlY3Rvcjo6b25fc2Ny b2xsX2V2ZW50KEdka0V2ZW50U2Nyb2xsICpldmVudCkKLSAgICAgICAgIGJyZWFrOwotICAgICB9 Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAg ICAgaWYgKChvcHRpb25zLnpvb21PblNjcm9sbCAmJiAhYWx0KSB8fCAoIW9wdGlvbnMuem9vbU9u U2Nyb2xsICYmIGFsdCkpIHsKLSAgICAgICAgIC8vIHpvb20KLSAgICAgICAgIGJlZ2luWm9vbShl dmVudC0+eCwgZXZlbnQtPnkpOwotQEAgLTU3OSw2ICs1ODEsNyBAQCB2b2lkIEluc3BlY3Rvcjo6 c3dpdGNoSW1hZ2UgKGNvbnN0IEdsaWI6OnVzdHJpbmcgJmZ1bGxQYXRoKQotICAgICBpZiAod2lu ZG93ICYmICF3aW5kb3ctPmdldF92aXNpYmxlKCkpCi0gICAgICAgICByZXR1cm47Ci0gCi0rICAg IGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaWYgKCFv cHRpb25zLmluc3BlY3RvckRlbGF5KSB7Ci0gICAgICAgICBkb1N3aXRjaEltYWdlKCk7Ci0gICAg IH0gZWxzZSB7Ci1AQCAtNTkxLDYgKzU5NCw3IEBAIGJvb2wgSW5zcGVjdG9yOjpkb1N3aXRjaElt YWdlKCkKLSB7Ci0gICAgIEdsaWI6OnVzdHJpbmcgZnVsbFBhdGggPSBuZXh0X2ltYWdlX3BhdGg7 Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAg ICAgLy8gd2UgZmlyc3QgY2hlY2sgdGhlIHNpemUgb2YgdGhlIGxpc3QsIGl0IG1heSBoYXZlIGJl ZW4gY2hhbmdlZCBpbiBQcmVmZXJlbmNlCi0gICAgIGlmIChpbWFnZXMuc2l6ZSgpID4gc2l6ZV90 KG9wdGlvbnMubWF4SW5zcGVjdG9yQnVmZmVycykpIHsKLSAgICAgICAgIC8vIGRlbGV0aW5nIHRo ZSBsYXN0IGVudHJpZXMKLWRpZmYgLS1naXQgYS9ydGd1aS9sYWJjdXJ2ZS5jYyBiL3J0Z3VpL2xh YmN1cnZlLmNjCi1pbmRleCBkNDViNzFlMDcuLjk4YWI3YTMyYyAxMDA2NDQKLS0tLSBhL3J0Z3Vp L2xhYmN1cnZlLmNjCi0rKysgYi9ydGd1aS9sYWJjdXJ2ZS5jYwotQEAgLTEwNyw3ICsxMDcsNyBA QCBMQ3VydmU6OkxDdXJ2ZSgpIDogRm9sZGFibGVUb29sUGFuZWwodGhpcywgVE9PTF9OQU1FLCBN KCJUUF9MQUJDVVJWRV9MQUJFTCIpLCBmYQotICAgICBoc2VwMy0+c2hvdygpOwotICAgICBwYWNr X3N0YXJ0KCpoc2VwMywgR3RrOjpQQUNLX0VYUEFORF9XSURHRVQsIDQpOwotIAotLSAgICBjdXJ2 ZUVkaXRvckcgPSBuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3RMYWJDdXJ2ZXNEaXIp OwotKyAgICBjdXJ2ZUVkaXRvckcgPSBuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11 dF9vcHRpb25zKCkubGFzdExhYkN1cnZlc0Rpcik7Ci0gICAgIGN1cnZlRWRpdG9yRy0+c2V0Q3Vy dmVMaXN0ZW5lcih0aGlzKTsKLSAKLSAgICAgbHNoYXBlID0gc3RhdGljX2Nhc3Q8RGlhZ29uYWxD dXJ2ZUVkaXRvcio+KGN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRGlhZ29uYWwsICJMKiIpKTsK LWRpZmYgLS1naXQgYS9ydGd1aS9sYWJncmlkLmNjIGIvcnRndWkvbGFiZ3JpZC5jYwotaW5kZXgg MzZlNTU4YTg0Li42YWY5MDYwMGYgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9sYWJncmlkLmNjCi0rKysg Yi9ydGd1aS9sYWJncmlkLmNjCi1AQCAtNTkzLDYgKzU5Myw3IEBAIGJvb2wgTGFiR3JpZEFyZWE6 Om9uX21vdGlvbl9ub3RpZnlfZXZlbnQoR2RrRXZlbnRNb3Rpb24gKmV2ZW50KQotICAgICAgICAg fQotICAgICAgICAgZWRpdGVkID0gdHJ1ZTsKLSAgICAgICAgIGdyYWJfZm9jdXMoKTsKLSsgICAg ICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgICAg IGlmIChvcHRpb25zLmFkanVzdGVyTWluRGVsYXkgPT0gMCkgewotICAgICAgICAgICAgIG5vdGlm eUxpc3RlbmVyKCk7Ci0gICAgICAgICB9IGVsc2UgewotZGlmZiAtLWdpdCBhL3J0Z3VpL2xlbnNw cm9maWxlLmNjIGIvcnRndWkvbGVuc3Byb2ZpbGUuY2MKLWluZGV4IDc5ZjYzMTNjOS4uYTVmNDU4 NTIzIDEwMDY0NAotLS0tIGEvcnRndWkvbGVuc3Byb2ZpbGUuY2MKLSsrKyBiL3J0Z3VpL2xlbnNw cm9maWxlLmNjCi1AQCAtMTMwLDYgKzEzMCw3IEBAIExlbnNQcm9maWxlUGFuZWw6OkxlbnNQcm9m aWxlUGFuZWwoKSA6Ci0gCi0gICAgIGNvbnN0IEdsaWI6OnVzdHJpbmcgZGVmRGlyID0gTENQU3Rv cmU6OmdldEluc3RhbmNlKCktPmdldERlZmF1bHRDb21tb25EaXJlY3RvcnkoKTsKLSAKLSsgICAg YXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgaWYgKCFkZWZE aXIuZW1wdHkoKSkgewotICNpZmRlZiBfV0lOMzIKLSAgICAgICAgIGNvcnJMY3BGaWxlQ2hvb3Nl ci0+c2V0X3Nob3dfaGlkZGVuKHRydWUpOyAgLy8gUHJvZ3JhbURhdGEgaXMgaGlkZGVuIG9uIFdp bmRvd3MKLUBAIC0yNDcsNyArMjQ4LDcgQEAgdm9pZCBMZW5zUHJvZmlsZVBhbmVsOjpyZWFkKGNv bnN0IHJ0ZW5naW5lOjpwcm9jcGFyYW1zOjpQcm9jUGFyYW1zKiBwcCwgY29uc3QgUGEKLSAgICAg ICAgICAgICBjb25zdCBHbGliOjp1c3RyaW5nIGxhc3RGb2xkZXIgPSBjb3JyTGNwRmlsZUNob29z ZXItPmdldF9jdXJyZW50X2ZvbGRlcigpOwotICAgICAgICAgICAgIGNvcnJMY3BGaWxlQ2hvb3Nl ci0+c2V0X2N1cnJlbnRfZm9sZGVyKGxhc3RGb2xkZXIpOwotICAgICAgICAgICAgIGNvcnJMY3BG aWxlQ2hvb3Nlci0+dW5zZWxlY3RfYWxsKCk7Ci0tICAgICAgICAgICAgYmluZEN1cnJlbnRGb2xk ZXIoKmNvcnJMY3BGaWxlQ2hvb3Nlciwgb3B0aW9ucy5sYXN0TGVuc1Byb2ZpbGVEaXIpOwotKyAg ICAgICAgICAgIGJpbmRDdXJyZW50Rm9sZGVyKCpjb3JyTGNwRmlsZUNob29zZXIsIEFwcDo6Z2V0 KCkubXV0X29wdGlvbnMoKS5sYXN0TGVuc1Byb2ZpbGVEaXIpOwotICAgICAgICAgICAgIHVwZGF0 ZUxDUERpc2FibGVkKGZhbHNlKTsKLSAgICAgICAgIH0KLSAgICAgICAgIGVsc2UgaWYgKExDUFN0 b3JlOjpnZXRJbnN0YW5jZSgpLT5pc1ZhbGlkTENQRmlsZU5hbWUocHAtPmxlbnNQcm9mLmxjcEZp bGUpKSB7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvbG9jYWxsYWIuY2MgYi9ydGd1aS9sb2NhbGxhYi5j YwotaW5kZXggZDUzMzcyN2EwLi45Y2IwNDI2ODAgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9sb2NhbGxh Yi5jYwotKysrIGIvcnRndWkvbG9jYWxsYWIuY2MKLUBAIC0yNyw4ICsyNyw2IEBACi0gdXNpbmcg bmFtZXNwYWNlIHJ0ZW5naW5lOwotIHVzaW5nIG5hbWVzcGFjZSBwcm9jcGFyYW1zOwotIAotLWV4 dGVybiBPcHRpb25zIG9wdGlvbnM7Ci0tCi0gY29uc3QgR2xpYjo6dXN0cmluZyBMb2NhbGxhYjo6 VE9PTF9OQU1FID0gImxvY2FsbGFiIjsKLSAKLSAvKiA9PT09IExvY2FsbGFiVG9vbExpc3QgPT09 PSAqLwotQEAgLTIzMSw3ICsyMjksNyBAQCBMb2NhbGxhYjo6TG9jYWxsYWIoKToKLSAKLSAgICAg Ly8gVXBkYXRlIExvY2FsbGFiIHRvb2xzIGFkdmljZSB0b29sdGlwcyB2aXNpYmlsaXR5IGJhc2Vk IG9uIHNhdmVkIG9wdGlvbgotICAgICBmb3IgKGF1dG8gdG9vbCA6IGxvY2FsbGFiVG9vbHMpIHsK LS0gICAgICAgIHRvb2wtPnVwZGF0ZUFkdmljZVRvb2x0aXBzKG9wdGlvbnMuc2hvd3Rvb2x0aXAp OwotKyAgICAgICAgdG9vbC0+dXBkYXRlQWR2aWNlVG9vbHRpcHMoQXBwOjpnZXQoKS5vcHRpb25z KCkuc2hvd3Rvb2x0aXApOwotICAgICB9Ci0gCi0gICAgIC8vIEJ5IGRlZmF1bHQsIGlmIG5vIHBo b3RvIGlzIGxvYWRlZCwgYWxsIExvY2FsbGFiIHRvb2xzIGFyZSByZW1vdmVkIGFuZCBpdCdzIG5v dCBwb3NzaWJsZSB0byBhZGQgdGhlbQotZGlmZiAtLWdpdCBhL3J0Z3VpL2xvY2FsbGFidG9vbHMu Y2MgYi9ydGd1aS9sb2NhbGxhYnRvb2xzLmNjCi1pbmRleCAzMWJmMWUxYTUuLjM1ZTI5ZDdjMSAx MDA2NDQKLS0tLSBhL3J0Z3VpL2xvY2FsbGFidG9vbHMuY2MKLSsrKyBiL3J0Z3VpL2xvY2FsbGFi dG9vbHMuY2MKLUBAIC03NCw3ICs3NCw2IEBAIHZvaWQgdXBkYXRlX2doc19jdXJ2ZSgKLSB1c2lu ZyBuYW1lc3BhY2UgcnRlbmdpbmU7Ci0gdXNpbmcgbmFtZXNwYWNlIHByb2NwYXJhbXM7Ci0gCi0t ZXh0ZXJuIE9wdGlvbnMgb3B0aW9uczsKLSBzdGF0aWMgZG91YmxlIGJsdXJTbGlkZXIycmFkaXVz KGRvdWJsZSBzdmFsKQotIHsKLSAgICAgLy8gU2xpZGVyIHJhbmdlOiAwIC0gMTAwMAotQEAgLTI0 MSw3ICsyNDAsNyBAQCB2b2lkIExvY2FsbGFiVG9vbDo6YWRkTG9jYWxsYWJUb29sKGJvb2wgcmFp c2VFdmVudCkKLSAgICAgICAgIGlmIChuZWVkTW9kZSkgewotICAgICAgICAgICAgIC8vIFNldCBj b21wbGV4aXR5IG1vZGUgYWNjb3JkaW5nIHRvIGNob3NlbiBkZWZhdWx0IG9uZQotICAgICAgICAg ICAgIGNvbXBsZXhpdHlDb25uLmJsb2NrKHRydWUpOwotLSAgICAgICAgICAgIGNvbXBsZXhpdHkt PnNldF9hY3RpdmUob3B0aW9ucy5jb21wbGV4aXR5KTsKLSsgICAgICAgICAgICBjb21wbGV4aXR5 LT5zZXRfYWN0aXZlKEFwcDo6Z2V0KCkub3B0aW9ucygpLmNvbXBsZXhpdHkpOwotICAgICAgICAg ICAgIGNvbXBsZXhpdHlDb25uLmJsb2NrKGZhbHNlKTsKLSAKLSAgICAgICAgICAgICAvLyBVcGRh dGUgR1VJIGFjY29yZGluZ2x5Ci1AQCAtNTE1LDE5ICs1MTQsMTkgQEAgTG9jYWxsYWJDb2xvcjo6 TG9jYWxsYWJDb2xvcigpOgotICAgICBleHBjdXJ2Y29sKEd0azo6bWFuYWdlKG5ldyBNeUV4cGFu ZGVyKGZhbHNlLCBNKCJUUF9MT0NBTExBQl9FWFBDVVJWIikpKSksCi0gICAgIGxhYnF1YWxjdXJ2 KEd0azo6bWFuYWdlKG5ldyBHdGs6OkxhYmVsKE0oIlRQX0xPQ0FMTEFCX1FVQUxDVVJWX01FVEhP RCIpICsgIjoiKSkpLAotICAgICBxdWFsaXR5Y3VydmVNZXRob2QoR3RrOjptYW5hZ2UobmV3IE15 Q29tYm9Cb3hUZXh0KCkpKSwKLS0gICAgbGxDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3Jv dXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX0xVTSIpKSksCi0r ICAgIGxsQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29w dGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX0xVTSIpKSksCi0gICAg IGxsc2hhcGUoc3RhdGljX2Nhc3Q8RGlhZ29uYWxDdXJ2ZUVkaXRvcio+KGxsQ3VydmVFZGl0b3JH LT5hZGRDdXJ2ZShDVF9EaWFnb25hbCwgIkwoTCkiKSkpLAotICAgICBjY3NoYXBlKHN0YXRpY19j YXN0PERpYWdvbmFsQ3VydmVFZGl0b3IqPihsbEN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRGlh Z29uYWwsICJDKEMpIikpKSwKLS0gICAgY2xDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3Jv dXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX0NIIikpKSwKLSsg ICAgY2xDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0 aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfQ0giKSkpLAotICAgICBj bHNoYXBlKHN0YXRpY19jYXN0PERpYWdvbmFsQ3VydmVFZGl0b3IqPihjbEN1cnZlRWRpdG9yRy0+ YWRkQ3VydmUoQ1RfRGlhZ29uYWwsICJDKEwpIikpKSwKLSAgICAgbGNzaGFwZShzdGF0aWNfY2Fz dDxEaWFnb25hbEN1cnZlRWRpdG9yKj4oY2xDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0RpYWdv bmFsLCAiTChDKSIpKSksCi0tICAgIEhDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAo b3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX0hMSCIpKSksCi0rICAg IEhDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9u cygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfSExIIikpKSwKLSAgICAgTEhz aGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihIQ3VydmVFZGl0b3JHLT5hZGRDdXJ2 ZShDVF9GbGF0LCAiTChoKSIsIG51bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotLSAgICBIM0N1cnZl RWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0Rpciwg TSgiVFBfTE9DQUxMQUJfSExIIikpKSwKLSsgICAgSDNDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRp dG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgi VFBfTE9DQUxMQUJfSExIIikpKSwKLSAgICAgQ0hzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVF ZGl0b3IqPihIM0N1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkMoaCkiLCBudWxscHRy LCBmYWxzZSwgdHJ1ZSkpKSwKLS0gICAgSDJDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3Jv dXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX0hMSCIpKSksCi0r ICAgIEgyQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29w dGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX0hMSCIpKSksCi0gICAg IEhIc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4oSDJDdXJ2ZUVkaXRvckctPmFk ZEN1cnZlKENUX0ZsYXQsICJoKGgpIiwgbnVsbHB0ciwgZmFsc2UsIHRydWUpKSksCi0tICAgIHJn YkN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZl c0RpciwgTSgiVFBfTE9DQUxMQUJfUkdCIikpKSwKLSsgICAgcmdiQ3VydmVFZGl0b3JHKG5ldyBD dXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNE aXIsIE0oIlRQX0xPQ0FMTEFCX1JHQiIpKSksCi0gICAgIHRvbmVNZXRob2QoR3RrOjptYW5hZ2Uo bmV3IE15Q29tYm9Cb3hUZXh0KCkpKSwKLSAgICAgcmdic2hhcGUoc3RhdGljX2Nhc3Q8RGlhZ29u YWxDdXJ2ZUVkaXRvcio+KHJnYkN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRGlhZ29uYWwsICIi LCB0b25lTWV0aG9kKSkpLAotICAgICBzcGVjaWFsKEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNr QnV0dG9uKE0oIlRQX0xPQ0FMTEFCX1NQRUNJQUwiKSkpKSwKLUBAIC01NDYsOCArNTQ1LDggQEAg TG9jYWxsYWJDb2xvcjo6TG9jYWxsYWJDb2xvcigpOgotICAgICBzaG93bWFza2NvbE1ldGhvZChH dGs6Om1hbmFnZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotICAgICBzaG93bWFza2NvbE1ldGhv ZGludihHdGs6Om1hbmFnZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotICAgICBlbmFDb2xvck1h c2soR3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24oTSgiVFBfTE9DQUxMQUJfRU5BQkxF X01BU0siKSkpKSwKLS0vLyAgICBtYXNrQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3Vw KG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLQ09MIikpKSwK LS0gICAgbWFza0N1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rs b2NhbEN1cnZlc0RpciwiIiwgMSkpLAotKy8vICAgIG1hc2tDdXJ2ZUVkaXRvckcobmV3IEN1cnZl RWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0Rpciwg TSgiVFBfTE9DQUxMQUJfTUFTS0NPTCIpKSksCi0rICAgIG1hc2tDdXJ2ZUVkaXRvckcobmV3IEN1 cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0Rp ciwiIiwgMSkpLAotICAgICBDQ21hc2tzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3Iq PihtYXNrQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiQyIsIG51bGxwdHIsIGZhbHNl LCBmYWxzZSkpKSwKLSAgICAgTExtYXNrc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9y Kj4obWFza0N1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkwiLCBudWxscHRyLCBmYWxz ZSwgZmFsc2UpKSksCi0gICAgIEhIbWFza3NoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRv ciAqPihtYXNrQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTEMoaCkiLCBudWxscHRy LCBmYWxzZSwgdHJ1ZSkpKSwKLUBAIC01NjcsMTIgKzU2NiwxMiBAQCBMb2NhbGxhYkNvbG9yOjpM b2NhbGxhYkNvbG9yKCk6Ci0gICAgIGdhbW1hc2tjb2woR3RrOjptYW5hZ2UobmV3IEFkanVzdGVy KE0oIlRQX0xPQ0FMTEFCX0dBTU1BU0tDT0wiKSwgMC4yNSwgNC4wLCAwLjAxLCAxLikpKSwKLSAg ICAgc2xvbWFza2NvbChHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0xP TUFTS0NPTCIpLCAwLjAsIDE1LjAsIDAuMSwgMC4pKSksCi0gICAgIHNoYWRtYXNrY29sKEd0azo6 bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9TSEFNQVNLQ09MIiksIDAsIDEwMCwg MSwgMCkpKSwKLS0gLy8gICBtYXNrSEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChv cHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfTUFTS0giKSkpLAotLSAg ICBtYXNrSEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2Nh bEN1cnZlc0RpciwgIiIpKSwKLSsgLy8gICBtYXNrSEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0 b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJU UF9MT0NBTExBQl9NQVNLSCIpKSksCi0rICAgIG1hc2tIQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVk aXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIi KSksCi0gICAgIEhIaG1hc2tzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IgKj4obWFz a0hDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJoKGgpIiwgbnVsbHB0ciwgZmFsc2Us IHRydWUpKSksCi0tICAgIG1hc2syQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9w dGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLMiIpKSksCi0rICAg IG1hc2syQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29w dGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0syIikpKSwKLSAg ICAgTG1hc2tzaGFwZShzdGF0aWNfY2FzdDxEaWFnb25hbEN1cnZlRWRpdG9yKj4obWFzazJDdXJ2 ZUVkaXRvckctPmFkZEN1cnZlKENUX0RpYWdvbmFsLCAiTChMKSIpKSksCi0tICAgIG1hc2syQ3Vy dmVFZGl0b3JHd2F2KG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVz RGlyLCBNKCJUUF9MT0NBTExBQl9XQVZNQVNLIikpKSwKLSsgICAgbWFzazJDdXJ2ZUVkaXRvckd3 YXYobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2Nh bEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfV0FWTUFTSyIpKSksCi0gICAgIExMbWFza2NvbHNo YXBld2F2KHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2syQ3VydmVFZGl0b3JHd2F2 LT5hZGRDdXJ2ZShDVF9GbGF0LCAiTChMKSIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAg ICAgY3NUaHJlc2hvbGRjb2woR3RrOjptYW5hZ2UobmV3IFRocmVzaG9sZEFkanVzdGVyKE0oIlRQ X0xPQ0FMTEFCX0NTVEhSRVNIT0xEQkxVUiIpLCAwLCA5LCAwLCAwLCA2LCA1LCAwLCBmYWxzZSkp KQotIHsKLUBAIC0yNzQ0LDcgKzI3NDMsNyBAQCBMb2NhbGxhYkV4cG9zdXJlOjpMb2NhbGxhYkV4 cG9zdXJlKCk6Ci0gICAgIHNoYWRleChHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9D QUxMQUJfU0hBREVYIiksIDAsIDEwMCwgMSwgMCkpKSwKLSAgICAgc2hjb21wcihHdGs6Om1hbmFn ZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0hBREVYQ09NUCIpLCAwLCAxMDAsIDEsIDUw KSkpLAotICAgICBleHBjaHJvbWEoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FM TEFCX0VYUENIUk9NQSIpLCAtNTAsIDEwMCwgMSwgNSkpKSwKLS0gICAgY3VydmVFZGl0b3JHKG5l dyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NB TExBQl9DVVJWRUVESVRPUl9UT05FU19MQUJFTCIpKSksCi0rICAgIGN1cnZlRWRpdG9yRyhuZXcg Q3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVz RGlyLCBNKCJUUF9MT0NBTExBQl9DVVJWRUVESVRPUl9UT05FU19MQUJFTCIpKSksCi0gICAgIHNo YXBlZXhwb3Moc3RhdGljX2Nhc3Q8RGlhZ29uYWxDdXJ2ZUVkaXRvcio+KGN1cnZlRWRpdG9yRy0+ YWRkQ3VydmUoQ1RfRGlhZ29uYWwsICIiKSkpLAotICAgICBleHByZWNvdmUoR3RrOjptYW5hZ2Uo bmV3IE15RXhwYW5kZXIoZmFsc2UsIE0oIlRQX0xPQ0FMTEFCX0RFTk9JMl9FWFAiKSkpKSwKLSAg ICAgbWFza3VzYWJsZWUoR3RrOjptYW5hZ2UobmV3IEd0azo6TGFiZWwoTSgiVFBfTE9DQUxMQUJf TUFTS1VTQUJMRSIpKSkpLAotQEAgLTI3NjQsOCArMjc2Myw4IEBAIExvY2FsbGFiRXhwb3N1cmU6 OkxvY2FsbGFiRXhwb3N1cmUoKToKLSAgICAgc2hvd21hc2tleHBNZXRob2RpbnYoR3RrOjptYW5h Z2UobmV3IE15Q29tYm9Cb3hUZXh0KCkpKSwKLSAgICAgZW5hRXhwTWFzayhHdGs6Om1hbmFnZShu ZXcgR3RrOjpDaGVja0J1dHRvbihNKCJUUF9MT0NBTExBQl9FTkFCTEVfTUFTSyIpKSkpLAotICAg ICBlbmFFeHBNYXNrYWZ0KEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX0xP Q0FMTEFCX0VOQUJMRV9NQVNLQUZUIikpKSksCi0tIC8vICAgbWFza2V4cEN1cnZlRWRpdG9yRyhu ZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9D QUxMQUJfTUFTSyIpKSksCi0tICAgIG1hc2tleHBDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9y R3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0rIC8vICAgbWFza2V4 cEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25z KCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLIikpKSwKLSsgICAgbWFz a2V4cEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRp b25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCAiIiwgMSkpLAotICAgICBDQ21hc2tleHBzaGFwZShz dGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihtYXNrZXhwQ3VydmVFZGl0b3JHLT5hZGRDdXJ2 ZShDVF9GbGF0LCAiQyIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgTExtYXNrZXhw c2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4obWFza2V4cEN1cnZlRWRpdG9yRy0+ YWRkQ3VydmUoQ1RfRmxhdCwgIkwiLCBudWxscHRyLCBmYWxzZSwgZmFsc2UpKSksCi0gICAgIEhI bWFza2V4cHNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvciAqPihtYXNrZXhwQ3VydmVF ZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTEMoaCkiLCBudWxscHRyLCBmYWxzZSwgdHJ1ZSkp KSwKLUBAIC0yNzc4LDcgKzI3NzcsNyBAQCBMb2NhbGxhYkV4cG9zdXJlOjpMb2NhbGxhYkV4cG9z dXJlKCk6Ci0gICAgIGdyYWRGcmFtZW1hc2soR3RrOjptYW5hZ2UobmV3IEd0azo6RnJhbWUoTSgi VFBfTE9DQUxMQUJfR1JBREZSQSIpKSkpLAotICAgICBzdHJtYXNrZXhwKEd0azo6bWFuYWdlKG5l dyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9HUkFEU1RSIiksIC0yLiwgMi4sIDAuMDUsIDAuKSkp LAotICAgICBhbmdtYXNrZXhwKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExB Ql9HUkFEQU5HIiksIC0xODAuLCAxODAuLCAwLjEsIDAuKSkpLAotLSAgICBtYXNrMmV4cEN1cnZl RWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0Rpciwg TSgiVFBfTE9DQUxMQUJfTUFTSzIiKSkpLAotKyAgICBtYXNrMmV4cEN1cnZlRWRpdG9yRyhuZXcg Q3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVz RGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLMiIpKSksCi0gICAgIExtYXNrZXhwc2hhcGUoc3RhdGlj X2Nhc3Q8RGlhZ29uYWxDdXJ2ZUVkaXRvcio+KG1hc2syZXhwQ3VydmVFZGl0b3JHLT5hZGRDdXJ2 ZShDVF9EaWFnb25hbCwgIkwoTCkiKSkpLAotICAgICBFdmxvY2FsbGFidG1vc2F0dXIoUHJvY0V2 ZW50TWFwcGVyOjpnZXRJbnN0YW5jZSgpLT5uZXdFdmVudChBVVRPRVhQLCAiSElTVE9SWV9NU0df TE9DQUxfVE1PX1NBVFVSIikpCi0gICAgIAotQEAgLTQzNDUsOCArNDM0NCw4IEBAIExvY2FsbGFi U2hhZG93OjpMb2NhbGxhYlNoYWRvdygpOgotICAgICBzaG93bWFza1NITWV0aG9kKEd0azo6bWFu YWdlKG5ldyBNeUNvbWJvQm94VGV4dCgpKSksCi0gICAgIHNob3dtYXNrU0hNZXRob2RpbnYoR3Rr OjptYW5hZ2UobmV3IE15Q29tYm9Cb3hUZXh0KCkpKSwKLSAgICAgZW5hU0hNYXNrKEd0azo6bWFu YWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX0xPQ0FMTEFCX0VOQUJMRV9NQVNLIikpKSks Ci0tLy8gICAgbWFza1NIQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMu bGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLIikpKSwKLS0gICAgbWFza1NI Q3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVz RGlyLCAiIiwgMSkpLAotKy8vICAgIG1hc2tTSEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JH cm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9M T0NBTExBQl9NQVNLIikpKSwKLSsgICAgbWFza1NIQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRv ckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAx KSksCi0gICAgIENDbWFza1NIc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4obWFz a1NIQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiQyIsIG51bGxwdHIsIGZhbHNlLCBm YWxzZSkpKSwKLSAgICAgTExtYXNrU0hzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3Iq PihtYXNrU0hDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMIiwgbnVsbHB0ciwgZmFs c2UsIGZhbHNlKSkpLAotICAgICBISG1hc2tTSHNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVk aXRvcio+KG1hc2tTSEN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkxDKGgpIiwgbnVs bHB0ciwgZmFsc2UsIHRydWUpKSksCi1AQCAtNDM1Niw3ICs0MzU1LDcgQEAgTG9jYWxsYWJTaGFk b3c6OkxvY2FsbGFiU2hhZG93KCk6Ci0gICAgIGNocm9tYXNrU0goR3RrOjptYW5hZ2UobmV3IEFk anVzdGVyKE0oIlRQX0xPQ0FMTEFCX0NIUk9NQVNLQ09MIiksIC0xMDAuMCwgMTAwLjAsIDAuMSwg MC4pKSksCi0gICAgIGdhbW1hc2tTSChHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9D QUxMQUJfR0FNTUFTS0NPTCIpLCAwLjI1LCA0LjAsIDAuMDEsIDEuKSkpLAotICAgICBzbG9tYXNr U0goR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NMT01BU0tDT0wiKSwg MC4wLCAxNS4wLCAwLjEsIDAuKSkpLAotLSAgICBtYXNrMlNIQ3VydmVFZGl0b3JHKG5ldyBDdXJ2 ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9N QVNLMiIpKSksCi0rICAgIG1hc2syU0hDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAo QXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxM QUJfTUFTSzIiKSkpLAotICAgICBMbWFza1NIc2hhcGUoc3RhdGljX2Nhc3Q8RGlhZ29uYWxDdXJ2 ZUVkaXRvcio+KG1hc2syU0hDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0RpYWdvbmFsLCAiTChM KSIpKSksCi0gICAgIGZhdFNIRnJhbWUoR3RrOjptYW5hZ2UobmV3IEd0azo6RnJhbWUoTSgiVFBf TE9DQUxMQUJfRkFUU0hGUkEiKSkpKSwKLSAgICAgZmF0YW1vdW50U0goR3RrOjptYW5hZ2UobmV3 IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0ZBVEFNT1VOVCIpLCAxLiwgMTAwLiwgMS4sIDEuKSkp LAotQEAgLTYxNTcsNyArNjE1Niw3IEBAIExvY2FsbGFiVmlicmFuY2U6OkxvY2FsbGFiVmlicmFu Y2UoKToKLSAgICAgcGFzdFNhdFRvZyhHdGs6Om1hbmFnZShuZXcgR3RrOjpDaGVja0J1dHRvbihN KCJUUF9WSUJSQU5DRV9QQVNUU0FUVE9HIikpKSksCi0gICAgIHNlbnNpdihHdGs6Om1hbmFnZShu ZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0VOU0kiKSwgMCwgMTAwLCAxLCAzMCkpKSwvL3Jl dXNlZCAtIHVudXNlZCBoZXJlLCBidXQgdXNlZCBmb3Igbm9ybWFsaXplX21lYW5fZHQgCi0gICAg IHByZXZpZXd2aWIoR3RrOjptYW5hZ2UobmV3IEd0azo6VG9nZ2xlQnV0dG9uKE0oIlRQX0xPQ0FM TEFCX1BSRVZJRVciKSkpKSwKLS0gICAgY3VydmVFZGl0b3JHRyhuZXcgQ3VydmVFZGl0b3JHcm91 cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfVklCUkFOQ0VfQ1VSVkVFRElUT1Jf U0tJTlRPTkVTX0xBQkVMIikpKSwKLSsgICAgY3VydmVFZGl0b3JHRyhuZXcgQ3VydmVFZGl0b3JH cm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9W SUJSQU5DRV9DVVJWRUVESVRPUl9TS0lOVE9ORVNfTEFCRUwiKSkpLAotICAgICBza2luVG9uZXND dXJ2ZShzdGF0aWNfY2FzdDxEaWFnb25hbEN1cnZlRWRpdG9yKj4oY3VydmVFZGl0b3JHRy0+YWRk Q3VydmUoQ1RfRGlhZ29uYWwsIE0oIlRQX1ZJQlJBTkNFX0NVUlZFRURJVE9SX1NLSU5UT05FUyIp KSkpLAotICAgICBleHByZWNvdnYoR3RrOjptYW5hZ2UobmV3IE15RXhwYW5kZXIoZmFsc2UsIE0o IlRQX0xPQ0FMTEFCX0RFTk9JMl9FWFAiKSkpKSwKLSAgICAgbWFza3VzYWJsZXYoR3RrOjptYW5h Z2UobmV3IEd0azo6TGFiZWwoTSgiVFBfTE9DQUxMQUJfTUFTS1VTQUJMRSIpKSkpLAotQEAgLTYx NzUsOCArNjE3NCw4IEBAIExvY2FsbGFiVmlicmFuY2U6OkxvY2FsbGFiVmlicmFuY2UoKToKLSAg ICAgZXhwbWFza3ZpYihHdGs6Om1hbmFnZShuZXcgTXlFeHBhbmRlcihmYWxzZSwgTSgiVFBfTE9D QUxMQUJfU0hPV1ZJIikpKSksCi0gICAgIHNob3dtYXNrdmliTWV0aG9kKEd0azo6bWFuYWdlKG5l dyBNeUNvbWJvQm94VGV4dCgpKSksCi0gICAgIGVuYXZpYk1hc2soR3RrOjptYW5hZ2UobmV3IEd0 azo6Q2hlY2tCdXR0b24oTSgiVFBfTE9DQUxMQUJfRU5BQkxFX01BU0siKSkpKSwKLS0gLy8gICBt YXNrdmliQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2Fs Q3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLIikpKSwKLS0gICAgbWFza3ZpYkN1cnZlRWRp dG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgIiIs IDEpKSwKLSsgLy8gICBtYXNrdmliQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFw cDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFC X01BU0siKSkpLAotKyAgICBtYXNrdmliQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3Vw KEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0g ICAgIENDbWFza3ZpYnNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2t2aWJD dXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJDIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNl KSkpLAotICAgICBMTG1hc2t2aWJzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPiht YXNrdmliQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTCIsIG51bGxwdHIsIGZhbHNl LCBmYWxzZSkpKSwKLSAgICAgSEhtYXNrdmlic2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRp dG9yICo+KG1hc2t2aWJDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMQyhoKSIsIG51 bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotQEAgLTYxODYsNyArNjE4NSw3IEBAIExvY2FsbGFiVmli cmFuY2U6OkxvY2FsbGFiVmlicmFuY2UoKToKLSAgICAgY2hyb21hc2t2aWIoR3RrOjptYW5hZ2Uo bmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0NIUk9NQVNLQ09MIiksIC0xMDAuMCwgMTAwLjAs IDAuMSwgMC4pKSksCi0gICAgIGdhbW1hc2t2aWIoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0o IlRQX0xPQ0FMTEFCX0dBTU1BU0tDT0wiKSwgMC4yNSwgNC4wLCAwLjAxLCAxLikpKSwKLSAgICAg c2xvbWFza3ZpYihHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0xPTUFT S0NPTCIpLCAwLjAsIDE1LjAsIDAuMSwgMC4pKSksCi0tICAgIG1hc2sydmliQ3VydmVFZGl0b3JH KG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9M T0NBTExBQl9NQVNLMiIpKSksCi0rICAgIG1hc2sydmliQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVk aXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0o IlRQX0xPQ0FMTEFCX01BU0syIikpKSwKLSAgICAgTG1hc2t2aWJzaGFwZShzdGF0aWNfY2FzdDxE aWFnb25hbEN1cnZlRWRpdG9yKj4obWFzazJ2aWJDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0Rp YWdvbmFsLCAiTChMKSIpKSkKLSB7Ci0gICAgIGF1dG8gbSA9IFByb2NFdmVudE1hcHBlcjo6Z2V0 SW5zdGFuY2UoKTsKLUBAIC03Njk0LDcgKzc2OTMsNyBAQCBMb2NhbGxhYkJsdXI6OkxvY2FsbGFi Qmx1cigpOgotICAgICBleHBkZW5vaXNlbmwoR3RrOjptYW5hZ2UobmV3IE15RXhwYW5kZXIoZmFs c2UsIE0oIlRQX0xPQ0FMTEFCX05MRlJBIikpKSksCi0gICAgIGV4cGRlbm9pc2VsdW0oR3RrOjpt YW5hZ2UobmV3IE15RXhwYW5kZXIoZmFsc2UsIE0oIlRQX0xPQ0FMTEFCX0RFTk9JV0FWTFVNIikp KSksCi0gICAgIGV4cGRlbm9pc2VjaChHdGs6Om1hbmFnZShuZXcgTXlFeHBhbmRlcihmYWxzZSwg TSgiVFBfTE9DQUxMQUJfREVOT0lXQVZDSCIpKSkpLAotLSAgICBMb2NhbGN1cnZlRWRpdG9yd2F2 ZGVuKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJU UF9MT0NBTExBQl9XQVZERU4iKSkpLAotKyAgICBMb2NhbGN1cnZlRWRpdG9yd2F2ZGVuKG5ldyBD dXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNE aXIsIE0oIlRQX0xPQ0FMTEFCX1dBVkRFTiIpKSksCi0gICAgIHdhdnNoYXBlZGVuKHN0YXRpY19j YXN0PEZsYXRDdXJ2ZUVkaXRvcio+KExvY2FsY3VydmVFZGl0b3J3YXZkZW4tPmFkZEN1cnZlKENU X0ZsYXQsICIiLCBudWxscHRyLCBmYWxzZSwgZmFsc2UpKSksCi0gICAvLyAgbENMYWJlbHMoR3Rr OjptYW5hZ2UobmV3IEd0azo6TGFiZWwoTSgiVFBfTE9DQUxMQUJfTENMQUJFTFMiKSkpKSwKLSAg ICAgbENMYWJlbHMoR3RrOjptYW5hZ2UobmV3IEd0azo6TGFiZWwoIi0tLS0tLS0tLS0tLS0tLS0t IikpKSwKLUBAIC03NzIwLDcgKzc3MTksNyBAQCBMb2NhbGxhYkJsdXI6OkxvY2FsbGFiQmx1cigp OgotICAgICBub2lzZWx1bWRldGFpbChHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9D QUxMQUJfTk9JU0VMVU1ERVRBSUwiKSwgMC4sIDEwMC4sIDAuMDEsIDUwLikpKSwKLSAgICAgbm9p c2VsZXF1YWwoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX05PSVNFTEVR VUFMIiksIC0yLCAxMCwgMSwgNywgR3RrOjptYW5hZ2UobmV3IFJUSW1hZ2UoImNpcmNsZS13aGl0 ZS1zbWFsbCIpKSwgR3RrOjptYW5hZ2UobmV3IFJUSW1hZ2UoImNpcmNsZS1ibGFjay1zbWFsbCIp KSkpKSwKLSAgICAgbm9pc2VnYW0oR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FM TEFCX05PSVNFR0FNIiksIDEuMCwgNS4sIDAuMSwgMS4pKSksCi0tICAgIExvY2FsY3VydmVFZGl0 b3J3YXZodWUobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIs IE0oIlRQX1dBVkVMRVRfREVOT0lTRUhVRSIpKSksCi0rICAgIExvY2FsY3VydmVFZGl0b3J3YXZo dWUobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2Nh bEN1cnZlc0RpciwgTSgiVFBfV0FWRUxFVF9ERU5PSVNFSFVFIikpKSwKLSAgICAgd2F2aHVlKHN0 YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KExvY2FsY3VydmVFZGl0b3J3YXZodWUtPmFkZEN1 cnZlKENUX0ZsYXQsICIiLCBudWxscHRyLCBmYWxzZSwgdHJ1ZSkpKSwKLSAgICAgbm9pc2VjaHJv ZihHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfTk9JU0VDSFJPRklORSIp LCBNSU5DSFJPLCBNQVhDSFJPLCAwLjAxLCAwLikpKSwKLSAgICAgbm9pc2VjaHJvYyhHdGs6Om1h bmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfTk9JU0VDSFJPQ09BUlNFIiksIE1JTkNI Uk8sIE1BWENIUk9DQywgMC4wMSwgMC4pKSksCi1AQCAtNzc1Miw4ICs3NzUxLDggQEAgTG9jYWxs YWJCbHVyOjpMb2NhbGxhYkJsdXIoKToKLSAgICAgc2hvd21hc2tibE1ldGhvZChHdGs6Om1hbmFn ZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotICAgICBzaG93bWFza2JsTWV0aG9kdHlwKEd0azo6 bWFuYWdlKG5ldyBNeUNvbWJvQm94VGV4dCgpKSksCi0gICAgIGVuYWJsTWFzayhHdGs6Om1hbmFn ZShuZXcgR3RrOjpDaGVja0J1dHRvbihNKCJUUF9MT0NBTExBQl9FTkFCTEVfTUFTSyIpKSkpLAot LS8vICAgIG1hc2tibEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxh c3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfTUFTSyIpKSksCi0tICAgIG1hc2tibEN1 cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0Rp ciwgIiIsIDEpKSwKLSsvLyAgICBtYXNrYmxDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3Jv dXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9D QUxMQUJfTUFTSyIpKSksCi0rICAgIG1hc2tibEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JH cm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCAiIiwgMSkp LAotICAgICBDQ21hc2tibHNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2ti bEN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkMiLCBudWxscHRyLCBmYWxzZSwgZmFs c2UpKSksCi0gICAgIExMbWFza2Jsc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4o bWFza2JsQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTCIsIG51bGxwdHIsIGZhbHNl LCBmYWxzZSkpKSwKLSAgICAgSEhtYXNrYmxzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0 b3IgKj4obWFza2JsQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTEMoaCkiLCBudWxs cHRyLCBmYWxzZSwgdHJ1ZSkpKSwKLUBAIC03NzY5LDkgKzc3NjgsOSBAQCBMb2NhbGxhYkJsdXI6 OkxvY2FsbGFiQmx1cigpOgotICAgICBzbG9tYXNrYmwoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVy KE0oIlRQX0xPQ0FMTEFCX1NMT01BU0tDT0wiKSwgMC4wLCAxNS4wLCAwLjEsIDAuKSkpLAotICAg ICBzaGFkbWFza2JsKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9ISUdI TUFTS0NPTCIpLCAwLCAxMDAsIDEsIDApKSksCi0gICAgIHNoYWRtYXNrYmxzaGEoR3RrOjptYW5h Z2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NIQU1BU0tDT0wiKSwgMCwgMTAwLCAxLCAw KSkpLAotLSAgICBtYXNrMmJsQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlv bnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLIikpKSwKLSsgICAgbWFz azJibEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRp b25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLIikpKSwKLSAgICAg TG1hc2tibHNoYXBlKHN0YXRpY19jYXN0PERpYWdvbmFsQ3VydmVFZGl0b3IqPihtYXNrMmJsQ3Vy dmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9EaWFnb25hbCwgIkwoTCkiKSkpLAotLSAgICBtYXNrMmJs Q3VydmVFZGl0b3JHd2F2KG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3Vy dmVzRGlyLCBNKCJUUF9MT0NBTExBQl9XQVZNQVNLIikpKSwKLSsgICAgbWFzazJibEN1cnZlRWRp dG9yR3dhdihuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFz dGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9XQVZNQVNLIikpKSwKLSAgICAgTExtYXNr YmxzaGFwZXdhdihzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihtYXNrMmJsQ3VydmVFZGl0 b3JHd2F2LT5hZGRDdXJ2ZShDVF9GbGF0LCAiTChMKSIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkp KSwKLSAgICAgcXVhSEJveChHdGs6Om1hbmFnZShuZXcgR3RrOjpCb3goKSkpLAotICAgICBjc1Ro cmVzaG9sZGJsdXIoR3RrOjptYW5hZ2UobmV3IFRocmVzaG9sZEFkanVzdGVyKE0oIlRQX0xPQ0FM TEFCX0NTVEhSRVNIT0xEQkxVUiIpLCAwLCA5LCAwLCAwLCA2LCA1LCAwLCBmYWxzZSkpKQotZGlm ZiAtLWdpdCBhL3J0Z3VpL2xvY2FsbGFidG9vbHMyLmNjIGIvcnRndWkvbG9jYWxsYWJ0b29sczIu Y2MKLWluZGV4IGFhYmRkMTk5YS4uOWY5ODIwMzFlIDEwMDY0NAotLS0tIGEvcnRndWkvbG9jYWxs YWJ0b29sczIuY2MKLSsrKyBiL3J0Z3VpL2xvY2FsbGFidG9vbHMyLmNjCi1AQCAtMzUsOCArMzUs NiBAQAotIHVzaW5nIG5hbWVzcGFjZSBydGVuZ2luZTsKLSB1c2luZyBuYW1lc3BhY2UgcHJvY3Bh cmFtczsKLSAKLS1leHRlcm4gT3B0aW9ucyBvcHRpb25zOwotLQotIHN0YXRpYyBkb3VibGUgcmV0 aVNsaWRlcjJuZWlnaChkb3VibGUgc3ZhbCkKLSB7Ci0gICAgIC8vIFNsaWRlciByYW5nZTogMCAt IDUwMDAKLUBAIC0xNDQsOCArMTQyLDggQEAgTG9jYWxsYWJUb25lOjpMb2NhbGxhYlRvbmUoKToK LSAgICAgc2hvd21hc2t0bU1ldGhvZChHdGs6Om1hbmFnZShuZXcgTXlDb21ib0JveFRleHQoKSkp LAotICAgICBlbmF0bU1hc2soR3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24oTSgiVFBf TE9DQUxMQUJfRU5BQkxFX01BU0siKSkpKSwKLSAgICAgZW5hdG1NYXNrYWZ0KEd0azo6bWFuYWdl KG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX0xPQ0FMTEFCX0VOQUJMRV9BRlRFUl9NQVNLIikp KSksCi0tLy8gICBtYXNrdG1DdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9u cy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0siKSkpLAotLSAgICBtYXNr dG1DdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2 ZXNEaXIsICIiLCAxKSksCi0rLy8gICBtYXNrdG1DdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9y R3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBf TE9DQUxMQUJfTUFTSyIpKSksCi0rICAgIG1hc2t0bUN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0 b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCAiIiwg MSkpLAotICAgICBDQ21hc2t0bXNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1h c2t0bUN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkMiLCBudWxscHRyLCBmYWxzZSwg ZmFsc2UpKSksCi0gICAgIExMbWFza3Rtc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9y Kj4obWFza3RtQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTCIsIG51bGxwdHIsIGZh bHNlLCBmYWxzZSkpKSwKLSAgICAgSEhtYXNrdG1zaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVF ZGl0b3IgKj4obWFza3RtQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTEMoaCkiLCBu dWxscHRyLCBmYWxzZSwgdHJ1ZSkpKSwKLUBAIC0xNTUsNyArMTUzLDcgQEAgTG9jYWxsYWJUb25l OjpMb2NhbGxhYlRvbmUoKToKLSAgICAgY2hyb21hc2t0bShHdGs6Om1hbmFnZShuZXcgQWRqdXN0 ZXIoTSgiVFBfTE9DQUxMQUJfQ0hST01BU0tDT0wiKSwgLTEwMC4wLCAxMDAuMCwgMC4xLCAwLikp KSwKLSAgICAgZ2FtbWFza3RtKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExB Ql9HQU1NQVNLQ09MIiksIDAuMDUsIDUuMCwgMC4wMSwgMS4pKSksCi0gICAgIHNsb21hc2t0bShH dGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfU0xPTUFTS0NPTCIpLCAwLjAs IDE1LjAsIDAuMSwgMC4pKSksCi0tICAgIG1hc2sydG1DdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRp dG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0sy IikpKSwKLSsgICAgbWFzazJ0bUN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6 OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9N QVNLMiIpKSksCi0gICAgIExtYXNrdG1zaGFwZShzdGF0aWNfY2FzdDxEaWFnb25hbEN1cnZlRWRp dG9yKj4obWFzazJ0bUN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRGlhZ29uYWwsICJMKEwpIikp KQotIHsKLSAgICAgYXV0byBtID0gUHJvY0V2ZW50TWFwcGVyOjpnZXRJbnN0YW5jZSgpOwotQEAg LTg5OSwxMiArODk3LDEyIEBAIExvY2FsbGFiUmV0aW5leDo6TG9jYWxsYWJSZXRpbmV4KCk6Ci0g ICAgIGxpZ2h0bmVzc3JldGkoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFC X0xJR0hUUkVUSSIpLCAwLjAxLCA0LjAsIDAuMDEsIDEuKSkpLAotICAgICBjbGlwdG0oR3RrOjpt YW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0NMSVBUTSIpLCAwLjAyLCAyLjAsIDAu MDEsIDEuKSkpLAotICAgICBzb2Z0cmFkaXVzcmV0KEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihN KCJUUF9MT0NBTExBQl9TT0ZUUkVUSSIpLCAwLjAsIDEwMC4wLCAwLjUsIDQwLikpKSwKLS0gICAg TG9jYWxjdXJ2ZUVkaXRvcnRyYW5zVChuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rs b2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfVFJBTlNNSVNTSU9OTUFQIikpKSwKLSsgICAg TG9jYWxjdXJ2ZUVkaXRvcnRyYW5zVChuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11 dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9UUkFOU01JU1NJ T05NQVAiKSkpLAotICAgICBjVHRyYW5zc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9y Kj4oTG9jYWxjdXJ2ZUVkaXRvcnRyYW5zVC0+YWRkQ3VydmUoQ1RfRmxhdCwgIiIsIG51bGxwdHIs IGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgbU1MYWJlbHMoR3RrOjptYW5hZ2UobmV3IEd0azo6TGFi ZWwoIi0tLSIpKSksCi0gICAgIHRyYW5zTGFiZWxzKEd0azo6bWFuYWdlKG5ldyBHdGs6OkxhYmVs KCItLS0iKSkpLAotICAgICB0cmFuc0xhYmVsczIoR3RrOjptYW5hZ2UobmV3IEd0azo6TGFiZWwo Ii0tLSIpKSksCi0tICAgIExvY2FsY3VydmVFZGl0b3JnYWluVChuZXcgQ3VydmVFZGl0b3JHcm91 cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfVFJBTlNNSVNTSU9O R0FJTiIpKSksCi0rICAgIExvY2FsY3VydmVFZGl0b3JnYWluVChuZXcgQ3VydmVFZGl0b3JHcm91 cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NB TExBQl9UUkFOU01JU1NJT05HQUlOIikpKSwKLSAgICAgY1RnYWluc2hhcGUoc3RhdGljX2Nhc3Q8 RmxhdEN1cnZlRWRpdG9yKj4oTG9jYWxjdXJ2ZUVkaXRvcmdhaW5ULT5hZGRDdXJ2ZShDVF9GbGF0 LCAiIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBleHByZWNvdnIoR3RrOjptYW5h Z2UobmV3IE15RXhwYW5kZXIoZmFsc2UsIE0oIlRQX0xPQ0FMTEFCX0RFTk9JMl9FWFAiKSkpKSwK LSAgICAgbWFza3VzYWJsZXIoR3RrOjptYW5hZ2UobmV3IEd0azo6TGFiZWwoTSgiVFBfTE9DQUxM QUJfTUFTS1VTQUJMRSIpKSkpLAotQEAgLTkxNyw4ICs5MTUsOCBAQCBMb2NhbGxhYlJldGluZXg6 OkxvY2FsbGFiUmV0aW5leCgpOgotICAgICBzaG93bWFza3JldGlNZXRob2QoR3RrOjptYW5hZ2Uo bmV3IE15Q29tYm9Cb3hUZXh0KCkpKSwKLSAgICAgZW5hcmV0aU1hc2soR3RrOjptYW5hZ2UobmV3 IEd0azo6Q2hlY2tCdXR0b24oTSgiVFBfTE9DQUxMQUJfRU5BQkxFX01BU0siKSkpKSwKLSAgICAg ZW5hcmV0aU1hc2t0bWFwKEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX0xP Q0FMTEFCX1RNX01BU0siKSkpKSwKLS0vLyAgIG1hc2tyZXRpQ3VydmVFZGl0b3JHKG5ldyBDdXJ2 ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9N QVNLIikpKSwKLS0gICAgbWFza3JldGlDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAo b3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0rLy8gICBtYXNrcmV0aUN1cnZl RWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFz dGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLIikpKSwKLSsgICAgbWFza3JldGlD dXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygp Lmxhc3Rsb2NhbEN1cnZlc0RpciwgIiIsIDEpKSwKLSAgICAgQ0NtYXNrcmV0aXNoYXBlKHN0YXRp Y19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2tyZXRpQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShD VF9GbGF0LCAiQyIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgTExtYXNrcmV0aXNo YXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2tyZXRpQ3VydmVFZGl0b3JHLT5h ZGRDdXJ2ZShDVF9GbGF0LCAiTCIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgSEht YXNrcmV0aXNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvciAqPihtYXNrcmV0aUN1cnZl RWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkxDKGgpIiwgbnVsbHB0ciwgZmFsc2UsIHRydWUp KSksCi1AQCAtOTI4LDcgKzkyNiw3IEBAIExvY2FsbGFiUmV0aW5leDo6TG9jYWxsYWJSZXRpbmV4 KCk6Ci0gICAgIGNocm9tYXNrcmV0aShHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9D QUxMQUJfQ0hST01BU0tDT0wiKSwgLTEwMC4wLCAxMDAuMCwgMC4xLCAwLikpKSwKLSAgICAgZ2Ft bWFza3JldGkoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0dBTU1BU0tD T0wiKSwgMC4wNSwgNS4wLCAwLjAxLCAxLikpKSwKLSAgICAgc2xvbWFza3JldGkoR3RrOjptYW5h Z2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NMT01BU0tDT0wiKSwgMC4wLCAxNS4wLCAw LjEsIDAuKSkpLAotLSAgICBtYXNrMnJldGlDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3Jv dXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0syIikpKSwK LSsgICAgbWFzazJyZXRpQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0 KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0sy IikpKSwKLSAgICAgTG1hc2tyZXRpc2hhcGUoc3RhdGljX2Nhc3Q8RGlhZ29uYWxDdXJ2ZUVkaXRv cio+KG1hc2sycmV0aUN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRGlhZ29uYWwsICJMKEwpIikp KSwKLSAgICAgaW52ZXJzcmV0KEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQ X0xPQ0FMTEFCX0lOVkVSUyIpKSkpCi0gewotQEAgLTI1MzYsNyArMjUzNCw3IEBAIExvY2FsbGFi Q29udHJhc3Q6OkxvY2FsbGFiQ29udHJhc3QoKToKLSAgICAgY29udEZyYW1lKEd0azo6bWFuYWdl KG5ldyBHdGs6OkZyYW1lKE0oIlRQX0xPQ0FMTEFCX0NPTlRXRlJBIikpKSksCi0gICAgIHNpZ21h bGMoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NJR01BV0FWIiksIDAu MiwgMi41LCAwLjAxLCAxLikpKSwKLSAgICAgb2Zmc2xjKEd0azo6bWFuYWdlKG5ldyBBZGp1c3Rl cihNKCJUUF9XQVZFTEVUX1dBVk9GRlNFVCIpLCAwLjMzLCAxLjYsIDAuMDEsIDEuKSkpLAotLSAg ICBMb2NhbGN1cnZlRWRpdG9yd2F2KG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxv Y2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9XQVYiKSkpLAotKyAgICBMb2NhbGN1cnZlRWRp dG9yd2F2KG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0 bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX1dBViIpKSksCi0gICAgIHdhdnNoYXBlKHN0 YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KExvY2FsY3VydmVFZGl0b3J3YXYtPmFkZEN1cnZl KENUX0ZsYXQsICIiLCBudWxscHRyLCBmYWxzZSwgZmFsc2UpKSksCi0gICAgIGNzVGhyZXNob2xk KEd0azo6bWFuYWdlKG5ldyBUaHJlc2hvbGRBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9DU1RIUkVT SE9MRCIpLCAwLCA5LCAwLCAwLCA3LCA1LCAwLCBmYWxzZSkpKSwKLSAgICAgcHJvY2Vzc3dhdihH dGs6Om1hbmFnZShuZXcgR3RrOjpDaGVja0J1dHRvbihNKCJUUF9MT0NBTExBQl9QUk9DRVNTV0FW IikpKSksCi1AQCAtMjU2OSw3ICsyNTY3LDcgQEAgTG9jYWxsYWJDb250cmFzdDo6TG9jYWxsYWJD b250cmFzdCgpOgotICAgICB3YXZlZGcoR3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24o TSgiVFBfTE9DQUxMQUJfRURHRlJBIikpKSksCi0gICAgIHN0cmVuZ3RodyhHdGs6Om1hbmFnZShu ZXcgQWRqdXN0ZXIoTSgiVFBfV0FWRUxFVF9FRFZBTCIpLCAwLiwgMTAwLjAsIDAuNSwgMC4pKSks Ci0gICAgIHNpZ21hZWQoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NJ R01BV0FWIiksIDAuMiwgMi41LCAwLjAxLCAxLikpKSwKLS0gICAgTG9jYWxjdXJ2ZUVkaXRvcndh dmVkZyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgi VFBfTE9DQUxMQUJfV0FWRURHIikpKSwKLSsgICAgTG9jYWxjdXJ2ZUVkaXRvcndhdmVkZyhuZXcg Q3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVz RGlyLCBNKCJUUF9MT0NBTExBQl9XQVZFREciKSkpLAotICAgICB3YXZzaGFwZWVkZyhzdGF0aWNf Y2FzdDxGbGF0Q3VydmVFZGl0b3IqPihMb2NhbGN1cnZlRWRpdG9yd2F2ZWRnLT5hZGRDdXJ2ZShD VF9GbGF0LCAiIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBncmFkdyhHdGs6Om1h bmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfV0FWRUxFVF9FREdFREVURUNUIiksIDAuLCAxMDAuMCwg MC41LCA5MC4pKSksCi0gICAgIHdhdmVzaG93KEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0 dG9uKE0oIlRQX0xPQ0FMTEFCX0VER1NIT1ciKSkpKSwKLUBAIC0yNTg2LDcgKzI1ODQsNyBAQCBM b2NhbGxhYkNvbnRyYXN0OjpMb2NhbGxhYkNvbnRyYXN0KCk6Ci0gICAgIGxldmVsYmx1cihHdGs6 Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfTEVWRUxCTFVSIiksIDAuLCAxMDAu LCAwLjUsIDAuKSkpLAotICAgICBzaWdtYWJsKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJU UF9MT0NBTExBQl9TSUdNQVdBViIpLCAwLjIsIDIuNSwgMC4wMSwgMS4pKSksCi0gICAgIGNocm9t YWJsdShHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfQ0hST01BQkxVIiks IDAuMCwgNS4sIDAuMSwgMC4pKSksCi0tICAgIExvY2FsY3VydmVFZGl0b3J3YXZsZXYobmV3IEN1 cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFC X1dBVkxFViIpKSksCi0rICAgIExvY2FsY3VydmVFZGl0b3J3YXZsZXYobmV3IEN1cnZlRWRpdG9y R3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBf TE9DQUxMQUJfV0FWTEVWIikpKSwKLSAgICAgd2F2c2hhcGVsZXYoc3RhdGljX2Nhc3Q8RmxhdEN1 cnZlRWRpdG9yKj4oTG9jYWxjdXJ2ZUVkaXRvcndhdmxldi0+YWRkQ3VydmUoQ1RfRmxhdCwgIiIs IG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgcmVzaWRibHVyKEd0azo6bWFuYWdlKG5l dyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9SRVNJREJMVVIiKSwgMC4sIDEwMC4sIDAuNSwgMC4p KSksCi0gICAgIGJsdXJsYyhHdGs6Om1hbmFnZShuZXcgR3RrOjpDaGVja0J1dHRvbihNKCJUUF9M T0NBTExBQl9CTFVSTEMiKSkpKSwKLUBAIC0yNTk1LDEwICsyNTkzLDEwIEBAIExvY2FsbGFiQ29u dHJhc3Q6OkxvY2FsbGFiQ29udHJhc3QoKToKLSAgICAgc2lnbWEoR3RrOjptYW5hZ2UobmV3IEFk anVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NJR01BV0FWIiksIDAuMiwgMi41LCAwLjAxLCAxLikpKSwK LSAgICAgb2Zmc2V0KEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9PRkZT RVRXQVYiKSwgMC4zMywgMS42NiwgMC4wMSwgMS4sIEd0azo6bWFuYWdlKG5ldyBSVEltYWdlKCJj aXJjbGUtYmxhY2stc21hbGwiKSksIEd0azo6bWFuYWdlKG5ldyBSVEltYWdlKCJjaXJjbGUtd2hp dGUtc21hbGwiKSkpKSksCi0gICAgIGNocm9tYWxldihHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIo TSgiVFBfTE9DQUxMQUJfQ0hST01BTEVWIiksIDAuMSwgNS4sIDAuMSwgMS4pKSksCi0tICAgIExv Y2FsY3VydmVFZGl0b3J3YXZjb24obmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9j YWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX1dBVkNPTiIpKSksCi0rICAgIExvY2FsY3VydmVF ZGl0b3J3YXZjb24obmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygp Lmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfV0FWQ09OIikpKSwKLSAgICAgd2F2 c2hhcGVjb24oc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4oTG9jYWxjdXJ2ZUVkaXRvcndh dmNvbi0+YWRkQ3VydmUoQ1RfRmxhdCwgIiIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAg ICAgd2F2Y29tcHJlKEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX0xPQ0FM TEFCX0NPTVBSRUZSQSIpKSkpLAotLSAgICBMb2NhbGN1cnZlRWRpdG9yd2F2Y29tcHJlKG5ldyBD dXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExB Ql9XQVZDT01QUkUiKSkpLAotKyAgICBMb2NhbGN1cnZlRWRpdG9yd2F2Y29tcHJlKG5ldyBDdXJ2 ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIs IE0oIlRQX0xPQ0FMTEFCX1dBVkNPTVBSRSIpKSksCi0gICAgIHdhdnNoYXBlY29tcHJlKHN0YXRp Y19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KExvY2FsY3VydmVFZGl0b3J3YXZjb21wcmUtPmFkZEN1 cnZlKENUX0ZsYXQsICIiLCBudWxscHRyLCBmYWxzZSwgZmFsc2UpKSksCi0gICAgIHNpZ21hZHIo R3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NJR01BV0FWIiksIDAuMiwg Mi41LCAwLjAxLCAxLikpKSwKLSAgICAgdGhyZXN3YXYoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVy KE0oIlRQX0xPQ0FMTEFCX1RIUkVTV0FWIiksIDAuOSwgMi4sIDAuMDEsIDEuNCkpKSwKLUBAIC0y NjA2LDcgKzI2MDQsNyBAQCBMb2NhbGxhYkNvbnRyYXN0OjpMb2NhbGxhYkNvbnRyYXN0KCk6Ci0g ICAgIHdhdmNvbXAoR3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24oTSgiVFBfTE9DQUxM QUJfQ09NUEZSQSIpKSkpLAotICAgICBzaWdtYWRjKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihN KCJUUF9MT0NBTExBQl9TSUdNQVdBViIpLCAwLjIsIDMuLCAwLjAxLCAxLikpKSwKLSAgICAgZGVs dGFkKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9ERUxUQUQiKSwgLTMu LCAzLiwgMC4xLCAwLikpKSwvLywgR3RrOjptYW5hZ2UobmV3IFJUSW1hZ2UoImNpcmNsZS1ibGFj ay1zbWFsbCIpKSwgR3RrOjptYW5hZ2UobmV3IFJUSW1hZ2UoImNpcmNsZS13aGl0ZS1zbWFsbCIp KSkpKSwKLS0gICAgTG9jYWxjdXJ2ZUVkaXRvcndhdmNvbXAobmV3IEN1cnZlRWRpdG9yR3JvdXAo b3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX1dBVkNPTVAiKSkpLAot KyAgICBMb2NhbGN1cnZlRWRpdG9yd2F2Y29tcChuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6Omdl dCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9XQVZD T01QIikpKSwKLSAgICAgd2F2c2hhcGVjb21wKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+ KExvY2FsY3VydmVFZGl0b3J3YXZjb21wLT5hZGRDdXJ2ZShDVF9GbGF0LCAiIiwgbnVsbHB0ciwg ZmFsc2UsIGZhbHNlKSkpLAotICAgICAvL2ZhdHJlcyhHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIo TSgiVFBfTE9DQUxMQUJfRkFUUkVTIiksIDAuLCAxMDAuLCAxLiwgMC4pKSksCi0gICAgIGZmdHds YyhHdGs6Om1hbmFnZShuZXcgR3RrOjpDaGVja0J1dHRvbihNKCJUUF9MT0NBTExBQl9GRlRXIikp KSksCi1AQCAtMjYyMSwxNSArMjYxOSwxNSBAQCBMb2NhbGxhYkNvbnRyYXN0OjpMb2NhbGxhYkNv bnRyYXN0KCk6Ci0gICAgIGV4cG1hc2tsYyhHdGs6Om1hbmFnZShuZXcgTXlFeHBhbmRlcihmYWxz ZSwgTSgiVFBfTE9DQUxMQUJfU0hPV0xDIikpKSksCi0gICAgIHNob3dtYXNrbGNNZXRob2QoR3Rr OjptYW5hZ2UobmV3IE15Q29tYm9Cb3hUZXh0KCkpKSwKLSAgICAgZW5hbGNNYXNrKEd0azo6bWFu YWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX0xPQ0FMTEFCX0VOQUJMRV9NQVNLIikpKSks Ci0tLy8gICAgbWFza2xjQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMu bGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLIikpKSwKLS0gICAgbWFza2xj Q3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVz RGlyLCAiIiwgMSkpLAotKy8vICAgIG1hc2tsY0N1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JH cm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9M T0NBTExBQl9NQVNLIikpKSwKLSsgICAgbWFza2xjQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRv ckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAx KSksCi0gICAgIENDbWFza2xjc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4obWFz a2xjQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiQyIsIG51bGxwdHIsIGZhbHNlLCBm YWxzZSkpKSwKLSAgICAgTExtYXNrbGNzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3Iq PihtYXNrbGNDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMIiwgbnVsbHB0ciwgZmFs c2UsIGZhbHNlKSkpLAotICAgICBISG1hc2tsY3NoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVk aXRvciAqPihtYXNrbGNDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMQyhoKSIsIG51 bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotICAgICBibGVuZG1hc2tsYyhHdGs6Om1hbmFnZShuZXcg QWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfQkxFTkRNQVNLQ09MIiksIC0xMDAsIDEwMCwgMSwgMCkp KSwKLSAgICAgcmFkbWFza2xjKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExB Ql9SQURNQVNLQ09MIiksIDAuMCwgMTAwLjAsIDAuMSwgMC4pKSksCi0gICAgIGNocm9tYXNrbGMo R3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0NIUk9NQVNLQ09MIiksIC0x MDAuMCwgMTAwLjAsIDAuMSwgMC4pKSksCi0tICAgIG1hc2sybGNDdXJ2ZUVkaXRvckcobmV3IEN1 cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFC X01BU0syIikpKSwKLSsgICAgbWFzazJsY0N1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91 cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NB TExBQl9NQVNLMiIpKSksCi0gICAgIExtYXNrbGNzaGFwZShzdGF0aWNfY2FzdDxEaWFnb25hbEN1 cnZlRWRpdG9yKj4obWFzazJsY0N1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRGlhZ29uYWwsICJM KEwpIikpKQotIHsKLSAgICAgYXV0byBtID0gUHJvY0V2ZW50TWFwcGVyOjpnZXRJbnN0YW5jZSgp OwotQEAgLTQ3NjcsOCArNDc2NSw4IEBAIGRlY2F5Y2IoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVy KE0oIlRQX0xPQ0FMTEFCX01BU0tEREVDQVkiKSwgMC41LCA0LiwgMC4xLCAyLikpCi0gZXhwbWFz a2NiKEd0azo6bWFuYWdlKG5ldyBNeUV4cGFuZGVyKGZhbHNlLCBNKCJUUF9MT0NBTExBQl9TSE9X Q0IiKSkpKSwKLSBzaG93bWFza2NiTWV0aG9kKEd0azo6bWFuYWdlKG5ldyBNeUNvbWJvQm94VGV4 dCgpKSksCi0gZW5hY2JNYXNrKEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQ X0xPQ0FMTEFCX0VOQUJMRV9NQVNLIikpKSksCi0tLy8gIG1hc2tjYkN1cnZlRWRpdG9yRyhuZXcg Q3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxM QUJfTUFTSyIpKSksCi0tbWFza2NiQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9w dGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCAiIiwgMSkpLAotKy8vICBtYXNrY2JDdXJ2ZUVkaXRv ckcobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2Nh bEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfTUFTSyIpKSksCi0rbWFza2NiQ3VydmVFZGl0b3JH KG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxD dXJ2ZXNEaXIsICIiLCAxKSksCi0gQ0NtYXNrY2JzaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVF ZGl0b3IqPihtYXNrY2JDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJDIiwgbnVsbHB0 ciwgZmFsc2UsIGZhbHNlKSkpLAotIExMbWFza2Nic2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZl RWRpdG9yKj4obWFza2NiQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiTCIsIG51bGxw dHIsIGZhbHNlLCBmYWxzZSkpKSwKLSBISG1hc2tjYnNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2 ZUVkaXRvciAqPihtYXNrY2JDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMQyhoKSIs IG51bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotQEAgLTQ3NzgsNyArNDc3Niw3IEBAIGxhcG1hc2tj YihHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfTEFQTUFTS0NPTCIpLCAw LjAsIDEwMC4wLCAwLjEsCi0gY2hyb21hc2tjYihHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgi VFBfTE9DQUxMQUJfQ0hST01BU0tDT0wiKSwgLTEwMC4wLCAxMDAuMCwgMC4xLCAwLikpKSwKLSBn YW1tYXNrY2IoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0dBTU1BU0tD T0wiKSwgMC4yNSwgNC4wLCAwLjAxLCAxLikpKSwKLSBzbG9tYXNrY2IoR3RrOjptYW5hZ2UobmV3 IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NMT01BU0tDT0wiKSwgMC4wLCAxNS4wLCAwLjEsIDAu KSkpLAotLW1hc2syY2JDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5s YXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0syIikpKSwKLSttYXNrMmNiQ3Vy dmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5s YXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX01BU0syIikpKSwKLSBMbWFza2Nic2hh cGUoc3RhdGljX2Nhc3Q8RGlhZ29uYWxDdXJ2ZUVkaXRvcio+KG1hc2syY2JDdXJ2ZUVkaXRvckct PmFkZEN1cnZlKENUX0RpYWdvbmFsLCAiTChMKSIpKSksCi0gCi0gbHVtYWNvbnRyYXN0TWludXNC dXR0b24oR3RrOjptYW5hZ2UobmV3IEd0azo6QnV0dG9uKE0oIlRQX0RJUlBZUkVRVUFMSVpFUl9M VU1BQ09OVFJBU1RfTUlOVVMiKSkpKSwKLUBAIC01NTk3LDcgKzU1OTUsNyBAQCBMb2NhbGxhYkxv Zzo6TG9jYWxsYWJMb2coKToKLSAgICAgc2F0dXJsKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihN KCJUUF9MT0NBTExBQl9TQVRVUlYiKSwgLTEwMC4sIDEwMC4sIDAuNSwgMC4pKSksCi0gICAgIGNo cm9tbChHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfQ0hST01MIiksIC0x MDAuLCAxMDAuLCAwLjUsIDAuKSkpLAotICAgICBleHBMKEd0azo6bWFuYWdlKG5ldyBNeUV4cGFu ZGVyKGZhbHNlLCBNKCJUUF9MT0NBTExBQl9MT0dFWFAiKSkpKSwKLS0gICAgLy9DdXJ2ZUVkaXRv ckwobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQ X0xPQ0FMTEFCX0xPR0NPTlRRIikpKSwKLSsgICAgLy9DdXJ2ZUVkaXRvckwobmV3IEN1cnZlRWRp dG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgi VFBfTE9DQUxMQUJfTE9HQ09OVFEiKSkpLAotICAgICAvL0xzaGFwZUwoc3RhdGljX2Nhc3Q8RGlh Z29uYWxDdXJ2ZUVkaXRvcio+KEN1cnZlRWRpdG9yTC0+YWRkQ3VydmUoQ1RfRGlhZ29uYWwsICJR KFEpIikpKSwKLSAgICAgdGFyZ2FicyhHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9D QUxMQUJfU09VUkNFX0FCUyIpLCAwLjAxLCAxNjM4NC4wLCAwLjAxLCAxNi4wKSkpLAotICAgICBz dXJyb3VuZChHdGs6Om1hbmFnZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotQEAgLTU2MjAsMTUg KzU2MTgsMTUgQEAgTG9jYWxsYWJMb2c6OkxvY2FsbGFiTG9nKCk6Ci0gICAgIGV4cG1hc2tMKEd0 azo6bWFuYWdlKG5ldyBNeUV4cGFuZGVyKGZhbHNlLCBNKCJUUF9MT0NBTExBQl9TSE9XQyIpKSkp LAotICAgICBzaG93bWFza0xNZXRob2QoR3RrOjptYW5hZ2UobmV3IE15Q29tYm9Cb3hUZXh0KCkp KSwKLSAgICAgZW5hTE1hc2soR3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24oTSgiVFBf TE9DQUxMQUJfRU5BQkxFX01BU0siKSkpKSwKLS0vLyAgIG1hc2tDdXJ2ZUVkaXRvckwobmV3IEN1 cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFC X01BU0tDT0wiKSkpLAotLSAgICBtYXNrQ3VydmVFZGl0b3JMKG5ldyBDdXJ2ZUVkaXRvckdyb3Vw KG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCAiIiwgMSkpLAotKy8vICAgbWFza0N1cnZlRWRp dG9yTChuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxv Y2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLQ09MIikpKSwKLSsgICAgbWFza0N1cnZl RWRpdG9yTChuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFz dGxvY2FsQ3VydmVzRGlyLCAiIiwgMSkpLAotICAgICBDQ21hc2tzaGFwZUwoc3RhdGljX2Nhc3Q8 RmxhdEN1cnZlRWRpdG9yKj4obWFza0N1cnZlRWRpdG9yTC0+YWRkQ3VydmUoQ1RfRmxhdCwgIkMi LCBudWxscHRyLCBmYWxzZSwgZmFsc2UpKSksCi0gICAgIExMbWFza3NoYXBlTChzdGF0aWNfY2Fz dDxGbGF0Q3VydmVFZGl0b3IqPihtYXNrQ3VydmVFZGl0b3JMLT5hZGRDdXJ2ZShDVF9GbGF0LCAi TCIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgSEhtYXNrc2hhcGVMKHN0YXRpY19j YXN0PEZsYXRDdXJ2ZUVkaXRvciAqPihtYXNrQ3VydmVFZGl0b3JMLT5hZGRDdXJ2ZShDVF9GbGF0 LCAiTEMoaCkiLCBudWxscHRyLCBmYWxzZSwgdHJ1ZSkpKSwKLSAgICAgYmxlbmRtYXNrTChHdGs6 Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfQkxFTkRNQVNLQ09MIiksIC0xMDAs IDEwMCwgMSwgMCkpKSwKLSAgICAgcmFkbWFza0woR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0o IlRQX0xPQ0FMTEFCX1JBRE1BU0tDT0wiKSwgMC4wLCAxMDAuMCwgMC4xLCAwLikpKSwKLSAgICAg Y2hyb21hc2tMKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9DSFJPTUFT S0NPTCIpLCAtMTAwLjAsIDEwMC4wLCAwLjEsIDAuKSkpLAotLSAgICBtYXNrMkN1cnZlRWRpdG9y TChuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBf TE9DQUxMQUJfTUFTSzIiKSkpLAotKyAgICBtYXNrMkN1cnZlRWRpdG9yTChuZXcgQ3VydmVFZGl0 b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJU UF9MT0NBTExBQl9NQVNLMiIpKSksCi0gICAgIExtYXNrc2hhcGVMKHN0YXRpY19jYXN0PERpYWdv bmFsQ3VydmVFZGl0b3IqPihtYXNrMkN1cnZlRWRpdG9yTC0+YWRkQ3VydmUoQ1RfRGlhZ29uYWws ICJMKEwpIikpKQotIAotIAotQEAgLTcxMDEsOCArNzA5OSw4IEBAIExvY2FsbGFiTWFzazo6TG9j YWxsYWJNYXNrKCk6Ci0gICAgIHNvZnRyYWRpdXNtYXNrKEd0azo6bWFuYWdlKG5ldyBBZGp1c3Rl cihNKCJUUF9MT0NBTExBQl9TT0ZUUkFESVVTQ09MIiksIDAuMCwgMTAwLjAsIDAuNSwgMS4pKSks Ci0gICAgIHNob3dtYXNrX01ldGhvZChHdGs6Om1hbmFnZShuZXcgTXlDb21ib0JveFRleHQoKSkp LAotICAgICBlbmFtYXNrKEd0azo6bWFuYWdlKG5ldyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX0xP Q0FMTEFCX0VOQUJMRV9NQVNLIikpKSksCi0tLy8gICAgbWFza19DdXJ2ZUVkaXRvckcobmV3IEN1 cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFC X01BU0tDT0wiKSkpLAotLSAgICBtYXNrX0N1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91 cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgIiIsIDEpKSwKLSsvLyAgICBtYXNrX0N1cnZl RWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFz dGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNLQ09MIikpKSwKLSsgICAgbWFza19D dXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygp Lmxhc3Rsb2NhbEN1cnZlc0RpciwgIiIsIDEpKSwKLSAgICAgQ0NtYXNrX3NoYXBlKHN0YXRpY19j YXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2tfQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0 LCAiQyIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgTExtYXNrX3NoYXBlKHN0YXRp Y19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2tfQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9G bGF0LCAiTCIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgSEhtYXNrX3NoYXBlKHN0 YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvciAqPihtYXNrX0N1cnZlRWRpdG9yRy0+YWRkQ3VydmUo Q1RfRmxhdCwgIkxDKGgpIiwgbnVsbHB0ciwgZmFsc2UsIHRydWUpKSksCi1AQCAtNzEyMCwxMSAr NzExOCwxMSBAQCBMb2NhbGxhYk1hc2s6OkxvY2FsbGFiTWFzaygpOgotICAgICBnYW1tYXNrKEd0 azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9HQU1NQVNLQ09MIiksIDAuMjUs IDQuMCwgMC4wMSwgMS4pKSksCi0gICAgIHNsb3BtYXNrKEd0azo6bWFuYWdlKG5ldyBBZGp1c3Rl cihNKCJUUF9MT0NBTExBQl9TTE9NQVNLQ09MIiksIDAuMCwgMTUuMCwgMC4xLCAwLikpKSwKLSAg ICAgc2hhZG1hc2soR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX1NIQU1B U0tDT0wiKSwgMCwgMTAwLCAxLCAwKSkpLAotLSAgICBtYXNrX0hDdXJ2ZUVkaXRvckcobmV3IEN1 cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFC X01BU0tIIikpKSwKLSsgICAgbWFza19IQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3Vw KEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FM TEFCX01BU0tIIikpKSwKLSAgICAgSEhobWFza19zaGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVF ZGl0b3IgKj4obWFza19IQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiaChoKSIsIG51 bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotLSAgICBtYXNrMkN1cnZlRWRpdG9yRyhuZXcgQ3VydmVF ZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfTUFT SzIiKSkpLAotKyAgICBtYXNrMkN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6 OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9N QVNLMiIpKSksCi0gICAgIExtYXNrX3NoYXBlKHN0YXRpY19jYXN0PERpYWdvbmFsQ3VydmVFZGl0 b3IqPihtYXNrMkN1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRGlhZ29uYWwsICJMKEwpIikpKSwK LS0gICAgbWFzazJDdXJ2ZUVkaXRvckd3YXYobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5s YXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX1dBVk1BU0siKSkpLAotKyAgICBtYXNr MkN1cnZlRWRpdG9yR3dhdihuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRp b25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9XQVZNQVNLIikpKSwKLSAg ICAgTExtYXNrX3NoYXBld2F2KHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2syQ3Vy dmVFZGl0b3JHd2F2LT5hZGRDdXJ2ZShDVF9GbGF0LCAiTChMKSIsIG51bGxwdHIsIGZhbHNlLCBm YWxzZSkpKSwKLSAgICAgY3NUaHJlc2hvbGRtYXNrKEd0azo6bWFuYWdlKG5ldyBUaHJlc2hvbGRB ZGp1c3RlcihNKCJUUF9MT0NBTExBQl9DU1RIUkVTSE9MREJMVVIiKSwgMCwgOSwgMCwgMCwgNiwg NSwgMCwgZmFsc2UpKSksCi0gICAgIGdyYWRGcmFtZW1hc2soR3RrOjptYW5hZ2UobmV3IEd0azo6 RnJhbWUoTSgiVFBfTE9DQUxMQUJfR1JBREZSQSIpKSkpLAotQEAgLTgwNzYsNyArODA3NCw3IEBA IExvY2FsbGFiY2llOjpMb2NhbGxhYmNpZSgpOgotICAgICBleHB3YXZqeihHdGs6Om1hbmFnZShu ZXcgTXlFeHBhbmRlcihmYWxzZSwgTSgiVFBfTE9DQUxMQUJfSlpXQVZFWFAiKSkpKSwKLSAgICAg Y29udEZyYW1lanooR3RrOjptYW5hZ2UobmV3IEd0azo6RnJhbWUoTSgiVFBfTE9DQUxMQUJfQ09O VFdGUkEiKSkpKSwKLSAgICAgc2lnbWFsY2p6KEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJU UF9MT0NBTExBQl9TSUdNQVdBViIpLCAwLjIsIDIuNSwgMC4wMSwgMS4pKSksCi0tICAgIExvY2Fs Y3VydmVFZGl0b3J3YXZqeihuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1 cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfV0FWIikpKSwKLSsgICAgTG9jYWxjdXJ2ZUVkaXRvcndh dmp6KG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9j YWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FMTEFCX1dBViIpKSksCi0gICAgIHdhdnNoYXBlanooc3Rh dGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4oTG9jYWxjdXJ2ZUVkaXRvcndhdmp6LT5hZGRDdXJ2 ZShDVF9GbGF0LCAiIiwgbnVsbHB0ciwgZmFsc2UsIGZhbHNlKSkpLAotICAgICBjc1RocmVzaG9s ZGp6KEd0azo6bWFuYWdlKG5ldyBUaHJlc2hvbGRBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9DU1RI UkVTSE9MRCIpLCAwLCA5LCAwLCAwLCA3LCA0LCAwLCBmYWxzZSkpKSwKLSAgICAgY2xhcmlGcmFt ZWp6KEd0azo6bWFuYWdlKG5ldyBHdGs6OkZyYW1lKE0oIlRQX0xPQ0FMTEFCX0NMQVJJRlJBIikp KSksCi1AQCAtODIwOSwyNCArODIwNywyNCBAQCBMb2NhbGxhYmNpZTo6TG9jYWxsYWJjaWUoKToK LSAgICAgcnN0cHJvdGVjdGNpZShHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfQ09MT1JB UFBfUlNUUFJPIiksIDAuLCAxMDAuLCAwLjEsIDAuKSkpLAotICAgICBjaHJvbWxjaWUoR3RrOjpt YW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0NIUk9NTCIpLCAtMTAwLiwgMTAwLiwg MC41LCAwLikpKSwKLSAgICAgaHVlY2llKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9M T0NBTExBQl9IVUVDSUUiKSwgLTEwMC4sIDEwMC4sIDAuMSwgMC4pKSksCi0tICAgIGNpZUN1cnZl RWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0Rpciwg TSgiVFBfTE9DQUxMQUJfQ1VSVkVTX0NJRSIpKSksCi0rICAgIGNpZUN1cnZlRWRpdG9yRyhuZXcg Q3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVz RGlyLCBNKCJUUF9MT0NBTExBQl9DVVJWRVNfQ0lFIikpKSwKLSAgICAgdG9uZU1ldGhvZGNpZShH dGs6Om1hbmFnZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotICAgICBzaGFwZWNpZShzdGF0aWNf Y2FzdDxEaWFnb25hbEN1cnZlRWRpdG9yKj4oY2llQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9E aWFnb25hbCwgIiIsIHRvbmVNZXRob2RjaWUpKSksCi0tICAgIGNpZUN1cnZlRWRpdG9yRzIobmV3 IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsIE0oIlRQX0xPQ0FM TEFCX0NPTE9SX0NJRSIpKSksCi0rICAgIGNpZUN1cnZlRWRpdG9yRzIobmV3IEN1cnZlRWRpdG9y R3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBf TE9DQUxMQUJfQ09MT1JfQ0lFIikpKSwKLSAgICAgdG9uZU1ldGhvZGNpZTIoR3RrOjptYW5hZ2Uo bmV3IE15Q29tYm9Cb3hUZXh0KCkpKSwKLSAgICAgc2hhcGVjaWUyKHN0YXRpY19jYXN0PERpYWdv bmFsQ3VydmVFZGl0b3IqPihjaWVDdXJ2ZUVkaXRvckcyLT5hZGRDdXJ2ZShDVF9EaWFnb25hbCwg IiIsIHRvbmVNZXRob2RjaWUyKSkpLAotIAotICAgICBjaHJvbWp6Y2llKEd0azo6bWFuYWdlKG5l dyBBZGp1c3RlcihNKCJUUF9MT0NBTExBQl9KWkNIUk9NIiksIC0xMDAuLCAxMDAuLCAwLjUsIDAu KSkpLAotICAgICBzYXR1cmp6Y2llKEd0azo6bWFuYWdlKG5ldyBBZGp1c3RlcihNKCJUUF9MT0NB TExBQl9KWlNBVCIpLCAtMTAwLiwgMTAwLiwgMC41LCAwLikpKSwKLSAgICAgaHVlanpjaWUoR3Rr OjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FMTEFCX0paSFVFQ0lFIiksIC0xMDAuLCAx MDAuLCAwLjEsIDAuKSkpLAotLSAgICBqejFDdXJ2ZUVkaXRvckcobmV3IEN1cnZlRWRpdG9yR3Jv dXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0rICAgIGp6MUN1cnZlRWRp dG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxv Y2FsQ3VydmVzRGlyLCAiIiwgMSkpLAotICAgICBzaGFwZWp6KHN0YXRpY19jYXN0PERpYWdvbmFs Q3VydmVFZGl0b3IqPihqejFDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0RpYWdvbmFsLCAiSnoo SikiKSkpLAotICAgICBzaGFwZWN6KHN0YXRpY19jYXN0PERpYWdvbmFsQ3VydmVFZGl0b3IqPihq ejFDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0RpYWdvbmFsLCAiQ3ooQykiKSkpLAotIAotICAg ICBIRnJhbWVqeihHdGs6Om1hbmFnZShuZXcgR3RrOjpGcmFtZShNKCJUUF9MT0NBTExBQl9KWkhG UkEiKSkpKSwKLSAgICAgSnpIRnJhbWVqeihHdGs6Om1hbmFnZShuZXcgR3RrOjpGcmFtZShNKCJU UF9MT0NBTExBQl9KWkhKWkZSQSIpKSkpLAotLSAgICBqejJDdXJ2ZUVkaXRvckcobmV3IEN1cnZl RWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0tICAgIGp6 M0N1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZl c0RpciwgIiIsIDEpKSwKLSsgICAganoyQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3Vw KEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0bG9jYWxDdXJ2ZXNEaXIsICIiLCAxKSksCi0r ICAgIGp6M0N1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9v cHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCAiIiwgMSkpLAotICAgICBzaGFwZWN6anooc3Rh dGljX2Nhc3Q8RGlhZ29uYWxDdXJ2ZUVkaXRvcio+KGp6MUN1cnZlRWRpdG9yRy0+YWRkQ3VydmUo Q1RfRGlhZ29uYWwsICJDeihKKSIpKSksCi0gICAgIEhIc2hhcGVqeihzdGF0aWNfY2FzdDxGbGF0 Q3VydmVFZGl0b3IqPihqejNDdXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJIeihIeiki LCBudWxscHRyLCBmYWxzZSwgdHJ1ZSkpKSwKLSAgICAgQ0hzaGFwZWp6KHN0YXRpY19jYXN0PEZs YXRDdXJ2ZUVkaXRvcio+KGp6M0N1cnZlRWRpdG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkN6KEh6 KSIsIG51bGxwdHIsIGZhbHNlLCB0cnVlKSkpLAotQEAgLTgyNjEsNyArODI1OSw3IEBAIExvY2Fs bGFiY2llOjpMb2NhbGxhYmNpZSgpOgotICAgICBzaG93bWFza2NpZU1ldGhvZChHdGs6Om1hbmFn ZShuZXcgTXlDb21ib0JveFRleHQoKSkpLAotICAgICBlbmFjaWVNYXNrKEd0azo6bWFuYWdlKG5l dyBHdGs6OkNoZWNrQnV0dG9uKE0oIlRQX0xPQ0FMTEFCX0VOQUJMRV9NQVNLIikpKSksCi0gICAg IGVuYWNpZU1hc2thbGwoR3RrOjptYW5hZ2UobmV3IEd0azo6Q2hlY2tCdXR0b24oTSgiVFBfTE9D QUxMQUJfRU5BQkxFX01BU0tBTEwiKSkpKSwKLS0gICAgbWFza2NpZUN1cnZlRWRpdG9yRyhuZXcg Q3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgIiIsIDEpKSwKLSsg ICAgbWFza2NpZUN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11 dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCAiIiwgMSkpLAotICAgICBDQ21hc2tjaWVz aGFwZShzdGF0aWNfY2FzdDxGbGF0Q3VydmVFZGl0b3IqPihtYXNrY2llQ3VydmVFZGl0b3JHLT5h ZGRDdXJ2ZShDVF9GbGF0LCAiQyIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgTExt YXNrY2llc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yKj4obWFza2NpZUN1cnZlRWRp dG9yRy0+YWRkQ3VydmUoQ1RfRmxhdCwgIkwiLCBudWxscHRyLCBmYWxzZSwgZmFsc2UpKSksCi0g ICAgIEhIbWFza2NpZXNoYXBlKHN0YXRpY19jYXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2tjaWVD dXJ2ZUVkaXRvckctPmFkZEN1cnZlKENUX0ZsYXQsICJMQyhoKSIsIG51bGxwdHIsIGZhbHNlLCB0 cnVlKSkpLAotQEAgLTgyODAsMTIgKzgyNzgsMTIgQEAgTG9jYWxsYWJjaWU6OkxvY2FsbGFiY2ll KCk6Ci0gICAgIHNsb21hc2tjaWUoR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyKE0oIlRQX0xPQ0FM TEFCX1NMT01BU0tDT0wiKSwgMC4wLCAxNS4wLCAwLjEsIDAuKSkpLAotICAgICBoaWdobWFza2Np ZShHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfSElHSE1BU0tDT0wiKSwg MCwgMTAwLCAxLCAwKSkpLAotICAgICBzaGFkbWFza2NpZShHdGs6Om1hbmFnZShuZXcgQWRqdXN0 ZXIoTSgiVFBfTE9DQUxMQUJfU0hBTUFTS0NPTCIpLCAwLCAxMDAsIDEsIDApKSksCi0tICAgIG1h c2tjaWVIQ3VydmVFZGl0b3JHKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2Fs Q3VydmVzRGlyLCAiIikpLAotKyAgICBtYXNrY2llSEN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0 b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCAiIikp LAotICAgICBISGhtYXNrY2llc2hhcGUoc3RhdGljX2Nhc3Q8RmxhdEN1cnZlRWRpdG9yICo+KG1h c2tjaWVIQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9GbGF0LCAiaChoKSIsIG51bGxwdHIsIGZh bHNlLCB0cnVlKSkpLAotLSAgICBtYXNrMmNpZUN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JH cm91cChvcHRpb25zLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgiVFBfTE9DQUxMQUJfTUFTSzIiKSkp LAotKyAgICBtYXNrMmNpZUN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6Omdl dCgpLm11dF9vcHRpb25zKCkubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExBQl9NQVNL MiIpKSksCi0gICAgIExtYXNrY2llc2hhcGUoc3RhdGljX2Nhc3Q8RGlhZ29uYWxDdXJ2ZUVkaXRv cio+KG1hc2syY2llQ3VydmVFZGl0b3JHLT5hZGRDdXJ2ZShDVF9EaWFnb25hbCwgIkwoTCkiKSkp LAotICAgICB3YXZGcmFtZWNpZShHdGs6Om1hbmFnZShuZXcgR3RrOjpGcmFtZShNKCJUUF9MT0NB TExBQl9UT09MTUFTS18yIikpKSksCi0tICAgIG1hc2syY2llQ3VydmVFZGl0b3JHd2F2KG5ldyBD dXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdGxvY2FsQ3VydmVzRGlyLCBNKCJUUF9MT0NBTExB Ql9XQVZNQVNLIikpKSwKLSsgICAgbWFzazJjaWVDdXJ2ZUVkaXRvckd3YXYobmV3IEN1cnZlRWRp dG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3Rsb2NhbEN1cnZlc0RpciwgTSgi VFBfTE9DQUxMQUJfV0FWTUFTSyIpKSksCi0gICAgIExMbWFza2NpZXNoYXBld2F2KHN0YXRpY19j YXN0PEZsYXRDdXJ2ZUVkaXRvcio+KG1hc2syY2llQ3VydmVFZGl0b3JHd2F2LT5hZGRDdXJ2ZShD VF9GbGF0LCAiTChMKSIsIG51bGxwdHIsIGZhbHNlLCBmYWxzZSkpKSwKLSAgICAgcXVhSGNpZUJv eChHdGs6Om1hbmFnZShuZXcgR3RrOjpCb3goKSkpLAotICAgICBjc1RocmVzaG9sZGNpZShHdGs6 Om1hbmFnZShuZXcgVGhyZXNob2xkQWRqdXN0ZXIoTSgiVFBfTE9DQUxMQUJfQ1NUSFJFU0hPTERC TFVSIiksIDAsIDksIDAsIDAsIDYsIDUsIDAsIGZhbHNlKSkpCi1kaWZmIC0tZ2l0IGEvcnRndWkv bG9ja2FibGVjb2xvcnBpY2tlci5jYyBiL3J0Z3VpL2xvY2thYmxlY29sb3JwaWNrZXIuY2MKLWlu ZGV4IDhjOGQ3MzQxOC4uMjA2YjUxZTE5IDEwMDY0NAotLS0tIGEvcnRndWkvbG9ja2FibGVjb2xv cnBpY2tlci5jYwotKysrIGIvcnRndWkvbG9ja2FibGVjb2xvcnBpY2tlci5jYwotQEAgLTI3LDEz ICsyNyw2IEBACi0gI2luY2x1ZGUgIm11bHRpbGFuZ21nci5oIgotICNpbmNsdWRlICJuYXZpZ2F0 b3IuaCIKLSAKLS1uYW1lc3BhY2UKLS17Ci0tCi0tY29uc3QgcnRlbmdpbmU6OnByb2NwYXJhbXM6 OkNvbG9yTWFuYWdlbWVudFBhcmFtcyBERUZBVUxUX0NNUDsKLS0KLS19Ci0tCi0gTG9ja2FibGVD b2xvclBpY2tlcjo6TG9ja2FibGVDb2xvclBpY2tlciAoQ3JvcFdpbmRvdyogY3JvcFdpbmRvdywg cnRlbmdpbmU6OnByb2NwYXJhbXM6OkNvbG9yTWFuYWdlbWVudFBhcmFtcyAqY29sb3JfbWFuYWdl bWVudF9wYXJhbXMpCi0gOiBjcm9wV2luZG93KGNyb3BXaW5kb3cpLCBkaXNwbGF5ZWRWYWx1ZXMo Q29sb3JQaWNrZXJUeXBlOjpSR0IpLCBwb3NpdGlvbigwLCAwKSwgc2l6ZShTaXplOjpTMTUpLAot ICAgY29sb3JfbWFuYWdlbWVudF9wYXJhbXMoY29sb3JfbWFuYWdlbWVudF9wYXJhbXMpLCB2YWxp ZGl0eShWYWxpZGl0eTo6T1VUU0lERSksCi1AQCAtNTQsNiArNDcsNyBAQCB2b2lkIExvY2thYmxl Q29sb3JQaWNrZXI6OnVwZGF0ZUJhY2tCdWZmZXIgKCkKLSAKLSAgICAgICAgIEdsaWI6OlJlZlB0 cjxQYW5nbzo6Q29udGV4dD4gcGFuZ29Db250ZXh0ID0gaUFyZWEtPmdldF9wYW5nb19jb250ZXh0 ICgpOwotICAgICAgICAgUGFuZ286OkZvbnREZXNjcmlwdGlvbiBmb250ZCA9IGlBcmVhLT5nZXRf c3R5bGVfY29udGV4dCgpLT5nZXRfZm9udCgpOwotKyAgICAgICAgY29uc3QgYXV0byYgb3B0aW9u cyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICAgICAgLy8gc2V0IGZvbnQgZmFtaWx5IGFu ZCBzaXplCi0gICAgICAgICBmb250ZC5zZXRfZmFtaWx5KG9wdGlvbnMuQ1BGb250RmFtaWx5ID09 ICJkZWZhdWx0IiA/ICJzYW5zIiA6IG9wdGlvbnMuQ1BGb250RmFtaWx5KTsKLSAgICAgICAgIGNv bnN0IGludCBmb250U2l6ZSA9IG9wdGlvbnMuQ1BGb250RmFtaWx5ID09ICJkZWZhdWx0IiA/IDgg OiBvcHRpb25zLkNQRm9udFNpemU7IC8vIHB0Ci1AQCAtMjkzLDcgKzI4Nyw4IEBAIHZvaWQgTG9j a2FibGVDb2xvclBpY2tlcjo6c2V0UkdCIChjb25zdCBmbG9hdCBSLCBjb25zdCBmbG9hdCBHLCBj b25zdCBmbG9hdCBCLCBjCi0gICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KDI1NSAq IGcpLAotICAgICAgICAgc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PigyNTUgKiBiKSwKLSAgICAg ICAgIEwsIGEsIGJiLAotLSAgICAgICAgY29sb3JfbWFuYWdlbWVudF9wYXJhbXMgIT0gbnVsbHB0 ciA/ICpjb2xvcl9tYW5hZ2VtZW50X3BhcmFtcyA6IERFRkFVTFRfQ01QLAotKyAgICAgICAgY29s b3JfbWFuYWdlbWVudF9wYXJhbXMgIT0gbnVsbHB0cgotKyAgICAgICAgICAgID8gKmNvbG9yX21h bmFnZW1lbnRfcGFyYW1zIDogQXBwOjpnZXQoKS5mYWxsYmFja0NvbG9yQ21wKCksCi0gICAgICAg ICB0cnVlKTsKLSAgICAgTCAvPSAzMjcuNjhmOwotICAgICBhIC89IDMyNy42OGY7Ci1kaWZmIC0t Z2l0IGEvcnRndWkvbWFpbi1jbGkuY2MgYi9ydGd1aS9tYWluLWNsaS5jYwotaW5kZXggYzc1NDQx NmE5Li5hMDNkYWFhYzcgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9tYWluLWNsaS5jYwotKysrIGIvcnRn dWkvbWFpbi1jbGkuY2MKLUBAIC01NiwxNCArNTYsNiBAQAotIC8vIFNldCB0aGlzIHRvIDEgdG8g bWFrZSBSVCB3b3JrIHdoZW4gc3RhcnRlZCB3aXRoIEVjbGlwc2UgYW5kIGFyZ3VtZW50cywgYXQg bGVhc3Qgb24gV2luZG93cyBwbGF0Zm9ybQotICNkZWZpbmUgRUNMSVBTRV9BUkdTIDAKLSAKLS0v LyBzdG9yZXMgcGF0aCB0byBkYXRhIGZpbGVzCi0tR2xpYjo6dXN0cmluZyBhcmd2MDsKLS1HbGli Ojp1c3RyaW5nIGNyZWRpdHNQYXRoOwotLUdsaWI6OnVzdHJpbmcgbGljZW5zZVBhdGg7Ci0tR2xp Yjo6dXN0cmluZyBhcmd2MTsKLS0vL2Jvb2wgc2ltcGxlRWRpdG9yOwotLS8vR2xpYjo6VGhyZWFk czo6VGhyZWFkKiBtYWluVGhyZWFkOwotLQotIG5hbWVzcGFjZQotIHsKLSAKLUBAIC05MCw3ICs4 Miw3IEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCi0gICAgIEdpbzo6aW5p dCAoKTsKLSAKLS0gICAgLy9tYWluVGhyZWFkID0gR2xpYjo6VGhyZWFkczo6VGhyZWFkOjpzZWxm KCk7Ci0rICAgIGF1dG8mIGFwcCA9IEFwcDo6Z2V0KCk7Ci0gCi0gI2lmZGVmIEJVSUxEX0JVTkRM RQotICAgICBjaGFyIGV4bmFtZVs1MTJdID0gezB9OwotQEAgLTEwNiwzOCArOTgsMzYgQEAgaW50 IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAgICAgIHN0cm5jcHkgKGV4bmFtZSwg YXJndlswXSwgNTExKTsKLSAgICAgfQotIAotLSNlbmRpZgotKyNlbmRpZiAvLyBfV0lOMzIKLSAg ICAgZXhlUGF0aCA9IEdsaWI6OnBhdGhfZ2V0X2Rpcm5hbWUgKGV4bmFtZSk7Ci0gCi0gICAgIC8v IHNldCBwYXRocwotICAgICBpZiAoR2xpYjo6cGF0aF9pc19hYnNvbHV0ZSAoREFUQV9TRUFSQ0hf UEFUSCkpIHsKLS0gICAgICAgIGFyZ3YwID0gREFUQV9TRUFSQ0hfUEFUSDsKLSsgICAgICAgIGFw cC5zZXRBcmd2MChEQVRBX1NFQVJDSF9QQVRIKTsKLSAgICAgfSBlbHNlIHsKLS0gICAgICAgIGFy Z3YwID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUgKGV4ZVBhdGgsIERBVEFfU0VBUkNIX1BBVEgpOwot KyAgICAgICAgYXBwLnNldEFyZ3YwKEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGV4ZVBhdGgsIERBVEFf U0VBUkNIX1BBVEgpKTsKLSAgICAgfQotIAotICAgICBpZiAoR2xpYjo6cGF0aF9pc19hYnNvbHV0 ZSAoQ1JFRElUU19TRUFSQ0hfUEFUSCkpIHsKLS0gICAgICAgIGNyZWRpdHNQYXRoID0gQ1JFRElU U19TRUFSQ0hfUEFUSDsKLSsgICAgICAgIGFwcC5zZXRDcmVkaXRzUGF0aChDUkVESVRTX1NFQVJD SF9QQVRIKTsKLSAgICAgfSBlbHNlIHsKLS0gICAgICAgIGNyZWRpdHNQYXRoID0gR2xpYjo6YnVp bGRfZmlsZW5hbWUgKGV4ZVBhdGgsIENSRURJVFNfU0VBUkNIX1BBVEgpOwotKyAgICAgICAgYXBw LnNldENyZWRpdHNQYXRoKEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGV4ZVBhdGgsIENSRURJVFNfU0VB UkNIX1BBVEgpKTsKLSAgICAgfQotIAotICAgICBpZiAoR2xpYjo6cGF0aF9pc19hYnNvbHV0ZSAo TElDRU5DRV9TRUFSQ0hfUEFUSCkpIHsKLS0gICAgICAgIGxpY2Vuc2VQYXRoID0gTElDRU5DRV9T RUFSQ0hfUEFUSDsKLSsgICAgICAgIGFwcC5zZXRMaWNlbnNlUGF0aChMSUNFTkNFX1NFQVJDSF9Q QVRIKTsKLSAgICAgfSBlbHNlIHsKLS0gICAgICAgIGxpY2Vuc2VQYXRoID0gR2xpYjo6YnVpbGRf ZmlsZW5hbWUgKGV4ZVBhdGgsIExJQ0VOQ0VfU0VBUkNIX1BBVEgpOwotKyAgICAgICAgYXBwLnNl dExpY2Vuc2VQYXRoKEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGV4ZVBhdGgsIExJQ0VOQ0VfU0VBUkNI X1BBVEgpKTsKLSAgICAgfQotLQotLSAgICBvcHRpb25zLnJ0U2V0dGluZ3MubGVuc2Z1bkRiRGly ZWN0b3J5ID0gTEVOU0ZVTl9EQl9QQVRIOwotLSAgICBvcHRpb25zLnJ0U2V0dGluZ3MubGVuc2Z1 bkRiQnVuZGxlRGlyZWN0b3J5ID0gTEVOU0ZVTl9EQl9QQVRIOwotLQotICNlbHNlCi0tICAgIGFy Z3YwID0gREFUQV9TRUFSQ0hfUEFUSDsKLS0gICAgY3JlZGl0c1BhdGggPSBDUkVESVRTX1NFQVJD SF9QQVRIOwotLSAgICBsaWNlbnNlUGF0aCA9IExJQ0VOQ0VfU0VBUkNIX1BBVEg7Ci0rICAgIGFw cC5zZXRBcmd2MChEQVRBX1NFQVJDSF9QQVRIKTsKLSsgICAgYXBwLnNldENyZWRpdHNQYXRoKENS RURJVFNfU0VBUkNIX1BBVEgpOwotKyAgICBhcHAuc2V0TGljZW5zZVBhdGgoTElDRU5DRV9TRUFS Q0hfUEFUSCk7Ci0rI2VuZGlmIC8vIEJVSUxEX0JVTkRMRQotKwotKyAgICBPcHRpb25zJiBvcHRp b25zID0gYXBwLm11dF9vcHRpb25zKCk7Ci0gICAgIG9wdGlvbnMucnRTZXR0aW5ncy5sZW5zZnVu RGJEaXJlY3RvcnkgPSBMRU5TRlVOX0RCX1BBVEg7Ci0gICAgIG9wdGlvbnMucnRTZXR0aW5ncy5s ZW5zZnVuRGJCdW5kbGVEaXJlY3RvcnkgPSBMRU5TRlVOX0RCX1BBVEg7Ci0tI2VuZGlmCi0gCi0g ICAgIGJvb2wgcXVpY2tzdGFydCA9IGRvbnRMb2FkQ2FjaGUgKGFyZ2MsIGFyZ3YpOwotIAotQEAg LTI1Niw2ICsyNDYsNyBAQCBpbnQgcHJvY2Vzc0xpbmVQYXJhbXMgKCBpbnQgYXJnYywgY2hhciAq KmFyZ3YgKQotICAgICBzdGQ6OnN0cmluZyBvdXRwdXRUeXBlOwotICAgICB1bnNpZ25lZCBlcnJv cnMgPSAwOwotIAotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygp OwotICAgICBmb3IgKCBpbnQgaUFyZyA9IDE7IGlBcmcgPCBhcmdjOyBpQXJnKyspIHsKLSAgICAg ICAgIEdsaWI6OnVzdHJpbmcgY3VyclBhcmFtIChhcmd2W2lBcmddKTsKLSAgICAgICAgIGlmICgg Y3VyclBhcmFtLmVtcHR5KCkgKSB7Ci1AQCAtNDgyLDcgKzQ3Myw3IEBAIGludCBwcm9jZXNzTGlu ZVBhcmFtcyAoIGludCBhcmdjLCBjaGFyICoqYXJndiApCi0gCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHNpZGVQcm9jUGFyYW1zICYmIHNraXBJZk5vU2lkZWNhcikg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb29rIGZvciB0 aGUgc2lkZWNhciBwcm9jIHBhcmFtcwotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoIUdsaWI6OmZpbGVfdGVzdCAoZmlsZU5hbWUgKyBwYXJhbUZpbGVFeHRlbnNp b24sIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpKSB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICghR2xpYjo6ZmlsZV90ZXN0IChmaWxlTmFtZSArIEFwcDo6UEFS QU1fRklMRV9FWFRFTlNJT04sIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgIlwiIiA8PCBm aWxlTmFtZSA8PCAiXCIgIGhhcyBubyBzaWRlLWNhciBmaWxlLiBJbWFnZSBza2lwcGVkLiIgPDwg c3RkOjplbmRsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLUBA IC01MDQsNyArNDk1LDcgQEAgaW50IHByb2Nlc3NMaW5lUGFyYW1zICggaW50IGFyZ2MsIGNoYXIg Kiphcmd2ICkKLSAgICAgICAgICAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgICAgICAgICAgIGNh c2UgJz8nOgotICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7Ci0tICAgICAgICAgICAgICAgICAg ICBHbGliOjp1c3RyaW5nIHBwYXJhbXNFeHQgPSBwYXJhbUZpbGVFeHRlbnNpb24uc3Vic3RyICgx KTsKLSsgICAgICAgICAgICAgICAgICAgIEdsaWI6OnVzdHJpbmcgcHBhcmFtc0V4dCA9IEFwcDo6 UEFSQU1fRklMRV9FWFRFTlNJT04uc3Vic3RyICgxKTsKLSAgICAgICAgICAgICAgICAgICAgIHN0 ZDo6Y291dCA8PCAiICBBbiBhZHZhbmNlZCwgY3Jvc3MtcGxhdGZvcm0gcHJvZ3JhbSBmb3IgZGV2 ZWxvcGluZyByYXcgcGhvdG9zLiIgPDwgc3RkOjplbmRsOwotICAgICAgICAgICAgICAgICAgICAg c3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8 PCAiICBXZWJzaXRlOiBodHRwOi8vd3d3LnJhd3RoZXJhcGVlLmNvbS8iIDw8IHN0ZDo6ZW5kbDsK LUBAIC01NzksOSArNTcwLDkgQEAgaW50IHByb2Nlc3NMaW5lUGFyYW1zICggaW50IGFyZ2MsIGNo YXIgKiphcmd2ICkKLSAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIH0KLSAgICAgICAg IH0gZWxzZSB7Ci0tICAgICAgICAgICAgYXJndjEgPSBHbGliOjp1c3RyaW5nIChmbmFtZV90b191 dGY4IChhcmd2W2lBcmddKSk7Ci0rICAgICAgICAgICAgQXBwOjpnZXQoKS5zZXRBcmd2MShHbGli Ojp1c3RyaW5nIChmbmFtZV90b191dGY4IChhcmd2W2lBcmddKSkpOwotICNpZiBFQ0xJUFNFX0FS R1MKLS0gICAgICAgICAgICBhcmd2MSA9IGFyZ3YxLnN1YnN0ciAoMSwgYXJndjEubGVuZ3RoKCkg LSAyKTsKLSsgICAgICAgICAgICBBcHA6OmdldCgpLnNldEFyZ3YxKEFwcDo6Z2V0KCkuYXJndjEo KS5zdWJzdHIgKDEsIEFwcDo6Z2V0KCkuYXJndjEoKS5sZW5ndGgoKSAtIDIpKTsKLSAjZW5kaWYK LSAKLSAgICAgICAgICAgICBpZiAoIG91dHB1dERpcmVjdG9yeSApIHsKLUBAIC02MjMsNyArNjE0 LDcgQEAgaW50IHByb2Nlc3NMaW5lUGFyYW1zICggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKLSAg ICAgICAgIH0KLSAgICAgfQotIAotLSAgICBpZiAoICFhcmd2MS5lbXB0eSgpICkgewotKyAgICBp ZiAoICFBcHA6OmdldCgpLmFyZ3YxKCkuZW1wdHkoKSApIHsKLSAgICAgICAgIHJldHVybiAxOwot ICAgICB9Ci0gCi1AQCAtNjM1LDcgKzYyNiw3IEBAIGludCBwcm9jZXNzTGluZVBhcmFtcyAoIGlu dCBhcmdjLCBjaGFyICoqYXJndiApCi0gICAgICAgICByYXdQYXJhbXMgPSBuZXcgcnRlbmdpbmU6 OnByb2NwYXJhbXM6OlBhcnRpYWxQcm9maWxlICh0cnVlLCB0cnVlKTsKLSAgICAgICAgIEdsaWI6 OnVzdHJpbmcgcHJvZlBhdGggPSBvcHRpb25zLmZpbmRQcm9maWxlUGF0aCAob3B0aW9ucy5kZWZQ cm9mUmF3KTsKLSAKLS0gICAgICAgIGlmIChvcHRpb25zLmlzX2RlZlByb2ZSYXdNaXNzaW5nKCkg fHwgcHJvZlBhdGguZW1wdHkoKSB8fCAocHJvZlBhdGggIT0gREVGUFJPRklMRV9EWU5BTUlDICYm IHJhd1BhcmFtcy0+bG9hZCAocHJvZlBhdGggPT0gREVGUFJPRklMRV9JTlRFUk5BTCA/IERFRlBS T0ZJTEVfSU5URVJOQUwgOiBHbGliOjpidWlsZF9maWxlbmFtZSAocHJvZlBhdGgsIEdsaWI6OnBh dGhfZ2V0X2Jhc2VuYW1lIChvcHRpb25zLmRlZlByb2ZSYXcpICsgcGFyYW1GaWxlRXh0ZW5zaW9u KSkpKSB7Ci0rICAgICAgICBpZiAob3B0aW9ucy5pc19kZWZQcm9mUmF3TWlzc2luZygpIHx8IHBy b2ZQYXRoLmVtcHR5KCkgfHwgKHByb2ZQYXRoICE9IERFRlBST0ZJTEVfRFlOQU1JQyAmJiByYXdQ YXJhbXMtPmxvYWQgKHByb2ZQYXRoID09IERFRlBST0ZJTEVfSU5URVJOQUwgPyBERUZQUk9GSUxF X0lOVEVSTkFMIDogR2xpYjo6YnVpbGRfZmlsZW5hbWUgKHByb2ZQYXRoLCBHbGliOjpwYXRoX2dl dF9iYXNlbmFtZSAob3B0aW9ucy5kZWZQcm9mUmF3KSArIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJ T04pKSkpIHsKLSAgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIkVycm9yOiBkZWZhdWx0IHJhdyBw cm9jZXNzaW5nIHByb2ZpbGUgbm90IGZvdW5kLiIgPDwgc3RkOjplbmRsOwotICAgICAgICAgICAg IHJhd1BhcmFtcy0+ZGVsZXRlSW5zdGFuY2UoKTsKLSAgICAgICAgICAgICBkZWxldGUgcmF3UGFy YW1zOwotQEAgLTY0Niw3ICs2MzcsNyBAQCBpbnQgcHJvY2Vzc0xpbmVQYXJhbXMgKCBpbnQgYXJn YywgY2hhciAqKmFyZ3YgKQotICAgICAgICAgaW1nUGFyYW1zID0gbmV3IHJ0ZW5naW5lOjpwcm9j cGFyYW1zOjpQYXJ0aWFsUHJvZmlsZSAodHJ1ZSk7Ci0gICAgICAgICBwcm9mUGF0aCA9IG9wdGlv bnMuZmluZFByb2ZpbGVQYXRoIChvcHRpb25zLmRlZlByb2ZJbWcpOwotIAotLSAgICAgICAgaWYg KG9wdGlvbnMuaXNfZGVmUHJvZkltZ01pc3NpbmcoKSB8fCBwcm9mUGF0aC5lbXB0eSgpIHx8IChw cm9mUGF0aCAhPSBERUZQUk9GSUxFX0RZTkFNSUMgJiYgaW1nUGFyYW1zLT5sb2FkIChwcm9mUGF0 aCA9PSBERUZQUk9GSUxFX0lOVEVSTkFMID8gREVGUFJPRklMRV9JTlRFUk5BTCA6IEdsaWI6OmJ1 aWxkX2ZpbGVuYW1lIChwcm9mUGF0aCwgR2xpYjo6cGF0aF9nZXRfYmFzZW5hbWUgKG9wdGlvbnMu ZGVmUHJvZkltZykgKyBwYXJhbUZpbGVFeHRlbnNpb24pKSkpIHsKLSsgICAgICAgIGlmIChvcHRp b25zLmlzX2RlZlByb2ZJbWdNaXNzaW5nKCkgfHwgcHJvZlBhdGguZW1wdHkoKSB8fCAocHJvZlBh dGggIT0gREVGUFJPRklMRV9EWU5BTUlDICYmIGltZ1BhcmFtcy0+bG9hZCAocHJvZlBhdGggPT0g REVGUFJPRklMRV9JTlRFUk5BTCA/IERFRlBST0ZJTEVfSU5URVJOQUwgOiBHbGliOjpidWlsZF9m aWxlbmFtZSAocHJvZlBhdGgsIEdsaWI6OnBhdGhfZ2V0X2Jhc2VuYW1lIChvcHRpb25zLmRlZlBy b2ZJbWcpICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTikpKSkgewotICAgICAgICAgICAgIHN0 ZDo6Y2VyciA8PCAiRXJyb3I6IGRlZmF1bHQgbm9uLXJhdyBwcm9jZXNzaW5nIHByb2ZpbGUgbm90 IGZvdW5kLiIgPDwgc3RkOjplbmRsOwotICAgICAgICAgICAgIGltZ1BhcmFtcy0+ZGVsZXRlSW5z dGFuY2UoKTsKLSAgICAgICAgICAgICBkZWxldGUgaW1nUGFyYW1zOwotQEAgLTc1MCw3ICs3NDEs NyBAQCBpbnQgcHJvY2Vzc0xpbmVQYXJhbXMgKCBpbnQgYXJnYywgY2hhciAqKmFyZ3YgKQotICAg ICAgICAgZG8gewotICAgICAgICAgICAgIGlmIChzaWRlUHJvY1BhcmFtcyAmJiBpID09IHNpZGVD YXJGaWxlUG9zKSB7Ci0gICAgICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSBzaWRlY2FyIGZpbGUK LS0gICAgICAgICAgICAgICAgR2xpYjo6dXN0cmluZyBzaWRlUHJvY2Vzc2luZ1BhcmFtcyA9IGlu cHV0RmlsZSArIHBhcmFtRmlsZUV4dGVuc2lvbjsKLSsgICAgICAgICAgICAgICAgR2xpYjo6dXN0 cmluZyBzaWRlUHJvY2Vzc2luZ1BhcmFtcyA9IGlucHV0RmlsZSArIEFwcDo6UEFSQU1fRklMRV9F WFRFTlNJT047Ci0gCi0gICAgICAgICAgICAgICAgIC8vIHRoZSAibG9hZCIgbWV0aG9kIGRvbid0 IHJlc2V0IHRoZSBwcm9jcGFyYW1zIHZhbHVlcyBhbnltb3JlLCBzbyB2YWx1ZXMgZm91bmQgaW4g dGhlIHByb2NwYXJhbSBmaWxlIG92ZXJyaWRlIHRoZSBvbmUgb2YgY3VycmVudFBhcmFtcwotICAg ICAgICAgICAgICAgICBpZiAoICFHbGliOjpmaWxlX3Rlc3QgKCBzaWRlUHJvY2Vzc2luZ1BhcmFt cywgR2xpYjo6RklMRV9URVNUX0VYSVNUUyApIHx8IGN1cnJlbnRQYXJhbXMubG9hZCAoIHNpZGVQ cm9jZXNzaW5nUGFyYW1zICkpIHsKLUBAIC04MTEsNyArODAyLDcgQEAgaW50IHByb2Nlc3NMaW5l UGFyYW1zICggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKLSAgICAgICAgICAgICBzdGQ6OmNlcnIg PDwgIkVycm9yIHNhdmluZyB0bzogIiA8PCBvdXRwdXRGaWxlIDw8IHN0ZDo6ZW5kbDsKLSAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgaWYgKCBjb3B5UGFyYW1zRmlsZSApIHsKLS0gICAg ICAgICAgICAgICAgR2xpYjo6dXN0cmluZyBvdXRwdXRQcm9jZXNzaW5nUGFyYW1zID0gb3V0cHV0 RmlsZSArIHBhcmFtRmlsZUV4dGVuc2lvbjsKLSsgICAgICAgICAgICAgICAgR2xpYjo6dXN0cmlu ZyBvdXRwdXRQcm9jZXNzaW5nUGFyYW1zID0gb3V0cHV0RmlsZSArIEFwcDo6UEFSQU1fRklMRV9F WFRFTlNJT047Ci0gICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJhbXMuc2F2ZSAoIG91dHB1dFBy b2Nlc3NpbmdQYXJhbXMgKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICB9Ci1kaWZmIC0tZ2l0 IGEvcnRndWkvbWFpbi5jYyBiL3J0Z3VpL21haW4uY2MKLWluZGV4IGUxMTA0MmU0OS4uZGVkNzA3 NmJlIDEwMDY0NAotLS0tIGEvcnRndWkvbWFpbi5jYwotKysrIGIvcnRndWkvbWFpbi5jYwotQEAg LTYxLDE1ICs2MSw3IEBACi0gI2RlZmluZSBFQ0xJUFNFX0FSR1MgMAotIAotIC8vIHN0b3JlcyBw YXRoIHRvIGRhdGEgZmlsZXMKLS1HbGliOjp1c3RyaW5nIGFyZ3YwOwotLUdsaWI6OnVzdHJpbmcg Y3JlZGl0c1BhdGg7Ci0tR2xpYjo6dXN0cmluZyBsaWNlbnNlUGF0aDsKLS1HbGliOjp1c3RyaW5n IGFyZ3YxOwotIEdsaWI6OnVzdHJpbmcgYXJndjI7Ci0tYm9vbCBzaW1wbGVFZGl0b3IgPSBmYWxz ZTsKLS1ib29sIGdpbXBQbHVnaW4gPSBmYWxzZTsKLS1ib29sIHJlbW90ZSA9IGZhbHNlOwotLS8v R2xpYjo6VGhyZWFkczo6VGhyZWFkKiBtYWluVGhyZWFkOwotIAotIG5hbWVzcGFjZSB7Ci0gCi1A QCAtMTA0LDYgKzk2LDggQEAgc3RhdGljIHZvaWQgbXlHZGtMb2NrTGVhdmUoKQotIC8vaW50IHBy b2Nlc3NMaW5lUGFyYW1zICggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICk7Ci0gaW50IHByb2Nlc3NM aW5lUGFyYW1zICggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKLSB7Ci0rICAgIGF1dG8mIGFwcCA9 IEFwcDo6Z2V0KCk7Ci0rCi0gICAgIGludCByZXQgPSAxOwotICAgICBmb3IgKCBpbnQgaUFyZyA9 IDE7IGlBcmcgPCBhcmdjOyBpQXJnKyspIHsKLSAgICAgICAgIEdsaWI6OnVzdHJpbmcgY3VyclBh cmFtIChhcmd2W2lBcmddKTsKLUBAIC0xMzQsOCArMTI4LDggQEAgaW50IHByb2Nlc3NMaW5lUGFy YW1zICggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKLSAjaWZuZGVmIF9fQVBQTEVfXyAvLyBUT0RP IGFncmlnZ2lvIC0gdGhlcmUgc2VlbXMgdG8gYmUgYWxyZWFkeSBzb21lICJzaW5nbGUgaW5zdGFu Y2UgYXBwIiBzdXBwb3J0IGZvciBPU1ggaW4gcnR3aW5kb3cuIERpc2FibGluZyBpdCBoZXJlIHVu dGlsIEkgdW5kZXJzdGFuZCBob3cgdG8gbWVyZ2UgdGhlIHR3bwotIAotICAgICAgICAgICAgICAg ICBjYXNlICdSJzoKLS0gICAgICAgICAgICAgICAgICAgIGlmICghZ2ltcFBsdWdpbikgewotLSAg ICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZSA9IHRydWU7Ci0rICAgICAgICAgICAgICAgICAg ICBpZiAoIWFwcC5pc0dpbXBQbHVnaW4oKSkgewotKyAgICAgICAgICAgICAgICAgICAgICAgIGFw cC5zZXRJc1JlbW90ZSh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAKLSAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotQEAgLTE0Myw5ICsxMzcsOSBAQCBpbnQgcHJvY2Vzc0xpbmVQ YXJhbXMgKCBpbnQgYXJnYywgY2hhciAqKmFyZ3YgKQotIAotICAgICAgICAgICAgICAgICBjYXNl ICdnJzoKLSAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyUGFyYW0gPT0gIi1naW1wIikgewot LSAgICAgICAgICAgICAgICAgICAgICAgIGdpbXBQbHVnaW4gPSB0cnVlOwotLSAgICAgICAgICAg ICAgICAgICAgICAgIHNpbXBsZUVkaXRvciA9IHRydWU7Ci0tICAgICAgICAgICAgICAgICAgICAg ICAgcmVtb3RlID0gZmFsc2U7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnNldElzR2lt cFBsdWdpbih0cnVlKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICBhcHAuc2V0SXNTaW1wbGVF ZGl0b3IodHJ1ZSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnNldElzUmVtb3RlKHRy dWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg ICAgfQotIAotQEAgLTE4MCwxNyArMTc0LDE3IEBAIGludCBwcm9jZXNzTGluZVBhcmFtcyAoIGlu dCBhcmdjLCBjaGFyICoqYXJndiApCi0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICB9 Ci0gICAgICAgICB9IGVsc2UgewotLSAgICAgICAgICAgIGlmIChhcmd2MS5lbXB0eSgpKSB7Ci0t ICAgICAgICAgICAgICAgIGFyZ3YxID0gR2xpYjo6dXN0cmluZyAoZm5hbWVfdG9fdXRmOCAoYXJn dltpQXJnXSkpOwotKyAgICAgICAgICAgIGlmIChhcHAuYXJndjEoKS5lbXB0eSgpKSB7Ci0rICAg ICAgICAgICAgICAgIGFwcC5zZXRBcmd2MShHbGliOjp1c3RyaW5nIChmbmFtZV90b191dGY4IChh cmd2W2lBcmddKSkpOwotICNpZiBFQ0xJUFNFX0FSR1MKLS0gICAgICAgICAgICAgICAgYXJndjEg PSBhcmd2MS5zdWJzdHIgKDEsIGFyZ3YxLmxlbmd0aCgpIC0gMik7Ci0rICAgICAgICAgICAgICAg IGFwcC5zZXRBcmd2MShhcHAuYXJndjEoKS5zdWJzdHIgKDEsIGFwcC5hcmd2MSgpLmxlbmd0aCgp IC0gMikpOwotICNlbmRpZgotLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2ltcFBsdWdpbikgewot KyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBwLmlzR2ltcFBsdWdpbigpKSB7Ci0gICAgICAgICAg ICAgICAgIGFyZ3YyID0gR2xpYjo6dXN0cmluZyAoZm5hbWVfdG9fdXRmOCAoYXJndltpQXJnXSkp OwotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICB9Ci0gCi0tICAgICAgICAg ICAgaWYgKCFnaW1wUGx1Z2luKSB7Ci0rICAgICAgICAgICAgaWYgKCFhcHAuaXNHaW1wUGx1Z2lu KCkpIHsKLSAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgfQotICAgICAgICAg fQotQEAgLTIxMSw2ICsyMDUsNyBAQCBib29sIGluaXRfcnQoKQotIAotICNpZm5kZWYgX1dJTjMy Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAg ICAgLy8gTW92ZSB0aGUgb2xkIHBhdGggdG8gdGhlIG5ldyBvbmUgaWYgdGhlIG5ldyBkb2VzIG5v dCBleGlzdAotICAgICBpZiAoR2xpYjo6ZmlsZV90ZXN0IChHbGliOjpidWlsZF9maWxlbmFtZSAo b3B0aW9ucy5ydGRpciwgImNhY2hlIiksIEdsaWI6OkZJTEVfVEVTVF9JU19ESVIpICYmICFHbGli OjpmaWxlX3Rlc3QgKG9wdGlvbnMuY2FjaGVCYXNlRGlyLCBHbGliOjpGSUxFX1RFU1RfSVNfRElS KSkgewotICAgICAgICAgZ19yZW5hbWUgKEdsaWI6OmJ1aWxkX2ZpbGVuYW1lIChvcHRpb25zLnJ0 ZGlyLCAiY2FjaGUiKS5jX3N0ciAoKSwgb3B0aW9ucy5jYWNoZUJhc2VEaXIuY19zdHIgKCkpOwot QEAgLTIzMCw3ICsyMjUsNyBAQCB2b2lkIGNsZWFudXBfcnQoKQotIAotIFJUV2luZG93ICpjcmVh dGVfcnRfd2luZG93KCkKLSB7Ci0tICAgIEdsaWI6OnVzdHJpbmcgaWNvbl9wYXRoID0gR2xpYjo6 YnVpbGRfZmlsZW5hbWUgKGFyZ3YwLCAiaWNvbnMiKTsKLSsgICAgR2xpYjo6dXN0cmluZyBpY29u X3BhdGggPSBHbGliOjpidWlsZF9maWxlbmFtZSAoQXBwOjpnZXQoKS5hcmd2MCgpLCAiaWNvbnMi KTsKLSAgICAgR2xpYjo6UmVmUHRyPEd0azo6SWNvblRoZW1lPiBkZWZhdWx0SWNvblRoZW1lID0g R3RrOjpJY29uVGhlbWU6OmdldF9kZWZhdWx0KCk7Ci0gICAgIGRlZmF1bHRJY29uVGhlbWUtPmFw cGVuZF9zZWFyY2hfcGF0aCAoaWNvbl9wYXRoKTsKLSAKLUBAIC0zMzIsNiArMzI3LDcgQEAgcHJp dmF0ZToKLSAKLSB2b2lkIHNob3dfZ2ltcF9wbHVnaW5faW5mb19kaWFsb2coR3RrOjpXaW5kb3cg KnBhcmVudCkKLSB7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25z KCk7Ci0gICAgIGlmIChvcHRpb25zLmdpbXBQbHVnaW5TaG93SW5mb0RpYWxvZykgewotICAgICAg ICAgR3RrOjpNZXNzYWdlRGlhbG9nIGluZm8oKnBhcmVudCwgTSgiR0lNUF9QTFVHSU5fSU5GTyIp LCBmYWxzZSwgR3RrOjpNRVNTQUdFX0lORk8sIEd0azo6QlVUVE9OU19PSywgdHJ1ZSk7Ci0gICAg ICAgICBHdGs6OkJveCAqYm94ID0gaW5mby5nZXRfbWVzc2FnZV9hcmVhKCk7Ci1AQCAtMzUxLDEz ICszNDcsNiBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICAgICBzZXRsb2Nh bGUgKExDX0FMTCwgIiIpOwotICAgICBzZXRsb2NhbGUgKExDX05VTUVSSUMsICJDIik7IC8vIHRv IHNldCBkZWNpbWFsIHBvaW50IHRvICIuIgotIAotLSAgICBzaW1wbGVFZGl0b3IgPSBmYWxzZTsK LS0gICAgZ2ltcFBsdWdpbiA9IGZhbHNlOwotLSAgICByZW1vdGUgPSBmYWxzZTsKLS0gICAgYXJn djAgPSAiIjsKLS0gICAgYXJndjEgPSAiIjsKLS0gICAgYXJndjIgPSAiIjsKLS0KLSAgICAgR2xp Yjo6aW5pdCgpOyAgLy8gY2FsbGVkIGJ5IEd0azo6TWFpbiwgYnV0IHRoaXMgbWF5IGJlIGltcG9y dGFudCBmb3IgdGhyZWFkIGhhbmRsaW5nLCBzbyB3ZSBjYWxsIGl0IG91cnNlbHZlcyBub3cKLSAg ICAgR2lvOjppbml0ICgpOwotIAotQEAgLTM2OCw2ICszNTcsOCBAQCBpbnQgbWFpbiAoaW50IGFy Z2MsIGNoYXIgKiphcmd2KQotICAgICB9Ci0gI2VuZGlmCi0gCi0rICAgIGF1dG8mIGFwcCA9IEFw cDo6Z2V0KCk7Ci0rCi0gI2lmZGVmIEJVSUxEX0JVTkRMRQotICAgICBjaGFyIGV4bmFtZVs1MTJd ID0gezB9OwotICAgICBHbGliOjp1c3RyaW5nIGV4ZVBhdGg7Ci1AQCAtMzgyLDM4ICszNzMsMzUg QEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAgICAgIHN0cm5jcHkgKGV4 bmFtZSwgYXJndlswXSwgNTExKTsKLSAgICAgfQotIAotLSNlbmRpZgotKyNlbmRpZiAvLyBfV0lO MzIKLSAgICAgZXhlUGF0aCA9IEdsaWI6OnBhdGhfZ2V0X2Rpcm5hbWUgKGV4bmFtZSk7Ci0gCi0g ICAgIC8vIHNldCBwYXRocwotICAgICBpZiAoR2xpYjo6cGF0aF9pc19hYnNvbHV0ZSAoREFUQV9T RUFSQ0hfUEFUSCkpIHsKLS0gICAgICAgIGFyZ3YwID0gREFUQV9TRUFSQ0hfUEFUSDsKLSsgICAg ICAgIGFwcC5zZXRBcmd2MChEQVRBX1NFQVJDSF9QQVRIKTsKLSAgICAgfSBlbHNlIHsKLS0gICAg ICAgIGFyZ3YwID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUgKGV4ZVBhdGgsIERBVEFfU0VBUkNIX1BB VEgpOwotKyAgICAgICAgYXBwLnNldEFyZ3YwKEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGV4ZVBhdGgs IERBVEFfU0VBUkNIX1BBVEgpKTsKLSAgICAgfQotIAotICAgICBpZiAoR2xpYjo6cGF0aF9pc19h YnNvbHV0ZSAoQ1JFRElUU19TRUFSQ0hfUEFUSCkpIHsKLS0gICAgICAgIGNyZWRpdHNQYXRoID0g Q1JFRElUU19TRUFSQ0hfUEFUSDsKLSsgICAgICAgIGFwcC5zZXRDcmVkaXRzUGF0aChDUkVESVRT X1NFQVJDSF9QQVRIKTsKLSAgICAgfSBlbHNlIHsKLS0gICAgICAgIGNyZWRpdHNQYXRoID0gR2xp Yjo6YnVpbGRfZmlsZW5hbWUgKGV4ZVBhdGgsIENSRURJVFNfU0VBUkNIX1BBVEgpOwotKyAgICAg ICAgYXBwLnNldENyZWRpdHNQYXRoKEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGV4ZVBhdGgsIENSRURJ VFNfU0VBUkNIX1BBVEgpKTsKLSAgICAgfQotIAotICAgICBpZiAoR2xpYjo6cGF0aF9pc19hYnNv bHV0ZSAoTElDRU5DRV9TRUFSQ0hfUEFUSCkpIHsKLS0gICAgICAgIGxpY2Vuc2VQYXRoID0gTElD RU5DRV9TRUFSQ0hfUEFUSDsKLSsgICAgICAgIGFwcC5zZXRMaWNlbnNlUGF0aChMSUNFTkNFX1NF QVJDSF9QQVRIKTsKLSAgICAgfSBlbHNlIHsKLS0gICAgICAgIGxpY2Vuc2VQYXRoID0gR2xpYjo6 YnVpbGRfZmlsZW5hbWUgKGV4ZVBhdGgsIExJQ0VOQ0VfU0VBUkNIX1BBVEgpOwotKyAgICAgICAg YXBwLnNldExpY2Vuc2VQYXRoKEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGV4ZVBhdGgsIExJQ0VOQ0Vf U0VBUkNIX1BBVEgpKTsKLSAgICAgfQotLQotLSAgICBvcHRpb25zLnJ0U2V0dGluZ3MubGVuc2Z1 bkRiRGlyZWN0b3J5ID0gTEVOU0ZVTl9EQl9QQVRIOwotLSAgICBvcHRpb25zLnJ0U2V0dGluZ3Mu bGVuc2Z1bkRiQnVuZGxlRGlyZWN0b3J5ID0gTEVOU0ZVTl9EQl9QQVRIOwotLQotICNlbHNlCi0t ICAgIGFyZ3YwID0gREFUQV9TRUFSQ0hfUEFUSDsKLS0gICAgY3JlZGl0c1BhdGggPSBDUkVESVRT X1NFQVJDSF9QQVRIOwotLSAgICBsaWNlbnNlUGF0aCA9IExJQ0VOQ0VfU0VBUkNIX1BBVEg7Ci0t ICAgIG9wdGlvbnMucnRTZXR0aW5ncy5sZW5zZnVuRGJEaXJlY3RvcnkgPSBMRU5TRlVOX0RCX1BB VEg7Ci0tICAgIG9wdGlvbnMucnRTZXR0aW5ncy5sZW5zZnVuRGJCdW5kbGVEaXJlY3RvcnkgPSBM RU5TRlVOX0RCX1BBVEg7Ci0tI2VuZGlmCi0rICAgIGFwcC5zZXRBcmd2MChEQVRBX1NFQVJDSF9Q QVRIKTsKLSsgICAgYXBwLnNldENyZWRpdHNQYXRoKENSRURJVFNfU0VBUkNIX1BBVEgpOwotKyAg ICBhcHAuc2V0TGljZW5zZVBhdGgoTElDRU5DRV9TRUFSQ0hfUEFUSCk7Ci0rI2VuZGlmIC8vIEJV SUxEX0JVTkRMRQotKwotKyAgICBhcHAubXV0X29wdGlvbnMoKS5ydFNldHRpbmdzLmxlbnNmdW5E YkRpcmVjdG9yeSA9IExFTlNGVU5fREJfUEFUSDsKLSsgICAgYXBwLm11dF9vcHRpb25zKCkucnRT ZXR0aW5ncy5sZW5zZnVuRGJCdW5kbGVEaXJlY3RvcnkgPSBMRU5TRlVOX0RCX1BBVEg7Ci0gCi0g I2lmZGVmIF9XSU4zMgotICAgICBib29sIGNvbnNvbGVPcGVuZWQgPSBmYWxzZTsKLUBAIC00MjIs NyArNDEwLDcgQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAgU2V0RXJy b3JNb2RlIChTRU1fRkFJTENSSVRJQ0FMRVJST1JTIHwgU0VNX05PR1BGQVVMVEVSUk9SQk9YIHwg U0VNX05PT1BFTkZJTEVFUlJPUkJPWCk7Ci0gCi0gICAgIGlmIChhcmdjID4gMSkgewotLSAgICAg ICAgaWYgKCFyZW1vdGUgJiYgIUdsaWI6OmZpbGVfdGVzdCAoYXJndjEsIEdsaWI6OkZJTEVfVEVT VF9FWElTVFMgKSAmJiAhR2xpYjo6ZmlsZV90ZXN0IChhcmd2MSwgR2xpYjo6RklMRV9URVNUX0lT X0RJUikpIHsKLSsgICAgICAgIGlmICghYXBwLmlzUmVtb3RlKCkgJiYgIUdsaWI6OmZpbGVfdGVz dCAoYXBwLmFyZ3YxKCksIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMgKSAmJiAhR2xpYjo6ZmlsZV90 ZXN0IChhcHAuYXJndjEoKSwgR2xpYjo6RklMRV9URVNUX0lTX0RJUikpIHsKLSAgICAgICAgICAg ICBjb25zdCBib29sIHN0ZG91dFJlZGlyZWN0dG9Db25zb2xlID0gKEdldEZpbGVUeXBlIChHZXRT dGRIYW5kbGUgKFNURF9PVVRQVVRfSEFORExFKSkgPT0gMHgwMDAwKTsKLSAgICAgICAgICAgICAv LyBvcGVuIGNvbnNvbGUsIGlmIHN0ZG91dCBpcyBpbnZhbGlkCi0gICAgICAgICAgICAgaWYgKHN0 ZG91dFJlZGlyZWN0dG9Db25zb2xlKSB7Ci1AQCAtNDk5LDggKzQ4Nyw4IEBAIGludCBtYWluIChp bnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gICAgICAgICBmYXRhbEVycm9yID0gZS5nZXRfbXNnKCk7 Ci0gICAgIH0KLSAKLS0gICAgaWYgKGdpbXBQbHVnaW4pIHsKLS0gICAgICAgIGlmICghR2xpYjo6 ZmlsZV90ZXN0IChhcmd2MSwgR2xpYjo6RklMRV9URVNUX0VYSVNUUykgfHwgR2xpYjo6ZmlsZV90 ZXN0IChhcmd2MSwgR2xpYjo6RklMRV9URVNUX0lTX0RJUikpIHsKLSsgICAgaWYgKGFwcC5pc0dp bXBQbHVnaW4oKSkgewotKyAgICAgICAgaWYgKCFHbGliOjpmaWxlX3Rlc3QgKGFwcC5hcmd2MSgp LCBHbGliOjpGSUxFX1RFU1RfRVhJU1RTKSB8fCBHbGliOjpmaWxlX3Rlc3QgKGFwcC5hcmd2MSgp LCBHbGliOjpGSUxFX1RFU1RfSVNfRElSKSkgewotICAgICAgICAgICAgIHByaW50ZiAoIkVycm9y OiBhcmd2MSBkb2Vzbid0IGV4aXN0XG4iKTsKLSAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAg ICAgIH0KLUBAIC01MDksOCArNDk3LDggQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJn dikKLSAgICAgICAgICAgICBwcmludGYgKCJFcnJvcjogLWdpbXAgcmVxdWlyZXMgdHdvIGFyZ3Vt ZW50c1xuIik7Ci0gICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICB9Ci0tICAgIH0gZWxz ZSBpZiAoIXJlbW90ZSAmJiBHbGliOjpmaWxlX3Rlc3QoYXJndjEsIEdsaWI6OkZJTEVfVEVTVF9F WElTVFMpICYmICFHbGliOjpmaWxlX3Rlc3QoYXJndjEsIEdsaWI6OkZJTEVfVEVTVF9JU19ESVIp KSB7Ci0tICAgICAgICBzaW1wbGVFZGl0b3IgPSB0cnVlOwotKyAgICB9IGVsc2UgaWYgKCFhcHAu aXNSZW1vdGUoKSAmJiBHbGliOjpmaWxlX3Rlc3QoYXBwLmFyZ3YxKCksIEdsaWI6OkZJTEVfVEVT VF9FWElTVFMpICYmICFHbGliOjpmaWxlX3Rlc3QoYXBwLmFyZ3YxKCksIEdsaWI6OkZJTEVfVEVT VF9JU19ESVIpKSB7Ci0rICAgICAgICBhcHAuc2V0SXNTaW1wbGVFZGl0b3IodHJ1ZSk7Ci0gICAg IH0KLSAKLSAgICAgaW50IHJldCA9IDA7Ci1AQCAtNTE5LDEzICs1MDcsMTMgQEAgaW50IG1haW4g KGludCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAgZ2RrX3RocmVhZHNfaW5pdCgpOwotICAgICBn dGtfaW5pdCAoJmFyZ2MsICZhcmd2KTsgIC8vIHVzZSB0aGUgIi0tZy1mYXRhbC13YXJuaW5ncyIg Y29tbWFuZCBsaW5lIGZsYWcgdG8gbWFrZSB3YXJuaW5ncyBmYXRhbAotIAotLSAgICBpZiAoZmF0 YWxFcnJvci5lbXB0eSgpICYmIHJlbW90ZSkgewotLSAgICAgICAgY2hhciAqYXBwX2FyZ3ZbMl0g PSB7IGNvbnN0X2Nhc3Q8Y2hhciAqPiAoYXJndjAuY19zdHIoKSkgfTsKLSsgICAgaWYgKGZhdGFs RXJyb3IuZW1wdHkoKSAmJiBhcHAuaXNSZW1vdGUoKSkgewotKyAgICAgICAgY2hhciAqYXBwX2Fy Z3ZbMl0gPSB7IGNvbnN0X2Nhc3Q8Y2hhciAqPiAoYXBwLmFyZ3YwKCkuY19zdHIoKSkgfTsKLSAg ICAgICAgIGludCBhcHBfYXJnYyA9IDE7Ci0gCi0tICAgICAgICBpZiAoIWFyZ3YxLmVtcHR5KCkp IHsKLSsgICAgICAgIGlmICghYXBwLmFyZ3YxKCkuZW1wdHkoKSkgewotICAgICAgICAgICAgIGFw cF9hcmdjID0gMjsKLS0gICAgICAgICAgICBhcHBfYXJndlsxXSA9IGNvbnN0X2Nhc3Q8Y2hhciAq PiAoYXJndjEuY19zdHIoKSk7Ci0rICAgICAgICAgICAgYXBwX2FyZ3ZbMV0gPSBjb25zdF9jYXN0 PGNoYXIgKj4gKGFwcC5hcmd2MSgpLmNfc3RyKCkpOwotICAgICAgICAgfQotIAotICAgICAgICAg UlRBcHBsaWNhdGlvbiBhcHA7Ci1AQCAtNTM1LDEzICs1MjMsMTMgQEAgaW50IG1haW4gKGludCBh cmdjLCBjaGFyICoqYXJndikKLSAgICAgICAgICAgICBHdGs6Ok1haW4gbSAoJmFyZ2MsICZhcmd2 KTsKLSAgICAgICAgICAgICBnZGtfdGhyZWFkc19lbnRlcigpOwotICAgICAgICAgICAgIGNvbnN0 IHN0ZDo6dW5pcXVlX3B0cjxSVFdpbmRvdz4gcnRXaW5kb3cgKGNyZWF0ZV9ydF93aW5kb3coKSk7 Ci0tICAgICAgICAgICAgaWYgKGdpbXBQbHVnaW4pIHsKLSsgICAgICAgICAgICBpZiAoYXBwLmlz R2ltcFBsdWdpbigpKSB7Ci0gICAgICAgICAgICAgICAgIHNob3dfZ2ltcF9wbHVnaW5faW5mb19k aWFsb2cocnRXaW5kb3cuZ2V0KCkpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBtLnJ1 biAoKnJ0V2luZG93KTsKLSAgICAgICAgICAgICBnZGtfdGhyZWFkc19sZWF2ZSgpOwotIAotLSAg ICAgICAgICAgIGlmIChnaW1wUGx1Z2luICYmIHJ0V2luZG93LT5lcGFuZWwgJiYgcnRXaW5kb3ct PmVwYW5lbC0+aXNSZWFsaXplZCgpKSB7Ci0rICAgICAgICAgICAgaWYgKGFwcC5pc0dpbXBQbHVn aW4oKSAmJiBydFdpbmRvdy0+ZXBhbmVsICYmIHJ0V2luZG93LT5lcGFuZWwtPmlzUmVhbGl6ZWQo KSkgewotICAgICAgICAgICAgICAgICBpZiAoIXJ0V2luZG93LT5lcGFuZWwtPnNhdmVJbW1lZGlh dGVseShhcmd2MiwgU2F2ZUZvcm1hdCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgcmV0ID0g LTI7Ci0gICAgICAgICAgICAgICAgIH0KLWRpZmYgLS1naXQgYS9ydGd1aS9uYXZpZ2F0b3IuY2Mg Yi9ydGd1aS9uYXZpZ2F0b3IuY2MKLWluZGV4IGNkZmY1ZjcwYi4uODMwNzcwOGU4IDEwMDY0NAot LS0tIGEvcnRndWkvbmF2aWdhdG9yLmNjCi0rKysgYi9ydGd1aS9uYXZpZ2F0b3IuY2MKLUBAIC0y NywxNyArMjcsMTAgQEAKLSAKLSB1c2luZyBuYW1lc3BhY2UgcnRlbmdpbmU7Ci0gCi0tbmFtZXNw YWNlCi0tewotLQotLWNvbnN0IHJ0ZW5naW5lOjpwcm9jcGFyYW1zOjpDb2xvck1hbmFnZW1lbnRQ YXJhbXMgREVGQVVMVF9DTVA7Ci0tCi0tfQotLQotIE5hdmlnYXRvcjo6TmF2aWdhdG9yKCkgOgot ICAgICBwb2ludGVyX21vdmVkX2RlbGF5ZWRfY2FsbCg1MCwgMTAwKSwKLS0gICAgY3VycmVudFJH QlVuaXQob3B0aW9ucy5uYXZSR0JVbml0KSwKLS0gICAgY3VycmVudEhTVlVuaXQob3B0aW9ucy5u YXZIU1ZVbml0KQotKyAgICBjdXJyZW50UkdCVW5pdChBcHA6OmdldCgpLm9wdGlvbnMoKS5uYXZS R0JVbml0KSwKLSsgICAgY3VycmVudEhTVlVuaXQoQXBwOjpnZXQoKS5vcHRpb25zKCkubmF2SFNW VW5pdCkKLSB7Ci0gICAgIHBvaW50ZXJfbW92ZWRfZGVsYXllZF9jYWxsLnNldEZ1bmN0aW9uKAot ICAgICAgICAgW3RoaXNdKGJvb2wgdmFsaWRQb3MsIGNvbnN0IHJ0ZW5naW5lOjpwcm9jcGFyYW1z OjpDb2xvck1hbmFnZW1lbnRQYXJhbXMgKmNtcCwgaW50IHgsIGludCB5LCBpbnQgciwgaW50IGcs IGludCBiLCBib29sIGlzUmF3KQotQEAgLTc0LDcgKzY3LDcgQEAgTmF2aWdhdG9yOjpOYXZpZ2F0 b3IoKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90 PihnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+ KGIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIExBQl9sLCBMQUJfYSwgTEFCX2IsCi0tICAg ICAgICAgICAgICAgICAgICAgICAgY21wICE9IG51bGxwdHIgPyAqY21wIDogREVGQVVMVF9DTVAs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgY21wICE9IG51bGxwdHIgPyAqY21wIDogQXBwOjpn ZXQoKS5mYWxsYmFja0NvbG9yQ21wKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7 Ci0gICAgICAgICAgICAgICAgICAgICBMQUJfbCAvPSAzMjcuNjhmOwotICAgICAgICAgICAgICAg ICAgICAgTEFCX2EgLz0gMzI3LjY4ZjsKLUBAIC0zNTYsNyArMzQ5LDcgQEAgdm9pZCBOYXZpZ2F0 b3I6OmN5Y2xlVW5pdHNSR0IgKEdka0V2ZW50QnV0dG9uICpldmVudCkgewotICAgICBpZiAodiA9 PSAodWludDE2X3QpT3B0aW9uczo6TmF2aWdhdG9yVW5pdDo6X0NPVU5UKSB7Ci0gICAgICAgICB2 ID0gMDsKLSAgICAgfQotLSAgICBvcHRpb25zLm5hdlJHQlVuaXQgPSBjdXJyZW50UkdCVW5pdCA9 IChPcHRpb25zOjpOYXZpZ2F0b3JVbml0KXY7Ci0rICAgIEFwcDo6Z2V0KCkubXV0X29wdGlvbnMo KS5uYXZSR0JVbml0ID0gY3VycmVudFJHQlVuaXQgPSAoT3B0aW9uczo6TmF2aWdhdG9yVW5pdCl2 OwotIAotICAgICBzd2l0Y2ggKGN1cnJlbnRSR0JVbml0KSB7Ci0gICAgIGNhc2UgT3B0aW9uczo6 TmF2aWdhdG9yVW5pdDo6UjBfMToKLUBAIC0zODUsNyArMzc4LDcgQEAgdm9pZCBOYXZpZ2F0b3I6 OmN5Y2xlVW5pdHNIU1YgKEdka0V2ZW50QnV0dG9uICpldmVudCkgewotICAgICBpZiAodiA9PSAo dWludDE2X3QpT3B0aW9uczo6TmF2aWdhdG9yVW5pdDo6X0NPVU5UKSB7Ci0gICAgICAgICB2ID0g MDsKLSAgICAgfQotLSAgICBvcHRpb25zLm5hdkhTVlVuaXQgPSBjdXJyZW50SFNWVW5pdCA9IChP cHRpb25zOjpOYXZpZ2F0b3JVbml0KXY7Ci0rICAgIEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5u YXZIU1ZVbml0ID0gY3VycmVudEhTVlVuaXQgPSAoT3B0aW9uczo6TmF2aWdhdG9yVW5pdCl2Owot IAotICAgICBzd2l0Y2ggKGN1cnJlbnRIU1ZVbml0KSB7Ci0gICAgIGNhc2UgT3B0aW9uczo6TmF2 aWdhdG9yVW5pdDo6UjBfMToKLWRpZmYgLS1naXQgYS9ydGd1aS9vcHRpb25zLmNjIGIvcnRndWkv b3B0aW9ucy5jYwotaW5kZXggNDZkNWY0ZWRiLi43ZTNkNDEyN2YgMTAwNjQ0Ci0tLS0gYS9ydGd1 aS9vcHRpb25zLmNjCi0rKysgYi9ydGd1aS9vcHRpb25zLmNjCi1AQCAtNTYsMTAgKzU2LDYgQEAg R2xpYjo6dXN0cmluZyBPcHRpb25zOjpydGRpcjsKLSAvLyBVc2VyJ3MgY2FjaGVkIGRhdGEgZGly ZWN0b3J5Ci0gR2xpYjo6dXN0cmluZyBPcHRpb25zOjpjYWNoZUJhc2VEaXI7Ci0gCi0tT3B0aW9u cyBvcHRpb25zOwotLUdsaWI6OnVzdHJpbmcgdmVyc2lvblN0cmluZyA9IFJUVkVSU0lPTjsKLS1H bGliOjp1c3RyaW5nIHBhcmFtRmlsZUV4dGVuc2lvbiA9ICIucHAzIjsKLS0KLSBPcHRpb25zOjpP cHRpb25zKCkKLSB7Ci0gCi1AQCAtNzcsMTMgKzczLDEzIEBAIGlubGluZSBib29sIE9wdGlvbnM6 OmNoZWNrUHJvZmlsZVBhdGgoR2xpYjo6dXN0cmluZyAmcGF0aCkKLSAKLSAgICAgR2xpYjo6dXN0 cmluZyBwID0gZ2V0VXNlclByb2ZpbGVQYXRoKCk7Ci0gCi0tICAgIGlmICghcC5lbXB0eSgpICYm IEdsaWI6OmZpbGVfdGVzdChwYXRoICsgcGFyYW1GaWxlRXh0ZW5zaW9uLCBHbGliOjpGSUxFX1RF U1RfRVhJU1RTKSkgewotKyAgICBpZiAoIXAuZW1wdHkoKSAmJiBHbGliOjpmaWxlX3Rlc3QocGF0 aCArIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04sIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpKSB7 Ci0gICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgfQotIAotICAgICBwID0gZ2V0R2xvYmFsUHJv ZmlsZVBhdGgoKTsKLSAKLS0gICAgcmV0dXJuICFwLmVtcHR5KCkgJiYgR2xpYjo6ZmlsZV90ZXN0 KHBhdGggKyBwYXJhbUZpbGVFeHRlbnNpb24sIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpOwotKyAg ICByZXR1cm4gIXAuZW1wdHkoKSAmJiBHbGliOjpmaWxlX3Rlc3QocGF0aCArIEFwcDo6UEFSQU1f RklMRV9FWFRFTlNJT04sIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpOwotIH0KLSAKLSBib29sIE9w dGlvbnM6OmNoZWNrRGlyUGF0aChHbGliOjp1c3RyaW5nICZwYXRoLCBHbGliOjp1c3RyaW5nIGVy clN0cmluZykKLUBAIC0xMjAsNyArMTE2LDcgQEAgdm9pZCBPcHRpb25zOjp1cGRhdGVQYXRocygp Ci0gCi0gICAgICAgICBpZiAoY2hlY2tEaXJQYXRoKHByb2ZpbGVQYXRoLCAiRXJyb3I6IHRoZSB1 c2VyJ3MgcHJvY2Vzc2luZyBwcm9maWxlIHBhdGggZG9lc24ndCBwb2ludCB0byBhIGRpcmVjdG9y eSBvciBkb2Vzbid0IGV4aXN0IVxuIikpIHsKLSAgICAgICAgICAgICB1c2VyUHJvZmlsZVBhdGgg PSBwcm9maWxlUGF0aDsKLS0gICAgICAgICAgICB0bXBQYXRoID0gR2xpYjo6YnVpbGRfZmlsZW5h bWUoYXJndjAsICJwcm9maWxlcyIpOwotKyAgICAgICAgICAgIHRtcFBhdGggPSBHbGliOjpidWls ZF9maWxlbmFtZShBcHA6OmdldCgpLmFyZ3YwKCksICJwcm9maWxlcyIpOwotIAotICAgICAgICAg ICAgIGlmIChjaGVja0RpclBhdGgodG1wUGF0aCwgIkVycm9yOiB0aGUgZ2xvYmFsJ3MgcHJvY2Vz c2luZyBwcm9maWxlIHBhdGggZG9lc24ndCBwb2ludCB0byBhIGRpcmVjdG9yeSBvciBkb2Vzbid0 IGV4aXN0IVxuIikpIHsKLSAgICAgICAgICAgICAgICAgaWYgKHVzZXJQcm9maWxlUGF0aCAhPSB0 bXBQYXRoKSB7Ci1AQCAtMTI4LDcgKzEyNCw3IEBAIHZvaWQgT3B0aW9uczo6dXBkYXRlUGF0aHMo KQotICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfQotICAgICAgICAgfSBlbHNlIHsK LS0gICAgICAgICAgICB0bXBQYXRoID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoYXJndjAsICJwcm9m aWxlcyIpOwotKyAgICAgICAgICAgIHRtcFBhdGggPSBHbGliOjpidWlsZF9maWxlbmFtZShBcHA6 OmdldCgpLmFyZ3YwKCksICJwcm9maWxlcyIpOwotIAotICAgICAgICAgICAgIGlmIChjaGVja0Rp clBhdGgodG1wUGF0aCwgIkVycm9yOiB0aGUgZ2xvYmFsJ3MgcHJvY2Vzc2luZyBwcm9maWxlIHBh dGggZG9lc24ndCBwb2ludCB0byBhIGRpcmVjdG9yeSBvciBkb2Vzbid0IGV4aXN0IVxuIikpIHsK LSAgICAgICAgICAgICAgICAgZ2xvYmFsUHJvZmlsZVBhdGggPSB0bXBQYXRoOwotQEAgLTE1MSw3 ICsxNDcsNyBAQCB2b2lkIE9wdGlvbnM6OnVwZGF0ZVBhdGhzKCkKLSAgICAgICAgICAgICB1c2Vy UHJvZmlsZVBhdGggPSB0bXBQYXRoOwotICAgICAgICAgfQotIAotLSAgICAgICAgdG1wUGF0aCA9 IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGFyZ3YwLCAicHJvZmlsZXMiKTsKLSsgICAgICAgIHRtcFBh dGggPSBHbGliOjpidWlsZF9maWxlbmFtZShBcHA6OmdldCgpLmFyZ3YwKCksICJwcm9maWxlcyIp OwotIAotICAgICAgICAgaWYgKGNoZWNrRGlyUGF0aCh0bXBQYXRoLCAiRXJyb3I6IHRoZSB1c2Vy J3MgcHJvY2Vzc2luZyBwcm9maWxlIHBhdGggZG9lc24ndCBwb2ludCB0byBhIGRpcmVjdG9yeSBv ciBkb2Vzbid0IGV4aXN0IVxuIikpIHsKLSAgICAgICAgICAgICBnbG9iYWxQcm9maWxlUGF0aCA9 IHRtcFBhdGg7Ci1AQCAtMjI2LDcgKzIyMiw3IEBAIHZvaWQgT3B0aW9uczo6dXBkYXRlUGF0aHMo KQotICAgICB9Ci0gfQotIAotLUdsaWI6OnVzdHJpbmcgT3B0aW9uczo6Z2V0UHJlZmVycmVkUHJv ZmlsZVBhdGgoKQotK0dsaWI6OnVzdHJpbmcgT3B0aW9uczo6Z2V0UHJlZmVycmVkUHJvZmlsZVBh dGgoKSBjb25zdAotIHsKLSAgICAgaWYgKCF1c2VyUHJvZmlsZVBhdGguZW1wdHkoKSkgewotICAg ICAgICAgcmV0dXJuIHVzZXJQcm9maWxlUGF0aDsKLUBAIC0yNDQsNyArMjQwLDcgQEAgR2xpYjo6 dXN0cmluZyBPcHRpb25zOjpnZXRQcmVmZXJyZWRQcm9maWxlUGF0aCgpCi0gICAqQHJldHVybiBT ZW5kIGJhY2sgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGdpdmVuIGZpbGVuYW1lIG9yICJOZXV0 cmFsIiBpZiAiTmV1dHJhbCIgaGFzIGJlZW4gc2V0IHRvIHByb2ZOYW1lLiBJbXBsZW1lbnRlciB3 aWxsIGhhdmUKLSAgICogICAgICAgIHRvIHRlc3QgZm9yIHRoaXMgcGFydGljdWxhciB2YWx1ZS4g SWYgdGhlIGFic29sdXRlIHBhdGggaXMgaW52YWxpZCAoZS5nLiB0aGUgZmlsZSBkb2Vzbid0IGV4 aXN0KSwgaXQgd2lsbCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLgotICAgKi8KLS1HbGliOjp1c3Ry aW5nIE9wdGlvbnM6OmZpbmRQcm9maWxlUGF0aChHbGliOjp1c3RyaW5nICZwcm9mTmFtZSkKLStH bGliOjp1c3RyaW5nIE9wdGlvbnM6OmZpbmRQcm9maWxlUGF0aChHbGliOjp1c3RyaW5nICZwcm9m TmFtZSkgY29uc3QKLSB7Ci0gICAgIGlmIChwcm9mTmFtZS5lbXB0eSgpKSB7Ci0gICAgICAgICBy ZXR1cm4gIiI7Ci1AQCAtMjYzLDcgKzI1OSw3IEBAIEdsaWI6OnVzdHJpbmcgT3B0aW9uczo6Zmlu ZFByb2ZpbGVQYXRoKEdsaWI6OnVzdHJpbmcgJnByb2ZOYW1lKQotICAgICBpZiAocCA9PSAiJHtV fSIpIHsKLSAgICAgICAgIC8vIHRoZSBwYXRoIHN0YXJ0cyBieSB0aGUgVXNlciB2aXJ0dWFsIHBh dGgKLSAgICAgICAgIHAgPSBnZXRVc2VyUHJvZmlsZVBhdGgoKTsKLS0gICAgICAgIEdsaWI6OnVz dHJpbmcgZnVsbFBhdGggPSBHbGliOjpidWlsZF9maWxlbmFtZShwLCBwcm9mTmFtZS5zdWJzdHIo NSkgKyBwYXJhbUZpbGVFeHRlbnNpb24pOwotKyAgICAgICAgR2xpYjo6dXN0cmluZyBmdWxsUGF0 aCA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKHAsIHByb2ZOYW1lLnN1YnN0cig1KSArIEFwcDo6UEFS QU1fRklMRV9FWFRFTlNJT04pOwotIAotICAgICAgICAgaWYgKCFwLmVtcHR5KCkgJiYgR2xpYjo6 ZmlsZV90ZXN0KGZ1bGxQYXRoLCBHbGliOjpGSUxFX1RFU1RfRVhJU1RTKSkgewotICAgICAgICAg ICAgIHJldHVybiBHbGliOjpwYXRoX2dldF9kaXJuYW1lKGZ1bGxQYXRoKTsKLUBAIC0yNzEsNyAr MjY3LDcgQEAgR2xpYjo6dXN0cmluZyBPcHRpb25zOjpmaW5kUHJvZmlsZVBhdGgoR2xpYjo6dXN0 cmluZyAmcHJvZk5hbWUpCi0gICAgIH0gZWxzZSBpZiAocCA9PSAiJHtHfSIpIHsKLSAgICAgICAg IC8vIHRoZSBwYXRoIHN0YXJ0cyBieSB0aGUgVXNlciB2aXJ0dWFsIHBhdGgKLSAgICAgICAgIHAg PSBnZXRHbG9iYWxQcm9maWxlUGF0aCgpOwotLSAgICAgICAgR2xpYjo6dXN0cmluZyBmdWxsUGF0 aCA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKHAsIHByb2ZOYW1lLnN1YnN0cig1KSArIHBhcmFtRmls ZUV4dGVuc2lvbik7Ci0rICAgICAgICBHbGliOjp1c3RyaW5nIGZ1bGxQYXRoID0gR2xpYjo6YnVp bGRfZmlsZW5hbWUocCwgcHJvZk5hbWUuc3Vic3RyKDUpICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVO U0lPTik7Ci0gCi0gICAgICAgICBpZiAoIXAuZW1wdHkoKSAmJiBHbGliOjpmaWxlX3Rlc3QoZnVs bFBhdGgsIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpKSB7Ci0gICAgICAgICAgICAgcmV0dXJuIEds aWI6OnBhdGhfZ2V0X2Rpcm5hbWUoZnVsbFBhdGgpOwotQEAgLTI3OSw3ICsyNzUsNyBAQCBHbGli Ojp1c3RyaW5nIE9wdGlvbnM6OmZpbmRQcm9maWxlUGF0aChHbGliOjp1c3RyaW5nICZwcm9mTmFt ZSkKLSAgICAgfSBlbHNlIHsKLSAgICAgICAgIC8vIGNvbXBhdGliaWxpdHkgY2FzZSAtPiBjb252 ZXJ0IHRoZSBwYXRoIHRvIHRoZSBuZXcgZm9ybWF0Ci0gICAgICAgICBwID0gZ2V0VXNlclByb2Zp bGVQYXRoKCk7Ci0tICAgICAgICBHbGliOjp1c3RyaW5nIGZ1bGxQYXRoID0gR2xpYjo6YnVpbGRf ZmlsZW5hbWUocCwgcHJvZk5hbWUgKyBwYXJhbUZpbGVFeHRlbnNpb24pOwotKyAgICAgICAgR2xp Yjo6dXN0cmluZyBmdWxsUGF0aCA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKHAsIHByb2ZOYW1lICsg QXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTik7Ci0gCi0gICAgICAgICBpZiAoIXAuZW1wdHkoKSAm JiBHbGliOjpmaWxlX3Rlc3QoZnVsbFBhdGgsIEdsaWI6OkZJTEVfVEVTVF9FWElTVFMpKSB7Ci0g ICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBwcm9maWxlIHBhdGgKLUBAIC0yODgsNyArMjg0LDcg QEAgR2xpYjo6dXN0cmluZyBPcHRpb25zOjpmaW5kUHJvZmlsZVBhdGgoR2xpYjo6dXN0cmluZyAm cHJvZk5hbWUpCi0gICAgICAgICB9Ci0gCi0gICAgICAgICBwID0gZ2V0R2xvYmFsUHJvZmlsZVBh dGgoKTsKLS0gICAgICAgIGZ1bGxQYXRoID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUocCwgcHJvZk5h bWUgKyBwYXJhbUZpbGVFeHRlbnNpb24pOwotKyAgICAgICAgZnVsbFBhdGggPSBHbGliOjpidWls ZF9maWxlbmFtZShwLCBwcm9mTmFtZSArIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04pOwotIAot ICAgICAgICAgaWYgKCFwLmVtcHR5KCkgJiYgR2xpYjo6ZmlsZV90ZXN0KGZ1bGxQYXRoLCBHbGli OjpGSUxFX1RFU1RfRVhJU1RTKSkgewotICAgICAgICAgICAgIHByb2ZOYW1lID0gR2xpYjo6YnVp bGRfZmlsZW5hbWUoIiR7R30iLCBwcm9mTmFtZSk7Ci1AQCAtNTI3LDQzICs1MjMsNiBAQCB2b2lk IE9wdGlvbnM6OnNldERlZmF1bHRzKCkKLSAgICAgSUNDUENfY29weXJpZ2h0ID0gT3B0aW9uczo6 Z2V0SUNDUHJvZmlsZUNvcHlyaWdodCgpOwotICAgICBJQ0NQQ19hcHBlbmRQYXJhbXNUb0Rlc2Mg PSBmYWxzZTsKLSAKLS0gICAgZmFzdGV4cG9ydF9ieXBhc3Nfc2hhcnBlbmluZyAgICAgICAgID0g dHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9ieXBhc3Nfc2hhcnBlbkVkZ2UgICAgICAgID0gdHJ1ZTsK LS0gICAgZmFzdGV4cG9ydF9ieXBhc3Nfc2hhcnBlbk1pY3JvICAgICAgID0gdHJ1ZTsKLS0gICAg Ly9mYXN0ZXhwb3J0X2J5cGFzc19sdW1hRGVub2lzZSAgICAgICAgPSB0cnVlOwotLSAgICAvL2Zh c3RleHBvcnRfYnlwYXNzX2NvbG9yRGVub2lzZSAgICAgICA9IHRydWU7Ci0tICAgIGZhc3RleHBv cnRfYnlwYXNzX2RlZnJpbmdlICAgICAgICAgICA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfYnlw YXNzX2RpcnB5ckRlbm9pc2UgICAgICA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfYnlwYXNzX2Rp cnB5cmVxdWFsaXplciAgICA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfYnlwYXNzX3dhdmVsZXQg ICAgPSB0cnVlOwotLSAgICBmYXN0ZXhwb3J0X3Jhd19iYXllcl9tZXRob2QgICAgICAgICAgICAg ICAgICA9ICJmYXN0IjsKLS0gICAgLy9mYXN0ZXhwb3J0X2J5cGFzc19yYXdfYmF5ZXJfYWxsX2Vu aGFuY2UgICAgPSB0cnVlOwotLSAgICBmYXN0ZXhwb3J0X2J5cGFzc19yYXdfYmF5ZXJfZGNiX2l0 ZXJhdGlvbnMgICA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfYnlwYXNzX3Jhd19iYXllcl9kY2Jf ZW5oYW5jZSAgICAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2JheWVyX2xt bXNlX2l0ZXJhdGlvbnMgPSB0cnVlOwotLSAgICBmYXN0ZXhwb3J0X2J5cGFzc19yYXdfYmF5ZXJf bGluZW5vaXNlICAgICAgICA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfYnlwYXNzX3Jhd19iYXll cl9ncmVlbnRocmVzaCAgICAgID0gdHJ1ZTsKLS0gICAgZmFzdGV4cG9ydF9yYXdfeHRyYW5zX21l dGhvZCAgICAgICAgICAgICAgICAgPSAiZmFzdCI7Ci0tICAgIGZhc3RleHBvcnRfYnlwYXNzX3Jh d19jY1N0ZXBzICAgICAgICA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfYnlwYXNzX3Jhd19jYSAg ICAgICAgICAgICA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfYnlwYXNzX3Jhd19kZiAgICAgICAg ICAgICA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfYnlwYXNzX3Jhd19mZiAgICAgICAgICAgICA9 IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfaWNtX2lucHV0X3Byb2ZpbGUgICAgICAgICA9ICIoY2Ft ZXJhKSI7Ci0tICAgIGZhc3RleHBvcnRfaWNtX3dvcmtpbmdfcHJvZmlsZSAgICAgICA9ICJQcm9Q aG90byI7Ci0tICAgIGZhc3RleHBvcnRfaWNtX291dHB1dF9wcm9maWxlICAgICAgICA9IG9wdGlv bnMucnRTZXR0aW5ncy5zcmdiOwotLSAgICBmYXN0ZXhwb3J0X2ljbV9vdXRwdXRJbnRlbnQgICAg ICAgICAgPSBydGVuZ2luZTo6UklfUkVMQVRJVkU7Ci0tICAgIGZhc3RleHBvcnRfaWNtX291dHB1 dEJQQyAgICAgICAgICAgICA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfcmVzaXplX2VuYWJsZWQg ICAgICAgICAgICA9IHRydWU7Ci0tICAgIGZhc3RleHBvcnRfcmVzaXplX3NjYWxlICAgICAgICAg ICAgICA9IDE7Ci0tICAgIGZhc3RleHBvcnRfcmVzaXplX2FwcGxpZXNUbyAgICAgICAgICA9ICJD cm9wcGVkIGFyZWEiOwotLSAgICBmYXN0ZXhwb3J0X3Jlc2l6ZV9tZXRob2QgICAgICAgICAgICAg PSAiTGFuY3pvcyI7Ci0tICAgIGZhc3RleHBvcnRfcmVzaXplX2RhdGFzcGVjICAgICAgICAgICA9 IDM7Ci0tICAgIGZhc3RleHBvcnRfcmVzaXplX3dpZHRoICAgICAgICAgICAgICA9IDkwMDsKLS0g ICAgZmFzdGV4cG9ydF9yZXNpemVfaGVpZ2h0ICAgICAgICAgICAgID0gOTAwOwotLSAgICBmYXN0 ZXhwb3J0X3Jlc2l6ZV9sb25nZWRnZSAgICAgICAgICAgPSA5MDA7Ci0tICAgIGZhc3RleHBvcnRf cmVzaXplX3Nob3J0ZWRnZSAgICAgICAgICA9IDkwMDsKLS0gICAgZmFzdGV4cG9ydF91c2VfZmFz dF9waXBlbGluZSAgICAgICAgID0gdHJ1ZTsKLS0KLSAgICAgY2x1dHNEaXIgPSAiLi9jbHV0cyI7 Ci0gCi0gICAgIGN1dE92ZXJsYXlCcnVzaCA9IHN0ZDo6dmVjdG9yPGRvdWJsZT4gKDQpOwotQEAg LTY3OSw2ICs2MzgsNDUgQEAgdm9pZCBPcHRpb25zOjpzZXREZWZhdWx0cygpCi0gLy8gIHJ0U2V0 dGluZ3MuZGVjYWN0aW9uID0wLjM7Ci0gLy8gIHJ0U2V0dGluZ3MuY2llYmFkcGl4Z2F1c3M9ZmFs c2U7Ci0gICAgIHJ0U2V0dGluZ3MucmdiY3VydmVzbHVtYW1vZGVfZ2FtdXQgPSB0cnVlOwotKwot KyAgICBmYXN0ZXhwb3J0X2J5cGFzc19zaGFycGVuaW5nICAgICAgICAgPSB0cnVlOwotKyAgICBm YXN0ZXhwb3J0X2J5cGFzc19zaGFycGVuRWRnZSAgICAgICAgPSB0cnVlOwotKyAgICBmYXN0ZXhw b3J0X2J5cGFzc19zaGFycGVuTWljcm8gICAgICAgPSB0cnVlOwotKyAgICAvL2Zhc3RleHBvcnRf YnlwYXNzX2x1bWFEZW5vaXNlICAgICAgICA9IHRydWU7Ci0rICAgIC8vZmFzdGV4cG9ydF9ieXBh c3NfY29sb3JEZW5vaXNlICAgICAgID0gdHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9ieXBhc3NfZGVm cmluZ2UgICAgICAgICAgID0gdHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9ieXBhc3NfZGlycHlyRGVu b2lzZSAgICAgID0gdHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9ieXBhc3NfZGlycHlyZXF1YWxpemVy ICAgID0gdHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9ieXBhc3Nfd2F2ZWxldCAgICA9IHRydWU7Ci0r ICAgIGZhc3RleHBvcnRfcmF3X2JheWVyX21ldGhvZCAgICAgICAgICAgICAgICAgID0gImZhc3Qi OwotKyAgICAvL2Zhc3RleHBvcnRfYnlwYXNzX3Jhd19iYXllcl9hbGxfZW5oYW5jZSAgICA9IHRy dWU7Ci0rICAgIGZhc3RleHBvcnRfYnlwYXNzX3Jhd19iYXllcl9kY2JfaXRlcmF0aW9ucyAgID0g dHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2JheWVyX2RjYl9lbmhhbmNlICAgICAg PSB0cnVlOwotKyAgICBmYXN0ZXhwb3J0X2J5cGFzc19yYXdfYmF5ZXJfbG1tc2VfaXRlcmF0aW9u cyA9IHRydWU7Ci0rICAgIGZhc3RleHBvcnRfYnlwYXNzX3Jhd19iYXllcl9saW5lbm9pc2UgICAg ICAgID0gdHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2JheWVyX2dyZWVudGhyZXNo ICAgICAgPSB0cnVlOwotKyAgICBmYXN0ZXhwb3J0X3Jhd194dHJhbnNfbWV0aG9kICAgICAgICAg ICAgICAgICA9ICJmYXN0IjsKLSsgICAgZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2NjU3RlcHMgICAg ICAgID0gdHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2NhICAgICAgICAgICAgID0g dHJ1ZTsKLSsgICAgZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2RmICAgICAgICAgICAgID0gdHJ1ZTsK LSsgICAgZmFzdGV4cG9ydF9ieXBhc3NfcmF3X2ZmICAgICAgICAgICAgID0gdHJ1ZTsKLSsgICAg ZmFzdGV4cG9ydF9pY21faW5wdXRfcHJvZmlsZSAgICAgICAgID0gIihjYW1lcmEpIjsKLSsgICAg ZmFzdGV4cG9ydF9pY21fd29ya2luZ19wcm9maWxlICAgICAgID0gIlByb1Bob3RvIjsKLSsgICAg Ly8gTXVzdCBiZSBzZXQgYWZ0ZXIgb3B0aW9ucy5ydFNldHRpbmdzLnNyZ2IgaGFzIGFscmVhZHkg YmVlbiBpbml0aWFsaXplZCEKLSsgICAgZmFzdGV4cG9ydF9pY21fb3V0cHV0X3Byb2ZpbGUgICAg ICAgID0gcnRTZXR0aW5ncy5zcmdiOwotKyAgICBmYXN0ZXhwb3J0X2ljbV9vdXRwdXRJbnRlbnQg ICAgICAgICAgPSBydGVuZ2luZTo6UklfUkVMQVRJVkU7Ci0rICAgIGZhc3RleHBvcnRfaWNtX291 dHB1dEJQQyAgICAgICAgICAgICA9IHRydWU7Ci0rICAgIGZhc3RleHBvcnRfcmVzaXplX2VuYWJs ZWQgICAgICAgICAgICA9IHRydWU7Ci0rICAgIGZhc3RleHBvcnRfcmVzaXplX3NjYWxlICAgICAg ICAgICAgICA9IDE7Ci0rICAgIGZhc3RleHBvcnRfcmVzaXplX2FwcGxpZXNUbyAgICAgICAgICA9 ICJDcm9wcGVkIGFyZWEiOwotKyAgICBmYXN0ZXhwb3J0X3Jlc2l6ZV9tZXRob2QgICAgICAgICAg ICAgPSAiTGFuY3pvcyI7Ci0rICAgIGZhc3RleHBvcnRfcmVzaXplX2RhdGFzcGVjICAgICAgICAg ICA9IDM7Ci0rICAgIGZhc3RleHBvcnRfcmVzaXplX3dpZHRoICAgICAgICAgICAgICA9IDkwMDsK LSsgICAgZmFzdGV4cG9ydF9yZXNpemVfaGVpZ2h0ICAgICAgICAgICAgID0gOTAwOwotKyAgICBm YXN0ZXhwb3J0X3Jlc2l6ZV9sb25nZWRnZSAgICAgICAgICAgPSA5MDA7Ci0rICAgIGZhc3RleHBv cnRfcmVzaXplX3Nob3J0ZWRnZSAgICAgICAgICA9IDkwMDsKLSsgICAgZmFzdGV4cG9ydF91c2Vf ZmFzdF9waXBlbGluZSAgICAgICAgID0gdHJ1ZTsKLSsKLSAgICAgbGFzdEljY0RpciA9IHJ0U2V0 dGluZ3MuaWNjRGlyZWN0b3J5OwotICAgICBsYXN0RGFya2ZyYW1lRGlyID0gcnRTZXR0aW5ncy5k YXJrRnJhbWVzUGF0aDsKLSAgICAgbGFzdEZsYXRmaWVsZERpciA9IHJ0U2V0dGluZ3MuZmxhdEZp ZWxkc1BhdGg7Ci1AQCAtOTY5LDcgKzk2Nyw3IEBAIHZvaWQgT3B0aW9uczo6cmVhZEZyb21GaWxl KEdsaWI6OnVzdHJpbmcgZm5hbWUpCi0gICAgICAgICAgICAgICAgICAgICBpZiAoa2V5RmlsZS5o YXNfa2V5KCJFeHRlcm5hbCBFZGl0b3IiLCAiR2ltcERpciIpKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgZ2ltcERpciA9IGtleUZpbGUuZ2V0X3N0cmluZygiRXh0ZXJuYWwgRWRpdG9yIiwg IkdpbXBEaXIiKTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAgICAg IGF1dG8gZXhlY3V0YWJsZSA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKG9wdGlvbnMuZ2ltcERpciwg ImJpbiIsICJnaW1wLXdpbi1yZW1vdGUiKTsKLSsgICAgICAgICAgICAgICAgICAgIGF1dG8gZXhl Y3V0YWJsZSA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGdpbXBEaXIsICJiaW4iLCAiZ2ltcC13aW4t cmVtb3RlIik7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAoR2xpYjo6ZmlsZV90ZXN0KGV4ZWN1 dGFibGUsIEdsaWI6OkZJTEVfVEVTVF9JU19FWEVDVVRBQkxFKSkgewotICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChlZGl0b3JUb1NlbmRUbyA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4dGVybmFsRWRpdG9ySW5kZXggPSBleHRlcm5hbEVkaXRvcnMuc2l6ZSgpOwot QEAgLTIzNzUsNyArMjM3Myw3IEBAIHZvaWQgT3B0aW9uczo6cmVhZEZyb21GaWxlKEdsaWI6OnVz dHJpbmcgZm5hbWUpCi0gICAgIH0gY2F0Y2ggKEdsaWI6OkVycm9yICZlcnIpIHsKLSAgICAgICAg IEdsaWI6OnVzdHJpbmcgbXNnID0gR2xpYjo6dXN0cmluZzo6Y29tcG9zZSgiT3B0aW9uczo6cmVh ZEZyb21GaWxlIC8gRXJyb3IgY29kZSAlMSB3aGlsZSByZWFkaW5nIHZhbHVlcyBmcm9tIFwiJTJc IjpcbiUzIiwgZXJyLmNvZGUoKSwgZm5hbWUsIGVyci53aGF0KCkpOwotIAotLSAgICAgICAgaWYg KG9wdGlvbnMucnRTZXR0aW5ncy52ZXJib3NlKSB7Ci0rICAgICAgICBpZiAoQXBwOjpnZXQoKS5v cHRpb25zKCkucnRTZXR0aW5ncy52ZXJib3NlKSB7Ci0gICAgICAgICAgICAgcHJpbnRmKCIlc1xu IiwgbXNnLmNfc3RyKCkpOwotICAgICAgICAgfQotIAotQEAgLTIzODMsNyArMjM4MSw3IEBAIHZv aWQgT3B0aW9uczo6cmVhZEZyb21GaWxlKEdsaWI6OnVzdHJpbmcgZm5hbWUpCi0gICAgIH0gY2F0 Y2ggKC4uLikgewotICAgICAgICAgR2xpYjo6dXN0cmluZyBtc2cgPSBHbGliOjp1c3RyaW5nOjpj b21wb3NlKCJPcHRpb25zOjpyZWFkRnJvbUZpbGUgLyBVbmtub3duIGV4Y2VwdGlvbiB3aGlsZSB0 cnlpbmcgdG8gbG9hZCBcIiUxXCIhIiwgZm5hbWUpOwotIAotLSAgICAgICAgaWYgKG9wdGlvbnMu cnRTZXR0aW5ncy52ZXJib3NlKSB7Ci0rICAgICAgICBpZiAoQXBwOjpnZXQoKS5vcHRpb25zKCku cnRTZXR0aW5ncy52ZXJib3NlKSB7Ci0gICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgbXNnLmNf c3RyKCkpOwotICAgICAgICAgfQotIAotQEAgLTI4NzMsNyArMjg3MSw2IEBAIHZvaWQgT3B0aW9u czo6c2F2ZVRvRmlsZShHbGliOjp1c3RyaW5nIGZuYW1lKQotIAotIHZvaWQgT3B0aW9uczo6bG9h ZChib29sIGxpZ2h0d2VpZ2h0KQotIHsKLS0KLSAgICAgLy8gRmluZCB0aGUgYXBwbGljYXRpb24g ZGF0YSBwYXRoCi0gCi0gICAgIGNvbnN0IGdjaGFyKiBwYXRoOwotQEAgLTI5MDgsMjIgKzI5MDUs MjMgQEAgdm9pZCBPcHRpb25zOjpsb2FkKGJvb2wgbGlnaHR3ZWlnaHQpCi0gI2VuZGlmCi0gICAg IH0KLSAKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAg ICAgaWYgKG9wdGlvbnMucnRTZXR0aW5ncy52ZXJib3NlKSB7Ci0gICAgICAgICBwcmludGYoIlNl dHRpbmdzIGRpcmVjdG9yeSAocnRkaXIpID0gJXNcbiIsIHJ0ZGlyLmNfc3RyKCkpOwotICAgICB9 Ci0gCi0gICAgIC8vIFNldCB0aGUgY2FjaGUgZm9sZGVyIGluIFJUJ3MgYmFzZSBmb2xkZXIKLS0g ICAgY2FjaGVCYXNlRGlyID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoYXJndjAsICJteWNhY2hlIik7 Ci0rICAgIGNhY2hlQmFzZURpciA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKEFwcDo6Z2V0KCkuYXJn djAoKSwgIm15Y2FjaGUiKTsKLSAKLSAgICAgLy8gUmVhZCB0aGUgZ2xvYmFsIG9wdGlvbiBmaWxl ICh0aGUgb25lIGxvY2F0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgYmFzZSBmb2xkZXIpCi0gICAg IHRyeSB7Ci0tICAgICAgICBvcHRpb25zLnJlYWRGcm9tRmlsZShHbGliOjpidWlsZF9maWxlbmFt ZShhcmd2MCwgIm9wdGlvbnMiKSk7Ci0rICAgICAgICBvcHRpb25zLnJlYWRGcm9tRmlsZShHbGli OjpidWlsZF9maWxlbmFtZShBcHA6OmdldCgpLmFyZ3YwKCksICJvcHRpb25zIikpOwotICAgICB9 IGNhdGNoIChPcHRpb25zOjpFcnJvciAmKSB7Ci0gICAgICAgICAvLyBpZ25vcmUgZXJyb3JzIGhl cmUKLSAgICAgfQotIAotICAgICBpZiAoIW9wdGlvbnMubXVsdGlVc2VyICYmIHBhdGggPT0gbnVs bHB0cikgewotLSAgICAgICAgcnRkaXIgPSBHbGliOjpidWlsZF9maWxlbmFtZShhcmd2MCwgIm15 c2V0dGluZ3MiKTsKLSsgICAgICAgIHJ0ZGlyID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoQXBwOjpn ZXQoKS5hcmd2MCgpLCAibXlzZXR0aW5ncyIpOwotICAgICB9Ci0gCi0gICAgIC8vIE1vZGlmeSB0 aGUgcGF0aCBvZiB0aGUgY2FjaGUgZm9sZGVyIHRvIHRoZSBvbmUgcHJvdmlkZWQgaW4gUlRfQ0FD SEUgZW52aXJvbm1lbnQgdmFyaWFibGUuCi1AQCAtMzAzOSw3ICszMDM3LDcgQEAgdm9pZCBPcHRp b25zOjpsb2FkKGJvb2wgbGlnaHR3ZWlnaHQpCi0gICAgIC8vIG91dCB3aGljaCBhcmUgdGhlIHBh cmVudCB0cmFuc2xhdGlvbnMuICBGdXJ0aGVybW9yZSwgdGhlcmUgbXVzdCBiZSBhIGZpbGUgPExh bmd1YWdlPiBmb3IgZWFjaCBsb2NhbGUgPExhbmd1YWdlPiAoPExDPikgLS0geW91IGNhbm5vdCBo YXZlCi0gICAgIC8vICdGcmVuY2ggKENBKScgdW5sZXNzIHRoZXJlIGlzIGEgZmlsZSAnRnJlbmNo Jy4KLSAKLS0gICAgR2xpYjo6dXN0cmluZyBkZWZhdWx0VHJhbnNsYXRpb24gPSBHbGliOjpidWls ZF9maWxlbmFtZShhcmd2MCwgImxhbmd1YWdlcyIsICJkZWZhdWx0Iik7Ci0rICAgIEdsaWI6OnVz dHJpbmcgZGVmYXVsdFRyYW5zbGF0aW9uID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoQXBwOjpnZXQo KS5hcmd2MCgpLCAibGFuZ3VhZ2VzIiwgImRlZmF1bHQiKTsKLSAgICAgR2xpYjo6dXN0cmluZyBs YW5ndWFnZVRyYW5zbGF0aW9uID0gIiI7Ci0gICAgIEdsaWI6OnVzdHJpbmcgbG9jYWxlVHJhbnNs YXRpb24gPSAiIjsKLSAKLUBAIC0zMDUxLDI5ICszMDQ5LDI5IEBAIHZvaWQgT3B0aW9uczo6bG9h ZChib29sIGxpZ2h0d2VpZ2h0KQotICAgICAgICAgc3RkOjp2ZWN0b3I8R2xpYjo6dXN0cmluZz4g bGFuZ1BvcnRpb25zID0gR2xpYjo6UmVnZXg6OnNwbGl0X3NpbXBsZSgiICIsIG9wdGlvbnMubGFu Z3VhZ2UpOwotIAotICAgICAgICAgaWYgKGxhbmdQb3J0aW9ucy5zaXplKCkgPj0gMSkgewotLSAg ICAgICAgICAgIGxhbmd1YWdlVHJhbnNsYXRpb24gPSBHbGliOjpidWlsZF9maWxlbmFtZShhcmd2 MCwgImxhbmd1YWdlcyIsIGxhbmdQb3J0aW9ucy5hdCgwKSk7Ci0rICAgICAgICAgICAgbGFuZ3Vh Z2VUcmFuc2xhdGlvbiA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKEFwcDo6Z2V0KCkuYXJndjAoKSwg Imxhbmd1YWdlcyIsIGxhbmdQb3J0aW9ucy5hdCgwKSk7Ci0gICAgICAgICB9Ci0gCi0gICAgICAg ICBpZiAobGFuZ1BvcnRpb25zLnNpemUoKSA+PSAyKSB7Ci0tICAgICAgICAgICAgbG9jYWxlVHJh bnNsYXRpb24gPSBHbGliOjpidWlsZF9maWxlbmFtZShhcmd2MCwgImxhbmd1YWdlcyIsIG9wdGlv bnMubGFuZ3VhZ2UpOwotKyAgICAgICAgICAgIGxvY2FsZVRyYW5zbGF0aW9uID0gR2xpYjo6YnVp bGRfZmlsZW5hbWUoQXBwOjpnZXQoKS5hcmd2MCgpLCAibGFuZ3VhZ2VzIiwgb3B0aW9ucy5sYW5n dWFnZSk7Ci0gICAgICAgICB9Ci0gICAgIH0KLSAKLSAgICAgbGFuZ01nci5sb2FkKG9wdGlvbnMu bGFuZ3VhZ2UsIHtsb2NhbGVUcmFuc2xhdGlvbiwgbGFuZ3VhZ2VUcmFuc2xhdGlvbiwgZGVmYXVs dFRyYW5zbGF0aW9ufSk7Ci0gCi0tICAgIHJ0ZW5naW5lOjppbml0KCZvcHRpb25zLnJ0U2V0dGlu Z3MsIGFyZ3YwLCBydGRpciwgIWxpZ2h0d2VpZ2h0KTsKLSsgICAgcnRlbmdpbmU6OmluaXQoJm9w dGlvbnMucnRTZXR0aW5ncywgQXBwOjpnZXQoKS5hcmd2MCgpLCBydGRpciwgIWxpZ2h0d2VpZ2h0 KTsKLSB9Ci0gCi0gdm9pZCBPcHRpb25zOjpzYXZlKCkKLSB7Ci0gCi0tICAgIG9wdGlvbnMuc2F2 ZVRvRmlsZShHbGliOjpidWlsZF9maWxlbmFtZShydGRpciwgIm9wdGlvbnMiKSk7Ci0rICAgIEFw cDo6Z2V0KCkubXV0X29wdGlvbnMoKS5zYXZlVG9GaWxlKEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKHJ0 ZGlyLCAib3B0aW9ucyIpKTsKLSB9Ci0gCi0gLyoKLSAgKiByZXR1cm4gdHJ1ZSBpZiBleHQgaXMg YSBwYXJzZWQgZXh0ZW5zaW9uIChyZXRhaW5lZCBvciBub3QpCi0gICovCi0tYm9vbCBPcHRpb25z Ojppc19wYXJzZV9leHRlbnRpb24oR2xpYjo6dXN0cmluZyBmbmFtZSkKLStib29sIE9wdGlvbnM6 OmlzX3BhcnNlX2V4dGVudGlvbihHbGliOjp1c3RyaW5nIGZuYW1lKSBjb25zdAotIHsKLSAgICAg R2xpYjo6dXN0cmluZyBleHQgPSBnZXRFeHRlbnNpb24oZm5hbWUpLmxvd2VyY2FzZSgpOwotIAot QEAgLTMwOTQsMTQgKzMwOTIsMTQgQEAgYm9vbCBPcHRpb25zOjppc19wYXJzZV9leHRlbnRpb24o R2xpYjo6dXN0cmluZyBmbmFtZSkKLSAvKgotICAqIHJldHVybiB0cnVlIGlmIGZuYW1lIGVuZHMg d2l0aCBvbmUgb2YgdGhlIHJldGFpbmVkIGltYWdlIGZpbGUgZXh0ZW5zaW9ucwotICAqLwotLWJv b2wgT3B0aW9uczo6aGFzX3JldGFpbmVkX2V4dGVudGlvbihjb25zdCBHbGliOjp1c3RyaW5nJiBm bmFtZSkKLStib29sIE9wdGlvbnM6Omhhc19yZXRhaW5lZF9leHRlbnRpb24oY29uc3QgR2xpYjo6 dXN0cmluZyYgZm5hbWUpIGNvbnN0Ci0gewotICAgICByZXR1cm4gcGFyc2VkRXh0ZW5zaW9uc1Nl dC5maW5kKGdldEV4dGVuc2lvbihmbmFtZSkubG93ZXJjYXNlKCkpICE9IHBhcnNlZEV4dGVuc2lv bnNTZXQuZW5kKCk7Ci0gfQotIAotIC8vIFBhdHRlcm4gbWF0Y2hlcyAiNS4xIiBmcm9tICI1LjEt MjMtZzEyMzQ1Njc4Iiwgd2hlbiBjb21wYXJpbmcgb3B0aW9uLnZlcnNpb24gdG8gUlRWRVJTSU9O Ci0tYm9vbCBPcHRpb25zOjppc19uZXdfdmVyc2lvbigpIHsKLS0gICAgY29uc3Qgc3RkOjpzdHJp bmcgdnNbXSA9IHt2ZXJzaW9uU3RyaW5nLCB2ZXJzaW9ufTsKLStib29sIE9wdGlvbnM6OmlzX25l d192ZXJzaW9uKCkgY29uc3QgewotKyAgICBjb25zdCBzdGQ6OnN0cmluZyB2c1tdID0ge0FwcDo6 VkVSU0lPTiwgdmVyc2lvbn07Ci0gICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB2TWFqb3I7 Ci0gCi0gICAgIGZvciAoY29uc3QgYXV0byYgdiA6IHZzKSB7Ci1AQCAtMzExNCwyNiArMzExMiwy NiBAQCBib29sIE9wdGlvbnM6OmlzX25ld192ZXJzaW9uKCkgewotIC8qCi0gICogcmV0dXJuIHRy dWUgaWYgZXh0IGlzIGFuIGVuYWJsZWQgZXh0ZW5zaW9uCi0gICovCi0tYm9vbCBPcHRpb25zOjpp c19leHRlbnRpb25fZW5hYmxlZChjb25zdCBHbGliOjp1c3RyaW5nJiBleHQpCi0rYm9vbCBPcHRp b25zOjppc19leHRlbnRpb25fZW5hYmxlZChjb25zdCBHbGliOjp1c3RyaW5nJiBleHQpIGNvbnN0 Ci0gewotICAgICByZXR1cm4gcGFyc2VkRXh0ZW5zaW9uc1NldC5maW5kKGV4dC5sb3dlcmNhc2Uo KSkgIT0gcGFyc2VkRXh0ZW5zaW9uc1NldC5lbmQoKTsKLSB9Ci0gCi0tR2xpYjo6dXN0cmluZyBP cHRpb25zOjpnZXRVc2VyUHJvZmlsZVBhdGgoKQotK0dsaWI6OnVzdHJpbmcgT3B0aW9uczo6Z2V0 VXNlclByb2ZpbGVQYXRoKCkgY29uc3QKLSB7Ci0gICAgIHJldHVybiB1c2VyUHJvZmlsZVBhdGg7 Ci0gfQotIAotLUdsaWI6OnVzdHJpbmcgT3B0aW9uczo6Z2V0R2xvYmFsUHJvZmlsZVBhdGgoKQot K0dsaWI6OnVzdHJpbmcgT3B0aW9uczo6Z2V0R2xvYmFsUHJvZmlsZVBhdGgoKSBjb25zdAotIHsK LSAgICAgcmV0dXJuIGdsb2JhbFByb2ZpbGVQYXRoOwotIH0KLSAKLS1ib29sIE9wdGlvbnM6Omlz X2RlZlByb2ZSYXdNaXNzaW5nKCkKLStib29sIE9wdGlvbnM6OmlzX2RlZlByb2ZSYXdNaXNzaW5n KCkgY29uc3QKLSB7Ci0gICAgIHJldHVybiBkZWZQcm9mRXJyb3IgJiBydGVuZ2luZTo6dG9VbmRl cmx5aW5nKERlZlByb2ZFcnJvcjo6ZGVmUHJvZlJhd01pc3NpbmcpOwotIH0KLS1ib29sIE9wdGlv bnM6OmlzX2RlZlByb2ZJbWdNaXNzaW5nKCkKLStib29sIE9wdGlvbnM6OmlzX2RlZlByb2ZJbWdN aXNzaW5nKCkgY29uc3QKLSB7Ci0gICAgIHJldHVybiBkZWZQcm9mRXJyb3IgJiBydGVuZ2luZTo6 dG9VbmRlcmx5aW5nKERlZlByb2ZFcnJvcjo6ZGVmUHJvZkltZ01pc3NpbmcpOwotIH0KLUBAIC0z MTUzLDExICszMTUxLDExIEBAIHZvaWQgT3B0aW9uczo6c2V0RGVmUHJvZkltZ01pc3NpbmcoYm9v bCB2YWx1ZSkKLSAgICAgICAgIGRlZlByb2ZFcnJvciAmPSB+cnRlbmdpbmU6OnRvVW5kZXJseWlu ZyhEZWZQcm9mRXJyb3I6OmRlZlByb2ZJbWdNaXNzaW5nKTsKLSAgICAgfQotIH0KLS1ib29sIE9w dGlvbnM6OmlzX2J1bmRsZWREZWZQcm9mUmF3TWlzc2luZygpCi0rYm9vbCBPcHRpb25zOjppc19i dW5kbGVkRGVmUHJvZlJhd01pc3NpbmcoKSBjb25zdAotIHsKLSAgICAgcmV0dXJuIGRlZlByb2ZF cnJvciAmIHJ0ZW5naW5lOjp0b1VuZGVybHlpbmcoRGVmUHJvZkVycm9yOjpidW5kbGVkRGVmUHJv ZlJhd01pc3NpbmcpOwotIH0KLS1ib29sIE9wdGlvbnM6OmlzX2J1bmRsZWREZWZQcm9mSW1nTWlz c2luZygpCi0rYm9vbCBPcHRpb25zOjppc19idW5kbGVkRGVmUHJvZkltZ01pc3NpbmcoKSBjb25z dAotIHsKLSAgICAgcmV0dXJuIGRlZlByb2ZFcnJvciAmIHJ0ZW5naW5lOjp0b1VuZGVybHlpbmco RGVmUHJvZkVycm9yOjpidW5kbGVkRGVmUHJvZkltZ01pc3NpbmcpOwotIH0KLWRpZmYgLS1naXQg YS9ydGd1aS9vcHRpb25zLmggYi9ydGd1aS9vcHRpb25zLmgKLWluZGV4IDBhYmVkNzJkZi4uZTEz YmY2NjFkIDEwMDY0NAotLS0tIGEvcnRndWkvb3B0aW9ucy5oCi0rKysgYi9ydGd1aS9vcHRpb25z LmgKLUBAIC0yOSw2ICsyOSw3IEBACi0gI2Vsc2UKLSAjaW5jbHVkZSA8Z3RrbW0vZW51bXMuaD4K LSAjZW5kaWYKLSsjaW5jbHVkZSAicnRlbmdpbmUvcnRhcHAuaCIKLSAjaW5jbHVkZSAicnRlbmdp bmUvc2V0dGluZ3MuaCIKLSAjaW5jbHVkZSA8ZXhjZXB0aW9uPgotIAotQEAgLTUzMiwzMCArNTMz LDIxIEBAIHB1YmxpYzoKLSAgICAgc3RhdGljIHZvaWQgc2F2ZSgpOwotIAotICAgICAvLyBpZiBt dWx0aVVzZXI9ZmFsc2UsIHNlbmQgYmFjayB0aGUgZ2xvYmFsIHByb2ZpbGUgcGF0aAotLSAgICBH bGliOjp1c3RyaW5nIGdldFByZWZlcnJlZFByb2ZpbGVQYXRoKCk7Ci0tICAgIEdsaWI6OnVzdHJp bmcgZ2V0VXNlclByb2ZpbGVQYXRoKCk7Ci0tICAgIEdsaWI6OnVzdHJpbmcgZ2V0R2xvYmFsUHJv ZmlsZVBhdGgoKTsKLS0gICAgR2xpYjo6dXN0cmluZyBmaW5kUHJvZmlsZVBhdGggKEdsaWI6OnVz dHJpbmcgJnByb2ZOYW1lKTsKLS0gICAgYm9vbCBpc19wYXJzZV9leHRlbnRpb24gKEdsaWI6OnVz dHJpbmcgZm5hbWUpOwotLSAgICBib29sIGhhc19yZXRhaW5lZF9leHRlbnRpb24gKGNvbnN0IEds aWI6OnVzdHJpbmcmIGZuYW1lKTsKLS0gICAgYm9vbCBpc19uZXdfdmVyc2lvbigpOwotLSAgICBi b29sIGlzX2V4dGVudGlvbl9lbmFibGVkIChjb25zdCBHbGliOjp1c3RyaW5nJiBleHQpOwotLSAg ICBib29sIGlzX2RlZlByb2ZSYXdNaXNzaW5nKCk7Ci0tICAgIGJvb2wgaXNfYnVuZGxlZERlZlBy b2ZSYXdNaXNzaW5nKCk7Ci0tICAgIGJvb2wgaXNfZGVmUHJvZkltZ01pc3NpbmcoKTsKLS0gICAg Ym9vbCBpc19idW5kbGVkRGVmUHJvZkltZ01pc3NpbmcoKTsKLSsgICAgR2xpYjo6dXN0cmluZyBn ZXRQcmVmZXJyZWRQcm9maWxlUGF0aCgpIGNvbnN0OwotKyAgICBHbGliOjp1c3RyaW5nIGdldFVz ZXJQcm9maWxlUGF0aCgpIGNvbnN0OwotKyAgICBHbGliOjp1c3RyaW5nIGdldEdsb2JhbFByb2Zp bGVQYXRoKCkgY29uc3Q7Ci0rICAgIEdsaWI6OnVzdHJpbmcgZmluZFByb2ZpbGVQYXRoIChHbGli Ojp1c3RyaW5nICZwcm9mTmFtZSkgY29uc3Q7Ci0rICAgIGJvb2wgaXNfcGFyc2VfZXh0ZW50aW9u IChHbGliOjp1c3RyaW5nIGZuYW1lKSBjb25zdDsKLSsgICAgYm9vbCBoYXNfcmV0YWluZWRfZXh0 ZW50aW9uIChjb25zdCBHbGliOjp1c3RyaW5nJiBmbmFtZSkgY29uc3Q7Ci0rICAgIGJvb2wgaXNf bmV3X3ZlcnNpb24oKSBjb25zdDsKLSsgICAgYm9vbCBpc19leHRlbnRpb25fZW5hYmxlZCAoY29u c3QgR2xpYjo6dXN0cmluZyYgZXh0KSBjb25zdDsKLSsgICAgYm9vbCBpc19kZWZQcm9mUmF3TWlz c2luZygpIGNvbnN0OwotKyAgICBib29sIGlzX2J1bmRsZWREZWZQcm9mUmF3TWlzc2luZygpIGNv bnN0OwotKyAgICBib29sIGlzX2RlZlByb2ZJbWdNaXNzaW5nKCkgY29uc3Q7Ci0rICAgIGJvb2wg aXNfYnVuZGxlZERlZlByb2ZJbWdNaXNzaW5nKCkgY29uc3Q7Ci0gICAgIHZvaWQgc2V0RGVmUHJv ZlJhd01pc3NpbmcgKGJvb2wgdmFsdWUpOwotICAgICB2b2lkIHNldEJ1bmRsZWREZWZQcm9mUmF3 TWlzc2luZyAoYm9vbCB2YWx1ZSk7Ci0gICAgIHZvaWQgc2V0RGVmUHJvZkltZ01pc3NpbmcgKGJv b2wgdmFsdWUpOwotICAgICB2b2lkIHNldEJ1bmRsZWREZWZQcm9mSW1nTWlzc2luZyAoYm9vbCB2 YWx1ZSk7Ci0gICAgIHN0YXRpYyBHbGliOjp1c3RyaW5nIGdldElDQ1Byb2ZpbGVDb3B5cmlnaHQo KTsKLSB9OwotLQotLWV4dGVybiBPcHRpb25zIG9wdGlvbnM7Ci0tZXh0ZXJuIEdsaWI6OnVzdHJp bmcgYXJndjA7Ci0tZXh0ZXJuIEdsaWI6OnVzdHJpbmcgYXJndjE7Ci0tZXh0ZXJuIGJvb2wgc2lt cGxlRWRpdG9yOwotLWV4dGVybiBib29sIGdpbXBQbHVnaW47Ci0tZXh0ZXJuIGJvb2wgcmVtb3Rl OwotLWV4dGVybiBHbGliOjp1c3RyaW5nIHZlcnNpb25TdHJpbmc7Ci0tZXh0ZXJuIEdsaWI6OnVz dHJpbmcgcGFyYW1GaWxlRXh0ZW5zaW9uOwotZGlmZiAtLWdpdCBhL3J0Z3VpL3BhcmFtc2VkaXRl ZC5jYyBiL3J0Z3VpL3BhcmFtc2VkaXRlZC5jYwotaW5kZXggYTVlNWFlMTJlLi4wMjhmNjQ5MTgg MTAwNjQ0Ci0tLS0gYS9ydGd1aS9wYXJhbXNlZGl0ZWQuY2MKLSsrKyBiL3J0Z3VpL3BhcmFtc2Vk aXRlZC5jYwotQEAgLTg0LDYgKzg0LDggQEAgdm9pZCBpbml0RnJvbShGcmFtaW5nUGFyYW1zRWRp dGVkJiBlZGl0cywgY29uc3QgUHJvY1BhcmFtcyYgcGFyYW1zLCBjb25zdCBQcm9jUGEKLSB2b2lk IGNvbWJpbmUoRnJhbWluZ1BhcmFtcyYgdG9FZGl0LCBjb25zdCBGcmFtaW5nUGFyYW1zJiBtb2Qs IGNvbnN0IEZyYW1pbmdQYXJhbXNFZGl0ZWQmIGVkaXRzLAotICAgICAgICAgICAgICBib29sIGRv bnRGb3JjZVNldCkKLSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9w dGlvbnMoKTsKLSsKLSAgICAgaWYgKGVkaXRzLmVuYWJsZWQpIHsKLSAgICAgICAgIHRvRWRpdC5l bmFibGVkID0gbW9kLmVuYWJsZWQ7Ci0gICAgIH0KLUBAIC0yNDY5LDYgKzI0NzEsNyBAQCB2b2lk IFBhcmFtc0VkaXRlZDo6aW5pdEZyb20oY29uc3Qgc3RkOjp2ZWN0b3I8cnRlbmdpbmU6OnByb2Nw YXJhbXM6OlByb2NQYXJhbXM+JgotIAotIHZvaWQgUGFyYW1zRWRpdGVkOjpjb21iaW5lKHJ0ZW5n aW5lOjpwcm9jcGFyYW1zOjpQcm9jUGFyYW1zJiB0b0VkaXQsIGNvbnN0IHJ0ZW5naW5lOjpwcm9j cGFyYW1zOjpQcm9jUGFyYW1zJiBtb2RzLCBib29sIGZvcmNlU2V0KQotIHsKLSsgICAgY29uc3Qg T3B0aW9ucyYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotIAotICAgICBib29sIGRv bnRmb3JjZVNldCA9ICFmb3JjZVNldDsKLSAKLWRpZmYgLS1naXQgYS9ydGd1aS9wZHNoYXJwZW5p bmcuY2MgYi9ydGd1aS9wZHNoYXJwZW5pbmcuY2MKLWluZGV4IDUwNDY0NDM3OC4uMzk3Yjg4ZDAx IDEwMDY0NAotLS0tIGEvcnRndWkvcGRzaGFycGVuaW5nLmNjCi0rKysgYi9ydGd1aS9wZHNoYXJw ZW5pbmcuY2MKLUBAIC04Myw2ICs4Myw3IEBAIFBkU2hhcnBlbmluZzo6UGRTaGFycGVuaW5nKCkg OgotICAgICBkcmFkaXVzT2Zmc2V0LT5zZXRBZGp1c3Rlckxpc3RlbmVyKHRoaXMpOwotICAgICBk aXRlci0+c2V0QWRqdXN0ZXJMaXN0ZW5lcih0aGlzKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0 aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBjb250cmFzdC0+c2V0RGVsYXkoc3Rk OjptYXgob3B0aW9ucy5hZGp1c3Rlck1pbkRlbGF5LCBvcHRpb25zLmFkanVzdGVyTWF4RGVsYXkp KTsKLSAgICAgZHJhZGl1cy0+c2V0RGVsYXkoc3RkOjptYXgob3B0aW9ucy5hZGp1c3Rlck1pbkRl bGF5LCBvcHRpb25zLmFkanVzdGVyTWF4RGVsYXkpKTsKLSAgICAgZHJhZGl1c09mZnNldC0+c2V0 RGVsYXkoc3RkOjptYXgob3B0aW9ucy5hZGp1c3Rlck1pbkRlbGF5LCBvcHRpb25zLmFkanVzdGVy TWF4RGVsYXkpKTsKLWRpZmYgLS1naXQgYS9ydGd1aS9wbGFjZXNicm93c2VyLmNjIGIvcnRndWkv cGxhY2VzYnJvd3Nlci5jYwotaW5kZXggMWY3YTQ3ZjE1Li5kODM2ODA0ODMgMTAwNjQ0Ci0tLS0g YS9ydGd1aS9wbGFjZXNicm93c2VyLmNjCi0rKysgYi9ydGd1aS9wbGFjZXNicm93c2VyLmNjCi1A QCAtMTA2LDYgKzEwNiw3IEBAIHZvaWQgUGxhY2VzQnJvd3Nlcjo6cmVmcmVzaFBsYWNlc0xpc3Qg KCkKLSB7Ci0gICAgIHBsYWNlc01vZGVsLT5jbGVhciAoKTsKLSAKLSsgICAgY29uc3QgYXV0byYg b3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICAvLyBhcHBlbmQgZmF2b3JpdGVz Ci0gICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3B0aW9ucy5mYXZvcml0ZURpcnMuc2l6ZSgp OyBpKyspIHsKLSAgICAgICAgIEdsaWI6OlJlZlB0cjxHaW86OkZpbGU+IGZhdiA9IEdpbzo6Rmls ZTo6Y3JlYXRlX2Zvcl9wYXRoIChvcHRpb25zLmZhdm9yaXRlRGlyc1tpXSk7Ci1AQCAtMzE0LDYg KzMxNSw3IEBAIHZvaWQgUGxhY2VzQnJvd3Nlcjo6YWRkUHJlc3NlZCAoKQotICAgICAgICAgcmV0 dXJuOwotICAgICB9Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRp b25zKCk7Ci0gICAgIC8vIGNoZWNrIGlmIHRoZSBkaXJuYW1lIGlzIGFscmVhZHkgaW4gdGhlIGxp c3QuIElmIHllcywgcmV0dXJuLgotICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wdGlvbnMu ZmF2b3JpdGVEaXJzLnNpemUoKTsgaSsrKQotICAgICAgICAgaWYgKG9wdGlvbnMuZmF2b3JpdGVE aXJzW2ldID09IGxhc3RTZWxlY3RlZERpcikgewotQEAgLTM0MCw2ICszNDIsNyBAQCB2b2lkIFBs YWNlc0Jyb3dzZXI6OmRlbFByZXNzZWQgKCkKLSAgICAgR2xpYjo6UmVmUHRyPEd0azo6VHJlZVNl bGVjdGlvbj4gc2VsZWN0aW9uID0gdHJlZVZpZXctPmdldF9zZWxlY3Rpb24oKTsKLSAgICAgR3Rr OjpUcmVlTW9kZWw6Oml0ZXJhdG9yIGl0ZXIgPSBzZWxlY3Rpb24tPmdldF9zZWxlY3RlZCgpOwot IAotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBp ZiAoaXRlciAmJiBpdGVyLT5nZXRfdmFsdWUgKHBsYWNlc0NvbHVtbnMudHlwZSkgPT0gNSkgewot ICAgICAgICAgc3RkOjp2ZWN0b3I8R2xpYjo6dXN0cmluZz46Oml0ZXJhdG9yIGkgPSBzdGQ6OmZp bmQgKG9wdGlvbnMuZmF2b3JpdGVEaXJzLmJlZ2luKCksIG9wdGlvbnMuZmF2b3JpdGVEaXJzLmVu ZCgpLCBpdGVyLT5nZXRfdmFsdWUgKHBsYWNlc0NvbHVtbnMucm9vdCkpOwotIAotZGlmZiAtLWdp dCBhL3J0Z3VpL3ByZWZlcmVuY2VzLmNjIGIvcnRndWkvcHJlZmVyZW5jZXMuY2MKLWluZGV4IDNj YzAwM2JiMC4uMjhlNjdkYTVhIDEwMDY0NAotLS0tIGEvcnRndWkvcHJlZmVyZW5jZXMuY2MKLSsr KyBiL3J0Z3VpL3ByZWZlcmVuY2VzLmNjCi1AQCAtNjAsNyArNjAsNiBAQCB2b2lkIHBsYWNlU3Bp bkJveChHdGs6OkNvbnRhaW5lciogd2hlcmUsIEd0azo6U3BpbkJ1dHRvbiogJnNwaW4sIGNvbnN0 IHN0ZDo6c3RyaQotIH0KLSB9Ci0gCi0tZXh0ZXJuIEdsaWI6OnVzdHJpbmcgYXJndjA7Ci0gR2xp Yjo6UmVmUHRyPEd0azo6Q3NzUHJvdmlkZXI+IHRoZW1lY3NzOwotIEdsaWI6OlJlZlB0cjxHdGs6 OkNzc1Byb3ZpZGVyPiBmb250Y3NzOwotIAotQEAgLTc2LDggKzc1LDggQEAgUHJlZmVyZW5jZXM6 OlByZWZlcmVuY2VzKFJUV2luZG93ICpydHdpbmRvdykKLSAgICAgLCB0b29sTG9jYXRpb25QcmVm ZXJlbmNlKG51bGxwdHIpCi0gICAgICwgc3dGYXZvcml0ZXMobnVsbHB0cikKLSB7Ci0tCi0tICAg IG1vcHRpb25zLmNvcHlGcm9tKCZvcHRpb25zKTsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9 IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotKyAgICBtb3B0aW9ucy5jb3B5RnJvbSgmQXBwOjpnZXQo KS5tdXRfb3B0aW9ucygpKTsKLSAKLSAgICAgc2V0X3NpemVfcmVxdWVzdCg2NTAsIC0xKTsKLSAg ICAgc2V0X2RlZmF1bHRfc2l6ZShvcHRpb25zLnByZWZlcmVuY2VzV2lkdGgsIG9wdGlvbnMucHJl ZmVyZW5jZXNIZWlnaHQpOwotQEAgLTE0NSw4ICsxNDQsOCBAQCBQcmVmZXJlbmNlczo6UHJlZmVy ZW5jZXMoUlRXaW5kb3cgKnJ0d2luZG93KQotIAotIFByZWZlcmVuY2VzOjp+UHJlZmVyZW5jZXMo KQotIHsKLS0KLSAgICAgUHJvZmlsZVN0b3JlOjpnZXRJbnN0YW5jZSgpLT5yZW1vdmVMaXN0ZW5l cih0aGlzKTsKLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsK LSAgICAgZ2V0X3NpemUob3B0aW9ucy5wcmVmZXJlbmNlc1dpZHRoLCBvcHRpb25zLnByZWZlcmVu Y2VzSGVpZ2h0KTsKLSB9Ci0gCi1AQCAtMTIyOCwxMSArMTIyNywxMSBAQCBHdGs6OldpZGdldCog UHJlZmVyZW5jZXM6OmdldEdlbmVyYWxQYW5lbCgpCi0gICAgIHNldEV4cGFuZEFsaWduUHJvcGVy dGllcyhsYW5ndWFnZXMsIGZhbHNlLCBmYWxzZSwgR3RrOjpBTElHTl9TVEFSVCwgR3RrOjpBTElH Tl9CQVNFTElORSk7Ci0gCi0gICAgIHN0ZDo6dmVjdG9yPEdsaWI6OnVzdHJpbmc+IGxhbmdzOwot LSAgICBwYXJzZURpcihhcmd2MCArICIvbGFuZ3VhZ2VzIiwgbGFuZ3MsICIiKTsKLSsgICAgcGFy c2VEaXIoQXBwOjpnZXQoKS5hcmd2MCgpICsgIi9sYW5ndWFnZXMiLCBsYW5ncywgIiIpOwotIAot ICAgICBmb3IgKGNvbnN0IGF1dG8gJmxhbmcgOiBsYW5ncykgewotICAgICAgICAgaWYgKCJkZWZh dWx0IiAhPSBsYW5nICYmICJSRUFETUUiICE9IGxhbmcgJiYgIkxJQ0VOU0UiICE9IGxhbmcpIHsK LS0gICAgICAgICAgICBhdXRvIGxhbmdfbWV0YWRhdGEgPSBsYW5nTWdyLmdldE1ldGFkYXRhKEds aWI6OmJ1aWxkX2ZpbGVuYW1lKGFyZ3YwICsgIi9sYW5ndWFnZXMiLCBsYW5nKSk7Ci0rICAgICAg ICAgICAgYXV0byBsYW5nX21ldGFkYXRhID0gbGFuZ01nci5nZXRNZXRhZGF0YShHbGliOjpidWls ZF9maWxlbmFtZShBcHA6OmdldCgpLmFyZ3YwKCkgKyAiL2xhbmd1YWdlcyIsIGxhbmcpKTsKLSAg ICAgICAgICAgICBjb25zdCBhdXRvICZkaXNwbGF5X25hbWUgPQotICAgICAgICAgICAgICAgICBs YW5nX21ldGFkYXRhICE9IG51bGxwdHIKLSAgICAgICAgICAgICAgICAgICAgID8gR2xpYjo6dXN0 cmluZyhsYW5nX21ldGFkYXRhLT5nZXRMYW5ndWFnZU5hbWUobGFuZykpCi1AQCAtMTI2NSw3ICsx MjY0LDcgQEAgR3RrOjpXaWRnZXQqIFByZWZlcmVuY2VzOjpnZXRHZW5lcmFsUGFuZWwoKQotIAot ICAgICB0aGVtZUNCVCA9IEd0azo6bWFuYWdlKG5ldyBHdGs6OkNvbWJvQm94VGV4dCgpKTsKLSAg ICAgdGhlbWVDQlQtPnNldF9hY3RpdmUoMCk7Ci0tICAgIHBhcnNlVGhlbWVEaXIoR2xpYjo6YnVp bGRfZmlsZW5hbWUoYXJndjAsICJ0aGVtZXMiKSk7Ci0rICAgIHBhcnNlVGhlbWVEaXIoR2xpYjo6 YnVpbGRfZmlsZW5hbWUoQXBwOjpnZXQoKS5hcmd2MCgpLCAidGhlbWVzIikpOwotICAgICBmb3Ig KHNpemVfdCBpID0gMDsgaSA8IHRoZW1lTmFtZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgIHRo ZW1lQ0JULT5hcHBlbmQodGhlbWVOYW1lcy5hdChpKSk7Ci0gICAgIH0KLUBAIC0xMjczLDYgKzEy NzIsNyBAQCBHdGs6OldpZGdldCogUHJlZmVyZW5jZXM6OmdldEdlbmVyYWxQYW5lbCgpCi0gICAg IEd0azo6TGFiZWwqIG1haW5Gb250TGJsID0gR3RrOjptYW5hZ2UobmV3IEd0azo6TGFiZWwoTSgi UFJFRkVSRU5DRVNfQVBQRUFSQU5DRV9NQUlORk9OVCIpKSk7Ci0gICAgIHNldEV4cGFuZEFsaWdu UHJvcGVydGllcyhtYWluRm9udExibCwgZmFsc2UsIGZhbHNlLCBHdGs6OkFMSUdOX1NUQVJULCBH dGs6OkFMSUdOX0NFTlRFUik7Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6Omdl dCgpLm9wdGlvbnMoKTsKLSAgICAgbWFpbkZvbnRGQiA9IEd0azo6bWFuYWdlKG5ldyBHdGs6OkZv bnRCdXR0b24oKSk7Ci0gICAgIG1haW5Gb250RkItPnNldF91c2Vfc2l6ZSh0cnVlKTsKLSAgICAg aWYgKG9wdGlvbnMuZm9udEZhbWlseSA9PSAiZGVmYXVsdCIpIHsKLUBAIC0yMTcyLDYgKzIxNzIs NyBAQCB2b2lkIFByZWZlcmVuY2VzOjpmaWxsUHJlZmVyZW5jZXMoKQotICAgICBuYXZHdWlkZUNv bG9yQ0ItPnNldF9yZ2JhIChOYXZHdWlkZUNvbCk7Ci0gICAgIG5hdkd1aWRlQ29sb3JDQi0+c2V0 X2FscGhhICggKHVuc2lnbmVkIHNob3J0KSAobW9wdGlvbnMubmF2R3VpZGVCcnVzaFszXSAqIDY1 NTM1LjApKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotICAgICBpZiAob3B0aW9ucy5mb250RmFtaWx5ID09ICJkZWZhdWx0IikgewotICAgICAg ICAgbWFpbkZvbnRGQi0+c2V0X2ZvbnRfbmFtZSAoR2xpYjo6dXN0cmluZzo6Y29tcG9zZSAoIiUx LCAlMiIsIGluaXRpYWxGb250RmFtaWx5LCBpbml0aWFsRm9udFNpemUpKTsKLSAgICAgfSBlbHNl IHsKLUBAIC0yMzg5LDcgKzIzOTAsNyBAQCB2b2lkIFByZWZlcmVuY2VzOjpsYW5nQXV0b0RldGVj dFRvZ2dsZWQoKQotIAotIHZvaWQgUHJlZmVyZW5jZXM6Om9rUHJlc3NlZCgpCi0gewotLQotKyAg ICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBzdG9yZVBy ZWZlcmVuY2VzKCk7Ci0gICAgIHdvcmtmbG93VXBkYXRlKCk7Ci0gICAgIG9wdGlvbnMuY29weUZy b20oJm1vcHRpb25zKTsKLUBAIC0yNDA4LDYgKzI0MDksNyBAQCB2b2lkIFByZWZlcmVuY2VzOjpv a1ByZXNzZWQoKQotIAotIHZvaWQgUHJlZmVyZW5jZXM6OmNhbmNlbFByZXNzZWQoKQotIHsKLSsg ICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgLy8gc2V0 IHRoZSBpbml0aWFsIHRoZW1lIGJhY2sKLSAgICAgaWYgKHRoZW1lTmFtZXMuYXQgKHRoZW1lQ0JU LT5nZXRfYWN0aXZlX3Jvd19udW1iZXIgKCkpICE9IG9wdGlvbnMudGhlbWUpIHsKLSAgICAgICAg IHN3aXRjaFRoZW1lVG8ob3B0aW9ucy50aGVtZSk7Ci1AQCAtMjUwOCw2ICsyNTEwLDcgQEAgdm9p ZCBQcmVmZXJlbmNlczo6YnVuZGxlZFByb2ZpbGVzQ2hhbmdlZCgpCi0gICAgIHJwY29ubi5ibG9j ayh0cnVlKTsKLSAgICAgaXBjb25uLmJsb2NrKHRydWUpOwotIAotKyAgICBhdXRvJiBvcHRpb25z ID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICAvLyBwYXJzZVByb2ZpbGVzIGRvZXMg dXNlIG9wdGlvbnMudXNlQnVuZGxlZFByb2ZpbGVzLCBzbyB3ZSB0ZW1wb3JhcmlseSBjaGFuZ2Ug aXRzIHZhbHVlCi0gICAgIGJvb2wgY3VyclZhbHVlID0gb3B0aW9ucy51c2VCdW5kbGVkUHJvZmls ZXM7Ci0gICAgIG9wdGlvbnMudXNlQnVuZGxlZFByb2ZpbGVzID0gdXNlQnVuZGxlZFByb2ZpbGVz LT5nZXRfYWN0aXZlKCk7Ci1AQCAtMjU4MSw3ICsyNTg0LDcgQEAgdm9pZCBQcmVmZXJlbmNlczo6 cmVzdG9yZVZhbHVlKCkKLSB2b2lkIFByZWZlcmVuY2VzOjpzd2l0Y2hUaGVtZVRvKEdsaWI6OnVz dHJpbmcgbmV3VGhlbWUpCi0gewotIAotLSAgICBHbGliOjp1c3RyaW5nIGZpbGVuYW1lKEdsaWI6 OmJ1aWxkX2ZpbGVuYW1lKGFyZ3YwLCAidGhlbWVzIiwgbmV3VGhlbWUgKyAiLmNzcyIpKTsKLSsg ICAgR2xpYjo6dXN0cmluZyBmaWxlbmFtZShHbGliOjpidWlsZF9maWxlbmFtZShBcHA6OmdldCgp LmFyZ3YwKCksICJ0aGVtZXMiLCBuZXdUaGVtZSArICIuY3NzIikpOwotIAotICAgICBpZiAoIXRo ZW1lY3NzKSB7Ci0gICAgICAgICB0aGVtZWNzcyA9IEd0azo6Q3NzUHJvdmlkZXI6OmNyZWF0ZSgp OwotQEAgLTI2MzUsNiArMjYzOCw3IEBAIHZvaWQgUHJlZmVyZW5jZXM6OnN3aXRjaEZvbnRUbyhj b25zdCBHbGliOjp1c3RyaW5nICZuZXdGb250RmFtaWx5LCBjb25zdCBpbnQgbmV3Ci0gCi0gdm9p ZCBQcmVmZXJlbmNlczo6d29ya2Zsb3dVcGRhdGUoKQotIHsKLSsgICAgY29uc3QgYXV0byYgb3B0 aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotIAotICAgICBpZiAobW9wdGlvbnMudGFiYmVk VUkgIT0gb3B0aW9ucy50YWJiZWRVSSkgewotICAgICAgICAgcGFyZW50LT5zZXRFZGl0b3JNb2Rl KG1vcHRpb25zLnRhYmJlZFVJKTsKLWRpZmYgLS1naXQgYS9ydGd1aS9wcmVwcm9jZXNzLmNjIGIv cnRndWkvcHJlcHJvY2Vzcy5jYwotaW5kZXggNTA3Y2U2NjgxLi40NDRhODY4YzkgMTAwNjQ0Ci0t LS0gYS9ydGd1aS9wcmVwcm9jZXNzLmNjCi0rKysgYi9ydGd1aS9wcmVwcm9jZXNzLmNjCi1AQCAt MzAsNyArMzAsNyBAQCB1c2luZyBuYW1lc3BhY2UgcnRlbmdpbmU6OnByb2NwYXJhbXM7Ci0gCi0g Y29uc3QgR2xpYjo6dXN0cmluZyBQcmVQcm9jZXNzOjpUT09MX05BTUUgPSAicHJlcHJvY2VzcyI7 Ci0gCi0tUHJlUHJvY2Vzczo6UHJlUHJvY2VzcyAoKSA6IEZvbGRhYmxlVG9vbFBhbmVsKHRoaXMs IFRPT0xfTkFNRSwgTSgiVFBfUFJFUFJPQ0VTU19MQUJFTCIpLCBvcHRpb25zLnByZXZkZW1vICE9 IFBEX1NpZGVjYXIpCi0rUHJlUHJvY2Vzczo6UHJlUHJvY2VzcyAoKSA6IEZvbGRhYmxlVG9vbFBh bmVsKHRoaXMsIFRPT0xfTkFNRSwgTSgiVFBfUFJFUFJPQ0VTU19MQUJFTCIpLCBBcHA6OmdldCgp Lm9wdGlvbnMoKS5wcmV2ZGVtbyAhPSBQRF9TaWRlY2FyKQotIHsKLSAKLSAgICAgR3RrOjpCb3gq IGhvdGRlYWRQaXhlbCA9IEd0azo6bWFuYWdlKCBuZXcgR3RrOjpCb3ggKCkgKTsKLUBAIC00OCw2 ICs0OCw3IEBAIFByZVByb2Nlc3M6OlByZVByb2Nlc3MgKCkgOiBGb2xkYWJsZVRvb2xQYW5lbCh0 aGlzLCBUT09MX05BTUUsIE0oIlRQX1BSRVBST0NFU1NfCi0gICAgIGhkVGhyZXNob2xkLT5zZXRf dG9vbHRpcF9tYXJrdXAgKE0oIlRQX1JBV19IRF9UT09MVElQIikpOwotICAgICBoZFRocmVzaG9s ZC0+c2V0QWRqdXN0ZXJMaXN0ZW5lciAodGhpcyk7Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlv bnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaGRUaHJlc2hvbGQtPnNldERlbGF5KHN0 ZDo6bWF4KG9wdGlvbnMuYWRqdXN0ZXJNaW5EZWxheSwgb3B0aW9ucy5hZGp1c3Rlck1heERlbGF5 KSk7Ci0gCi0gICAgIGhkVGhyZXNob2xkLT5zaG93KCk7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvcHJl dmlld21vZGVwYW5lbC5jYyBiL3J0Z3VpL3ByZXZpZXdtb2RlcGFuZWwuY2MKLWluZGV4IDI1MTY3 YWUzYi4uNjcyOWRkM2ZmIDEwMDY0NAotLS0tIGEvcnRndWkvcHJldmlld21vZGVwYW5lbC5jYwot KysrIGIvcnRndWkvcHJldmlld21vZGVwYW5lbC5jYwotQEAgLTMzLDYgKzMzLDcgQEAgUHJldmll d01vZGVQYW5lbDo6UHJldmlld01vZGVQYW5lbCAoSW1hZ2VBcmVhKiBpYSkgOgotICAgICBuQkMy KCJzcXVhcmUtdG9nZ2xlLXdoaXRlLW9uLW5hcnJvdyIpLCBuZ0JDMigic3F1YXJlLXRvZ2dsZS13 aGl0ZS1vZmYtbmFycm93IiksCi0gICAgIG5CQzMoInNxdWFyZS10b2dnbGUtZ3JheS1vbi1uYXJy b3ciKSwgbmdCQzMoInNxdWFyZS10b2dnbGUtZ3JheS1vZmYtbmFycm93IikKLSB7Ci0rICAgIGNv bnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgYmFja0NvbG9y MCA9IEd0azo6bWFuYWdlIChuZXcgR3RrOjpUb2dnbGVCdXR0b24gKCkpOwotICAgICBiYWNrQ29s b3IwLT5nZXRfc3R5bGVfY29udGV4dCgpLT5hZGRfY2xhc3MoIm5hcnJvd2J1dHRvbiIpOwotICAg ICBiYWNrQ29sb3IwLT5zZXRfcmVsaWVmKEd0azo6UkVMSUVGX05PTkUpOwotZGlmZiAtLWdpdCBh L3J0Z3VpL3ByZXZpZXd3aW5kb3cuY2MgYi9ydGd1aS9wcmV2aWV3d2luZG93LmNjCi1pbmRleCA5 MmJiNzFhNzguLjAxYWM2MzhkNSAxMDA2NDQKLS0tLSBhL3J0Z3VpL3ByZXZpZXd3aW5kb3cuY2MK LSsrKyBiL3J0Z3VpL3ByZXZpZXd3aW5kb3cuY2MKLUBAIC05MSw2ICs5MSw3IEBAIHZvaWQgUHJl dmlld1dpbmRvdzo6dXBkYXRlUHJldmlld0ltYWdlICgpCi0gCi0gICAgICAgICAgICAgaWYgKHBy ZXZpZXdIYW5kbGVyLT5nZXRDcm9wUGFyYW1zKCkuZW5hYmxlZCkgewotICAgICAgICAgICAgICAg ICBydGVuZ2luZTo6cHJvY3BhcmFtczo6Q3JvcFBhcmFtcyBjcGFyYW1zID0gcHJldmlld0hhbmRs ZXItPmdldENyb3BQYXJhbXMoKTsKLSsgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3B0aW9u cyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlv bnMuY3JvcEd1aWRlcykgewotICAgICAgICAgICAgICAgICBjYXNlIE9wdGlvbnM6OkNST1BfR1VJ REVfTk9ORToKLSAgICAgICAgICAgICAgICAgICAgIGNwYXJhbXMuZ3VpZGUgPSBydGVuZ2luZTo6 cHJvY3BhcmFtczo6Q3JvcFBhcmFtczo6R3VpZGU6Ok5PTkU7Ci1AQCAtMTY5LDYgKzE3MCw3IEBA IGJvb2wgUHJldmlld1dpbmRvdzo6b25fZHJhdyhjb25zdCA6OkNhaXJvOjpSZWZQdHI8IENhaXJv OjpDb250ZXh0PiAmY3IpCi0gICAgICAgICAgICAgY3ItPnJlY3RhbmdsZSAocmVjdFggKyAxLiAq IHMsIHJlY3RZICsgMS4gKiBzLCByZWN0VyAtIDIuICogcywgcmVjdEggLSAyLiAqIHMpOwotICAg ICAgICAgICAgIGNyLT5zdHJva2UgKCk7Ci0gCi0rICAgICAgICAgICAgY29uc3QgYXV0byYgb3B0 aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICAgICAgICAgIC8vIGRyYXcgYSAiZnJh bWUiIGxpbmUuIENvbG9yIG9mIGZyYW1lIGxpbmUgY2FuIGJlIHNldCBpbiBwcmVmZXJlbmNlcwot ICAgICAgICAgICAgIGNyLT5zZXRfc291cmNlX3JnYmEob3B0aW9ucy5uYXZHdWlkZUJydXNoWzBd LCBvcHRpb25zLm5hdkd1aWRlQnJ1c2hbMV0sIG9wdGlvbnMubmF2R3VpZGVCcnVzaFsyXSwgb3B0 aW9ucy5uYXZHdWlkZUJydXNoWzNdKTsgLy8oIDEuMCwgMS4wLCAxLjAsIDEuMCk7Ci0gICAgICAg ICAgICAgY3ItPnJlY3RhbmdsZSAocmVjdFgsIHJlY3RZLCByZWN0VywgcmVjdEgpOwotZGlmZiAt LWdpdCBhL3J0Z3VpL3Byb2ZpbGVwYW5lbC5jYyBiL3J0Z3VpL3Byb2ZpbGVwYW5lbC5jYwotaW5k ZXggMWJiNTY3Y2IzLi4yMzAzYTI2NTMgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9wcm9maWxlcGFuZWwu Y2MKLSsrKyBiL3J0Z3VpL3Byb2ZpbGVwYW5lbC5jYwotQEAgLTQ3LDEzICs0NywxMyBAQCB2b2lk IFByb2ZpbGVQYW5lbDo6Y2xlYW51cCAoKQotIAotIFByb2ZpbGVQYW5lbDo6UHJvZmlsZVBhbmVs ICgpIDogc3RvcmVkUFByb2ZpbGUobnVsbHB0ciksCi0gICAgIG1vZGVPbigicHJvZmlsZS1maWxs ZWQiKSwgbW9kZU9mZigicHJvZmlsZS1wYXJ0aWFsIiksCi0tICAgIHByb2ZpbGVGaWxsSW1hZ2Uo R3RrOjptYW5hZ2UobmV3IFJUSW1hZ2Uob3B0aW9ucy5maWxsZWRQcm9maWxlID8gbW9kZU9uIDog bW9kZU9mZiwgR3RrOjpJQ09OX1NJWkVfTEFSR0VfVE9PTEJBUikpKSwKLSsgICAgcHJvZmlsZUZp bGxJbWFnZShHdGs6Om1hbmFnZShuZXcgUlRJbWFnZShBcHA6OmdldCgpLm9wdGlvbnMoKS5maWxs ZWRQcm9maWxlID8gbW9kZU9uIDogbW9kZU9mZiwgR3RrOjpJQ09OX1NJWkVfTEFSR0VfVE9PTEJB UikpKSwKLSAgICAgbGFzdFNhdmVkUFNFKG51bGxwdHIpLCBjdXN0b21QU0UobnVsbHB0cikKLSB7 Ci0gICAgIHRwYyA9IG51bGxwdHI7Ci0gCi0gICAgIGZpbGxNb2RlID0gR3RrOjptYW5hZ2UgKG5l dyBHdGs6OlRvZ2dsZUJ1dHRvbigpKTsKLS0gICAgZmlsbE1vZGUtPnNldF9hY3RpdmUob3B0aW9u cy5maWxsZWRQcm9maWxlKTsKLSsgICAgZmlsbE1vZGUtPnNldF9hY3RpdmUoQXBwOjpnZXQoKS5v cHRpb25zKCkuZmlsbGVkUHJvZmlsZSk7Ci0gICAgIGZpbGxNb2RlLT5hZGQoKnByb2ZpbGVGaWxs SW1hZ2UpOwotICAgICBmaWxsTW9kZS0+c2lnbmFsX3RvZ2dsZWQoKS5jb25uZWN0ICggc2lnYzo6 bWVtX2Z1bigqdGhpcywgJlByb2ZpbGVQYW5lbDo6cHJvZmlsZUZpbGxNb2RlVG9nZ2xlZCkgKTsK LSAgICAgZmlsbE1vZGUtPnNldF90b29sdGlwX3RleHQoTSgiUFJPRklMRVBBTkVMX01PREVfVE9P TFRJUCIpKTsKLUBAIC0zMTEsNiArMzExLDcgQEAgdm9pZCBQcm9maWxlUGFuZWw6OnNhdmVfY2xp Y2tlZCAoR2RrRXZlbnRCdXR0b24qIGV2ZW50KQotICAgICAgICAgfQotICAgICB9Ci0gCi0rICAg IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIEd0azo6Rmls ZUNob29zZXJEaWFsb2cgZGlhbG9nKGdldFRvcGxldmVsV2luZG93KHRoaXMpLCBNKCJQUk9GSUxF UEFORUxfU0FWRURMR0xBQkVMIiksIEd0azo6RklMRV9DSE9PU0VSX0FDVElPTl9TQVZFKTsKLSAg ICAgYmluZEN1cnJlbnRGb2xkZXIoZGlhbG9nLCBvcHRpb25zLmxvYWRTYXZlUHJvZmlsZVBhdGgp OwotICAgICBkaWFsb2cuc2V0X2N1cnJlbnRfbmFtZShsYXN0RmlsZW5hbWUpOwotQEAgLTMzMiw3 ICszMzMsNyBAQCB2b2lkIFByb2ZpbGVQYW5lbDo6c2F2ZV9jbGlja2VkIChHZGtFdmVudEJ1dHRv biogZXZlbnQpCi0gICAgIC8vQWRkIGZpbHRlcnMsIHNvIHRoYXQgb25seSBjZXJ0YWluIGZpbGUg dHlwZXMgY2FuIGJlIHNlbGVjdGVkOgotICAgICBhdXRvIGZpbHRlcl9wcCA9IEd0azo6RmlsZUZp bHRlcjo6Y3JlYXRlKCk7Ci0gICAgIGZpbHRlcl9wcC0+c2V0X25hbWUoTSgiRklMRUNIT09TRVJf RklMVEVSX1BQIikpOwotLSAgICBmaWx0ZXJfcHAtPmFkZF9wYXR0ZXJuKCIqIiArIHBhcmFtRmls ZUV4dGVuc2lvbik7Ci0rICAgIGZpbHRlcl9wcC0+YWRkX3BhdHRlcm4oIioiICsgQXBwOjpQQVJB TV9GSUxFX0VYVEVOU0lPTik7Ci0gICAgIGRpYWxvZy5hZGRfZmlsdGVyKGZpbHRlcl9wcCk7Ci0g Ci0gICAgIGF1dG8gZmlsdGVyX2FueSA9IEd0azo6RmlsZUZpbHRlcjo6Y3JlYXRlKCk7Ci1AQCAt MzU0LDggKzM1NSw4IEBAIHZvaWQgUHJvZmlsZVBhbmVsOjpzYXZlX2NsaWNrZWQgKEdka0V2ZW50 QnV0dG9uKiBldmVudCkKLSAKLSAgICAgICAgICAgICBhdXRvIGZuYW1lID0gZGlhbG9nLmdldF9m aWxlbmFtZSgpOwotIAotLSAgICAgICAgICAgIGlmICgoIi4iICsgZ2V0RXh0ZW5zaW9uKGZuYW1l KSkgIT0gcGFyYW1GaWxlRXh0ZW5zaW9uKSB7Ci0tICAgICAgICAgICAgICAgIGZuYW1lICs9IHBh cmFtRmlsZUV4dGVuc2lvbjsKLSsgICAgICAgICAgICBpZiAoKCIuIiArIGdldEV4dGVuc2lvbihm bmFtZSkpICE9IEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04pIHsKLSsgICAgICAgICAgICAgICAg Zm5hbWUgKz0gQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTjsKLSAgICAgICAgICAgICB9Ci0gCi0g ICAgICAgICAgICAgaWYgKCFjb25maXJtT3ZlcndyaXRlKGRpYWxvZywgZm5hbWUpKSB7Ci1AQCAt NDY3LDYgKzQ2OCw3IEBAIHZvaWQgUHJvZmlsZVBhbmVsOjpsb2FkX2NsaWNrZWQgKEdka0V2ZW50 QnV0dG9uKiBldmVudCkKLSAgICAgfQotIAotICAgICBHdGs6OkZpbGVDaG9vc2VyRGlhbG9nIGRp YWxvZyAoZ2V0VG9wbGV2ZWxXaW5kb3cgKHRoaXMpLCBNKCJQUk9GSUxFUEFORUxfTE9BRERMR0xB QkVMIiksIEd0azo6RklMRV9DSE9PU0VSX0FDVElPTl9PUEVOKTsKLSsgICAgYXV0byYgb3B0aW9u cyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSAgICAgYmluZEN1cnJlbnRGb2xkZXIgKGRp YWxvZywgb3B0aW9ucy5sb2FkU2F2ZVByb2ZpbGVQYXRoKTsKLSAKLSAgICAgLy9BZGQgdGhlIHVz ZXIncyBkZWZhdWx0IChvciBnbG9iYWwgaWYgbXVsdGl1c2VyPWZhbHNlKSBwcm9maWxlIHBhdGgg dG8gdGhlIFNob3J0Y3V0IGxpc3QKLUBAIC00ODYsNyArNDg4LDcgQEAgdm9pZCBQcm9maWxlUGFu ZWw6OmxvYWRfY2xpY2tlZCAoR2RrRXZlbnRCdXR0b24qIGV2ZW50KQotICAgICAvL0FkZCBmaWx0 ZXJzLCBzbyB0aGF0IG9ubHkgY2VydGFpbiBmaWxlIHR5cGVzIGNhbiBiZSBzZWxlY3RlZDoKLSAg ICAgR2xpYjo6UmVmUHRyPEd0azo6RmlsZUZpbHRlcj4gZmlsdGVyX3BwID0gR3RrOjpGaWxlRmls dGVyOjpjcmVhdGUoKTsKLSAgICAgZmlsdGVyX3BwLT5zZXRfbmFtZShNKCJGSUxFQ0hPT1NFUl9G SUxURVJfUFAiKSk7Ci0tICAgIGZpbHRlcl9wcC0+YWRkX3BhdHRlcm4oIioiICsgcGFyYW1GaWxl RXh0ZW5zaW9uKTsKLSsgICAgZmlsdGVyX3BwLT5hZGRfcGF0dGVybigiKiIgKyBBcHA6OlBBUkFN X0ZJTEVfRVhURU5TSU9OKTsKLSAgICAgZGlhbG9nLmFkZF9maWx0ZXIoZmlsdGVyX3BwKTsKLSAK LSAgICAgR2xpYjo6UmVmUHRyPEd0azo6RmlsZUZpbHRlcj4gZmlsdGVyX2FueSA9IEd0azo6Rmls ZUZpbHRlcjo6Y3JlYXRlKCk7Ci1AQCAtOTAzLDcgKzkwNSw3IEBAIHZvaWQgUHJvZmlsZVBhbmVs Ojppbml0UHJvZmlsZSAoY29uc3QgR2xpYjo6dXN0cmluZyYgcHJvZmlsZUZ1bGxQYXRoLCBQcm9j UGFyYW1zCi0gCi0gdm9pZCBQcm9maWxlUGFuZWw6OnNldEluaXRpYWxGaWxlTmFtZSAoY29uc3Qg R2xpYjo6dXN0cmluZyYgZmlsZW5hbWUpCi0gewotLSAgICBsYXN0RmlsZW5hbWUgPSBHbGliOjpw YXRoX2dldF9iYXNlbmFtZShmaWxlbmFtZSkgKyBwYXJhbUZpbGVFeHRlbnNpb247Ci0rICAgIGxh c3RGaWxlbmFtZSA9IEdsaWI6OnBhdGhfZ2V0X2Jhc2VuYW1lKGZpbGVuYW1lKSArIEFwcDo6UEFS QU1fRklMRV9FWFRFTlNJT047Ci0gICAgIGltYWdlUGF0aCA9IEdsaWI6OnBhdGhfZ2V0X2Rpcm5h bWUoZmlsZW5hbWUpOwotIH0KLSAKLUBAIC05MjAsNiArOTIyLDYgQEAgdm9pZCBQcm9maWxlUGFu ZWw6OnByb2ZpbGVGaWxsTW9kZVRvZ2dsZWQoKQotIAotIHZvaWQgUHJvZmlsZVBhbmVsOjp3cml0 ZU9wdGlvbnMoKQotIHsKLS0gICAgb3B0aW9ucy5maWxsZWRQcm9maWxlID0gZmlsbE1vZGUtPmdl dF9hY3RpdmUoKTsKLSsgICAgQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmZpbGxlZFByb2ZpbGUg PSBmaWxsTW9kZS0+Z2V0X2FjdGl2ZSgpOwotIH0KLSAKLWRpZmYgLS1naXQgYS9ydGd1aS9wcm9m aWxlc3RvcmVjb21ib2JveC5jYyBiL3J0Z3VpL3Byb2ZpbGVzdG9yZWNvbWJvYm94LmNjCi1pbmRl eCAwZWFmMDgyZDIuLmM3Zjk5ZDg1MyAxMDA2NDQKLS0tLSBhL3J0Z3VpL3Byb2ZpbGVzdG9yZWNv bWJvYm94LmNjCi0rKysgYi9ydGd1aS9wcm9maWxlc3RvcmVjb21ib2JveC5jYwotQEAgLTY5LDcg KzY5LDcgQEAgdm9pZCBQcm9maWxlU3RvcmVDb21ib0JveDo6cmVmcmVzaFByb2ZpbGVMaXN0XyAo R3RrOjpUcmVlTW9kZWw6OlJvdyAqcGFyZW50Um93LAotICAgICAgICAgICAgIGlmIChlbnRyeS0+ dHlwZSA9PSBQU0VUX0ZPTERFUikgewotICAgICAgICAgICAgICAgICBHbGliOjp1c3RyaW5nIGZv bGRlclBhdGggKCBQcm9maWxlU3RvcmU6OmdldEluc3RhbmNlKCktPmdldFBhdGhGcm9tSWQgKGVu dHJ5LT5mb2xkZXJJZCkgKTsKLSAKLS0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudXNlQnVu ZGxlZFByb2ZpbGVzIHx8ICgoZm9sZGVyUGF0aCAhPSAiJHtHfSIgKSAmJiAoZm9sZGVyUGF0aCAh PSAiJHtVfSIgKSkpIHsKLSsgICAgICAgICAgICAgICAgaWYgKEFwcDo6Z2V0KCkub3B0aW9ucygp LnVzZUJ1bmRsZWRQcm9maWxlcyB8fCAoKGZvbGRlclBhdGggIT0gIiR7R30iICkgJiYgKGZvbGRl clBhdGggIT0gIiR7VX0iICkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGluZyB0 aGUgbmV3IHN1Ym1lbnUKLSAgICAgICAgICAgICAgICAgICAgIEd0azo6VHJlZU1vZGVsOjpSb3cg bmV3U3ViTWVudTsKLSAKLWRpZmYgLS1naXQgYS9ydGd1aS9yYXdjYWNvcnJlY3Rpb24uY2MgYi9y dGd1aS9yYXdjYWNvcnJlY3Rpb24uY2MKLWluZGV4IDIyODhjMWIyZi4uZDJmZDdlZjNlIDEwMDY0 NAotLS0tIGEvcnRndWkvcmF3Y2Fjb3JyZWN0aW9uLmNjCi0rKysgYi9ydGd1aS9yYXdjYWNvcnJl Y3Rpb24uY2MKLUBAIC00OSw2ICs0OSw3IEBAIFJBV0NBQ29ycjo6UkFXQ0FDb3JyICgpIDogRm9s ZGFibGVUb29sUGFuZWwodGhpcywgVE9PTF9OQU1FLCBNKCJUUF9SQVdDQUNPUlJfTEFCCi0gICAg IGNhQXV0b2l0ZXJhdGlvbnMtPnNldEFkanVzdGVyTGlzdGVuZXIgKHRoaXMpOwotICAgICBjYUF1 dG9pdGVyYXRpb25zLT5zZXRfdG9vbHRpcF9tYXJrdXAoTSgiVFBfUkFXQ0FDT1JSX0FVVE9JVF9U T09MVElQIikpOwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRp b25zKCk7Ci0gICAgIGNhQXV0b2l0ZXJhdGlvbnMtPnNldERlbGF5KHN0ZDo6bWF4KG9wdGlvbnMu YWRqdXN0ZXJNaW5EZWxheSwgb3B0aW9ucy5hZGp1c3Rlck1heERlbGF5KSk7Ci0gCi0gICAgIGNh UmVkID0gR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyIChNKCJUUF9SQVdDQUNPUlJfQ0FSRUQiKSwg LTQuMCwgNC4wLCAwLjEsIDAsIGljYXJlZEwsIGljYXJlZFIpKTsKLWRpZmYgLS1naXQgYS9ydGd1 aS9yYXdleHBvc3VyZS5jYyBiL3J0Z3VpL3Jhd2V4cG9zdXJlLmNjCi1pbmRleCAyNmYyZGJhNzQu LmI5NzBmMGFmMiAxMDA2NDQKLS0tLSBhL3J0Z3VpL3Jhd2V4cG9zdXJlLmNjCi0rKysgYi9ydGd1 aS9yYXdleHBvc3VyZS5jYwotQEAgLTM1LDYgKzM1LDcgQEAgUkFXRXhwb3N1cmU6OlJBV0V4cG9z dXJlICgpIDogRm9sZGFibGVUb29sUGFuZWwodGhpcywgVE9PTF9OQU1FLCBNKCJUUF9FWFBPU19X SEkKLSAgICAgUGV4UG9zID0gR3RrOjptYW5hZ2UobmV3IEFkanVzdGVyIChNKCJUUF9SQVdFWFBP U19MSU5FQVIiKSwgMC4xLCAxNi4wLCAwLjAxLCAxKSk7Ci0gICAgIFBleFBvcy0+c2V0QWRqdXN0 ZXJMaXN0ZW5lciAodGhpcyk7Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6Omdl dCgpLm9wdGlvbnMoKTsKLSAgICAgUGV4UG9zLT5zZXREZWxheShzdGQ6Om1heChvcHRpb25zLmFk anVzdGVyTWluRGVsYXksIG9wdGlvbnMuYWRqdXN0ZXJNYXhEZWxheSkpOwotIAotICAgICBQZXhQ b3MtPnNob3coKTsKLWRpZmYgLS1naXQgYS9ydGd1aS9yZWNlbnRicm93c2VyLmNjIGIvcnRndWkv cmVjZW50YnJvd3Nlci5jYwotaW5kZXggOWQzY2MxZjEyLi45NzFiMTkwYmMgMTAwNjQ0Ci0tLS0g YS9ydGd1aS9yZWNlbnRicm93c2VyLmNjCi0rKysgYi9ydGd1aS9yZWNlbnRicm93c2VyLmNjCi1A QCAtMzIsNiArMzIsNyBAQCBSZWNlbnRCcm93c2VyOjpSZWNlbnRCcm93c2VyICgpCi0gICAgIGZy YW1lLT5zZXRfbGFiZWxfYWxpZ24oMC4wMjUsIDAuNSk7Ci0gICAgIGZyYW1lLT5hZGQgKCpyZWNl bnREaXJzKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotICAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgb3B0aW9ucy5yZWNlbnRGb2xkZXJzLnNp emUoKTsgaSsrKSB7Ci0gICAgICAgICByZWNlbnREaXJzLT5hcHBlbmQgKG9wdGlvbnMucmVjZW50 Rm9sZGVyc1tpXSk7Ci0gICAgIH0KLUBAIC01NSw3ICs1Niw3IEBAIHZvaWQgUmVjZW50QnJvd3Nl cjo6c2VsZWN0aW9uQ2hhbmdlZCAoKQotIAotIHZvaWQgUmVjZW50QnJvd3Nlcjo6ZGlyU2VsZWN0 ZWQgKGNvbnN0IEdsaWI6OnVzdHJpbmcmIGRpcm5hbWUsIGNvbnN0IEdsaWI6OnVzdHJpbmcmIG9w ZW5maWxlKQotIHsKLS0KLSsgICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlv bnMoKTsKLSAgICAgc3NpemVfdCBudW1Gb2xkZXJzID0gb3B0aW9ucy5yZWNlbnRGb2xkZXJzLnNp emUoKTsKLSAgICAgc3NpemVfdCBpID0gLTE7Ci0gCi1kaWZmIC0tZ2l0IGEvcnRndWkvcmV0aW5l eC5jYyBiL3J0Z3VpL3JldGluZXguY2MKLWluZGV4IDczYjVlODE5Yy4uMDcwMjYzMmU3IDEwMDY0 NAotLS0tIGEvcnRndWkvcmV0aW5leC5jYwotKysrIGIvcnRndWkvcmV0aW5leC5jYwotQEAgLTE2 Miw2ICsxNjIsOCBAQCBSZXRpbmV4OjpSZXRpbmV4ICgpIDogRm9sZGFibGVUb29sUGFuZWwgKHRo aXMsIFRPT0xfTkFNRSwgTSAoIlRQX1JFVElORVhfTEFCRUwiKQotICAgICBtYXNrR3JpZC0+YXR0 YWNoICgqbWFwZ3JpZCwgMCwgMCwgMSwgMSk7Ci0gICAgIG1hcGdyaWQtPnNob3coKTsKLSAKLSsg ICAgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKTsKLSsKLSAgICAgLy8g TWFwIEVxdWFsaXplcgotICAgICBjdXJ2ZUVkaXRvcm1hcCA9IG5ldyBDdXJ2ZUVkaXRvckdyb3Vw IChvcHRpb25zLmxhc3RSZXRpbmV4RGlyLCBNICgiVFBfUkVUSU5FWF9DT05URURJVF9NQVAiKSk7 Ci0gICAgIHNldEV4cGFuZEFsaWduUHJvcGVydGllcyAoY3VydmVFZGl0b3JtYXAsIHRydWUsIGZh bHNlLCBHdGs6OkFMSUdOX0ZJTEwsIEd0azo6QUxJR05fU1RBUlQpOwotZGlmZiAtLWdpdCBhL3J0 Z3VpL3JnYmN1cnZlcy5jYyBiL3J0Z3VpL3JnYmN1cnZlcy5jYwotaW5kZXggYzhiNTFiNzBiLi5j MjYzZDI3ZDYgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9yZ2JjdXJ2ZXMuY2MKLSsrKyBiL3J0Z3VpL3Jn YmN1cnZlcy5jYwotQEAgLTQ2LDYgKzQ2LDcgQEAgUkdCQ3VydmVzOjpSR0JDdXJ2ZXMgKCkgOiBG b2xkYWJsZVRvb2xQYW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQX1JHQkNVUlZFU19MQUIKLSAK LSAgICAgc3RkOjp2ZWN0b3I8R3JhZGllbnRNaWxlc3RvbmU+IG1pbGVzdG9uZXM7Ci0gCi0rICAg IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGN1cnZlRWRp dG9yRyA9IG5ldyBDdXJ2ZUVkaXRvckdyb3VwIChvcHRpb25zLmxhc3RSZ2JDdXJ2ZXNEaXIsIE0o IlRQX1JHQkNVUlZFU19DSEFOTkVMIikpOwotICAgICBjdXJ2ZUVkaXRvckctPnNldEN1cnZlTGlz dGVuZXIgKHRoaXMpOwotIAotZGlmZiAtLWdpdCBhL3J0Z3VpL3J0c2NhbGFibGUuY2MgYi9ydGd1 aS9ydHNjYWxhYmxlLmNjCi1pbmRleCBiYjI5OTFjNTEuLmJmYmY3YjJmYiAxMDA2NDQKLS0tLSBh L3J0Z3VpL3J0c2NhbGFibGUuY2MKLSsrKyBiL3J0Z3VpL3J0c2NhbGFibGUuY2MKLUBAIC0yMywx MSArMjMsMTAgQEAKLSAjaW5jbHVkZSA8aW9zdHJlYW0+Ci0gI2luY2x1ZGUgPGxpYnJzdmcvcnN2 Zy5oPgotIAotKyNpbmNsdWRlICJydGVuZ2luZS9ydGFwcC5oIgotICNpbmNsdWRlICJydGVuZ2lu ZS9zZXR0aW5ncy5oIgotICNpbmNsdWRlICJndWl1dGlscy5oIgotIAotLWV4dGVybiBHbGliOjp1 c3RyaW5nIGFyZ3YwOwotLQotIC8vIERlZmF1bHQgc3RhdGljIHBhcmFtZXRlciB2YWx1ZXMKLSBk b3VibGUgUlRTY2FsYWJsZTo6ZHBpID0gOTYuOwotIGludCBSVFNjYWxhYmxlOjpzY2FsZSA9IDE7 Ci1AQCAtMTE5LDcgKzExOCw3IEBAIENhaXJvOjpSZWZQdHI8Q2Fpcm86OkltYWdlU3VyZmFjZT4g UlRTY2FsYWJsZTo6bG9hZFN1cmZhY2VGcm9tUE5HKGNvbnN0IEdsaWI6OnVzCi0gICAgICAgICBw YXRoID0gZm5hbWU7Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgICAvLyBMb29rIGZvciBQTkcgZmls ZSBpbiAiaW1hZ2VzIiBmb2xkZXIKLS0gICAgICAgIEdsaWI6OnVzdHJpbmcgaW1hZ2VzRm9sZGVy ID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoYXJndjAsICJpbWFnZXMiKTsKLSsgICAgICAgIEdsaWI6 OnVzdHJpbmcgaW1hZ2VzRm9sZGVyID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoQXBwOjpnZXQoKS5h cmd2MCgpLCAiaW1hZ2VzIik7Ci0gICAgICAgICBwYXRoID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUo aW1hZ2VzRm9sZGVyLCBmbmFtZSk7Ci0gICAgIH0KLSAKLUBAIC0xNDYsNyArMTQ1LDcgQEAgQ2Fp cm86OlJlZlB0cjxDYWlybzo6SW1hZ2VTdXJmYWNlPiBSVFNjYWxhYmxlOjpsb2FkU3VyZmFjZUZy b21TVkcoY29uc3QgR2xpYjo6dXMKLSAgICAgICAgIHBhdGggPSBmbmFtZTsKLSAgICAgfSBlbHNl IHsKLSAgICAgICAgIC8vIExvb2sgZm9yIFNWRyBmaWxlIGluICJpbWFnZXMiIGZvbGRlcgotLSAg ICAgICAgR2xpYjo6dXN0cmluZyBpbWFnZXNGb2xkZXIgPSBHbGliOjpidWlsZF9maWxlbmFtZShh cmd2MCwgImltYWdlcyIpOwotKyAgICAgICAgR2xpYjo6dXN0cmluZyBpbWFnZXNGb2xkZXIgPSBH bGliOjpidWlsZF9maWxlbmFtZShBcHA6OmdldCgpLmFyZ3YwKCksICJpbWFnZXMiKTsKLSAgICAg ICAgIHBhdGggPSBHbGliOjpidWlsZF9maWxlbmFtZShpbWFnZXNGb2xkZXIsIGZuYW1lKTsKLSAg ICAgfQotIAotZGlmZiAtLWdpdCBhL3J0Z3VpL3J0d2luZG93LmNjIGIvcnRndWkvcnR3aW5kb3cu Y2MKLWluZGV4IDhlY2FhMTE4NC4uODRmNTYyYjNlIDEwMDc1NQotLS0tIGEvcnRndWkvcnR3aW5k b3cuY2MKLSsrKyBiL3J0Z3VpL3J0d2luZG93LmNjCi1AQCAtNzQsNyArNzQsNyBAQCBvc3hfb3Bl bl9maWxlX2NiIChHdGtvc3hBcHBsaWNhdGlvbiAqYXBwLCBnY2hhciAqcGF0aF8sIGdwb2ludGVy IGRhdGEpCi0gewotICAgICBSVFdpbmRvdyAqcnRXaW4gPSBzdGF0aWNfY2FzdDxSVFdpbmRvdyo+ KGRhdGEpOwotIAotLSAgICBpZiAoIWFyZ3YxLmVtcHR5KCkpIHsKLSsgICAgaWYgKCFBcHA6Omdl dCgpLmFyZ3YxKCkuZW1wdHkoKSkgewotICAgICAgICAgLy8gc2tpcCBoYW5kbGluZyBpZiB3ZSBo YXZlIGEgZmlsZSBhcmd1bWVudCBvciBlbHNlIHdlIGdldCBkb3VibGUgb3BlbiBvZiBzYW1lIGZp bGUKLSAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgfQotQEAgLTEwNyw2ICsxMDcsNyBAQCBS VFdpbmRvdzo6UlRXaW5kb3cgKCkKLSAgICAgLy8gLS0tLS0tLSBsb2FkaW5nIHRoZW1lIGZpbGVz Ci0gCi0gICAgIEdsaWI6OlJlZlB0cjxHZGs6OlNjcmVlbj4gc2NyZWVuID0gR2RrOjpTY3JlZW46 OmdldF9kZWZhdWx0KCk7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm11dF9vcHRp b25zKCk7Ci0gCi0gICAgIGlmIChzY3JlZW4pIHsKLSAgICAgICAgIC8vIFNldHRpbmcgZGVmYXVs dCB0aGVtZSBhbmQgaWNvbiB0aGVtZSAoYmFzZXMgZm9yIGN1c3RvbSB0aGVtZXMpCi1AQCAtMTE5 LDEwICsxMjAsMTAgQEAgUlRXaW5kb3c6OlJUV2luZG93ICgpCi0gCi0gICAgICAgICAvLyBMb29r IGZvciB0aGVtZSBhbmQgc2V0IGl0Ci0gICAgICAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCB0 aGVtZSBuYW1lIGluIG9wdGlvbnMgZXhpc3RzLCBvdGhlcndpc2Ugc2V0IGl0IHRvIGRlZmF1bHQg b25lIChpLmUuICJSYXdUaGVyYXBlZS5jc3MiKQotLSAgICAgICAgYXV0byBmaWxlbmFtZSA9IEds aWI6OmJ1aWxkX2ZpbGVuYW1lKGFyZ3YwLCAidGhlbWVzIiwgb3B0aW9ucy50aGVtZSArICIuY3Nz Iik7Ci0rICAgICAgICBhdXRvIGZpbGVuYW1lID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUoQXBwOjpn ZXQoKS5hcmd2MCgpLCAidGhlbWVzIiwgb3B0aW9ucy50aGVtZSArICIuY3NzIik7Ci0gICAgICAg ICBpZiAoIUdsaWI6OmZpbGVfdGVzdChmaWxlbmFtZSwgR2xpYjo6RklMRV9URVNUX0VYSVNUUykp IHsKLSAgICAgICAgICAgICBvcHRpb25zLnRoZW1lID0gIlJhd1RoZXJhcGVlIjsKLS0gICAgICAg ICAgICBmaWxlbmFtZSA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lKGFyZ3YwLCAidGhlbWVzIiwgb3B0 aW9ucy50aGVtZSArICIuY3NzIik7Ci0rICAgICAgICAgICAgZmlsZW5hbWUgPSBHbGliOjpidWls ZF9maWxlbmFtZShBcHA6OmdldCgpLmFyZ3YwKCksICJ0aGVtZXMiLCBvcHRpb25zLnRoZW1lICsg Ii5jc3MiKTsKLSAgICAgICAgIH0KLSAKLSAgICAgICAgIGNzc1JUID0gR3RrOjpDc3NQcm92aWRl cjo6Y3JlYXRlKCk7Ci1AQCAtMjE0LDcgKzIxNSw3IEBAIFJUV2luZG93OjpSVFdpbmRvdyAoKQot ICAgICAgICAgZ3Rrb3N4X2FwcGxpY2F0aW9uX3JlYWR5IChvc3hBcHApOwotICAgICB9Ci0gI2Vu ZGlmCi0tICAgIHZlcnNpb25TdHIgPSAiUmF3VGhlcmFwZWUgIiArIHZlcnNpb25TdHJpbmc7Ci0r ICAgIHZlcnNpb25TdHIgPSAiUmF3VGhlcmFwZWUgIiArIEFwcDo6VkVSU0lPTjsKLSAKLSAgICAg c2V0X3RpdGxlX2RlY29yYXRlZCAoIiIpOwotICAgICBzZXRfcmVzaXphYmxlICh0cnVlKTsKLUBA IC0yMzEsNyArMjMyLDcgQEAgUlRXaW5kb3c6OlJUV2luZG93ICgpCi0gICAgIHNpZ25hbF9rZXlf cHJlc3NfZXZlbnQoKS5jb25uZWN0ICggc2lnYzo6bWVtX2Z1biAoKnRoaXMsICZSVFdpbmRvdzo6 a2V5UHJlc3NlZCkgKTsKLSAgICAgc2lnbmFsX2tleV9yZWxlYXNlX2V2ZW50KCkuY29ubmVjdChz aWdjOjptZW1fZnVuKCp0aGlzLCAmUlRXaW5kb3c6OmtleVJlbGVhc2VkKSk7Ci0gCi0tICAgIGlm IChzaW1wbGVFZGl0b3IpIHsKLSsgICAgaWYgKEFwcDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSkg ewotICAgICAgICAgZXBhbmVsID0gR3RrOjptYW5hZ2UgKCBuZXcgRWRpdG9yUGFuZWwgKG51bGxw dHIpICk7Ci0gICAgICAgICBlcGFuZWwtPnNldFBhcmVudCAodGhpcyk7Ci0gICAgICAgICBlcGFu ZWwtPnNldFBhcmVudFdpbmRvdyAodGhpcyk7Ci1AQCAtMjQxLDExICsyNDIsMTEgQEAgUlRXaW5k b3c6OlJUV2luZG93ICgpCi0gICAgICAgICBwbGRCcmlkZ2UgPSBudWxscHRyOyAvLyBObyBwcm9n cmVzcyBsaXN0ZW5lcgotIAotICAgICAgICAgQ2FjaGVNYW5hZ2VyKiBjbSA9IENhY2hlTWFuYWdl cjo6Z2V0SW5zdGFuY2UoKTsKLS0gICAgICAgIFRodW1ibmFpbCogdGhtID0gY20tPmdldEVudHJ5 ICggYXJndjEgKTsKLSsgICAgICAgIFRodW1ibmFpbCogdGhtID0gY20tPmdldEVudHJ5ICggQXBw OjpnZXQoKS5hcmd2MSgpICk7Ci0gCi0gICAgICAgICBpZiAodGhtKSB7Ci0gICAgICAgICAgICAg aW50IGVycm9yOwotLSAgICAgICAgICAgIHJ0ZW5naW5lOjpJbml0aWFsSW1hZ2UgKmlpID0gcnRl bmdpbmU6OkluaXRpYWxJbWFnZTo6bG9hZCAoYXJndjEsIHRobS0+Z2V0VHlwZSgpID09IEZUX1Jh dywgJmVycm9yLCBudWxscHRyKTsKLSsgICAgICAgICAgICBydGVuZ2luZTo6SW5pdGlhbEltYWdl ICppaSA9IHJ0ZW5naW5lOjpJbml0aWFsSW1hZ2U6OmxvYWQgKEFwcDo6Z2V0KCkuYXJndjEoKSwg dGhtLT5nZXRUeXBlKCkgPT0gRlRfUmF3LCAmZXJyb3IsIG51bGxwdHIpOwotICAgICAgICAgICAg IGVwYW5lbC0+b3BlbiAoIHRobSwgaWkgKTsKLSAgICAgICAgIH0KLSAgICAgfSBlbHNlIHsKLUBA IC0zNzIsOCArMzczLDggQEAgUlRXaW5kb3c6OlJUV2luZG93ICgpCi0gCi0gICAgICAgICBicGFu ZWwtPmluaXQgKHRoaXMpOwotIAotLSAgICAgICAgaWYgKCFhcmd2MS5lbXB0eSgpICYmICFyZW1v dGUpIHsKLS0gICAgICAgICAgICBUaHVtYm5haWwqIHRobSA9IGNhY2hlTWdyLT5nZXRFbnRyeSAo YXJndjEpOwotKyAgICAgICAgaWYgKCFBcHA6OmdldCgpLmFyZ3YxKCkuZW1wdHkoKSAmJiAhQXBw OjpnZXQoKS5pc1JlbW90ZSgpKSB7Ci0rICAgICAgICAgICAgVGh1bWJuYWlsKiB0aG0gPSBjYWNo ZU1nci0+Z2V0RW50cnkgKEFwcDo6Z2V0KCkuYXJndjEoKSk7Ci0gCi0gICAgICAgICAgICAgaWYg KHRobSkgewotICAgICAgICAgICAgICAgICBmcGFuZWwtPmZpbGVDYXRhbG9nLT5vcGVuUmVxdWVz dGVkICh7dGhtfSk7Ci1AQCAtMzg0LDcgKzM4NSw3IEBAIFJUV2luZG93OjpSVFdpbmRvdyAoKQot IAotIFJUV2luZG93Ojp+UlRXaW5kb3coKQotIHsKLS0gICAgaWYgKCFzaW1wbGVFZGl0b3IpIHsK LSsgICAgaWYgKCFBcHA6OmdldCgpLmlzU2ltcGxlRWRpdG9yKCkpIHsKLSAgICAgICAgIGRlbGV0 ZSBwbGRCcmlkZ2U7Ci0gICAgIH0KLSAKLUBAIC00MDYsNyArNDA3LDcgQEAgdm9pZCBSVFdpbmRv dzo6b25fcmVhbGl6ZSAoKQotICAgICAgICAgZnBhbmVsLT5zZXRBc3BlY3QoKTsKLSAgICAgfQot IAotLSAgICBpZiAoc2ltcGxlRWRpdG9yKSB7Ci0rICAgIGlmIChBcHA6OmdldCgpLmlzU2ltcGxl RWRpdG9yKCkpIHsKLSAgICAgICAgIGVwYW5lbC0+c2V0QXNwZWN0KCk7Ci0gICAgIH0KLSAKLUBA IC00MTQsOSArNDE1LDEwIEBAIHZvaWQgUlRXaW5kb3c6Om9uX3JlYWxpemUgKCkKLSAKLSAgICAg Ly8gRGlzcGxheSByZWxlYXNlIG5vdGVzIG9ubHkgaWYgbmV3IG1ham9yIHZlcnNpb24uCi0gICAg IGJvb2wgd2FpdEZvclNwbGFzaCA9IGZhbHNlOwotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpn ZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBpZiAob3B0aW9ucy5pc19uZXdfdmVyc2lvbigpKSB7 Ci0gICAgICAgICAvLyBVcGRhdGUgdGhlIHZlcnNpb24gcGFyYW1ldGVyIHdpdGggdGhlIHJpZ2h0 IHZhbHVlCi0tICAgICAgICBvcHRpb25zLnZlcnNpb24gPSB2ZXJzaW9uU3RyaW5nOwotKyAgICAg ICAgb3B0aW9ucy52ZXJzaW9uID0gQXBwOjpWRVJTSU9OOwotIAotICAgICAgICAgc3BsYXNoID0g bmV3IFNwbGFzaCAoKnRoaXMpOwotICAgICAgICAgc3BsYXNoLT5zZXRfdHJhbnNpZW50X2ZvciAo KnRoaXMpOwotQEAgLTQzOSw2ICs0NDEsNyBAQCB2b2lkIFJUV2luZG93Ojpvbl9yZWFsaXplICgp Ci0gCi0gdm9pZCBSVFdpbmRvdzo6c2hvd0Vycm9ycygpCi0gewotKyAgICBhdXRvJiBvcHRpb25z ID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICAvLyBhbGVydGluZyB1c2VycyBpZiB0 aGUgZGVmYXVsdCByYXcgYW5kIGltYWdlIHByb2ZpbGVzIGFyZSBtaXNzaW5nCi0gICAgIGlmIChv cHRpb25zLmlzX2RlZlByb2ZSYXdNaXNzaW5nKCkpIHsKLSAgICAgICAgIG9wdGlvbnMuZGVmUHJv ZlJhdyA9IERFRlBST0ZJTEVfUkFXOwotQEAgLTQ2NSw2ICs0NjgsNyBAQCB2b2lkIFJUV2luZG93 OjpzaG93RXJyb3JzKCkKLSAKLSBib29sIFJUV2luZG93Ojpvbl9jb25maWd1cmVfZXZlbnQgKEdk a0V2ZW50Q29uZmlndXJlKiBldmVudCkKLSB7Ci0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6Omdl dCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGlmICghb3B0aW9ucy53aW5kb3dNYXhpbWl6ZWQgJiYg IWlzX2Z1bGxzY3JlZW4gJiYgIWlzX21pbmltaXplZCkgewotICAgICAgICAgZ2V0X3NpemUgKG9w dGlvbnMud2luZG93V2lkdGgsIG9wdGlvbnMud2luZG93SGVpZ2h0KTsKLSAgICAgICAgIGdldF9w b3NpdGlvbiAob3B0aW9ucy53aW5kb3dYLCBvcHRpb25zLndpbmRvd1kpOwotQEAgLTQ3OSw3ICs0 ODMsNyBAQCBib29sIFJUV2luZG93Ojpvbl9jb25maWd1cmVfZXZlbnQgKEdka0V2ZW50Q29uZmln dXJlKiBldmVudCkKLSBib29sIFJUV2luZG93Ojpvbl93aW5kb3dfc3RhdGVfZXZlbnQgKEdka0V2 ZW50V2luZG93U3RhdGUqIGV2ZW50KQotIHsKLSAgICAgLy8gUmV0cmlldmUgUlQgd2luZG93IHN0 YXRlcwotLSAgICBvcHRpb25zLndpbmRvd01heGltaXplZCA9IGV2ZW50LT5uZXdfd2luZG93X3N0 YXRlICYgR0RLX1dJTkRPV19TVEFURV9NQVhJTUlaRUQ7Ci0rICAgIEFwcDo6Z2V0KCkubXV0X29w dGlvbnMoKS53aW5kb3dNYXhpbWl6ZWQgPSBldmVudC0+bmV3X3dpbmRvd19zdGF0ZSAmIEdES19X SU5ET1dfU1RBVEVfTUFYSU1JWkVEOwotICAgICBpc19taW5pbWl6ZWQgPSBldmVudC0+bmV3X3dp bmRvd19zdGF0ZSAmIEdES19XSU5ET1dfU1RBVEVfSUNPTklGSUVEOwotICAgICBpc19mdWxsc2Ny ZWVuID0gZXZlbnQtPm5ld193aW5kb3dfc3RhdGUgJiBHREtfV0lORE9XX1NUQVRFX0ZVTExTQ1JF RU47Ci0gCi1AQCAtNTE5LDcgKzUyMyw3IEBAIHZvaWQgUlRXaW5kb3c6Om9uX21haW5OQl9zd2l0 Y2hfcGFnZSAoR3RrOjpXaWRnZXQqIHdpZGdldCwgZ3VpbnQgcGFnZV9udW0pCi0gCi0gdm9pZCBS VFdpbmRvdzo6YWRkRWRpdG9yUGFuZWwgKEVkaXRvclBhbmVsKiBlcCwgY29uc3Qgc3RkOjpzdHJp bmcgJm5hbWUpCi0gewotLSAgICBpZiAob3B0aW9ucy5tdWx0aURpc3BsYXlNb2RlID4gMCkgewot KyAgICBpZiAoQXBwOjpnZXQoKS5vcHRpb25zKCkubXVsdGlEaXNwbGF5TW9kZSA+IDApIHsKLSAg ICAgICAgIEVkaXRXaW5kb3cgKiB3bmRFZGl0ID0gRWRpdFdpbmRvdzo6Z2V0SW5zdGFuY2UgKHRo aXMpOwotICAgICAgICAgd25kRWRpdC0+YWRkRWRpdG9yUGFuZWwgKGVwLCBuYW1lKTsKLSAgICAg ICAgIHduZEVkaXQtPnNob3dfYWxsKCk7Ci1AQCAtNTczLDcgKzU3Nyw3IEBAIHZvaWQgUlRXaW5k b3c6OnJlbUVkaXRvclBhbmVsIChFZGl0b3JQYW5lbCogZXApCi0gICAgICAgICByZXR1cm47ICAg IC8vIFdpbGwgY3Jhc2ggaWYgZGVzdHJveWVkIHdoaWxlIGxvYWRpbmcKLSAgICAgfQotIAotLSAg ICBpZiAob3B0aW9ucy5tdWx0aURpc3BsYXlNb2RlID4gMCkgewotKyAgICBpZiAoQXBwOjpnZXQo KS5vcHRpb25zKCkubXVsdGlEaXNwbGF5TW9kZSA+IDApIHsKLSAgICAgICAgIEVkaXRXaW5kb3cg KiB3bmRFZGl0ID0gRWRpdFdpbmRvdzo6Z2V0SW5zdGFuY2UgKHRoaXMpOwotICAgICAgICAgd25k RWRpdC0+cmVtRWRpdG9yUGFuZWwgKGVwKTsKLSAgICAgfSBlbHNlIHsKLUBAIC02MDIsNyArNjA2 LDcgQEAgdm9pZCBSVFdpbmRvdzo6cmVtRWRpdG9yUGFuZWwgKEVkaXRvclBhbmVsKiBlcCkKLSAK LSBib29sIFJUV2luZG93OjpzZWxlY3RFZGl0b3JQYW5lbCAoY29uc3Qgc3RkOjpzdHJpbmcgJm5h bWUpCi0gewotLSAgICBpZiAob3B0aW9ucy5tdWx0aURpc3BsYXlNb2RlID4gMCkgewotKyAgICBp ZiAoQXBwOjpnZXQoKS5vcHRpb25zKCkubXVsdGlEaXNwbGF5TW9kZSA+IDApIHsKLSAgICAgICAg IEVkaXRXaW5kb3cgKiB3bmRFZGl0ID0gRWRpdFdpbmRvdzo6Z2V0SW5zdGFuY2UgKHRoaXMpOwot IAotICAgICAgICAgaWYgKHduZEVkaXQtPnNlbGVjdEVkaXRvclBhbmVsIChuYW1lKSkgewotQEAg LTY1OCw3ICs2NjIsNyBAQCBib29sIFJUV2luZG93OjprZXlQcmVzc2VkIChHZGtFdmVudEtleSog ZXZlbnQpCi0gICAgICAgICB0b2dnbGVfZnVsbHNjcmVlbigpOwotICAgICB9Ci0gCi0tICAgIGlm IChzaW1wbGVFZGl0b3IpCi0rICAgIGlmIChBcHA6OmdldCgpLmlzU2ltcGxlRWRpdG9yKCkpCi0g ICAgICAgICAvLyBpbiBzaW1wbGVFZGl0b3IgbW9kZSwgdGhlcmUncyBubyBvdGhlciB0YWIgdGhh dCBjYW4gaGFuZGxlIHByZXNzZWQga2V5cywgc28gd2UgY2FuIHNlbmQgdGhlIGV2ZW50IHRvIGVk aXRvciBwYW5lbCB0aGVuIHJldHVybgotICAgICB7Ci0gICAgICAgICByZXR1cm4gZXBhbmVsLT5o YW5kbGVTaG9ydGN1dEtleSAoZXZlbnQpOwotQEAgLTczOSw4ICs3NDMsOSBAQCBib29sIFJUV2lu ZG93Ojpvbl9kZWxldGVfZXZlbnQgKEdka0V2ZW50QW55KiBldmVudCkKLSAgICAgLy8gQ2hlY2sg aWYgYW55IGVkaXRvciBpcyBzdGlsbCBwcm9jZXNzaW5nLCBhbmQgZG8gTk9UIHF1aXQgaWYgc28u IE90aGVyd2lzZSBjcmFzaGVzIGFuZCBpbmNvbnNpc3RlbnQgY2FjaGVzCi0gICAgIGJvb2wgaXNQ cm9jZXNzaW5nID0gZmFsc2U7Ci0gICAgIEVkaXRXaW5kb3cqIGVkaXRXaW5kb3cgPSBudWxscHRy OwotKyAgICBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotIAotLSAg ICBpZiAoaXNTaW5nbGVUYWJNb2RlKCkgfHwgc2ltcGxlRWRpdG9yKSB7Ci0rICAgIGlmIChpc1Np bmdsZVRhYk1vZGUoKSB8fCBBcHA6OmdldCgpLmlzU2ltcGxlRWRpdG9yKCkpIHsKLSAgICAgICAg IGlzUHJvY2Vzc2luZyA9IGVwYW5lbC0+Z2V0SXNQcm9jZXNzaW5nKCk7Ci0gICAgIH0gZWxzZSBp ZiAob3B0aW9ucy5tdWx0aURpc3BsYXlNb2RlID4gMCkgewotICAgICAgICAgZWRpdFdpbmRvdyA9 IEVkaXRXaW5kb3c6OmdldEluc3RhbmNlICh0aGlzKTsKLUBAIC03NjcsNyArNzcyLDcgQEAgYm9v bCBSVFdpbmRvdzo6b25fZGVsZXRlX2V2ZW50IChHZGtFdmVudEFueSogZXZlbnQpCi0gICAgICAg ICBicGFuZWwtPnNhdmVPcHRpb25zICgpOwotICAgICB9Ci0gCi0tICAgIGlmICgoaXNTaW5nbGVU YWJNb2RlKCkgfHwgc2ltcGxlRWRpdG9yKSAmJiBlcGFuZWwtPmlzUmVhbGl6ZWQoKSkgewotKyAg ICBpZiAoKGlzU2luZ2xlVGFiTW9kZSgpIHx8IEFwcDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSkg JiYgZXBhbmVsLT5pc1JlYWxpemVkKCkpIHsKLSAgICAgICAgIGVwYW5lbC0+c2F2ZVByb2ZpbGUo KTsKLSAgICAgICAgIGVwYW5lbC0+d3JpdGVPcHRpb25zICgpOwotICAgICB9IGVsc2UgewotQEAg LTg0MCw3ICs4NDUsNyBAQCBib29sIFJUV2luZG93Ojpvbl9kZWxldGVfZXZlbnQgKEdka0V2ZW50 QW55KiBldmVudCkKLSAKLSB2b2lkIFJUV2luZG93Ojp3cml0ZVRvb2xFeHBhbmRlZFN0YXR1cyAo c3RkOjp2ZWN0b3I8aW50PiAmdHBPcGVuKQotIHsKLS0gICAgaWYgKChpc1NpbmdsZVRhYk1vZGUo KSB8fCBnaW1wUGx1Z2luKSAmJiBlcGFuZWwtPmlzUmVhbGl6ZWQoKSkgewotKyAgICBpZiAoKGlz U2luZ2xlVGFiTW9kZSgpIHx8IEFwcDo6Z2V0KCkuaXNHaW1wUGx1Z2luKCkpICYmIGVwYW5lbC0+ aXNSZWFsaXplZCgpKSB7Ci0gICAgICAgICBlcGFuZWwtPndyaXRlVG9vbEV4cGFuZGVkU3RhdHVz ICh0cE9wZW4pOwotICAgICB9IGVsc2UgewotICAgICAgICAgLy8gU3RvcmluZyB0aGUgb3B0aW9u cyBvZiB0aGUgbGFzdCBFZGl0b3JQYW5lbCBiZWZvcmUgR3RrIGRlc3Ryb3lzIGV2ZXJ5dGhpbmcK LUBAIC04ODEsNiArODg2LDcgQEAgdm9pZCBSVFdpbmRvdzo6c2hvd0lDQ1Byb2ZpbGVDcmVhdG9y ICgpCi0gCi0gICAgIGZwYW5lbC0+b3B0aW9uc0NoYW5nZWQgKCk7Ci0gCi0rICAgIGNvbnN0IGF1 dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaWYgKGVwYW5lbCkgewot ICAgICAgICAgZXBhbmVsLT5kZWZhdWx0TW9uaXRvclByb2ZpbGVDaGFuZ2VkIChvcHRpb25zLnJ0 U2V0dGluZ3MubW9uaXRvclByb2ZpbGUsIG9wdGlvbnMucnRTZXR0aW5ncy5hdXRvTW9uaXRvclBy b2ZpbGUpOwotICAgICB9Ci1AQCAtODk4LDYgKzkwNCw3IEBAIHZvaWQgUlRXaW5kb3c6OnNob3dQ cmVmZXJlbmNlcyAoKQotIAotICAgICBmcGFuZWwtPm9wdGlvbnNDaGFuZ2VkICgpOwotIAotKyAg ICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGlmIChl cGFuZWwpIHsKLSAgICAgICAgIGVwYW5lbC0+ZGVmYXVsdE1vbml0b3JQcm9maWxlQ2hhbmdlZCAo b3B0aW9ucy5ydFNldHRpbmdzLm1vbml0b3JQcm9maWxlLCBvcHRpb25zLnJ0U2V0dGluZ3MuYXV0 b01vbml0b3JQcm9maWxlKTsKLSAgICAgfQotQEAgLTkxNCw3ICs5MjEsNyBAQCB2b2lkIFJUV2lu ZG93OjpzZXRQcm9ncmVzcyhkb3VibGUgcCkKLSAKLSB2b2lkIFJUV2luZG93OjpzZXRQcm9ncmVz c1N0cihjb25zdCBHbGliOjp1c3RyaW5nJiBzdHIpCi0gewotLSAgICBpZiAoIW9wdGlvbnMubWFp bk5CVmVydGljYWwpIHsKLSsgICAgaWYgKCFBcHA6OmdldCgpLm9wdGlvbnMoKS5tYWluTkJWZXJ0 aWNhbCkgewotICAgICAgICAgcHJQcm9nQmFyLnNldF90ZXh0KHN0cik7Ci0gICAgIH0KLSB9Ci1A QCAtOTg1LDcgKzk5Miw3IEBAIHZvaWQgUlRXaW5kb3c6Ok1vdmVGaWxlQnJvd3NlclRvRWRpdG9y KCkKLSAgICAgICAgIGZwYW5lbC0+cmliYm9uUGFuZS0+cmVtb3ZlICgqZkNhdGFsb2cpOwotICAg ICAgICAgZkNhdGFsb2ctPmRpc2FibGVJbnNwZWN0b3IoKTsKLSAgICAgICAgIGVwYW5lbC0+Y2F0 YWxvZ1BhbmUtPmFkZCAoKmZDYXRhbG9nKTsKLS0gICAgICAgIGVwYW5lbC0+c2hvd1RvcFBhbmVs IChvcHRpb25zLmVkaXRvckZpbG1TdHJpcE9wZW5lZCk7Ci0rICAgICAgICBlcGFuZWwtPnNob3dU b3BQYW5lbCAoQXBwOjpnZXQoKS5vcHRpb25zKCkuZWRpdG9yRmlsbVN0cmlwT3BlbmVkKTsKLSAg ICAgICAgIGZDYXRhbG9nLT5lbmFibGVUYWJNb2RlICh0cnVlKTsKLSAgICAgICAgIGZDYXRhbG9n LT5yZWZyZXNoSGVpZ2h0KCk7Ci0gICAgICAgICBmQ2F0YWxvZy0+dGJMZWZ0UGFuZWxfMV92aXNp YmxlIChmYWxzZSk7Ci1AQCAtMTAwMyw3ICsxMDEwLDcgQEAgdm9pZCBSVFdpbmRvdzo6dXBkYXRl RXh0ZXJuYWxFZGl0b3JXaWRnZXQoaW50IHNlbGVjdGVkSW5kZXgsIGNvbnN0IHN0ZDo6dmVjdG9y PEUKLSAgICAgICAgIHBhbmVsLnNlY29uZC0+dXBkYXRlRXh0ZXJuYWxFZGl0b3JXaWRnZXQoc2Vs ZWN0ZWRJbmRleCwgZWRpdG9ycyk7Ci0gICAgIH0KLSAKLS0gICAgaWYgKG9wdGlvbnMubXVsdGlE aXNwbGF5TW9kZSA+IDApIHsKLSsgICAgaWYgKEFwcDo6Z2V0KCkub3B0aW9ucygpLm11bHRpRGlz cGxheU1vZGUgPiAwKSB7Ci0gICAgICAgICBFZGl0V2luZG93OjpnZXRJbnN0YW5jZSh0aGlzKQot ICAgICAgICAgICAgIC0+dXBkYXRlRXh0ZXJuYWxFZGl0b3JXaWRnZXQoc2VsZWN0ZWRJbmRleCwg ZWRpdG9ycyk7Ci0gICAgIH0KLUBAIC0xMDgwLDcgKzEwODcsNyBAQCB2b2lkIFJUV2luZG93Ojp1 cGRhdGVUb29sUGFuZWxUb29sTG9jYXRpb25zKAotICAgICAgICAgcGFuZWwuc2Vjb25kLT51cGRh dGVUb29sUGFuZWxUb29sTG9jYXRpb25zKGZhdm9yaXRlcywgY2xvbmVGYXZvcml0ZVRvb2xzKTsK LSAgICAgfQotIAotLSAgICBpZiAob3B0aW9ucy5tdWx0aURpc3BsYXlNb2RlID4gMCkgewotKyAg ICBpZiAoQXBwOjpnZXQoKS5vcHRpb25zKCkubXVsdGlEaXNwbGF5TW9kZSA+IDApIHsKLSAgICAg ICAgIEVkaXRXaW5kb3c6OmdldEluc3RhbmNlKHRoaXMpCi0gICAgICAgICAgICAgLT51cGRhdGVU b29sUGFuZWxUb29sTG9jYXRpb25zKGZhdm9yaXRlcywgY2xvbmVGYXZvcml0ZVRvb2xzKTsKLSAg ICAgfQotQEAgLTEwOTgsNiArMTEwNSw3IEBAIHZvaWQgUlRXaW5kb3c6OnNldFdpbmRvd1NpemUg KCkKLSB7Ci0gICAgIG9uQ29uZkV2ZW50Q29ubi5ibG9jayh0cnVlKTsgLy8gQXZvaWQgZ2V0dGlu ZyBzaXplIGFuZCBwb3NpdGlvbiB3aGlsZSB3aW5kb3cgaXMgYmVpbmcgbW92ZWQsIG1heGltaXpl ZCwgLi4uCi0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMo KTsKLSAgICAgR2RrOjpSZWN0YW5nbGUgbE1vbml0b3JSZWN0OwotICAgICBjb25zdCBhdXRvIGRp c3BsYXkgPSBnZXRfc2NyZWVuKCktPmdldF9kaXNwbGF5KCk7Ci0gICAgIGRpc3BsYXktPmdldF9t b25pdG9yIChzdGQ6Om1pbiAob3B0aW9ucy53aW5kb3dNb25pdG9yLCBkaXNwbGF5LT5nZXRfbl9t b25pdG9ycygpIC0gMSkpLT5nZXRfZ2VvbWV0cnkobE1vbml0b3JSZWN0KTsKLUBAIC0xMjIzLDYg KzEyMzEsNyBAQCB2b2lkIFJUV2luZG93OjpjcmVhdGVTZXRtRWRpdG9yKCkKLSAgICAgc2V0RXhw YW5kQWxpZ25Qcm9wZXJ0aWVzIChlZGl0b3JMYWJlbEdyaWQsIGZhbHNlLCBmYWxzZSwgR3RrOjpB TElHTl9DRU5URVIsIEd0azo6QUxJR05fQ0VOVEVSKTsKLSAgICAgR3RrOjpMYWJlbCogY29uc3Qg ZWwgPSBHdGs6Om1hbmFnZSAobmV3IEd0azo6TGFiZWwgKCBHbGliOjp1c3RyaW5nICgiICIpICsg TSAoIk1BSU5fRlJBTUVfRURJVE9SIikgKSk7Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMg PSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgY29uc3QgYXV0byBwb3MgPSBvcHRpb25zLm1h aW5OQlZlcnRpY2FsID8gR3RrOjpQT1NfVE9QIDogR3RrOjpQT1NfUklHSFQ7Ci0gCi0gICAgIGlm IChvcHRpb25zLm1haW5OQlZlcnRpY2FsKSB7Ci1AQCAtMTI0MSw1ICsxMjUwLDYgQEAgdm9pZCBS VFdpbmRvdzo6Y3JlYXRlU2V0bUVkaXRvcigpCi0gCi0gYm9vbCBSVFdpbmRvdzo6aXNTaW5nbGVU YWJNb2RlKCkgY29uc3QKLSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgp Lm9wdGlvbnMoKTsKLSAgICAgcmV0dXJuICFvcHRpb25zLnRhYmJlZFVJICYmICEgKG9wdGlvbnMu bXVsdGlEaXNwbGF5TW9kZSA+IDApOwotIH0KLWRpZmYgLS1naXQgYS9ydGd1aS9zYXZlYXNkbGcu Y2MgYi9ydGd1aS9zYXZlYXNkbGcuY2MKLWluZGV4IGIxYTIxNzU1My4uM2JkYTk2YzgxIDEwMDY0 NAotLS0tIGEvcnRndWkvc2F2ZWFzZGxnLmNjCi0rKysgYi9ydGd1aS9zYXZlYXNkbGcuY2MKLUBA IC03NSw2ICs3NSw3IEBAIFNhdmVBc0RpYWxvZzo6U2F2ZUFzRGlhbG9nIChjb25zdCBHbGliOjp1 c3RyaW5nICZpbml0aWFsRGlyLCBHdGs6OldpbmRvdyogcGFyZW50Ci0gICAgIGZpbHRlcl9wbmct PmFkZF9wYXR0ZXJuKCIqLnBuZyIpOwotICAgICBmaWx0ZXJfcG5nLT5hZGRfcGF0dGVybigiKi5Q TkciKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygp OwotICAgICBmb3JtYXRDaGFuZ2VkIChvcHRpb25zLnNhdmVGb3JtYXQuZm9ybWF0KTsKLSAKLSAv LyBPdXRwdXQgT3B0aW9ucwotQEAgLTEzMCw3ICsxMzEsNyBAQCBTYXZlQXNEaWFsb2c6OlNhdmVB c0RpYWxvZyAoY29uc3QgR2xpYjo6dXN0cmluZyAmaW5pdGlhbERpciwgR3RrOjpXaW5kb3cqIHBh cmVudAotICAgICBHdGs6OkJveCogdmJveF9ib3R0b21SaWdodCA9IEd0azo6bWFuYWdlKG5ldyBH dGs6OkJveChHdGs6Ok9SSUVOVEFUSU9OX1ZFUlRJQ0FMKSk7Ci0gCi0gICAgIC8vIFRoZXJlIGlz IG5vIHF1ZXVlIGluIHNpbXBsZSBtb2RlLCBzbyBubyBuZWVkIHRvIGNob29zZQotLSAgICBpZiAo IXNpbXBsZUVkaXRvcikgewotKyAgICBpZiAoIUFwcDo6Z2V0KCkuaXNTaW1wbGVFZGl0b3IoKSkg ewotICAgICAgICAgdmJveF9ib3R0b21SaWdodC0+cGFja19zdGFydCAoKnNhdmVNZXRob2RbMF0s IEd0azo6UEFDS19TSFJJTkssIDIpOwotICAgICAgICAgdmJveF9ib3R0b21SaWdodC0+cGFja19z dGFydCAoKnNhdmVNZXRob2RbMV0sIEd0azo6UEFDS19TSFJJTkssIDIpOwotICAgICAgICAgdmJv eF9ib3R0b21SaWdodC0+cGFja19zdGFydCAoKnNhdmVNZXRob2RbMl0sIEd0azo6UEFDS19TSFJJ TkssIDIpOwotQEAgLTE5MCw3ICsxOTEsNyBAQCBib29sIFNhdmVBc0RpYWxvZzo6Z2V0QXV0b1N1 ZmZpeCAoKQotIGJvb2wgU2F2ZUFzRGlhbG9nOjpnZXRJbW1lZGlhdGVseSAoKQotIHsKLSAKLS0g ICAgcmV0dXJuIHNpbXBsZUVkaXRvciA/IHRydWUgOiBzYXZlTWV0aG9kWzBdLT5nZXRfYWN0aXZl ICgpOwotKyAgICByZXR1cm4gQXBwOjpnZXQoKS5pc1NpbXBsZUVkaXRvcigpID8gdHJ1ZSA6IHNh dmVNZXRob2RbMF0tPmdldF9hY3RpdmUoKTsKLSB9Ci0gCi0gYm9vbCBTYXZlQXNEaWFsb2c6Omdl dFRvSGVhZE9mUXVldWUgKCkKLUBAIC0yMDcsNyArMjA4LDcgQEAgYm9vbCBTYXZlQXNEaWFsb2c6 OmdldFRvVGFpbE9mUXVldWUgKCkKLSAKLSBpbnQgU2F2ZUFzRGlhbG9nOjpnZXRTYXZlTWV0aG9k TnVtICgpCi0gewotLSAgICBpZiAoc2ltcGxlRWRpdG9yKSB7Ci0rICAgIGlmIChBcHA6OmdldCgp LmlzU2ltcGxlRWRpdG9yKCkpIHsKLSAgICAgICAgIHJldHVybiAwOwotICAgICB9Ci0gCi1kaWZm IC0tZ2l0IGEvcnRndWkvc2F2ZWZvcm1hdHBhbmVsLmNjIGIvcnRndWkvc2F2ZWZvcm1hdHBhbmVs LmNjCi1pbmRleCBkOWIwNGU4ZmUuLjM5ZDM5NzdjMCAxMDA2NDQKLS0tLSBhL3J0Z3VpL3NhdmVm b3JtYXRwYW5lbC5jYwotKysrIGIvcnRndWkvc2F2ZWZvcm1hdHBhbmVsLmNjCi1AQCAtMTI1LDcg KzEyNSw3IEBAIFNhdmVGb3JtYXRQYW5lbDo6U2F2ZUZvcm1hdFBhbmVsICgpIDogbGlzdGVuZXIg KG51bGxwdHIpCi0gCi0gU2F2ZUZvcm1hdFBhbmVsOjp+U2F2ZUZvcm1hdFBhbmVsICgpID0gZGVm YXVsdDsKLSAKLS12b2lkIFNhdmVGb3JtYXRQYW5lbDo6aW5pdCAoU2F2ZUZvcm1hdCAmc2YpCi0r dm9pZCBTYXZlRm9ybWF0UGFuZWw6OmluaXQgKGNvbnN0IFNhdmVGb3JtYXQgJnNmKQotIHsKLSAg ICAgRm9ybWF0Q2hhbmdlTGlzdGVuZXIqIGNvbnN0IHRtcCA9IGxpc3RlbmVyOwotICAgICBsaXN0 ZW5lciA9IG51bGxwdHI7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvc2F2ZWZvcm1hdHBhbmVsLmggYi9y dGd1aS9zYXZlZm9ybWF0cGFuZWwuaAotaW5kZXggYmEwOGM5OGY2Li5hZjZjNGE3MmYgMTAwNjQ0 Ci0tLS0gYS9ydGd1aS9zYXZlZm9ybWF0cGFuZWwuaAotKysrIGIvcnRndWkvc2F2ZWZvcm1hdHBh bmVsLmgKLUBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKLSAgICAgICAgIGxpc3RlbmVyID0gbDsK LSAgICAgfQotIAotLSAgICB2b2lkICAgICAgICBpbml0ICAgICAgICAgICAgKFNhdmVGb3JtYXQm IHNmKTsKLSsgICAgdm9pZCAgICAgICAgaW5pdCAgICAgICAgICAgIChjb25zdCBTYXZlRm9ybWF0 JiBzZik7Ci0gICAgIFNhdmVGb3JtYXQgIGdldEZvcm1hdCAgICAgICAoKTsKLSAKLSAgICAgdm9p ZCAgICAgICAgZm9ybWF0Q2hhbmdlZCAgICgpOwotZGlmZiAtLWdpdCBhL3J0Z3VpL3NoYXJwZW5l ZGdlLmNjIGIvcnRndWkvc2hhcnBlbmVkZ2UuY2MKLWluZGV4IDMxMDRiNjQxZS4uZjdhMWQyODkx IDEwMDY0NAotLS0tIGEvcnRndWkvc2hhcnBlbmVkZ2UuY2MKLSsrKyBiL3J0Z3VpL3NoYXJwZW5l ZGdlLmNjCi1AQCAtMzYsNiArMzYsNyBAQCBTaGFycGVuRWRnZTo6U2hhcnBlbkVkZ2UgKCkgOiBG b2xkYWJsZVRvb2xQYW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQX1NIQVJQRU5FRAotICAgICBw YXNzZXMgPSBHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIgKE0oIlRQX1NIQVJQRU5FREdFX1BBU1NF UyIpLCAxLCA0LCAxLCAyKSk7Ci0gICAgIHBhc3Nlcy0+c2V0QWRqdXN0ZXJMaXN0ZW5lciAodGhp cyk7Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsK LSAgICAgcGFzc2VzLT5zZXREZWxheShzdGQ6Om1heChvcHRpb25zLmFkanVzdGVyTWluRGVsYXks IG9wdGlvbnMuYWRqdXN0ZXJNYXhEZWxheSkpOwotIAotICAgICBhbW91bnQgPSBHdGs6Om1hbmFn ZShuZXcgQWRqdXN0ZXIgKE0oIlRQX1NIQVJQRU5FREdFX0FNT1VOVCIpLCAwLCAxMDAsIDEsIDUw KSk7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvc291bmRtYW4uY2MgYi9ydGd1aS9zb3VuZG1hbi5jYwot aW5kZXggNTU1MmJkMTJkLi44NjRlNWUzNzcgMTAwNjQ0Ci0tLS0gYS9ydGd1aS9zb3VuZG1hbi5j YwotKysrIGIvcnRndWkvc291bmRtYW4uY2MKLUBAIC00OSw3ICs0OSw3IEBAIHZvaWQgU291bmRN YW5hZ2VyOjppbml0KCkKLSAvLyBwYXJhbSBpcyBlaXRoZXIgZmlsZSBuYW1lIG9yIG5hbWUgb2Yg dGhlIHN5c3RlbSBldmVudCBvbiBXaW5kb3dzIChlLmcuICJTeXN0ZW1Bc3RlcmlzayIgb3IgIlN5 c3RlbURlZmF1bHQiKS4KLSB2b2lkIFNvdW5kTWFuYWdlcjo6cGxheVNvdW5kQXN5bmMoY29uc3Qg R2xpYjo6dXN0cmluZyAmc291bmQpCi0gewotLSAgICBpZiAoc291bmQuZW1wdHkoKSB8fCAhb3B0 aW9ucy5zbmRFbmFibGUpIHsKLSsgICAgaWYgKHNvdW5kLmVtcHR5KCkgfHwgIUFwcDo6Z2V0KCku b3B0aW9ucygpLnNuZEVuYWJsZSkgewotICAgICAgICAgcmV0dXJuOwotICAgICB9Ci0gCi1kaWZm IC0tZ2l0IGEvcnRndWkvc3BsYXNoLmNjIGIvcnRndWkvc3BsYXNoLmNjCi1pbmRleCAwMDE1YzQ4 NjQuLjJmMDc1ZGJmMCAxMDA2NDQKLS0tLSBhL3J0Z3VpL3NwbGFzaC5jYwotKysrIGIvcnRndWkv c3BsYXNoLmNjCi1AQCAtMjEsMTAgKzIxLDcgQEAKLSAjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4K LSAKLSAjaW5jbHVkZSAibXVsdGlsYW5nbWdyLmgiCi0tCi0tZXh0ZXJuIEdsaWI6OnVzdHJpbmcg Y3JlZGl0c1BhdGg7Ci0tZXh0ZXJuIEdsaWI6OnVzdHJpbmcgbGljZW5zZVBhdGg7Ci0tZXh0ZXJu IEdsaWI6OnVzdHJpbmcgdmVyc2lvblN0cmluZzsKLSsjaW5jbHVkZSAicnRlbmdpbmUvcnRhcHAu aCIKLSAKLSBTcGxhc2hJbWFnZTo6U3BsYXNoSW1hZ2UgKCkgOiBzdXJmYWNlKG5ldyBSVFN1cmZh Y2UoInNwbGFzaC5zdmciKSkKLSB7Ci1AQCAtNTAsNyArNDcsNyBAQCBib29sIFNwbGFzaEltYWdl Ojpvbl9kcmF3KGNvbnN0IDo6Q2Fpcm86OlJlZlB0cjwgQ2Fpcm86OkNvbnRleHQ+ICZjcikKLSAg ICAgICAgIGNvbnRleHQtPnNldF9mb250X2Rlc2NyaXB0aW9uIChmb250ZCk7Ci0gCi0gICAgICAg ICBpbnQgdywgaDsKLS0gICAgICAgIEdsaWI6OnVzdHJpbmcgdmVyc2lvblN0cih2ZXJzaW9uU3Ry aW5nKTsKLSsgICAgICAgIEdsaWI6OnVzdHJpbmcgdmVyc2lvblN0cihBcHA6OlZFUlNJT04pOwot IAotICAgICAgICAgdmVyc2lvbiA9IGNyZWF0ZV9wYW5nb19sYXlvdXQgKHZlcnNpb25TdHIpOwot ICAgICAgICAgdmVyc2lvbi0+c2V0X3RleHQodmVyc2lvblN0cik7Ci1AQCAtMTIwLDcgKzExNyw3 IEBAIFNwbGFzaDo6U3BsYXNoIChHdGs6OldpbmRvdyYgcGFyZW50KSA6IEd0azo6RGlhbG9nKE0o IkdFTkVSQUxfQUJPVVQiKSwgcGFyZW50LCB0Ci0gICAgIHNwbGFzaEltYWdlLT5zaG93ICgpOwot IAotICAgICAvLyBUYWIgMjogdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHZlcnNp b24KLS0gICAgc3RkOjpzdHJpbmcgYnVpbGRGaWxlTmFtZSA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1l IChjcmVkaXRzUGF0aCwgIkFib3V0VGhpc0J1aWxkLnR4dCIpOwotKyAgICBzdGQ6OnN0cmluZyBi dWlsZEZpbGVOYW1lID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUgKEFwcDo6Z2V0KCkuY3JlZGl0c1Bh dGgoKSwgIkFib3V0VGhpc0J1aWxkLnR4dCIpOwotIAotICAgICBpZiAoIEdsaWI6OmZpbGVfdGVz dChidWlsZEZpbGVOYW1lLCAoR2xpYjo6RklMRV9URVNUX0VYSVNUUykpICkgewotICAgICAgICAg RklMRSAqZiA9IGdfZm9wZW4gKGJ1aWxkRmlsZU5hbWUuY19zdHIgKCksICJydCIpOwotQEAgLTE1 MSw3ICsxNDgsNyBAQCBTcGxhc2g6OlNwbGFzaCAoR3RrOjpXaW5kb3cmIHBhcmVudCkgOiBHdGs6 OkRpYWxvZyhNKCJHRU5FUkFMX0FCT1VUIiksIHBhcmVudCwgdAotICAgICB9Ci0gCi0gICAgIC8v IFRhYiAzOiB0aGUgY3JlZGl0cwotLSAgICBzdGQ6OnN0cmluZyBjcmVkaXRzRmlsZU5hbWUgPSBH bGliOjpidWlsZF9maWxlbmFtZSAoY3JlZGl0c1BhdGgsICJBVVRIT1JTLnR4dCIpOwotKyAgICBz dGQ6OnN0cmluZyBjcmVkaXRzRmlsZU5hbWUgPSBHbGliOjpidWlsZF9maWxlbmFtZSAoQXBwOjpn ZXQoKS5jcmVkaXRzUGF0aCgpLCAiQVVUSE9SUy50eHQiKTsKLSAKLSAgICAgaWYgKCBHbGliOjpm aWxlX3Rlc3QoY3JlZGl0c0ZpbGVOYW1lLCAoR2xpYjo6RklMRV9URVNUX0VYSVNUUykpICkgewot ICAgICAgICAgRklMRSAqZiA9IGdfZm9wZW4gKGNyZWRpdHNGaWxlTmFtZS5jX3N0ciAoKSwgInJ0 Iik7Ci1AQCAtMTgzLDcgKzE4MCw3IEBAIFNwbGFzaDo6U3BsYXNoIChHdGs6OldpbmRvdyYgcGFy ZW50KSA6IEd0azo6RGlhbG9nKE0oIkdFTkVSQUxfQUJPVVQiKSwgcGFyZW50LCB0Ci0gICAgIH0K LSAKLSAgICAgLy8gVGFiIDQ6IHRoZSBsaWNlbnNlCi0tICAgIHN0ZDo6c3RyaW5nIGxpY2Vuc2VG aWxlTmFtZSA9IEdsaWI6OmJ1aWxkX2ZpbGVuYW1lIChsaWNlbnNlUGF0aCwgIkxJQ0VOU0UiKTsK LSsgICAgc3RkOjpzdHJpbmcgbGljZW5zZUZpbGVOYW1lID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUg KEFwcDo6Z2V0KCkubGljZW5zZVBhdGgoKSwgIkxJQ0VOU0UiKTsKLSAKLSAgICAgaWYgKCBHbGli OjpmaWxlX3Rlc3QobGljZW5zZUZpbGVOYW1lLCAoR2xpYjo6RklMRV9URVNUX0VYSVNUUykpICkg ewotICAgICAgICAgRklMRSAqZiA9IGdfZm9wZW4gKGxpY2Vuc2VGaWxlTmFtZS5jX3N0ciAoKSwg InJ0Iik7Ci1AQCAtMjE2LDcgKzIxMyw3IEBAIFNwbGFzaDo6U3BsYXNoIChHdGs6OldpbmRvdyYg cGFyZW50KSA6IEd0azo6RGlhbG9nKE0oIkdFTkVSQUxfQUJPVVQiKSwgcGFyZW50LCB0Ci0gICAg IH0KLSAKLSAgICAgLy8gVGFiIDU6IHRoZSBSZWxlYXNlIE5vdGVzCi0tICAgIHN0ZDo6c3RyaW5n IHJlbGVhc2VOb3Rlc0ZpbGVOYW1lID0gR2xpYjo6YnVpbGRfZmlsZW5hbWUgKGNyZWRpdHNQYXRo LCAiUkVMRUFTRV9OT1RFUy50eHQiKTsKLSsgICAgc3RkOjpzdHJpbmcgcmVsZWFzZU5vdGVzRmls ZU5hbWUgPSBHbGliOjpidWlsZF9maWxlbmFtZSAoQXBwOjpnZXQoKS5jcmVkaXRzUGF0aCgpLCAi UkVMRUFTRV9OT1RFUy50eHQiKTsKLSAKLSAgICAgaWYgKCBHbGliOjpmaWxlX3Rlc3QocmVsZWFz ZU5vdGVzRmlsZU5hbWUsIChHbGliOjpGSUxFX1RFU1RfRVhJU1RTKSkgKSB7Ci0gICAgICAgICBG SUxFICpmID0gZ19mb3BlbiAocmVsZWFzZU5vdGVzRmlsZU5hbWUuY19zdHIgKCksICJydCIpOwot ZGlmZiAtLWdpdCBhL3J0Z3VpL3RocmVzaG9sZGFkanVzdGVyLmNjIGIvcnRndWkvdGhyZXNob2xk YWRqdXN0ZXIuY2MKLWluZGV4IDU1NDVhOWY0My4uOTUwZTI0NjJmIDEwMDY0NAotLS0tIGEvcnRn dWkvdGhyZXNob2xkYWRqdXN0ZXIuY2MKLSsrKyBiL3J0Z3VpL3RocmVzaG9sZGFkanVzdGVyLmNj Ci1AQCAtODAsNyArODAsNyBAQCB2b2lkIFRocmVzaG9sZEFkanVzdGVyOjppbml0T2JqZWN0IChH bGliOjp1c3RyaW5nIGxhYmVsLCBib29sIGVkaXRlZGNiKQotIAotICAgICBhZGRNb2RlID0gZmFs c2U7Ci0gCi0tICAgIGRlbGF5ID0gb3B0aW9ucy5hZGp1c3Rlck1pbkRlbGF5OwotKyAgICBkZWxh eSA9IEFwcDo6Z2V0KCkub3B0aW9ucygpLmFkanVzdGVyTWluRGVsYXk7Ci0gCi0gICAgIHNldF9u YW1lKCJUaHJlc2hvbGRBZGp1c3RlciIpOwotIAotZGlmZiAtLWdpdCBhL3J0Z3VpL3RodW1iYnJv d3NlcmJhc2UuY2MgYi9ydGd1aS90aHVtYmJyb3dzZXJiYXNlLmNjCi1pbmRleCAxNWFkODgzMWUu LjY0OTQ3NjIzMiAxMDA2NDQKLS0tLSBhL3J0Z3VpL3RodW1iYnJvd3NlcmJhc2UuY2MKLSsrKyBi L3J0Z3VpL3RodW1iYnJvd3NlcmJhc2UuY2MKLUBAIC0zMCw3ICszMCw3IEBACi0gdXNpbmcgbmFt ZXNwYWNlIHN0ZDsKLSAKLSBUaHVtYkJyb3dzZXJCYXNlOjpUaHVtYkJyb3dzZXJCYXNlICgpCi0t ICAgIDogbG9jYXRpb24oVEhMT0NfRklMRUJST1dTRVIpLCBpbnNwZWN0b3IobnVsbHB0ciksIGlz SW5zcGVjdG9yQWN0aXZlKGZhbHNlKSwgZXZlbnRUaW1lKDApLCBsYXN0Q2xpY2tlZChudWxscHRy KSwgYW5jaG9yKG51bGxwdHIpLCBwcmV2aWV3SGVpZ2h0KG9wdGlvbnMudGh1bWJTaXplKSwgbnVt T2ZDb2xzKDEpLCBsYXN0Um93SGVpZ2h0KDApLCBhcnJhbmdlbWVudChUQl9Ib3Jpem9udGFsKQot KyAgICA6IGxvY2F0aW9uKFRITE9DX0ZJTEVCUk9XU0VSKSwgaW5zcGVjdG9yKG51bGxwdHIpLCBp c0luc3BlY3RvckFjdGl2ZShmYWxzZSksIGV2ZW50VGltZSgwKSwgbGFzdENsaWNrZWQobnVsbHB0 ciksIGFuY2hvcihudWxscHRyKSwgcHJldmlld0hlaWdodChBcHA6OmdldCgpLm9wdGlvbnMoKS50 aHVtYlNpemUpLCBudW1PZkNvbHMoMSksIGxhc3RSb3dIZWlnaHQoMCksIGFycmFuZ2VtZW50KFRC X0hvcml6b250YWwpCi0gewotICAgICBpblcgPSAtMTsKLSAgICAgaW5IID0gLTE7Ci1AQCAtMTEw MSwxMCArMTEwMSwxMSBAQCB2b2lkIFRodW1iQnJvd3NlckJhc2U6OnJlc29ydCAoKQotICAgICB7 Ci0gICAgICAgICBNWVdSSVRFUkxPQ0sobCwgZW50cnlSVyk7Ci0gCi0rICAgICAgICBjb25zdCBh dXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgICAgICBzdGQ6OnNvcnQo Ci0gICAgICAgICAgICAgZmQuYmVnaW4oKSwKLSAgICAgICAgICAgICBmZC5lbmQoKSwKLS0gICAg ICAgICAgICBbXShjb25zdCBUaHVtYkJyb3dzZXJFbnRyeUJhc2UqIGEsIGNvbnN0IFRodW1iQnJv d3NlckVudHJ5QmFzZSogYikKLSsgICAgICAgICAgICBbJl0oY29uc3QgVGh1bWJCcm93c2VyRW50 cnlCYXNlKiBhLCBjb25zdCBUaHVtYkJyb3dzZXJFbnRyeUJhc2UqIGIpCi0gICAgICAgICAgICAg ewotICAgICAgICAgICAgICAgICBib29sIGx0ID0gYS0+Y29tcGFyZSgqYiwgb3B0aW9ucy5zb3J0 TWV0aG9kKTsKLSAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuc29ydERlc2NlbmRpbmcg PyAhbHQgOiBsdDsKLUBAIC0xMTI5LDYgKzExMzAsNyBAQCB2b2lkIFRodW1iQnJvd3NlckJhc2U6 Onpvb21DaGFuZ2VkIChib29sIHpvb21JbikKLSAgICAgaW50IG5ld0hlaWdodCA9IDA7Ci0gICAg IGludCBvcHRUaHVtYlNpemUgPSBnZXRUaHVtYm5haWxIZWlnaHQoKTsKLSAKLSsgICAgY29uc3Qg YXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBpZiAoem9vbUluKQot ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcHRpb25zLnRodW1ibmFpbFpvb21SYXRp b3Muc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICBuZXdIZWlnaHQgPSAoaW50KShvcHRpb25z LnRodW1ibmFpbFpvb21SYXRpb3NbaV0gKiBnZXRNYXhUaHVtYm5haWxIZWlnaHQoKSk7Ci1AQCAt MTIxMiw2ICsxMjE0LDcgQEAgdm9pZCBUaHVtYkJyb3dzZXJCYXNlOjplbmFibGVUYWJNb2RlKGJv b2wgZW5hYmxlKQotICAgICBsb2NhdGlvbiA9IGVuYWJsZSA/IFRITE9DX0VESVRPUiA6IFRITE9D X0ZJTEVCUk9XU0VSOwotICAgICBhcnJhbmdlbWVudCA9IGVuYWJsZSA/IFRodW1iQnJvd3NlckJh c2U6OlRCX0hvcml6b250YWwgOiBUaHVtYkJyb3dzZXJCYXNlOjpUQl9WZXJ0aWNhbDsKLSAKLSsg ICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBpZiAo KCFvcHRpb25zLnNhbWVUaHVtYlNpemUgJiYgKG9wdGlvbnMudGh1bWJTaXplVGFiICE9IG9wdGlv bnMudGh1bWJTaXplKSkgfHwgKG9wdGlvbnMuc2hvd0ZpbGVOYW1lcyB8fCBvcHRpb25zLmZpbG1T dHJpcFNob3dGaWxlTmFtZXMpKSB7Ci0gCi0gICAgICAgICBNWVdSSVRFUkxPQ0sobCwgZW50cnlS Vyk7Ci1AQCAtMTI0OCwxMiArMTI1MSwxMyBAQCB2b2lkIFRodW1iQnJvd3NlckJhc2U6Omluc2Vy dEVudHJ5IChUaHVtYkJyb3dzZXJFbnRyeUJhc2UqIGVudHJ5KQotICAgICB7Ci0gICAgICAgICBN WVdSSVRFUkxPQ0sobCwgZW50cnlSVyk7Ci0gCi0rICAgICAgICBjb25zdCBhdXRvJiBvcHRpb25z ID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgICAgICBmZC5pbnNlcnQoCi0gICAgICAgICAg ICAgc3RkOjpsb3dlcl9ib3VuZCgKLSAgICAgICAgICAgICAgICAgZmQuYmVnaW4oKSwKLSAgICAg ICAgICAgICAgICAgZmQuZW5kKCksCi0gICAgICAgICAgICAgICAgIGVudHJ5LAotLSAgICAgICAg ICAgICAgICBbXShjb25zdCBUaHVtYkJyb3dzZXJFbnRyeUJhc2UqIGEsIGNvbnN0IFRodW1iQnJv d3NlckVudHJ5QmFzZSogYikKLSsgICAgICAgICAgICAgICAgWyZdKGNvbnN0IFRodW1iQnJvd3Nl ckVudHJ5QmFzZSogYSwgY29uc3QgVGh1bWJCcm93c2VyRW50cnlCYXNlKiBiKQotICAgICAgICAg ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBib29sIGx0ID0gYS0+Y29tcGFyZSgqYiwg b3B0aW9ucy5zb3J0TWV0aG9kKTsKLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25z LnNvcnREZXNjZW5kaW5nID8gIWx0IDogbHQ7Ci1kaWZmIC0tZ2l0IGEvcnRndWkvdGh1bWJicm93 c2VyYmFzZS5oIGIvcnRndWkvdGh1bWJicm93c2VyYmFzZS5oCi1pbmRleCA4YzFlYzQ5YzguLjli M2E5MjdkOSAxMDA2NDQKLS0tLSBhL3J0Z3VpL3RodW1iYnJvd3NlcmJhc2UuaAotKysrIGIvcnRn dWkvdGh1bWJicm93c2VyYmFzZS5oCi1AQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKLSBwcm90 ZWN0ZWQ6Ci0gICAgIHZpcnR1YWwgaW50IGdldE1heFRodW1ibmFpbEhlaWdodCgpIGNvbnN0Ci0g ICAgIHsKLS0gICAgICAgIHJldHVybiBvcHRpb25zLm1heFRodW1ibmFpbEhlaWdodDsgICAgLy8g RGlmZmVycyBiZXR3ZWVuIGJhdGNoIGFuZCBmaWxlCi0rICAgICAgICByZXR1cm4gQXBwOjpnZXQo KS5vcHRpb25zKCkubWF4VGh1bWJuYWlsSGVpZ2h0OyAgICAvLyBEaWZmZXJzIGJldHdlZW4gYmF0 Y2ggYW5kIGZpbGUKLSAgICAgfQotICAgICB2aXJ0dWFsIHZvaWQgc2F2ZVRodW1ibmFpbEhlaWdo dCAoaW50IGhlaWdodCkgPSAwOwotICAgICB2aXJ0dWFsIGludCAgZ2V0VGh1bWJuYWlsSGVpZ2h0 ICgpID0gMDsKLWRpZmYgLS1naXQgYS9ydGd1aS90aHVtYmJyb3dzZXJlbnRyeWJhc2UuY2MgYi9y dGd1aS90aHVtYmJyb3dzZXJlbnRyeWJhc2UuY2MKLWluZGV4IGZkM2Y3ZDExMS4uYTQ3YzBjYTgz IDEwMDY0NAotLS0tIGEvcnRndWkvdGh1bWJicm93c2VyZW50cnliYXNlLmNjCi0rKysgYi9ydGd1 aS90aHVtYmJyb3dzZXJlbnRyeWJhc2UuY2MKLUBAIC0yNjMsNiArMjYzLDcgQEAgdm9pZCBUaHVt YkJyb3dzZXJFbnRyeUJhc2U6OnVwZGF0ZUJhY2tCdWZmZXIgKCkKLSAgICAgaW50IGlzdGFydHgg PSBwcmV4OwotICAgICBpbnQgaXN0YXJ0eSA9IHByZXk7Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9w dGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaWYgKChwYXJlbnQtPmdldExvY2F0 aW9uKCkgIT0gVGh1bWJCcm93c2VyQmFzZTo6VEhMT0NfRURJVE9SICYmIG9wdGlvbnMuc2hvd0Zp bGVOYW1lcyAmJiBvcHRpb25zLm92ZXJsYXllZEZpbGVOYW1lcykKLSAgICAgICAgICAgICB8fCAo cGFyZW50LT5nZXRMb2NhdGlvbigpID09IFRodW1iQnJvd3NlckJhc2U6OlRITE9DX0VESVRPUiAm JiBvcHRpb25zLmZpbG1TdHJpcFNob3dGaWxlTmFtZXMgJiYgb3B0aW9ucy5maWxtU3RyaXBPdmVy bGF5ZWRGaWxlTmFtZXMpKSB7Ci0gICAgICAgICBjYy0+YmVnaW5fbmV3X3BhdGggKCk7Ci1AQCAt NDUzLDYgKzQ1NCw4IEBAIHZvaWQgVGh1bWJCcm93c2VyRW50cnlCYXNlOjpnZXRUZXh0U2l6ZXMg KGludCYgaW5mb3csIGludCYgaW5mb2gpCi0gICAgIGluZm93ID0gMDsKLSAKLSAgICAgaWYgKHdp dGhGaWxlbmFtZSA9PSBXRk5BTUVfRlVMTCkgewotKyAgICAgICAgY29uc3QgYXV0byYgb3B0aW9u cyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotKwotICAgICAgICAgLy8gZGF0ZXRpbWUKLSAgICAg ICAgIGZvbnRkLnNldF93ZWlnaHQgKFBhbmdvOjpXRUlHSFRfTk9STUFMKTsKLSAgICAgICAgIGNv bnRleHQtPnNldF9mb250X2Rlc2NyaXB0aW9uIChmb250ZCk7Ci1AQCAtNTAzLDYgKzUwNiw3IEBA IHZvaWQgVGh1bWJCcm93c2VyRW50cnlCYXNlOjpyZXNpemUgKGludCBoKQotICAgICAgICAgYnV0 dG9uU2V0LT5nZXRNaW5pbWFsRGltZW5zaW9ucyAoYnN3LCBic2gpOwotICAgICB9Ci0gCi0rICAg IGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgaWYgKHBh cmVudC0+Z2V0TG9jYXRpb24oKSA9PSBUaHVtYkJyb3dzZXJCYXNlOjpUSExPQ19GSUxFQlJPV1NF UikgewotICAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0ZpbGVOYW1lcykgewotICAgICAgICAgICAg IHdpdGhGaWxlbmFtZSA9IFdGTkFNRV9GVUxMOwotQEAgLTczOCw2ICs3NDIsNyBAQCBzdGQ6OnR1 cGxlPEdsaWI6OnVzdHJpbmcsIGJvb2w+IFRodW1iQnJvd3NlckVudHJ5QmFzZTo6Z2V0VG9vbFRp cCAoaW50IHgsIGludCB5KQotICAgICBpZiAoaW5zaWRlKHgsIHkpICYmIHRvb2x0aXAuZW1wdHko KSkgewotICAgICAgICAgdG9vbHRpcCA9IGRpc3BuYW1lOwotIAotKyAgICAgICAgY29uc3QgYXV0 byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICAgICAgaWYgKHdpdGhGaWxl bmFtZSA8IFdGTkFNRV9GVUxMKSB7Ci0gICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmJTaG93RGF0 ZVRpbWUgJiYgIWRhdGV0aW1lbGluZS5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgIHRvb2x0 aXAgKz0gR2xpYjo6dXN0cmluZygiXG4iKSArIGRhdGV0aW1lbGluZTsKLWRpZmYgLS1naXQgYS9y dGd1aS90aHVtYm5haWwuY2MgYi9ydGd1aS90aHVtYm5haWwuY2MKLWluZGV4IGU3ZjExNzEwMS4u MGY2M2RhZTViIDEwMDY0NAotLS0tIGEvcnRndWkvdGh1bWJuYWlsLmNjCi0rKysgYi9ydGd1aS90 aHVtYm5haWwuY2MKLUBAIC03NCw2ICs3NCw3IEBAIGJvb2wgQ1BCRHVtcCgKLSAgICAgICAgIHJl dHVybiBmYWxzZTsKLSAgICAgfQotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpn ZXQoKS5vcHRpb25zKCk7Ci0gICAgIHRyeSB7Ci0gICAgICAgICBrZi0+c2V0X3N0cmluZyAoIlJU IEdlbmVyYWwiLCAiQ2FjaGVQYXRoIiwgb3B0aW9ucy5jYWNoZUJhc2VEaXIpOwotICAgICAgICAg a2YtPnNldF9zdHJpbmcgKCJSVCBHZW5lcmFsIiwgIkFwcFZlcnNpb24iLCBSVFZFUlNJT04pOwot QEAgLTM2MSw2ICszNjIsNyBAQCB2b2lkIFRodW1ibmFpbDo6X2dlbmVyYXRlVGh1bWJuYWlsSW1h Z2UoKQotICAgICB0cHAgPSBudWxscHRyOwotICAgICBkZWxldGVbXSBsYXN0SW1nOwotICAgICBs YXN0SW1nID0gbnVsbHB0cjsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCku b3B0aW9ucygpOwotICAgICB0dyA9IG9wdGlvbnMubWF4VGh1bWJuYWlsV2lkdGg7Ci0gICAgIHRo ID0gb3B0aW9ucy5tYXhUaHVtYm5haWxIZWlnaHQ7Ci0gICAgIGltZ1JhdGlvID0gLTEuOwotQEAg LTQ3Nyw2ICs0NzksNyBAQCBydGVuZ2luZTo6cHJvY3BhcmFtczo6UHJvY1BhcmFtcyogVGh1bWJu YWlsOjpjcmVhdGVQcm9jUGFyYW1zRm9yVXBkYXRlKGJvb2wgcmV0dQotICAgICAvLyB0cnkgdG8g bG9hZCB0aGUgbGFzdCBzYXZlZCBwYXJhbWV0ZXJzIGZyb20gdGhlIGNhY2hlIG9yIGZyb20gdGhl IHBhcmFtZmlsZSBmaWxlCi0gICAgIFByb2NQYXJhbXMqIGxkcHJvZiA9IG51bGxwdHI7Ci0gCi0r ICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgR2xp Yjo6dXN0cmluZyBkZWZQcm9mID0gZ2V0VHlwZSgpID09IEZUX1JhdyA/IG9wdGlvbnMuZGVmUHJv ZlJhdyA6IG9wdGlvbnMuZGVmUHJvZkltZzsKLSAKLSAgICAgY29uc3QgQ2FjaGVJbWFnZURhdGEq IGNmcyA9IGdldENhY2hlSW1hZ2VEYXRhKCk7Ci1AQCAtNDg2LDggKzQ4OSw4IEBAIHJ0ZW5naW5l Ojpwcm9jcGFyYW1zOjpQcm9jUGFyYW1zKiBUaHVtYm5haWw6OmNyZWF0ZVByb2NQYXJhbXNGb3JV cGRhdGUoYm9vbCByZXR1Ci0gCi0gICAgIGNvbnN0IEdsaWI6OnVzdHJpbmcgb3V0Rk5hbWUgPQot ICAgICAgICAgKG9wdGlvbnMucGFyYW1zTG9hZExvY2F0aW9uID09IFBMTF9JbnB1dCAmJiBvcHRp b25zLnNhdmVQYXJhbXNGaWxlKSA/Ci0tICAgICAgICBmbmFtZSArIHBhcmFtRmlsZUV4dGVuc2lv biA6Ci0tICAgICAgICBnZXRDYWNoZUZpbGVOYW1lKCJwcm9maWxlcyIsIHBhcmFtRmlsZUV4dGVu c2lvbik7Ci0rICAgICAgICBmbmFtZSArIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04gOgotKyAg ICAgICAgZ2V0Q2FjaGVGaWxlTmFtZSgicHJvZmlsZXMiLCBBcHA6OlBBUkFNX0ZJTEVfRVhURU5T SU9OKTsKLSAKLSAgICAgaWYgKCFydW5fY3BiKSB7Ci0gICAgICAgICBpZiAoZGVmUHJvZiA9PSBE RUZQUk9GSUxFX0RZTkFNSUMgJiYgY3JlYXRlICYmIGNmcyAmJiBjZnMtPmV4aWZWYWxpZCkgewot QEAgLTUxOSw3ICs1MjIsNyBAQCBydGVuZ2luZTo6cHJvY3BhcmFtczo6UHJvY1BhcmFtcyogVGh1 bWJuYWlsOjpjcmVhdGVQcm9jUGFyYW1zRm9yVXBkYXRlKGJvb2wgcmV0dQotICAgICAgICAgR2xp Yjo6dXN0cmluZyB0bXBGaWxlTmFtZSggR2xpYjo6YnVpbGRfZmlsZW5hbWUob3B0aW9ucy5jYWNo ZUJhc2VEaXIsIEdsaWI6OnVzdHJpbmc6OmNvbXBvc2UoIkNQQl90ZW1wXyUxLnR4dCIsIGluZGV4 KyspKSApOwotIAotICAgICAgICAgQ1BCRHVtcCh0bXBGaWxlTmFtZSwgZm5hbWUsIG91dEZOYW1l LAotLSAgICAgICAgICAgICAgICBkZWZhdWx0UHBhcmFtc1BhdGggPT0gREVGUFJPRklMRV9JTlRF Uk5BTCA/IERFRlBST0ZJTEVfSU5URVJOQUwgOiBHbGliOjpidWlsZF9maWxlbmFtZShkZWZhdWx0 UHBhcmFtc1BhdGgsIEdsaWI6OnBhdGhfZ2V0X2Jhc2VuYW1lKGRlZlByb2YpICsgcGFyYW1GaWxl RXh0ZW5zaW9uKSwgY2ZzLCBmbGFnZ2luZ01vZGUpOwotKyAgICAgICAgICAgICAgICBkZWZhdWx0 UHBhcmFtc1BhdGggPT0gREVGUFJPRklMRV9JTlRFUk5BTCA/IERFRlBST0ZJTEVfSU5URVJOQUwg OiBHbGliOjpidWlsZF9maWxlbmFtZShkZWZhdWx0UHBhcmFtc1BhdGgsIEdsaWI6OnBhdGhfZ2V0 X2Jhc2VuYW1lKGRlZlByb2YpICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVOU0lPTiksIGNmcywgZmxh Z2dpbmdNb2RlKTsKLSAKLSAgICAgICAgIC8vIEZvciB0aGUgZmlsZW5hbWUgZXRjLiBkbyBOT1Qg dXNlIHN0cmVhbXMsIHNpbmNlIHRoZXkgYXJlIG5vdCBVVEY4IHNhZmUKLSAgICAgICAgIEdsaWI6 OnVzdHJpbmcgY21kTGluZSA9IG9wdGlvbnMuQ1BCUGF0aCArIEdsaWI6OnVzdHJpbmcoIiBcIiIp ICsgdG1wRmlsZU5hbWUgKyBHbGliOjp1c3RyaW5nKCJcIiIpOwotQEAgLTU2NywyMiArNTcwLDIy IEBAIHZvaWQgVGh1bWJuYWlsOjpsb2FkUHJvY1BhcmFtcygpCi0gICAgIHBwYXJhbXNWYWxpZCA9 IGZhbHNlOwotICAgICBwcGFyYW1zLT5zZXREZWZhdWx0cygpOwotIAotLSAgICBpZiAob3B0aW9u cy5wYXJhbXNMb2FkTG9jYXRpb24gPT0gUExMX0lucHV0KSB7Ci0rICAgIGlmIChBcHA6OmdldCgp Lm9wdGlvbnMoKS5wYXJhbXNMb2FkTG9jYXRpb24gPT0gUExMX0lucHV0KSB7Ci0gICAgICAgICAv LyB0cnkgdG8gbG9hZCBpdCBmcm9tIHBhcmFtcyBmaWxlIG5leHQgdG8gdGhlIGltYWdlIGZpbGUK LS0gICAgICAgIGNvbnN0IGludCBwcHJlcyA9IHBwYXJhbXMtPmxvYWQoZm5hbWUgKyBwYXJhbUZp bGVFeHRlbnNpb24pOwotKyAgICAgICAgY29uc3QgaW50IHBwcmVzID0gcHBhcmFtcy0+bG9hZChm bmFtZSArIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04pOwotICAgICAgICAgcHBhcmFtc1ZhbGlk ID0gIXBwcmVzICYmIHBwYXJhbXMtPnBwVmVyc2lvbiA+PSAyMjA7Ci0gCi0gICAgICAgICAvLyBp ZiBubyBzdWNjZXNzLCB0cnkgdG8gbG9hZCB0aGUgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb2Nw YXJhbXMKLSAgICAgICAgIGlmICghcHBhcmFtc1ZhbGlkKSB7Ci0tICAgICAgICAgICAgcHBhcmFt c1ZhbGlkID0gIXBwYXJhbXMtPmxvYWQoZ2V0Q2FjaGVGaWxlTmFtZSgicHJvZmlsZXMiLCBwYXJh bUZpbGVFeHRlbnNpb24pKTsKLSsgICAgICAgICAgICBwcGFyYW1zVmFsaWQgPSAhcHBhcmFtcy0+ bG9hZChnZXRDYWNoZUZpbGVOYW1lKCJwcm9maWxlcyIsIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJ T04pKTsKLSAgICAgICAgIH0KLSAgICAgfSBlbHNlIHsKLSAgICAgICAgIC8vIHRyeSB0byBsb2Fk IGl0IGZyb20gY2FjaGUKLS0gICAgICAgIHBwYXJhbXNWYWxpZCA9ICFwcGFyYW1zLT5sb2FkKGdl dENhY2hlRmlsZU5hbWUoInByb2ZpbGVzIiwgcGFyYW1GaWxlRXh0ZW5zaW9uKSk7Ci0rICAgICAg ICBwcGFyYW1zVmFsaWQgPSAhcHBhcmFtcy0+bG9hZChnZXRDYWNoZUZpbGVOYW1lKCJwcm9maWxl cyIsIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04pKTsKLSAKLSAgICAgICAgIC8vIGlmIG5vIHN1 Y2Nlc3MsIHRyeSB0byBsb2FkIGl0IGZyb20gcGFyYW1zIGZpbGUgbmV4dCB0byB0aGUgaW1hZ2Ug ZmlsZQotICAgICAgICAgaWYgKCFwcGFyYW1zVmFsaWQpIHsKLS0gICAgICAgICAgICBjb25zdCBp bnQgcHByZXMgPSBwcGFyYW1zLT5sb2FkKGZuYW1lICsgcGFyYW1GaWxlRXh0ZW5zaW9uKTsKLSsg ICAgICAgICAgICBjb25zdCBpbnQgcHByZXMgPSBwcGFyYW1zLT5sb2FkKGZuYW1lICsgQXBwOjpQ QVJBTV9GSUxFX0VYVEVOU0lPTik7Ci0gICAgICAgICAgICAgcHBhcmFtc1ZhbGlkID0gIXBwcmVz ICYmIHBwYXJhbXMtPnBwVmVyc2lvbiA+PSAyMjA7Ci0gICAgICAgICB9Ci0gICAgIH0KLUBAIC02 MjAsMTcgKzYyMywxNyBAQCB2b2lkIFRodW1ibmFpbDo6Y2xlYXJQcm9jUGFyYW1zIChpbnQgd2hv Q2xlYXJlZEl0KQotICAgICAgICAgICAgIHVwZGF0ZUNhY2hlKCk7Ci0gICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgIC8vIHJlbW92ZSBwYXJhbSBmaWxlIGZyb20gY2FjaGUKLS0gICAgICAg ICAgICBHbGliOjp1c3RyaW5nIGZuYW1lXyA9IGdldENhY2hlRmlsZU5hbWUgKCJwcm9maWxlcyIs IHBhcmFtRmlsZUV4dGVuc2lvbik7Ci0rICAgICAgICAgICAgR2xpYjo6dXN0cmluZyBmbmFtZV8g PSBnZXRDYWNoZUZpbGVOYW1lICgicHJvZmlsZXMiLCBBcHA6OlBBUkFNX0ZJTEVfRVhURU5TSU9O KTsKLSAgICAgICAgICAgICBnX3JlbW92ZSAoZm5hbWVfLmNfc3RyICgpKTsKLSAKLSAgICAgICAg ICAgICAvLyByZW1vdmUgcGFyYW0gZmlsZSBsb2NhdGVkIG5leHQgdG8gdGhlIGZpbGUKLS0gICAg ICAgICAgICBmbmFtZV8gPSBmbmFtZSArIHBhcmFtRmlsZUV4dGVuc2lvbjsKLSsgICAgICAgICAg ICBmbmFtZV8gPSBmbmFtZSArIEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT047Ci0gICAgICAgICAg ICAgZ19yZW1vdmUgKGZuYW1lXy5jX3N0ciAoKSk7Ci0gCi0tICAgICAgICAgICAgZm5hbWVfID0g cmVtb3ZlRXh0ZW5zaW9uKGZuYW1lKSArIHBhcmFtRmlsZUV4dGVuc2lvbjsKLSsgICAgICAgICAg ICBmbmFtZV8gPSByZW1vdmVFeHRlbnNpb24oZm5hbWUpICsgQXBwOjpQQVJBTV9GSUxFX0VYVEVO U0lPTjsKLSAgICAgICAgICAgICBnX3JlbW92ZSAoZm5hbWVfLmNfc3RyICgpKTsKLSAKLS0gICAg ICAgICAgICBpZiAoY2ZzLmZvcm1hdCA9PSBGVF9SYXcgJiYgb3B0aW9ucy5pbnRlcm5hbFRodW1i SWZVbnRvdWNoZWQgJiYgY2ZzLnRodW1iSW1nVHlwZSAhPSBDYWNoZUltYWdlRGF0YTo6UVVJQ0tf VEhVTUJOQUlMKSB7Ci0rICAgICAgICAgICAgaWYgKGNmcy5mb3JtYXQgPT0gRlRfUmF3ICYmIEFw cDo6Z2V0KCkub3B0aW9ucygpLmludGVybmFsVGh1bWJJZlVudG91Y2hlZCAmJiBjZnMudGh1bWJJ bWdUeXBlICE9IENhY2hlSW1hZ2VEYXRhOjpRVUlDS19USFVNQk5BSUwpIHsKLSAgICAgICAgICAg ICAgICAgLy8gcmVnZW5lcmF0ZSB0aHVtYm5haWwsIGllIGxvYWQgdGhlIHF1aWNrIHRodW1iIGFn YWluLiBGb3IgdGhlIHJhcmUgZm9ybWF0cyBub3Qgc3VwcG9ydGluZyBxdWljayB0aHVtYnMgdGhp cyB3aWxsCi0gICAgICAgICAgICAgICAgIC8vIGJlIGEgYml0IHNsb3cgYXMgYSBuZXcgZnVsbCB0 aHVtYm5haWwgd2lsbCBiZSBnZW5lcmF0ZWQgdW5uZWNlc3NhcmlseSwgYnV0IGN1cnJlbnRseSB0 aGVyZSBpcyBubyB3YXkgdG8gcHJlLWNoZWNrCi0gICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBm b3JtYXQgc3VwcG9ydHMgcXVpY2sgdGh1bWJzLgotQEAgLTc0OCw4ICs3NTEsOCBAQCB2b2lkIFRo dW1ibmFpbDo6aW1hZ2VEZXZlbG9wZWQgKCkKLSAgICAgY2ZzLnJlY2VudGx5U2F2ZWQgPSB0cnVl OwotICAgICBjZnMuc2F2ZSAoZ2V0Q2FjaGVGaWxlTmFtZSAoImRhdGEiLCAiLnR4dCIpKTsKLSAK LS0gICAgaWYgKG9wdGlvbnMuc2F2ZVBhcmFtc0NhY2hlKSB7Ci0tICAgICAgICBwcGFyYW1zLT5z YXZlIChnZXRDYWNoZUZpbGVOYW1lICgicHJvZmlsZXMiLCBwYXJhbUZpbGVFeHRlbnNpb24pKTsK LSsgICAgaWYgKEFwcDo6Z2V0KCkub3B0aW9ucygpLnNhdmVQYXJhbXNDYWNoZSkgewotKyAgICAg ICAgcHBhcmFtcy0+c2F2ZSAoZ2V0Q2FjaGVGaWxlTmFtZSAoInByb2ZpbGVzIiwgQXBwOjpQQVJB TV9GSUxFX0VYVEVOU0lPTikpOwotICAgICB9Ci0gfQotIAotQEAgLTgzOSw2ICs4NDIsNyBAQCB2 b2lkIFRodW1ibmFpbDo6Z2V0VGh1bWJuYWlsU2l6ZShpbnQgJncsIGludCAmaCwgY29uc3QgcnRl bmdpbmU6OnByb2NwYXJhbXM6OlBybwotICAgICAgICAgdyA9IHR3XyAqIGggLyB0aF87Ci0gICAg IH0KLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwot ICAgICBpZiAodyA+IG9wdGlvbnMubWF4VGh1bWJuYWlsV2lkdGgpIHsKLSAgICAgICAgIGNvbnN0 IGZsb2F0IHMgPSBzdGF0aWNfY2FzdDxmbG9hdD4ob3B0aW9ucy5tYXhUaHVtYm5haWxXaWR0aCkg LyB3OwotICAgICAgICAgdyA9IG9wdGlvbnMubWF4VGh1bWJuYWlsV2lkdGg7Ci1AQCAtOTMxLDYg KzkzNSw3IEBAIHJ0ZW5naW5lOjpJSW1hZ2U4KiBUaHVtYm5haWw6OnVwZ3JhZGVUaHVtYkltYWdl IChjb25zdCBydGVuZ2luZTo6cHJvY3BhcmFtczo6UHJvCi0gCi0gdm9pZCBUaHVtYm5haWw6Omdl bmVyYXRlRXhpZkRhdGVUaW1lU3RyaW5ncyAoKQotIHsKLSsgICAgY29uc3QgYXV0byYgb3B0aW9u cyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotICAgICBpZiAoY2ZzLnRpbWVWYWxpZCkgewotICAg ICAgICAgc3RkOjpzdHJpbmcgZGF0ZUZvcm1hdCA9IG9wdGlvbnMuZGF0ZUZvcm1hdDsKLSAgICAg ICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3RyOwotQEAgLTExMDAsNyArMTEwNSw3IEBAIHZvaWQg VGh1bWJuYWlsOjpfbG9hZFRodW1ibmFpbChib29sIGZpcnN0VHJpYWwpCi0gewotIAotICAgICB0 dyA9IC0xOwotLSAgICB0aCA9IG9wdGlvbnMubWF4VGh1bWJuYWlsSGVpZ2h0OwotKyAgICB0aCA9 IEFwcDo6Z2V0KCkub3B0aW9ucygpLm1heFRodW1ibmFpbEhlaWdodDsKLSAgICAgZGVsZXRlIHRw cDsKLSAgICAgdHBwID0gbmV3IHJ0ZW5naW5lOjpUaHVtYm5haWwgKCk7Ci0gICAgIHRwcC0+aXNS YXcgPSAoY2ZzLmZvcm1hdCA9PSAoaW50KSBGVF9SYXcpOwotQEAgLTExOTUsOSArMTIwMCwxMCBA QCB2b2lkIFRodW1ibmFpbDo6dXBkYXRlQ2FjaGUgKGJvb2wgdXBkYXRlUFBhcmFtcywgYm9vbCB1 cGRhdGVDYWNoZUltYWdlRGF0YSkKLSAgICAgdXBkYXRlUHJvY1BhcmFtc1Byb3BlcnRpZXMoKTsK LSAKLSAgICAgaWYgKHVwZGF0ZVBQYXJhbXMgJiYgcHBhcmFtc1ZhbGlkKSB7Ci0rICAgICAgICBj b25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgICAgICBwcGFy YW1zLT5zYXZlICgKLS0gICAgICAgICAgICBvcHRpb25zLnNhdmVQYXJhbXNGaWxlICA/IGZuYW1l ICsgcGFyYW1GaWxlRXh0ZW5zaW9uIDogIiIsCi0tICAgICAgICAgICAgb3B0aW9ucy5zYXZlUGFy YW1zQ2FjaGUgPyBnZXRDYWNoZUZpbGVOYW1lICgicHJvZmlsZXMiLCBwYXJhbUZpbGVFeHRlbnNp b24pIDogIiIsCi0rICAgICAgICAgICAgb3B0aW9ucy5zYXZlUGFyYW1zRmlsZSAgPyBmbmFtZSAr IEFwcDo6UEFSQU1fRklMRV9FWFRFTlNJT04gOiAiIiwKLSsgICAgICAgICAgICBvcHRpb25zLnNh dmVQYXJhbXNDYWNoZSA/IGdldENhY2hlRmlsZU5hbWUgKCJwcm9maWxlcyIsIEFwcDo6UEFSQU1f RklMRV9FWFRFTlNJT04pIDogIiIsCi0gICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgKTsKLSAg ICAgfQotQEAgLTEyOTIsNiArMTI5OCw3IEBAIGJvb2wgVGh1bWJuYWlsOjpvcGVuRGVmYXVsdFZp ZXdlcihpbnQgZGVzdGluYXRpb24pCi0gI2lmZGVmIF9XSU4zMgotICAgICBHbGliOjp1c3RyaW5n IG9wZW5GTmFtZTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0 aW9ucygpOwotICAgICBpZiAoZGVzdGluYXRpb24gPT0gMSkgewotICAgICAgICAgb3BlbkZOYW1l ID0gR2xpYjo6dXN0cmluZzo6Y29tcG9zZSAoIiUxLiUyIiwgQmF0Y2hRdWV1ZTo6Y2FsY0F1dG9G aWxlTmFtZUJhc2UoZm5hbWUpLCBvcHRpb25zLnNhdmVGb3JtYXRCYXRjaC5mb3JtYXQpOwotIAot QEAgLTEzODIsNiArMTM4OSw4IEBAIHZvaWQgVGh1bWJuYWlsOjpsb2FkUHJvcGVydGllcygpCi0g ICAgIC8vIGdldCBpbml0aWFsIHJhbmsgZnJvbSBjYWNoZSBvciBpbWFnZSBtZXRhZGF0YQotICAg ICBnZXRSYW5rRnJvbU1ldGFkYXRhKGNmcywgZm5hbWUsIHByb3BlcnRpZXMucmFuay52YWx1ZSk7 Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSsK LSAgICAgLy8gdXBkYXRlIHJhbmsgYW5kIGNvbG9yIGZyb20gcHJvY3BhcmFtcyBvciB4bXAgc2lk ZWNhcgotICAgICAvLyBsb2FkIHRyYXNoIGZyb20gcHJvY3BhcmFtcwotICAgICBpZiAocHBhcmFt c1ZhbGlkKSB7Ci1AQCAtMTQyMyw2ICsxNDMyLDggQEAgdm9pZCBUaHVtYm5haWw6OnVwZGF0ZVBy b2NQYXJhbXNQcm9wZXJ0aWVzKGJvb2wgZm9yY2VVcGRhdGUpCi0gICAgICAgICByZXR1cm4gcnRl bmdpbmU6OkV4aXYyTWV0YWRhdGE6OmdldFhtcFNpZGVjYXIoZm5hbWUpOwotICAgICB9KTsKLSAK LSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9ucygpOwotKwotICAg ICAvLyBzYXZlIHByb2NwYXJhbXMgcmFuayBhbmQgY29sb3IgYWxzbyB3aGVuIG9wdGlvbnMudGh1 bWJuYWlsUmFua0NvbG9yTW9kZSA9PSBPcHRpb25zOjpUaHVtYm5haWxQcm9wZXJ0eU1vZGU6OlhN UAotICAgICAvLyBzbyB0aGV5J2xsIGJlIGtlcHQgaW4gc3luYwotICAgICAvLyBSYW5rIGNhbiBi ZSAtMSB0byBwcmlvcml0aXplIHRoZSByYW5rIGluIHRoZSBtZXRhZGF0YS4gSWYgdGhlIG1ldGFk YXRhCi1AQCAtMTQ2NSw3ICsxNDc2LDcgQEAgdm9pZCBUaHVtYm5haWw6OnNhdmVYTVBTaWRlY2Fy UHJvcGVydGllcygpCi0gICAgICAgICByZXR1cm47Ci0gICAgIH0KLSAKLS0gICAgaWYgKG9wdGlv bnMudGh1bWJuYWlsUmFua0NvbG9yTW9kZSAhPSBPcHRpb25zOjpUaHVtYm5haWxQcm9wZXJ0eU1v ZGU6OlhNUCkgewotKyAgICBpZiAoQXBwOjpnZXQoKS5vcHRpb25zKCkudGh1bWJuYWlsUmFua0Nv bG9yTW9kZSAhPSBPcHRpb25zOjpUaHVtYm5haWxQcm9wZXJ0eU1vZGU6OlhNUCkgewotICAgICAg ICAgcmV0dXJuOwotICAgICB9Ci0gCi1AQCAtMTQ5MCw2ICsxNTAxLDcgQEAgdm9pZCBUaHVtYm5h aWw6OnNhdmVYTVBTaWRlY2FyUHJvcGVydGllcygpCi0gCi0gdm9pZCBUaHVtYm5haWw6OnNhdmVN ZXRhZGF0YSgpCi0gewotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRp b25zKCk7Ci0gICAgIGlmIChvcHRpb25zLnJ0U2V0dGluZ3MubWV0YWRhdGFfeG1wX3N5bmMgIT0g cnRlbmdpbmU6OlNldHRpbmdzOjpNZXRhZGF0YVhtcFN5bmM6OlJFQURfV1JJVEUpIHsKLSAgICAg ICAgIHJldHVybjsKLSAgICAgfQotZGlmZiAtLWdpdCBhL3J0Z3VpL3RvbmVjdXJ2ZS5jYyBiL3J0 Z3VpL3RvbmVjdXJ2ZS5jYwotaW5kZXggOWZiNmUxN2UxLi5jODhkMTExY2IgMTAwNjQ0Ci0tLS0g YS9ydGd1aS90b25lY3VydmUuY2MKLSsrKyBiL3J0Z3VpL3RvbmVjdXJ2ZS5jYwotQEAgLTE3OCw2 ICsxNzgsNyBAQCBUb25lQ3VydmU6OlRvbmVDdXJ2ZSgpIDogRm9sZGFibGVUb29sUGFuZWwodGhp cywgVE9PTF9OQU1FLCBNKCJUUF9FWFBPU1VSRV9MQUJFTAotICAgICB0b25lQ3VydmVNb2RlLT5z ZXRfYWN0aXZlKDApOwotICAgICB0b25lQ3VydmVNb2RlLT5zZXRfdG9vbHRpcF90ZXh0KE0oIlRQ X0VYUE9TVVJFX1RDTU9ERV9MQUJFTDEiKSk7Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMgPSBBcHA6 OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGN1cnZlRWRpdG9yRyA9IG5ldyBDdXJ2ZUVkaXRv ckdyb3VwKG9wdGlvbnMubGFzdFRvbmVDdXJ2ZXNEaXIsIE0oIlRQX0VYUE9TVVJFX0NVUlZFRURJ VE9SMSIpKTsKLSAgICAgY3VydmVFZGl0b3JHLT5zZXRDdXJ2ZUxpc3RlbmVyKHRoaXMpOwotIAot ZGlmZiAtLWdpdCBhL3J0Z3VpL3Rvb2xwYW5lbGNvb3JkLmNjIGIvcnRndWkvdG9vbHBhbmVsY29v cmQuY2MKLWluZGV4IGRkOWMwMGFmNS4uMzJjMDRmNDE3IDEwMDY0NAotLS0tIGEvcnRndWkvdG9v bHBhbmVsY29vcmQuY2MKLSsrKyBiL3J0Z3VpL3Rvb2xwYW5lbGNvb3JkLmNjCi1AQCAtNDcwLDYg KzQ3MCw3IEBAIFRvb2xQYW5lbENvb3JkaW5hdG9yOjpUb29sUGFuZWxDb29yZGluYXRvciAoYm9v bCBiYXRjaCkgOiBpcGMgKG51bGxwdHIpLCBmYXZvcml0Ci0gICAgICAgICB2YlBhbmVsRW5kW2ld LT5wYWNrX3N0YXJ0KCppbWdQYW5lbEVuZFtpXSwgR3RrOjpQQUNLX1NIUklOSyk7Ci0gICAgICAg ICB2YlBhbmVsRW5kW2ldLT5zaG93X2FsbCgpOwotICAgICB9Ci0rICAgIGNvbnN0IGF1dG8mIG9w dGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgdXBkYXRlVlNjcm9sbGJhcnMob3B0 aW9ucy5oaWRlVFBWU2Nyb2xsYmFyKTsKLSAKLSAgICAgR3RrOjpCb3ggKmZhdm9yaXRlUGFuZWxD b250YWluZXIgPQotQEAgLTc2Myw2ICs3NjQsNyBAQCBib29sIFRvb2xQYW5lbENvb3JkaW5hdG9y Ojppc0Zhdm9yaXRhYmxlKFRvb2wgdG9vbCkKLSAKLSB2b2lkIFRvb2xQYW5lbENvb3JkaW5hdG9y Ojpub3RlYm9va1BhZ2VDaGFuZ2VkKEd0azo6V2lkZ2V0KiBwYWdlLCBndWludCBwYWdlX251bSkK LSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAg ICAgdXBkYXRlUGFuZWxUb29scyhwYWdlLCBvcHRpb25zLmZhdm9yaXRlcywgb3B0aW9ucy5jbG9u ZUZhdm9yaXRlVG9vbHMpOwotIAotICAgICAvLyBMb2NhbGxhYiBzcG90IGN1cnZlcyBhcmUgc2V0 IHZpc2libGUgaWYgYXQgbGVhc3Qgb25lIHBob3RvIGhhcyBiZWVuIGxvYWRlZCAodG8gYXZvaWQK LUBAIC0xNDI1LDYgKzE0MjcsNyBAQCB2b2lkIFRvb2xQYW5lbENvb3JkaW5hdG9yOjpjbG9zZUlt YWdlKCkKLSAKLSB2b2lkIFRvb2xQYW5lbENvb3JkaW5hdG9yOjpjbG9zZUFsbFRvb2xzKCkKLSB7 Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMoKTsKLSAgICAg Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcHRpb25zLnRwT3Blbi5zaXplKCk7ICsraSkgewotICAg ICAgICAgaWYgKGkgPCBleHBMaXN0LnNpemUoKSkgewotICAgICAgICAgICAgIGV4cExpc3RbaV0t PnNldF9leHBhbmRlZChmYWxzZSk7Ci1AQCAtMTQzNCw2ICsxNDM3LDcgQEAgdm9pZCBUb29sUGFu ZWxDb29yZGluYXRvcjo6Y2xvc2VBbGxUb29scygpCi0gCi0gdm9pZCBUb29sUGFuZWxDb29yZGlu YXRvcjo6b3BlbkFsbFRvb2xzKCkKLSB7Ci0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6 OmdldCgpLm9wdGlvbnMoKTsKLSAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcHRpb25zLnRw T3Blbi5zaXplKCk7ICsraSkgewotICAgICAgICAgaWYgKGkgPCBleHBMaXN0LnNpemUoKSkgewot ICAgICAgICAgICAgIGV4cExpc3RbaV0tPnNldF9leHBhbmRlZCh0cnVlKTsKLUBAIC0xNDQzLDYg KzE0NDcsNyBAQCB2b2lkIFRvb2xQYW5lbENvb3JkaW5hdG9yOjpvcGVuQWxsVG9vbHMoKQotIAot IHZvaWQgVG9vbFBhbmVsQ29vcmRpbmF0b3I6OnVwZGF0ZVRvb2xTdGF0ZSgpCi0gewotKyAgICBj b25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0gICAgIGlmIChvcHRp b25zLnRwT3Blbi5lbXB0eSgpKSB7Ci0gICAgICAgICBmb3IgKGF1dG8gZXhwYW5kZXIgOiBleHBM aXN0KSB7Ci0gICAgICAgICAgICAgZXhwYW5kZXItPnNldF9leHBhbmRlZChmYWxzZSk7Ci1AQCAt MTQ4NSw2ICsxNDkwLDcgQEAgdm9pZCBUb29sUGFuZWxDb29yZGluYXRvcjo6d3JpdGVPcHRpb25z KCkKLSAKLSAgICAgY3JvcC0+d3JpdGVPcHRpb25zKCk7Ci0gCi0rICAgIGF1dG8mIG9wdGlvbnMg PSBBcHA6OmdldCgpLm11dF9vcHRpb25zKCk7Ci0gICAgIGlmIChvcHRpb25zLmF1dG9TYXZlVHBP cGVuKSB7Ci0gICAgICAgICB3cml0ZVRvb2xFeHBhbmRlZFN0YXR1cyhvcHRpb25zLnRwT3Blbik7 Ci0gICAgIH0KLUBAIC0xOTU2LDYgKzE5NjIsNyBAQCB2b2lkIFRvb2xQYW5lbENvb3JkaW5hdG9y Ojp0b29sU2VsZWN0ZWQoVG9vbE1vZGUgdG9vbCkKLSAgICAgICAgICAgICBicmVhazsKLSAgICAg fQotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQoKS5vcHRpb25zKCk7Ci0g ICAgIHVwZGF0ZVRvb2xMb2NhdGlvbnMob3B0aW9ucy5mYXZvcml0ZXMsIG9wdGlvbnMuY2xvbmVG YXZvcml0ZVRvb2xzKTsKLSAKLSAgICAgbm90ZWJvb2tjb25uLmJsb2NrKGZhbHNlKTsKLWRpZmYg LS1naXQgYS9ydGd1aS92aWJyYW5jZS5jYyBiL3J0Z3VpL3ZpYnJhbmNlLmNjCi1pbmRleCBjOTI4 NTE5YzUuLmI1NTRkMmEzNCAxMDA2NDQKLS0tLSBhL3J0Z3VpL3ZpYnJhbmNlLmNjCi0rKysgYi9y dGd1aS92aWJyYW5jZS5jYwotQEAgLTY3LDYgKzY3LDcgQEAgVmlicmFuY2U6OlZpYnJhbmNlICgp IDogRm9sZGFibGVUb29sUGFuZWwodGhpcywgVE9PTF9OQU1FLCBNKCJUUF9WSUJSQU5DRV9MQUJF TCIKLSAgICAgcGFzdFNhdFRvZy0+c2V0X2FjdGl2ZSAodHJ1ZSk7Ci0gICAgIHBhY2tfc3RhcnQo KnBhc3RTYXRUb2csIEd0azo6UEFDS19TSFJJTkssIDApOwotIAotKyAgICBhdXRvJiBvcHRpb25z ID0gQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpOwotICAgICBjdXJ2ZUVkaXRvckdHID0gbmV3IEN1 cnZlRWRpdG9yR3JvdXAgKG9wdGlvbnMubGFzdFZpYnJhbmNlQ3VydmVzRGlyLCBNKCJUUF9WSUJS QU5DRV9DVVJWRUVESVRPUl9TS0lOVE9ORVNfTEFCRUwiKSk7Ci0gICAgIGN1cnZlRWRpdG9yR0ct PnNldEN1cnZlTGlzdGVuZXIgKHRoaXMpOwotIAotZGlmZiAtLWdpdCBhL3J0Z3VpL3dhdmVsZXQu Y2MgYi9ydGd1aS93YXZlbGV0LmNjCi1pbmRleCBmMWJlNWQxN2QuLjUwMjE3Y2Q0YSAxMDA2NDQK LS0tLSBhL3J0Z3VpL3dhdmVsZXQuY2MKLSsrKyBiL3J0Z3VpL3dhdmVsZXQuY2MKLUBAIC02NSwy MiArNjUsMjIgQEAgc3RkOjp2ZWN0b3I8R3JhZGllbnRNaWxlc3RvbmU+IG1ha2VXaG9sZUh1ZVJh bmdlKCkKLSAKLSBXYXZlbGV0OjpXYXZlbGV0KCkgOgotICAgICBGb2xkYWJsZVRvb2xQYW5lbCh0 aGlzLCBUT09MX05BTUUsIE0oIlRQX1dBVkVMRVRfTEFCRUwiKSwgdHJ1ZSwgdHJ1ZSksCi0tICAg IGN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3RXYXZlbGV0Q3Vy dmVzRGlyLCBNKCJUUF9XQVZFTEVUX0NPTlRFRElUIikpKSwKLS0gICAgLy9jdXJ2ZUVkaXRvckMo bmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0V2F2ZWxldEN1cnZlc0RpciwgTSgiVFBf V0FWRUxFVF9DT05UUkFTVEVESVQiKSkpLAotLSAgICBDQ1djdXJ2ZUVkaXRvckcobmV3IEN1cnZl RWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0V2F2ZWxldEN1cnZlc0RpciwgTSgiVFBfV0FWRUxFVF9D Q1VSVkUiKSkpLAotLSAgICBjdXJ2ZUVkaXRvcmJsKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlv bnMubGFzdFdhdmVsZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfQkxDVVJWRSIpKSksCi0tICAg IGN1cnZlRWRpdG9yUkVTKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdFdhdmVsZXRD dXJ2ZXNEaXIpKSwKLS0gICAgY3VydmVFZGl0b3JHQU0obmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0 aW9ucy5sYXN0V2F2ZWxldEN1cnZlc0RpcikpLAotKyAgICBjdXJ2ZUVkaXRvckcobmV3IEN1cnZl RWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3RXYXZlbGV0Q3VydmVzRGly LCBNKCJUUF9XQVZFTEVUX0NPTlRFRElUIikpKSwKLSsgICAgLy9jdXJ2ZUVkaXRvckMobmV3IEN1 cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3RXYXZlbGV0Q3VydmVz RGlyLCBNKCJUUF9XQVZFTEVUX0NPTlRSQVNURURJVCIpKSksCi0rICAgIENDV2N1cnZlRWRpdG9y RyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdFdhdmVs ZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfQ0NVUlZFIikpKSwKLSsgICAgY3VydmVFZGl0b3Ji bChuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdFdhdmVs ZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfQkxDVVJWRSIpKSksCi0rICAgIGN1cnZlRWRpdG9y UkVTKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0V2F2 ZWxldEN1cnZlc0RpcikpLAotKyAgICBjdXJ2ZUVkaXRvckdBTShuZXcgQ3VydmVFZGl0b3JHcm91 cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdFdhdmVsZXRDdXJ2ZXNEaXIpKSwKLSAgICAg c2VwYXJhdG9yTmV1dHJhbChHdGs6Om1hbmFnZShuZXcgR3RrOjpTZXBhcmF0b3IoR3RrOjpPUklF TlRBVElPTl9IT1JJWk9OVEFMKSkpLAotICAgICBzZXBhcmF0b3JlZGdlKEd0azo6bWFuYWdlKG5l dyBHdGs6OlNlcGFyYXRvcihHdGs6Ok9SSUVOVEFUSU9OX0hPUklaT05UQUwpKSksCi0tICAgIG9w YUN1cnZlRWRpdG9yRyhuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3RXYXZlbGV0Q3Vy dmVzRGlyLCBNKCJUUF9XQVZFTEVUX0NPTE9SVCIpKSksCi0tICAgIG9wYWNpdHlDdXJ2ZUVkaXRv ckcobmV3IEN1cnZlRWRpdG9yR3JvdXAob3B0aW9ucy5sYXN0V2F2ZWxldEN1cnZlc0RpciwgTSgi VFBfV0FWRUxFVF9PUEFDSVRZIikpKSwKLS0gICAgQ3VydmVFZGl0b3J3YXZub2lzZShuZXcgQ3Vy dmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3RXYXZlbGV0Q3VydmVzRGlyLCBNKCJUUF9XQVZFTEVU X0RFTk9JU0UiKSkpLAotLSAgICBDdXJ2ZUVkaXRvcndhdm5vaXNlaChuZXcgQ3VydmVFZGl0b3JH cm91cChvcHRpb25zLmxhc3RXYXZlbGV0Q3VydmVzRGlyLCBNKCJUUF9XQVZFTEVUX0RFTk9JU0VI IikpKSwKLS0gICAgQ3VydmVFZGl0b3J3YXZndWlkKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlv bnMubGFzdFdhdmVsZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfREVOT0lTRUdVSUQiKSkpLAot LSAgICBDdXJ2ZUVkaXRvcndhdmh1ZShuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3RX YXZlbGV0Q3VydmVzRGlyLCBNKCJUUF9XQVZFTEVUX0RFTk9JU0VIVUUiKSkpLAotLSAgICBvcGFj aXR5Q3VydmVFZGl0b3JXKG5ldyBDdXJ2ZUVkaXRvckdyb3VwKG9wdGlvbnMubGFzdFdhdmVsZXRD dXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfT1BBQ0lUWVciKSkpLAotLSAgICBvcGFjaXR5Q3VydmVF ZGl0b3JXTChuZXcgQ3VydmVFZGl0b3JHcm91cChvcHRpb25zLmxhc3RXYXZlbGV0Q3VydmVzRGly LCBNKCJUUF9XQVZFTEVUX09QQUNJVFlXTCIpKSksCi0rICAgIG9wYUN1cnZlRWRpdG9yRyhuZXcg Q3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdFdhdmVsZXRDdXJ2 ZXNEaXIsIE0oIlRQX1dBVkVMRVRfQ09MT1JUIikpKSwKLSsgICAgb3BhY2l0eUN1cnZlRWRpdG9y RyhuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRpb25zKCkubGFzdFdhdmVs ZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfT1BBQ0lUWSIpKSksCi0rICAgIEN1cnZlRWRpdG9y d2F2bm9pc2UobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLmxh c3RXYXZlbGV0Q3VydmVzRGlyLCBNKCJUUF9XQVZFTEVUX0RFTk9JU0UiKSkpLAotKyAgICBDdXJ2 ZUVkaXRvcndhdm5vaXNlaChuZXcgQ3VydmVFZGl0b3JHcm91cChBcHA6OmdldCgpLm11dF9vcHRp b25zKCkubGFzdFdhdmVsZXRDdXJ2ZXNEaXIsIE0oIlRQX1dBVkVMRVRfREVOT0lTRUgiKSkpLAot KyAgICBDdXJ2ZUVkaXRvcndhdmd1aWQobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBwOjpnZXQoKS5t dXRfb3B0aW9ucygpLmxhc3RXYXZlbGV0Q3VydmVzRGlyLCBNKCJUUF9XQVZFTEVUX0RFTk9JU0VH VUlEIikpKSwKLSsgICAgQ3VydmVFZGl0b3J3YXZodWUobmV3IEN1cnZlRWRpdG9yR3JvdXAoQXBw OjpnZXQoKS5tdXRfb3B0aW9ucygpLmxhc3RXYXZlbGV0Q3VydmVzRGlyLCBNKCJUUF9XQVZFTEVU X0RFTk9JU0VIVUUiKSkpLAotKyAgICBvcGFjaXR5Q3VydmVFZGl0b3JXKG5ldyBDdXJ2ZUVkaXRv ckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0V2F2ZWxldEN1cnZlc0RpciwgTSgi VFBfV0FWRUxFVF9PUEFDSVRZVyIpKSksCi0rICAgIG9wYWNpdHlDdXJ2ZUVkaXRvcldMKG5ldyBD dXJ2ZUVkaXRvckdyb3VwKEFwcDo6Z2V0KCkubXV0X29wdGlvbnMoKS5sYXN0V2F2ZWxldEN1cnZl c0RpciwgTSgiVFBfV0FWRUxFVF9PUEFDSVRZV0wiKSkpLAotICAgICBtZWRpYW4oR3RrOjptYW5h Z2UobmV3IEd0azo6Q2hlY2tCdXR0b24oTSgiVFBfV0FWRUxFVF9NRURJIikpKSksCi0gICAgIG1l ZGlhbmxldihHdGs6Om1hbmFnZShuZXcgR3RrOjpDaGVja0J1dHRvbihNKCJUUF9XQVZFTEVUX01F RElMRVYiKSkpKSwKLSAgICAgbGlua2VkZyhHdGs6Om1hbmFnZShuZXcgR3RrOjpDaGVja0J1dHRv bihNKCJUUF9XQVZFTEVUX0xJTktFREciKSkpKSwKLWRpZmYgLS1naXQgYS9ydGd1aS93aGl0ZWJh bGFuY2UuY2MgYi9ydGd1aS93aGl0ZWJhbGFuY2UuY2MKLWluZGV4IGMwYTY1ZjdmNC4uYzg0Mjhm MjU3IDEwMDY0NAotLS0tIGEvcnRndWkvd2hpdGViYWxhbmNlLmNjCi0rKysgYi9ydGd1aS93aGl0 ZWJhbGFuY2UuY2MKLUBAIC0yODEsNiArMjgxLDcgQEAgV2hpdGVCYWxhbmNlOjpXaGl0ZUJhbGFu Y2UgKCkgOiBGb2xkYWJsZVRvb2xQYW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQX1dCQUxBTkMK LSAgICAgc2V0RXhwYW5kQWxpZ25Qcm9wZXJ0aWVzKHNwb3RzaXplLCB0cnVlLCBmYWxzZSwgR3Rr OjpBTElHTl9GSUxMLCBHdGs6OkFMSUdOX0NFTlRFUik7Ci0gICAgIHNwb3RzaXplLT5hcHBlbmQg KCIyIik7Ci0gCi0rICAgIGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBBcHA6OmdldCgpLm9wdGlvbnMo KTsKLSAgICAgaWYgKG9wdGlvbnMud2hpdGVCYWxhbmNlU3BvdFNpemUgPT0gMikgewotICAgICAg ICAgc3BvdHNpemUtPnNldF9hY3RpdmUoMCk7Ci0gICAgIH0KLUBAIC03NDUsNyArNzQ2LDcgQEAg dm9pZCBXaGl0ZUJhbGFuY2U6OnNwb3RQcmVzc2VkICgpCi0gCi0gdm9pZCBXaGl0ZUJhbGFuY2U6 OnNwb3RTaXplQ2hhbmdlZCAoKQotIHsKLS0gICAgb3B0aW9ucy53aGl0ZUJhbGFuY2VTcG90U2l6 ZSA9IGdldFNpemUoKTsKLSsgICAgQXBwOjpnZXQoKS5tdXRfb3B0aW9ucygpLndoaXRlQmFsYW5j ZVNwb3RTaXplID0gZ2V0U2l6ZSgpOwotIAotICAgICBpZiAod2JsaXN0ZW5lcikgewotICAgICAg ICAgd2JsaXN0ZW5lci0+c3BvdFdCUmVxdWVzdGVkIChnZXRTaXplKCkpOwotQEAgLTc4NSw3ICs3 ODYsNyBAQCB2b2lkIFdoaXRlQmFsYW5jZTo6cmVhZCAoY29uc3QgUHJvY1BhcmFtcyogcHAsIGNv bnN0IFBhcmFtc0VkaXRlZCogcGVkaXRlZCkKLSAKLSAKLSAKLS0gICAgaWYob3B0aW9ucy5ydFNl dHRpbmdzLml0Y3diX2VuYWJsZSkgewotKyAgICBpZihBcHA6OmdldCgpLm9wdGlvbnMoKS5ydFNl dHRpbmdzLml0Y3diX2VuYWJsZSkgewotICAgICAgICAgaXRjd2JfZ3JlZW4tPnNob3coKTsKLSAg ICAgICAgIGl0Y3diX2FsZy0+c2hvdygpOwotICAgICAgICAgaXRjd2JfcHJpbS0+c2hvdygpOwot ZGlmZiAtLWdpdCBhL3J0Z3VpL3h0cmFuc3Byb2Nlc3MuY2MgYi9ydGd1aS94dHJhbnNwcm9jZXNz LmNjCi1pbmRleCBkZTJlMTQ3MjUuLjJiMmJlYWMyNCAxMDA2NDQKLS0tLSBhL3J0Z3VpL3h0cmFu c3Byb2Nlc3MuY2MKLSsrKyBiL3J0Z3VpL3h0cmFuc3Byb2Nlc3MuY2MKLUBAIC0yOSw3ICsyOSw3 IEBAIHVzaW5nIG5hbWVzcGFjZSBydGVuZ2luZTo6cHJvY3BhcmFtczsKLSAKLSBjb25zdCBHbGli Ojp1c3RyaW5nIFhUcmFuc1Byb2Nlc3M6OlRPT0xfTkFNRSA9ICJ4dHJhbnNwcm9jZXNzIjsKLSAK LS1YVHJhbnNQcm9jZXNzOjpYVHJhbnNQcm9jZXNzICgpIDogRm9sZGFibGVUb29sUGFuZWwodGhp cywgVE9PTF9OQU1FLCBNKCJUUF9SQVdfTEFCRUwiKSwgb3B0aW9ucy5wcmV2ZGVtbyAhPSBQRF9T aWRlY2FyKQotK1hUcmFuc1Byb2Nlc3M6OlhUcmFuc1Byb2Nlc3MgKCkgOiBGb2xkYWJsZVRvb2xQ YW5lbCh0aGlzLCBUT09MX05BTUUsIE0oIlRQX1JBV19MQUJFTCIpLCBBcHA6OmdldCgpLm9wdGlv bnMoKS5wcmV2ZGVtbyAhPSBQRF9TaWRlY2FyKQotIHsKLSAgICAgYXV0byBtID0gUHJvY0V2ZW50 TWFwcGVyOjpnZXRJbnN0YW5jZSgpOwotICAgICBFdkRlbW9zYWljQm9yZGVyID0gbS0+bmV3RXZl bnQoREVNT1NBSUMsICJISVNUT1JZX01TR19SQVdfQk9SREVSIik7Ci1AQCAtNzQsNiArNzQsNyBA QCBYVHJhbnNQcm9jZXNzOjpYVHJhbnNQcm9jZXNzICgpIDogRm9sZGFibGVUb29sUGFuZWwodGhp cywgVE9PTF9OQU1FLCBNKCJUUF9SQVdfTAotICAgICBoYjEtPnBhY2tfZW5kICgqbWV0aG9kLCBH dGs6OlBBQ0tfRVhQQU5EX1dJREdFVCwgNCk7Ci0gICAgIHBhY2tfc3RhcnQoICpoYjEsIEd0azo6 UEFDS19TSFJJTkssIDQpOwotIAotKyAgICBjb25zdCBhdXRvJiBvcHRpb25zID0gQXBwOjpnZXQo KS5vcHRpb25zKCk7Ci0gICAgIGR1YWxEZW1vc2FpY09wdGlvbnMgPSBHdGs6Om1hbmFnZSAobmV3 IEd0azo6Qm94KEd0azo6T1JJRU5UQVRJT05fVkVSVElDQUwpKTsKLSAKLSAgICAgZHVhbERlbW9z YWljQ29udHJhc3QgPSBHdGs6Om1hbmFnZShuZXcgQWRqdXN0ZXIgKE0oIlRQX1JBV19EVUFMREVN T1NBSUNDT05UUkFTVCIpLCAwLCAxMDAsIDEsIDIwKSk7Ci1kaWZmIC0tZ2l0IGEvcnRndWkveHRy YW5zcmF3ZXhwb3N1cmUuY2MgYi9ydGd1aS94dHJhbnNyYXdleHBvc3VyZS5jYwotaW5kZXggZTRj MWM1NWQwLi40OTZkMGQzMDggMTAwNjQ0Ci0tLS0gYS9ydGd1aS94dHJhbnNyYXdleHBvc3VyZS5j YwotKysrIGIvcnRndWkveHRyYW5zcmF3ZXhwb3N1cmUuY2MKLUBAIC0zOCw2ICszOCw3IEBAIFhU cmFuc1JBV0V4cG9zdXJlOjpYVHJhbnNSQVdFeHBvc3VyZSAoKSA6IEZvbGRhYmxlVG9vbFBhbmVs KHRoaXMsIFRPT0xfTkFNRSwgTSgiCi0gICAgIFBleEJsYWNrUmVkID0gR3RrOjptYW5hZ2UobmV3 IEFkanVzdGVyIChNKCJUUF9SQVdFWFBPU19CTEFDS19SRUQiKSwgLTIwNDgsIDIwNDgsIDEuMCwg MCkpOyAvL2JsYWNrIGxldmVsCi0gICAgIFBleEJsYWNrUmVkLT5zZXRBZGp1c3Rlckxpc3RlbmVy ICh0aGlzKTsKLSAKLSsgICAgY29uc3QgYXV0byYgb3B0aW9ucyA9IEFwcDo6Z2V0KCkub3B0aW9u cygpOwotICAgICBQZXhCbGFja1JlZC0+c2V0RGVsYXkoc3RkOjptYXgob3B0aW9ucy5hZGp1c3Rl ck1pbkRlbGF5LCBvcHRpb25zLmFkanVzdGVyTWF4RGVsYXkpKTsKLSAKLSAgICAgUGV4QmxhY2tS ZWQtPnNob3coKTsKLS0tIAotMi41MC4xCi0KCmRpZmYgLS1naXQgYS8wMDAxLUZpeC10eXBvcy5w YXRjaCBiLzAwMDEtRml4LXR5cG9zLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBiZDA4N2ZhLi4wMDAwMDAwCi0tLSBhLzAwMDEtRml4LXR5cG9zLnBhdGNoCisrKyAvZGV2L251 bGwKQEAgLTEsMzkgKzAsMCBAQAotRnJvbSBkMTJjYTk0ZDQyYzEzNzBkNzBmYjE0Y2MxODVkNDZh YWNhOWMwNWFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRGFuaWVsIEdhbyA8ZGFu aWVsLmdhby53b3JrQGdtYWlsLmNvbT4KLURhdGU6IFN1biwgMjQgQXVnIDIwMjUgMTE6Mzc6MDYg LTA0MDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IHR5cG9zCi0KLS0tLQotIHJ0Z3VpL2ZpbGVwYW5l bC5jYyB8IDIgKy0KLSBydGd1aS9tYWluLmNjICAgICAgfCAyICstCi0gMiBmaWxlcyBjaGFuZ2Vk LCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9ydGd1aS9m aWxlcGFuZWwuY2MgYi9ydGd1aS9maWxlcGFuZWwuY2MKLWluZGV4IGYwNjlmMDk5ZS4uMjhiZWU5 ODM5IDEwMDY0NAotLS0tIGEvcnRndWkvZmlsZXBhbmVsLmNjCi0rKysgYi9ydGd1aS9maWxlcGFu ZWwuY2MKLUBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBGaWxlUGFuZWw6OmluaXQgKCkKLSAgICAg ZGlyQnJvd3Nlci0+ZmlsbERpclRyZWUgKCk7Ci0gICAgIHBsYWNlc0Jyb3dzZXItPnJlZnJlc2hQ bGFjZXNMaXN0ICgpOwotIAotLSAgICBpZiAoIUFwcDo6Z2V0KCkuYXJndjAoKS5lbXB0eSgpICYm IEdsaWI6OmZpbGVfdGVzdCAoQXBwOjpnZXQoKS5hcmd2MSgpLCBHbGliOjpGSUxFX1RFU1RfRVhJ U1RTKSkgewotKyAgICBpZiAoIUFwcDo6Z2V0KCkuYXJndjEoKS5lbXB0eSgpICYmIEdsaWI6OmZp bGVfdGVzdCAoQXBwOjpnZXQoKS5hcmd2MSgpLCBHbGliOjpGSUxFX1RFU1RfRVhJU1RTKSkgewot ICAgICAgICAgR2xpYjo6dXN0cmluZyBkKEFwcDo6Z2V0KCkuYXJndjEoKSk7Ci0gICAgICAgICBp ZiAoIUdsaWI6OmZpbGVfdGVzdChkLCBHbGliOjpGSUxFX1RFU1RfSVNfRElSKSkgewotICAgICAg ICAgICAgIGQgPSBHbGliOjpwYXRoX2dldF9kaXJuYW1lKGQpOwotZGlmZiAtLWdpdCBhL3J0Z3Vp L21haW4uY2MgYi9ydGd1aS9tYWluLmNjCi1pbmRleCBkZWQ3MDc2YmUuLjE4MGU0M2Y1ZCAxMDA2 NDQKLS0tLSBhL3J0Z3VpL21haW4uY2MKLSsrKyBiL3J0Z3VpL21haW4uY2MKLUBAIC0xMzksNyAr MTM5LDcgQEAgaW50IHByb2Nlc3NMaW5lUGFyYW1zICggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkK LSAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyUGFyYW0gPT0gIi1naW1wIikgewotICAgICAg ICAgICAgICAgICAgICAgICAgIGFwcC5zZXRJc0dpbXBQbHVnaW4odHJ1ZSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgYXBwLnNldElzU2ltcGxlRWRpdG9yKHRydWUpOwotLSAgICAgICAgICAg ICAgICAgICAgICAgIGFwcC5zZXRJc1JlbW90ZSh0cnVlKTsKLSsgICAgICAgICAgICAgICAgICAg ICAgICBhcHAuc2V0SXNSZW1vdGUoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgICAgfQotIAotLS0gCi0yLjUxLjEKLQoKZGlmZiAtLWdp dCBhL3Jhd3RoZXJhcGVlLnNwZWMgYi9yYXd0aGVyYXBlZS5zcGVjCmluZGV4IDUwNjkzMjMuLjNj ZTA3OWYgMTAwNjQ0Ci0tLSBhL3Jhd3RoZXJhcGVlLnNwZWMKKysrIGIvcmF3dGhlcmFwZWUuc3Bl YwpAQCAtMTMsNyArMTMsNyBAQCBOYW1lOiAgICAgICAgICAgcmF3dGhlcmFwZWUKICVpZiAwJXs/ ZGV2ZWxvcG1lbnR9CiBWZXJzaW9uOiAgICAgICAgNS45fjIwMjIxMDAyZ2l0JXtzaG9ydGNvbW1p dH0KICVlbHNlCi1WZXJzaW9uOiAgICAgICAgNS4xMgorVmVyc2lvbjogICAgICAgIDUuMTMKICVl bmRpZgogUmVsZWFzZTogICAgICAgICVhdXRvcmVsZWFzZQogU3VtbWFyeTogICAgICAgIFJhdyBp bWFnZSBwcm9jZXNzaW5nIHNvZnR3YXJlCkBAIC0zMSwxMCArMzEsNiBAQCBTb3VyY2UyOiAgICAg ICAgUmVsZWFzZUluZm8uY21ha2UKIFNvdXJjZTA6ICAgICAgICBodHRwczovL2dpdGh1Yi5jb20v QmVlcDY1ODEvUmF3VGhlcmFwZWUvcmVsZWFzZXMvZG93bmxvYWQvJXt2ZXJzaW9ufS9yYXd0aGVy YXBlZS0le3ZlcnNpb259LnRhci54egogJWVuZGlmCiAKLSMgUGF0Y2ggdG8gZml4IHNlZ2ZhdWx0 IGF0IHN0YXJ0dXAKLSMgU2VlIHVwc3RyZWFtIHRpY2tldCBodHRwczovL2dpdGh1Yi5jb20vUmF3 VGhlcmFwZWUvUmF3VGhlcmFwZWUvaXNzdWVzLzc1MzIKLVBhdGNoOiAgICAgICAgICAwMDAxLUZp eC1zdGF0aWMtaW5pdC1vcmRlci1maWFzY28tY3Jhc2hlcy5wYXRjaAotUGF0Y2g6ICAgICAgICAg IDAwMDEtRml4LXR5cG9zLnBhdGNoCiAKIEJ1aWxkUmVxdWlyZXM6ICBjbWFrZQogQnVpbGRSZXF1 aXJlczogIGRlc2t0b3AtZmlsZS11dGlscwpAQCAtNDYsNiArNDIsNyBAQCBCdWlsZFJlcXVpcmVz OiAgbGliYXRvbWljCiBCdWlsZFJlcXVpcmVzOiAgcGtnY29uZmlnKGV4aXYyKSA+PSAwLjI0CiBC dWlsZFJlcXVpcmVzOiAgcGtnY29uZmlnKGV4cGF0KSA+PSAyLjEKIEJ1aWxkUmVxdWlyZXM6ICBw a2djb25maWcoZmZ0dzNmKQorQnVpbGRSZXF1aXJlczogIHBrZ2NvbmZpZyhmbXQpCiBCdWlsZFJl cXVpcmVzOiAgcGtnY29uZmlnKGdsaWItMi4wKSA+PSAyLjQ4CiBCdWlsZFJlcXVpcmVzOiAgcGtn Y29uZmlnKGdsaWJtbS0yLjQpID49IDIuNDgKIEJ1aWxkUmVxdWlyZXM6ICBwa2djb25maWcoZ3Rr Ky0zLjApID49IDMuMjQuMwpAQCAtMTA0LDYgKzEwMSw3IEBAIHJtIC1yZiBydGVuZ2luZS9saWJy YXcvCiAlZW5kaWYKICAgICAgICAgLURXSVRIX1NZU1RFTV9LTFQ9T04gXAogICAgICAgICAtRFdJ VEhfU1lTVEVNX0xJQlJBVz0iT04iIFwKKyAgICAgICAgLURXSVRIX1NZU1RFTV9GTVQ9Ik9OIiBc CiAgICAgICAgIC1EV0lUSF9KWEw9Ik9OIgogCiAlY21ha2VfYnVpbGQKQEAgLTExNCw3ICsxMTIs MTYgQEAgcm0gLXJmIHJ0ZW5naW5lL2xpYnJhdy8KIAogCiAjIFRoZXNlIGZpbGUgYXJlIHRha2Vu IGZyb20gdGhlIHJvb3QgYWxyZWFkeQotcm0gLXJmICV7YnVpbGRyb290fS8le19kYXRhZGlyfS9k b2MgCitybSAtcmYgJXtidWlsZHJvb3R9JXtfZGF0YWRpcn0vZG9jCisjIFJlbW92ZSBsaWNlbnNl IGZpbGVzIHdoaWNoIGRvbid0IHBlcnRhaW4gdG8gRmVkb3JhIGJpbmFyaWVzCisjIEZvbnQgb25s eSBpbnN0YWxsZWQgb24gV2luZG93cyBidWlsZHMKK3JtIC1yZiAle2J1aWxkcm9vdH0le19kYXRh ZGlyfS9saWNlbnNlcy8le25hbWV9L2xpY2Vuc2VzL0Ryb2lkU2Fuc01vbm9Eb3R0ZWQudHh0Cisj IFRoZXNlIGxpYnJhcmllcyBhcmUgbGlua2VkIHRvIHN5c3RlbSdzIHByb3ZpZGVkCisjIE5vIG5l ZWQgdG8gaW5zdGFsbCBsaWNlbnNlIGZpbGVzIC0gaHR0cHM6Ly9naXRodWIuY29tL1Jhd1RoZXJh cGVlL1Jhd1RoZXJhcGVlL2lzc3Vlcy83NzE4CitybSAtcmYgJXtidWlsZHJvb3R9JXtfZGF0YWRp cn0vbGljZW5zZXMvJXtuYW1lfS9saWNlbnNlcy97RXhwYXQsTGVuc2Z1bixMaWJSYXcsTHVuYVNW RyxjSlNPTixndGttbSxsY21zMixsaWJjYW5iZXJyYSxsaWJpcHRjZGF0YSxsaWJqeGwsbGlicnN2 ZyxsaWJ0aWZmLHRjbWFsbG9jfV9MSUNFTlNFCisjIE9ubHkgcmVsYXRlZCB0byBPU1ggYnVpbGRz CitybSAtcmYgJXtidWlsZHJvb3R9JXtfZGF0YWRpcn0vbGljZW5zZXMvJXtuYW1lfS9saWNlbnNl cy9vc3hfbGliaW9tcF9MSUNFTlNFLnR4dAorCiAKIAogJWNoZWNrCkBAIC0xMjQsNyArMTMxLDcg QEAgYXBwc3RyZWFtLXV0aWwgdmFsaWRhdGUtcmVsYXggLS1ub25ldCAle2J1aWxkcm9vdH0vJXtf ZGF0YWRpcn0vbWV0YWluZm8vY29tLiV7bmEKIAogJWZpbGVzCiAlZG9jIEFVVEhPUlMudHh0IFJF TEVBU0VfTk9URVMudHh0Ci0lbGljZW5zZSBMSUNFTlNFIGxpY2Vuc2VzL0Ryb2lkU2Fuc01vbm9E b3R0ZWQudHh0IGxpY2Vuc2VzL3NsZWVmX0xJQ0VOU0UudHh0IGxpY2Vuc2VzL2pkYXRhc3JjCisl bGljZW5zZSBMSUNFTlNFIGxpY2Vuc2VzL3NsZWVmX0xJQ0VOU0UudHh0IGxpY2Vuc2VzL2pwZWdf aWpnX0xJQ0VOU0UKICV7X21hbmRpcn0vbWFuMS8le25hbWV9LjEuZ3oKICV7X2JpbmRpcn0vJXtu YW1lfQogJXtfYmluZGlyfS8le25hbWV9LWNsaQoKZGlmZiAtLWdpdCBhL3NvdXJjZXMgYi9zb3Vy Y2VzCmluZGV4IDU2NjA3YWUuLjJiMWMwODYgMTAwNjQ0Ci0tLSBhL3NvdXJjZXMKKysrIGIvc291 cmNlcwpAQCAtMSArMSBAQAotU0hBNTEyIChyYXd0aGVyYXBlZS01LjEyLnRhci54eikgPSAwNTkw YTA4NTIzODViYzg1YmUyYTMzZTVmOTc4OTA0ZjNhMDUzODViNTcwMmY4OTYwYWRiNWFhZGU2N2Q1 NDkwMzcyNDU1MDZjODRhNTQxZDhhNDliY2M0OWZlN2I3MWM3NjViZTg3NTMzNmNiODZkZWI1YzAz ZmQ0ZTNmNGMyMworU0hBNTEyIChyYXd0aGVyYXBlZS01LjEzLnRhci54eikgPSBlYTJmNGY1ZDc0 OGNhNGM1MDIxNGQxZDY4NzIzZTI5MTgzMGY3NzU0NjU2NDE3YTRjMjYxZWJiZTViNzU3ZjhhYTJh ZmRiYjJiZjRiZTk5MDYwNTBkZTRjYjFmZDI3ODYxMjc3YTNmNWRmMDViMTQzODY1NjQzNDQ1OTZm MWFiNQo=