--------------Boundary-00=_2XO7GSVHEX1WF551N6WK
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
Hello,
After silently waiting for tabs to come into konqueror for quite a while, I decided that I would just try and do it myself. After some coding, I decided it would be best if i released what I have done so far.
As for the design, I started out by making a base class for all frame containers called KonqFrameContainerBase which had basic functions like addChildFrame and removeChildFrame, then I made the original KonqFrameContainer derive that, and I made a new class called KonqFrameTabs which also dervies KonqFrameContainerBase and QTabWidget. I then went into KonqViewManager and made it so that m_pMainContainer is always a tab widget (if you're gonna use tabs, it makes sense that you would only use them at the top level, right?). Then all the frame splitting and such takes place under that as it has always done.
I made changes to the printfullhierarchy in KonqViewManager, which only really applies to debuging but still its there.
I also changed the way frames are deleted. I wasn't sure about this one since it changed quite a few things, but it made more sense to me. Now when frames are deleted all you do is call delete on the frame you want to delete and through class destructors, it will hierarchially delete subframes of the original frame. You still have to take care of deleting views but this can be done easily though the listViews function in KonqFrameBase. Again, this last change is not essential to tabs, so it can be removed if it needs to be.
Now, with these changes there is no need for the splitWindow function, and I've added the addTab and removeTab functions.
Also, to account for people who dont want tabs, when there is only one tab, the tab bar gets hidden, so its acts as it normally would without tabs. Only problem is that there is a still a grey space where the hidden tab bar resides, i havent been able to fix that. Another thing that needs work, is focus after the removal of a frame
Remember to add the following lines to your konqueror.rc to get the new menu items under the window menu (on debian its in /usr/share/apps/konqueror/):
I think thats it, if you have any more questions, which I assume you will, feel free to ask. This patch works for 2.2.1 and 2.2.2. For some reason, I cant compile kde3.
Oh yeah, this is very much a work in progress. I am well aware that there are bugs in it, additional help would be much appreciated.
Best regards,
Doug Hanley
--------------Boundary-00=_2XO7GSVHEX1WF551N6WK
Content-Type: text/x-diff;
charset="iso-8859-1";
name="konqtabs.patch"
Content-Transfer-Encoding: base64
Content-Description: Adds Tabbed Browsing to Konqueror
Content-Disposition: attachment; filename="konqtabs.patch"
Q29tbW9uIHN1YmRpcmVjdG9yaWVzOiBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL0NWUyBh
bmQga2RlYmFzZS0yLjIuMi9rb25xdWVyb3IvQ1ZTCkNvbW1vbiBzdWJkaXJlY3Rvcmllczoga2Rl
YmFzZS0yLjIuMi5vcmlnL2tvbnF1ZXJvci9hYm91dCBhbmQga2RlYmFzZS0yLjIuMi9rb25xdWVy
b3IvYWJvdXQKQ29tbW9uIHN1YmRpcmVjdG9yaWVzOiBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVl
cm9yL2NsaWVudCBhbmQga2RlYmFzZS0yLjIuMi9rb25xdWVyb3IvY2xpZW50CkNvbW1vbiBzdWJk
aXJlY3Rvcmllczoga2RlYmFzZS0yLjIuMi5vcmlnL2tvbnF1ZXJvci9kaXJ0cmVlIGFuZCBrZGVi
YXNlLTIuMi4yL2tvbnF1ZXJvci9kaXJ0cmVlCkNvbW1vbiBzdWJkaXJlY3Rvcmllczoga2RlYmFz
ZS0yLjIuMi5vcmlnL2tvbnF1ZXJvci9oaXN0b3J5IGFuZCBrZGViYXNlLTIuMi4yL2tvbnF1ZXJv
ci9oaXN0b3J5CkNvbW1vbiBzdWJkaXJlY3Rvcmllczoga2RlYmFzZS0yLjIuMi5vcmlnL2tvbnF1
ZXJvci9pY29udmlldyBhbmQga2RlYmFzZS0yLjIuMi9rb25xdWVyb3IvaWNvbnZpZXcKQ29tbW9u
IHN1YmRpcmVjdG9yaWVzOiBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL2tlZGl0Ym9va21h
cmtzIGFuZCBrZGViYXNlLTIuMi4yL2tvbnF1ZXJvci9rZWRpdGJvb2ttYXJrcwpDb21tb24gc3Vi
ZGlyZWN0b3JpZXM6IGtkZWJhc2UtMi4yLjIub3JpZy9rb25xdWVyb3Iva2ZpbmRwYXJ0IGFuZCBr
ZGViYXNlLTIuMi4yL2tvbnF1ZXJvci9rZmluZHBhcnQKQ29tbW9uIHN1YmRpcmVjdG9yaWVzOiBr
ZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL2tmbWV4ZWMgYW5kIGtkZWJhc2UtMi4yLjIva29u
cXVlcm9yL2tmbWV4ZWMKZGlmZiAtdSBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL2tvbnFf
ZnJhbWUuY2Mga2RlYmFzZS0yLjIuMi9rb25xdWVyb3Iva29ucV9mcmFtZS5jYwotLS0ga2RlYmFz
ZS0yLjIuMi5vcmlnL2tvbnF1ZXJvci9rb25xX2ZyYW1lLmNjCU1vbiBOb3YgIDUgMjE6NDA6Mjkg
MjAwMQorKysga2RlYmFzZS0yLjIuMi9rb25xdWVyb3Iva29ucV9mcmFtZS5jYwlTdW4gRGVjICA5
IDE3OjU2OjM1IDIwMDEKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxxdGltZXIuaD4KICNp
bmNsdWRlIDxxcHVzaGJ1dHRvbi5oPgogI2luY2x1ZGUgPHF0b29sYnV0dG9uLmg+CisjaW5jbHVk
ZSA8cXRhYmJhci5oPgogCiAjaW5jbHVkZSA8a2FwcC5oPgogI2luY2x1ZGUgPGtkZWJ1Zy5oPgpA
QCAtMzcxLDggKzM3MiwxNSBAQAogCiAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotS29ucUZyYW1lOjpLb25xRnJh
bWUoIEtvbnFGcmFtZUNvbnRhaW5lciAqX3BhcmVudENvbnRhaW5lciwgY29uc3QgY2hhciAqX25h
bWUgKQotOlFXaWRnZXQoX3BhcmVudENvbnRhaW5lcixfbmFtZSkKK3ZvaWQgS29ucUZyYW1lQmFz
ZTo6cHJpbnRGcmFtZUluZm8oUVN0cmluZyBzcGFjZXMpCit7CisJa2REZWJ1ZygxMjAyKSA8PCBz
cGFjZXMgPDwgIktvbnFGcmFtZUJhc2UgIiA8PCB0aGlzIDw8ICIsIHRoaXMgc2hvdWxkbid0IGhh
cHBlbiEiIDw8IGVuZGw7Cit9CisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitLb25xRnJhbWU6OktvbnFGcmFt
ZSggS29ucUZyYW1lQ29udGFpbmVyQmFzZSAqX3BhcmVudENvbnRhaW5lciwgY29uc3QgY2hhciAq
X25hbWUgKQorOlFXaWRnZXQoX3BhcmVudENvbnRhaW5lci0+d2lkZ2V0KCksX25hbWUpCiB7CiAg
ICBtX3BMYXlvdXQgPSAwTDsKICAgIG1fcFZpZXcgPSAwTDsKQEAgLTM4MywxMiArMzkxLDE0IEBA
CiAgICBjb25uZWN0KG1fcFN0YXR1c0JhciwgU0lHTkFMKGNsaWNrZWQoKSksIHRoaXMsIFNMT1Qo
c2xvdFN0YXR1c0JhckNsaWNrZWQoKSkpOwogICAgY29ubmVjdCggbV9wU3RhdHVzQmFyLCBTSUdO
QUwoIGxpbmtlZFZpZXdDbGlja2VkKCBib29sICkgKSwgdGhpcywgU0xPVCggc2xvdExpbmtlZFZp
ZXdDbGlja2VkKCBib29sICkgKSApOwogICAgbV9zZXBhcmF0b3IgPSAwOworICAgbV9wUGFyZW50
Q29udGFpbmVyID0gX3BhcmVudENvbnRhaW5lcjsKIH0KIAogS29ucUZyYW1lOjp+S29ucUZyYW1l
KCkKIHsKICAga2REZWJ1ZygxMjAyKSA8PCAiS29ucUZyYW1lOjp+S29ucUZyYW1lKCkgIiA8PCB0
aGlzIDw8IGVuZGw7CiAgIC8vZGVsZXRlIG1fcExheW91dDsKKwkvL2lmIChtX3BWaWV3KSBkZWxl
dGUgbV9wVmlldzsKIH0KIAogYm9vbCBLb25xRnJhbWU6OmlzQWN0aXZlUGFydCgpCkBAIC00MjEs
NiArNDMxLDE2IEBACiAgICAgY2hpbGRWaWV3KCktPmNvcHlIaXN0b3J5KCBzdGF0aWNfY2FzdDxL
b25xRnJhbWUgKj4oIG90aGVyICktPmNoaWxkVmlldygpICk7CiB9CiAKK3ZvaWQgS29ucUZyYW1l
OjpwcmludEZyYW1lSW5mbyggUVN0cmluZyBzcGFjZXMgKQoreworCWtkRGVidWcoMTIwMikgPDwg
c3BhY2VzIDw8ICJLb25xRnJhbWUgIiA8PCB0aGlzIDw8ICIgY29udGFpbmluZyB2aWV3ICIKKyAg
CSAJCSAgICAgICAgPDwgY2hpbGRWaWV3KCkKKyAgICAgICAgICAgICAgICA8PCAiIHBhcnQgIgor
ICAgICAJICAgICAgICAgIDw8IHBhcnQoKQorICAgICAgIAkgICAgICAgIDw8ICIgd2hvc2Ugd2lk
Z2V0IGlzIGEgIgorICAgICAgICAgCSAgICAgIDw8IHBhcnQoKS0+d2lkZ2V0KCktPmNsYXNzTmFt
ZSgpIDw8IGVuZGw7Cit9CisKIEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICpLb25xRnJhbWU6OmF0dGFj
aCggY29uc3QgS29ucVZpZXdGYWN0b3J5ICZ2aWV3RmFjdG9yeSApCiB7CiAgICBLb25xVmlld0Zh
Y3RvcnkgZmFjdG9yeSggdmlld0ZhY3RvcnkgKTsKQEAgLTQ5MywxNCArNTEzLDYgQEAKICAgIH0K
IH07CiAKLUtvbnFGcmFtZUNvbnRhaW5lciogS29ucUZyYW1lOjpwYXJlbnRDb250YWluZXIoKQot
ewotICAgaWYoIHBhcmVudFdpZGdldCgpLT5pc0EoIktvbnFGcmFtZUNvbnRhaW5lciIpICkKLSAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxLb25xRnJhbWVDb250YWluZXIqPihwYXJlbnRXaWRnZXQo
KSk7Ci0gICBlbHNlCi0gICAgICByZXR1cm4gMEw7Ci19Ci0KIHZvaWQgS29ucUZyYW1lOjpyZXBh
cmVudEZyYW1lKCBRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IFFQb2ludCAmIHAsIGJvb2wgc2hvd0l0
ICkKIHsKICAgIFFXaWRnZXQ6OnJlcGFyZW50KCBwYXJlbnQsIHAsIHNob3dJdCApOwpAQCAtNTQw
LDE4ICs1NTIsMzEgQEAKIAogLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKK3ZvaWQgS29ucUZyYW1lQ29udGFpbmVy
QmFzZTo6cHJpbnRGcmFtZUluZm8oUVN0cmluZyBzcGFjZXMpCit7CisJa2REZWJ1ZygxMjAyKSA8
PCBzcGFjZXMgPDwgIktvbnFGcmFtZUNvbnRhaW5lckJhc2UgIiA8PCB0aGlzIDw8ICIsIHRoaXMg
c2hvdWxkbid0IGhhcHBlbiEiIDw8IGVuZGw7Cit9CisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiBLb25xRnJh
bWVDb250YWluZXI6OktvbnFGcmFtZUNvbnRhaW5lciggT3JpZW50YXRpb24gbywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRV2lkZ2V0KiBwYXJlbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS29ucUZyYW1lQ29udGFpbmVyQmFzZSog
cGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKiBuYW1lKQotICA6IFFTcGxpdHRlciggbywgcGFyZW50LCBuYW1lKQorICA6IFFTcGxpdHRl
ciggbywgcGFyZW50LT53aWRnZXQoKSwgbmFtZSkKIHsKKwltX3BQYXJlbnRDb250YWluZXIgPSBw
YXJlbnQ7CiAgIG1fcEZpcnN0Q2hpbGQgPSAwTDsKICAgbV9wU2Vjb25kQ2hpbGQgPSAwTDsKKyAg
c2V0T3BhcXVlUmVzaXplKCB0cnVlICk7CiB9CiAKIEtvbnFGcmFtZUNvbnRhaW5lcjo6fktvbnFG
cmFtZUNvbnRhaW5lcigpCiB7CiAgICAga2REZWJ1ZygxMjAyKSA8PCAiS29ucUZyYW1lQ29udGFp
bmVyOjp+S29ucUZyYW1lQ29udGFpbmVyKCkgIiA8PCB0aGlzIDw8ICIgLSAiIDw8IGNsYXNzTmFt
ZSgpIDw8IGVuZGw7CisJCWlmICggbV9wRmlyc3RDaGlsZCApCisJCQlkZWxldGUgbV9wRmlyc3RD
aGlsZDsKKwkJaWYgKCBtX3BTZWNvbmRDaGlsZCApCisJCQlkZWxldGUgbV9wU2Vjb25kQ2hpbGQ7
CiB9CiAKIHZvaWQgS29ucUZyYW1lQ29udGFpbmVyOjpsaXN0Vmlld3MoIENoaWxkVmlld0xpc3Qg
KnZpZXdMaXN0ICkKQEAgLTYyMCwxMiArNjQ1LDE1IEBACiAgICByZXR1cm4gMEw7CiB9CiAKLUtv
bnFGcmFtZUNvbnRhaW5lciogS29ucUZyYW1lQ29udGFpbmVyOjpwYXJlbnRDb250YWluZXIoKQor
dm9pZCBLb25xRnJhbWVDb250YWluZXI6OnByaW50RnJhbWVJbmZvKCBRU3RyaW5nIHNwYWNlcyAp
CiB7Ci0gIGlmKCBwYXJlbnRXaWRnZXQoKS0+aXNBKCJLb25xRnJhbWVDb250YWluZXIiKSApCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEtvbnFGcmFtZUNvbnRhaW5lcio+KHBhcmVudFdpZGdldCgp
KTsKLSAgZWxzZQotICAgIHJldHVybiAwTDsKKwlrZERlYnVnKDEyMDIpIDw8IHNwYWNlcyA8PCAi
S29ucUZyYW1lQ29udGFpbmVyICIgPDwgdGhpcyA8PCBlbmRsOworCUtvbnFGcmFtZUJhc2UqIGNo
aWxkID0gZmlyc3RDaGlsZCgpOworCWlmIChjaGlsZCAhPSAwTCkgY2hpbGQtPnByaW50RnJhbWVJ
bmZvKHNwYWNlcyArICIgICIpOworCWVsc2Uga2REZWJ1ZygxMjAyKSA8PCBzcGFjZXMgPDwgIiAg
TnVsbCBjaGlsZCIgPDwgZW5kbDsKKyAgY2hpbGQgPSBzZWNvbmRDaGlsZCgpOworCWlmIChjaGls
ZCAhPSAwTCkgY2hpbGQtPnByaW50RnJhbWVJbmZvKHNwYWNlcyArICIgICIpOworCWVsc2Uga2RE
ZWJ1ZygxMjAyKSA8PCBzcGFjZXMgPDwgIiAgTnVsbCBjaGlsZCIgPDwgZW5kbDsKIH0KIAogdm9p
ZCBLb25xRnJhbWVDb250YWluZXI6OnJlcGFyZW50RnJhbWUoIFFXaWRnZXQqIHBhcmVudCwgY29u
c3QgUVBvaW50ICYgcCwgYm9vbCBzaG93SXQgKQpAQCAtNjQ5LDExICs2NzcsMTMgQEAKICAgICAg
IGlmKCAhbV9wRmlyc3RDaGlsZCApCiAgICAgICB7CiAgICAgICAgICAgbV9wRmlyc3RDaGlsZCA9
IGZyYW1lOworCQkJCQlmcmFtZS0+c2V0UGFyZW50Q29udGFpbmVyKHRoaXMpOwogICAgICAgICAg
IGtkRGVidWcoMTIwMikgPDwgIlNldHRpbmcgYXMgZmlyc3QgY2hpbGQiIDw8IGVuZGw7CiAgICAg
ICB9CiAgICAgICBlbHNlIGlmKCAhbV9wU2Vjb25kQ2hpbGQgKQogICAgICAgewogICAgICAgICAg
IG1fcFNlY29uZENoaWxkID0gZnJhbWU7CisJCQkJCWZyYW1lLT5zZXRQYXJlbnRDb250YWluZXIo
dGhpcyk7CiAgICAgICAgICAga2REZWJ1ZygxMjAyKSA8PCAiU2V0dGluZyBhcyBzZWNvbmQgY2hp
bGQiIDw8IGVuZGw7CiAgICAgICB9CiAgICAgICBlbHNlCkBAIC02NjYsMTQgKzY5NiwxNDYgQEAK
IHZvaWQgS29ucUZyYW1lQ29udGFpbmVyOjpyZW1vdmVDaGlsZEZyYW1lKCBLb25xRnJhbWVCYXNl
ICogZnJhbWUgKQogewogICBrZERlYnVnKDEyMDIpIDw8ICJLb25xRnJhbWVDb250YWluZXI6OlJl
bW92ZUNoaWxkRnJhbWUgIiA8PCB0aGlzIDw8ICIuIENoaWxkICIgPDwgZnJhbWUgPDwgIiByZW1v
dmVkIiA8PCBlbmRsOworCiAgIGlmKCBtX3BGaXJzdENoaWxkID09IGZyYW1lICkKLSAgICBtX3BG
aXJzdENoaWxkID0gMEw7CisJeworCQltX3BGaXJzdENoaWxkID0gbV9wU2Vjb25kQ2hpbGQ7CisJ
CW1fcFNlY29uZENoaWxkID0gMEw7CisJfQogCiAgIGVsc2UgaWYoIG1fcFNlY29uZENoaWxkID09
IGZyYW1lICkKICAgICBtX3BTZWNvbmRDaGlsZCA9IDBMOwogCiAgIGVsc2UKICAgICBrZFdhcm5p
bmcoMTIwMikgPDwgdGhpcyA8PCAiIENhbid0IGZpbmQgdGhpcyBjaGlsZDoiIDw8IGZyYW1lIDw8
IGVuZGw7Cit9CisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitLb25xRnJhbWVUYWJzOjpLb25xRnJhbWVUYWJz
KFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciAqIG5hbWUpCisgIDogUVRhYldpZGdldChwYXJl
bnQsIG5hbWUpCit7CisgIG1fcFBhcmVudENvbnRhaW5lciA9IDBMOworICBtX3BDaGlsZEZyYW1l
TGlzdCA9IG5ldyBRTGlzdDxLb25xRnJhbWVCYXNlPjsKKyAgbV9wQ2hpbGRGcmFtZUxpc3QtPnNl
dEF1dG9EZWxldGUoZmFsc2UpOworCisgIHRhYkJhcigpLT5oaWRlKCk7Cit9CisKK0tvbnFGcmFt
ZVRhYnM6On5Lb25xRnJhbWVUYWJzKCkKK3sKKyAga2REZWJ1ZygxMjAyKSA8PCAiS29ucUZyYW1l
VGFiczo6fktvbnFGcmFtZVRhYnMoKSAiIDw8IHRoaXMgPDwgIiAtICIgPDwgY2xhc3NOYW1lKCkg
PDwgZW5kbDsKKyAgbV9wQ2hpbGRGcmFtZUxpc3QtPnNldEF1dG9EZWxldGUodHJ1ZSk7CQorICBk
ZWxldGUgbV9wQ2hpbGRGcmFtZUxpc3Q7Cit9CisKK3ZvaWQgS29ucUZyYW1lVGFiczo6bGlzdFZp
ZXdzKCBDaGlsZFZpZXdMaXN0ICp2aWV3TGlzdCApIHsKKyAgaW50IGNoaWxkRnJhbWVDb3VudCA9
IG1fcENoaWxkRnJhbWVMaXN0LT5jb3VudCgpOworICBmb3IoIGludCBpPTAgOyBpPGNoaWxkRnJh
bWVDb3VudCA7IGkrKykgbV9wQ2hpbGRGcmFtZUxpc3QtPmF0KGkpLT5saXN0Vmlld3Modmlld0xp
c3QpOworfQorCit2b2lkIEtvbnFGcmFtZVRhYnM6OnNhdmVDb25maWcoIEtDb25maWcqIGNvbmZp
ZywgY29uc3QgUVN0cmluZyAmcHJlZml4LCBib29sIHNhdmVVUkxzLCBpbnQgaWQsIGludCBkZXB0
aCApCit7CisgIC8qICBpbnQgaWRTZWNvbmQgPSBpZCArIChpbnQpcG93KCAyLjAsIGRlcHRoICk7
CisKKyAgLy93cml0ZSBjaGlsZHJlbiBzaXplcworICBjb25maWctPndyaXRlRW50cnkoIFFTdHJp
bmc6OmZyb21MYXRpbjEoICJTcGxpdHRlclNpemVzIiApLnByZXBlbmQoIHByZWZpeCApLCBzaXpl
cygpICk7CisKKyAgLy93cml0ZSBjaGlsZHJlbgorICBRU3RyaW5nTGlzdCBzdHJsc3Q7CisgIGlm
KCBmaXJzdENoaWxkKCkgKQorICAgIHN0cmxzdC5hcHBlbmQoIFFTdHJpbmc6OmZyb21MYXRpbjEo
IGZpcnN0Q2hpbGQoKS0+ZnJhbWVUeXBlKCkgKSArIFFTdHJpbmc6Om51bWJlcihpZFNlY29uZCAt
IDEpICk7CisgIGlmKCBzZWNvbmRDaGlsZCgpICkKKyAgICBzdHJsc3QuYXBwZW5kKCBRU3RyaW5n
Ojpmcm9tTGF0aW4xKCBzZWNvbmRDaGlsZCgpLT5mcmFtZVR5cGUoKSApICsgUVN0cmluZzo6bnVt
YmVyKCBpZFNlY29uZCApICk7CisKKyAgY29uZmlnLT53cml0ZUVudHJ5KCBRU3RyaW5nOjpmcm9t
TGF0aW4xKCAiQ2hpbGRyZW4iICkucHJlcGVuZCggcHJlZml4ICksIHN0cmxzdCApOworCisgIC8v
d3JpdGUgb3JpZW50YXRpb24KKyAgUVN0cmluZyBvOworICBpZiggb3JpZW50YXRpb24oKSA9PSBR
dDo6SG9yaXpvbnRhbCApCisgICAgbyA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIkhvcml6b250YWwi
KTsKKyAgZWxzZSBpZiggb3JpZW50YXRpb24oKSA9PSBRdDo6VmVydGljYWwgKQorICAgIG8gPSBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJWZXJ0aWNhbCIpOworICBjb25maWctPndyaXRlRW50cnkoIFFT
dHJpbmc6OmZyb21MYXRpbjEoICJPcmllbnRhdGlvbiIgKS5wcmVwZW5kKCBwcmVmaXggKSwgbyAp
OworCisKKyAgLy93cml0ZSBjaGlsZCBjb25maWdzCisgIGlmKCBmaXJzdENoaWxkKCkgKSB7Cisg
ICAgUVN0cmluZyBuZXdQcmVmaXggPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCBmaXJzdENoaWxkKCkt
PmZyYW1lVHlwZSgpICkgKyBRU3RyaW5nOjpudW1iZXIoaWRTZWNvbmQgLSAxKTsKKyAgICBuZXdQ
cmVmaXguYXBwZW5kKCAnXycgKTsKKyAgICBmaXJzdENoaWxkKCktPnNhdmVDb25maWcoIGNvbmZp
ZywgbmV3UHJlZml4LCBzYXZlVVJMcywgaWQsIGRlcHRoICsgMSApOworICB9CisKKyAgaWYoIHNl
Y29uZENoaWxkKCkgKSB7CisgICAgUVN0cmluZyBuZXdQcmVmaXggPSBRU3RyaW5nOjpmcm9tTGF0
aW4xKCBzZWNvbmRDaGlsZCgpLT5mcmFtZVR5cGUoKSApICsgUVN0cmluZzo6bnVtYmVyKCBpZFNl
Y29uZCApOworICAgIG5ld1ByZWZpeC5hcHBlbmQoICdfJyApOworICAgIHNlY29uZENoaWxkKCkt
PnNhdmVDb25maWcoIGNvbmZpZywgbmV3UHJlZml4LCBzYXZlVVJMcywgaWRTZWNvbmQsIGRlcHRo
ICsgMSApOworICB9CisKKyAgKi8KK30KKwordm9pZCBLb25xRnJhbWVUYWJzOjpjb3B5SGlzdG9y
eSggS29ucUZyYW1lQmFzZSAqb3RoZXIgKQoreworICAvKiBhc3NlcnQoIG90aGVyLT5mcmFtZVR5
cGUoKSA9PSAiVGFicyIgKTsKKyAgS29ucUZyYW1UYWJzKiBvdGhlclRhYnMgPSBzdGF0aWNfY2Fz
dDxLb25xRnJhbWVUYWJzICo+KCBvdGhlciApOworICBpbnQgdGhpc0NvdW50ID0gbV9wVmlld0xp
c3QtPmNvdW50KCk7CisgIGludCBvdGhlckNvdW50ID0gb3RoZXJUYWJzLT4tPmNvdW50KCk7Cisg
IGludCBjb3VudCA9IHRoaXNDb3VudDsKKyAgaWYgKHRoaXNDb3VudD5vdGhlckNvdW50KSBjb3Vu
dCA9IG90aGVyQ291bnQ7CisKKyAgZm9yICgKKyAgICBmaXJzdENoaWxkKCktPmNvcHlIaXN0b3J5
KCBzdGF0aWNfY2FzdDxLb25xRnJhbWVUYWJzICo+KCBvdGhlciApLT5maXJzdENoaWxkKCkgKTsK
KyAgaWYgKCBzZWNvbmRDaGlsZCgpICkKKyAgICBzZWNvbmRDaGlsZCgpLT5jb3B5SGlzdG9yeSgg
c3RhdGljX2Nhc3Q8S29ucUZyYW1lVGFicyAqPiggb3RoZXIgKS0+c2Vjb25kQ2hpbGQoKSApOwor
ICAqLworfQorCit2b2lkIEtvbnFGcmFtZVRhYnM6OnByaW50RnJhbWVJbmZvKCBRU3RyaW5nIHNw
YWNlcyApCit7CisgIGtkRGVidWcoMTIwMikgPDwgc3BhY2VzIDw8ICJLb25xRnJhbWVUYWJzICIg
PDwgdGhpcyA8PCBlbmRsOworICBLb25xRnJhbWVCYXNlKiBjaGlsZDsKKyAgaW50IGNoaWxkRnJh
bWVDb3VudCA9IG1fcENoaWxkRnJhbWVMaXN0LT5jb3VudCgpOworICBmb3IgKGludCBpID0gMCA7
IGkgPCBjaGlsZEZyYW1lQ291bnQgOyBpKyspIHsKKyAgICBjaGlsZCA9IG1fcENoaWxkRnJhbWVM
aXN0LT5hdChpKTsKKyAgICBpZiAoY2hpbGQgIT0gMEwpIGNoaWxkLT5wcmludEZyYW1lSW5mbyhz
cGFjZXMgKyAiICAiKTsKKyAgICBlbHNlIGtkRGVidWcoMTIwMikgPDwgc3BhY2VzIDw8ICIgIE51
bGwgY2hpbGQiIDw8IGVuZGw7CisgIH0KK30KKwordm9pZCBLb25xRnJhbWVUYWJzOjpyZXBhcmVu
dEZyYW1lKCBRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IFFQb2ludCAmIHAsIGJvb2wgc2hvd0l0ICkK
K3sKKyAgUVdpZGdldDo6cmVwYXJlbnQoIHBhcmVudCwgcCwgc2hvd0l0ICk7Cit9CisKK3ZvaWQg
S29ucUZyYW1lVGFiczo6aW5zZXJ0Q2hpbGRGcmFtZSggS29ucUZyYW1lQmFzZSogZnJhbWUgKQor
eworICBrZERlYnVnKDEyMDIpIDw8ICJLb25xRnJhbWVUYWJzICIgPDwgdGhpcyA8PCAiOiBpbnNl
cnRDaGlsZEZyYW1lICIgPDwgZnJhbWUgPDwgZW5kbDsKKworICBpZiAoZnJhbWUpCisgIHsKKyAg
ICBrZERlYnVnKDEyMDIpIDw8ICJBZGRpbmcgZnJhbWUiIDw8IGVuZGw7CisgICAgYWRkVGFiKGZy
YW1lLT53aWRnZXQoKSwiS29ucUZyYW1lQmFzZVRhYiIpOworICAgIGZyYW1lLT5zZXRQYXJlbnRD
b250YWluZXIodGhpcyk7CisgICAgbV9wQ2hpbGRGcmFtZUxpc3QtPmFwcGVuZChmcmFtZSk7Cisg
ICAgaWYgKHRhYkJhcigpLT5jb3VudCgpPT0yKQorICAgICAgdGFiQmFyKCktPnNob3coKTsKKyAg
fSAKKyAgZWxzZQorICAgIGtkV2FybmluZygxMjAyKSA8PCAiS29ucUZyYW1lVGFicyAiIDw8IHRo
aXMgPDwgIjogaW5zZXJ0Q2hpbGRGcmFtZSgwTCkgISIgPDwgZW5kbDsKK30KKwordm9pZCBLb25x
RnJhbWVUYWJzOjpyZW1vdmVDaGlsZEZyYW1lKCBLb25xRnJhbWVCYXNlICogZnJhbWUgKQorewor
ICBrZERlYnVnKDEyMDIpIDw8ICJLb25xRnJhbWVUYWJzOjpSZW1vdmVDaGlsZEZyYW1lICIgPDwg
dGhpcyA8PCAiLiBDaGlsZCAiIDw8IGZyYW1lIDw8ICIgcmVtb3ZlZCIgPDwgZW5kbDsKKyAgaWYg
KGZyYW1lKSB7CisgICAgcmVtb3ZlUGFnZShmcmFtZS0+d2lkZ2V0KCkpOworICAgIG1fcENoaWxk
RnJhbWVMaXN0LT5yZW1vdmUoZnJhbWUpOworICAgIGlmICh0YWJCYXIoKS0+Y291bnQoKT09MSkK
KyAgICAgIHRhYkJhcigpLT5oaWRlKCk7CQkJCisgIH0KKyAgZWxzZQorICAgIGtkV2FybmluZygx
MjAyKSA8PCAiS29ucUZyYW1lVGFicyAiIDw8IHRoaXMgPDwgIjogcmVtb3ZlQ2hpbGRGcmFtZSgw
TCkgISIgPDwgZW5kbDsKIH0KIAogI2luY2x1ZGUgImtvbnFfZnJhbWUubW9jIgpkaWZmIC11IGtk
ZWJhc2UtMi4yLjIub3JpZy9rb25xdWVyb3Iva29ucV9mcmFtZS5oIGtkZWJhc2UtMi4yLjIva29u
cXVlcm9yL2tvbnFfZnJhbWUuaAotLS0ga2RlYmFzZS0yLjIuMi5vcmlnL2tvbnF1ZXJvci9rb25x
X2ZyYW1lLmgJV2VkIE1heSAxNiAxMzoyNzozMCAyMDAxCisrKyBrZGViYXNlLTIuMi4yL2tvbnF1
ZXJvci9rb25xX2ZyYW1lLmgJU3VuIERlYyAgOSAxNzo1NjozNSAyMDAxCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSA8cXNwbGl0dGVyLmg+CiAjaW5jbHVkZSA8cWNoZWNrYm94Lmg+CiAjaW5j
bHVkZSA8cWxhYmVsLmg+CisjaW5jbHVkZSA8cXRhYndpZGdldC5oPgogCiAjaW5jbHVkZSA8a3Bp
eG1hcC5oPgogI2luY2x1ZGUgPGtwaXhtYXBlZmZlY3QuaD4KQEAgLTQxLDcgKzQyLDkgQEAKIGNs
YXNzIEtvbnFWaWV3OwogY2xhc3MgS29ucUZyYW1lQmFzZTsKIGNsYXNzIEtvbnFGcmFtZTsKK2Ns
YXNzIEtvbnFGcmFtZUNvbnRhaW5lckJhc2U7CiBjbGFzcyBLb25xRnJhbWVDb250YWluZXI7Citj
bGFzcyBLb25xRnJhbWVUYWJzOwogY2xhc3MgS0NvbmZpZzsKIGNsYXNzIEtTZXBhcmF0b3I7CiBj
bGFzcyBLUHJvZ3Jlc3M7CkBAIC0xNjgsMjEgKzE3MSwyOCBAQAogY2xhc3MgS29ucUZyYW1lQmFz
ZQogewogIHB1YmxpYzoKKyAgdmlydHVhbCB+S29ucUZyYW1lQmFzZSgpIHt9CisKICAgdmlydHVh
bCB2b2lkIHNhdmVDb25maWcoIEtDb25maWcqIGNvbmZpZywgY29uc3QgUVN0cmluZyAmcHJlZml4
LCBib29sIHNhdmVVUkxzLCBpbnQgaWQgPSAwLCBpbnQgZGVwdGggPSAwICkgPSAwOwogICB2aXJ0
dWFsIHZvaWQgY29weUhpc3RvcnkoIEtvbnFGcmFtZUJhc2UgKm90aGVyICkgPSAwOwogCisJdmly
dHVhbCB2b2lkIHByaW50RnJhbWVJbmZvKCBRU3RyaW5nIHNwYWNlcyApOworCiAgIHZpcnR1YWwg
dm9pZCByZXBhcmVudEZyYW1lKCBRV2lkZ2V0KiBwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRUG9pbnQgJiBwLCBib29sIHNob3dJdD1GQUxTRSApID0gMDsKIAot
ICB2aXJ0dWFsIEtvbnFGcmFtZUNvbnRhaW5lciogcGFyZW50Q29udGFpbmVyKCkgPSAwOworICB2
aXJ0dWFsIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UqIHBhcmVudENvbnRhaW5lcigpIHsgcmV0dXJu
IG1fcFBhcmVudENvbnRhaW5lcjsgfQorCXZpcnR1YWwgdm9pZCBzZXRQYXJlbnRDb250YWluZXIo
S29ucUZyYW1lQ29udGFpbmVyQmFzZSogcGFyZW50KSB7IG1fcFBhcmVudENvbnRhaW5lciA9IHBh
cmVudDsgfQorCiAgIHZpcnR1YWwgUVdpZGdldCogd2lkZ2V0KCkgPSAwOwogCiAgIHZpcnR1YWwg
dm9pZCBsaXN0Vmlld3MoIENoaWxkVmlld0xpc3QgKnZpZXdMaXN0ICkgPSAwOwogICB2aXJ0dWFs
IFFDU3RyaW5nIGZyYW1lVHlwZSgpID0gMDsKIAotIHByb3RlY3RlZDoKK3Byb3RlY3RlZDoKICAg
S29ucUZyYW1lQmFzZSgpIHt9Ci0gIHZpcnR1YWwgfktvbnFGcmFtZUJhc2UoKSB7fQorCisJS29u
cUZyYW1lQ29udGFpbmVyQmFzZSogbV9wUGFyZW50Q29udGFpbmVyOwogfTsKIAogLyoqCkBAIC0y
MDIsNyArMjEyLDcgQEAKICAgUV9PQkpFQ1QKIAogcHVibGljOgotICBLb25xRnJhbWUoIEtvbnFG
cmFtZUNvbnRhaW5lciAqX3BhcmVudENvbnRhaW5lciA9IDBMLAorICBLb25xRnJhbWUoIEtvbnFG
cmFtZUNvbnRhaW5lckJhc2UgKl9wYXJlbnRDb250YWluZXIgPSAwTCwKICAgICAgICAgICAgICBj
b25zdCBjaGFyICpfbmFtZSA9IDBMICk7CiAgIHZpcnR1YWwgfktvbnFGcmFtZSgpOwogCkBAIC0y
NDYsMTAgKzI1NiwxMiBAQAogICB2aXJ0dWFsIHZvaWQgc2F2ZUNvbmZpZyggS0NvbmZpZyogY29u
ZmlnLCBjb25zdCBRU3RyaW5nICZwcmVmaXgsIGJvb2wgc2F2ZVVSTHMsIGludCBpZCA9IDAsIGlu
dCBkZXB0aCA9IDAgKTsKICAgdmlydHVhbCB2b2lkIGNvcHlIaXN0b3J5KCBLb25xRnJhbWVCYXNl
ICpvdGhlciApOwogCisJdmlydHVhbCB2b2lkIHByaW50RnJhbWVJbmZvKCBRU3RyaW5nIHNwYWNl
cyApOworCiAgIHZpcnR1YWwgdm9pZCByZXBhcmVudEZyYW1lKFFXaWRnZXQgKiBwYXJlbnQsCiAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnQgJiBwLCBib29sIHNob3dJdD1GQUxTRSAp
OwogCi0gIHZpcnR1YWwgS29ucUZyYW1lQ29udGFpbmVyKiBwYXJlbnRDb250YWluZXIoKTsKKyAg
Ly92aXJ0dWFsIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UqIHBhcmVudENvbnRhaW5lcigpOwogICB2
aXJ0dWFsIFFXaWRnZXQqIHdpZGdldCgpIHsgcmV0dXJuIHRoaXM7IH0KICAgdmlydHVhbCBRQ1N0
cmluZyBmcmFtZVR5cGUoKSB7IHJldHVybiBRQ1N0cmluZygiVmlldyIpOyB9CiAKQEAgLTI4NSw2
ICsyOTcsMzIgQEAKICAgS29ucUZyYW1lSGVhZGVyICptX3BIZWFkZXI7CiB9OwogCitjbGFzcyBL
b25xRnJhbWVDb250YWluZXJCYXNlIDogcHVibGljIEtvbnFGcmFtZUJhc2UKK3sKK3B1YmxpYzoK
KyAgdmlydHVhbCB+S29ucUZyYW1lQ29udGFpbmVyQmFzZSgpIHt9CisKKyAgLyoqCisgICAqIENh
bGwgdGhpcyBhZnRlciBpbnNlcnRpbmcgYSBuZXcgZnJhbWUgaW50byB0aGUgc3BsaXR0ZXIuCisg
ICAqLworICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGRGcmFtZSggS29ucUZyYW1lQmFzZSAqIGZy
YW1lICkgPSAwOworICAvKioKKyAgICogQ2FsbCB0aGlzIGJlZm9yZSBkZWxldGluZyBvbmUgb2Yg
b3VyIGNoaWxkcmVuLgorICAgKi8KKyAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkRnJhbWUoIEtv
bnFGcmFtZUJhc2UgKiBmcmFtZSApID0gMDsKKworICAvL2luaGVyaXRlZAorCXZpcnR1YWwgdm9p
ZCBwcmludEZyYW1lSW5mbyggUVN0cmluZyBzcGFjZXMgKTsKKworICB2aXJ0dWFsIFFDU3RyaW5n
IGZyYW1lVHlwZSgpIHsgcmV0dXJuIFFDU3RyaW5nKCJDb250YWluZXJCYXNlIik7IH0KKworICB2
aXJ0dWFsIHZvaWQgcmVwYXJlbnRGcmFtZShRV2lkZ2V0ICogcGFyZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnQgJiBwLCBib29sIHNob3dJdD1GQUxTRSApID0g
MDsKKworcHJvdGVjdGVkOgorICBLb25xRnJhbWVDb250YWluZXJCYXNlKCkge30KK307CisKIC8q
KgogICogV2l0aCBLb25xRnJhbWVDb250YWluZXJzIGFuZCBAcmVmS29ucUZyYW1lcyB3ZSBjYW4g
Y3JlYXRlIGEgZmxleGlibGUKICAqIHN0b3JhZ2Ugc3RydWN0dXJlIGZvciB0aGUgdmlld3MuIFRo
ZSB0b3AgbW9zdCBlbGVtZW50IGlzIGEKQEAgLTI5NCwxMyArMzMyLDEzIEBACiAgKiBLb25xRnJh
bWVDb250YWluZXJzIG9yLCBhcyBsZWF2ZXMsIEtvbnFGcmFtZXMuCiAgKi8KIAotY2xhc3MgS29u
cUZyYW1lQ29udGFpbmVyIDogcHVibGljIFFTcGxpdHRlciwgcHVibGljIEtvbnFGcmFtZUJhc2UK
K2NsYXNzIEtvbnFGcmFtZUNvbnRhaW5lciA6IHB1YmxpYyBRU3BsaXR0ZXIsIHB1YmxpYyBLb25x
RnJhbWVDb250YWluZXJCYXNlCiB7CiAgIFFfT0JKRUNUCiAgIGZyaWVuZCBjbGFzcyBLb25xRnJh
bWU7IC8vZm9yIGVtaXR0aW5nIGN0cmxUYWJQcmVzc2VkKCkgb25seSwgYWxlWFhYCiBwdWJsaWM6
CiAgIEtvbnFGcmFtZUNvbnRhaW5lciggT3JpZW50YXRpb24gbywKLSAgICAgICAgICAgICAgICAg
ICAgICBRV2lkZ2V0KiBwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgS29ucUZyYW1lQ29u
dGFpbmVyQmFzZSogcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBu
YW1lID0gMCk7CiAgIHZpcnR1YWwgfktvbnFGcmFtZUNvbnRhaW5lcigpOwogCkBAIC0zMTMsOSAr
MzUxLDEwIEBACiAgIEtvbnFGcmFtZUJhc2UqIHNlY29uZENoaWxkKCkgeyByZXR1cm4gbV9wU2Vj
b25kQ2hpbGQ7IH0KICAgS29ucUZyYW1lQmFzZSogb3RoZXJDaGlsZCggS29ucUZyYW1lQmFzZSog
Y2hpbGQgKTsKIAorCXZpcnR1YWwgdm9pZCBwcmludEZyYW1lSW5mbyggUVN0cmluZyBzcGFjZXMg
KTsKKwogICB2b2lkIHN3YXBDaGlsZHJlbigpOwogCi0gIHZpcnR1YWwgS29ucUZyYW1lQ29udGFp
bmVyKiBwYXJlbnRDb250YWluZXIoKTsKICAgdmlydHVhbCBRV2lkZ2V0KiB3aWRnZXQoKSB7IHJl
dHVybiB0aGlzOyB9CiAgIHZpcnR1YWwgUUNTdHJpbmcgZnJhbWVUeXBlKCkgeyByZXR1cm4gUUNT
dHJpbmcoIkNvbnRhaW5lciIpOyB9CiAKQEAgLTM0MSw2ICszODAsNTQgQEAKIHByb3RlY3RlZDoK
ICAgS29ucUZyYW1lQmFzZSogbV9wRmlyc3RDaGlsZDsKICAgS29ucUZyYW1lQmFzZSogbV9wU2Vj
b25kQ2hpbGQ7Cit9OworCitjbGFzcyBLb25xRnJhbWVUYWJzIDogcHVibGljIFFUYWJXaWRnZXQs
IHB1YmxpYyBLb25xRnJhbWVDb250YWluZXJCYXNlCit7CisgIFFfT0JKRUNUCisgIGZyaWVuZCBj
bGFzcyBLb25xRnJhbWU7IC8vZm9yIGVtaXR0aW5nIGN0cmxUYWJQcmVzc2VkKCkgb25seSwgYWxl
WFhYCitwdWJsaWM6CisgIEtvbnFGcmFtZVRhYnMoUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFy
ICogbmFtZSA9IDApOworICB2aXJ0dWFsIH5Lb25xRnJhbWVUYWJzKCk7CisKKyAgdmlydHVhbCB2
b2lkIGxpc3RWaWV3cyggQ2hpbGRWaWV3TGlzdCAqdmlld0xpc3QgKTsKKworICB2aXJ0dWFsIHZv
aWQgc2F2ZUNvbmZpZyggS0NvbmZpZyogY29uZmlnLCBjb25zdCBRU3RyaW5nICZwcmVmaXgsIGJv
b2wgc2F2ZVVSTHMsIGludCBpZCA9IDAsIGludCBkZXB0aCA9IDAgKTsKKyAgdmlydHVhbCB2b2lk
IGNvcHlIaXN0b3J5KCBLb25xRnJhbWVCYXNlICpvdGhlciApOworCisJdmlydHVhbCB2b2lkIHBy
aW50RnJhbWVJbmZvKCBRU3RyaW5nIHNwYWNlcyApOworCisJUUxpc3Q8S29ucUZyYW1lQmFzZT4q
IGNoaWxkRnJhbWVMaXN0KCkgeyByZXR1cm4gbV9wQ2hpbGRGcmFtZUxpc3Q7IH0KKworICB2aXJ0
dWFsIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UqIHBhcmVudENvbnRhaW5lcigpIHsgcmV0dXJuIDBM
OyB9CisJdmlydHVhbCB2b2lkIHNldFBhcmVudENvbnRhaW5lcihLb25xRnJhbWVDb250YWluZXJC
YXNlKiBwYXJlbnQpIHsgcmV0dXJuOyB9CisKKyAgdmlydHVhbCBRV2lkZ2V0KiB3aWRnZXQoKSB7
IHJldHVybiB0aGlzOyB9CisgIHZpcnR1YWwgUUNTdHJpbmcgZnJhbWVUeXBlKCkgeyByZXR1cm4g
UUNTdHJpbmcoIlRhYnMiKTsgfQorCisgIC8qKgorICAgKiBDYWxsIHRoaXMgYWZ0ZXIgaW5zZXJ0
aW5nIGEgbmV3IGZyYW1lIGludG8gdGhlIHNwbGl0dGVyLgorICAgKi8KKyAgdm9pZCBpbnNlcnRD
aGlsZEZyYW1lKCBLb25xRnJhbWVCYXNlICogZnJhbWUgKTsKKyAgLyoqCisgICAqIENhbGwgdGhp
cyBiZWZvcmUgZGVsZXRpbmcgb25lIG9mIG91ciBjaGlsZHJlbi4KKyAgICovCisgIHZvaWQgcmVt
b3ZlQ2hpbGRGcmFtZSggS29ucUZyYW1lQmFzZSAqIGZyYW1lICk7CisKKyAgLy9pbmhlcml0ZWQK
KyAgdmlydHVhbCB2b2lkIHJlcGFyZW50RnJhbWUoUVdpZGdldCAqIHBhcmVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBvaW50ICYgcCwgYm9vbCBzaG93SXQ9RkFMU0Ug
KTsKKworICAvL21ha2UgdGhpcyBvbmUgcHVibGljCisgIC8vaW50IGlkQWZ0ZXIoIFFXaWRnZXQq
IHcgKXsgcmV0dXJuIFE6OmlkQWZ0ZXIoIHcgKTsgfQorCitzaWduYWxzOgorICB2b2lkIGN0cmxU
YWJQcmVzc2VkKCk7CisKK3Byb3RlY3RlZDoKKyAgLy9Lb25xRnJhbWVCYXNlKiBtX3BGaXJzdENo
aWxkOworICAvL0tvbnFGcmFtZUJhc2UqIG1fcFNlY29uZENoaWxkOworICBRTGlzdDxLb25xRnJh
bWVCYXNlPiogbV9wQ2hpbGRGcmFtZUxpc3Q7CiB9OwogCiAjZW5kaWYKZGlmZiAtdSBrZGViYXNl
LTIuMi4yLm9yaWcva29ucXVlcm9yL2tvbnFfZ3VpY2xpZW50cy5jYyBrZGViYXNlLTIuMi4yL2tv
bnF1ZXJvci9rb25xX2d1aWNsaWVudHMuY2MKLS0tIGtkZWJhc2UtMi4yLjIub3JpZy9rb25xdWVy
b3Iva29ucV9ndWljbGllbnRzLmNjCVNhdCBKdWwgMjggMjM6NTY6NDAgMjAwMQorKysga2RlYmFz
ZS0yLjIuMi9rb25xdWVyb3Iva29ucV9ndWljbGllbnRzLmNjCVN1biBEZWMgIDkgMTc6NTY6MzUg
MjAwMQpAQCAtMjI4LDcgKzIyOCw3IEBACiAKICAgS29ucVZpZXdNYW5hZ2VyICp2aWV3TWFuYWdl
ciA9IG1fbWFpbldpbmRvdy0+dmlld01hbmFnZXIoKTsKIAotICBLb25xRnJhbWVDb250YWluZXIg
Km1haW5Db250YWluZXIgPSB2aWV3TWFuYWdlci0+bWFpbkNvbnRhaW5lcigpOworICBLb25xRnJh
bWVDb250YWluZXJCYXNlICptYWluQ29udGFpbmVyID0gdmlld01hbmFnZXItPm1haW5Db250YWlu
ZXIoKTsKIAogICBpZiAoIHRvZ2dsZSApCiAgIHsKQEAgLTI0NSw4ICsyNDUsMTAgQEAKICAgICBl
bHNlCiAgICAgICBuZXdTcGxpdHRlclNpemVzIDw8IDMwIDw8IDEwMDsKIAotICAgIEtvbnFGcmFt
ZUNvbnRhaW5lciAqbmV3Q29udGFpbmVyID0gY2hpbGRWaWV3LT5mcmFtZSgpLT5wYXJlbnRDb250
YWluZXIoKTsKLSAgICBuZXdDb250YWluZXItPnNldFNpemVzKCBuZXdTcGxpdHRlclNpemVzICk7
CisgICAgS29ucUZyYW1lQ29udGFpbmVyQmFzZSAqbmV3Q29udGFpbmVyID0gY2hpbGRWaWV3LT5m
cmFtZSgpLT5wYXJlbnRDb250YWluZXIoKTsKKworICAgIGlmIChuZXdDb250YWluZXItPmZyYW1l
VHlwZSgpPT0iQ29udGFpbmVyIikKKyAgICAgIHN0YXRpY19jYXN0PEtvbnFGcmFtZUNvbnRhaW5l
cio+KG5ld0NvbnRhaW5lciktPnNldFNpemVzKCBuZXdTcGxpdHRlclNpemVzICk7CiAKICAgICBp
ZiAoIG1fbWFpbldpbmRvdy0+Y3VycmVudFZpZXcoKSApCiAgICAgewpkaWZmIC11IGtkZWJhc2Ut
Mi4yLjIub3JpZy9rb25xdWVyb3Iva29ucV9tYWlud2luZG93LmNjIGtkZWJhc2UtMi4yLjIva29u
cXVlcm9yL2tvbnFfbWFpbndpbmRvdy5jYwotLS0ga2RlYmFzZS0yLjIuMi5vcmlnL2tvbnF1ZXJv
ci9rb25xX21haW53aW5kb3cuY2MJTW9uIE5vdiAgNSAyMTo0MDoyOSAyMDAxCisrKyBrZGViYXNl
LTIuMi4yL2tvbnF1ZXJvci9rb25xX21haW53aW5kb3cuY2MJU3VuIERlYyAgOSAxNzo1NjozNiAy
MDAxCkBAIC01NjAsNyArNTYwLDcgQEAKICAgaWYgKCAhY2hpbGRWaWV3ICkKICAgICB7CiAgICAg
ICAvLyBDcmVhdGUgYSBuZXcgdmlldwotICAgICAgY2hpbGRWaWV3ID0gbV9wVmlld01hbmFnZXIt
PnNwbGl0VmlldyggUXQ6Okhvcml6b250YWwsIHNlcnZpY2VUeXBlLCBzZXJ2aWNlTmFtZSApOwor
ICAgICAgY2hpbGRWaWV3ID0gbV9wVmlld01hbmFnZXItPmFkZFRhYiggc2VydmljZVR5cGUsIHNl
cnZpY2VOYW1lICk7CiAKICAgICAgIGlmICggIWNoaWxkVmlldyApCiAgICAgICAgIHsKQEAgLTE4
MDgsMTIgKzE4MDgsMjMgQEAKICAgbmV3Vmlldy0+b3BlblVSTCggbV9jdXJyZW50Vmlldy0+dXJs
KCksIG1fY3VycmVudFZpZXctPmxvY2F0aW9uQmFyVVJMKCkgKTsKIH0KIAordm9pZCBLb25xTWFp
bldpbmRvdzo6c2xvdEFkZFRhYigpCit7CisgIEtvbnFWaWV3KiBuZXdWaWV3ID0gbV9wVmlld01h
bmFnZXItPmFkZFRhYigpOworICBuZXdWaWV3LT5vcGVuVVJMKCBtX2N1cnJlbnRWaWV3LT51cmwo
KSwgbV9jdXJyZW50Vmlldy0+bG9jYXRpb25CYXJVUkwoKSApOworfQorCiB2b2lkIEtvbnFNYWlu
V2luZG93OjpzbG90UmVtb3ZlVmlldygpCiB7CiAgIC8vIHRha2VzIGNhcmUgb2YgY2hvb3Npbmcg
dGhlIG5ldyBhY3RpdmUgdmlldwogICBtX3BWaWV3TWFuYWdlci0+cmVtb3ZlVmlldyggbV9jdXJy
ZW50VmlldyApOwogfQogCit2b2lkIEtvbnFNYWluV2luZG93OjpzbG90UmVtb3ZlQ3VycmVudFRh
YigpCit7CisJbV9wVmlld01hbmFnZXItPnJlbW92ZUN1cnJlbnRUYWIoKTsKK30KKwogdm9pZCBL
b25xTWFpbldpbmRvdzo6c2xvdFNhdmVWaWV3UHJvcGVydGllc0xvY2FsbHkoKQogewogICBtX2JT
YXZlVmlld1Byb3BlcnRpZXNMb2NhbGx5ID0gIW1fYlNhdmVWaWV3UHJvcGVydGllc0xvY2FsbHk7
CkBAIC0yNjYzLDcgKzI2NzQsOSBAQAogICAvLyBXaW5kb3cgbWVudQogICBtX3BhU3BsaXRWaWV3
SG9yID0gbmV3IEtBY3Rpb24oIGkxOG4oICJTcGxpdCBWaWV3ICZMZWZ0L1JpZ2h0IiApLCAidmll
d19sZWZ0X3JpZ2h0IiwgQ1RSTCtTSElGVCtLZXlfTCwgdGhpcywgU0xPVCggc2xvdFNwbGl0Vmll
d0hvcml6b250YWwoKSApLCBhY3Rpb25Db2xsZWN0aW9uKCksICJzcGxpdHZpZXdoIiApOwogICBt
X3BhU3BsaXRWaWV3VmVyID0gbmV3IEtBY3Rpb24oIGkxOG4oICJTcGxpdCBWaWV3ICZUb3AvQm90
dG9tIiApLCAidmlld190b3BfYm90dG9tIiwgQ1RSTCtTSElGVCtLZXlfVCwgdGhpcywgU0xPVCgg
c2xvdFNwbGl0Vmlld1ZlcnRpY2FsKCkgKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAic3BsaXR2aWV3
diIgKTsKKyAgbV9wYUFkZFRhYiA9IG5ldyBLQWN0aW9uKCBpMThuKCAiQWRkIFRhYiIgKSwgInZp
ZXdfYWRkX3RhYiIsIDAsIHRoaXMsIFNMT1QoIHNsb3RBZGRUYWIoKSApLCBhY3Rpb25Db2xsZWN0
aW9uKCksICJhZGR0YWIiICk7CiAgIG1fcGFSZW1vdmVWaWV3ID0gbmV3IEtBY3Rpb24oIGkxOG4o
ICImUmVtb3ZlIEFjdGl2ZSBWaWV3IiApLCJ2aWV3X3JlbW92ZSIsIENUUkwrU0hJRlQrS2V5X1Is
IHRoaXMsIFNMT1QoIHNsb3RSZW1vdmVWaWV3KCkgKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAicmVt
b3ZldmlldyIgKTsKKyAgbV9wYVJlbW92ZUN1cnJlbnRUYWIgPSBuZXcgS0FjdGlvbiggaTE4bigg
IlJlbW92ZSBDdXJyZW50IFRhYiIgKSwgInZpZXdfcmVtb3ZlX2N1cnJlbnRfdGFiIiwgMCwgdGhp
cywgU0xPVCggc2xvdFJlbW92ZUN1cnJlbnRUYWIoKSApLCBhY3Rpb25Db2xsZWN0aW9uKCksICJy
ZW1vdmVjdXJyZW50dGFiIiApOwogCiAgIG1fcGFTYXZlUmVtb3ZlVmlld1Byb2ZpbGUgPSBuZXcg
S0FjdGlvbiggaTE4biggIiZDb25maWd1cmUgVmlldyBQcm9maWxlcy4uLiIgKSwgMCwgbV9wVmll
d01hbmFnZXIsIFNMT1QoIHNsb3RQcm9maWxlRGxnKCkgKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAi
c2F2ZXJlbW92ZXZpZXdwcm9maWxlIiApOwogICBtX3BhbUxvYWRWaWV3UHJvZmlsZSA9IG5ldyBL
QWN0aW9uTWVudSggaTE4biggIkxvYWQgJlZpZXcgUHJvZmlsZSIgKSwgYWN0aW9uQ29sbGVjdGlv
bigpLCAibG9hZHZpZXdwcm9maWxlIiApOwpkaWZmIC11IGtkZWJhc2UtMi4yLjIub3JpZy9rb25x
dWVyb3Iva29ucV9tYWlud2luZG93Lmgga2RlYmFzZS0yLjIuMi9rb25xdWVyb3Iva29ucV9tYWlu
d2luZG93LmgKLS0tIGtkZWJhc2UtMi4yLjIub3JpZy9rb25xdWVyb3Iva29ucV9tYWlud2luZG93
LmgJRnJpIE1heSAxMSAwNzoxMzo1NCAyMDAxCisrKyBrZGViYXNlLTIuMi4yL2tvbnF1ZXJvci9r
b25xX21haW53aW5kb3cuaAlTdW4gRGVjICA5IDE3OjU2OjM2IDIwMDEKQEAgLTMwNiw3ICszMDYs
OSBAQAogCiAgIHZvaWQgc2xvdFNwbGl0Vmlld0hvcml6b250YWwoKTsKICAgdm9pZCBzbG90U3Bs
aXRWaWV3VmVydGljYWwoKTsKKyAgdm9pZCBzbG90QWRkVGFiKCk7CiAgIHZvaWQgc2xvdFJlbW92
ZVZpZXcoKTsKKwl2b2lkIHNsb3RSZW1vdmVDdXJyZW50VGFiKCk7CiAKICAgdm9pZCBzbG90U2F2
ZVZpZXdQcm9maWxlKCk7CiAgIHZvaWQgc2xvdFNhdmVWaWV3UHJvcGVydGllc0xvY2FsbHkoKTsK
QEAgLTQ1MSw3ICs0NTMsOSBAQAogCiAgIEtBY3Rpb24gKm1fcGFTcGxpdFZpZXdIb3I7CiAgIEtB
Y3Rpb24gKm1fcGFTcGxpdFZpZXdWZXI7CisgIEtBY3Rpb24gKm1fcGFBZGRUYWI7CiAgIEtBY3Rp
b24gKm1fcGFSZW1vdmVWaWV3OworCUtBY3Rpb24gKm1fcGFSZW1vdmVDdXJyZW50VGFiOwogCiAg
IEtBY3Rpb24gKm1fcGFTYXZlUmVtb3ZlVmlld1Byb2ZpbGU7CiAgIEtBY3Rpb25NZW51ICptX3Bh
bUxvYWRWaWV3UHJvZmlsZTsKZGlmZiAtdSBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL2tv
bnFfdmlldy5jYyBrZGViYXNlLTIuMi4yL2tvbnF1ZXJvci9rb25xX3ZpZXcuY2MKLS0tIGtkZWJh
c2UtMi4yLjIub3JpZy9rb25xdWVyb3Iva29ucV92aWV3LmNjCVdlZCBKdW4gMjAgMTU6MjE6MDYg
MjAwMQorKysga2RlYmFzZS0yLjIuMi9rb25xdWVyb3Iva29ucV92aWV3LmNjCVN1biBEZWMgIDkg
MTc6NTY6MzYgMjAwMQpAQCAtOTUsOCArOTUsMTAgQEAKICAgaWYgKCBpc1Bhc3NpdmVNb2RlKCkg
JiYgbV9wUGFydCApCiAgICAgICBkaXNjb25uZWN0KCBtX3BQYXJ0LCBTSUdOQUwoIGRlc3Ryb3ll
ZCgpICksIG1fcE1haW5XaW5kb3ctPnZpZXdNYW5hZ2VyKCksIFNMT1QoIHNsb3RPYmplY3REZXN0
cm95ZWQoKSApICk7CiAKKwlwYXJ0RGVsZXRlZCgpOwogICBkZWxldGUgbV9wUGFydDsKICAgZGVs
ZXRlIChLb25xUnVuICopbV9wUnVuOworCS8vbV9wTWFpbldpbmRvdy0+cmVtb3ZlQ2hpbGRWaWV3
KHRoaXMpOwogICAvL2tkRGVidWcoMTIwMikgPDwgIktvbnFWaWV3Ojp+S29ucVZpZXcgIiA8PCB0
aGlzIDw8ICIgZG9uZSIgPDwgZW5kbDsKIH0KIApAQCAtMTM2LDYgKzEzOCwxMSBAQAogICBtX3BQ
YXJ0LT5vcGVuVVJMKCB1cmwgKTsKIAogICBzZW5kT3BlblVSTEV2ZW50KCB1cmwsIGFyZ3MgKTsK
KworICBLb25xRnJhbWVDb250YWluZXJCYXNlKiBmcmFtZUNvbnRhaW5lciA9IGZyYW1lKCktPnBh
cmVudENvbnRhaW5lcigpOworICBpZiAoZnJhbWVDb250YWluZXIpCisgICAgaWYgKGZyYW1lQ29u
dGFpbmVyLT5mcmFtZVR5cGUoKT09IlRhYnMiKQorICAgICAgc3RhdGljX2Nhc3Q8S29ucUZyYW1l
VGFicyo+KGZyYW1lQ29udGFpbmVyKS0+Y2hhbmdlVGFiKGZyYW1lKCksbG9jYXRpb25CYXJVUkwp
OwogCiAgIHVwZGF0ZUhpc3RvcnlFbnRyeShmYWxzZSAvKiBkb24ndCBzYXZlIGxvY2F0aW9uIGJh
ciBVUkwgeWV0ICovKTsKICAgLy8gYWRkIHBlbmRpbmcgaGlzdG9yeSBlbnRyeQpkaWZmIC11IGtk
ZWJhc2UtMi4yLjIub3JpZy9rb25xdWVyb3Iva29ucV92aWV3bWdyLmNjIGtkZWJhc2UtMi4yLjIv
a29ucXVlcm9yL2tvbnFfdmlld21nci5jYwotLS0ga2RlYmFzZS0yLjIuMi5vcmlnL2tvbnF1ZXJv
ci9rb25xX3ZpZXdtZ3IuY2MJVHVlIFNlcCAgNCAxODoxNjo1NSAyMDAxCisrKyBrZGViYXNlLTIu
Mi4yL2tvbnF1ZXJvci9rb25xX3ZpZXdtZ3IuY2MJU3VuIERlYyAgOSAxNzo1NjozNiAyMDAxCkBA
IC01MSw3ICs1MSwxMCBAQAogewogICBtX3BNYWluV2luZG93ID0gbWFpbldpbmRvdzsKIAotICBt
X3BNYWluQ29udGFpbmVyID0gMEw7CisgIG1fcE1haW5Db250YWluZXIgPSBuZXcgS29ucUZyYW1l
VGFicyggbV9wTWFpbldpbmRvdyApOworICBtX3BNYWluV2luZG93LT5zZXRDZW50cmFsV2lkZ2V0
KCBtX3BNYWluQ29udGFpbmVyICk7CisgIG1fcE1haW5Db250YWluZXItPnNldEdlb21ldHJ5KCAw
LCAwLCBtX3BNYWluV2luZG93LT53aWR0aCgpLCBtX3BNYWluV2luZG93LT5oZWlnaHQoKSApOwor
ICBjb25uZWN0KG1fcE1haW5Db250YWluZXIsU0lHTkFMKGN0cmxUYWJQcmVzc2VkKCkpLG1fcE1h
aW5XaW5kb3csU0xPVChzbG90Q3RybFRhYlByZXNzZWQoKSkpOwogCiAgIG1fcGFtUHJvZmlsZXMg
PSAwTDsKICAgbV9iUHJvZmlsZUxpc3REaXJ0eSA9IHRydWU7CkBAIC02OSwxNyArNzIsMTYgQEAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmV3T25lRmlyc3Qp
CiB7CiAgIGtkRGVidWcoMTIwMikgPDwgIktvbnFWaWV3TWFuYWdlcjo6c3BsaXRWaWV3KFNlcnZp
Y2VUeXBlKSIgPDwgZW5kbDsKKwlwcmludEZ1bGxIaWVyYXJjaHkoIG1fcE1haW5Db250YWluZXIg
KTsKIAogICBLb25xRnJhbWUqIHZpZXdGcmFtZSA9IDBMOwotICBpZiggbV9wTWFpbkNvbnRhaW5l
ciApCisKKyAgaWYgKCBtX3BNYWluV2luZG93LT5jdXJyZW50VmlldygpICkKKyAgICB2aWV3RnJh
bWUgPSBtX3BNYWluV2luZG93LT5jdXJyZW50VmlldygpLT5mcmFtZSgpOworICBlbHNlCiAgIHsK
LSAgICBpZiAoIG1fcE1haW5XaW5kb3ctPmN1cnJlbnRWaWV3KCkgKQotICAgICAgdmlld0ZyYW1l
ID0gbV9wTWFpbldpbmRvdy0+Y3VycmVudFZpZXcoKS0+ZnJhbWUoKTsKLSAgICBlbHNlCi0gICAg
ewotICAgICAga2RXYXJuaW5nKDEyMDIpIDw8ICJzcGxpdFZpZXcgY2FsbGVkLCBidXQgbm8gY3Vy
cmVudCB2aWV3ISIgPDwgZW5kbDsKLSAgICAgIHJldHVybiAwTDsgLy8gaWYgd2UgZ28gb24sIHdl
J2xsIGhpdCB0aGUgYXNzZXJ0IGluIHNwbGl0KCkKLSAgICB9CisgICAga2RXYXJuaW5nKDEyMDIp
IDw8ICJzcGxpdFZpZXcgY2FsbGVkLCBidXQgbm8gY3VycmVudCB2aWV3ISIgPDwgZW5kbDsKKyAg
ICByZXR1cm4gMEw7IC8vIGlmIHdlIGdvIG9uLCB3ZSdsbCBoaXQgdGhlIGFzc2VydCBpbiBzcGxp
dCgpCiAgIH0KIAogICBLb25xRnJhbWVDb250YWluZXIgKm5ld0NvbnRhaW5lcjsKQEAgLTg3LDEw
ICs4OSwxMyBAQAogCiAgIGlmICggbmV3T25lRmlyc3QgKQogICB7Ci0gICAgICBuZXdDb250YWlu
ZXItPm1vdmVUb0xhc3QoIHZpZXdGcmFtZS0+d2lkZ2V0KCkgKTsKLSAgICAgIG5ld0NvbnRhaW5l
ci0+c3dhcENoaWxkcmVuKCk7CisgICAgbmV3Q29udGFpbmVyLT5tb3ZlVG9MYXN0KCB2aWV3RnJh
bWUtPndpZGdldCgpICk7CisgICAgbmV3Q29udGFpbmVyLT5zd2FwQ2hpbGRyZW4oKTsKICAgfQog
CisgIHByaW50RnVsbEhpZXJhcmNoeSggbV9wTWFpbkNvbnRhaW5lciApOworICBrZERlYnVnKDEy
MDIpIDw8ICJLb25xVmlld01hbmFnZXI6OnNwbGl0VmlldyhTZXJ2aWNlVHlwZSkgZG9uZSIgPDwg
ZW5kbDsKKwogICByZXR1cm4gY2hpbGRWaWV3OwogfQogCkBAIC0xMDEsMTMgKzEwNiwxNyBAQAog
ewogICBrZERlYnVnKDEyMDIpIDw8ICJLb25xVmlld01hbmFnZXI6OnNwbGl0V2luZG93KGRlZmF1
bHQpIiA8PCBlbmRsOwogCisgIHJldHVybiAwTDsKKworICAvKgogICBLVVJMIHVybCA9IG1fcE1h
aW5XaW5kb3ctPmN1cnJlbnRWaWV3KCktPnVybCgpOwogCiAgIFFTdHJpbmcgbG9jYXRpb25CYXJV
Ukw7CiAgIEtvbnFGcmFtZUJhc2UqIHNwbGl0RnJhbWUgPSAwTDsKICAgaWYoIG1fcE1haW5Db250
YWluZXIgKQogICB7Ci0gICAgc3BsaXRGcmFtZSA9IG1fcE1haW5Db250YWluZXItPmZpcnN0Q2hp
bGQoKTsKKyAgICBpZiAobV9wTWFpbkNvbnRhaW5lci0+ZnJhbWVUeXBlKCk9PSJUYWJzIikgcmV0
dXJuIDBMOworICAgIHNwbGl0RnJhbWUgPSBzdGF0aWNfY2FzdDxLb25xRnJhbWVDb250YWluZXIq
PihtX3BNYWluQ29udGFpbmVyKS0+Zmlyc3RDaGlsZCgpOwogICAgIGxvY2F0aW9uQmFyVVJMID0g
bV9wTWFpbldpbmRvdy0+Y3VycmVudFZpZXcoKS0+bG9jYXRpb25CYXJVUkwoKTsKICAgICBpZiAo
ICFzcGxpdEZyYW1lICkKICAgICB7CkBAIC0xMjksNiArMTM4LDI5IEBACiAgICAgY2hpbGRWaWV3
LT5vcGVuVVJMKCB1cmwsIGxvY2F0aW9uQmFyVVJMICk7CiAKICAgcmV0dXJuIGNoaWxkVmlldzsK
KworICAqLworfQorCitLb25xVmlldyogS29ucVZpZXdNYW5hZ2VyOjphZGRUYWIoY29uc3QgUVN0
cmluZyAmc2VydmljZVR5cGUsIGNvbnN0IFFTdHJpbmcgJnNlcnZpY2VOYW1lLCBib29sIHBhc3Np
dmVNb2RlKQoreworICBrZERlYnVnKDEyMDIpIDw8ICItLS0tLS0tLS0tLS0tIEtvbnFWaWV3TWFu
YWdlcjo6c3BsaXRUYWIgc3RhcnRpbmcgLS0tLS0tLS0tLS0tLSIgPDwgZW5kbDsKKyAgcHJpbnRG
dWxsSGllcmFyY2h5KCBtX3BNYWluQ29udGFpbmVyICk7CisKKyAgS1NlcnZpY2U6OlB0ciBzZXJ2
aWNlOworICBLVHJhZGVyOjpPZmZlckxpc3QgcGFydFNlcnZpY2VPZmZlcnMsIGFwcFNlcnZpY2VP
ZmZlcnM7CisKKyAgS29ucVZpZXdGYWN0b3J5IG5ld1ZpZXdGYWN0b3J5ID0gY3JlYXRlVmlldygg
c2VydmljZVR5cGUsIHNlcnZpY2VOYW1lLCBzZXJ2aWNlLCBwYXJ0U2VydmljZU9mZmVycywgYXBw
U2VydmljZU9mZmVycyApOworCisgIGlmKCBuZXdWaWV3RmFjdG9yeS5pc051bGwoKSApCisgICAg
cmV0dXJuIDBMOyAvL2RvIG5vdCBzcGxpdCBhdCBhbGwgaWYgd2UgY2FuJ3QgY3JlYXRlIHRoZSBu
ZXcgdmlldworCisgIEtvbnFWaWV3KiBjaGlsZFZpZXcgPSBzZXR1cFZpZXcoIG1fcE1haW5Db250
YWluZXIsIG5ld1ZpZXdGYWN0b3J5LCBzZXJ2aWNlLCBwYXJ0U2VydmljZU9mZmVycywgYXBwU2Vy
dmljZU9mZmVycywgc2VydmljZVR5cGUsIHBhc3NpdmVNb2RlICk7CisKKyAgcHJpbnRGdWxsSGll
cmFyY2h5KCBtX3BNYWluQ29udGFpbmVyICk7CisgIGtkRGVidWcoMTIwMikgPDwgIi0tLS0tLS0t
LS0tLS0gS29ucVZpZXdNYW5hZ2VyOjpzcGxpdFRhYiBkb25lIC0tLS0tLS0tLS0tLS0iIDw8IGVu
ZGw7CisKKyAgcmV0dXJuIGNoaWxkVmlldzsKIH0KIAogS29ucVZpZXcqIEtvbnFWaWV3TWFuYWdl
cjo6c3BsaXQgKEtvbnFGcmFtZUJhc2UqIHNwbGl0RnJhbWUsCkBAIC0xNDgsMTkgKzE4MCwxOCBA
QAogICAgIHJldHVybiAwTDsgLy9kbyBub3Qgc3BsaXQgYXQgYWxsIGlmIHdlIGNhbid0IGNyZWF0
ZSB0aGUgbmV3IHZpZXcKIAogICBLb25xVmlldyAqY2hpbGRWaWV3OwotICBpZiggbV9wTWFpbkNv
bnRhaW5lciApCisgIGlmKCBtX3BNYWluV2luZG93LT5jdXJyZW50VmlldygpICkKICAgewogICAg
IGFzc2VydCggc3BsaXRGcmFtZSApOwogCi0gICAgS29ucUZyYW1lQ29udGFpbmVyKiBwYXJlbnRD
b250YWluZXIgPSBzcGxpdEZyYW1lLT5wYXJlbnRDb250YWluZXIoKTsKLSAgICBib29sIG1vdmVO
ZXdDb250YWluZXIgPSAocGFyZW50Q29udGFpbmVyLT5pZEFmdGVyKCBzcGxpdEZyYW1lLT53aWRn
ZXQoKSApICE9IDApOworICAgIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UqIHBhcmVudENvbnRhaW5l
ciA9IHNwbGl0RnJhbWUtPnBhcmVudENvbnRhaW5lcigpOwogCiAjaWZuZGVmIE5ERUJVRwogICAg
IHByaW50U2l6ZUluZm8oIHNwbGl0RnJhbWUsIHBhcmVudENvbnRhaW5lciwgImJlZm9yZSBzcGxp
dCIpOwogI2VuZGlmCiAKICAgICBzcGxpdEZyYW1lLT53aWRnZXQoKS0+c2V0VXBkYXRlc0VuYWJs
ZWQoIGZhbHNlICk7Ci0gICAgcGFyZW50Q29udGFpbmVyLT5zZXRVcGRhdGVzRW5hYmxlZCggZmFs
c2UgKTsKKyAgICBwYXJlbnRDb250YWluZXItPndpZGdldCgpLT5zZXRVcGRhdGVzRW5hYmxlZCgg
ZmFsc2UgKTsKIAogICAgIFFQb2ludCBwb3MgPSBzcGxpdEZyYW1lLT53aWRnZXQoKS0+cG9zKCk7
CiAKQEAgLTE3NCwxMiArMjA1LDkgQEAKICAgICBLb25xRnJhbWVDb250YWluZXIgKm5ld0NvbnRh
aW5lciA9IG5ldyBLb25xRnJhbWVDb250YWluZXIoIG9yaWVudGF0aW9uLCBwYXJlbnRDb250YWlu
ZXIgKTsKICAgICBjb25uZWN0KG5ld0NvbnRhaW5lcixTSUdOQUwoY3RybFRhYlByZXNzZWQoKSks
bV9wTWFpbldpbmRvdyxTTE9UKHNsb3RDdHJsVGFiUHJlc3NlZCgpKSk7CiAgICAgbmV3Q29udGFp
bmVyLT5zZXRVcGRhdGVzRW5hYmxlZCggZmFsc2UgKTsKLSAgICBuZXdDb250YWluZXItPnNldE9w
YXF1ZVJlc2l6ZSggdHJ1ZSApOwogICAgIG5ld0NvbnRhaW5lci0+c2hvdygpOwogCiAgICAgcGFy
ZW50Q29udGFpbmVyLT5pbnNlcnRDaGlsZEZyYW1lKCBuZXdDb250YWluZXIgKTsKLSAgICBpZigg
bW92ZU5ld0NvbnRhaW5lciApCi0gICAgICBwYXJlbnRDb250YWluZXItPm1vdmVUb0ZpcnN0KCBu
ZXdDb250YWluZXIgKTsKIAogICAgIC8va2REZWJ1ZygxMjAyKSA8PCAiTW92ZSBpbiBjaGlsZCIg
PDwgZW5kbDsKICAgICBzcGxpdEZyYW1lLT53aWRnZXQoKS0+cmVwYXJlbnQoIG5ld0NvbnRhaW5l
ciwgcG9zLCB0cnVlIC8qc2hvd0l0Ki8gKTsKQEAgLTE5OCw3ICsyMjYsNyBAQAogCiAgICAgc3Bs
aXRGcmFtZS0+d2lkZ2V0KCktPnNldFVwZGF0ZXNFbmFibGVkKCB0cnVlICk7CiAgICAgbmV3Q29u
dGFpbmVyLT5zZXRVcGRhdGVzRW5hYmxlZCggdHJ1ZSApOwotICAgIHBhcmVudENvbnRhaW5lci0+
c2V0VXBkYXRlc0VuYWJsZWQoIHRydWUgKTsKKyAgICBwYXJlbnRDb250YWluZXItPndpZGdldCgp
LT5zZXRVcGRhdGVzRW5hYmxlZCggdHJ1ZSApOwogCiAgICAgaWYgKCBuZXdGcmFtZUNvbnRhaW5l
ciApCiAgICAgICAqbmV3RnJhbWVDb250YWluZXIgPSBuZXdDb250YWluZXI7CkBAIC0yMDYsMjEg
KzIzNCwxNSBAQAogICB9CiAgIGVsc2UgLy8gV2UgaGFkIG5vIG1haW4gY29udGFpbmVyLCBjcmVh
dGUgb25lCiAgIHsKLSAgICBtX3BNYWluQ29udGFpbmVyID0gbmV3IEtvbnFGcmFtZUNvbnRhaW5l
ciggb3JpZW50YXRpb24sIG1fcE1haW5XaW5kb3cgKTsKLSAgICBrZERlYnVnKDEyMDIpIDw8ICJD
cmVhdGVkIG1haW4gY29udGFpbmVyICIgPDwgbV9wTWFpbkNvbnRhaW5lciA8PCBlbmRsOwotICAg
IGNvbm5lY3QobV9wTWFpbkNvbnRhaW5lcixTSUdOQUwoY3RybFRhYlByZXNzZWQoKSksbV9wTWFp
bldpbmRvdyxTTE9UKHNsb3RDdHJsVGFiUHJlc3NlZCgpKSk7Ci0gICAgbV9wTWFpbldpbmRvdy0+
c2V0Q2VudHJhbFdpZGdldCggbV9wTWFpbkNvbnRhaW5lciApOwotICAgIG1fcE1haW5Db250YWlu
ZXItPnNldE9wYXF1ZVJlc2l6ZSgpOwotICAgIG1fcE1haW5Db250YWluZXItPnNldEdlb21ldHJ5
KCAwLCAwLCBtX3BNYWluV2luZG93LT53aWR0aCgpLCBtX3BNYWluV2luZG93LT5oZWlnaHQoKSAp
OwotCi0gICAgY2hpbGRWaWV3ID0gc2V0dXBWaWV3KCBtX3BNYWluQ29udGFpbmVyLCBuZXdWaWV3
RmFjdG9yeSwgc2VydmljZSwgcGFydFNlcnZpY2VPZmZlcnMsIGFwcFNlcnZpY2VPZmZlcnMsIHNl
cnZpY2VUeXBlLCBwYXNzaXZlTW9kZSApOwotCi0gICAgLy9tX3BNYWluQ29udGFpbmVyLT5zaG93
KCk7CisgICAgS29ucUZyYW1lQ29udGFpbmVyKiBuZXdDb250YWluZXIgPSBuZXcgS29ucUZyYW1l
Q29udGFpbmVyKCBvcmllbnRhdGlvbiwgbV9wTWFpbkNvbnRhaW5lciApOworICAgIGtkRGVidWco
MTIwMikgPDwgIkNyZWF0ZWQgbmV3IGNvbnRhaW5lciwgY2hpbGQgb2YgbV9wTWFpbkNvbnRhaW5l
ciIgPDwgbmV3Q29udGFpbmVyIDw8IGVuZGw7CisgICAgY29ubmVjdChuZXdDb250YWluZXIsU0lH
TkFMKGN0cmxUYWJQcmVzc2VkKCkpLG1fcE1haW5XaW5kb3csU0xPVChzbG90Q3RybFRhYlByZXNz
ZWQoKSkpOworICAgIG1fcE1haW5Db250YWluZXItPmluc2VydENoaWxkRnJhbWUoIG5ld0NvbnRh
aW5lcik7CiAKLSAgICAvL2NoaWxkVmlldy0+ZnJhbWUoKS0+c3RhdHVzYmFyKCktPmhpZGVTdHVm
ZigpOworICAgIGNoaWxkVmlldyA9IHNldHVwVmlldyggbmV3Q29udGFpbmVyLCBuZXdWaWV3RmFj
dG9yeSwgc2VydmljZSwgcGFydFNlcnZpY2VPZmZlcnMsIGFwcFNlcnZpY2VPZmZlcnMsIHNlcnZp
Y2VUeXBlLCBwYXNzaXZlTW9kZSApOwogCiAgICAgaWYgKCBuZXdGcmFtZUNvbnRhaW5lciApCi0g
ICAgICAqbmV3RnJhbWVDb250YWluZXIgPSBtX3BNYWluQ29udGFpbmVyOworICAgICAgKm5ld0Zy
YW1lQ29udGFpbmVyID0gbmV3Q29udGFpbmVyOwogICB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0y
MzAsOSArMjUyLDM3IEBACiAgIHJldHVybiBjaGlsZFZpZXc7CiB9CiAKK3ZvaWQgS29ucVZpZXdN
YW5hZ2VyOjpyZW1vdmVDdXJyZW50VGFiKCkgeworICBrZERlYnVnKDEyMDIpIDw8ICItLS0tLS0t
LS0tLS0tLS0tIEtvbnFWaWV3TWFuYWdlcjo6cmVtb3ZlQ3VycmVudFRhYiAtLS0tLS0tLS0tLS0t
LSIgPDwgZW5kbDsKKyAgcHJpbnRGdWxsSGllcmFyY2h5KCBtX3BNYWluQ29udGFpbmVyICk7CisK
KyAgS29ucUZyYW1lQmFzZSogY3VycmVudEZyYW1lID0gZHluYW1pY19jYXN0PEtvbnFGcmFtZUJh
c2UqPihtX3BNYWluQ29udGFpbmVyLT5jdXJyZW50UGFnZSgpKTsKKyAgbV9wTWFpbkNvbnRhaW5l
ci0+cmVtb3ZlQ2hpbGRGcmFtZShjdXJyZW50RnJhbWUpOworICBjdXJyZW50RnJhbWUtPndpZGdl
dCgpLT5oaWRlKCk7CisgIC8vY3VycmVudEZyYW1lLT53aWRnZXQoKS0+c2V0VXBkYXRlc0VuYWJs
ZWQoZmFsc2UpOworCisgIFFMaXN0PEtvbnFWaWV3PiB2aWV3TGlzdDsKKyAgUUxpc3RJdGVyYXRv
cjxLb25xVmlldz4gaXQoIHZpZXdMaXN0ICk7CisKKyAgY3VycmVudEZyYW1lLT5saXN0Vmlld3Mo
ICZ2aWV3TGlzdCApOworCisgIGZvciAoIGl0LnRvRmlyc3QoKTsgaXQuY3VycmVudCgpOyArK2l0
ICkKKyAgeworICAgIG1fcE1haW5XaW5kb3ctPnJlbW92ZUNoaWxkVmlldyggaXQuY3VycmVudCgp
ICk7CisgICAgZGVsZXRlIGl0LmN1cnJlbnQoKTsKKyAgfQorCisgIGRlbGV0ZSBjdXJyZW50RnJh
bWU7CisKKyAgcHJpbnRGdWxsSGllcmFyY2h5KCBtX3BNYWluQ29udGFpbmVyICk7CisgIGtkRGVi
dWcoMTIwMikgPDwgIi0tLS0tLS0tLS0tLS0gS29ucVZpZXdNYW5hZ2VyOjpyZW1vdmVDdXJyZW50
VGFiIGRvbmUgLS0tLS0tLS0tLS0tLS0iIDw8IGVuZGw7Cit9CQorCiB2b2lkIEtvbnFWaWV3TWFu
YWdlcjo6cmVtb3ZlVmlldyggS29ucVZpZXcgKnZpZXcgKQogewotICBrZERlYnVnKDEyMDIpIDw8
ICItLS0tLS0tLS0tLS0tLS0tIHJlbW92ZVZpZXcgIiA8PCB2aWV3IDw8IGVuZGw7CisgIGtkRGVi
dWcoMTIwMikgPDwgIi0tLS0tLS0tLS0tLS0tLS0gcmVtb3ZlVmlldyAtLS0tLS0tLS0tLS0tLSIg
PDwgdmlldyA8PCBlbmRsOworICBwcmludEZ1bGxIaWVyYXJjaHkoIG1fcE1haW5Db250YWluZXIg
KTsKKwogICBpZiAoIGFjdGl2ZVBhcnQoKSA9PSB2aWV3LT5wYXJ0KCkgKQogICB7CiAgICAgS29u
cVZpZXcgKm5leHRWaWV3ID0gY2hvb3NlTmV4dFZpZXcoIHZpZXcgKTsKQEAgLTI0Niw1MyArMjk2
LDY3IEBACiAgICAgICBzZXRBY3RpdmVQYXJ0KCBuZXh0Vmlldy0+cGFydCgpLCB0cnVlIC8qaW1t
ZWRpYXRlICovICk7CiAgIH0KIAotICBLb25xRnJhbWVDb250YWluZXIqIHBhcmVudENvbnRhaW5l
ciA9IHZpZXctPmZyYW1lKCktPnBhcmVudENvbnRhaW5lcigpOwotICBLb25xRnJhbWVDb250YWlu
ZXIqIGdyYW5kUGFyZW50Q29udGFpbmVyID0gcGFyZW50Q29udGFpbmVyLT5wYXJlbnRDb250YWlu
ZXIoKTsKLSAga2REZWJ1ZygxMjAyKSA8PCAidmlldz0iIDw8IHZpZXcgPDwgIiBwYXJlbnRDb250
YWluZXI9IiA8PCBwYXJlbnRDb250YWluZXIKLSAgICAgICAgICAgICAgICA8PCAiIGdyYW5kUGFy
ZW50Q29udGFpbmVyPSIgPDwgZ3JhbmRQYXJlbnRDb250YWluZXIgPDwgZW5kbDsKLSAgYm9vbCBt
b3ZlT3RoZXJDaGlsZCA9IChncmFuZFBhcmVudENvbnRhaW5lci0+aWRBZnRlciggcGFyZW50Q29u
dGFpbmVyICkgIT0gMCk7CisgIEtvbnFGcmFtZSogZnJhbWUgPSB2aWV3LT5mcmFtZSgpOworICBL
b25xRnJhbWVDb250YWluZXJCYXNlKiBwYXJlbnRDb250YWluZXIgPSBmcmFtZS0+cGFyZW50Q29u
dGFpbmVyKCk7CisJCisgIGtkRGVidWcoMTIwMikgPDwgcGFyZW50Q29udGFpbmVyLT5mcmFtZVR5
cGUoKSA8PCBlbmRsOwogCi0gIEtvbnFGcmFtZUJhc2UqIG90aGVyRnJhbWUgPSBwYXJlbnRDb250
YWluZXItPm90aGVyQ2hpbGQoIHZpZXctPmZyYW1lKCkgKTsKKyAgaWYgKHBhcmVudENvbnRhaW5l
ci0+ZnJhbWVUeXBlKCk9PSJDb250YWluZXIiKQorICB7CisgICAga2REZWJ1ZygxMjAyKSA8PCAi
cGFyZW50Q29udGFpbmVyICIgPDwgcGFyZW50Q29udGFpbmVyIDw8ICIgaXMgYSBLb25xRnJhbWVD
b250YWluZXIiIDw8IGVuZGw7CiAKLSAgaWYoIG90aGVyRnJhbWUgPT0gMEwgKSB7Ci0gICAga2RX
YXJuaW5nKDEyMDIpIDw8ICJLb25xVmlld01hbmFnZXI6OnJlbW92ZVZpZXc6IFRoaXMgc2hvdWxk
bid0IGhhcHBlbiEiIDw8IGVuZGw7Ci0gICAgcmV0dXJuOworICAgIEtvbnFGcmFtZUNvbnRhaW5l
ckJhc2UqIGdyYW5kUGFyZW50Q29udGFpbmVyID0gcGFyZW50Q29udGFpbmVyLT5wYXJlbnRDb250
YWluZXIoKTsKKyAgICBLb25xRnJhbWVCYXNlKiBvdGhlckZyYW1lID0gc3RhdGljX2Nhc3Q8S29u
cUZyYW1lQ29udGFpbmVyKj4ocGFyZW50Q29udGFpbmVyKS0+b3RoZXJDaGlsZCggZnJhbWUgKTsK
KworICAgIGtkRGVidWcoMTIwMikgPDwgInZpZXc9IiA8PCB2aWV3IDw8ICIgcGFyZW50Q29udGFp
bmVyPSIgPDwgcGFyZW50Q29udGFpbmVyCisgICAgICAgICAgICAgICAgICA8PCAiIGdyYW5kUGFy
ZW50Q29udGFpbmVyPSIgPDwgZ3JhbmRQYXJlbnRDb250YWluZXIgPDwgZW5kbDsKKworICAgIGlm
KCBvdGhlckZyYW1lID09IDBMICkKKyAgICB7CisgICAgICBrZFdhcm5pbmcoMTIwMikgPDwgIktv
bnFWaWV3TWFuYWdlcjo6cmVtb3ZlVmlldzogVGhpcyBzaG91bGRuJ3QgaGFwcGVuISIgPDwgZW5k
bDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBrZERlYnVnKDEyMDIpIDw8ICJLb25xVmll
d01hbmFnZXI6OnJlbW92ZVZpZXcgcmVwYXJlbnRpbmcgb3RoZXIgZnJhbWUgIiA8PCBvdGhlckZy
YW1lIDw8ICIgd2lkZ2V0PSIgPDwgb3RoZXJGcmFtZS0+d2lkZ2V0KCkgPDwgZW5kbDsKKyAgICBR
UG9pbnQgcG9zID0gb3RoZXJGcmFtZS0+d2lkZ2V0KCktPnBvcygpOworCisgICAgb3RoZXJGcmFt
ZS0+cmVwYXJlbnRGcmFtZSggbV9wTWFpbldpbmRvdywgcG9zICk7CisgICAgb3RoZXJGcmFtZS0+
d2lkZ2V0KCktPmhpZGUoKTsgLy8gQ2FuJ3QgaGlkZSBiZWZvcmUsIGJ1dCBhZnRlciBpcyBiZXR0
ZXIgdGhhbiBub3RoaW5nCisgICAgb3RoZXJGcmFtZS0+d2lkZ2V0KCktPnJlc2l6ZSggMTAwLCAz
MCApOyAvLyBicmluZyBpdCB0byB0aGUgUVdpZGdldCBkZWZhdWx0c2l6ZQorCisgICAga2REZWJ1
ZygxMjAyKSA8PCAiLS0tIFJlbW92aW5nIG90aGVyRnJhbWUgZnJvbSBwYXJlbnRDb250YWluZXIi
IDw8IGVuZGw7CisgICAgcGFyZW50Q29udGFpbmVyLT5yZW1vdmVDaGlsZEZyYW1lKCBvdGhlckZy
YW1lICk7CisKKyAgICBrZERlYnVnKDEyMDIpIDw8ICItLS0gUmVtb3ZpbmcgcGFyZW50Q29udGFp
bmVyIGZyb20gZ3JhbmRQYXJlbnRDb250YWluZXIiIDw8IGVuZGw7CisgICAgZ3JhbmRQYXJlbnRD
b250YWluZXItPnJlbW92ZUNoaWxkRnJhbWUoIHBhcmVudENvbnRhaW5lciApOworCisgICAgbV9w
TWFpbldpbmRvdy0+cmVtb3ZlQ2hpbGRWaWV3KHZpZXcpOworCisgICAga2REZWJ1ZygxMjAyKSA8
PCAiLS0tIERlbGV0aW5nIHBhcmVudENvbnRhaW5lciAiIDw8IHBhcmVudENvbnRhaW5lcgorICAg
ICAgICAgICAgICAgICAgPDwgIi4gSXRzIHBhcmVudCBpcyAiIDw8IHBhcmVudENvbnRhaW5lci0+
d2lkZ2V0KCktPnBhcmVudCgpIDw8IGVuZGw7CisgICAgZGVsZXRlIHBhcmVudENvbnRhaW5lcjsK
KworICAgIG90aGVyRnJhbWUtPnJlcGFyZW50RnJhbWUoIGdyYW5kUGFyZW50Q29udGFpbmVyLT53
aWRnZXQoKSwgcG9zLCB0cnVlIC8qc2hvd0l0Ki8gKTsKKworICAgIGtkRGVidWcoMTIwMikgPDwg
Ii0tLSBJbnNlcnRpbmcgb3RoZXJGcmFtZSBpbnRvIGdyYW5kUGFyZW50Q29udGFpbmVyIiA8PCBl
bmRsOwkJCisgICAgZ3JhbmRQYXJlbnRDb250YWluZXItPmluc2VydENoaWxkRnJhbWUoIG90aGVy
RnJhbWUgKTsKICAgfQorICBlbHNlIHsKKyAgICBrZERlYnVnKDEyMDIpIDw8ICJwYXJlbnRDb250
YWluZXIgIiA8PCBwYXJlbnRDb250YWluZXIgPDwgIiBpcyBhIEtvbnFGcmFtZVRhYnMiIDw8IGVu
ZGw7CisKKyAgICBtX3BNYWluQ29udGFpbmVyLT5yZW1vdmVDaGlsZEZyYW1lKCBmcmFtZSApOwor
CisgICAgLy8gVGhpcyBkZWxldGVzIHRoZSB3aWRnZXRzIGluc2lkZSwgaW5jbHVkaW5nIHRoZSBw
YXJ0J3Mgd2lkZ2V0LCBzbyB0ZWxsIHRoZSBjaGlsZCB2aWV3CisgICAgLy92aWV3LT5wYXJ0RGVs
ZXRlZCgpOwogCi0gIGtkRGVidWcoMTIwMikgPDwgIktvbnFWaWV3TWFuYWdlcjo6cmVtb3ZlVmll
dyByZXBhcmVudGluZyBvdGhlciBmcmFtZSAiIDw8IG90aGVyRnJhbWUgPDwgIiB3aWRnZXQ9IiA8
PCBvdGhlckZyYW1lLT53aWRnZXQoKSA8PCBlbmRsOwotICBRUG9pbnQgcG9zID0gb3RoZXJGcmFt
ZS0+d2lkZ2V0KCktPnBvcygpOworICAgIG1fcE1haW5XaW5kb3ctPnJlbW92ZUNoaWxkVmlldyh2
aWV3KTsKIAotICBvdGhlckZyYW1lLT5yZXBhcmVudEZyYW1lKCBtX3BNYWluV2luZG93LCBwb3Mg
KTsKLSAgb3RoZXJGcmFtZS0+d2lkZ2V0KCktPmhpZGUoKTsgLy8gQ2FuJ3QgaGlkZSBiZWZvcmUs
IGJ1dCBhZnRlciBpcyBiZXR0ZXIgdGhhbiBub3RoaW5nCi0gIG90aGVyRnJhbWUtPndpZGdldCgp
LT5yZXNpemUoIDEwMCwgMzAgKTsgLy8gYnJpbmcgaXQgdG8gdGhlIFFXaWRnZXQgZGVmYXVsdHNp
emUKLSAgcGFyZW50Q29udGFpbmVyLT5yZW1vdmVDaGlsZEZyYW1lKCBvdGhlckZyYW1lICk7Ci0K
LSAgbV9wTWFpbldpbmRvdy0+cmVtb3ZlQ2hpbGRWaWV3KCB2aWV3ICk7Ci0KLSAgcGFyZW50Q29u
dGFpbmVyLT5yZW1vdmVDaGlsZEZyYW1lKCB2aWV3LT5mcmFtZSgpICk7Ci0KLSAgLy8gV2UgZGlk
IHNvIG91cnNlbHZlcyBmb3IgcGFzc2l2ZSB2aWV3cyAtIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciwg
YnV0IHNhdmVzIGEgY2FsbCB0byBzbG90UGFzc2l2ZU1vZGVQYXJ0RGVsZXRlZAotICBpZiAoIHZp
ZXctPmlzUGFzc2l2ZU1vZGUoKSAmJiB2aWV3LT5wYXJ0KCkgKQotICAgICAgZGlzY29ubmVjdCgg
dmlldy0+cGFydCgpLCBTSUdOQUwoIGRlc3Ryb3llZCgpICksIHRoaXMsIFNMT1QoIHNsb3RQYXNz
aXZlTW9kZVBhcnREZWxldGVkKCkgKSApOwotCi0gIGtkRGVidWcoMTIwMikgPDwgIkRlbGV0aW5n
IHZpZXcgZnJhbWUgIiA8PCB2aWV3LT5mcmFtZSgpIDw8IGVuZGw7Ci0gIGRlbGV0ZSB2aWV3LT5m
cmFtZSgpOwotICAvLyBUaGlzIGRlbGV0ZXMgdGhlIHdpZGdldHMgaW5zaWRlLCBpbmNsdWRpbmcg
dGhlIHBhcnQncyB3aWRnZXQsIHNvIHRlbGwgdGhlIGNoaWxkIHZpZXcKLSAgdmlldy0+cGFydERl
bGV0ZWQoKTsKLSAga2REZWJ1ZygxMjAyKSA8PCAiRGVsZXRpbmcgdmlldyAiIDw8IHZpZXcgPDwg
ZW5kbDsKLSAgZGVsZXRlIHZpZXc7Ci0KLSAgZ3JhbmRQYXJlbnRDb250YWluZXItPnJlbW92ZUNo
aWxkRnJhbWUoIHBhcmVudENvbnRhaW5lciApOwotICBrZERlYnVnKDEyMDIpIDw8ICJEZWxldGlu
ZyBwYXJlbnRDb250YWluZXIgIiA8PCBwYXJlbnRDb250YWluZXIKLSAgICAgICAgICAgICAgICA8
PCAiLiBJdHMgcGFyZW50IGlzICIgPDwgcGFyZW50Q29udGFpbmVyLT5wYXJlbnQoKSA8PCBlbmRs
OwotICBkZWxldGUgcGFyZW50Q29udGFpbmVyOwotCi0gIG90aGVyRnJhbWUtPnJlcGFyZW50RnJh
bWUoIGdyYW5kUGFyZW50Q29udGFpbmVyLCBwb3MsIHRydWUvKnNob3dJdCovICk7Ci0gIGdyYW5k
UGFyZW50Q29udGFpbmVyLT5pbnNlcnRDaGlsZEZyYW1lKCBvdGhlckZyYW1lICk7Ci0gIGlmKCBt
b3ZlT3RoZXJDaGlsZCApCi0gICAgZ3JhbmRQYXJlbnRDb250YWluZXItPm1vdmVUb0ZpcnN0KCBv
dGhlckZyYW1lLT53aWRnZXQoKSApOworICAgIGtkRGVidWcoMTIwMikgPDwgIkRlbGV0aW5nIHZp
ZXcgZnJhbWUgIiA8PCBmcmFtZSA8PCBlbmRsOworICAgIGRlbGV0ZSBmcmFtZTsKKyAgfQorCisg
IGtkRGVidWcoMTIwMikgPDwgIi0tLS0tLS0tLS0tLS0gcmVtb3ZlVmlldyBkb25lIC0tLS0tLS0t
LS0tLS0tIiA8PCB2aWV3IDw8IGVuZGw7CiAKLSAga2REZWJ1ZygxMjAyKSA8PCAiLS0tLS0tLS0t
LS0tLSByZW1vdmVWaWV3IGRvbmUgIiA8PCB2aWV3IDw8IGVuZGw7CiAjaWZuZGVmIE5ERUJVRwog
ICBwcmludEZ1bGxIaWVyYXJjaHkoIG1fcE1haW5Db250YWluZXIgKTsKICNlbmRpZgpAQCAtMzE4
LDEwICszODIsNiBAQAogICAgICAgICBrZERlYnVnKDEyMDIpIDw8ICJEZWxldGluZyBsYXN0IHZp
ZXcgLT4gY2xvc2luZyB0aGUgd2luZG93IiA8PCBlbmRsOwogICAgICAgICBzZXRBY3RpdmVQYXJ0
KCAwTCwgdHJ1ZSApOwogICAgICAgICBtX3BNYWluV2luZG93LT5yZW1vdmVDaGlsZFZpZXcoIHZp
ZXcgKTsKLSAgICAgICAga2REZWJ1ZygxMjAyKSA8PCAiRGVsZXRpbmcgZnJhbWUgIiA8PCB2aWV3
IDw8IGVuZGw7Ci0gICAgICAgIGRlbGV0ZSB2aWV3LT5mcmFtZSgpOyAvLyBUaGlzIGRlbGV0ZXMg
dGhlIHdpZGdldHMgaW5zaWRlLCBpbmNsdWRpbmcgdGhlIHBhcnQncyB3aWRnZXQKLSAgICAgICAg
a2REZWJ1ZygxMjAyKSA8PCAiRGVsZXRpbmcgdmlldyAiIDw8IHZpZXcgPDwgZW5kbDsKLSAgICAg
ICAgZGVsZXRlIHZpZXc7CiAgICAgICAgIGtkRGVidWcoMTIwMikgPDwgIkRlbGV0aW5nIG1fcE1h
aW5Db250YWluZXIgIiA8PCBtX3BNYWluQ29udGFpbmVyIDw8IGVuZGw7CiAgICAgICAgIGRlbGV0
ZSBtX3BNYWluQ29udGFpbmVyOwogICAgICAgICBtX3BNYWluQ29udGFpbmVyID0gMEw7CkBAIC0z
NzgsMTggKzQzOCwxOCBAQAogICBRTGlzdDxLb25xVmlldz4gdmlld0xpc3Q7CiAgIFFMaXN0SXRl
cmF0b3I8S29ucVZpZXc+IGl0KCB2aWV3TGlzdCApOwogCi0gIGlmIChtX3BNYWluQ29udGFpbmVy
KSB7Ci0gICAgbV9wTWFpbkNvbnRhaW5lci0+bGlzdFZpZXdzKCAmdmlld0xpc3QgKTsKKyAgaWYg
KCAhbV9wTWFpbldpbmRvdy0+Y3VycmVudFZpZXcoKSApIHJldHVybjsKIAotICAgIGZvciAoIGl0
LnRvRmlyc3QoKTsgaXQuY3VycmVudCgpOyArK2l0ICkgewotICAgICAgbV9wTWFpbldpbmRvdy0+
cmVtb3ZlQ2hpbGRWaWV3KCBpdC5jdXJyZW50KCkgKTsKLSAgICAgIGRlbGV0ZSBpdC5jdXJyZW50
KCk7Ci0gICAgfQorICBtX3BNYWluQ29udGFpbmVyLT5saXN0Vmlld3MoICZ2aWV3TGlzdCApOwog
Ci0gICAga2REZWJ1ZygxMjAyKSA8PCAiZGVsZXRpbmcgbV9wTWFpbkNvbnRhaW5lciAiIDw8IGVu
ZGw7Ci0gICAgZGVsZXRlIG1fcE1haW5Db250YWluZXI7Ci0gICAgbV9wTWFpbkNvbnRhaW5lciA9
IDBMOworICBmb3IgKCBpdC50b0ZpcnN0KCk7IGl0LmN1cnJlbnQoKTsgKytpdCApIHsKKyAgICBt
X3BNYWluV2luZG93LT5yZW1vdmVDaGlsZFZpZXcoIGl0LmN1cnJlbnQoKSApOworICAgIGRlbGV0
ZSBpdC5jdXJyZW50KCk7CiAgIH0KKworICBrZERlYnVnKDEyMDIpIDw8ICJkZWxldGluZyBtX3BN
YWluQ29udGFpbmVyICIgPDwgZW5kbDsKKyAgZGVsZXRlIG1fcE1haW5Db250YWluZXI7CisgIG1f
cE1haW5Db250YWluZXIgPSAwTDsKIH0KIAogS29ucVZpZXcgKktvbnFWaWV3TWFuYWdlcjo6Y2hv
b3NlTmV4dFZpZXcoIEtvbnFWaWV3ICp2aWV3ICkKQEAgLTQ1OSw3ICs1MTksNyBAQAogICByZXR1
cm4gdmlld0ZhY3Rvcnk7CiB9CiAKLUtvbnFWaWV3ICpLb25xVmlld01hbmFnZXI6OnNldHVwVmll
dyggS29ucUZyYW1lQ29udGFpbmVyICpwYXJlbnRDb250YWluZXIsCitLb25xVmlldyAqS29ucVZp
ZXdNYW5hZ2VyOjpzZXR1cFZpZXcoIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UgKnBhcmVudENvbnRh
aW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS29ucVZpZXdGYWN0
b3J5ICZ2aWV3RmFjdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgS1NlcnZpY2U6OlB0ciAmc2VydmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgS1RyYWRlcjo6T2ZmZXJMaXN0ICZwYXJ0U2VydmljZU9mZmVycywK
QEAgLTUyNiwxNCArNTg2LDE0IEBACiB2b2lkIEtvbnFWaWV3TWFuYWdlcjo6c2F2ZVZpZXdQcm9m
aWxlKCBLQ29uZmlnICYgY2ZnLCBib29sIHNhdmVVUkxzLCBib29sIHNhdmVXaW5kb3dTaXplICkK
IHsKICAga2REZWJ1ZygxMjAyKSA8PCAiS29ucVZpZXdNYW5hZ2VyOjpzYXZlVmlld1Byb2ZpbGUi
IDw8IGVuZGw7Ci0gIGlmKCBtX3BNYWluQ29udGFpbmVyICYmIG1fcE1haW5Db250YWluZXItPmZp
cnN0Q2hpbGQoKSApIHsKLSAgICBjZmcud3JpdGVFbnRyeSggIlJvb3RJdGVtIiwgUVN0cmluZzo6
ZnJvbUxhdGluMSggbV9wTWFpbkNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpLT5mcmFtZVR5cGUoKSAp
Ci0gICAgICAgICAgICAgICAgICAgICsgUVN0cmluZzo6bnVtYmVyKDApICk7Ci0gICAgUVN0cmlu
ZyBwcmVmaXggPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCBtX3BNYWluQ29udGFpbmVyLT5maXJzdENo
aWxkKCktPmZyYW1lVHlwZSgpICkKLSAgICAgICAgICAgICAgICAgICAgICsgUVN0cmluZzo6bnVt
YmVyKDApOwotICAgIHByZWZpeC5hcHBlbmQoICdfJyApOwotICAgIG1fcE1haW5Db250YWluZXIt
PmZpcnN0Q2hpbGQoKS0+c2F2ZUNvbmZpZyggJmNmZywgcHJlZml4LCBzYXZlVVJMcywgMCwgMSAp
OwotICB9CisgIC8vaWYoIG1fcE1haW5Db250YWluZXIgJiYgbV9wTWFpbkNvbnRhaW5lci0+Zmly
c3RDaGlsZCgpICkgeworICAvLyAgY2ZnLndyaXRlRW50cnkoICJSb290SXRlbSIsIFFTdHJpbmc6
OmZyb21MYXRpbjEoIG1fcE1haW5Db250YWluZXItPmZpcnN0Q2hpbGQoKS0+ZnJhbWVUeXBlKCkg
KQorICAvLyAgICAgICAgICAgICAgICAgICsgUVN0cmluZzo6bnVtYmVyKDApICk7CisgIC8vICBR
U3RyaW5nIHByZWZpeCA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIG1fcE1haW5Db250YWluZXItPmZp
cnN0Q2hpbGQoKS0+ZnJhbWVUeXBlKCkgKQorICAvLyAgICAgICAgICAgICAgICAgICArIFFTdHJp
bmc6Om51bWJlcigwKTsKKyAgLy8gIHByZWZpeC5hcHBlbmQoICdfJyApOworICAvLyAgbV9wTWFp
bkNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpLT5zYXZlQ29uZmlnKCAmY2ZnLCBwcmVmaXgsIHNhdmVV
UkxzLCAwLCAxICk7CisgIC8vfQogCiAgIGlmICggc2F2ZVdpbmRvd1NpemUgKQogICB7CkBAIC01
ODMsMTIgKzY0MywxMSBAQAogCiAgIGlmICggcm9vdEl0ZW0gIT0gImVtcHR5IiAmJiBmb3JjZWRV
UkwudXJsKCkgIT0gImFib3V0OmJsYW5rIiApCiAgIHsKLSAgICAgIG1fcE1haW5Db250YWluZXIg
PSBuZXcgS29ucUZyYW1lQ29udGFpbmVyKCBRdDo6SG9yaXpvbnRhbCwgbV9wTWFpbldpbmRvdyAp
OwotICAgICAgY29ubmVjdChtX3BNYWluQ29udGFpbmVyLFNJR05BTChjdHJsVGFiUHJlc3NlZCgp
KSxtX3BNYWluV2luZG93LFNMT1Qoc2xvdEN0cmxUYWJQcmVzc2VkKCkpKTsKLSAgICAgIG1fcE1h
aW5XaW5kb3ctPnNldENlbnRyYWxXaWRnZXQoIG1fcE1haW5Db250YWluZXIgKTsKLSAgICAgIG1f
cE1haW5Db250YWluZXItPnNldE9wYXF1ZVJlc2l6ZSgpOwotICAgICAgbV9wTWFpbkNvbnRhaW5l
ci0+c2V0R2VvbWV0cnkoIDAsIDAsIG1fcE1haW5XaW5kb3ctPndpZHRoKCksIG1fcE1haW5XaW5k
b3ctPmhlaWdodCgpICk7Ci0gICAgICBtX3BNYWluQ29udGFpbmVyLT5zaG93KCk7CisgICAgLy9t
X3BNYWluQ29udGFpbmVyID0gbmV3IEtvbnFGcmFtZUNvbnRhaW5lciggUXQ6Okhvcml6b250YWws
IG1fcE1haW5XaW5kb3cgKTsKKyAgICAvL2Nvbm5lY3QobV9wTWFpbkNvbnRhaW5lci0+d2lkZ2V0
KCksU0lHTkFMKGN0cmxUYWJQcmVzc2VkKCkpLG1fcE1haW5XaW5kb3csU0xPVChzbG90Q3RybFRh
YlByZXNzZWQoKSkpOworICAgIC8vbV9wTWFpbldpbmRvdy0+c2V0Q2VudHJhbFdpZGdldCggbV9w
TWFpbkNvbnRhaW5lci0+d2lkZ2V0KCkgKTsKKyAgICAvL21fcE1haW5Db250YWluZXItPndpZGdl
dCgpLT5zZXRHZW9tZXRyeSggMCwgMCwgbV9wTWFpbldpbmRvdy0+d2lkdGgoKSwgbV9wTWFpbldp
bmRvdy0+aGVpZ2h0KCkgKTsKKyAgICAvL21fcE1haW5Db250YWluZXItPndpZGdldCgpLT5zaG93
KCk7CiAKICAgICAgIC8vIFRoaXMgZmxhZyBpcyB1c2VkIGJ5IEtvbnFWaWV3LCB0byBkaXN0aW5n
dWlzaCBtYW51YWwgdmlldyBjcmVhdGlvbgogICAgICAgLy8gZnJvbSBwcm9maWxlIGxvYWRpbmcg
KGUuZy4gaW4gc3dpdGNoVmlldykKQEAgLTcyNiw3ICs3ODUsNyBAQAogICAgIHJldHVybiBRU2l6
ZSggd2lkdGgsIGhlaWdodCApOwogfQogCi12b2lkIEtvbnFWaWV3TWFuYWdlcjo6bG9hZEl0ZW0o
IEtDb25maWcgJmNmZywgS29ucUZyYW1lQ29udGFpbmVyICpwYXJlbnQsCit2b2lkIEtvbnFWaWV3
TWFuYWdlcjo6bG9hZEl0ZW0oIEtDb25maWcgJmNmZywgS29ucUZyYW1lQ29udGFpbmVyQmFzZSAq
cGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZu
YW1lLCBjb25zdCBLVVJMICYgZGVmYXVsdFVSTCwgYm9vbCBvcGVuVVJMICkKIHsKICAgUVN0cmlu
ZyBwcmVmaXg7CkBAIC04MTMsNyArODcyLDYgQEAKICAgICAgIEtvbnFGcmFtZUNvbnRhaW5lciAq
bmV3Q29udGFpbmVyID0gbmV3IEtvbnFGcmFtZUNvbnRhaW5lciggbywgcGFyZW50ICk7CiAgICAg
ICBjb25uZWN0KG5ld0NvbnRhaW5lcixTSUdOQUwoY3RybFRhYlByZXNzZWQoKSksbV9wTWFpbldp
bmRvdyxTTE9UKHNsb3RDdHJsVGFiUHJlc3NlZCgpKSk7CiAgICAgICBwYXJlbnQtPmluc2VydENo
aWxkRnJhbWUoIG5ld0NvbnRhaW5lciApOwotICAgICAgbmV3Q29udGFpbmVyLT5zZXRPcGFxdWVS
ZXNpemUoKTsKICAgICAgIG5ld0NvbnRhaW5lci0+c2hvdygpOwogCiAgICAgICBsb2FkSXRlbSgg
Y2ZnLCBuZXdDb250YWluZXIsIGNoaWxkTGlzdC5hdCgwKSwgZGVmYXVsdFVSTCwgb3BlblVSTCAp
OwpAQCAtOTE5LDU3ICs5NzcsMzAgQEAKIC8vLy8vLy8vLy8vLy8vLy8vIERlYnVnIHN0dWZmIC8v
Ly8vLy8vLy8vLy8vLy8KIAogdm9pZCBLb25xVmlld01hbmFnZXI6OnByaW50U2l6ZUluZm8oIEtv
bnFGcmFtZUJhc2UqIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEtvbnFGcmFtZUNvbnRhaW5lciogcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UqIHBhcmVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtc2cgKQogeworICAvKgogICBRUmVj
dCByOwogICByID0gZnJhbWUtPndpZGdldCgpLT5nZW9tZXRyeSgpOwogICBxRGVidWcoIkNoaWxk
IHNpemUgJXMgOiB4OiAlZCwgeTogJWQsIHc6ICVkLCBoOiAlZCIsIG1zZywgci54KCksci55KCks
ci53aWR0aCgpLHIuaGVpZ2h0KCkgKTsKIAogICBRVmFsdWVMaXN0PGludD4gc2l6ZXM7Ci0gIHNp
emVzID0gcGFyZW50LT5zaXplcygpOworICBzaXplcyA9IHN0YXRpY19jYXN0PEtvbnFGcmFtZUNv
bnRhaW5lcio+KHBhcmVudCktPnNpemVzKCk7CiAgIHByaW50ZiggIlBhcmVudCBzaXplcyAlcyA6
IiwgbXNnICk7CiAgIFFWYWx1ZUxpc3Q8aW50Pjo6Q29uc3RJdGVyYXRvciBpdDsKICAgZm9yKCBp
dCA9IHNpemVzLmJlZ2luKCk7IGl0ICE9IHNpemVzLmVuZCgpOyArK2l0ICkKICAgICBwcmludGYo
ICIgJWQiLCAoKml0KSApOwogICBwcmludGYoIlxuIik7CisgICovCiB9CiAKLXZvaWQgS29ucVZp
ZXdNYW5hZ2VyOjpwcmludEZ1bGxIaWVyYXJjaHkoIEtvbnFGcmFtZUNvbnRhaW5lciAqIGNvbnRh
aW5lciwgaW50IGlkZW50ICkKK3ZvaWQgS29ucVZpZXdNYW5hZ2VyOjpwcmludEZ1bGxIaWVyYXJj
aHkoIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UgKiBjb250YWluZXIgKQogewotICAgIGlmIChjb250
YWluZXIpCi0gICAgewotICAgICAgICBRU3RyaW5nIHNwYWNlczsKLSAgICAgICAgZm9yICggaW50
IGkgPSAwIDsgaSA8IGlkZW50IDsgaSsrICkKLSAgICAgICAgICAgIHNwYWNlcyArPSAiICI7Ci0g
ICAgICAgIGtkRGVidWcoMTIwMikgPDwgc3BhY2VzIDw8ICJDb250YWluZXIgIiA8PCBjb250YWlu
ZXIgPDwgZW5kbDsKLSAgICAgICAgS29ucUZyYW1lQmFzZSAqIGNoaWxkID0gY29udGFpbmVyLT5m
aXJzdENoaWxkKCk7Ci0gICAgICAgIGlmICggIWNoaWxkICkKLSAgICAgICAgICAgIGtkRGVidWco
MTIwMikgPDwgc3BhY2VzIDw8ICIgIE51bGwgY2hpbGQiIDw8IGVuZGw7Ci0gICAgICAgIGVsc2Ug
aWYgKCBjaGlsZC0+d2lkZ2V0KCktPmlzQSgiS29ucUZyYW1lQ29udGFpbmVyIikgKQotICAgICAg
ICAgICAgcHJpbnRGdWxsSGllcmFyY2h5KCBzdGF0aWNfY2FzdDxLb25xRnJhbWVDb250YWluZXIg
Kj4oY2hpbGQpLCBpZGVudCArIDIgKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAga2REZWJ1
ZygxMjAyKSA8PCBzcGFjZXMgPDwgIiAgIiA8PCAiS29ucUZyYW1lIGNvbnRhaW5pbmcgdmlldyAi
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PEtvbnFGcmFtZSAqPihj
aGlsZCktPmNoaWxkVmlldygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgcGFydCAi
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PEtvbnFGcmFtZSAqPihj
aGlsZCktPnBhcnQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIHdob3NlIHdpZGdl
dCBpcyBhICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8S29ucUZy
YW1lICo+KGNoaWxkKS0+cGFydCgpLT53aWRnZXQoKS0+Y2xhc3NOYW1lKCkgPDwgZW5kbDsKLSAg
ICAgICAgY2hpbGQgPSBjb250YWluZXItPnNlY29uZENoaWxkKCk7Ci0gICAgICAgIGlmICggIWNo
aWxkICkKLSAgICAgICAgICAgIGtkRGVidWcoMTIwMikgPDwgc3BhY2VzIDw8ICIgIE51bGwgY2hp
bGQiIDw8IGVuZGw7Ci0gICAgICAgIGVsc2UgaWYgKCBjaGlsZC0+d2lkZ2V0KCktPmlzQSgiS29u
cUZyYW1lQ29udGFpbmVyIikgKQotICAgICAgICAgICAgcHJpbnRGdWxsSGllcmFyY2h5KCBzdGF0
aWNfY2FzdDxLb25xRnJhbWVDb250YWluZXIgKj4oY2hpbGQpLCBpZGVudCArIDIgKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAga2REZWJ1ZygxMjAyKSA8PCBzcGFjZXMgPDwgIiAgIiA8PCAi
S29ucUZyYW1lICIgPDwgY2hpbGQgPDwgIiBjb250YWluaW5nIHZpZXcgIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDxLb25xRnJhbWUgKj4oY2hpbGQpLT5jaGlsZFZp
ZXcoKQotICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIHBhcnQgIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDxLb25xRnJhbWUgKj4oY2hpbGQpLT5wYXJ0KCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiB3aG9zZSB3aWRnZXQgaXMgYSAiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PEtvbnFGcmFtZSAqPihjaGlsZCkt
PnBhcnQoKS0+d2lkZ2V0KCktPmNsYXNzTmFtZSgpIDw8IGVuZGw7Ci0gICAgfQotICAgIGVsc2UK
LSAgICAgICAga2REZWJ1ZygxMjAyKSA8PCAiTnVsbCBjb250YWluZXIiIDw8IGVuZGw7CisgIGtk
RGVidWcoMTIwMikgPDwgbV9wTWFpbldpbmRvdy0+Y3VycmVudFZpZXcoKTsKKworICBpZiAoY29u
dGFpbmVyKSBjb250YWluZXItPnByaW50RnJhbWVJbmZvKFFTdHJpbmc6Om51bGwpOworICBlbHNl
IGtkRGVidWcoMTIwMikgPDwgIk51bGwgQ29udGFpbmVyIiA8PCBlbmRsOwogfQogCiAjaW5jbHVk
ZSAia29ucV92aWV3bWdyLm1vYyIKZGlmZiAtdSBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9y
L2tvbnFfdmlld21nci5oIGtkZWJhc2UtMi4yLjIva29ucXVlcm9yL2tvbnFfdmlld21nci5oCi0t
LSBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL2tvbnFfdmlld21nci5oCVNhdCBKdWwgMjgg
MjM6NTY6NDAgMjAwMQorKysga2RlYmFzZS0yLjIuMi9rb25xdWVyb3Iva29ucV92aWV3bWdyLmgJ
U3VuIERlYyAgOSAxNzo1NjozNiAyMDAxCkBAIC0zOCw2ICszOCw4IEBACiBjbGFzcyBLb25xTWFp
bldpbmRvdzsKIGNsYXNzIEtvbnFGcmFtZUJhc2U7CiBjbGFzcyBLb25xRnJhbWVDb250YWluZXI7
CitjbGFzcyBLb25xRnJhbWVDb250YWluZXJCYXNlOworY2xhc3MgS29ucUZyYW1lVGFiczsKIGNs
YXNzIEtvbnFWaWV3OwogY2xhc3MgQnJvd3NlclZpZXc7CiBjbGFzcyBLQWN0aW9uTWVudTsKQEAg
LTgxLDYgKzgzLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAm
IHNlcnZpY2VOYW1lID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG5ld09uZUZpcnN0ID0gZmFsc2UpOwogCisJLyoqCisJICogQWRkcyBhIHRhYiB0byBtX3BN
YWluQ29udGFpbmVyCisJICovCisKKyAgS29ucVZpZXcqIGFkZFRhYihjb25zdCBRU3RyaW5nICZz
ZXJ2aWNlVHlwZSA9IFFTdHJpbmc6Om51bGwsCisJCSAgICAgCQkJCQkgY29uc3QgUVN0cmluZyAm
c2VydmljZU5hbWUgPSBRU3RyaW5nOjpudWxsLAorCQkJCQkJCSAgICAgYm9vbCBwYXNzaXZlTW9k
ZSA9IGZhbHNlKTsKKwogICAvKioKICAgICogRG8gdGhlIGFjdHVhbCBzcGxpdHRpbmcuIFRoZSBu
ZXcgVmlldyB3aWxsIGJlIGNyZWF0ZWQgZnJvbSBzZXJ2aWNlVHlwZS4KICAgICogUmV0dXJucyB0
aGUgbmV3bHkgY3JlYXRlZCB2aWV3IG9yIDBMIGlmIHRoZSBuZXcgdmlldyBjb3VsZG4ndCBiZSBj
cmVhdGVkLgpAQCAtOTksNiArMTA5LDEyIEBACiAgIHZvaWQgcmVtb3ZlVmlldyggS29ucVZpZXcg
KnZpZXcgKTsKIAogICAvKioKKyAgICogR3Vlc3MgQWdhaW4hOi0+CisgICAqIEFsc28gdGFrZXMg
Y2FyZSBvZiBzZXR0aW5nIGFub3RoZXIgdmlldyBhcyBhY3RpdmUgaWYgdGhlIGFjdGl2ZSB2aWV3
IHdhcyBpbiB0aGlzIHRhYgorICAgKi8KKwl2b2lkIHJlbW92ZUN1cnJlbnRUYWIoKTsKKworICAv
KioKICAgICogU2F2ZXMgdGhlIGN1cnJlbnQgdmlldyBsYXlvdXQgdG8gYSBjb25maWcgZmlsZS4K
ICAgICogUmVtb3ZlIGNvbmZpZyBmaWxlIGJlZm9yZSBzYXZpbmcsIGVzcGVjaWFsbHkgaWYgc2F2
ZVVSTHMgaXMgZmFsc2UuCiAgICAqIEBwYXJhbSBjZmcgdGhlIGNvbmZpZyBmaWxlCkBAIC0xNzQs
NyArMTkwLDcgQEAKIAogICB2b2lkIHByb2ZpbGVMaXN0RGlydHkoIGJvb2wgYnJvYWRjYXN0ID0g
dHJ1ZSApOwogCi0gIEtvbnFGcmFtZUNvbnRhaW5lciAqbWFpbkNvbnRhaW5lcigpIGNvbnN0IHsg
cmV0dXJuIG1fcE1haW5Db250YWluZXI7IH0KKyAgS29ucUZyYW1lVGFicyAqbWFpbkNvbnRhaW5l
cigpIGNvbnN0IHsgcmV0dXJuIG1fcE1haW5Db250YWluZXI7IH0KIAogICBLb25xTWFpbldpbmRv
dyAqbWFpbldpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fcE1haW5XaW5kb3c7IH0KIApAQCAtMjE2
LDcgKzIzMiw3IEBACiAgICAqIEBwYXJhbSBvcGVuVVJMIHdoZXRoZXIgdG8gb3BlbiB1cmxzIGF0
IGFsbCAoZnJvbSB0aGUgcHJvZmlsZSBvciB1c2luZyBAcCBkZWZhdWx0VVJMKS4KICAgICogICh0
aGlzIGlzIHNldCB0byBmYWxzZSB3aGVuIHdlIGhhdmUgYSBmb3JjZWRVUkwgdG8gb3BlbikKICAg
ICovCi0gIHZvaWQgbG9hZEl0ZW0oIEtDb25maWcgJmNmZywgS29ucUZyYW1lQ29udGFpbmVyICpw
YXJlbnQsCisgIHZvaWQgbG9hZEl0ZW0oIEtDb25maWcgJmNmZywgS29ucUZyYW1lQ29udGFpbmVy
QmFzZSAqcGFyZW50LAogICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZuYW1lLCBjb25z
dCBLVVJMICYgZGVmYXVsdFVSTCwgYm9vbCBvcGVuVVJMICk7CiAKICAgLy8gRGlzYWJsZWQgLSB3
ZSBkbyBpdCBvdXJzZWx2ZXMKQEAgLTIzOSw3ICsyNTUsNyBAQAogICAgKiBNYWlubHkgY3JlYXRl
cyB0aGUgYmFja2VuZCBzdHJ1Y3R1cmUoS29ucVZpZXcpIGZvciBhIHZpZXcgYW5kCiAgICAqIGNv
bm5lY3RzIGl0CiAgICAqLwotICBLb25xVmlldyAqc2V0dXBWaWV3KCBLb25xRnJhbWVDb250YWlu
ZXIgKnBhcmVudENvbnRhaW5lciwKKyAgS29ucVZpZXcgKnNldHVwVmlldyggS29ucUZyYW1lQ29u
dGFpbmVyQmFzZSAqcGFyZW50Q29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICBLb25x
Vmlld0ZhY3RvcnkgJnZpZXdGYWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBL
U2VydmljZTo6UHRyICZzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVHJh
ZGVyOjpPZmZlckxpc3QgJnBhcnRTZXJ2aWNlT2ZmZXJzLApAQCAtMjQ5LDEzICsyNjUsMTQgQEAK
IAogICAvL2p1c3QgZm9yIGRlYnVnZ2luZwogICB2b2lkIHByaW50U2l6ZUluZm8oIEtvbnFGcmFt
ZUJhc2UqIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgIEtvbnFGcmFtZUNvbnRhaW5lciog
cGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgIEtvbnFGcmFtZUNvbnRhaW5lckJhc2UqIHBh
cmVudCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtc2cgKTsKLSAgdm9pZCBw
cmludEZ1bGxIaWVyYXJjaHkoIEtvbnFGcmFtZUNvbnRhaW5lciAqIGNvbnRhaW5lciwgaW50IGlk
ZW50ID0gMCApOworCisgIHZvaWQgcHJpbnRGdWxsSGllcmFyY2h5KCBLb25xRnJhbWVDb250YWlu
ZXJCYXNlICogY29udGFpbmVyICk7CiAKICAgS29ucU1haW5XaW5kb3cgKm1fcE1haW5XaW5kb3c7
CiAKLSAgS29ucUZyYW1lQ29udGFpbmVyICptX3BNYWluQ29udGFpbmVyOworICBLb25xRnJhbWVU
YWJzICptX3BNYWluQ29udGFpbmVyOwogCiAgIFFHdWFyZGVkUHRyPEtBY3Rpb25NZW51PiBtX3Bh
bVByb2ZpbGVzOwogICBib29sIG1fYlByb2ZpbGVMaXN0RGlydHk7CmRpZmYgLXUga2RlYmFzZS0y
LjIuMi5vcmlnL2tvbnF1ZXJvci9rb25xdWVyb3IucmMga2RlYmFzZS0yLjIuMi9rb25xdWVyb3Iv
a29ucXVlcm9yLnJjCi0tLSBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL2tvbnF1ZXJvci5y
YwlTYXQgSnVsIDI4IDIzOjU2OjQwIDIwMDEKKysrIGtkZWJhc2UtMi4yLjIva29ucXVlcm9yL2tv
bnF1ZXJvci5yYwlUdWUgRGVjIDExIDIxOjQ5OjU2IDIwMDEKQEAgLTg3LDYgKzg3LDkgQEAKICAg
PEFjdGlvbiBuYW1lPSJzcGxpdHZpZXd2Ii8+CiAgIDxBY3Rpb24gbmFtZT0icmVtb3ZldmlldyIv
PgogICA8U2VwYXJhdG9yLz4KKyAgPEFjdGlvbiBuYW1lPSJhZGR0YWIiLz4KKyAgPEFjdGlvbiBu
YW1lPSJyZW1vdmVjdXJyZW50dGFiIi8+CisgIDxTZXBhcmF0b3IvPiAgICAKICAgPEFjdGlvbkxp
c3QgbmFtZT0idG9nZ2xldmlldyIgLz4KICAgPFNlcGFyYXRvci8+CiAgIDxBY3Rpb24gbmFtZT0i
c2F2ZXZpZXdwcm9maWxlIi8+CkNvbW1vbiBzdWJkaXJlY3Rvcmllczoga2RlYmFzZS0yLjIuMi5v
cmlnL2tvbnF1ZXJvci9saXN0dmlldyBhbmQga2RlYmFzZS0yLjIuMi9rb25xdWVyb3IvbGlzdHZp
ZXcKQ29tbW9uIHN1YmRpcmVjdG9yaWVzOiBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL3Bp
Y3MgYW5kIGtkZWJhc2UtMi4yLjIva29ucXVlcm9yL3BpY3MKQ29tbW9uIHN1YmRpcmVjdG9yaWVz
OiBrZGViYXNlLTIuMi4yLm9yaWcva29ucXVlcm9yL3NoZWxsY21kcGx1Z2luIGFuZCBrZGViYXNl
LTIuMi4yL2tvbnF1ZXJvci9zaGVsbGNtZHBsdWdpbgpDb21tb24gc3ViZGlyZWN0b3JpZXM6IGtk
ZWJhc2UtMi4yLjIub3JpZy9rb25xdWVyb3Ivc2lkZWJhciBhbmQga2RlYmFzZS0yLjIuMi9rb25x
dWVyb3Ivc2lkZWJhcgo=
--------------Boundary-00=_2XO7GSVHEX1WF551N6WK--