<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.kde.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugs.kde.org/"
          
          maintainer="sysadmin@kde.org"
>

    <bug>
          <bug_id>156919</bug_id>
          
          <creation_ts>2008-01-29 15:53:57 +0000</creation_ts>
          <short_desc>Embedded terminal should notify the host about changes in current working directory</short_desc>
          <delta_ts>2013-04-06 19:49:41 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>2</classification_id>
          <classification>Applications</classification>
          <product>konsole</product>
          <component>kpart</component>
          <version>unspecified</version>
          <rep_platform>Compiled Sources</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>NOR</priority>
          <bug_severity>wishlist</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Robert Knight">robertknight</reporter>
          <assigned_to name="Konsole Bugs">konsole-bugs-null</assigned_to>
          <cc>blueice</cc>
    
    <cc>chemobejk</cc>
    
    <cc>hein</cc>
          
          <cf_commitlink></cf_commitlink>
          <cf_versionfixedin>4.9.0</cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>0</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>576358</commentid>
    <comment_count>0</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-01-29 15:53:58 +0000</bug_when>
    <thetext>Version:           2.1 (using Devel)
Installed from:    Compiled sources

The embedded terminal should notify the host (via a signal) when the current working directory in the terminal changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576359</commentid>
    <comment_count>1</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-01-29 15:54:25 +0000</bug_when>
    <thetext>This is a requirement for implementing: Bug #156732</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576361</commentid>
    <comment_count>2</comment_count>
    <who name="Eike Hein">hein</who>
    <bug_when>2008-01-29 15:56:48 +0000</bug_when>
    <thetext>I&apos;d be interested in that as well, as it is a requirement for eventually implementing some measure of session saving and restore in Yakuake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645379</commentid>
    <comment_count>3</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-10 21:19:05 +0000</bug_when>
    <thetext>This will change the part interface. Can this be done in a backward compatible way? I&apos;m new to this stuff...


This is a difficult thing to implement as konsole isn&apos;t the process and therefore doesn&apos;t see any state changes from it. It can only poll for changes from its child process(es).


I see three ways how to do this:

a) new signal Konsole::SessionManager::directoryChanged()

I looked at yakuake. If I change the directory the window title gets updated shortly afterwards just like the tabs in konsole. So I assume yakuake already receives Konsole::Session::titleChanged() signals? Or how does yakuake know?


b) implement the same functionality as in Konsole::SessionController

Use a one-shot, 2 second QTimer that is armed at the end of Konsole::Part::sendInput(). The timeout() signal will be connected to a new slot that sends the Konsole::Part::directoryChanged() signal when necessary.


c) implement a new part method/signal that can be used to poll the current directory

Regular polling would then be the responsibility of the client. This solution might be necessary if a KPart is not allowed to use a QTimer.


Comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645506</commentid>
    <comment_count>4</comment_count>
    <who name="Eike Hein">hein</who>
    <bug_when>2008-09-11 11:17:09 +0000</bug_when>
    <thetext>KParts generally have a setWindowCaption() signal that the Konsole KPart emits with the contents of the &quot;Tab title format&quot; setting of the active profile, and that Yakuake then uses for the title bar or optionally tab titles. The user can set &quot;Tab title format&quot; to be the CWD, and that does work. Only that Yakuake of course can&apos;t really rely on that being the case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645512</commentid>
    <comment_count>5</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-09-11 11:58:14 +0000</bug_when>
    <thetext>&gt; b) implement the same functionality as in Konsole::SessionController
&gt; Use a one-shot, 2 second QTimer that is armed at the end of 
&gt; Konsole::Part::sendInput(). The timeout() signal will be connected to a
&gt; new slot that sends the Konsole::Part::directoryChanged() signal
&gt; when necessary. 

The best place for this is the ViewProperties class which provides an interface that the ViewContainer classes (the tab widgets) use to get the text, icon and state of a tab.  SessionController inherits from ViewProperties and checks for changes in the current directory/program etc. of a session in the SessionController::snapshot() method which then updates the session&apos;s title.  The snapshot() method is called, with a short delay, after any input to the terminal.  

So, you could add a new signal currentDirChanged(QString) to ViewProperties and emit that from SessionController::snapshot()

In Konsole::Part you can listen for this signal by connecting to it in Part::activeViewChanged(SessionController*) - the same as for the titleChanged() signal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645514</commentid>
    <comment_count>6</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-11 12:26:43 +0000</bug_when>
    <thetext>But you would still need a new signal that is emitted by the Konsole::Part, i.e.

void Part::activeDirectoryChanged(ViewProperties* properties)
{
	emit setCurrentDirectory(properties-&gt;currentDir());
}

And yakuake would connect to that, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645516</commentid>
    <comment_count>7</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-09-11 12:50:59 +0000</bug_when>
    <thetext>&gt; But you would still need a new signal that is emitted by the Konsole::Part, 
&gt; i.e. void Part::activeDirectoryChanged(ViewProperties* properties)
&gt; { emit setCurrentDirectory(properties-&gt;currentDir()); }
&gt; And yakuake would connect to that, right? 

Yes.  Following Qt conventions the signal would be called directoryChanged() or currentDirectoryChanged().

Thank-you for looking into this at the tab restoration by the way.  I&apos;m short changed for hobby time at the moment so it is really appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645861</commentid>
    <comment_count>8</comment_count>
      <attachid>27384</attachid>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-12 20:42:41 +0000</bug_when>
    <thetext>Created attachment 27384
Implement new signal Part::currentDirectoryChanged(const QString&amp;)

Before I could implement the signal I had to refactor the ProcessInfo usage. Now Session is the sole user of ProcessInfo and the process information can be found from one place. That&apos;s why the patch against kdebase-4.1.1 is so big.

The development history for the proposed patch can be found in my git repository at

   git clone http://chemobejk.dyndns.org/git/konsole/.git

in the branch kde-bug-156919.


From c79186f6c8eee10e9d2d1b506e807505085403c9 Mon Sep 17 00:00:00 2001
From: Stefan Becker &lt;stefan.becker@nokia.com&gt;
Date: Fri, 12 Sep 2008 21:33:00 +0300
Subject: [PATCH] Implement new signal Part::currentDirectoryChanged()

Simply forwards SessionController::currentDirectoryChanged() signal.

With this commit bug #156919 should be fixed. Please review &amp; merge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646223</commentid>
    <comment_count>9</comment_count>
    <who name="Eike Hein">hein</who>
    <bug_when>2008-09-14 11:29:17 +0000</bug_when>
    <thetext>Hm, another thing that a Konsole KPart user would need for proper session restore would be a way to get and set the profile programmatically.

Robert, is there a changeSessionSettings() command to change the profile wholesale? That would still result in initially loading the wrong profile before switching to the right one (and with different bg colors, that probably means ugly flashing), but until the interface can be/is changed to accomodate a larger modification like an instanciation routine that takes a profile parameter, that&apos;s probably the best that can be done.

And with feature freeze on October 11th, things are on a pretty tight deadline now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646439</commentid>
    <comment_count>10</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-14 21:28:33 +0000</bug_when>
    <thetext>BTW did you try the new code? Does it work for yakuake?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646579</commentid>
    <comment_count>11</comment_count>
    <who name="Eike Hein">hein</who>
    <bug_when>2008-09-15 11:31:42 +0000</bug_when>
    <thetext>Sorry, I haven&apos;t had the time to work on on it yet. But on the face of it, a currentDirectoryChanged() signal that hands the app something that can be used in showShellInDir() later seems right. One of the more interesting things will be seeing what it does e.g. for ssh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731100</commentid>
    <comment_count>12</comment_count>
    <who name="Kurt Hindenburg">khindenburg</who>
    <bug_when>2009-03-16 01:00:43 +0000</bug_when>
    <thetext>Do you a patch that applies to either 4.2 branch or trunk?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731140</commentid>
    <comment_count>13</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2009-03-16 06:32:57 +0000</bug_when>
    <thetext>No. But I think only the Part.* and SessionController.* parts from the old patch need to be applied. The rest of the changes were already integrated into 4.2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239260</commentid>
    <comment_count>14</comment_count>
    <who name="Jekyll Wu">adaptee</who>
    <bug_when>2012-03-23 14:58:51 +0000</bug_when>
    <thetext>Git commit 675dbcb2fe777b22044510579321148989d29cfb by Jekyll Wu.
Committed on 23/03/2012 at 15:16.
Pushed by jekyllwu into branch &apos;master&apos;.

Emit signal currentDirectoryChanged(QString) after current directory changes

Note: the signal is not emitted immediately after the current directory
changes. There is noticable delay (usually below 1 second) at the
moment.
REVIEW: 104372
FIXED-IN:4.9.0

M  +4    -0    src/Part.cpp
M  +5    -0    src/Part.h
M  +8    -1    src/Session.cpp
M  +7    -0    src/Session.h
M  +3    -0    src/SessionController.cpp
M  +6    -0    src/SessionController.h

http://commits.kde.org/konsole/675dbcb2fe777b22044510579321148989d29cfb</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27384</attachid>
            <date>2008-09-12 20:42:41 +0000</date>
            <delta_ts>2008-09-12 20:42:41 +0000</delta_ts>
            <desc>Implement new signal Part::currentDirectoryChanged(const QString&amp;)</desc>
            <filename>kdebase-4.1.1-konsole-kpart-directory-changed-signal.patch</filename>
            <type>text/plain</type>
            <size>24525</size>
            <attacher name="Stefan Becker">chemobejk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9QYXJ0LmNwcCBiL3NyYy9QYXJ0LmNwcAppbmRleCAwZDQ5NGE4Li4z
MGRmNjA5IDEwMDY0NAotLS0gYS9zcmMvUGFydC5jcHAKKysrIGIvc3JjL1BhcnQuY3BwCkBAIC0y
MzYsNiArMjM2LDggQEAgdm9pZCBQYXJ0OjphY3RpdmVWaWV3Q2hhbmdlZChTZXNzaW9uQ29udHJv
bGxlciogY29udHJvbGxlcikKIAkJcmVtb3ZlQ2hpbGRDbGllbnQgKF9wbHVnZ2VkQ29udHJvbGxl
cik7CiAJCWRpc2Nvbm5lY3QoX3BsdWdnZWRDb250cm9sbGVyLFNJR05BTCh0aXRsZUNoYW5nZWQo
Vmlld1Byb3BlcnRpZXMqKSksdGhpcywKIAkJCQkJU0xPVChhY3RpdmVWaWV3VGl0bGVDaGFuZ2Vk
KFZpZXdQcm9wZXJ0aWVzKikpKTsKKwkJZGlzY29ubmVjdChfcGx1Z2dlZENvbnRyb2xsZXIsU0lH
TkFMKGN1cnJlbnREaXJlY3RvcnlDaGFuZ2VkKGNvbnN0IFFTdHJpbmcmKSksdGhpcywKKwkJCSAg
IFNMT1QoYWN0aXZlVmlld0N1cnJlbnREaXJlY3RvcnlDaGFuZ2VkKGNvbnN0IFFTdHJpbmcmKSkp
OwogCX0KIAogCS8vIGluc2VydCBuZXcgY29udHJvbGxlcgpAQCAtMjQ0LDYgKzI0Niw5IEBAIHZv
aWQgUGFydDo6YWN0aXZlVmlld0NoYW5nZWQoU2Vzc2lvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIp
CiAJY29ubmVjdChjb250cm9sbGVyLFNJR05BTCh0aXRsZUNoYW5nZWQoVmlld1Byb3BlcnRpZXMq
KSksdGhpcywKIAkJCVNMT1QoYWN0aXZlVmlld1RpdGxlQ2hhbmdlZChWaWV3UHJvcGVydGllcyop
KSk7CiAJYWN0aXZlVmlld1RpdGxlQ2hhbmdlZChjb250cm9sbGVyKTsKKwljb25uZWN0KF9wbHVn
Z2VkQ29udHJvbGxlcixTSUdOQUwoY3VycmVudERpcmVjdG9yeUNoYW5nZWQoY29uc3QgUVN0cmlu
ZyYpKSx0aGlzLAorCQlTTE9UKGFjdGl2ZVZpZXdDdXJyZW50RGlyZWN0b3J5Q2hhbmdlZChjb25z
dCBRU3RyaW5nJikpKTsKKwlhY3RpdmVWaWV3Q3VycmVudERpcmVjdG9yeUNoYW5nZWQoY29udHJv
bGxlci0+Y3VycmVudERpcigpKTsKIAogCWNvbnN0IGNoYXIqIGRpc3BsYXlTaWduYWwgPSBTSUdO
QUwob3ZlcnJpZGVTaG9ydGN1dENoZWNrKFFLZXlFdmVudCosYm9vbCYpKTsKIAljb25zdCBjaGFy
KiBwYXJ0U2xvdCA9IFNMT1Qob3ZlcnJpZGVUZXJtaW5hbFNob3J0Y3V0KFFLZXlFdmVudCosYm9v
bCYpKTsKQEAgLTI2Myw2ICsyNjgsMTAgQEAgdm9pZCBQYXJ0OjphY3RpdmVWaWV3VGl0bGVDaGFu
Z2VkKFZpZXdQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzKQogewogCWVtaXQgc2V0V2luZG93Q2FwdGlv
bihwcm9wZXJ0aWVzLT50aXRsZSgpKTsKIH0KK3ZvaWQgUGFydDo6YWN0aXZlVmlld0N1cnJlbnRE
aXJlY3RvcnlDaGFuZ2VkKGNvbnN0IFFTdHJpbmcmIGRpcikKK3sKKwllbWl0IGN1cnJlbnREaXJl
Y3RvcnlDaGFuZ2VkKGRpcik7Cit9CiB2b2lkIFBhcnQ6OnNob3dNYW5hZ2VQcm9maWxlc0RpYWxv
ZygpCiB7CiAJc2hvd01hbmFnZVByb2ZpbGVzRGlhbG9nKF92aWV3TWFuYWdlci0+d2lkZ2V0KCkp
OwpkaWZmIC0tZ2l0IGEvc3JjL1BhcnQuaCBiL3NyYy9QYXJ0LmgKaW5kZXggMjYwMDVmZi4uMWE2
NzI1NiAxMDA2NDQKLS0tIGEvc3JjL1BhcnQuaAorKysgYi9zcmMvUGFydC5oCkBAIC0xMzEsNiAr
MTMxLDE0IEBAIHNpZ25hbHM6CiAJICovCiAJdm9pZCBvdmVycmlkZVNob3J0Y3V0KFFLZXlFdmVu
dCogZXZlbnQsIGJvb2wmIG92ZXJyaWRlKTsKIAorCS8qKgorCSAqIEVtaXR0ZWQgd2hlbiBhIGN1
cnJlbnQgZGlyZWN0b3J5IGNoYW5nZWQgc2lnbmFsIGhhcyBiZWVuIHJlY2VpdmVkCisJICogZnJv
bSB0aGUgc2Vzc2lvbi4KKwkgKgorCSAqIEBwYXJhbSBkaXIgVGhlIG5ldyBkaXJlY3RvcnkuCisJ
ICovCisJdm9pZCBjdXJyZW50RGlyZWN0b3J5Q2hhbmdlZChjb25zdCBRU3RyaW5nJiBkaXIpOwor
CiBwcm90ZWN0ZWQ6CiAgICAgLyoqIFJlaW1wbGVtZW50ZWQgZnJvbSBLUGFydHM6OlBhcnRCYXNl
LiAqLwogICAgIHZpcnR1YWwgYm9vbCBvcGVuRmlsZSgpOwpAQCAtMTQxLDggKzE0OSw5IEBAIHBy
aXZhdGUgc2xvdHM6CiAgICAgLy8gY2FsbCB0aGUgcnVuKCkgbWV0aG9kIG9uIHRoZSByZXR1cm5l
ZCBTZXNzaW9uIGluc3RhbmNlIHRvIGJlZ2luIHRoZSBzZXNzaW9uCiAgICAgU2Vzc2lvbiogY3Jl
YXRlU2Vzc2lvbihjb25zdCBQcm9maWxlOjpQdHIgcHJvZmlsZSA9IFByb2ZpbGU6OlB0cigpKTsK
ICAgICB2b2lkIGFjdGl2ZVZpZXdDaGFuZ2VkKFNlc3Npb25Db250cm9sbGVyKiBjb250cm9sbGVy
KTsKLQl2b2lkIGFjdGl2ZVZpZXdUaXRsZUNoYW5nZWQoVmlld1Byb3BlcnRpZXMqIHByb3BlcnRp
ZXMpOwotCXZvaWQgc2hvd01hbmFnZVByb2ZpbGVzRGlhbG9nKCk7CisgICAgdm9pZCBhY3RpdmVW
aWV3VGl0bGVDaGFuZ2VkKFZpZXdQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzKTsKKyAgICB2b2lkIGFj
dGl2ZVZpZXdDdXJyZW50RGlyZWN0b3J5Q2hhbmdlZChjb25zdCBRU3RyaW5nJiBkaXIpOworICAg
IHZvaWQgc2hvd01hbmFnZVByb2ZpbGVzRGlhbG9nKCk7CiAgICAgdm9pZCB0ZXJtaW5hbEV4aXRl
ZCgpOwogICAgIHZvaWQgbmV3VGFiKCk7CiAJdm9pZCBvdmVycmlkZVRlcm1pbmFsU2hvcnRjdXQo
UUtleUV2ZW50Kixib29sJiBvdmVycmlkZSk7CmRpZmYgLS1naXQgYS9zcmMvUHJvY2Vzc0luZm8u
Y3BwIGIvc3JjL1Byb2Nlc3NJbmZvLmNwcAppbmRleCBhYmYwYTlkLi42ZTg1OTFkIDEwMDY0NAot
LS0gYS9zcmMvUHJvY2Vzc0luZm8uY3BwCisrKyBiL3NyYy9Qcm9jZXNzSW5mby5jcHAKQEAgLTY0
LDE4ICs2NCwxMCBAQCB2b2lkIFByb2Nlc3NJbmZvOjp1cGRhdGUoKQogICAgIHJlYWRQcm9jZXNz
SW5mbyhfcGlkLF9lbmFibGVFbnZpcm9ubWVudFJlYWQpOwogfQogCi1RU3RyaW5nIFByb2Nlc3NJ
bmZvOjpmb3JtYXQoY29uc3QgUVN0cmluZyYgaW5wdXQpIGNvbnN0CitRU3RyaW5nIFByb2Nlc3NJ
bmZvOjp2YWxpZEN1cnJlbnREaXIoKSBjb25zdAogewogICAgYm9vbCBvayA9IGZhbHNlOwogCi0g
ICBRU3RyaW5nIG91dHB1dChpbnB1dCk7Ci0KLSAgIC8vIHNlYXJjaCBmb3IgYW5kIHJlcGxhY2Ug
a25vd24gbWFya2VyCi0gICBvdXRwdXQucmVwbGFjZSgiJXUiLCJOT1QgSU1QTEVNRU5URUQgWUVU
Iik7Ci0gICBvdXRwdXQucmVwbGFjZSgiJW4iLG5hbWUoJm9rKSk7Ci0gICBvdXRwdXQucmVwbGFj
ZSgiJWMiLGZvcm1hdENvbW1hbmQobmFtZSgmb2spLGFyZ3VtZW50cygmb2spLFNob3J0Q29tbWFu
ZEZvcm1hdCkpOwotICAgb3V0cHV0LnJlcGxhY2UoIiVDIixmb3JtYXRDb21tYW5kKG5hbWUoJm9r
KSxhcmd1bWVudHMoJm9rKSxMb25nQ29tbWFuZEZvcm1hdCkpOwotICAgCiAgICAvLyByZWFkIGN1
cnJlbnQgZGlyLCBpZiBhbiBlcnJvciBvY2N1cnMgdHJ5IHRoZSBwYXJlbnQgYXMgdGhlIG5leHQK
ICAgIC8vIGJlc3Qgb3B0aW9uCiAgICBpbnQgY3VycmVudFBpZCA9IHBhcmVudFBpZCgmb2spOwpA
QCAtODgsMTAgKzgwLDI2IEBAIFFTdHJpbmcgUHJvY2Vzc0luZm86OmZvcm1hdChjb25zdCBRU3Ry
aW5nJiBpbnB1dCkgY29uc3QKICAgICAgICBkaXIgPSBjdXJyZW50LT5jdXJyZW50RGlyKCZvayk7
CiAgICAgICAgZGVsZXRlIGN1cnJlbnQ7CiAgICB9Ci0gICAgICAgIAorCisgICByZXR1cm4gZGly
OworfQorCitRU3RyaW5nIFByb2Nlc3NJbmZvOjpmb3JtYXQoY29uc3QgUVN0cmluZyYgaW5wdXQp
IGNvbnN0Cit7CisgICBib29sIG9rID0gZmFsc2U7CisKKyAgIFFTdHJpbmcgb3V0cHV0KGlucHV0
KTsKKworICAgLy8gc2VhcmNoIGZvciBhbmQgcmVwbGFjZSBrbm93biBtYXJrZXIKKyAgIG91dHB1
dC5yZXBsYWNlKCIldSIsIk5PVCBJTVBMRU1FTlRFRCBZRVQiKTsKKyAgIG91dHB1dC5yZXBsYWNl
KCIlbiIsbmFtZSgmb2spKTsKKyAgIG91dHB1dC5yZXBsYWNlKCIlYyIsZm9ybWF0Q29tbWFuZChu
YW1lKCZvayksYXJndW1lbnRzKCZvayksU2hvcnRDb21tYW5kRm9ybWF0KSk7CisgICBvdXRwdXQu
cmVwbGFjZSgiJUMiLGZvcm1hdENvbW1hbmQobmFtZSgmb2spLGFyZ3VtZW50cygmb2spLExvbmdD
b21tYW5kRm9ybWF0KSk7CisgICAKKyAgIFFTdHJpbmcgZGlyID0gdmFsaWRDdXJyZW50RGlyKCk7
CiAgICBvdXRwdXQucmVwbGFjZSgiJUQiLGRpcik7CiAgICBvdXRwdXQucmVwbGFjZSgiJWQiLGZv
cm1hdFNob3J0RGlyKGRpcikpOwotICAgCisKICAgIC8vIHJlbW92ZSBhbnkgcmVtYWluaW5nICVb
TEVUVEVSXSBzZXF1ZW5jZXMKICAgIC8vIG91dHB1dC5yZXBsYWNlKFFSZWdFeHAoIiVcXHciKSwg
UVN0cmluZygpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL1Byb2Nlc3NJbmZvLmggYi9zcmMvUHJvY2Vz
c0luZm8uaAppbmRleCA3NjZhNDM0Li5mZDYxYjY2IDEwMDY0NAotLS0gYS9zcmMvUHJvY2Vzc0lu
Zm8uaAorKysgYi9zcmMvUHJvY2Vzc0luZm8uaApAQCAtMTUyLDYgKzE1MiwxMSBAQCBwdWJsaWM6
CiAgICAgUVN0cmluZyBjdXJyZW50RGlyKGJvb2wqIG9rKSBjb25zdDsKIAogICAgIC8qKgorICAg
ICAqIFJldHVybnMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb2YgdGhlIHByb2Nlc3Mg
KG9yIGl0cyBwYXJlbnQpCisgICAgICovCisgICAgUVN0cmluZyB2YWxpZEN1cnJlbnREaXIoKSBj
b25zdDsKKworICAgIC8qKgogICAgICAqIFBhcnNlcyBhbiBpbnB1dCBzdHJpbmcsIGxvb2tpbmcg
Zm9yIG1hcmtlcnMgYmVnaW5uaW5nIHdpdGggYSAnJScgCiAgICAgICogY2hhcmFjdGVyIGFuZCBy
ZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIG1hcmtlcnMgcmVwbGFjZWQKICAgICAgKiB3aXRoIGlu
Zm9ybWF0aW9uIGZyb20gdGhpcyBwcm9jZXNzIGRlc2NyaXB0aW9uLgpkaWZmIC0tZ2l0IGEvc3Jj
L1Nlc3Npb24uY3BwIGIvc3JjL1Nlc3Npb24uY3BwCmluZGV4IDgzODFmYjAuLjU3NGI2MTYgMTAw
NjQ0Ci0tLSBhL3NyYy9TZXNzaW9uLmNwcAorKysgYi9zcmMvU2Vzc2lvbi5jcHAKQEAgLTQ3LDEx
ICs0NywxMyBAQAogI2luY2x1ZGUgPEtSdW4+CiAjaW5jbHVkZSA8a3NoZWxsLmg+CiAjaW5jbHVk
ZSA8S1N0YW5kYXJkRGlycz4KKyNpbmNsdWRlIDxLVXJsPgogCiAvLyBLb25zb2xlCiAjaW5jbHVk
ZSA8Y29uZmlnLWtvbnNvbGUuaD4KICNpbmNsdWRlIDxzZXNzaW9uYWRhcHRvci5oPgogCisjaW5j
bHVkZSAiUHJvY2Vzc0luZm8uaCIKICNpbmNsdWRlICJQdHkuaCIKICNpbmNsdWRlICJUZXJtaW5h
bERpc3BsYXkuaCIKICNpbmNsdWRlICJTaGVsbENvbW1hbmQuaCIKQEAgLTc2LDYgKzc4LDkgQEAg
U2Vzc2lvbjo6U2Vzc2lvbihRT2JqZWN0KiBwYXJlbnQpIDoKICAgICwgX2Zsb3dDb250cm9sKHRy
dWUpCiAgICAsIF9mdWxsU2NyaXB0aW5nKGZhbHNlKQogICAgLCBfc2Vzc2lvbklkKDApCisgICAs
IF9zZXNzaW9uUHJvY2Vzc0luZm8oMCkKKyAgICwgX2ZvcmVncm91bmRQcm9jZXNzSW5mbygwKQor
ICAgLCBfZm9yZWdyb3VuZFBpZCgwKQogICAgLCBfem1vZGVtQnVzeShmYWxzZSkKICAgICwgX3pt
b2RlbVByb2MoMCkKICAgICwgX3ptb2RlbVByb2dyZXNzKDApCkBAIC0xOTksNiArMjA0LDI2IEBA
IHZvaWQgU2Vzc2lvbjo6c2V0QXJndW1lbnRzKGNvbnN0IFFTdHJpbmdMaXN0JiBhcmd1bWVudHMp
CiAgICAgX2FyZ3VtZW50cyA9IFNoZWxsQ29tbWFuZDo6ZXhwYW5kKGFyZ3VtZW50cyk7CiB9CiAK
K1FTdHJpbmcgU2Vzc2lvbjo6Y3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKQoreworICAgIC8vIG9u
bHkgcmV0dXJuZWQgY2FjaGVkIHZhbHVlCisgICAgaWYgKF9jdXJyZW50V29ya2luZ0Rpci5pc0Vt
cHR5KCkpIHVwZGF0ZVdvcmtpbmdEaXJlY3RvcnkoKTsKKyAgICByZXR1cm4gX2N1cnJlbnRXb3Jr
aW5nRGlyOworfQorUHJvY2Vzc0luZm8qIFNlc3Npb246OnVwZGF0ZVdvcmtpbmdEaXJlY3Rvcnko
KQoreworICAgIFByb2Nlc3NJbmZvICpwcm9jZXNzID0gZ2V0UHJvY2Vzc0luZm8oKTsKKyAgICBR
U3RyaW5nIGRpciA9IHByb2Nlc3MtPnZhbGlkQ3VycmVudERpcigpOworCisgICAgaWYgKGRpciAh
PSBfY3VycmVudFdvcmtpbmdEaXIpCisgICAgeworCV9jdXJyZW50V29ya2luZ0RpciA9IGRpcjsK
KwllbWl0IGN1cnJlbnREaXJlY3RvcnlDaGFuZ2VkKGRpcik7CisgICAgfQorCisgICAgcmV0dXJu
IHByb2Nlc3M7Cit9CisKIFFMaXN0PFRlcm1pbmFsRGlzcGxheSo+IFNlc3Npb246OnZpZXdzKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gX3ZpZXdzOwpAQCAtMzIxLDkgKzM0NiwxMyBAQCB2b2lkIFNl
c3Npb246OnJ1bigpCiB7CiAgIC8vY2hlY2sgdGhhdCBldmVyeXRoaW5nIGlzIGluIHBsYWNlIHRv
IHJ1biB0aGUgc2Vzc2lvbgogICBpZiAoX3Byb2dyYW0uaXNFbXB0eSgpKQorICB7CiAgICAgICBr
RGVidWcoKSA8PCAiU2Vzc2lvbjo6cnVuKCkgLSBwcm9ncmFtIHRvIHJ1biBub3Qgc2V0LiI7Cisg
IH0KICAgaWYgKF9hcmd1bWVudHMuaXNFbXB0eSgpKQorICB7CiAgICAgICBrRGVidWcoKSA8PCAi
U2Vzc2lvbjo6cnVuKCkgLSBubyBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHNwZWNpZmllZC4iOwor
ICB9CiAKICAgY29uc3QgaW50IENIT0lDRV9DT1VOVCA9IDM7CiAgIFFTdHJpbmcgcHJvZ3JhbXNb
Q0hPSUNFX0NPVU5UXSA9IHtfcHJvZ3JhbSxnZXRlbnYoIlNIRUxMIiksIi9iaW4vc2gifTsKQEAg
LTY0OCw2ICs2NzcsMTAgQEAgdm9pZCBTZXNzaW9uOjpzZW5kVGV4dChjb25zdCBRU3RyaW5nICZ0
ZXh0KSBjb25zdAogCiBTZXNzaW9uOjp+U2Vzc2lvbigpCiB7CisgIGlmIChfZm9yZWdyb3VuZFBy
b2Nlc3NJbmZvKQorICAgIGRlbGV0ZSBfZm9yZWdyb3VuZFByb2Nlc3NJbmZvOworICBpZiAoX3Nl
c3Npb25Qcm9jZXNzSW5mbykKKyAgICBkZWxldGUgX3Nlc3Npb25Qcm9jZXNzSW5mbzsKICAgZGVs
ZXRlIF9lbXVsYXRpb247CiAgIGRlbGV0ZSBfc2hlbGxQcm9jZXNzOwogICBkZWxldGUgX3ptb2Rl
bVByb2M7CkBAIC03MzUsNiArNzY4LDExMCBAQCBRU3RyaW5nIFNlc3Npb246OnRpdGxlKFRpdGxl
Um9sZSByb2xlKSBjb25zdAogICAgICAgICByZXR1cm4gUVN0cmluZygpOwogfQogCitQcm9jZXNz
SW5mbyogU2Vzc2lvbjo6Z2V0UHJvY2Vzc0luZm8oKQoreworICAgIFByb2Nlc3NJbmZvKiBwcm9j
ZXNzOworCisgICAgaWYgKGlzQ2hpbGRBY3RpdmUoKSkKKwlwcm9jZXNzID0gX2ZvcmVncm91bmRQ
cm9jZXNzSW5mbzsKKyAgICBlbHNlCisgICAgeworCXVwZGF0ZVNlc3Npb25Qcm9jZXNzSW5mbygp
OworCXByb2Nlc3MgPSBfc2Vzc2lvblByb2Nlc3NJbmZvOworICAgIH0KKworICAgIHJldHVybiBw
cm9jZXNzOworfQorCit2b2lkIFNlc3Npb246OnVwZGF0ZVNlc3Npb25Qcm9jZXNzSW5mbygpCit7
CisgICAgUV9BU1NFUlQoX3NoZWxsUHJvY2Vzcyk7CisgICAgaWYgKCFfc2Vzc2lvblByb2Nlc3NJ
bmZvKQorICAgICAgICBfc2Vzc2lvblByb2Nlc3NJbmZvID0gUHJvY2Vzc0luZm86Om5ld0luc3Rh
bmNlKHByb2Nlc3NJZCgpKTsKKyAgICBfc2Vzc2lvblByb2Nlc3NJbmZvLT51cGRhdGUoKTsKK30K
KworYm9vbCBTZXNzaW9uOjp1cGRhdGVGb3JlZ3JvdW5kUHJvY2Vzc0luZm8oKQoreworICAgIGJv
b2wgdmFsaWQgPSAoX2ZvcmVncm91bmRQcm9jZXNzSW5mbyAhPSAwKTsKKworICAgIC8vIGhhcyBm
b3JlZ3JvdW5kIHByb2Nlc3MgY2hhbmdlZD8KKyAgICBRX0FTU0VSVChfc2hlbGxQcm9jZXNzKTsK
KyAgICBpbnQgcGlkID0gX3NoZWxsUHJvY2Vzcy0+Zm9yZWdyb3VuZFByb2Nlc3NHcm91cCgpOwor
ICAgIGlmIChwaWQgIT0gX2ZvcmVncm91bmRQaWQpCisgICAgeworCWlmICh2YWxpZCkKKwkgICAg
ZGVsZXRlIF9mb3JlZ3JvdW5kUHJvY2Vzc0luZm87CisJX2ZvcmVncm91bmRQcm9jZXNzSW5mbyA9
IFByb2Nlc3NJbmZvOjpuZXdJbnN0YW5jZShwaWQpOworCV9mb3JlZ3JvdW5kUGlkID0gcGlkOwor
CXZhbGlkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodmFsaWQpCisgICAgeworCV9mb3JlZ3Jv
dW5kUHJvY2Vzc0luZm8tPnVwZGF0ZSgpOworCXZhbGlkID0gX2ZvcmVncm91bmRQcm9jZXNzSW5m
by0+aXNWYWxpZCgpOworICAgIH0KKworICAgIHJldHVybiB2YWxpZDsKK30KKworUVN0cmluZyBT
ZXNzaW9uOjpnZXREeW5hbWljVGl0bGUoKQoreworICAgIC8vIHVwZGF0ZSBjdXJyZW50IGRpcmVj
dG9yeSBmcm9tIHByb2Nlc3MKKyAgICBQcm9jZXNzSW5mbyogcHJvY2VzcyA9IHVwZGF0ZVdvcmtp
bmdEaXJlY3RvcnkoKTsKKworICAgIC8vIGZvcm1hdCB0YWIgdGl0bGVzIHVzaW5nIHByb2Nlc3Mg
aW5mbworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBRU3RyaW5nIHRpdGxlOworICAgIGlmICgg
cHJvY2Vzcy0+bmFtZSgmb2spID09ICJzc2giICYmIG9rICkKKyAgICB7CisgICAgICAgIFNTSFBy
b2Nlc3NJbmZvIHNzaEluZm8oKnByb2Nlc3MpOworICAgICAgICB0aXRsZSA9IHNzaEluZm8uZm9y
bWF0KHRhYlRpdGxlRm9ybWF0KFNlc3Npb246OlJlbW90ZVRhYlRpdGxlKSk7CisgICAgfQorICAg
IGVsc2UKKyAgICAgICAgdGl0bGUgPSBwcm9jZXNzLT5mb3JtYXQodGFiVGl0bGVGb3JtYXQoU2Vz
c2lvbjo6TG9jYWxUYWJUaXRsZSkpOworCisgICAgcmV0dXJuIHRpdGxlOworfQorCitLVXJsIFNl
c3Npb246OmdldFVybCgpCit7CisgICAgUVN0cmluZyBwYXRoOworICAgIAorICAgIHVwZGF0ZVNl
c3Npb25Qcm9jZXNzSW5mbygpOworICAgIGlmIChfc2Vzc2lvblByb2Nlc3NJbmZvLT5pc1ZhbGlk
KCkpCisgICAgeworCWJvb2wgb2sgPSBmYWxzZTsKKworCS8vIGNoZWNrIGlmIGZvcmVncm91bmQg
cHJvY2VzcyBpcyBib29rbWFyay1hYmxlCisJaWYgKGlzQ2hpbGRBY3RpdmUoKSkKKwl7CisJICAg
IC8vIGZvciByZW1vdGUgY29ubmVjdGlvbnMsIHNhdmUgdGhlIHVzZXIgYW5kIGhvc3QKKwkgICAg
Ly8gYnJpZ2h0IGlkZWFzIHRvIGdldCB0aGUgZGlyZWN0b3J5IGF0IHRoZSBvdGhlciBlbmQgYXJl
IHdlbGNvbWUgOikKKwkgICAgaWYgKF9mb3JlZ3JvdW5kUHJvY2Vzc0luZm8tPm5hbWUoJm9rKSA9
PSAic3NoIiAmJiBvaykKKwkgICAgeworCSAJU1NIUHJvY2Vzc0luZm8gc3NoSW5mbygqX2ZvcmVn
cm91bmRQcm9jZXNzSW5mbyk7CisJCXBhdGggPSAic3NoOi8vIiArIHNzaEluZm8udXNlck5hbWUo
KSArICdAJyArIHNzaEluZm8uaG9zdCgpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlw
YXRoID0gX2ZvcmVncm91bmRQcm9jZXNzSW5mby0+Y3VycmVudERpcigmb2spOworCQlpZiAoIW9r
KQorCQkgICAgcGF0aC5jbGVhcigpOworCSAgICB9CisJfQorCWVsc2UgLy8gb3RoZXJ3aXNlIHVz
ZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgc2hlbGwgcHJvY2VzcworCXsK
KwkgICAgcGF0aCA9IF9zZXNzaW9uUHJvY2Vzc0luZm8tPmN1cnJlbnREaXIoJm9rKTsKKyAgICAg
ICAgICAgIGlmICghb2spCisJCXBhdGguY2xlYXIoKTsKKwl9CisgICAgfQorCisgICAgcmV0dXJu
IEtVcmwocGF0aCk7Cit9CisKIHZvaWQgU2Vzc2lvbjo6c2V0SWNvbk5hbWUoY29uc3QgUVN0cmlu
ZyYgaWNvbk5hbWUpCiB7CiAgICAgaWYgKCBpY29uTmFtZSAhPSBfaWNvbk5hbWUgKQpAQCAtOTcw
LDE1ICsxMTA3LDMyIEBAIHZvaWQgU2Vzc2lvbjo6c2V0U2l6ZShjb25zdCBRU2l6ZSYgc2l6ZSkK
IAogICBlbWl0IHJlc2l6ZVJlcXVlc3Qoc2l6ZSk7CiB9Ci1pbnQgU2Vzc2lvbjo6Zm9yZWdyb3Vu
ZFByb2Nlc3NJZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIF9zaGVsbFByb2Nlc3MtPmZvcmVncm91
bmRQcm9jZXNzR3JvdXAoKTsKLX0KIGludCBTZXNzaW9uOjpwcm9jZXNzSWQoKSBjb25zdAogewog
ICAgIHJldHVybiBfc2hlbGxQcm9jZXNzLT5waWQoKTsKIH0KIAorYm9vbCBTZXNzaW9uOjppc0No
aWxkQWN0aXZlKCkKK3sKKyAgICAvLyBmb3JlZ3JvdW5kIHByb2Nlc3MgaW5mbyBpcyBhbHdheXMg
dXBkYXRlZCBhZnRlciB0aGlzLi4uCisgICAgcmV0dXJuIHVwZGF0ZUZvcmVncm91bmRQcm9jZXNz
SW5mbygpICYmIChwcm9jZXNzSWQoKSAhPSBfZm9yZWdyb3VuZFBpZCk7Cit9CisKK1FTdHJpbmcg
U2Vzc2lvbjo6Y2hpbGROYW1lKCkKK3sKKyAgICBRU3RyaW5nIG5hbWU7CisKKyAgICBpZiAodXBk
YXRlRm9yZWdyb3VuZFByb2Nlc3NJbmZvKCkpIAorICAgIHsKKwlib29sIG9rID0gZmFsc2U7CisJ
bmFtZSA9IF9mb3JlZ3JvdW5kUHJvY2Vzc0luZm8tPm5hbWUoJm9rKTsKKwlpZiAoIW9rKQorCSAg
ICBuYW1lLmNsZWFyKCk7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKIFNlc3Npb25H
cm91cDo6U2Vzc2lvbkdyb3VwKFFPYmplY3QqIHBhcmVudCkKICAgICA6IFFPYmplY3QocGFyZW50
KSwgX21hc3Rlck1vZGUoMCkKIHsKZGlmZiAtLWdpdCBhL3NyYy9TZXNzaW9uLmggYi9zcmMvU2Vz
c2lvbi5oCmluZGV4IDJhMDkyMjIuLmYxMGM1M2QgMTAwNjQ0Ci0tLSBhL3NyYy9TZXNzaW9uLmgK
KysrIGIvc3JjL1Nlc3Npb24uaApAQCAtMzYsMTIgKzM2LDE0IEBACiAjaW5jbHVkZSAiSGlzdG9y
eS5oIgogCiBjbGFzcyBLUHJvY2VzczsKK2NsYXNzIEtVcmw7CiAKIG5hbWVzcGFjZSBLb25zb2xl
CiB7CiAKIGNsYXNzIEVtdWxhdGlvbjsKIGNsYXNzIFB0eTsKK2NsYXNzIFByb2Nlc3NJbmZvOwog
Y2xhc3MgVGVybWluYWxEaXNwbGF5OwogY2xhc3MgWk1vZGVtRGlhbG9nOwogCkBAIC0yMDEsNiAr
MjAzLDExIEBAIHB1YmxpYzoKICAgdm9pZCBzZXRJbml0aWFsV29ya2luZ0RpcmVjdG9yeSggY29u
c3QgUVN0cmluZyYgZGlyICk7CiAKICAgLyoqCisgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZGly
ZWN0b3J5IG9mIHRoZSBmb3JlZ3JvdW5kIHByb2Nlc3MgaW4gdGhlIHNlc3Npb24KKyAgICovCisg
IFFTdHJpbmcgY3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKKworICAvKioKICAgICogU2V0cyB0
aGUgdHlwZSBvZiBoaXN0b3J5IHN0b3JlIHVzZWQgYnkgdGhpcyBzZXNzaW9uLgogICAgKiBMaW5l
cyBvZiBvdXRwdXQgcHJvZHVjZWQgYnkgdGhlIHRlcm1pbmFsIGFyZSBhZGRlZAogICAgKiB0byB0
aGUgaGlzdG9yeSBzdG9yZS4gIFRoZSB0eXBlIG9mIGhpc3Rvcnkgc3RvcmUKQEAgLTI3NCwxMiAr
MjgxLDE3IEBAIHB1YmxpYzoKICAgUVN0cmluZyB0aXRsZShUaXRsZVJvbGUgcm9sZSkgY29uc3Q7
CiAgIC8qKiBDb252ZW5pZW5jZSBtZXRob2QgdXNlZCB0byByZWFkIHRoZSBuYW1lIHByb3BlcnR5
LiAgUmV0dXJucyB0aXRsZShTZXNzaW9uOjpOYW1lUm9sZSkuICovCiAgIFFTdHJpbmcgbmFtZVRp
dGxlKCkgY29uc3QgeyByZXR1cm4gdGl0bGUoU2Vzc2lvbjo6TmFtZVJvbGUpOyB9CisgIC8qKiBS
ZXR1cm5zIGEgdGl0bGUgZ2VuZXJhdGVkIGZyb20gdGFiIGZvcm1hdCBhbmQgcHJvY2VzcyBpbmZv
cm1hdGlvbi4gKi8KKyAgUVN0cmluZyBnZXREeW5hbWljVGl0bGUoKTsKIAogICAvKiogU2V0cyB0
aGUgbmFtZSBvZiB0aGUgaWNvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uLiAqLwogICB2
b2lkIHNldEljb25OYW1lKGNvbnN0IFFTdHJpbmcmIGljb25OYW1lKTsKICAgLyoqIFJldHVybnMg
dGhlIG5hbWUgb2YgdGhlIGljb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4gKi8KICAg
UVN0cmluZyBpY29uTmFtZSgpIGNvbnN0OwogCisgIC8qKiBSZXR1cm4gVVJMIGZvciB0aGUgc2Vz
c2lvbi4gKi8KKyAgS1VybCBnZXRVcmwoKTsKKwogICAvKiogU2V0cyB0aGUgdGV4dCBvZiB0aGUg
aWNvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uLiAqLwogICB2b2lkIHNldEljb25UZXh0
KGNvbnN0IFFTdHJpbmcmIGljb25UZXh0KTsKICAgLyoqIFJldHVybnMgdGhlIHRleHQgb2YgdGhl
IGljb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4gKi8KQEAgLTMxNywxMiArMzI5LDEx
IEBAIHB1YmxpYzoKICAgICovCiAgIGludCBwcm9jZXNzSWQoKSBjb25zdDsKIAotICAvKioKLSAg
ICogUmV0dXJucyB0aGUgcHJvY2VzcyBpZCBvZiB0aGUgdGVybWluYWwncyBmb3JlZ3JvdW5kIHBy
b2Nlc3MuCi0gICAqIFRoaXMgaXMgaW5pdGlhbGx5IHRoZSBzYW1lIGFzIHByb2Nlc3NJZCgpIGJ1
dCBjYW4gY2hhbmdlCi0gICAqIGFzIHRoZSB1c2VyIHN0YXJ0cyBvdGhlciBwcm9ncmFtcyBpbnNp
ZGUgdGhlIHRlcm1pbmFsLgotICAgKi8KLSAgaW50IGZvcmVncm91bmRQcm9jZXNzSWQoKSBjb25z
dDsKKyAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBoYXMgc3RhcnRlZCBhIHByb2dyYW0g
aW4gdGhlIHNlc3Npb24uICovCisgIGJvb2wgaXNDaGlsZEFjdGl2ZSgpOworCisgIC8qKiBSZXR1
cm5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZvcmVncm91bmQgcHJvY2Vzcy4gKi8KKyAgUVN0
cmluZyBjaGlsZE5hbWUoKTsKIAogICAvKiogUmV0dXJucyB0aGUgdGVybWluYWwgc2Vzc2lvbidz
IHdpbmRvdyBzaXplIGluIGxpbmVzIGFuZCBjb2x1bW5zLiAqLwogICBRU2l6ZSBzaXplKCk7CkBA
IC00NzQsMTMgKzQ4NSwyMSBAQCBzaWduYWxzOgogICAgKi8KICAgdm9pZCBwcm9maWxlQ2hhbmdl
Q29tbWFuZFJlY2VpdmVkKGNvbnN0IFFTdHJpbmcmIHRleHQpOwogCi0gLyoqCi0gICogRW1pdHRl
ZCB3aGVuIHRoZSBmbG93IGNvbnRyb2wgc3RhdGUgY2hhbmdlcy4KLSAgKgotICAqIEBwYXJhbSBl
bmFibGVkIFRydWUgaWYgZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgb3IgZmFsc2Ugb3RoZXJ3aXNl
LgotICAqLworICAvKioKKyAgICogRW1pdHRlZCB3aGVuIHRoZSBmbG93IGNvbnRyb2wgc3RhdGUg
Y2hhbmdlcy4KKyAgICoKKyAgICogQHBhcmFtIGVuYWJsZWQgVHJ1ZSBpZiBmbG93IGNvbnRyb2wg
aXMgZW5hYmxlZCBvciBmYWxzZSBvdGhlcndpc2UuCisgICAqLwogICB2b2lkIGZsb3dDb250cm9s
RW5hYmxlZENoYW5nZWQoYm9vbCBlbmFibGVkKTsKIAorICAvKioKKyAgICogRW1pdHRlZCB3aGVu
IHRoZSBzZXNzaW9uIGRldGVjdHMgdGhhdCB0aGUgdXNlciBjaGFuZ2VkIHRoZSBjdXJyZW50Cisg
ICAqIGRpcmVjdG9yeSBpbiB0aGUgZm9yZWdyb3VuZCBwcm9jZXNzLgorICAgKgorICAgKiBAcGFy
YW0gZGlyIFRoZSBuZXcgZGlyZWN0b3J5LgorICAgKi8KKyAgdm9pZCBjdXJyZW50RGlyZWN0b3J5
Q2hhbmdlZChjb25zdCBRU3RyaW5nJiBkaXIpOworCiBwcml2YXRlIHNsb3RzOgogICB2b2lkIGRv
bmUoaW50KTsKIApAQCAtNTE1LDYgKzUzNCwxMCBAQCBwcml2YXRlOgogICAvLyBjaGVja3MgdGhh
dCB0aGUgYmluYXJ5ICdwcm9ncmFtJyBpcyBhdmFpbGFibGUgYW5kIGNhbiBiZSBleGVjdXRlZAog
ICAvLyByZXR1cm5zIHRoZSBiaW5hcnkgbmFtZSBpZiBhdmFpbGFibGUgb3IgYW4gZW1wdHkgc3Ry
aW5nIG90aGVyd2lzZQogICBRU3RyaW5nIGNoZWNrUHJvZ3JhbShjb25zdCBRU3RyaW5nJiBwcm9n
cmFtKSBjb25zdDsKKyAgUHJvY2Vzc0luZm8qIGdldFByb2Nlc3NJbmZvKCk7CisgIHZvaWQgdXBk
YXRlU2Vzc2lvblByb2Nlc3NJbmZvKCk7CisgIGJvb2wgdXBkYXRlRm9yZWdyb3VuZFByb2Nlc3NJ
bmZvKCk7CisgIFByb2Nlc3NJbmZvKiB1cGRhdGVXb3JraW5nRGlyZWN0b3J5KCk7CiAKICAgaW50
ICAgICAgICAgICAgX3VuaXF1ZUlkZW50aWZpZXI7CiAKQEAgLTU1Myw2ICs1NzYsMTEgQEAgcHJp
dmF0ZToKICAgaW50ICAgICAgICAgICAgX3Nlc3Npb25JZDsKIAogICBRU3RyaW5nICAgICAgICBf
aW5pdGlhbFdvcmtpbmdEaXI7CisgIFFTdHJpbmcgICAgICAgIF9jdXJyZW50V29ya2luZ0RpcjsK
KworICBQcm9jZXNzSW5mbyogICBfc2Vzc2lvblByb2Nlc3NJbmZvOworICBQcm9jZXNzSW5mbyog
ICBfZm9yZWdyb3VuZFByb2Nlc3NJbmZvOworICBpbnQgICAgICAgICAgICBfZm9yZWdyb3VuZFBp
ZDsKIAogICAvLyBaTW9kZW0KICAgYm9vbCAgICAgICAgICAgX3ptb2RlbUJ1c3k7CmRpZmYgLS1n
aXQgYS9zcmMvU2Vzc2lvbkNvbnRyb2xsZXIuY3BwIGIvc3JjL1Nlc3Npb25Db250cm9sbGVyLmNw
cAppbmRleCBjMzdhZjdhLi43NTEyMjQ1IDEwMDY0NAotLS0gYS9zcmMvU2Vzc2lvbkNvbnRyb2xs
ZXIuY3BwCisrKyBiL3NyYy9TZXNzaW9uQ29udHJvbGxlci5jcHAKQEAgLTUwLDcgKzUwLDYgQEAK
ICNpbmNsdWRlICJJbmNyZW1lbnRhbFNlYXJjaEJhci5oIgogI2luY2x1ZGUgIlNjcmVlbldpbmRv
dy5oIgogI2luY2x1ZGUgIlNlc3Npb24uaCIKLSNpbmNsdWRlICJQcm9jZXNzSW5mby5oIgogI2lu
Y2x1ZGUgIlByb2ZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiVGVybWluYWxEaXNwbGF5LmgiCiAjaW5j
bHVkZSAiU2Vzc2lvbk1hbmFnZXIuaCIKQEAgLTEyOCwxMiArMTI3LDE2IEBAIFNlc3Npb25Db250
cm9sbGVyOjpTZXNzaW9uQ29udHJvbGxlcihTZXNzaW9uKiBzZXNzaW9uICwgVGVybWluYWxEaXNw
bGF5KiB2aWV3LCBRCiAgICAgLy8gbGlzdGVuIHRvIHRpdGxlIGFuZCBpY29uIGNoYW5nZXMKICAg
ICBjb25uZWN0KCBfc2Vzc2lvbiAsIFNJR05BTCh0aXRsZUNoYW5nZWQoKSkgLCB0aGlzICwgU0xP
VChzZXNzaW9uVGl0bGVDaGFuZ2VkKCkpICk7CiAKLQkvLyBsaXN0ZW4gZm9yIGNvbG9yIGNoYW5n
ZXMKLQljb25uZWN0KCBfc2Vzc2lvbiAsIFNJR05BTChjaGFuZ2VCYWNrZ3JvdW5kQ29sb3JSZXF1
ZXN0KFFDb2xvcikpICwgX3ZpZXcgLCBTTE9UKHNldEJhY2tncm91bmRDb2xvcihRQ29sb3IpKSAp
OwotCWNvbm5lY3QoIF9zZXNzaW9uICwgU0lHTkFMKGNoYW5nZUZvcmVncm91bmRDb2xvclJlcXVl
c3QoUUNvbG9yKSkgLCBfdmlldyAsIFNMT1Qoc2V0Rm9yZWdyb3VuZENvbG9yKFFDb2xvcikpICk7
CisgICAgLy8gbGlzdGVuIHRvIGRpcmVjdG9yeSBjaGFuZ2VzCisgICAgY29ubmVjdCggX3Nlc3Np
b24gLCBTSUdOQUwoY3VycmVudERpcmVjdG9yeUNoYW5nZWQoY29uc3QgUVN0cmluZyYpKSAsIHRo
aXMgLAorCSAgICAgU0xPVChzZXNzaW9uQ3VycmVudERpcmVjdG9yeUNoYW5nZWQoY29uc3QgUVN0
cmluZyYpKSApOwogCi0JLy8gdXBkYXRlIHRoZSB0aXRsZSB3aGVuIHRoZSBzZXNzaW9uIHN0YXJ0
cwotCWNvbm5lY3QoIF9zZXNzaW9uICwgU0lHTkFMKHN0YXJ0ZWQoKSkgLCB0aGlzICwgU0xPVChz
bmFwc2hvdCgpKSApOyAKKyAgICAvLyBsaXN0ZW4gZm9yIGNvbG9yIGNoYW5nZXMKKyAgICBjb25u
ZWN0KCBfc2Vzc2lvbiAsIFNJR05BTChjaGFuZ2VCYWNrZ3JvdW5kQ29sb3JSZXF1ZXN0KFFDb2xv
cikpICwgX3ZpZXcgLCBTTE9UKHNldEJhY2tncm91bmRDb2xvcihRQ29sb3IpKSApOworICAgIGNv
bm5lY3QoIF9zZXNzaW9uICwgU0lHTkFMKGNoYW5nZUZvcmVncm91bmRDb2xvclJlcXVlc3QoUUNv
bG9yKSkgLCBfdmlldyAsIFNMT1Qoc2V0Rm9yZWdyb3VuZENvbG9yKFFDb2xvcikpICk7CisKKyAg
ICAvLyB1cGRhdGUgdGhlIHRpdGxlIHdoZW4gdGhlIHNlc3Npb24gc3RhcnRzCisgICAgY29ubmVj
dCggX3Nlc3Npb24gLCBTSUdOQUwoc3RhcnRlZCgpKSAsIHRoaXMgLCBTTE9UKHNuYXBzaG90KCkp
ICk7IAogCiAgICAgLy8gbGlzdGVuIGZvciBvdXRwdXQgY2hhbmdlcyB0byBzZXQgYWN0aXZpdHkg
ZmxhZwogICAgIGNvbm5lY3QoIF9zZXNzaW9uLT5lbXVsYXRpb24oKSAsIFNJR05BTChvdXRwdXRD
aGFuZ2VkKCkpICwgdGhpcyAsCkBAIC0xNDEsOCArMTQ0LDggQEAgU2Vzc2lvbkNvbnRyb2xsZXI6
OlNlc3Npb25Db250cm9sbGVyKFNlc3Npb24qIHNlc3Npb24gLCBUZXJtaW5hbERpc3BsYXkqIHZp
ZXcsIFEKIAkKICAgICAvLyBsaXN0ZW4gZm9yIGZsb3cgY29udHJvbCBzdGF0dXMgY2hhbmdlcwog
ICAgIGNvbm5lY3QoIF9zZXNzaW9uICwgU0lHTkFMKGZsb3dDb250cm9sRW5hYmxlZENoYW5nZWQo
Ym9vbCkpICwgX3ZpZXcgLAotCQlTTE9UKHNldEZsb3dDb250cm9sV2FybmluZ0VuYWJsZWQoYm9v
bCkpICk7Ci0JX3ZpZXctPnNldEZsb3dDb250cm9sV2FybmluZ0VuYWJsZWQoX3Nlc3Npb24tPmZs
b3dDb250cm9sRW5hYmxlZCgpKTsKKwkgICAgIFNMT1Qoc2V0Rmxvd0NvbnRyb2xXYXJuaW5nRW5h
YmxlZChib29sKSkgKTsKKyAgICBfdmlldy0+c2V0Rmxvd0NvbnRyb2xXYXJuaW5nRW5hYmxlZChf
c2Vzc2lvbi0+Zmxvd0NvbnRyb2xFbmFibGVkKCkpOwogCiAgICAgLy8gdGFrZSBhIHNuYXBzaG90
IG9mIHRoZSBzZXNzaW9uIHN0YXRlIGV2ZXJ5IHNvIG9mdGVuIHdoZW4KICAgICAvLyB1c2VyIGFj
dGl2aXR5IG9jY3VycwpAQCAtMTk5LDQ3ICsyMDIsMTIgQEAgdm9pZCBTZXNzaW9uQ29udHJvbGxl
cjo6c25hcHNob3QoKQogewogICAgIFFfQVNTRVJUKCBfc2Vzc2lvbiAhPSAwICk7CiAKLSAgICBQ
cm9jZXNzSW5mbyogcHJvY2VzcyA9IDA7Ci0gICAgUHJvY2Vzc0luZm8qIHNuYXBzaG90ID0gUHJv
Y2Vzc0luZm86Om5ld0luc3RhbmNlKF9zZXNzaW9uLT5wcm9jZXNzSWQoKSk7Ci0gICAgc25hcHNo
b3QtPnVwZGF0ZSgpOwotCi0gICAgLy8gdXNlIGZvcmVncm91bmQgcHJvY2VzcyBpbmZvcm1hdGlv
biBpZiBhdmFpbGFibGUKLSAgICAvLyBmYWxsYmFjayB0byBzZXNzaW9uIHByb2Nlc3Mgb3RoZXJ3
aXNlCi0gICAgaW50IHBpZCA9IF9zZXNzaW9uLT5mb3JlZ3JvdW5kUHJvY2Vzc0lkKCk7IC8vc25h
cHNob3QtPmZvcmVncm91bmRQaWQoJm9rKTsKLSAgICBpZiAoIHBpZCAhPSAwICkKLSAgICB7Ci0g
ICAgICAgcHJvY2VzcyA9IFByb2Nlc3NJbmZvOjpuZXdJbnN0YW5jZShwaWQpOwotICAgICAgIHBy
b2Nlc3MtPnVwZGF0ZSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgcHJvY2VzcyA9IHNuYXBz
aG90OwotCi0gICAgYm9vbCBvayA9IGZhbHNlOwotCi0gICAgLy8gZm9ybWF0IHRhYiB0aXRsZXMg
dXNpbmcgcHJvY2VzcyBpbmZvCi0gICAgUVN0cmluZyB0aXRsZTsKLSAgICBpZiAoIHByb2Nlc3Mt
Pm5hbWUoJm9rKSA9PSAic3NoIiAmJiBvayApCi0gICAgewotICAgICAgICBTU0hQcm9jZXNzSW5m
byBzc2hJbmZvKCpwcm9jZXNzKTsKLSAgICAgICAgdGl0bGUgPSBzc2hJbmZvLmZvcm1hdChfc2Vz
c2lvbi0+dGFiVGl0bGVGb3JtYXQoU2Vzc2lvbjo6UmVtb3RlVGFiVGl0bGUpKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgICAgICB0aXRsZSA9IHByb2Nlc3MtPmZvcm1hdChfc2Vzc2lvbi0+dGFiVGl0
bGVGb3JtYXQoU2Vzc2lvbjo6TG9jYWxUYWJUaXRsZSkgKSA7Ci0KLQotICAgIGlmICggc25hcHNo
b3QgIT0gcHJvY2VzcyApCi0gICAgewotICAgICAgICBkZWxldGUgc25hcHNob3Q7Ci0gICAgICAg
IGRlbGV0ZSBwcm9jZXNzOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGRlbGV0ZSBzbmFwc2hv
dDsKLQotCXRpdGxlID0gdGl0bGUuc2ltcGxpZmllZCgpOworICAgIFFTdHJpbmcgdGl0bGUgPSBf
c2Vzc2lvbi0+Z2V0RHluYW1pY1RpdGxlKCk7ICAgIAorICAgIHRpdGxlICAgICAgICAgPSB0aXRs
ZS5zaW1wbGlmaWVkKCk7CiAKLQkvLyBjcnVkZSBpbmRpY2F0b3Igd2hlbiB0aGUgc2Vzc2lvbiBp
cyBicm9hZGNhc3RpbmcgdG8gb3RoZXJzCi0JaWYgKF9jb3B5VG9Hcm91cCAmJiBfY29weVRvR3Jv
dXAtPnNlc3Npb25zKCkuY291bnQoKSA+IDEpCi0JCXRpdGxlLmFwcGVuZCgnKicpOworICAgIC8v
IGNydWRlIGluZGljYXRvciB3aGVuIHRoZSBzZXNzaW9uIGlzIGJyb2FkY2FzdGluZyB0byBvdGhl
cnMKKyAgICBpZiAoX2NvcHlUb0dyb3VwICYmIF9jb3B5VG9Hcm91cC0+c2Vzc2lvbnMoKS5jb3Vu
dCgpID4gMSkKKyAgICAgICAgdGl0bGUuYXBwZW5kKCcqJyk7CiAKICAgICAvLyBhcHBseSBuZXcg
dGl0bGUKICAgICBpZiAoICF0aXRsZS5pc0VtcHR5KCkgKQpAQCAtMjUwLDY5ICsyMTgsMTcgQEAg
dm9pZCBTZXNzaW9uQ29udHJvbGxlcjo6c25hcHNob3QoKQogCiBRU3RyaW5nIFNlc3Npb25Db250
cm9sbGVyOjpjdXJyZW50RGlyKCkgY29uc3QKIHsKLSAgICBQcm9jZXNzSW5mbyogaW5mbyA9IFBy
b2Nlc3NJbmZvOjpuZXdJbnN0YW5jZShfc2Vzc2lvbi0+cHJvY2Vzc0lkKCkpOwotICAgIGluZm8t
PnVwZGF0ZSgpOwotCi0gICAgYm9vbCBvayA9IGZhbHNlOwotICAgIFFTdHJpbmcgcGF0aCA9IGlu
Zm8tPmN1cnJlbnREaXIoJm9rKTsKLQotICAgIGRlbGV0ZSBpbmZvOwotCi0gICAgaWYgKCBvayAp
Ci0gICAgICAgIHJldHVybiBwYXRoOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFFTdHJpbmco
KTsKKyAgICByZXR1cm4gX3Nlc3Npb24tPmN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CiB9CiAK
IEtVcmwgU2Vzc2lvbkNvbnRyb2xsZXI6OnVybCgpIGNvbnN0CiB7Ci0gICAgUHJvY2Vzc0luZm8q
IGluZm8gPSBQcm9jZXNzSW5mbzo6bmV3SW5zdGFuY2UoX3Nlc3Npb24tPnByb2Nlc3NJZCgpKTsK
LSAgICBpbmZvLT51cGRhdGUoKTsKLQotICAgIFFTdHJpbmcgcGF0aDsKLSAgICBpZiAoIGluZm8t
PmlzVmFsaWQoKSApCi0gICAgewotICAgICAgICBib29sIG9rID0gZmFsc2U7Ci0KLSAgICAgICAg
Ly8gY2hlY2sgaWYgZm9yZWdyb3VuZCBwcm9jZXNzIGlzIGJvb2ttYXJrLWFibGUKLSAgICAgICAg
aW50IHBpZCA9IF9zZXNzaW9uLT5mb3JlZ3JvdW5kUHJvY2Vzc0lkKCk7Ci0gICAgICAgIGlmICgg
cGlkICE9IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgICBQcm9jZXNzSW5mbyogZm9yZWdyb3Vu
ZEluZm8gPSBQcm9jZXNzSW5mbzo6bmV3SW5zdGFuY2UocGlkKTsKLSAgICAgICAgICAgIGZvcmVn
cm91bmRJbmZvLT51cGRhdGUoKTsKLQotICAgICAgICAgICAgLy8gZm9yIHJlbW90ZSBjb25uZWN0
aW9ucywgc2F2ZSB0aGUgdXNlciBhbmQgaG9zdAotICAgICAgICAgICAgLy8gYnJpZ2h0IGlkZWFz
IHRvIGdldCB0aGUgZGlyZWN0b3J5IGF0IHRoZSBvdGhlciBlbmQgYXJlIHdlbGNvbWUgOikKLSAg
ICAgICAgICAgIGlmICggZm9yZWdyb3VuZEluZm8tPm5hbWUoJm9rKSA9PSAic3NoIiAmJiBvayAp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU1NIUHJvY2Vzc0luZm8gc3NoSW5mbygq
Zm9yZWdyb3VuZEluZm8pOwotICAgICAgICAgICAgICAgIHBhdGggPSAic3NoOi8vIiArIHNzaElu
Zm8udXNlck5hbWUoKSArICdAJyArIHNzaEluZm8uaG9zdCgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhdGggPSBmb3Jl
Z3JvdW5kSW5mby0+Y3VycmVudERpcigmb2spOwotCi0gICAgICAgICAgICAgICAgaWYgKCFvaykK
LSAgICAgICAgICAgICAgICAgICAgcGF0aC5jbGVhcigpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBkZWxldGUgZm9yZWdyb3VuZEluZm87Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAv
LyBvdGhlcndpc2UgdXNlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoZSBzaGVs
bCBwcm9jZXNzCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhdGggPSBpbmZvLT5jdXJyZW50RGly
KCZvayk7Ci0gICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgIHBhdGguY2xlYXIo
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBpbmZvOwotICAgIHJldHVybiBLVXJs
KCBwYXRoICk7CisgICAgcmV0dXJuIF9zZXNzaW9uLT5nZXRVcmwoKTsKIH0KIAogdm9pZCBTZXNz
aW9uQ29udHJvbGxlcjo6cmVuYW1lKCkKIHsKLQlyZW5hbWVTZXNzaW9uKCk7CisgICAgcmVuYW1l
U2Vzc2lvbigpOwogfQogCiB2b2lkIFNlc3Npb25Db250cm9sbGVyOjpvcGVuVXJsKCBjb25zdCBL
VXJsJiB1cmwgKQpAQCAtNTgwLDExICs0OTYsNiBAQCB2b2lkIFNlc3Npb25Db250cm9sbGVyOjpz
ZXR1cEFjdGlvbnMoKQogICAgIF9jaGFuZ2VQcm9maWxlTWVudSA9IG5ldyBLTWVudShpMThuKCJD
aGFuZ2UgUHJvZmlsZSIpLF92aWV3KTsKICAgICBjb2xsZWN0aW9uLT5hZGRBY3Rpb24oImNoYW5n
ZS1wcm9maWxlIixfY2hhbmdlUHJvZmlsZU1lbnUtPm1lbnVBY3Rpb24oKSk7CiAgICAgY29ubmVj
dCggX2NoYW5nZVByb2ZpbGVNZW51ICwgU0lHTkFMKGFib3V0VG9TaG93KCkpICwgdGhpcyAsIFNM
T1QocHJlcGFyZUNoYW5nZVByb2ZpbGVNZW51KCkpICk7Ci0KLSAgICAvLyBkZWJ1Z2dpbmcgdG9v
bHMKLSAgICAvL2FjdGlvbiA9IGNvbGxlY3Rpb24tPmFkZEFjdGlvbigiZGVidWctcHJvY2VzcyIp
OwotICAgIC8vYWN0aW9uLT5zZXRUZXh0KCAiR2V0IEZvcmVncm91bmQgUHJvY2VzcyIgKTsKLSAg
ICAvL2Nvbm5lY3QoIGFjdGlvbiAsIFNJR05BTCh0cmlnZ2VyZWQoKSkgLCB0aGlzICwgU0xPVChk
ZWJ1Z1Byb2Nlc3MoKSkgKTsKIH0KIHZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6OmNoYW5nZVByb2Zp
bGUoUHJvZmlsZTo6UHRyIHByb2ZpbGUpCiB7CkBAIC02MTAsNDAgKzUyMSw2IEBAIHZvaWQgU2Vz
c2lvbkNvbnRyb2xsZXI6OmNoYW5nZUNvZGVjKFFUZXh0Q29kZWMqIGNvZGVjKQogewogICAgIF9z
ZXNzaW9uLT5zZXRDb2RlYyhjb2RlYyk7CiB9Ci12b2lkIFNlc3Npb25Db250cm9sbGVyOjpkZWJ1
Z1Byb2Nlc3MoKQotewotICAgIC8vIHRlc3RpbmcgZmFjaWxpdHkgdG8gcmV0cmlldmUgcHJvY2Vz
cyBpbmZvcm1hdGlvbiBhYm91dAotICAgIC8vIGN1cnJlbnRseSBhY3RpdmUgcHJvY2VzcyBpbiB0
aGUgc2hlbGwKLSAgICBQcm9jZXNzSW5mbyogc2Vzc2lvblByb2Nlc3MgPSBQcm9jZXNzSW5mbzo6
bmV3SW5zdGFuY2UoX3Nlc3Npb24tPnByb2Nlc3NJZCgpKTsKLSAgICBzZXNzaW9uUHJvY2Vzcy0+
dXBkYXRlKCk7Ci0KLSAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgaW50IGZwaWQgPSBzZXNzaW9u
UHJvY2Vzcy0+Zm9yZWdyb3VuZFBpZCgmb2spOwotCi0gICAgaWYgKCBvayApCi0gICAgewotICAg
ICAgICBQcm9jZXNzSW5mbyogZnAgPSBQcm9jZXNzSW5mbzo6bmV3SW5zdGFuY2UoZnBpZCk7Ci0g
ICAgICAgIGZwLT51cGRhdGUoKTsKLQotICAgICAgICBRU3RyaW5nIG5hbWUgPSBmcC0+bmFtZSgm
b2spOwotCi0gICAgICAgIGlmICggb2sgKQotICAgICAgICB7Ci0gICAgICAgICAgICBfc2Vzc2lv
bi0+c2V0VGl0bGUoU2Vzc2lvbjo6RGlzcGxheWVkVGl0bGVSb2xlLG5hbWUpOwotICAgICAgICAg
ICAgc2Vzc2lvblRpdGxlQ2hhbmdlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgUVN0cmluZyBj
dXJyZW50RGlyID0gZnAtPmN1cnJlbnREaXIoJm9rKTsKLQotICAgICAgICBpZiAoIG9rICkKLSAg
ICAgICAgICAgIGtEZWJ1ZygxMjExKSA8PCBjdXJyZW50RGlyOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBrRGVidWcoMTIxMSkgPDwgImNvdWxkIG5vdCByZWFkIGN1cnJlbnQgZGlyIG9mIGZv
cmVncm91bmQgcHJvY2VzcyI7Ci0KLSAgICAgICAgZGVsZXRlIGZwOwotICAgIH0KLSAgICBkZWxl
dGUgc2Vzc2lvblByb2Nlc3M7Ci19CiAKIHZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6OmVkaXRDdXJy
ZW50UHJvZmlsZSgpCiB7CkBAIC02ODcsMTMgKzU2NCw5IEBAIHZvaWQgU2Vzc2lvbkNvbnRyb2xs
ZXI6OnNhdmVTZXNzaW9uKCkKIH0KIGJvb2wgU2Vzc2lvbkNvbnRyb2xsZXI6OmNvbmZpcm1DbG9z
ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKF9zZXNzaW9uLT5mb3JlZ3JvdW5kUHJvY2Vzc0lkKCkgIT0g
X3Nlc3Npb24tPnByb2Nlc3NJZCgpKQorICAgIGlmIChfc2Vzc2lvbi0+aXNDaGlsZEFjdGl2ZSgp
KQogICAgIHsKLSAgICAgICAgUHJvY2Vzc0luZm8qIGZvcmVncm91bmRJbmZvID0gUHJvY2Vzc0lu
Zm86Om5ld0luc3RhbmNlKF9zZXNzaW9uLT5mb3JlZ3JvdW5kUHJvY2Vzc0lkKCkpOwotICAgICAg
ICBmb3JlZ3JvdW5kSW5mby0+dXBkYXRlKCk7Ci0gICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAg
ICAgICAgUVN0cmluZyB0aXRsZSA9IGZvcmVncm91bmRJbmZvLT5uYW1lKCZvayk7Ci0gICAgICAg
IGRlbGV0ZSBmb3JlZ3JvdW5kSW5mbzsKKyAgICAgICAgUVN0cmluZyB0aXRsZSA9IF9zZXNzaW9u
LT5jaGlsZE5hbWUoKTsKICAgICAgIAogICAgICAgICAvLyBoYXJkIGNvZGVkIGZvciBub3cuICBJ
biBmdXR1cmUgbWFrZSBpdCBwb3NzaWJsZSBmb3IgdGhlIHVzZXIgdG8gc3BlY2lmeSB3aGljaCBw
cm9ncmFtcwogICAgICAgICAvLyBhcmUgaWdub3JlZCB3aGVuIGNvbnNpZGVyaW5nIHdoZXRoZXIg
dG8gZGlzcGxheSBhIGNvbmZpcm1hdGlvbgpAQCAtNzAzLDEyICs1NzYsMTIgQEAgYm9vbCBTZXNz
aW9uQ29udHJvbGxlcjo6Y29uZmlybUNsb3NlKCkgY29uc3QKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgICAgIFFTdHJpbmcgcXVlc3Rpb247Ci0gICAgICAgIGlmIChvaykKLSAgICAg
ICAgICAgIHF1ZXN0aW9uID0gaTE4bigiVGhlIHByb2dyYW0gJyUxJyBpcyBjdXJyZW50bHkgcnVu
bmluZyBpbiB0aGlzIHNlc3Npb24uIiAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAg
QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIGl0PyIsdGl0bGUpOwotICAgICAgICBlbHNl
CisgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBxdWVzdGlvbiA9IGkx
OG4oIkEgcHJvZ3JhbSBpcyBjdXJyZW50bHkgcnVubmluZyBpbiB0aGlzIHNlc3Npb24uIgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbG9z
ZSBpdD8iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcXVlc3Rpb24gPSBpMThuKCJUaGUg
cHJvZ3JhbSAnJTEnIGlzIGN1cnJlbnRseSBydW5uaW5nIGluIHRoaXMgc2Vzc2lvbi4iICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2xv
c2UgaXQ/Iix0aXRsZSk7CiAKICAgICAgICAgaW50IHJlc3VsdCA9IEtNZXNzYWdlQm94Ojp3YXJu
aW5nWWVzTm8oX3ZpZXctPndpbmRvdygpLHF1ZXN0aW9uLGkxOG4oIkNvbmZpcm0gQ2xvc2UiKSk7
CiAgICAgICAgIHJldHVybiAocmVzdWx0ID09IEtNZXNzYWdlQm94OjpZZXMpID8gdHJ1ZSA6IGZh
bHNlOyAKQEAgLTEwNDgsNiArOTIxLDExIEBAIHZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6OnNlc3Np
b25UaXRsZUNoYW5nZWQoKQogICAgICAgIHNldFRpdGxlKCB0aXRsZSApOwogfQogCit2b2lkIFNl
c3Npb25Db250cm9sbGVyOjpzZXNzaW9uQ3VycmVudERpcmVjdG9yeUNoYW5nZWQoY29uc3QgUVN0
cmluZyYgZGlyKQoreworICAgIGVtaXQgY3VycmVudERpcmVjdG9yeUNoYW5nZWQoZGlyKTsKK30K
Kwogdm9pZCBTZXNzaW9uQ29udHJvbGxlcjo6c2hvd0Rpc3BsYXlDb250ZXh0TWVudShUZXJtaW5h
bERpc3BsYXkqIC8qZGlzcGxheSovICwgaW50IC8qc3RhdGUqLywgY29uc3QgUVBvaW50JiBwb3Np
dGlvbikKIHsKICAgICBRTWVudSogcG9wdXAgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL1Nlc3Npb25D
b250cm9sbGVyLmggYi9zcmMvU2Vzc2lvbkNvbnRyb2xsZXIuaAppbmRleCAyM2U0YmNjLi4wZTgy
ZTE1IDEwMDY0NAotLS0gYS9zcmMvU2Vzc2lvbkNvbnRyb2xsZXIuaAorKysgYi9zcmMvU2Vzc2lv
bkNvbnRyb2xsZXIuaApAQCAtMTQyLDYgKzE0MiwxNCBAQCBzaWduYWxzOgogICAgICAqLwogICAg
IHZvaWQgZm9jdXNlZCggU2Vzc2lvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgKTsKIAorICAgIC8q
KgorICAgICAqIEVtaXR0ZWQgd2hlbiBhIGN1cnJlbnQgZGlyZWN0b3J5IGNoYW5nZWQgc2lnbmFs
IGhhcyBiZWVuIHJlY2VpdmVkIGZyb20KKyAgICAgKiB0aGUgc2Vzc2lvbi4KKyAgICAgKgorICAg
ICAqIEBwYXJhbSBkaXIgVGhlIG5ldyBkaXJlY3RvcnkuCisgICAgICovCisgICAgdm9pZCBjdXJy
ZW50RGlyZWN0b3J5Q2hhbmdlZChjb25zdCBRU3RyaW5nJiBkaXIpOworCiBwdWJsaWMgc2xvdHM6
CiAgICAgLyoqCiAgICAgICogSXNzdWVzIGEgY29tbWFuZCB0byB0aGUgc2Vzc2lvbiB0byBuYXZp
Z2F0ZSB0byB0aGUgc3BlY2lmaWVkIFVSTC4KQEAgLTE4OCw2ICsxOTYsNyBAQCBwcml2YXRlIHNs
b3RzOgogICAgIHZvaWQgc2hvd0Rpc3BsYXlDb250ZXh0TWVudShUZXJtaW5hbERpc3BsYXkqIGRp
c3BsYXkgLCBpbnQgc3RhdGUgLCBjb25zdCBRUG9pbnQmIHBvc2l0aW9uKTsKICAgICB2b2lkIHNl
c3Npb25TdGF0ZUNoYW5nZWQoaW50IHN0YXRlKTsKICAgICB2b2lkIHNlc3Npb25UaXRsZUNoYW5n
ZWQoKTsKKyAgICB2b2lkIHNlc3Npb25DdXJyZW50RGlyZWN0b3J5Q2hhbmdlZChjb25zdCBRU3Ry
aW5nJiBkaXIpOwogICAgIHZvaWQgc2VhcmNoVGV4dENoYW5nZWQoY29uc3QgUVN0cmluZyYgdGV4
dCk7CiAgICAgdm9pZCBzZWFyY2hDb21wbGV0ZWQoYm9vbCBzdWNjZXNzKTsKICAgICB2b2lkIHNl
YXJjaENsb3NlZCgpOyAvLyBjYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlCkBAIC0y
MDUsMTMgKzIxNCwxMCBAQCBwcml2YXRlIHNsb3RzOgogICAgIHZvaWQgc2Vzc2lvblJlc2l6ZVJl
cXVlc3QoY29uc3QgUVNpemUmIHNpemUpOwogCiAgICAgdm9pZCB0cmFja091dHB1dChRS2V5RXZl
bnQqIGV2ZW50KTsgIC8vIG1vdmUgdmlldyB0byBlbmQgb2YgY3VycmVudCBvdXRwdXQKLQkJCQkJ
CQkJCQkgLy8gd2hlbiBhIGtleSBwcmVzcyBvY2N1cnMgaW4gdGhlIAotCQkJCQkJCQkJCSAvLyBk
aXNwbGF5IGFyZWEKLQotCXZvaWQgdXBkYXRlU2VhcmNoRmlsdGVyKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gYSBrZXkgcHJlc3Mgb2NjdXJzIGlu
IHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzcGxh
eSBhcmVhCiAKLSAgICAvLyBkZWJ1Z2dpbmcgc2xvdHMKLSAgICB2b2lkIGRlYnVnUHJvY2Vzcygp
OworICAgIHZvaWQgdXBkYXRlU2VhcmNoRmlsdGVyKCk7CiAKIHByaXZhdGU6CiAgICAgLy8gYmVn
aW5zIHRoZSBzZWFyY2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>