R2l0IGNvbW1pdCA5OGIyMGIwMzdjMjM3ZjBiZjA1Njg1MzczMDc0ZTNmMjExYmE4ODMzIGJ5IERt aXRyeSBLYXpha292LgpDb21taXR0ZWQgb24gMjcvMDYvMjAxNCBhdCAxMToxMC4KUHVzaGVkIGJ5 IGRrYXpha292IGludG8gYnJhbmNoICdtYXN0ZXInLgoKW0ZFQVRVUkVdIEltcGxlbWVudGVkICJE ZWxheWVkIFN0cm9rZSIgZmVhdHVyZSBmb3IgYnJ1c2ggc21vb3RoaW5nCgpUaGlzIHBhdGNoIGFk ZHMgdHdvIGltcHJvdmVtZW50cyB0byB0aGUgU3RhYmlsaXplciBhbGdvcml0aG0gaW1wbGVtZW50 ZWQKYnkgSnVhbiBMdWlzIEJveWEgR2FyY8OtYToKCjEpICJEZWxheWVkIFN0cm9rZSIgZmVhdHVy ZS4gSWYgZW5hYmxlZCB0aGUgYnJ1c2ggaGFzIGEgZGVhZCB6b25lLCB3aGVyZQogICBub3RoaW5n IGlzIHBhaW50ZWQuIFRoaXMgaXMgZXh0cmVtZWx5IGhhbmR5IHdoZW4gb25lIG5lZWRzIHRvIHBh aW50CiAgIGEgc21vb3RoIGxpbmUgd2l0aCBleHBsaWNpdCBhbmdsZXMuCgoyKSAiRmluaXNoIGxp bmUiIG9wdGlvbiBmb3IgdGhlIGJydXNoIHN0YW5pbGl6ZXIuIFdoZW4gb3B0aW9uIGlzIGRpc2Fi bGVkLAogICB0aGUgbGluZSB3aWxsIG5vdCBqdW1wIHRvIHRoZSBjdXJzb3IgcG9zaXRpb24gaW4g dGhlIGVuZCBvZiB0aGUgc3Ryb2tlLgoKQ0NNQUlMOmtpbWFnZXNob3BAa2RlLm9yZwoKTSAgKzYg ICAgLTAgICAga3JpdGEvaW1hZ2UvYnJ1c2hlbmdpbmUva2lzX3BhaW50X2luZm9ybWF0aW9uLmNj Ck0gICsxICAgIC0wICAgIGtyaXRhL2ltYWdlL2JydXNoZW5naW5lL2tpc19wYWludF9pbmZvcm1h dGlvbi5oCk0gICsxMDQgIC0zOCAgIGtyaXRhL3BsdWdpbnMvdG9vbHMvZGVmYXVsdHRvb2xzL2tp c190b29sX2JydXNoLmNjCk0gICsyNSAgIC0wICAgIGtyaXRhL3BsdWdpbnMvdG9vbHMvZGVmYXVs dHRvb2xzL2tpc190b29sX2JydXNoLmgKTSAgKzMwICAgLTAgICAga3JpdGEvdWkva2lzX2NvbmZp Zy5jYwpNICArOSAgICAtMCAgICBrcml0YS91aS9raXNfY29uZmlnLmgKTSAgKzM5ICAgLTUgICAg a3JpdGEvdWkvdG9vbC9raXNfc21vb3RoaW5nX29wdGlvbnMuY3BwCk0gICsxNyAgIC0wICAgIGty aXRhL3VpL3Rvb2wva2lzX3Ntb290aGluZ19vcHRpb25zLmgKTSAgKzEzICAgLTEgICAga3JpdGEv dWkvdG9vbC9raXNfdG9vbF9mcmVlaGFuZC5jYwpNICArMiAgICAtMSAgICBrcml0YS91aS90b29s L2tpc190b29sX2ZyZWVoYW5kLmgKTSAgKzEwMyAgLTYyICAga3JpdGEvdWkvdG9vbC9raXNfdG9v bF9mcmVlaGFuZF9oZWxwZXIuY3BwCk0gICsxMyAgIC00ICAgIGtyaXRhL3VpL3Rvb2wva2lzX3Rv b2xfZnJlZWhhbmRfaGVscGVyLmgKTSAgKzQyICAgLTAgICAga3JpdGEvdWkvdG9vbC9raXNfdG9v bF9wYWludC5jYwpNICArMyAgICAtMCAgICBrcml0YS91aS90b29sL2tpc190b29sX3BhaW50LmgK Cmh0dHA6Ly9jb21taXRzLmtkZS5vcmcvY2FsbGlncmEvOThiMjBiMDM3YzIzN2YwYmYwNTY4NTM3 MzA3NGUzZjIxMWJhODgzMwoKZGlmZiAtLWdpdCBhL2tyaXRhL2ltYWdlL2JydXNoZW5naW5lL2tp c19wYWludF9pbmZvcm1hdGlvbi5jYyBiL2tyaXRhL2ltYWdlL2JydXNoZW5naW5lL2tpc19wYWlu dF9pbmZvcm1hdGlvbi5jYwppbmRleCBmNjJiYWVhLi45NTJmNTFmIDEwMDY0NAotLS0gYS9rcml0 YS9pbWFnZS9icnVzaGVuZ2luZS9raXNfcGFpbnRfaW5mb3JtYXRpb24uY2MKKysrIGIva3JpdGEv aW1hZ2UvYnJ1c2hlbmdpbmUva2lzX3BhaW50X2luZm9ybWF0aW9uLmNjCkBAIC0zMjEsNiArMzIx LDEyIEBAIFFEZWJ1ZyBvcGVyYXRvcjw8KFFEZWJ1ZyBkYmcsIGNvbnN0IEtpc1BhaW50SW5mb3Jt YXRpb24gJmluZm8pCiAgICAgcmV0dXJuIGRiZy5zcGFjZSgpOwogfQogCitLaXNQYWludEluZm9y bWF0aW9uIEtpc1BhaW50SW5mb3JtYXRpb246Om1peChxcmVhbCB0LCBjb25zdCBLaXNQYWludElu Zm9ybWF0aW9uJiBwaTEsIGNvbnN0IEtpc1BhaW50SW5mb3JtYXRpb24mIHBpMikKK3sKKyAgICBR UG9pbnRGIHB0ID0gKDEgLSB0KSAqIHBpMS5wb3MoKSArIHQgKiBwaTIucG9zKCk7CisgICAgcmV0 dXJuIG1peChwdCwgdCwgcGkxLCBwaTIpOworfQorCiBLaXNQYWludEluZm9ybWF0aW9uIEtpc1Bh aW50SW5mb3JtYXRpb246Om1peChjb25zdCBRUG9pbnRGJiBwLCBxcmVhbCB0LCBjb25zdCBLaXNQ YWludEluZm9ybWF0aW9uJiBwaTEsIGNvbnN0IEtpc1BhaW50SW5mb3JtYXRpb24mIHBpMikKIHsK ICAgICBxcmVhbCBwcmVzc3VyZSA9ICgxIC0gdCkgKiBwaTEucHJlc3N1cmUoKSArIHQgKiBwaTIu cHJlc3N1cmUoKTsKZGlmZiAtLWdpdCBhL2tyaXRhL2ltYWdlL2JydXNoZW5naW5lL2tpc19wYWlu dF9pbmZvcm1hdGlvbi5oIGIva3JpdGEvaW1hZ2UvYnJ1c2hlbmdpbmUva2lzX3BhaW50X2luZm9y bWF0aW9uLmgKaW5kZXggMTU5OWZjMC4uOWIzYmU4ZiAxMDA2NDQKLS0tIGEva3JpdGEvaW1hZ2Uv YnJ1c2hlbmdpbmUva2lzX3BhaW50X2luZm9ybWF0aW9uLmgKKysrIGIva3JpdGEvaW1hZ2UvYnJ1 c2hlbmdpbmUva2lzX3BhaW50X2luZm9ybWF0aW9uLmgKQEAgLTE4NCw2ICsxODQsNyBAQCBwdWJs aWM6CiAgICAgCiAgICAgLy8vICgxLXQpICogcDEgKyB0ICogcDIKICAgICBzdGF0aWMgS2lzUGFp bnRJbmZvcm1hdGlvbiBtaXgoY29uc3QgUVBvaW50RiYgcCwgcXJlYWwgdCwgY29uc3QgS2lzUGFp bnRJbmZvcm1hdGlvbiYgcDEsIGNvbnN0IEtpc1BhaW50SW5mb3JtYXRpb24mIHAyKTsKKyAgICBz dGF0aWMgS2lzUGFpbnRJbmZvcm1hdGlvbiBtaXgocXJlYWwgdCwgY29uc3QgS2lzUGFpbnRJbmZv cm1hdGlvbiYgcGkxLCBjb25zdCBLaXNQYWludEluZm9ybWF0aW9uJiBwaTIpOwogICAgIHN0YXRp YyBxcmVhbCB0aWx0RGlyZWN0aW9uKGNvbnN0IEtpc1BhaW50SW5mb3JtYXRpb24mIGluZm8sIGJv b2wgbm9ybWFsaXplPXRydWUpOwogICAgIHN0YXRpYyBxcmVhbCB0aWx0RWxldmF0aW9uKGNvbnN0 IEtpc1BhaW50SW5mb3JtYXRpb24mIGluZm8sIHFyZWFsIG1heFRpbHRYPTYwLjAsIHFyZWFsIG1h eFRpbHRZPTYwLjAsIGJvb2wgbm9ybWFsaXplPXRydWUpOwogCmRpZmYgLS1naXQgYS9rcml0YS9w bHVnaW5zL3Rvb2xzL2RlZmF1bHR0b29scy9raXNfdG9vbF9icnVzaC5jYyBiL2tyaXRhL3BsdWdp bnMvdG9vbHMvZGVmYXVsdHRvb2xzL2tpc190b29sX2JydXNoLmNjCmluZGV4IDMxMDEyODYuLmJi ZTg4YjUgMTAwNjQ0Ci0tLSBhL2tyaXRhL3BsdWdpbnMvdG9vbHMvZGVmYXVsdHRvb2xzL2tpc190 b29sX2JydXNoLmNjCisrKyBiL2tyaXRhL3BsdWdpbnMvdG9vbHMvZGVmYXVsdHRvb2xzL2tpc190 b29sX2JydXNoLmNjCkBAIC00OCw3NCArNDgsODIgQEAgS2lzVG9vbEJydXNoOjp+S2lzVG9vbEJy dXNoKCkKIAogaW50IEtpc1Rvb2xCcnVzaDo6c21vb3RoaW5nVHlwZSgpIGNvbnN0CiB7Ci0gICAg cmV0dXJuIG1fc21vb3RoaW5nT3B0aW9ucy5zbW9vdGhpbmdUeXBlKCk7CisgICAgcmV0dXJuIHNt b290aGluZ09wdGlvbnMoKS0+c21vb3RoaW5nVHlwZSgpOwogfQogCiBib29sIEtpc1Rvb2xCcnVz aDo6c21vb3RoUHJlc3N1cmUoKSBjb25zdAogewotICAgIHJldHVybiBtX3Ntb290aGluZ09wdGlv bnMuc21vb3RoUHJlc3N1cmUoKTsKKyAgICByZXR1cm4gc21vb3RoaW5nT3B0aW9ucygpLT5zbW9v dGhQcmVzc3VyZSgpOwogfQogCiBpbnQgS2lzVG9vbEJydXNoOjpzbW9vdGhuZXNzUXVhbGl0eSgp IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc21vb3RoaW5nT3B0aW9ucy5zbW9vdGhuZXNzRGlzdGFu Y2UoKTsKKyAgICByZXR1cm4gc21vb3RoaW5nT3B0aW9ucygpLT5zbW9vdGhuZXNzRGlzdGFuY2Uo KTsKIH0KIAogcXJlYWwgS2lzVG9vbEJydXNoOjpzbW9vdGhuZXNzRmFjdG9yKCkgY29uc3QKIHsK LSAgICByZXR1cm4gbV9zbW9vdGhpbmdPcHRpb25zLnRhaWxBZ2dyZXNzaXZlbmVzcygpOworICAg IHJldHVybiBzbW9vdGhpbmdPcHRpb25zKCktPnRhaWxBZ2dyZXNzaXZlbmVzcygpOwogfQogCiB2 b2lkIEtpc1Rvb2xCcnVzaDo6c2xvdFNldFNtb290aGluZ1R5cGUoaW50IGluZGV4KQogewogICAg IHN3aXRjaCAoaW5kZXgpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIG1fc21vb3RoaW5nT3B0aW9u cy5zZXRTbW9vdGhpbmdUeXBlKEtpc1Ntb290aGluZ09wdGlvbnM6Ok5PX1NNT09USElORyk7Ci0g ICAgICAgIG1fc2xpZGVyU21vb3RobmVzc0Rpc3RhbmNlLT5zZXRFbmFibGVkKGZhbHNlKTsKLSAg ICAgICAgbV9zbGlkZXJUYWlsQWdncmVzc2l2ZW5lc3MtPnNldEVuYWJsZWQoZmFsc2UpOwotICAg ICAgICBtX2Noa1Ntb290aFByZXNzdXJlLT5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgbV9j aGtVc2VTY2FsYWJsZURpc3RhbmNlLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgc21vb3Ro aW5nT3B0aW9ucygpLT5zZXRTbW9vdGhpbmdUeXBlKEtpc1Ntb290aGluZ09wdGlvbnM6Ok5PX1NN T09USElORyk7CisgICAgICAgIHNob3dDb250cm9sKG1fc2xpZGVyU21vb3RobmVzc0Rpc3RhbmNl LCBmYWxzZSk7CisgICAgICAgIHNob3dDb250cm9sKG1fc2xpZGVyVGFpbEFnZ3Jlc3NpdmVuZXNz LCBmYWxzZSk7CisgICAgICAgIHNob3dDb250cm9sKG1fY2hrU21vb3RoUHJlc3N1cmUsIGZhbHNl KTsKKyAgICAgICAgc2hvd0NvbnRyb2wobV9jaGtVc2VTY2FsYWJsZURpc3RhbmNlLCBmYWxzZSk7 CisgICAgICAgIHNob3dDb250cm9sKG1fc2xpZGVyRGVsYXlEaXN0YW5jZSwgZmFsc2UpOworICAg ICAgICBzaG93Q29udHJvbChtX2Noa0ZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZSwgZmFsc2UpOwogICAg ICAgICBicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIG1fc21vb3RoaW5nT3B0aW9ucy5zZXRT bW9vdGhpbmdUeXBlKEtpc1Ntb290aGluZ09wdGlvbnM6OlNJTVBMRV9TTU9PVEhJTkcpOwotICAg ICAgICBtX3NsaWRlclNtb290aG5lc3NEaXN0YW5jZS0+c2V0RW5hYmxlZChmYWxzZSk7Ci0gICAg ICAgIG1fc2xpZGVyVGFpbEFnZ3Jlc3NpdmVuZXNzLT5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAg ICAgbV9jaGtTbW9vdGhQcmVzc3VyZS0+c2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIG1fY2hr VXNlU2NhbGFibGVEaXN0YW5jZS0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIHNtb290aGlu Z09wdGlvbnMoKS0+c2V0U21vb3RoaW5nVHlwZShLaXNTbW9vdGhpbmdPcHRpb25zOjpTSU1QTEVf U01PT1RISU5HKTsKKyAgICAgICAgc2hvd0NvbnRyb2wobV9zbGlkZXJTbW9vdGhuZXNzRGlzdGFu Y2UsIGZhbHNlKTsKKyAgICAgICAgc2hvd0NvbnRyb2wobV9zbGlkZXJUYWlsQWdncmVzc2l2ZW5l c3MsIGZhbHNlKTsKKyAgICAgICAgc2hvd0NvbnRyb2wobV9jaGtTbW9vdGhQcmVzc3VyZSwgZmFs c2UpOworICAgICAgICBzaG93Q29udHJvbChtX2Noa1VzZVNjYWxhYmxlRGlzdGFuY2UsIGZhbHNl KTsKKyAgICAgICAgc2hvd0NvbnRyb2wobV9zbGlkZXJEZWxheURpc3RhbmNlLCBmYWxzZSk7Cisg ICAgICAgIHNob3dDb250cm9sKG1fY2hrRmluaXNoU3RhYmlsaXplZEN1cnZlLCBmYWxzZSk7CiAg ICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgbV9zbW9vdGhpbmdPcHRpb25zLnNl dFNtb290aGluZ1R5cGUoS2lzU21vb3RoaW5nT3B0aW9uczo6V0VJR0hURURfU01PT1RISU5HKTsK LSAgICAgICAgbV9zbGlkZXJTbW9vdGhuZXNzRGlzdGFuY2UtPnNldEVuYWJsZWQodHJ1ZSk7Ci0g ICAgICAgIG1fc2xpZGVyVGFpbEFnZ3Jlc3NpdmVuZXNzLT5zZXRFbmFibGVkKHRydWUpOwotICAg ICAgICBtX2Noa1Ntb290aFByZXNzdXJlLT5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICBtX2No a1VzZVNjYWxhYmxlRGlzdGFuY2UtPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgIHNtb290aGlu Z09wdGlvbnMoKS0+c2V0U21vb3RoaW5nVHlwZShLaXNTbW9vdGhpbmdPcHRpb25zOjpXRUlHSFRF RF9TTU9PVEhJTkcpOworICAgICAgICBzaG93Q29udHJvbChtX3NsaWRlclNtb290aG5lc3NEaXN0 YW5jZSwgdHJ1ZSk7CisgICAgICAgIHNob3dDb250cm9sKG1fc2xpZGVyVGFpbEFnZ3Jlc3NpdmVu ZXNzLCB0cnVlKTsKKyAgICAgICAgc2hvd0NvbnRyb2wobV9jaGtTbW9vdGhQcmVzc3VyZSwgdHJ1 ZSk7CisgICAgICAgIHNob3dDb250cm9sKG1fY2hrVXNlU2NhbGFibGVEaXN0YW5jZSwgdHJ1ZSk7 CisgICAgICAgIHNob3dDb250cm9sKG1fc2xpZGVyRGVsYXlEaXN0YW5jZSwgZmFsc2UpOworICAg ICAgICBzaG93Q29udHJvbChtX2Noa0ZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZSwgZmFsc2UpOwogICAg ICAgICBicmVhazsKICAgICBjYXNlIDM6CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9zbW9vdGhp bmdPcHRpb25zLnNldFNtb290aGluZ1R5cGUoS2lzU21vb3RoaW5nT3B0aW9uczo6U1RBQklMSVpF Uik7Ci0gICAgICAgIG1fc2xpZGVyU21vb3RobmVzc0Rpc3RhbmNlLT5zZXRFbmFibGVkKHRydWUp OwotICAgICAgICBtX3NsaWRlclRhaWxBZ2dyZXNzaXZlbmVzcy0+c2V0RW5hYmxlZChmYWxzZSk7 Ci0gICAgICAgIG1fY2hrU21vb3RoUHJlc3N1cmUtPnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAg ICBtX2Noa1VzZVNjYWxhYmxlRGlzdGFuY2UtPnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICBz bW9vdGhpbmdPcHRpb25zKCktPnNldFNtb290aGluZ1R5cGUoS2lzU21vb3RoaW5nT3B0aW9uczo6 U1RBQklMSVpFUik7CisgICAgICAgIHNob3dDb250cm9sKG1fc2xpZGVyU21vb3RobmVzc0Rpc3Rh bmNlLCB0cnVlKTsKKyAgICAgICAgc2hvd0NvbnRyb2wobV9zbGlkZXJUYWlsQWdncmVzc2l2ZW5l c3MsIGZhbHNlKTsKKyAgICAgICAgc2hvd0NvbnRyb2wobV9jaGtTbW9vdGhQcmVzc3VyZSwgZmFs c2UpOworICAgICAgICBzaG93Q29udHJvbChtX2Noa1VzZVNjYWxhYmxlRGlzdGFuY2UsIGZhbHNl KTsKKyAgICAgICAgc2hvd0NvbnRyb2wobV9zbGlkZXJEZWxheURpc3RhbmNlLCB0cnVlKTsKKyAg ICAgICAgc2hvd0NvbnRyb2wobV9jaGtGaW5pc2hTdGFiaWxpemVkQ3VydmUsIHRydWUpOwogICAg IH0KICAgICBlbWl0IHNtb290aGluZ1R5cGVDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgS2lzVG9vbEJy dXNoOjpzbG90U2V0U21vb3RobmVzc0Rpc3RhbmNlKHFyZWFsIGRpc3RhbmNlKQogewotICAgIG1f c21vb3RoaW5nT3B0aW9ucy5zZXRTbW9vdGhuZXNzRGlzdGFuY2UoZGlzdGFuY2UpOworICAgIHNt b290aGluZ09wdGlvbnMoKS0+c2V0U21vb3RobmVzc0Rpc3RhbmNlKGRpc3RhbmNlKTsKICAgICBl bWl0IHNtb290aG5lc3NRdWFsaXR5Q2hhbmdlZCgpOwogfQogCiB2b2lkIEtpc1Rvb2xCcnVzaDo6 c2xvdFNldFRhaWxBZ3Jlc3NpdmVuZXNzKHFyZWFsIGFyZ2hfcmhocnIpCiB7Ci0gICAgbV9zbW9v dGhpbmdPcHRpb25zLnNldFRhaWxBZ2dyZXNzaXZlbmVzcyhhcmdoX3JoaHJyKTsKKyAgICBzbW9v dGhpbmdPcHRpb25zKCktPnNldFRhaWxBZ2dyZXNzaXZlbmVzcyhhcmdoX3JoaHJyKTsKICAgICBl bWl0IHNtb290aG5lc3NGYWN0b3JDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgS2lzVG9vbEJydXNoOjpz ZXRTbW9vdGhQcmVzc3VyZShib29sIHZhbHVlKQogewotICAgIG1fc21vb3RoaW5nT3B0aW9ucy5z ZXRTbW9vdGhQcmVzc3VyZSh2YWx1ZSk7CisgICAgc21vb3RoaW5nT3B0aW9ucygpLT5zZXRTbW9v dGhQcmVzc3VyZSh2YWx1ZSk7CiB9CiAKIHZvaWQgS2lzVG9vbEJydXNoOjpzbG90U2V0TWFnbmV0 aXNtKGludCBtYWduZXRpc20pCkBAIC0xMjUsNyArMTMzLDEzIEBAIHZvaWQgS2lzVG9vbEJydXNo OjpzbG90U2V0TWFnbmV0aXNtKGludCBtYWduZXRpc20pCiAKIGJvb2wgS2lzVG9vbEJydXNoOjp1 c2VTY2FsYWJsZURpc3RhbmNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zbW9vdGhpbmdPcHRp b25zLnVzZVNjYWxhYmxlRGlzdGFuY2UoKTsKKyAgICByZXR1cm4gc21vb3RoaW5nT3B0aW9ucygp LT51c2VTY2FsYWJsZURpc3RhbmNlKCk7Cit9CisKK3ZvaWQgS2lzVG9vbEJydXNoOjpzZXRVc2VT Y2FsYWJsZURpc3RhbmNlKGJvb2wgdmFsdWUpCit7CisgICAgc21vb3RoaW5nT3B0aW9ucygpLT5z ZXRVc2VTY2FsYWJsZURpc3RhbmNlKHZhbHVlKTsKKyAgICBlbWl0IHVzZVNjYWxhYmxlRGlzdGFu Y2VDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgS2lzVG9vbEJydXNoOjpyZXNldEN1cnNvclN0eWxlKCkK QEAgLTEzNiw3ICsxNTAsNyBAQCB2b2lkIEtpc1Rvb2xCcnVzaDo6cmVzZXRDdXJzb3JTdHlsZSgp CiAgICAgLy8gV2hlbiB0aGUgc3RhYmlsaXplciBpcyBpbiB1c2UsIHdlIGF2b2lkIHVzaW5nIHRo ZSBicnVzaCBvdXRsaW5lIGN1cnNvciwKICAgICAvLyBiZWNhdXNlIGl0IHdvdWxkIGhpZGUgdGhl IHJlYWwgcG9zaXRpb24gb2YgdGhlIGN1cnNvciB0byB0aGUgdXNlciwKICAgICAvLyB5aWVsZGlu ZyB1bmV4cGVjdGVkIHJlc3VsdHMuCi0gICAgaWYgKG1fc21vb3RoaW5nT3B0aW9ucy5zbW9vdGhp bmdUeXBlKCkgPT0gS2lzU21vb3RoaW5nT3B0aW9uczo6U1RBQklMSVpFUgorICAgIGlmIChzbW9v dGhpbmdPcHRpb25zKCktPnNtb290aGluZ1R5cGUoKSA9PSBLaXNTbW9vdGhpbmdPcHRpb25zOjpT VEFCSUxJWkVSCiAgICAgICAgICYmIGN1cnNvclN0eWxlID09IENVUlNPUl9TVFlMRV9PVVRMSU5F KSB7CiAgICAgICAgIHVzZUN1cnNvcihLaXNDdXJzb3I6OnJvdW5kQ3Vyc29yKCkpOwogICAgIH0g ZWxzZSB7CkBAIC0xNDQsMTAgKzE1OCwzOCBAQCB2b2lkIEtpc1Rvb2xCcnVzaDo6cmVzZXRDdXJz b3JTdHlsZSgpCiAgICAgfQogfQogCi12b2lkIEtpc1Rvb2xCcnVzaDo6c2V0VXNlU2NhbGFibGVE aXN0YW5jZShib29sIHZhbHVlKQorYm9vbCBLaXNUb29sQnJ1c2g6OnVzZURlbGF5RGlzdGFuY2Uo KSBjb25zdAogewotICAgIG1fc21vb3RoaW5nT3B0aW9ucy5zZXRVc2VTY2FsYWJsZURpc3RhbmNl KHZhbHVlKTsKLSAgICBlbWl0IHVzZVNjYWxhYmxlRGlzdGFuY2VDaGFuZ2VkKCk7CisgICAgcmV0 dXJuIHNtb290aGluZ09wdGlvbnMoKS0+dXNlRGVsYXlEaXN0YW5jZSgpOworfQorCitxcmVhbCBL aXNUb29sQnJ1c2g6OmRlbGF5RGlzdGFuY2UoKSBjb25zdAoreworICAgIHJldHVybiBzbW9vdGhp bmdPcHRpb25zKCktPmRlbGF5RGlzdGFuY2UoKTsKK30KKwordm9pZCBLaXNUb29sQnJ1c2g6OnNl dFVzZURlbGF5RGlzdGFuY2UoYm9vbCB2YWx1ZSkKK3sKKyAgICBzbW9vdGhpbmdPcHRpb25zKCkt PnNldFVzZURlbGF5RGlzdGFuY2UodmFsdWUpOworICAgIGVuYWJsZUNvbnRyb2wobV9jaGtGaW5p c2hTdGFiaWxpemVkQ3VydmUsICF2YWx1ZSk7CisgICAgZW1pdCB1c2VEZWxheURpc3RhbmNlQ2hh bmdlZCgpOworfQorCit2b2lkIEtpc1Rvb2xCcnVzaDo6c2V0RGVsYXlEaXN0YW5jZShxcmVhbCB2 YWx1ZSkKK3sKKyAgICBzbW9vdGhpbmdPcHRpb25zKCktPnNldERlbGF5RGlzdGFuY2UodmFsdWUp OworICAgIGVtaXQgZGVsYXlEaXN0YW5jZUNoYW5nZWQoKTsKK30KKwordm9pZCBLaXNUb29sQnJ1 c2g6OnNldEZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZShib29sIHZhbHVlKQoreworICAgIHNtb290aGlu Z09wdGlvbnMoKS0+c2V0RmluaXNoU3RhYmlsaXplZEN1cnZlKHZhbHVlKTsKKyAgICBlbWl0IGZp bmlzaFN0YWJpbGl6ZWRDdXJ2ZUNoYW5nZWQoKTsKK30KKworYm9vbCBLaXNUb29sQnJ1c2g6OmZp bmlzaFN0YWJpbGl6ZWRDdXJ2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNtb290aGluZ09wdGlv bnMoKS0+ZmluaXNoU3RhYmlsaXplZEN1cnZlKCk7CiB9CiAKIFFXaWRnZXQgKiBLaXNUb29sQnJ1 c2g6OmNyZWF0ZU9wdGlvbldpZGdldCgpCkBAIC0xNzUsMjggKzIxNyw1MiBAQCBRV2lkZ2V0ICog S2lzVG9vbEJydXNoOjpjcmVhdGVPcHRpb25XaWRnZXQoKQogICAgIG1fc2xpZGVyU21vb3RobmVz c0Rpc3RhbmNlLT5zZXRSYW5nZSgzLjAsIE1BWElNVU1fU01PT1RITkVTU19ESVNUQU5DRSwgMSk7 CiAgICAgbV9zbGlkZXJTbW9vdGhuZXNzRGlzdGFuY2UtPnNldEVuYWJsZWQodHJ1ZSk7CiAgICAg Y29ubmVjdChtX3NsaWRlclNtb290aG5lc3NEaXN0YW5jZSwgU0lHTkFMKHZhbHVlQ2hhbmdlZChx cmVhbCkpLCBTTE9UKHNsb3RTZXRTbW9vdGhuZXNzRGlzdGFuY2UocXJlYWwpKSk7Ci0gICAgbV9z bGlkZXJTbW9vdGhuZXNzRGlzdGFuY2UtPnNldFZhbHVlKG1fc21vb3RoaW5nT3B0aW9ucy5zbW9v dGhuZXNzRGlzdGFuY2UoKSk7CisgICAgbV9zbGlkZXJTbW9vdGhuZXNzRGlzdGFuY2UtPnNldFZh bHVlKHNtb290aGluZ09wdGlvbnMoKS0+c21vb3RobmVzc0Rpc3RhbmNlKCkpOwogICAgIGFkZE9w dGlvbldpZGdldE9wdGlvbihtX3NsaWRlclNtb290aG5lc3NEaXN0YW5jZSwgbmV3IFFMYWJlbChp MThuKCJEaXN0YW5jZToiKSkpOwogCisgICAgLy8gRmluaXNoIHN0YWJpbGl6ZXIgY3VydmUKKyAg ICBtX2Noa0ZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZSA9IG5ldyBRQ2hlY2tCb3goIiIsIG9wdGlvbnNX aWRnZXQpOworICAgIGNvbm5lY3QobV9jaGtGaW5pc2hTdGFiaWxpemVkQ3VydmUsIFNJR05BTCh0 b2dnbGVkKGJvb2wpKSwgdGhpcywgU0xPVChzZXRGaW5pc2hTdGFiaWxpemVkQ3VydmUoYm9vbCkp KTsKKyAgICBtX2Noa0ZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZS0+c2V0Q2hlY2tlZChzbW9vdGhpbmdP cHRpb25zKCktPmZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZSgpKTsKKworICAgIC8vIERlbGF5IERpc3Rh bmNlIGZvciBTdGFiaWxpemVyCisgICAgbV9jaGtEZWxheURpc3RhbmNlID0gbmV3IFFDaGVja0Jv eChpMThuKCJEZWxheToiKSwgb3B0aW9uc1dpZGdldCk7CisgICAgbV9jaGtEZWxheURpc3RhbmNl LT5zZXRUb29sVGlwKGkxOG4oIkRlbGF5IHRoZSBicnVzaCBzdHJva2UgdG8gbWFrZSB0aGUgbGlu ZSBzbW9vdGhlciIpKTsKKyAgICBtX2Noa0RlbGF5RGlzdGFuY2UtPnNldExheW91dERpcmVjdGlv bihRdDo6UmlnaHRUb0xlZnQpOworICAgIGNvbm5lY3QobV9jaGtEZWxheURpc3RhbmNlLCBTSUdO QUwodG9nZ2xlZChib29sKSksIHRoaXMsIFNMT1Qoc2V0VXNlRGVsYXlEaXN0YW5jZShib29sKSkp OworICAgIG1fc2xpZGVyRGVsYXlEaXN0YW5jZSA9IG5ldyBLaXNEb3VibGVTbGlkZXJTcGluQm94 KG9wdGlvbnNXaWRnZXQpOworICAgIG1fc2xpZGVyRGVsYXlEaXN0YW5jZS0+c2V0VG9vbFRpcChp MThuKCJSYWRpdXMgd2hlcmUgdGhlIGJydXNoIGlzIGJsb2NrZWQiKSk7CisgICAgbV9zbGlkZXJE ZWxheURpc3RhbmNlLT5zZXRSYW5nZSgwLCA1MDApOworICAgIG1fc2xpZGVyRGVsYXlEaXN0YW5j ZS0+c2V0U3VmZml4KGkxOG4oIiBweCIpKTsKKyAgICBjb25uZWN0KG1fY2hrRGVsYXlEaXN0YW5j ZSwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBtX3NsaWRlckRlbGF5RGlzdGFuY2UsIFNMT1Qoc2V0 RW5hYmxlZChib29sKSkpOworICAgIGNvbm5lY3QobV9zbGlkZXJEZWxheURpc3RhbmNlLCBTSUdO QUwodmFsdWVDaGFuZ2VkKHFyZWFsKSksIFNMT1Qoc2V0RGVsYXlEaXN0YW5jZShxcmVhbCkpKTsK KworICAgIGFkZE9wdGlvbldpZGdldE9wdGlvbihtX3NsaWRlckRlbGF5RGlzdGFuY2UsIG1fY2hr RGVsYXlEaXN0YW5jZSk7CisgICAgYWRkT3B0aW9uV2lkZ2V0T3B0aW9uKG1fY2hrRmluaXNoU3Rh YmlsaXplZEN1cnZlLCBuZXcgUUxhYmVsKGkxOG4oIkZpbmlzaCBsaW5lOiIpKSk7CisKKyAgICBt X2Noa0RlbGF5RGlzdGFuY2UtPnNldENoZWNrZWQoc21vb3RoaW5nT3B0aW9ucygpLT51c2VEZWxh eURpc3RhbmNlKCkpOworICAgIG1fc2xpZGVyRGVsYXlEaXN0YW5jZS0+c2V0VmFsdWUoc21vb3Ro aW5nT3B0aW9ucygpLT5kZWxheURpc3RhbmNlKCkpOworCisKICAgICBtX3NsaWRlclRhaWxBZ2dy ZXNzaXZlbmVzcyA9IG5ldyBLaXNEb3VibGVTbGlkZXJTcGluQm94KG9wdGlvbnNXaWRnZXQpOwog ICAgIG1fc2xpZGVyVGFpbEFnZ3Jlc3NpdmVuZXNzLT5zZXRSYW5nZSgwLjAsIDEuMCwgMik7CiAg ICAgbV9zbGlkZXJUYWlsQWdncmVzc2l2ZW5lc3MtPnNldEVuYWJsZWQodHJ1ZSk7CiAgICAgY29u bmVjdChtX3NsaWRlclRhaWxBZ2dyZXNzaXZlbmVzcywgU0lHTkFMKHZhbHVlQ2hhbmdlZChxcmVh bCkpLCBTTE9UKHNsb3RTZXRUYWlsQWdyZXNzaXZlbmVzcyhxcmVhbCkpKTsKLSAgICBtX3NsaWRl clRhaWxBZ2dyZXNzaXZlbmVzcy0+c2V0VmFsdWUobV9zbW9vdGhpbmdPcHRpb25zLnRhaWxBZ2dy ZXNzaXZlbmVzcygpKTsKKyAgICBtX3NsaWRlclRhaWxBZ2dyZXNzaXZlbmVzcy0+c2V0VmFsdWUo c21vb3RoaW5nT3B0aW9ucygpLT50YWlsQWdncmVzc2l2ZW5lc3MoKSk7CiAgICAgYWRkT3B0aW9u V2lkZ2V0T3B0aW9uKG1fc2xpZGVyVGFpbEFnZ3Jlc3NpdmVuZXNzLCBuZXcgUUxhYmVsKGkxOG4o IlN0cm9rZSBFbmRpbmc6IikpKTsKIAogICAgIG1fY2hrU21vb3RoUHJlc3N1cmUgPSBuZXcgUUNo ZWNrQm94KCIiLCBvcHRpb25zV2lkZ2V0KTsKLSAgICBtX2Noa1Ntb290aFByZXNzdXJlLT5zZXRD aGVja2VkKG1fc21vb3RoaW5nT3B0aW9ucy5zbW9vdGhQcmVzc3VyZSgpKTsKKyAgICBtX2Noa1Nt b290aFByZXNzdXJlLT5zZXRDaGVja2VkKHNtb290aGluZ09wdGlvbnMoKS0+c21vb3RoUHJlc3N1 cmUoKSk7CiAgICAgY29ubmVjdChtX2Noa1Ntb290aFByZXNzdXJlLCBTSUdOQUwodG9nZ2xlZChi b29sKSksIHRoaXMsIFNMT1Qoc2V0U21vb3RoUHJlc3N1cmUoYm9vbCkpKTsKICAgICBhZGRPcHRp b25XaWRnZXRPcHRpb24obV9jaGtTbW9vdGhQcmVzc3VyZSwgbmV3IFFMYWJlbChpMThuKCJTbW9v dGggUHJlc3N1cmUiKSkpOwogCiAgICAgbV9jaGtVc2VTY2FsYWJsZURpc3RhbmNlID0gbmV3IFFD aGVja0JveCgiIiwgb3B0aW9uc1dpZGdldCk7Ci0gICAgbV9jaGtVc2VTY2FsYWJsZURpc3RhbmNl LT5zZXRDaGVja2VkKG1fc21vb3RoaW5nT3B0aW9ucy51c2VTY2FsYWJsZURpc3RhbmNlKCkpOwor ICAgIG1fY2hrVXNlU2NhbGFibGVEaXN0YW5jZS0+c2V0Q2hlY2tlZChzbW9vdGhpbmdPcHRpb25z KCktPnVzZVNjYWxhYmxlRGlzdGFuY2UoKSk7CiAgICAgY29ubmVjdChtX2Noa1VzZVNjYWxhYmxl RGlzdGFuY2UsIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgdGhpcywgU0xPVChzZXRVc2VTY2FsYWJs ZURpc3RhbmNlKGJvb2wpKSk7CiAgICAgYWRkT3B0aW9uV2lkZ2V0T3B0aW9uKG1fY2hrVXNlU2Nh bGFibGVEaXN0YW5jZSwgbmV3IFFMYWJlbChpMThuKCJTY2FsYWJsZSBEaXN0YW5jZSIpKSk7CiAK LSAgICBzbG90U2V0U21vb3RoaW5nVHlwZSgoaW50KW1fc21vb3RoaW5nT3B0aW9ucy5zbW9vdGhp bmdUeXBlKCkpOwotICAgIG1fY21iU21vb3RoaW5nVHlwZS0+c2V0Q3VycmVudEluZGV4KChpbnQp bV9zbW9vdGhpbmdPcHRpb25zLnNtb290aGluZ1R5cGUoKSk7CisgICAgc2xvdFNldFNtb290aGlu Z1R5cGUoKGludClzbW9vdGhpbmdPcHRpb25zKCktPnNtb290aGluZ1R5cGUoKSk7CisgICAgbV9j bWJTbW9vdGhpbmdUeXBlLT5zZXRDdXJyZW50SW5kZXgoKGludClzbW9vdGhpbmdPcHRpb25zKCkt PnNtb290aGluZ1R5cGUoKSk7CiAKICAgICAvLyBEcmF3aW5nIGFzc2lzdGFudCBjb25maWd1cmF0 aW9uCiAgICAgbV9jaGtBc3Npc3RhbnQgPSBuZXcgUUNoZWNrQm94KGkxOG4oIkFzc2lzdGFudDoi KSwgb3B0aW9uc1dpZGdldCk7CmRpZmYgLS1naXQgYS9rcml0YS9wbHVnaW5zL3Rvb2xzL2RlZmF1 bHR0b29scy9raXNfdG9vbF9icnVzaC5oIGIva3JpdGEvcGx1Z2lucy90b29scy9kZWZhdWx0dG9v bHMva2lzX3Rvb2xfYnJ1c2guaAppbmRleCA3Nzc4YjAwLi4zNGExZTVjIDEwMDY0NAotLS0gYS9r cml0YS9wbHVnaW5zL3Rvb2xzL2RlZmF1bHR0b29scy9raXNfdG9vbF9icnVzaC5oCisrKyBiL2ty aXRhL3BsdWdpbnMvdG9vbHMvZGVmYXVsdHRvb2xzL2tpc190b29sX2JydXNoLmgKQEAgLTQzLDYg KzQzLDEyIEBAIGNsYXNzIEtpc1Rvb2xCcnVzaCA6IHB1YmxpYyBLaXNUb29sRnJlZWhhbmQKICAg ICBRX1BST1BFUlRZKGludCBzbW9vdGhpbmdUeXBlIFJFQUQgc21vb3RoaW5nVHlwZSBXUklURSBz bG90U2V0U21vb3RoaW5nVHlwZSBOT1RJRlkgc21vb3RoaW5nVHlwZUNoYW5nZWQpCiAgICAgUV9Q Uk9QRVJUWShib29sIHVzZVNjYWxhYmxlRGlzdGFuY2UgUkVBRCB1c2VTY2FsYWJsZURpc3RhbmNl IFdSSVRFIHNldFVzZVNjYWxhYmxlRGlzdGFuY2UgTk9USUZZIHVzZVNjYWxhYmxlRGlzdGFuY2VD aGFuZ2VkKQogCisgICAgUV9QUk9QRVJUWShib29sIHVzZURlbGF5RGlzdGFuY2UgUkVBRCB1c2VE ZWxheURpc3RhbmNlIFdSSVRFIHNldFVzZURlbGF5RGlzdGFuY2UgTk9USUZZIHVzZURlbGF5RGlz dGFuY2VDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoYm9vbCBkZWxheURpc3RhbmNlIFJFQUQgZGVs YXlEaXN0YW5jZSBXUklURSBzZXREZWxheURpc3RhbmNlIE5PVElGWSBkZWxheURpc3RhbmNlQ2hh bmdlZCkKKworICAgIFFfUFJPUEVSVFkoYm9vbCBmaW5pc2hTdGFiaWxpemVkQ3VydmUgUkVBRCBm aW5pc2hTdGFiaWxpemVkQ3VydmUgV1JJVEUgc2V0RmluaXNoU3RhYmlsaXplZEN1cnZlIE5PVElG WSBmaW5pc2hTdGFiaWxpemVkQ3VydmVDaGFuZ2VkKQorCisKIHB1YmxpYzoKICAgICBLaXNUb29s QnJ1c2goS29DYW52YXNCYXNlICogY2FudmFzKTsKICAgICB2aXJ0dWFsIH5LaXNUb29sQnJ1c2go KTsKQEAgLTU1LDYgKzYxLDExIEBAIHB1YmxpYzoKICAgICBpbnQgc21vb3RoaW5nVHlwZSgpIGNv bnN0OwogICAgIGJvb2wgdXNlU2NhbGFibGVEaXN0YW5jZSgpIGNvbnN0OwogCisgICAgYm9vbCB1 c2VEZWxheURpc3RhbmNlKCkgY29uc3Q7CisgICAgcXJlYWwgZGVsYXlEaXN0YW5jZSgpIGNvbnN0 OworCisgICAgYm9vbCBmaW5pc2hTdGFiaWxpemVkQ3VydmUoKSBjb25zdDsKKwogcHJvdGVjdGVk IHNsb3RzOgogICAgIHZpcnR1YWwgdm9pZCByZXNldEN1cnNvclN0eWxlKCk7CiAKQEAgLTY2LDYg Kzc3LDExIEBAIHB1YmxpYyBzbG90czoKICAgICB2b2lkIHNldFNtb290aFByZXNzdXJlKGJvb2wg dmFsdWUpOwogICAgIHZvaWQgc2V0VXNlU2NhbGFibGVEaXN0YW5jZShib29sIHZhbHVlKTsKIAor ICAgIHZvaWQgc2V0VXNlRGVsYXlEaXN0YW5jZShib29sIHZhbHVlKTsKKyAgICB2b2lkIHNldERl bGF5RGlzdGFuY2UocXJlYWwgdmFsdWUpOworCisgICAgdm9pZCBzZXRGaW5pc2hTdGFiaWxpemVk Q3VydmUoYm9vbCB2YWx1ZSk7CisKIFFfU0lHTkFMUzoKICAgICB2b2lkIHNtb290aG5lc3NRdWFs aXR5Q2hhbmdlZCgpOwogICAgIHZvaWQgc21vb3RobmVzc0ZhY3RvckNoYW5nZWQoKTsKQEAgLTcz LDYgKzg5LDEwIEBAIFFfU0lHTkFMUzoKICAgICB2b2lkIHNtb290aGluZ1R5cGVDaGFuZ2VkKCk7 CiAgICAgdm9pZCB1c2VTY2FsYWJsZURpc3RhbmNlQ2hhbmdlZCgpOwogCisgICAgdm9pZCB1c2VE ZWxheURpc3RhbmNlQ2hhbmdlZCgpOworICAgIHZvaWQgZGVsYXlEaXN0YW5jZUNoYW5nZWQoKTsK KyAgICB2b2lkIGZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZUNoYW5nZWQoKTsKKwogcHJpdmF0ZToKICAg ICBRR3JpZExheW91dCAqbV9vcHRpb25MYXlvdXQ7CiAgICAgUUNvbWJvQm94ICptX2NtYlNtb290 aGluZ1R5cGU7CkBAIC04Myw2ICsxMDMsMTEgQEAgcHJpdmF0ZToKICAgICBLaXNEb3VibGVTbGlk ZXJTcGluQm94ICptX3NsaWRlclRhaWxBZ2dyZXNzaXZlbmVzczsKICAgICBRQ2hlY2tCb3ggKm1f Y2hrU21vb3RoUHJlc3N1cmU7CiAgICAgUUNoZWNrQm94ICptX2Noa1VzZVNjYWxhYmxlRGlzdGFu Y2U7CisKKyAgICBRQ2hlY2tCb3ggKm1fY2hrRGVsYXlEaXN0YW5jZTsKKyAgICBLaXNEb3VibGVT bGlkZXJTcGluQm94ICptX3NsaWRlckRlbGF5RGlzdGFuY2U7CisKKyAgICBRQ2hlY2tCb3ggKm1f Y2hrRmluaXNoU3RhYmlsaXplZEN1cnZlOwogfTsKIAogCmRpZmYgLS1naXQgYS9rcml0YS91aS9r aXNfY29uZmlnLmNjIGIva3JpdGEvdWkva2lzX2NvbmZpZy5jYwppbmRleCBlOWY3NDJkLi5jY2My MjIwIDEwMDY0NAotLS0gYS9rcml0YS91aS9raXNfY29uZmlnLmNjCisrKyBiL2tyaXRhL3VpL2tp c19jb25maWcuY2MKQEAgLTExNDUsNiArMTE0NSwzNiBAQCB2b2lkIEtpc0NvbmZpZzo6c2V0TGlu ZVNtb290aGluZ1NjYWxhYmxlRGlzdGFuY2UoYm9vbCB2YWx1ZSkKICAgICBtX2NmZy53cml0ZUVu dHJ5KCJMaW5lU21vb3RoaW5nU2NhbGFibGVEaXN0YW5jZSIsIHZhbHVlKTsKIH0KIAorcXJlYWwg S2lzQ29uZmlnOjpsaW5lU21vb3RoaW5nRGVsYXlEaXN0YW5jZSgpIGNvbnN0Cit7CisgICAgcmV0 dXJuIG1fY2ZnLnJlYWRFbnRyeSgiTGluZVNtb290aGluZ0RlbGF5RGlzdGFuY2UiLCA1MC4wKTsK K30KKwordm9pZCBLaXNDb25maWc6OnNldExpbmVTbW9vdGhpbmdEZWxheURpc3RhbmNlKHFyZWFs IHZhbHVlKQoreworICAgIG1fY2ZnLndyaXRlRW50cnkoIkxpbmVTbW9vdGhpbmdEZWxheURpc3Rh bmNlIiwgdmFsdWUpOworfQorCitib29sIEtpc0NvbmZpZzo6bGluZVNtb290aGluZ1VzZURlbGF5 RGlzdGFuY2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2NmZy5yZWFkRW50cnkoIkxpbmVTbW9v dGhpbmdVc2VEZWxheURpc3RhbmNlIiwgdHJ1ZSk7Cit9CisKK3ZvaWQgS2lzQ29uZmlnOjpzZXRM aW5lU21vb3RoaW5nVXNlRGVsYXlEaXN0YW5jZShib29sIHZhbHVlKQoreworICAgIG1fY2ZnLndy aXRlRW50cnkoIkxpbmVTbW9vdGhpbmdVc2VEZWxheURpc3RhbmNlIiwgdmFsdWUpOworfQorCiti b29sIEtpc0NvbmZpZzo6bGluZVNtb290aGluZ0ZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZSgpIGNvbnN0 Cit7CisgICAgcmV0dXJuIG1fY2ZnLnJlYWRFbnRyeSgiTGluZVNtb290aGluZ0ZpbmlzaFN0YWJp bGl6ZWRDdXJ2ZSIsIHRydWUpOworfQorCit2b2lkIEtpc0NvbmZpZzo6c2V0TGluZVNtb290aGlu Z0ZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZShib29sIHZhbHVlKQoreworICAgIG1fY2ZnLndyaXRlRW50 cnkoIkxpbmVTbW9vdGhpbmdGaW5pc2hTdGFiaWxpemVkQ3VydmUiLCB2YWx1ZSk7Cit9CisKIGlu dCBLaXNDb25maWc6OnBhbGV0dGVEb2NrZXJQYWxldHRlVmlld1NlY3Rpb25TaXplKCkgY29uc3QK IHsKICAgICByZXR1cm4gbV9jZmcucmVhZEVudHJ5KCJwYWxldHRlRG9ja2VyUGFsZXR0ZVZpZXdT ZWN0aW9uU2l6ZSIsIDEyKTsKZGlmZiAtLWdpdCBhL2tyaXRhL3VpL2tpc19jb25maWcuaCBiL2ty aXRhL3VpL2tpc19jb25maWcuaAppbmRleCBhNzEyYzcxLi44NTA2MmM0IDEwMDY0NAotLS0gYS9r cml0YS91aS9raXNfY29uZmlnLmgKKysrIGIva3JpdGEvdWkva2lzX2NvbmZpZy5oCkBAIC0zNDgs NiArMzQ4LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGxpbmVTbW9vdGhpbmdTY2FsYWJsZURpc3Rh bmNlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRMaW5lU21vb3RoaW5nU2NhbGFibGVEaXN0YW5jZShi b29sIHZhbHVlKTsKIAorICAgIHFyZWFsIGxpbmVTbW9vdGhpbmdEZWxheURpc3RhbmNlKCkgY29u c3Q7CisgICAgdm9pZCBzZXRMaW5lU21vb3RoaW5nRGVsYXlEaXN0YW5jZShxcmVhbCB2YWx1ZSk7 CisKKyAgICBib29sIGxpbmVTbW9vdGhpbmdVc2VEZWxheURpc3RhbmNlKCkgY29uc3Q7CisgICAg dm9pZCBzZXRMaW5lU21vb3RoaW5nVXNlRGVsYXlEaXN0YW5jZShib29sIHZhbHVlKTsKKworICAg IGJvb2wgbGluZVNtb290aGluZ0ZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZSgpIGNvbnN0OworICAgIHZv aWQgc2V0TGluZVNtb290aGluZ0ZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZShib29sIHZhbHVlKTsKKwog ICAgIGludCBwYWxldHRlRG9ja2VyUGFsZXR0ZVZpZXdTZWN0aW9uU2l6ZSgpIGNvbnN0OwogICAg IHZvaWQgc2V0UGFsZXR0ZURvY2tlclBhbGV0dGVWaWV3U2VjdGlvblNpemUoaW50IHZhbHVlKSBj b25zdDsKIApkaWZmIC0tZ2l0IGEva3JpdGEvdWkvdG9vbC9raXNfc21vb3RoaW5nX29wdGlvbnMu Y3BwIGIva3JpdGEvdWkvdG9vbC9raXNfc21vb3RoaW5nX29wdGlvbnMuY3BwCmluZGV4IGVjYzg5 MDkuLjgwMWE1NmMgMTAwNjQ0Ci0tLSBhL2tyaXRhL3VpL3Rvb2wva2lzX3Ntb290aGluZ19vcHRp b25zLmNwcAorKysgYi9rcml0YS91aS90b29sL2tpc19zbW9vdGhpbmdfb3B0aW9ucy5jcHAKQEAg LTIwLDExICsyMCw2IEBACiAjaW5jbHVkZSAia2lzX2NvbmZpZy5oIgogCiBLaXNTbW9vdGhpbmdP cHRpb25zOjpLaXNTbW9vdGhpbmdPcHRpb25zKCkKLSAgICA6IG1fc21vb3RoaW5nVHlwZShXRUlH SFRFRF9TTU9PVEhJTkcpCi0gICAgLCBtX3Ntb290aG5lc3NEaXN0YW5jZSg1NS4wKQotICAgICwg bV90YWlsQWdncmVzc2l2ZW5lc3MoMC4xNSkKLSAgICAsIG1fc21vb3RoUHJlc3N1cmUoZmFsc2Up Ci0gICAgLCBtX3VzZVNjYWxhYmxlRGlzdGFuY2UodHJ1ZSkKIHsKICAgICBLaXNDb25maWcgY2Zn OwogICAgIG1fc21vb3RoaW5nVHlwZSA9IChTbW9vdGhpbmdUeXBlKWNmZy5saW5lU21vb3RoaW5n VHlwZSgpOwpAQCAtMzIsNiArMjcsOSBAQCBLaXNTbW9vdGhpbmdPcHRpb25zOjpLaXNTbW9vdGhp bmdPcHRpb25zKCkKICAgICBtX3RhaWxBZ2dyZXNzaXZlbmVzcyA9IGNmZy5saW5lU21vb3RoaW5n VGFpbEFnZ3Jlc3NpdmVuZXNzKCk7CiAgICAgbV9zbW9vdGhQcmVzc3VyZSA9IGNmZy5saW5lU21v b3RoaW5nU21vb3RoUHJlc3N1cmUoKTsKICAgICBtX3VzZVNjYWxhYmxlRGlzdGFuY2UgPSBjZmcu bGluZVNtb290aGluZ1NjYWxhYmxlRGlzdGFuY2UoKTsKKyAgICBtX2RlbGF5RGlzdGFuY2UgPSBj ZmcubGluZVNtb290aGluZ0RlbGF5RGlzdGFuY2UoKTsKKyAgICBtX3VzZURlbGF5RGlzdGFuY2Ug PSBjZmcubGluZVNtb290aGluZ1VzZURlbGF5RGlzdGFuY2UoKTsKKyAgICBtX2ZpbmlzaFN0YWJp bGl6ZWRDdXJ2ZSA9IGNmZy5saW5lU21vb3RoaW5nRmluaXNoU3RhYmlsaXplZEN1cnZlKCk7CiB9 CiAKIEtpc1Ntb290aGluZ09wdGlvbnM6OlNtb290aGluZ1R5cGUgS2lzU21vb3RoaW5nT3B0aW9u czo6c21vb3RoaW5nVHlwZSgpIGNvbnN0CkBAIC05MywzICs5MSwzOSBAQCB2b2lkIEtpc1Ntb290 aGluZ09wdGlvbnM6OnNldFVzZVNjYWxhYmxlRGlzdGFuY2UoYm9vbCB2YWx1ZSkKICAgICBjZmcu c2V0TGluZVNtb290aGluZ1NjYWxhYmxlRGlzdGFuY2UodmFsdWUpOwogICAgIG1fdXNlU2NhbGFi bGVEaXN0YW5jZSA9IHZhbHVlOwogfQorCitxcmVhbCBLaXNTbW9vdGhpbmdPcHRpb25zOjpkZWxh eURpc3RhbmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWxheURpc3RhbmNlOworfQorCit2 b2lkIEtpc1Ntb290aGluZ09wdGlvbnM6OnNldERlbGF5RGlzdGFuY2UocXJlYWwgdmFsdWUpCit7 CisgICAgS2lzQ29uZmlnIGNmZzsKKyAgICBjZmcuc2V0TGluZVNtb290aGluZ0RlbGF5RGlzdGFu Y2UodmFsdWUpOworICAgIG1fZGVsYXlEaXN0YW5jZSA9IHZhbHVlOworfQorCitib29sIEtpc1Nt b290aGluZ09wdGlvbnM6OnVzZURlbGF5RGlzdGFuY2UoKSBjb25zdAoreworICAgIHJldHVybiBt X3VzZURlbGF5RGlzdGFuY2U7Cit9CisKK3ZvaWQgS2lzU21vb3RoaW5nT3B0aW9uczo6c2V0VXNl RGVsYXlEaXN0YW5jZShib29sIHZhbHVlKQoreworICAgIEtpc0NvbmZpZyBjZmc7CisgICAgY2Zn LnNldExpbmVTbW9vdGhpbmdVc2VEZWxheURpc3RhbmNlKHZhbHVlKTsKKyAgICBtX3VzZURlbGF5 RGlzdGFuY2UgPSB2YWx1ZTsKK30KKwordm9pZCBLaXNTbW9vdGhpbmdPcHRpb25zOjpzZXRGaW5p c2hTdGFiaWxpemVkQ3VydmUoYm9vbCB2YWx1ZSkKK3sKKyAgICBLaXNDb25maWcgY2ZnOworICAg IGNmZy5zZXRMaW5lU21vb3RoaW5nRmluaXNoU3RhYmlsaXplZEN1cnZlKHZhbHVlKTsKKyAgICBt X2ZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZSA9IHZhbHVlOworfQorCitib29sIEtpc1Ntb290aGluZ09w dGlvbnM6OmZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlu aXNoU3RhYmlsaXplZEN1cnZlOworfQpkaWZmIC0tZ2l0IGEva3JpdGEvdWkvdG9vbC9raXNfc21v b3RoaW5nX29wdGlvbnMuaCBiL2tyaXRhL3VpL3Rvb2wva2lzX3Ntb290aGluZ19vcHRpb25zLmgK aW5kZXggYjk5NTc3NC4uNDdkYTVlNCAxMDA2NDQKLS0tIGEva3JpdGEvdWkvdG9vbC9raXNfc21v b3RoaW5nX29wdGlvbnMuaAorKysgYi9rcml0YS91aS90b29sL2tpc19zbW9vdGhpbmdfb3B0aW9u cy5oCkBAIC0xOSw4ICsxOSwxMSBAQAogI2RlZmluZSBLSVNfU01PT1RISU5HX09QVElPTlNfSAog CiAjaW5jbHVkZSA8cWdsb2JhbC5oPgorI2luY2x1ZGUgPFFTaGFyZWRQb2ludGVyPgogI2luY2x1 ZGUgPGtyaXRhX2V4cG9ydC5oPgogCisKKwogY2xhc3MgS1JJVEFVSV9FWFBPUlQgS2lzU21vb3Ro aW5nT3B0aW9ucwogewogcHVibGljOgpAQCAtNTAsMTIgKzUzLDI2IEBAIHB1YmxpYzoKICAgICBi b29sIHVzZVNjYWxhYmxlRGlzdGFuY2UoKSBjb25zdDsKICAgICB2b2lkIHNldFVzZVNjYWxhYmxl RGlzdGFuY2UoYm9vbCB2YWx1ZSk7CiAKKyAgICBxcmVhbCBkZWxheURpc3RhbmNlKCkgY29uc3Q7 CisgICAgdm9pZCBzZXREZWxheURpc3RhbmNlKHFyZWFsIHZhbHVlKTsKKworICAgIHZvaWQgc2V0 VXNlRGVsYXlEaXN0YW5jZShib29sIHZhbHVlKTsKKyAgICBib29sIHVzZURlbGF5RGlzdGFuY2Uo KSBjb25zdDsKKworICAgIHZvaWQgc2V0RmluaXNoU3RhYmlsaXplZEN1cnZlKGJvb2wgdmFsdWUp OworICAgIGJvb2wgZmluaXNoU3RhYmlsaXplZEN1cnZlKCkgY29uc3Q7CisKIHByaXZhdGU6CiAg ICAgU21vb3RoaW5nVHlwZSBtX3Ntb290aGluZ1R5cGU7CiAgICAgcXJlYWwgbV9zbW9vdGhuZXNz RGlzdGFuY2U7CiAgICAgcXJlYWwgbV90YWlsQWdncmVzc2l2ZW5lc3M7CiAgICAgYm9vbCBtX3Nt b290aFByZXNzdXJlOwogICAgIGJvb2wgbV91c2VTY2FsYWJsZURpc3RhbmNlOworICAgIHFyZWFs IG1fZGVsYXlEaXN0YW5jZTsKKyAgICBib29sIG1fdXNlRGVsYXlEaXN0YW5jZTsKKyAgICBib29s IG1fZmluaXNoU3RhYmlsaXplZEN1cnZlOwogfTsKIAordHlwZWRlZiBRU2hhcmVkUG9pbnRlcjxL aXNTbW9vdGhpbmdPcHRpb25zPiBLaXNTbW9vdGhpbmdPcHRpb25zU1A7CisKICNlbmRpZiAvLyBL SVNfU01PT1RISU5HX09QVElPTlNfSApkaWZmIC0tZ2l0IGEva3JpdGEvdWkvdG9vbC9raXNfdG9v bF9mcmVlaGFuZC5jYyBiL2tyaXRhL3VpL3Rvb2wva2lzX3Rvb2xfZnJlZWhhbmQuY2MKaW5kZXgg MDBmMGU2MS4uZWZjMzIxZSAxMDA2NDQKLS0tIGEva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9mcmVl aGFuZC5jYworKysgYi9rcml0YS91aS90b29sL2tpc190b29sX2ZyZWVoYW5kLmNjCkBAIC03MSw2 ICs3MSw5IEBAIEtpc1Rvb2xGcmVlaGFuZDo6S2lzVG9vbEZyZWVoYW5kKEtvQ2FudmFzQmFzZSAq IGNhbnZhcywgY29uc3QgUUN1cnNvciAmIGN1cnNvciwKICAgICBtX2luZm9CdWlsZGVyID0gbmV3 IEtpc1Rvb2xQYWludGluZ0luZm9ybWF0aW9uQnVpbGRlcih0aGlzKTsKICAgICBtX3JlY29yZGlu Z0FkYXB0ZXIgPSBuZXcgS2lzUmVjb3JkaW5nQWRhcHRlcigpOwogICAgIG1faGVscGVyID0gbmV3 IEtpc1Rvb2xGcmVlaGFuZEhlbHBlcihtX2luZm9CdWlsZGVyLCB0cmFuc2FjdGlvblRleHQsIG1f cmVjb3JkaW5nQWRhcHRlcik7CisKKyAgICBjb25uZWN0KG1faGVscGVyLCBTSUdOQUwocmVxdWVz dEV4cGxpY2l0VXBkYXRlT3V0bGluZSgpKSwKKyAgICAgICAgICAgIFNMT1QoZXhwbGljaXRVcGRh dGVPdXRsaW5lKCkpKTsKIH0KIAogS2lzVG9vbEZyZWVoYW5kOjp+S2lzVG9vbEZyZWVoYW5kKCkK QEAgLTgwLDYgKzgzLDExIEBAIEtpc1Rvb2xGcmVlaGFuZDo6fktpc1Rvb2xGcmVlaGFuZCgpCiAg ICAgZGVsZXRlIG1faW5mb0J1aWxkZXI7CiB9CiAKK0tpc1Ntb290aGluZ09wdGlvbnNTUCBLaXNU b29sRnJlZWhhbmQ6OnNtb290aGluZ09wdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiBtX2hl bHBlci0+c21vb3RoaW5nT3B0aW9ucygpOworfQorCiB2b2lkIEtpc1Rvb2xGcmVlaGFuZDo6cmVz ZXRDdXJzb3JTdHlsZSgpCiB7CiAgICAgS2lzQ29uZmlnIGNmZzsKQEAgLTE1NSw3ICsxNjMsNiBA QCB2b2lkIEtpc1Rvb2xGcmVlaGFuZDo6aW5pdFN0cm9rZShLb1BvaW50ZXJFdmVudCAqZXZlbnQp CiB7CiAgICAgc2V0Q3VycmVudE5vZGVMb2NrZWQodHJ1ZSk7CiAKLSAgICBtX2hlbHBlci0+c2V0 U21vb3RobmVzcyhtX3Ntb290aGluZ09wdGlvbnMpOwogICAgIG1faGVscGVyLT5pbml0UGFpbnQo ZXZlbnQsIGNhbnZhcygpLT5yZXNvdXJjZU1hbmFnZXIoKSwKICAgICAgICAgICAgICAgICAgICAg ICAgIGltYWdlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSgpLmRhdGEoKSwKQEAg LTM3MCw2ICszNzcsMTEgQEAgcXJlYWwgS2lzVG9vbEZyZWVoYW5kOjpjYWxjdWxhdGVQZXJzcGVj dGl2ZShjb25zdCBRUG9pbnRGICZkb2N1bWVudFBvaW50KQogICAgIHJldHVybiBwZXJzcGVjdGl2 ZTsKIH0KIAordm9pZCBLaXNUb29sRnJlZWhhbmQ6OmV4cGxpY2l0VXBkYXRlT3V0bGluZSgpCit7 CisgICAgcmVxdWVzdFVwZGF0ZU91dGxpbmUobV9vdXRsaW5lRG9jUG9pbnQsIDApOworfQorCiBR UGFpbnRlclBhdGggS2lzVG9vbEZyZWVoYW5kOjpnZXRPdXRsaW5lUGF0aChjb25zdCBRUG9pbnRG ICZkb2N1bWVudFBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IEtvUG9pbnRlckV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEtpc1BhaW50T3BTZXR0aW5nczo6T3V0bGluZU1vZGUgb3V0 bGluZU1vZGUpCmRpZmYgLS1naXQgYS9rcml0YS91aS90b29sL2tpc190b29sX2ZyZWVoYW5kLmgg Yi9rcml0YS91aS90b29sL2tpc190b29sX2ZyZWVoYW5kLmgKaW5kZXggM2FlNTczNi4uNTZjYjgz NiAxMDA2NDQKLS0tIGEva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9mcmVlaGFuZC5oCisrKyBiL2ty aXRhL3VpL3Rvb2wva2lzX3Rvb2xfZnJlZWhhbmQuaApAQCAtODgsNiArODgsNyBAQCBwcm90ZWN0 ZWQ6CiAKIHByb3RlY3RlZCBzbG90czoKIAorICAgIHZvaWQgZXhwbGljaXRVcGRhdGVPdXRsaW5l KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0Q3Vyc29yU3R5bGUoKTsKICAgICB2b2lkIHNldEFz c2lzdGFudChib29sIGFzc2lzdGFudCk7CiAKQEAgLTEwOCw3ICsxMDksNyBAQCBwcml2YXRlOgog CiBwcm90ZWN0ZWQ6CiAKLSAgICBLaXNTbW9vdGhpbmdPcHRpb25zIG1fc21vb3RoaW5nT3B0aW9u czsKKyAgICBLaXNTbW9vdGhpbmdPcHRpb25zU1Agc21vb3RoaW5nT3B0aW9ucygpIGNvbnN0Owog ICAgIGJvb2wgbV9hc3Npc3RhbnQ7CiAgICAgZG91YmxlIG1fbWFnbmV0aXNtOwogCmRpZmYgLS1n aXQgYS9rcml0YS91aS90b29sL2tpc190b29sX2ZyZWVoYW5kX2hlbHBlci5jcHAgYi9rcml0YS91 aS90b29sL2tpc190b29sX2ZyZWVoYW5kX2hlbHBlci5jcHAKaW5kZXggZDMzMzE1YS4uODBkZWNi MyAxMDA2NDQKLS0tIGEva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9mcmVlaGFuZF9oZWxwZXIuY3Bw CisrKyBiL2tyaXRhL3VpL3Rvb2wva2lzX3Rvb2xfZnJlZWhhbmRfaGVscGVyLmNwcApAQCAtMTA0 LDcgKzEwNCw3IEBAIHN0cnVjdCBLaXNUb29sRnJlZWhhbmRIZWxwZXI6OlByaXZhdGUKICAgICBL aXNQYWludEluZm9ybWF0aW9uIHByZXZpb3VzUGFpbnRJbmZvcm1hdGlvbjsKICAgICBLaXNQYWlu dEluZm9ybWF0aW9uIG9sZGVyUGFpbnRJbmZvcm1hdGlvbjsKIAotICAgIEtpc1Ntb290aGluZ09w dGlvbnMgc21vb3RoaW5nT3B0aW9uczsKKyAgICBLaXNTbW9vdGhpbmdPcHRpb25zU1Agc21vb3Ro aW5nT3B0aW9uczsKIAogICAgIFFUaW1lciBhaXJicnVzaGluZ1RpbWVyOwogCkBAIC0xMTcsNiAr MTE3LDEwIEBAIHN0cnVjdCBLaXNUb29sRnJlZWhhbmRIZWxwZXI6OlByaXZhdGUKICAgICBRUXVl dWU8S2lzUGFpbnRJbmZvcm1hdGlvbj4gc3RhYmlsaXplckRlcXVlOwogICAgIEtpc1BhaW50SW5m b3JtYXRpb24gc3RhYmlsaXplckxhc3RQYWludEluZm87CiAgICAgUVRpbWVyIHN0YWJpbGl6ZXJQ b2xsVGltZXI7CisKKyAgICBzdGF0aWMgS2lzUGFpbnRJbmZvcm1hdGlvbgorICAgIGdldFN0YWJp bGl6ZWRQYWludEluZm8oY29uc3QgUVF1ZXVlPEtpc1BhaW50SW5mb3JtYXRpb24+ICZxdWV1ZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtpc1BhaW50SW5mb3JtYXRpb24gJmxh c3RQYWludEluZm8pOwogfTsKIAogCkBAIC0xMjcsMTQgKzEzMSwxMiBAQCBLaXNUb29sRnJlZWhh bmRIZWxwZXI6Oktpc1Rvb2xGcmVlaGFuZEhlbHBlcihLaXNQYWludGluZ0luZm9ybWF0aW9uQnVp bGRlciAqaW5mbwogewogICAgIG1fZC0+aW5mb0J1aWxkZXIgPSBpbmZvQnVpbGRlcjsKICAgICBt X2QtPnJlY29yZGluZ0FkYXB0ZXIgPSByZWNvcmRpbmdBZGFwdGVyOwotCiAgICAgbV9kLT50cmFu c2FjdGlvblRleHQgPSB0cmFuc2FjdGlvblRleHQ7CisgICAgbV9kLT5zbW9vdGhpbmdPcHRpb25z ID0gS2lzU21vb3RoaW5nT3B0aW9uc1NQKG5ldyBLaXNTbW9vdGhpbmdPcHRpb25zKCkpOwogCiAg ICAgbV9kLT5zdHJva2VUaW1lb3V0VGltZXIuc2V0U2luZ2xlU2hvdCh0cnVlKTsKICAgICBjb25u ZWN0KCZtX2QtPnN0cm9rZVRpbWVvdXRUaW1lciwgU0lHTkFMKHRpbWVvdXQoKSksIFNMT1QoZmlu aXNoU3Ryb2tlKCkpKTsKLQogICAgIGNvbm5lY3QoJm1fZC0+YWlyYnJ1c2hpbmdUaW1lciwgU0lH TkFMKHRpbWVvdXQoKSksIFNMT1QoZG9BaXJicnVzaGluZygpKSk7Ci0KICAgICBjb25uZWN0KCZt X2QtPnN0YWJpbGl6ZXJQb2xsVGltZXIsIFNJR05BTCh0aW1lb3V0KCkpLCBTTE9UKHN0YWJpbGl6 ZXJQb2xsQW5kUGFpbnQoKSkpOwogfQogCkBAIC0xNDMsMTEgKzE0NSwxNiBAQCBLaXNUb29sRnJl ZWhhbmRIZWxwZXI6On5LaXNUb29sRnJlZWhhbmRIZWxwZXIoKQogICAgIGRlbGV0ZSBtX2Q7CiB9 CiAKLXZvaWQgS2lzVG9vbEZyZWVoYW5kSGVscGVyOjpzZXRTbW9vdGhuZXNzKGNvbnN0IEtpc1Nt b290aGluZ09wdGlvbnMgJnNtb290aGluZ09wdGlvbnMpCit2b2lkIEtpc1Rvb2xGcmVlaGFuZEhl bHBlcjo6c2V0U21vb3RobmVzcyhLaXNTbW9vdGhpbmdPcHRpb25zU1Agc21vb3RoaW5nT3B0aW9u cykKIHsKICAgICBtX2QtPnNtb290aGluZ09wdGlvbnMgPSBzbW9vdGhpbmdPcHRpb25zOwogfQog CitLaXNTbW9vdGhpbmdPcHRpb25zU1AgS2lzVG9vbEZyZWVoYW5kSGVscGVyOjpzbW9vdGhpbmdP cHRpb25zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kLT5zbW9vdGhpbmdPcHRpb25zOworfQor CiBRUGFpbnRlclBhdGggS2lzVG9vbEZyZWVoYW5kSGVscGVyOjpwYWludE9wT3V0bGluZShjb25z dCBRUG9pbnRGICZzYXZlZEN1cnNvclBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtvUG9pbnRlckV2ZW50ICpldmVudCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtpc1Bh aW50T3BTZXR0aW5ncyAqZ2xvYmFsU2V0dGluZ3MsCkBAIC0xNjYsNyArMTczLDIxIEBAIFFQYWlu dGVyUGF0aCBLaXNUb29sRnJlZWhhbmRIZWxwZXI6OnBhaW50T3BPdXRsaW5lKGNvbnN0IFFQb2lu dEYgJnNhdmVkQ3Vyc29yUG9zCiAgICAgS2lzUGFpbnRJbmZvcm1hdGlvbjo6RGlzdGFuY2VJbmZv cm1hdGlvblJlZ2lzdHJhciByZWdpc3RyYXIgPQogICAgICAgICBpbmZvLnJlZ2lzdGVyRGlzdGFu Y2VJbmZvcm1hdGlvbigmZGlzdGFuY2VJbmZvKTsKIAotICAgIHJldHVybiBzZXR0aW5ncy0+YnJ1 c2hPdXRsaW5lKGluZm8sIG1vZGUpOworICAgIFFQYWludGVyUGF0aCBvdXRsaW5lID0gc2V0dGlu Z3MtPmJydXNoT3V0bGluZShpbmZvLCBtb2RlKTsKKworCisKKyAgICBpZiAobV9kLT5yZXNvdXJj ZXMgJiYKKyAgICAgICAgbV9kLT5zbW9vdGhpbmdPcHRpb25zLT5zbW9vdGhpbmdUeXBlKCkgPT0g S2lzU21vb3RoaW5nT3B0aW9uczo6U1RBQklMSVpFUiAmJgorICAgICAgICBtX2QtPnNtb290aGlu Z09wdGlvbnMtPnVzZURlbGF5RGlzdGFuY2UoKSkgeworCisgICAgICAgIGNvbnN0IHFyZWFsIFIg PSBtX2QtPnNtb290aGluZ09wdGlvbnMtPmRlbGF5RGlzdGFuY2UoKSAvCisgICAgICAgICAgICBt X2QtPnJlc291cmNlcy0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgICAgIG91dGxpbmUuYWRkRWxs aXBzZShpbmZvLnBvcygpLCBSLCBSKTsKKyAgICB9CisKKyAgICByZXR1cm4gb3V0bGluZTsKIH0K IAogdm9pZCBLaXNUb29sRnJlZWhhbmRIZWxwZXI6OmluaXRQYWludChLb1BvaW50ZXJFdmVudCAq ZXZlbnQsCkBAIC0yMjMsNyArMjQ0LDcgQEAgdm9pZCBLaXNUb29sRnJlZWhhbmRIZWxwZXI6Omlu aXRQYWludChLb1BvaW50ZXJFdmVudCAqZXZlbnQsCiAgICAgICAgIG1fZC0+YWlyYnJ1c2hpbmdU aW1lci5zdGFydCgpOwogICAgIH0KIAotICAgIGlmIChtX2QtPnNtb290aGluZ09wdGlvbnMuc21v b3RoaW5nVHlwZSgpID09IEtpc1Ntb290aGluZ09wdGlvbnM6OlNUQUJJTElaRVIpIHsKKyAgICBp ZiAobV9kLT5zbW9vdGhpbmdPcHRpb25zLT5zbW9vdGhpbmdUeXBlKCkgPT0gS2lzU21vb3RoaW5n T3B0aW9uczo6U1RBQklMSVpFUikgewogICAgICAgICBzdGFiaWxpemVyU3RhcnQobV9kLT5wcmV2 aW91c1BhaW50SW5mb3JtYXRpb24pOwogICAgIH0KIH0KQEAgLTM0NCw4ICszNjUsOCBAQCB2b2lk IEtpc1Rvb2xGcmVlaGFuZEhlbHBlcjo6cGFpbnQoS29Qb2ludGVyRXZlbnQgKmV2ZW50KQogICAg ICAqIDQpIFRoZSBmb3JtaWxhIGlzIGEgbGl0dGxlIGJpdCBkaWZmZXJlbnQ6ICdEaXN0YW5jZScg cGFyYW1ldGVyCiAgICAgICogICAgc3RhbmRzIGZvciAkMyBcU2lnbWEkCiAgICAgICovCi0gICAg aWYgKG1fZC0+c21vb3RoaW5nT3B0aW9ucy5zbW9vdGhpbmdUeXBlKCkgPT0gS2lzU21vb3RoaW5n T3B0aW9uczo6V0VJR0hURURfU01PT1RISU5HCi0gICAgICAgICYmIG1fZC0+c21vb3RoaW5nT3B0 aW9ucy5zbW9vdGhuZXNzRGlzdGFuY2UoKSA+IDAuMCkgeworICAgIGlmIChtX2QtPnNtb290aGlu Z09wdGlvbnMtPnNtb290aGluZ1R5cGUoKSA9PSBLaXNTbW9vdGhpbmdPcHRpb25zOjpXRUlHSFRF RF9TTU9PVEhJTkcKKyAgICAgICAgJiYgbV9kLT5zbW9vdGhpbmdPcHRpb25zLT5zbW9vdGhuZXNz RGlzdGFuY2UoKSA+IDAuMCkgewogCiAgICAgICAgIHsgLy8gaW5pdGlhbGl6ZSBjdXJyZW50IGRp c3RhbmNlCiAgICAgICAgICAgICBRUG9pbnRGIHByZXZQb3M7CkBAIC0zNjgsOSArMzg5LDkgQEAg dm9pZCBLaXNUb29sRnJlZWhhbmRIZWxwZXI6OnBhaW50KEtvUG9pbnRlckV2ZW50ICpldmVudCkK IAogICAgICAgICBpZiAobV9kLT5oaXN0b3J5LnNpemUoKSA+IDMpIHsKICAgICAgICAgICAgIGNv bnN0IHFyZWFsIGVmZmVjdGl2ZVNtb290aG5lc3NEaXN0YW5jZSA9Ci0gICAgICAgICAgICAgICAg IW1fZC0+c21vb3RoaW5nT3B0aW9ucy51c2VTY2FsYWJsZURpc3RhbmNlKCkgPwotICAgICAgICAg ICAgICAgIG1fZC0+c21vb3RoaW5nT3B0aW9ucy5zbW9vdGhuZXNzRGlzdGFuY2UoKSA6Ci0gICAg ICAgICAgICAgICAgbV9kLT5zbW9vdGhpbmdPcHRpb25zLnNtb290aG5lc3NEaXN0YW5jZSgpIC8K KyAgICAgICAgICAgICAgICAhbV9kLT5zbW9vdGhpbmdPcHRpb25zLT51c2VTY2FsYWJsZURpc3Rh bmNlKCkgPworICAgICAgICAgICAgICAgIG1fZC0+c21vb3RoaW5nT3B0aW9ucy0+c21vb3RobmVz c0Rpc3RhbmNlKCkgOgorICAgICAgICAgICAgICAgIG1fZC0+c21vb3RoaW5nT3B0aW9ucy0+c21v b3RobmVzc0Rpc3RhbmNlKCkgLwogICAgICAgICAgICAgICAgIG1fZC0+cmVzb3VyY2VzLT5lZmZl Y3RpdmVab29tKCk7CiAKICAgICAgICAgICAgIGNvbnN0IHFyZWFsIHNpZ21hID0gZWZmZWN0aXZl U21vb3RobmVzc0Rpc3RhbmNlIC8gMy4wOyAvLyAnMy4wJyBmb3IgKDMgKiBzaWdtYSkgcmFuZ2UK QEAgLTM5NSw3ICs0MTYsNyBAQCB2b2lkIEtpc1Rvb2xGcmVlaGFuZEhlbHBlcjo6cGFpbnQoS29Q b2ludGVyRXZlbnQgKmV2ZW50KQogICAgICAgICAgICAgICAgIGlmIChpIDwgbV9kLT5oaXN0b3J5 LnNpemUoKSAtIDEpIHsKICAgICAgICAgICAgICAgICAgICAgcHJlc3N1cmVHcmFkID0gbmV4dElu Zm8ucHJlc3N1cmUoKSAtIG1fZC0+aGlzdG9yeS5hdChpICsgMSkucHJlc3N1cmUoKTsKIAotICAg ICAgICAgICAgICAgICAgICBjb25zdCBxcmVhbCB0YWlsQWdyZXNzaXZlbmVzcyA9IDQwLjAgKiBt X2QtPnNtb290aGluZ09wdGlvbnMudGFpbEFnZ3Jlc3NpdmVuZXNzKCk7CisgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHFyZWFsIHRhaWxBZ3Jlc3NpdmVuZXNzID0gNDAuMCAqIG1fZC0+c21vb3Ro aW5nT3B0aW9ucy0+dGFpbEFnZ3Jlc3NpdmVuZXNzKCk7CiAKICAgICAgICAgICAgICAgICAgICAg aWYgKHByZXNzdXJlR3JhZCA+IDAuMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNz dXJlR3JhZCAqPSB0YWlsQWdyZXNzaXZlbmVzcyAqICgxLjAgLSBuZXh0SW5mby5wcmVzc3VyZSgp KTsKQEAgLTQxOCw3ICs0MzksNyBAQCB2b2lkIEtpc1Rvb2xGcmVlaGFuZEhlbHBlcjo6cGFpbnQo S29Qb2ludGVyRXZlbnQgKmV2ZW50KQogICAgICAgICAgICAgICAgIHggKz0gcmF0ZSAqIG5leHRJ bmZvLnBvcygpLngoKTsKICAgICAgICAgICAgICAgICB5ICs9IHJhdGUgKiBuZXh0SW5mby5wb3Mo KS55KCk7CiAKLSAgICAgICAgICAgICAgICBpZiAobV9kLT5zbW9vdGhpbmdPcHRpb25zLnNtb290 aFByZXNzdXJlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9kLT5zbW9vdGhpbmdPcHRpb25z LT5zbW9vdGhQcmVzc3VyZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHByZXNzdXJlICs9IHJh dGUgKiBuZXh0SW5mby5wcmVzc3VyZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg IH0KQEAgLTQyNywxNCArNDQ4LDE0IEBAIHZvaWQgS2lzVG9vbEZyZWVoYW5kSGVscGVyOjpwYWlu dChLb1BvaW50ZXJFdmVudCAqZXZlbnQpCiAgICAgICAgICAgICAgICAgeCAvPSBzY2FsZVN1bTsK ICAgICAgICAgICAgICAgICB5IC89IHNjYWxlU3VtOwogCi0gICAgICAgICAgICAgICAgaWYgKG1f ZC0+c21vb3RoaW5nT3B0aW9ucy5zbW9vdGhQcmVzc3VyZSgpKSB7CisgICAgICAgICAgICAgICAg aWYgKG1fZC0+c21vb3RoaW5nT3B0aW9ucy0+c21vb3RoUHJlc3N1cmUoKSkgewogICAgICAgICAg ICAgICAgICAgICBwcmVzc3VyZSAvPSBzY2FsZVN1bTsKICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgoeCAhPSAwLjAgJiYgeSAhPSAwLjApIHx8ICh4 ID09IGluZm8ucG9zKCkueCgpICYmIHkgPT0gaW5mby5wb3MoKS55KCkpKSB7CiAgICAgICAgICAg ICAgICAgaW5mby5zZXRQb3MoUVBvaW50Rih4LCB5KSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1f ZC0+c21vb3RoaW5nT3B0aW9ucy5zbW9vdGhQcmVzc3VyZSgpKSB7CisgICAgICAgICAgICAgICAg aWYgKG1fZC0+c21vb3RoaW5nT3B0aW9ucy0+c21vb3RoUHJlc3N1cmUoKSkgewogICAgICAgICAg ICAgICAgICAgICBpbmZvLnNldFByZXNzdXJlKHByZXNzdXJlKTsKICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgbV9kLT5oaXN0b3J5Lmxhc3QoKSA9IGluZm87CkBAIC00NDIsOCAr NDYzLDggQEAgdm9pZCBLaXNUb29sRnJlZWhhbmRIZWxwZXI6OnBhaW50KEtvUG9pbnRlckV2ZW50 ICpldmVudCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2QtPnNtb290aGluZ09wdGlv bnMuc21vb3RoaW5nVHlwZSgpID09IEtpc1Ntb290aGluZ09wdGlvbnM6OlNJTVBMRV9TTU9PVEhJ TkcKLSAgICAgICAgfHwgbV9kLT5zbW9vdGhpbmdPcHRpb25zLnNtb290aGluZ1R5cGUoKSA9PSBL aXNTbW9vdGhpbmdPcHRpb25zOjpXRUlHSFRFRF9TTU9PVEhJTkcpCisgICAgaWYgKG1fZC0+c21v b3RoaW5nT3B0aW9ucy0+c21vb3RoaW5nVHlwZSgpID09IEtpc1Ntb290aGluZ09wdGlvbnM6OlNJ TVBMRV9TTU9PVEhJTkcKKyAgICAgICAgfHwgbV9kLT5zbW9vdGhpbmdPcHRpb25zLT5zbW9vdGhp bmdUeXBlKCkgPT0gS2lzU21vb3RoaW5nT3B0aW9uczo6V0VJR0hURURfU01PT1RISU5HKQogICAg IHsKICAgICAgICAgLy8gTm93IHBhaW50IGJldHdlZW4gdGhlIGNvb3JkaW5hdGVzLCB1c2luZyB0 aGUgYmV6aWVyIGN1cnZlIGludGVycG9sYXRpb24KICAgICAgICAgaWYgKCFtX2QtPmhhdmVUYW5n ZW50KSB7CkBAIC00NjMsMTEgKzQ4NCwxMSBAQCB2b2lkIEtpc1Rvb2xGcmVlaGFuZEhlbHBlcjo6 cGFpbnQoS29Qb2ludGVyRXZlbnQgKmV2ZW50KQogICAgICAgICBtX2QtPm9sZGVyUGFpbnRJbmZv cm1hdGlvbiA9IG1fZC0+cHJldmlvdXNQYWludEluZm9ybWF0aW9uOwogICAgICAgICBtX2QtPnN0 cm9rZVRpbWVvdXRUaW1lci5zdGFydCgxMDApOwogICAgIH0KLSAgICBlbHNlIGlmIChtX2QtPnNt b290aGluZ09wdGlvbnMuc21vb3RoaW5nVHlwZSgpID09IEtpc1Ntb290aGluZ09wdGlvbnM6Ok5P X1NNT09USElORyl7CisgICAgZWxzZSBpZiAobV9kLT5zbW9vdGhpbmdPcHRpb25zLT5zbW9vdGhp bmdUeXBlKCkgPT0gS2lzU21vb3RoaW5nT3B0aW9uczo6Tk9fU01PT1RISU5HKXsKICAgICAgICAg cGFpbnRMaW5lKG1fZC0+cGFpbnRlckluZm9zLCBtX2QtPnByZXZpb3VzUGFpbnRJbmZvcm1hdGlv biwgaW5mbyk7CiAgICAgfQogCi0gICAgaWYgKG1fZC0+c21vb3RoaW5nT3B0aW9ucy5zbW9vdGhp bmdUeXBlKCkgPT0gS2lzU21vb3RoaW5nT3B0aW9uczo6U1RBQklMSVpFUikgeworICAgIGlmICht X2QtPnNtb290aGluZ09wdGlvbnMtPnNtb290aGluZ1R5cGUoKSA9PSBLaXNTbW9vdGhpbmdPcHRp b25zOjpTVEFCSUxJWkVSKSB7CiAgICAgICAgIG1fZC0+c3RhYmlsaXplckxhc3RQYWludEluZm8g PSBpbmZvOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fZC0+cHJldmlvdXNQYWludEluZm9ybWF0 aW9uID0gaW5mbzsKQEAgLTQ4Miw3ICs1MDMsNyBAQCB2b2lkIEtpc1Rvb2xGcmVlaGFuZEhlbHBl cjo6ZW5kUGFpbnQoKQogewogICAgIGlmICghbV9kLT5oYXNQYWludEF0TGVhc3RPbmNlKSB7CiAg ICAgICAgIHBhaW50QXQobV9kLT5wYWludGVySW5mb3MsIG1fZC0+cHJldmlvdXNQYWludEluZm9y bWF0aW9uKTsKLSAgICB9IGVsc2UgaWYgKG1fZC0+c21vb3RoaW5nT3B0aW9ucy5zbW9vdGhpbmdU eXBlKCkgIT0gS2lzU21vb3RoaW5nT3B0aW9uczo6Tk9fU01PT1RISU5HKSB7CisgICAgfSBlbHNl IGlmIChtX2QtPnNtb290aGluZ09wdGlvbnMtPnNtb290aGluZ1R5cGUoKSAhPSBLaXNTbW9vdGhp bmdPcHRpb25zOjpOT19TTU9PVEhJTkcpIHsKICAgICAgICAgZmluaXNoU3Ryb2tlKCk7CiAgICAg fQogICAgIG1fZC0+c3Ryb2tlVGltZW91dFRpbWVyLnN0b3AoKTsKQEAgLTQ5MSw3ICs1MTIsNyBA QCB2b2lkIEtpc1Rvb2xGcmVlaGFuZEhlbHBlcjo6ZW5kUGFpbnQoKQogICAgICAgICBtX2QtPmFp cmJydXNoaW5nVGltZXIuc3RvcCgpOwogICAgIH0KIAotICAgIGlmIChtX2QtPnNtb290aGluZ09w dGlvbnMuc21vb3RoaW5nVHlwZSgpID09IEtpc1Ntb290aGluZ09wdGlvbnM6OlNUQUJJTElaRVIp IHsKKyAgICBpZiAobV9kLT5zbW9vdGhpbmdPcHRpb25zLT5zbW9vdGhpbmdUeXBlKCkgPT0gS2lz U21vb3RoaW5nT3B0aW9uczo6U1RBQklMSVpFUikgewogICAgICAgICBzdGFiaWxpemVyRW5kKCk7 CiAgICAgfQogCkBAIC01MTMsNyArNTM0LDcgQEAgdm9pZCBLaXNUb29sRnJlZWhhbmRIZWxwZXI6 OmVuZFBhaW50KCkKIHZvaWQgS2lzVG9vbEZyZWVoYW5kSGVscGVyOjpzdGFiaWxpemVyU3RhcnQo S2lzUGFpbnRJbmZvcm1hdGlvbiBmaXJzdFBhaW50SW5mbykKIHsKICAgICAvLyBGSVhNRTogVWds eSBoYWNrLCB0aGlzIGlzIG5vIGEgImRpc3RhbmNlIiBpbiBhbnkgd2F5Ci0gICAgaW50IHNhbXBs ZVNpemUgPSBtX2QtPnNtb290aGluZ09wdGlvbnMuc21vb3RobmVzc0Rpc3RhbmNlKCk7CisgICAg aW50IHNhbXBsZVNpemUgPSBtX2QtPnNtb290aGluZ09wdGlvbnMtPnNtb290aG5lc3NEaXN0YW5j ZSgpOwogICAgIGFzc2VydChzYW1wbGVTaXplID4gMCk7CiAKICAgICAvLyBGaWxsIHRoZSBkZXF1 ZSB3aXRoIHRoZSBjdXJyZW50IHZhbHVlIHJlcGVhdGVkIHVudGlsIGZpbGxpbmcgdGhlIHNhbXBs ZQpAQCAtNTI4LDU4ICs1NDksNzcgQEAgdm9pZCBLaXNUb29sRnJlZWhhbmRIZWxwZXI6OnN0YWJp bGl6ZXJTdGFydChLaXNQYWludEluZm9ybWF0aW9uIGZpcnN0UGFpbnRJbmZvKQogICAgIG1fZC0+ c3RhYmlsaXplclBvbGxUaW1lci5zdGFydCgpOwogfQogCi12b2lkIEtpc1Rvb2xGcmVlaGFuZEhl bHBlcjo6c3RhYmlsaXplclBvbGwoKQorS2lzUGFpbnRJbmZvcm1hdGlvbgorS2lzVG9vbEZyZWVo YW5kSGVscGVyOjpQcml2YXRlOjpnZXRTdGFiaWxpemVkUGFpbnRJbmZvKGNvbnN0IFFRdWV1ZTxL aXNQYWludEluZm9ybWF0aW9uPiAmcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS2lzUGFpbnRJbmZvcm1hdGlvbiAmbGFz dFBhaW50SW5mbykKIHsKLSAgICAvLyBSZW1vdmUgdGhlIG9sZGVzdCBlbnRyeQotICAgIG1fZC0+ c3RhYmlsaXplckRlcXVlLmRlcXVldWUoKTsKKyAgICBLaXNQYWludEluZm9ybWF0aW9uIHJlc3Vs dChsYXN0UGFpbnRJbmZvKTsKIAotICAgIC8vIEFkZCBhIG5ldyBlbnRyeSB3aXRoIHRoZSBsYXN0 IHBhaW50IGluZm8gKHBvc2l0aW9uIGFuZCBwcmVzc3VyZSkKLSAgICBtX2QtPnN0YWJpbGl6ZXJE ZXF1ZS5lbnF1ZXVlKG1fZC0+c3RhYmlsaXplckxhc3RQYWludEluZm8pOwotfQorICAgIGlmIChx dWV1ZS5zaXplKCkgPiAxKSB7CisgICAgICAgIFFRdWV1ZTxLaXNQYWludEluZm9ybWF0aW9uPjo6 Y29uc3RfaXRlcmF0b3IgaXQgPSBxdWV1ZS5jb25zdEJlZ2luKCk7CisgICAgICAgIFFRdWV1ZTxL aXNQYWludEluZm9ybWF0aW9uPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcXVldWUuY29uc3RFbmQo KTsKIAotdm9pZCBLaXNUb29sRnJlZWhhbmRIZWxwZXI6OnN0YWJpbGl6ZXJQYWludCgpCi17Ci0g ICAgLy8gR2V0IHRoZSBhdmVyYWdlIHBvc2l0aW9uIGFuZCBwcmVzc3VyZSBpbiB0aGUgZGVxdWUK LSAgICBxcmVhbCB4ID0gMC4wLAotICAgICAgICAgIHkgPSAwLjAsCi0gICAgICAgICAgcHJlc3N1 cmUgPSAwLjAsCi0gICAgICAgICAgeFRpbHQgPSAwLjAsCi0gICAgICAgICAgeVRpbHQgPSAwLjA7 Ci0KLSAgICBmb3JlYWNoIChLaXNQYWludEluZm9ybWF0aW9uIGluZm8sIG1fZC0+c3RhYmlsaXpl ckRlcXVlKSB7Ci0gICAgICAgIHggKz0gaW5mby5wb3MoKS54KCk7Ci0gICAgICAgIHkgKz0gaW5m by5wb3MoKS55KCk7Ci0gICAgICAgIHByZXNzdXJlICs9IGluZm8ucHJlc3N1cmUoKTsKLSAgICAg ICAgeFRpbHQgKz0gaW5mby54VGlsdCgpOwotICAgICAgICB5VGlsdCArPSBpbmZvLnlUaWx0KCk7 Ci0gICAgfQorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGZpcnN0IHBvaW50IGlzIGdvaW5n IHRvIGJlIG92ZXJyaWRkZW4gYnkgbGFzdFBhaW50SW5mbywgc2tpcCBpdC4KKyAgICAgICAgICov CisgICAgICAgIGl0Kys7CisgICAgICAgIGludCBpID0gMjsKIAotICAgIHggLz0gbV9kLT5zdGFi aWxpemVyRGVxdWUuc2l6ZSgpOwotICAgIHkgLz0gbV9kLT5zdGFiaWxpemVyRGVxdWUuc2l6ZSgp OwotICAgIHByZXNzdXJlIC89IG1fZC0+c3RhYmlsaXplckRlcXVlLnNpemUoKTsKLSAgICB4VGls dCAvPSBtX2QtPnN0YWJpbGl6ZXJEZXF1ZS5zaXplKCk7Ci0gICAgeVRpbHQgLz0gbV9kLT5zdGFi aWxpemVyRGVxdWUuc2l6ZSgpOworICAgICAgICB3aGlsZSAoaXQgIT0gZW5kKSB7CisgICAgICAg ICAgICBxcmVhbCBrID0gcXJlYWwoaSAtIDEpIC8gaTsgLy8gY29lZmYgZm9yIHVuaWZvcm0gYXZl cmFnaW5nCisgICAgICAgICAgICByZXN1bHQgPSBLaXNQYWludEluZm9ybWF0aW9uOjptaXgoaywg Kml0LCByZXN1bHQpOwogCi0gICAgLy8gRHJhdyB3aXRoIHRoZXNlIHBhcmFtcwotICAgIEtpc1Bh aW50SW5mb3JtYXRpb24gbmV3SW5mbyA9IG1fZC0+c3RhYmlsaXplckxhc3RQYWludEluZm87Ci0g ICAgbmV3SW5mby5zZXRQb3MoUVBvaW50Rih4LCB5KSk7Ci0gICAgbmV3SW5mby5zZXRQcmVzc3Vy ZShwcmVzc3VyZSk7Ci0gICAgcGFpbnRMaW5lKG1fZC0+cGFpbnRlckluZm9zLCBtX2QtPnByZXZp b3VzUGFpbnRJbmZvcm1hdGlvbiwgbmV3SW5mbyk7CisgICAgICAgICAgICBpdCsrOworICAgICAg ICAgICAgaSsrOworICAgICAgICB9CisgICAgfQogCi0gICAgbV9kLT5wcmV2aW91c1BhaW50SW5m b3JtYXRpb24gPSBuZXdJbmZvOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgS2lzVG9v bEZyZWVoYW5kSGVscGVyOjpzdGFiaWxpemVyUG9sbEFuZFBhaW50KCkKIHsKLSAgICAvLyBVcGRh dGUgdGhlIGRlcXVlIGFuZCBkcmF3IGEgbGluZSB0byB0aGUgbmV3IGF2ZXJhZ2UKLSAgICBzdGFi aWxpemVyUG9sbCgpOwotICAgIHN0YWJpbGl6ZXJQYWludCgpOworICAgIEtpc1BhaW50SW5mb3Jt YXRpb24gbmV3SW5mbyA9CisgICAgICAgIG1fZC0+Z2V0U3RhYmlsaXplZFBhaW50SW5mbyhtX2Qt PnN0YWJpbGl6ZXJEZXF1ZSwgbV9kLT5zdGFiaWxpemVyTGFzdFBhaW50SW5mbyk7CisKKyAgICBi b29sIGNhblBhaW50ID0gdHJ1ZTsKKworICAgIGlmIChtX2QtPnNtb290aGluZ09wdGlvbnMtPnVz ZURlbGF5RGlzdGFuY2UoKSkgeworICAgICAgICBjb25zdCBxcmVhbCBSID0gbV9kLT5zbW9vdGhp bmdPcHRpb25zLT5kZWxheURpc3RhbmNlKCkgLworICAgICAgICAgICAgbV9kLT5yZXNvdXJjZXMt PmVmZmVjdGl2ZVpvb20oKTsKKworICAgICAgICBRUG9pbnRGIGRpZmYgPSBtX2QtPnN0YWJpbGl6 ZXJMYXN0UGFpbnRJbmZvLnBvcygpIC0gbV9kLT5wcmV2aW91c1BhaW50SW5mb3JtYXRpb24ucG9z KCk7CisgICAgICAgIHFyZWFsIGR4ID0gc3FydChwb3cyKGRpZmYueCgpKSArIHBvdzIoZGlmZi55 KCkpKTsKKworICAgICAgICBjYW5QYWludCA9IGR4ID4gUjsKKyAgICB9CisKKyAgICBpZiAoY2Fu UGFpbnQpIHsKKyAgICAgICAgcGFpbnRMaW5lKG1fZC0+cGFpbnRlckluZm9zLCBtX2QtPnByZXZp b3VzUGFpbnRJbmZvcm1hdGlvbiwgbmV3SW5mbyk7CisgICAgICAgIG1fZC0+cHJldmlvdXNQYWlu dEluZm9ybWF0aW9uID0gbmV3SW5mbzsKKworICAgICAgICAvLyBQdXNoIHRoZSBuZXcgZW50cnkg dGhyb3VnaCB0aGUgcXVldWUKKyAgICAgICAgbV9kLT5zdGFiaWxpemVyRGVxdWUuZGVxdWV1ZSgp OworICAgICAgICBtX2QtPnN0YWJpbGl6ZXJEZXF1ZS5lbnF1ZXVlKG1fZC0+c3RhYmlsaXplckxh c3RQYWludEluZm8pOworCisgICAgICAgIGVtaXQgcmVxdWVzdEV4cGxpY2l0VXBkYXRlT3V0bGlu ZSgpOworCisgICAgfSBlbHNlIGlmIChtX2QtPnN0YWJpbGl6ZXJEZXF1ZS5oZWFkKCkucG9zKCkg IT0gbV9kLT5wcmV2aW91c1BhaW50SW5mb3JtYXRpb24ucG9zKCkpIHsKKworICAgICAgICBRUXVl dWU8S2lzUGFpbnRJbmZvcm1hdGlvbj46Oml0ZXJhdG9yIGl0ID0gbV9kLT5zdGFiaWxpemVyRGVx dWUuYmVnaW4oKTsKKyAgICAgICAgUVF1ZXVlPEtpc1BhaW50SW5mb3JtYXRpb24+OjppdGVyYXRv ciBlbmQgPSBtX2QtPnN0YWJpbGl6ZXJEZXF1ZS5lbmQoKTsKKworICAgICAgICB3aGlsZSAoaXQg IT0gZW5kKSB7CisgICAgICAgICAgICAqaXQgPSBtX2QtPnByZXZpb3VzUGFpbnRJbmZvcm1hdGlv bjsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgS2lzVG9v bEZyZWVoYW5kSGVscGVyOjpzdGFiaWxpemVyRW5kKCkKIHsKICAgICAvLyBGSVhNRTogVWdseSBo YWNrLCB0aGlzIGlzIG5vIGEgImRpc3RhbmNlIiBpbiBhbnkgd2F5Ci0gICAgaW50IHNhbXBsZVNp emUgPSBtX2QtPnNtb290aGluZ09wdGlvbnMuc21vb3RobmVzc0Rpc3RhbmNlKCk7CisgICAgaW50 IHNhbXBsZVNpemUgPSBtX2QtPnNtb290aGluZ09wdGlvbnMtPnNtb290aG5lc3NEaXN0YW5jZSgp OwogICAgIGFzc2VydChzYW1wbGVTaXplID4gMCk7CiAKICAgICAvLyBTdG9wIHRoZSB0aW1lcgpA QCAtNTkwLDggKzYzMCw5IEBAIHZvaWQgS2lzVG9vbEZyZWVoYW5kSGVscGVyOjpzdGFiaWxpemVy RW5kKCkKICAgICAgICAgLy8gSW4gZWFjaCBpdGVyYXRpb24gd2UgYWRkIHRoZSBsYXRlc3QgcGFp bnQgaW5mbyBhbmQgZGVsZXRlIHRoZSBvbGRlc3QKICAgICAgICAgLy8gQWZ0ZXIgYHNhbXBsZVNp emVgIGl0ZXJhdGlvbnMgdGhlIGRlcXVlIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIGxhdGVzdAog ICAgICAgICAvLyB2YWx1ZSBhbmQgd2Ugd2lsbCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBwb2ludC4K LSAgICAgICAgc3RhYmlsaXplclBvbGwoKTsKLSAgICAgICAgc3RhYmlsaXplclBhaW50KCk7Cisg ICAgICAgIGlmIChtX2QtPnNtb290aGluZ09wdGlvbnMtPmZpbmlzaFN0YWJpbGl6ZWRDdXJ2ZSgp KSB7CisgICAgICAgICAgICBzdGFiaWxpemVyUG9sbEFuZFBhaW50KCk7CisgICAgICAgIH0KICAg ICB9CiB9CiAKZGlmZiAtLWdpdCBhL2tyaXRhL3VpL3Rvb2wva2lzX3Rvb2xfZnJlZWhhbmRfaGVs cGVyLmggYi9rcml0YS91aS90b29sL2tpc190b29sX2ZyZWVoYW5kX2hlbHBlci5oCmluZGV4IDEz MTdkYzAuLmEzNTA1MTQgMTAwNjQ0Ci0tLSBhL2tyaXRhL3VpL3Rvb2wva2lzX3Rvb2xfZnJlZWhh bmRfaGVscGVyLmgKKysrIGIva3JpdGEvdWkvdG9vbC9raXNfdG9vbF9mcmVlaGFuZF9oZWxwZXIu aApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgInN0cm9rZXMvZnJlZWhhbmRfc3Ryb2tlLmgi CiAjaW5jbHVkZSAia2lzX2RlZmF1bHRfYm91bmRzLmgiCiAjaW5jbHVkZSAia2lzX3BhaW50b3Bf c2V0dGluZ3MuaCIKKyNpbmNsdWRlICJraXNfc21vb3RoaW5nX29wdGlvbnMuaCIKIAogY2xhc3Mg S29Qb2ludGVyRXZlbnQ7CiBjbGFzcyBLb0NhbnZhc1Jlc291cmNlTWFuYWdlcjsKQEAgLTM2LDcg KzM3LDcgQEAgY2xhc3MgS2lzU3Ryb2tlc0ZhY2FkZTsKIGNsYXNzIEtpc1Bvc3RFeGVjdXRpb25V bmRvQWRhcHRlcjsKIGNsYXNzIEtpc1BhaW50T3A7CiBjbGFzcyBLaXNQYWludGVyOwotc3RydWN0 IEtpc1Ntb290aGluZ09wdGlvbnM7CisKIAogY2xhc3MgS1JJVEFVSV9FWFBPUlQgS2lzVG9vbEZy ZWVoYW5kSGVscGVyIDogcHVibGljIFFPYmplY3QKIHsKQEAgLTUzLDcgKzU0LDggQEAgcHVibGlj OgogICAgICAgICAgICAgICAgICAgICAgICAgICBLaXNSZWNvcmRpbmdBZGFwdGVyICpyZWNvcmRp bmdBZGFwdGVyID0gMCk7CiAgICAgfktpc1Rvb2xGcmVlaGFuZEhlbHBlcigpOwogCi0gICAgdm9p ZCBzZXRTbW9vdGhuZXNzKGNvbnN0IEtpc1Ntb290aGluZ09wdGlvbnMgJnNtb290aGluZ09wdGlv bnMpOworICAgIHZvaWQgc2V0U21vb3RobmVzcyhLaXNTbW9vdGhpbmdPcHRpb25zU1Agc21vb3Ro aW5nT3B0aW9ucyk7CisgICAgS2lzU21vb3RoaW5nT3B0aW9uc1NQIHNtb290aGluZ09wdGlvbnMo KSBjb25zdDsKIAogICAgIHZvaWQgaW5pdFBhaW50KEtvUG9pbnRlckV2ZW50ICpldmVudCwKICAg ICAgICAgICAgICAgICAgICBLb0NhbnZhc1Jlc291cmNlTWFuYWdlciAqcmVzb3VyY2VNYW5hZ2Vy LApAQCAtNzEsNiArNzMsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBLaXNQYWludE9wU2V0dGluZ3MgKmdsb2JhbFNldHRpbmdzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBLaXNQYWludE9wU2V0dGluZ3M6Ok91dGxpbmVNb2RlIG1v ZGUpIGNvbnN0OwogCitzaWduYWxzOgorICAgIC8qKgorICAgICAqIFRoZSBzaWduYWwgaXMgZW1p dHRlZCB3aGVuIHRoZSBvdXRsaW5lIHNob3VsZCBiZSB1cGRhdGVkCisgICAgICogZXhwbGljaXRs eSBieSB0aGUgdG9vbC4gVXNlZCBieSBTdGFiaWxpemVyIG9wdGlvbiwgYmVjYXVzZSBpdAorICAg ICAqIHBhaW50cyBvbiBpbnRlcm5hbCB0aW1lciBldmVudHMgaW5zdGVhZCBvZiB0aGUgb24gZXZl cnkgcGFpbnQoKQorICAgICAqIGV2ZW50CisgICAgICovCisgICAgdm9pZCByZXF1ZXN0RXhwbGlj aXRVcGRhdGVPdXRsaW5lKCk7CisKIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBjcmVh dGVQYWludGVycyhRVmVjdG9yPFBhaW50ZXJJbmZvKj4gJnBhaW50ZXJJbmZvcywKQEAgLTEwOSw4 ICsxMjAsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzdGFiaWxpemVyU3RhcnQoS2lzUGFpbnRJ bmZvcm1hdGlvbiBmaXJzdFBhaW50SW5mbyk7CiAgICAgdm9pZCBzdGFiaWxpemVyRW5kKCk7Ci0g ICAgdm9pZCBzdGFiaWxpemVyUG9sbCgpOwotICAgIHZvaWQgc3RhYmlsaXplclBhaW50KCk7CiAK IHByaXZhdGUgc2xvdHM6CiAKZGlmZiAtLWdpdCBhL2tyaXRhL3VpL3Rvb2wva2lzX3Rvb2xfcGFp bnQuY2MgYi9rcml0YS91aS90b29sL2tpc190b29sX3BhaW50LmNjCmluZGV4IDcwNzNmM2MuLjI3 YTFiZDMgMTAwNjQ0Ci0tLSBhL2tyaXRhL3VpL3Rvb2wva2lzX3Rvb2xfcGFpbnQuY2MKKysrIGIv a3JpdGEvdWkvdG9vbC9raXNfdG9vbF9wYWludC5jYwpAQCAtMzcxLDYgKzM3MSw0OCBAQCBRV2lk Z2V0ICogS2lzVG9vbFBhaW50OjpjcmVhdGVPcHRpb25XaWRnZXQoKQogICAgIHJldHVybiBvcHRp b25XaWRnZXQ7CiB9CiAKK1FXaWRnZXQqIGZpbmRMYWJlbFdpZGdldChRR3JpZExheW91dCAqbGF5 b3V0LCBRV2lkZ2V0ICpjb250cm9sKQoreworICAgIFFXaWRnZXQgKnJlc3VsdCA9IDA7CisKKyAg ICBpbnQgaW5kZXggPSBsYXlvdXQtPmluZGV4T2YoY29udHJvbCk7CisKKyAgICBpbnQgcm93LCBj b2wsIHJvd1NwYW4sIGNvbFNwYW47CisgICAgbGF5b3V0LT5nZXRJdGVtUG9zaXRpb24oaW5kZXgs ICZyb3csICZjb2wsICZyb3dTcGFuLCAmY29sU3Bhbik7CisKKyAgICBpZiAoY29sID4gMCkgewor ICAgICAgICBRTGF5b3V0SXRlbSAqaXRlbSA9IGxheW91dC0+aXRlbUF0UG9zaXRpb24ocm93LCBj b2wgLSAxKTsKKworICAgICAgICBpZiAoaXRlbSkgeworICAgICAgICAgICAgcmVzdWx0ID0gaXRl bS0+d2lkZ2V0KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBRTGF5b3V0SXRl bSAqaXRlbSA9IGxheW91dC0+aXRlbUF0UG9zaXRpb24ocm93LCBjb2wgKyAxKTsKKyAgICAgICAg aWYgKGl0ZW0pIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGl0ZW0tPndpZGdldCgpOworICAgICAg ICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBLaXNUb29sUGFpbnQ6 OnNob3dDb250cm9sKFFXaWRnZXQgKmNvbnRyb2wsIGJvb2wgdmFsdWUpCit7CisgICAgY29udHJv bC0+c2V0VmlzaWJsZSh2YWx1ZSk7CisgICAgUVdpZGdldCAqbGFiZWwgPSBmaW5kTGFiZWxXaWRn ZXQobV9vcHRpb25zV2lkZ2V0TGF5b3V0LCBjb250cm9sKTsKKyAgICBpZiAobGFiZWwpIHsKKyAg ICAgICAgbGFiZWwtPnNldFZpc2libGUodmFsdWUpOworICAgIH0KK30KKwordm9pZCBLaXNUb29s UGFpbnQ6OmVuYWJsZUNvbnRyb2woUVdpZGdldCAqY29udHJvbCwgYm9vbCB2YWx1ZSkKK3sKKyAg ICBjb250cm9sLT5zZXRFbmFibGVkKHZhbHVlKTsKKyAgICBRV2lkZ2V0ICpsYWJlbCA9IGZpbmRM YWJlbFdpZGdldChtX29wdGlvbnNXaWRnZXRMYXlvdXQsIGNvbnRyb2wpOworICAgIGlmIChsYWJl bCkgeworICAgICAgICBsYWJlbC0+c2V0RW5hYmxlZCh2YWx1ZSk7CisgICAgfQorfQogCiB2b2lk IEtpc1Rvb2xQYWludDo6YWRkT3B0aW9uV2lkZ2V0TGF5b3V0KFFMYXlvdXQgKmxheW91dCkKIHsK ZGlmZiAtLWdpdCBhL2tyaXRhL3VpL3Rvb2wva2lzX3Rvb2xfcGFpbnQuaCBiL2tyaXRhL3VpL3Rv b2wva2lzX3Rvb2xfcGFpbnQuaAppbmRleCBhYmRiNDA4Li5jM2IxNDVlIDEwMDY0NAotLS0gYS9r cml0YS91aS90b29sL2tpc190b29sX3BhaW50LmgKKysrIGIva3JpdGEvdWkvdG9vbC9raXNfdG9v bF9wYWludC5oCkBAIC0xMTksNiArMTE5LDkgQEAgcHJvdGVjdGVkOgogICAgIC8vLyBBZGQgYSB3 aWRnZXQgYW5kIGEgbGFiZWwgdG8gdGhlIGN1cnJlbnQgb3B0aW9uIHdpZGdldCBsYXlvdXQuCiAg ICAgdmlydHVhbCB2b2lkIGFkZE9wdGlvbldpZGdldE9wdGlvbihRV2lkZ2V0ICpjb250cm9sLCBR V2lkZ2V0ICpsYWJlbCA9IDApOwogCisgICAgdm9pZCBzaG93Q29udHJvbChRV2lkZ2V0ICpjb250 cm9sLCBib29sIHZhbHVlKTsKKyAgICB2b2lkIGVuYWJsZUNvbnRyb2woUVdpZGdldCAqY29udHJv bCwgYm9vbCB2YWx1ZSk7CisKICAgICB2aXJ0dWFsIFFXaWRnZXQgKiBjcmVhdGVPcHRpb25XaWRn ZXQoKTsKIAogICAgIC8qKgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpLcml0YSBtYWlsaW5nIGxpc3QKa2ltYWdlc2hvcEBrZGUub3JnCmh0dHBzOi8vbWFp bC5rZGUub3JnL21haWxtYW4vbGlzdGluZm8va2ltYWdlc2hvcAo=