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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>233789</bug_id>
          
          <creation_ts>2021-12-02 16:23:20 -0800</creation_ts>
          <short_desc>Introduce a MainThreadBridge class inside WebLockManager</short_desc>
          <delta_ts>2021-12-02 18:55:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>232436</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1819920</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-12-02 16:23:20 -0800</bug_when>
    <thetext>Extract all the logic to hop to and back from the main thread out of the WebLockManager and into a MainThreadBridge internal class. This is similar to what was done for BroadcastChannel already.
It provides better structuring and slightly better performance by calling isolatedCopy() on the ClientOrigin only once instead of on every call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819921</commentid>
    <comment_count>1</comment_count>
      <attachid>445786</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-12-02 16:26:12 -0800</bug_when>
    <thetext>Created attachment 445786
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819948</commentid>
    <comment_count>2</comment_count>
      <attachid>445786</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-12-02 16:54:24 -0800</bug_when>
    <thetext>Comment on attachment 445786
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=445786&amp;action=review

&gt; Source/WebCore/Modules/web-locks/WebLockManager.cpp:68
&gt; +class WebLockManager::MainThreadBridge : public ThreadSafeRefCounted&lt;MainThreadBridge, WTF::DestructionThread::Main&gt; {

Are we reference counting this just for the &quot;destroy on main thread&quot; bit? Because if so, I suggest we instead use unique_ptr and null it out on the main thread in ~WebLockManager. I don’t see any ref/deref of this going on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819952</commentid>
    <comment_count>3</comment_count>
      <attachid>445786</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-12-02 16:55:39 -0800</bug_when>
    <thetext>Comment on attachment 445786
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=445786&amp;action=review

We need ref-counting to keep ourselves alive while dispatching to the main thread as well.

&gt; Source/WebCore/Modules/web-locks/WebLockManager.cpp:161
&gt; +            Ref protectedThis { *this };

We Ref here.

&gt; Source/WebCore/Modules/web-locks/WebLockManager.cpp:165
&gt; +        downcast&lt;WorkerGlobalScope&gt;(*m_context).thread().workerLoaderProxy().postTaskToLoader([task = WTFMove(task), protectedThis = Ref { *this }](auto&amp; context) {

and here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819994</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-02 18:54:46 -0800</bug_when>
    <thetext>Committed r286474 (244813@main): &lt;https://commits.webkit.org/244813@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 445786.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819995</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-02 18:55:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/85999405&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445786</attachid>
            <date>2021-12-02 16:26:12 -0800</date>
            <delta_ts>2021-12-02 18:54:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233789-20211202162611.patch</filename>
            <type>text/plain</type>
            <size>19567</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NDU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDMwZWFmMjEwMmUyOTVl
YjQ5OTM3YzlkMGU1OTM4ZmUxMGJlM2E3Ny4uM2UxNzE0OTJiOTkzN2UyZjE2MTk5ZWNkOTQ2ZDUw
YmQ3ZjcwZjczNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDIxLTEyLTAyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIGEgTWFpblRo
cmVhZEJyaWRnZSBjbGFzcyBpbnNpZGUgV2ViTG9ja01hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzc4OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3QgYWxsIHRoZSBsb2dpYyB0byBo
b3AgdG8gYW5kIGJhY2sgZnJvbSB0aGUgbWFpbiB0aHJlYWQgb3V0IG9mIHRoZSBXZWJMb2NrTWFu
YWdlciBhbmQgaW50byBhIE1haW5UaHJlYWRCcmlkZ2UKKyAgICAgICAgaW50ZXJuYWwgY2xhc3Mu
IFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IHdhcyBkb25lIGZvciBCcm9hZGNhc3RDaGFubmVsIGFs
cmVhZHkuIEl0IHByb3ZpZGVzIGJldHRlciBzdHJ1Y3R1cmluZyBhbmQKKyAgICAgICAgc2xpZ2h0
bHkgYmV0dGVyIHBlcmZvcm1hbmNlIGJ5IGNhbGxpbmcgaXNvbGF0ZWRDb3B5KCkgb24gdGhlIENs
aWVudE9yaWdpbiBvbmx5IG9uY2UgaW5zdGVhZCBvZiBvbiBldmVyeSBjYWxsLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgbm8gd2ViLWZhY2luZyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAg
KiBNb2R1bGVzL3dlYi1sb2Nrcy9XZWJMb2NrTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJMb2NrTWFuYWdlcjo6TWFpblRocmVhZEJyaWRnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkxvY2tNYW5hZ2VyOjpNYWluVGhyZWFkQnJpZGdlOjpNYWluVGhyZWFkQnJpZGdl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkxvY2tNYW5hZ2VyOjpNYWluVGhyZWFkQnJpZGdlOjpy
ZXF1ZXN0TG9jayk6CisgICAgICAgIChXZWJDb3JlOjpXZWJMb2NrTWFuYWdlcjo6TWFpblRocmVh
ZEJyaWRnZTo6cmVsZWFzZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViTG9ja01hbmFnZXI6
Ok1haW5UaHJlYWRCcmlkZ2U6OmFib3J0TG9ja1JlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViTG9ja01hbmFnZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OnF1ZXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkxvY2tNYW5hZ2VyOjpNYWluVGhyZWFkQnJpZGdlOjpjbGllbnRJc0dvaW5nQXdheSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJMb2NrTWFuYWdlcjo6TWFpblRocmVhZEJyaWRnZTo6ZW5z
dXJlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkxvY2tNYW5hZ2VyOjpXZWJM
b2NrTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJMb2NrTWFuYWdlcjo6cmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJMb2NrTWFuYWdlcjo6ZGlkQ29tcGxldGVMb2NrUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJMb2NrTWFuYWdlcjo6cXVlcnkpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViTG9ja01hbmFnZXI6OnNpZ25hbFRvQWJvcnRUaGVSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkxvY2tNYW5hZ2VyOjpjbGllbnRJc0dvaW5nQXdheSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJMb2NrTWFuYWdlcjo6cmVxdWVzdExvY2tPbk1haW5UaHJlYWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViTG9ja01hbmFnZXI6OnJlbGVhc2VMb2NrT25NYWlu
VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkxvY2tNYW5hZ2VyOjphYm9y
dExvY2tSZXF1ZXN0T25NYWluVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkxvY2tNYW5hZ2VyOjpxdWVyeU9uTWFpblRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJMb2NrTWFuYWdlcjo6ZW5zdXJlT25NYWluVGhyZWFkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL3dlYi1sb2Nrcy9XZWJMb2NrTWFuYWdlci5oOgorCiAyMDIxLTEyLTAyICBE
ZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBbY3NzLXZhbHVlcy00
XSBTdXBwb3J0IGAqdmlgIChpbmxpbmUpIGFuZCBgKnZiYCAoYmxvY2spIHZpZXdwb3J0IHVuaXRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYi1sb2Nrcy9XZWJMb2NrTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYi1sb2Nrcy9XZWJMb2NrTWFuYWdl
ci5jcHAKaW5kZXggY2NhZDUzYmQ1ZDc4NTFhYWY4OGY5MDY5YzA0YTk4ODVkNDExNGEwNC4uOWM0
M2ZhMTRlMzVlZTFkMDE5Yjk1MTQ2MzUyYTkxMjkwMjQ3MzY4NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWItbG9ja3MvV2ViTG9ja01hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViLWxvY2tzL1dlYkxvY2tNYW5hZ2VyLmNwcApAQCAtNTcsNyAr
NTcsNiBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxDbGllbnRPcmlnaW4+IGNsaWVudE9yaWdpbkZy
b21Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleAogCiBzdHJ1Y3QgV2ViTG9ja01hbmFnZXI6
OkxvY2tSZXF1ZXN0IHsKICAgICBXZWJMb2NrSWRlbnRpZmllciBsb2NrSWRlbnRpZmllcjsKLSAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllciBjbGllbnRJRDsKICAgICBTdHJpbmcg
bmFtZTsKICAgICBXZWJMb2NrTW9kZSBtb2RlIHsgV2ViTG9ja01vZGU6OkV4Y2x1c2l2ZSB9Owog
ICAgIFJlZlB0cjxXZWJMb2NrR3JhbnRlZENhbGxiYWNrPiBncmFudGVkQ2FsbGJhY2s7CkBAIC02
Niw2ICs2NSwxMTAgQEAgc3RydWN0IFdlYkxvY2tNYW5hZ2VyOjpMb2NrUmVxdWVzdCB7CiAgICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gISFsb2NrSWRlbnRpZmllcjsgfQogfTsKIAor
Y2xhc3MgV2ViTG9ja01hbmFnZXI6Ok1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8TWFpblRocmVhZEJyaWRnZSwgV1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFp
bj4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8TWFpblRocmVhZEJyaWRnZT4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBhdXRvIGNs
aWVudE9yaWdpbiA9IGNsaWVudE9yaWdpbkZyb21Db250ZXh0KGNvbnRleHQpOworICAgICAgICBp
ZiAoIWNsaWVudE9yaWdpbikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IE1haW5UaHJlYWRCcmlkZ2UoKmNvbnRleHQsIFdURk1vdmUo
KmNsaWVudE9yaWdpbikpKTsKKyAgICB9CisKKyAgICB2b2lkIHJlcXVlc3RMb2NrKFdlYkxvY2tJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IE9wdGlvbnMmLCBGdW5jdGlvbjx2
b2lkKGJvb2wpPiYmLCBGdW5jdGlvbjx2b2lkKCk+JiYgbG9ja1N0b2xlbkhhbmRsZXIpOworICAg
IHZvaWQgcmVsZWFzZUxvY2soV2ViTG9ja0lkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSk7
CisgICAgdm9pZCBhYm9ydExvY2tSZXF1ZXN0KFdlYkxvY2tJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgcXVl
cnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTbmFwc2hvdCYmKT4mJik7CisgICAgdm9pZCBjbGll
bnRJc0dvaW5nQXdheSgpOworCitwcml2YXRlOgorICAgIE1haW5UaHJlYWRCcmlkZ2UoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIENsaWVudE9yaWdpbiYmKTsKKworICAgIHZvaWQgZW5zdXJlT25N
YWluVGhyZWFkKEZ1bmN0aW9uPHZvaWQoV2ViTG9ja1JlZ2lzdHJ5Jik+JiYgdGFzayk7CisKKyAg
ICBXZWFrUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fY29udGV4dDsKKyAgICBjb25zdCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllciBtX2NsaWVudElEOworICAgIGNvbnN0IENs
aWVudE9yaWdpbiBtX2NsaWVudE9yaWdpbjsgLy8gTWFpbiB0aHJlYWQgb25seS4KK307CisKK1dl
YkxvY2tNYW5hZ2VyOjpNYWluVGhyZWFkQnJpZGdlOjpNYWluVGhyZWFkQnJpZGdlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIENsaWVudE9yaWdpbiYmIGNsaWVudE9yaWdpbikKKyAg
ICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9jbGllbnRJRChjb250ZXh0LmlkZW50aWZp
ZXIoKSkKKyAgICAsIG1fY2xpZW50T3JpZ2luKFdURk1vdmUoY2xpZW50T3JpZ2luKS5pc29sYXRl
ZENvcHkoKSkKK3sKK30KKwordm9pZCBXZWJMb2NrTWFuYWdlcjo6TWFpblRocmVhZEJyaWRnZTo6
cmVxdWVzdExvY2soV2ViTG9ja0lkZW50aWZpZXIgbG9ja0lkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucywgRnVuY3Rpb248dm9pZChib29sKT4mJiBn
cmFudGVkSGFuZGxlciwgRnVuY3Rpb248dm9pZCgpPiYmIGxvY2tTdG9sZW5IYW5kbGVyKQorewor
ICAgIGVuc3VyZU9uTWFpblRocmVhZChbdGhpcywgbmFtZSA9IGNyb3NzVGhyZWFkQ29weShuYW1l
KSwgbW9kZSA9IG9wdGlvbnMubW9kZSwgc3RlYWwgPSBvcHRpb25zLnN0ZWFsLCBpZkF2YWlsYWJs
ZSA9IG9wdGlvbnMuaWZBdmFpbGFibGUsIGxvY2tJZGVudGlmaWVyLCBncmFudGVkSGFuZGxlciA9
IFdURk1vdmUoZ3JhbnRlZEhhbmRsZXIpLCBsb2NrU3RvbGVuSGFuZGxlciA9IFdURk1vdmUobG9j
a1N0b2xlbkhhbmRsZXIpXShhdXRvJiByZWdpc3RyeSkgbXV0YWJsZSB7CisgICAgICAgIHJlZ2lz
dHJ5LnJlcXVlc3RMb2NrKG1fY2xpZW50T3JpZ2luLCBsb2NrSWRlbnRpZmllciwgbV9jbGllbnRJ
RCwgbmFtZSwgbW9kZSwgc3RlYWwsIGlmQXZhaWxhYmxlLCBbY2xpZW50SUQgPSBtX2NsaWVudElE
LCBncmFudGVkSGFuZGxlciA9IFdURk1vdmUoZ3JhbnRlZEhhbmRsZXIpXSAoYm9vbCBzdWNjZXNz
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmVuc3VyZU9u
Q29udGV4dFRocmVhZChjbGllbnRJRCwgW2dyYW50ZWRIYW5kbGVyID0gV1RGTW92ZShncmFudGVk
SGFuZGxlciksIHN1Y2Nlc3NdKGF1dG8mKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBncmFu
dGVkSGFuZGxlcihzdWNjZXNzKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LCBbY2xpZW50
SUQgPSBtX2NsaWVudElELCBsb2NrU3RvbGVuSGFuZGxlciA9IFdURk1vdmUobG9ja1N0b2xlbkhh
bmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
ZW5zdXJlT25Db250ZXh0VGhyZWFkKGNsaWVudElELCBbbG9ja1N0b2xlbkhhbmRsZXIgPSBXVEZN
b3ZlKGxvY2tTdG9sZW5IYW5kbGVyKV0oYXV0byYpIG11dGFibGUgeworICAgICAgICAgICAgICAg
IGxvY2tTdG9sZW5IYW5kbGVyKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViTG9ja01hbmFnZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OnJlbGVhc2VM
b2NrKFdlYkxvY2tJZGVudGlmaWVyIGxvY2tJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUp
Cit7CisgICAgZW5zdXJlT25NYWluVGhyZWFkKFt0aGlzLCBsb2NrSWRlbnRpZmllciwgbmFtZSA9
IGNyb3NzVGhyZWFkQ29weShuYW1lKV0oYXV0byYgcmVnaXN0cnkpIHsKKyAgICAgICAgcmVnaXN0
cnkucmVsZWFzZUxvY2sobV9jbGllbnRPcmlnaW4sIGxvY2tJZGVudGlmaWVyLCBtX2NsaWVudElE
LCBuYW1lKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJMb2NrTWFuYWdlcjo6TWFpblRocmVhZEJy
aWRnZTo6YWJvcnRMb2NrUmVxdWVzdChXZWJMb2NrSWRlbnRpZmllciBsb2NrSWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIGVuc3VyZU9uTWFpblRocmVhZChbdGhpcywgbG9ja0lkZW50
aWZpZXIsIG5hbWUgPSBjcm9zc1RocmVhZENvcHkobmFtZSksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mIHJlZ2lzdHJ5KSBtdXRhYmxlIHsKKyAg
ICAgICAgcmVnaXN0cnkuYWJvcnRMb2NrUmVxdWVzdChtX2NsaWVudE9yaWdpbiwgbG9ja0lkZW50
aWZpZXIsIG1fY2xpZW50SUQsIG5hbWUsIFtjbGllbnRJRCA9IG1fY2xpZW50SUQsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzQWJvcnRlZCkg
bXV0YWJsZSB7CisgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjplbnN1cmVPbkNv
bnRleHRUaHJlYWQoY2xpZW50SUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCB3YXNBYm9ydGVkXShhdXRvJikgbXV0YWJsZSB7CisgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIod2FzQWJvcnRlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViTG9ja01hbmFnZXI6Ok1haW5UaHJlYWRCcmlk
Z2U6OnF1ZXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU25hcHNob3QmJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgZW5zdXJlT25NYWluVGhyZWFkKFt0aGlzLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiByZWdpc3RyeSkgbXV0YWJs
ZSB7CisgICAgICAgIHJlZ2lzdHJ5LnNuYXBzaG90KG1fY2xpZW50T3JpZ2luLCBbY2xpZW50SUQg
PSBtX2NsaWVudElELCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShTbmFwc2hvdCYmIHNuYXBzaG90KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OmVuc3VyZU9uQ29udGV4dFRocmVhZChjbGllbnRJRCwgW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHNuYXBzaG90ID0gY3Jvc3NU
aHJlYWRDb3B5KHNuYXBzaG90KV0oYXV0byYpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUoc25hcHNob3QpKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJMb2NrTWFuYWdlcjo6TWFpblRocmVhZEJy
aWRnZTo6Y2xpZW50SXNHb2luZ0F3YXkoKQoreworICAgIGVuc3VyZU9uTWFpblRocmVhZChbdGhp
c10oYXV0byYgcmVnaXN0cnkpIHsKKyAgICAgICAgcmVnaXN0cnkuY2xpZW50SXNHb2luZ0F3YXko
bV9jbGllbnRPcmlnaW4sIG1fY2xpZW50SUQpOworICAgIH0pOworfQorCit2b2lkIFdlYkxvY2tN
YW5hZ2VyOjpNYWluVGhyZWFkQnJpZGdlOjplbnN1cmVPbk1haW5UaHJlYWQoRnVuY3Rpb248dm9p
ZChXZWJMb2NrUmVnaXN0cnkmKT4mJiB0YXNrKQoreworICAgIGlmICghbV9jb250ZXh0KQorICAg
ICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwor
CisgICAgaWYgKGlzPERvY3VtZW50PigqbV9jb250ZXh0KSkgeworICAgICAgICBpZiAoYXV0byBw
YWdlID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpLnBhZ2UoKSkgeworICAgICAgICAg
ICAgUmVmIHByb3RlY3RlZFRoaXMgeyAqdGhpcyB9OworICAgICAgICAgICAgdGFzayhwYWdlLT53
ZWJMb2NrUmVnaXN0cnkoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBkb3du
Y2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKm1fY29udGV4dCkudGhyZWFkKCkud29ya2VyTG9hZGVy
UHJveHkoKS5wb3N0VGFza1RvTG9hZGVyKFt0YXNrID0gV1RGTW92ZSh0YXNrKSwgcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH1dKGF1dG8mIGNvbnRleHQpIHsKKyAgICAgICAgICAgIGlmIChh
dXRvIHBhZ2UgPSBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCkucGFnZSgpKQorICAgICAgICAg
ICAgICAgIHRhc2socGFnZS0+d2ViTG9ja1JlZ2lzdHJ5KCkpOworICAgICAgICB9KTsKKyAgICB9
Cit9CisKIFJlZjxXZWJMb2NrTWFuYWdlcj4gV2ViTG9ja01hbmFnZXI6OmNyZWF0ZShOYXZpZ2F0
b3JCYXNlJiBuYXZpZ2F0b3IpCiB7CiAgICAgYXV0byBtYW5hZ2VyID0gYWRvcHRSZWYoKm5ldyBX
ZWJMb2NrTWFuYWdlcihuYXZpZ2F0b3IpKTsKQEAgLTc1LDcgKzE3OCw3IEBAIFJlZjxXZWJMb2Nr
TWFuYWdlcj4gV2ViTG9ja01hbmFnZXI6OmNyZWF0ZShOYXZpZ2F0b3JCYXNlJiBuYXZpZ2F0b3Ip
CiAKIFdlYkxvY2tNYW5hZ2VyOjpXZWJMb2NrTWFuYWdlcihOYXZpZ2F0b3JCYXNlJiBuYXZpZ2F0
b3IpCiAgICAgOiBBY3RpdmVET01PYmplY3QobmF2aWdhdG9yLnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKLSAgICAsIG1fY2xpZW50T3JpZ2luKGNsaWVudE9yaWdpbkZyb21Db250ZXh0KG5hdmln
YXRvci5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQorICAgICwgbV9tYWluVGhyZWFkQnJpZGdl
KE1haW5UaHJlYWRCcmlkZ2U6OmNyZWF0ZShuYXZpZ2F0b3Iuc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKSkKIHsKIH0KIApAQCAtMTAyLDcgKzIwNSw3IEBAIHZvaWQgV2ViTG9ja01hbmFnZXI6OnJl
cXVlc3QoY29uc3QgU3RyaW5nJiBuYW1lLCBPcHRpb25zJiYgb3B0aW9ucywgUmVmPFdlYkxvY2tH
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1fY2xpZW50T3JpZ2luKSB7Cisg
ICAgaWYgKCFtX21haW5UaHJlYWRCcmlkZ2UpIHsKICAgICAgICAgcmVsZWFzZVByb21pc2UtPnJl
amVjdChTZWN1cml0eUVycm9yLCAiQ29udGV4dCdzIG9yaWdpbiBpcyBvcGFxdWUiX3MpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQyLDEwICsyNDUsOSBAQCB2b2lkIFdlYkxvY2tNYW5h
Z2VyOjpyZXF1ZXN0KGNvbnN0IFN0cmluZyYgbmFtZSwgT3B0aW9ucyYmIG9wdGlvbnMsIFJlZjxX
ZWJMb2NrRwogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBhdXRvIGNsaWVudElEID0gc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5pZGVudGlmaWVyKCk7Ci0gICAgbV9wZW5kaW5nUmVxdWVzdHMu
YWRkKGxvY2tJZGVudGlmaWVyLCBMb2NrUmVxdWVzdCB7IGxvY2tJZGVudGlmaWVyLCBjbGllbnRJ
RCwgbmFtZSwgb3B0aW9ucy5tb2RlLCBXVEZNb3ZlKGdyYW50ZWRDYWxsYmFjayksIFdURk1vdmUo
b3B0aW9ucy5zaWduYWwpIH0pOworICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFkZChsb2NrSWRlbnRp
ZmllciwgTG9ja1JlcXVlc3QgeyBsb2NrSWRlbnRpZmllciwgbmFtZSwgb3B0aW9ucy5tb2RlLCBX
VEZNb3ZlKGdyYW50ZWRDYWxsYmFjayksIFdURk1vdmUob3B0aW9ucy5zaWduYWwpIH0pOwogCi0g
ICAgcmVxdWVzdExvY2tPbk1haW5UaHJlYWQobG9ja0lkZW50aWZpZXIsIGNsaWVudElELCBuYW1l
LCBvcHRpb25zLCBbd2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfSwgbG9ja0lkZW50aWZpZXJd
KGJvb2wgc3VjY2VzcykgbXV0YWJsZSB7CisgICAgbV9tYWluVGhyZWFkQnJpZGdlLT5yZXF1ZXN0
TG9jayhsb2NrSWRlbnRpZmllciwgbmFtZSwgb3B0aW9ucywgW3dlYWtUaGlzID0gV2Vha1B0ciB7
ICp0aGlzIH0sIGxvY2tJZGVudGlmaWVyXShib29sIHN1Y2Nlc3MpIG11dGFibGUgewogICAgICAg
ICBpZiAod2Vha1RoaXMpCiAgICAgICAgICAgICB3ZWFrVGhpcy0+ZGlkQ29tcGxldGVMb2NrUmVx
dWVzdChsb2NrSWRlbnRpZmllciwgc3VjY2Vzcyk7CiAgICAgfSwgW3dlYWtUaGlzID0gV2Vha1B0
ciB7ICp0aGlzIH0sIGxvY2tJZGVudGlmaWVyXSgpIG11dGFibGUgewpAQCAtMTYzLDcgKzI2NSw3
IEBAIHZvaWQgV2ViTG9ja01hbmFnZXI6OmRpZENvbXBsZXRlTG9ja1JlcXVlc3QoV2ViTG9ja0lk
ZW50aWZpZXIgbG9ja0lkZW50aWZpZXIsIGJvCiAKICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAg
ICAgICAgICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC0+YWJvcnRlZCgp
KSB7Ci0gICAgICAgICAgICAgICAgcmVsZWFzZUxvY2tPbk1haW5UaHJlYWQocmVxdWVzdC5sb2Nr
SWRlbnRpZmllciwgcmVxdWVzdC5jbGllbnRJRCwgcmVxdWVzdC5uYW1lKTsKKyAgICAgICAgICAg
ICAgICBtX21haW5UaHJlYWRCcmlkZ2UtPnJlbGVhc2VMb2NrKHJlcXVlc3QubG9ja0lkZW50aWZp
ZXIsIHJlcXVlc3QubmFtZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogCkBAIC0xNzEsMTUgKzI3MywxNSBAQCB2b2lkIFdlYkxvY2tNYW5hZ2VyOjpkaWRDb21wbGV0
ZUxvY2tSZXF1ZXN0KFdlYkxvY2tJZGVudGlmaWVyIGxvY2tJZGVudGlmaWVyLCBibwogICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSByZXF1ZXN0LmdyYW50ZWRDYWxsYmFjay0+aGFuZGxlRXZlbnQo
bG9jay5wdHIoKSk7CiAgICAgICAgICAgICBSZWZQdHI8RE9NUHJvbWlzZT4gd2FpdGluZ1Byb21p
c2UgPSByZXN1bHQudHlwZSgpID09IENhbGxiYWNrUmVzdWx0VHlwZTo6U3VjY2VzcyA/IHJlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA6IG51bGxwdHI7CiAgICAgICAgICAgICBpZiAoIXdhaXRp
bmdQcm9taXNlKSB7Ci0gICAgICAgICAgICAgICAgcmVsZWFzZUxvY2tPbk1haW5UaHJlYWQocmVx
dWVzdC5sb2NrSWRlbnRpZmllciwgcmVxdWVzdC5jbGllbnRJRCwgcmVxdWVzdC5uYW1lKTsKKyAg
ICAgICAgICAgICAgICBtX21haW5UaHJlYWRCcmlkZ2UtPnJlbGVhc2VMb2NrKHJlcXVlc3QubG9j
a0lkZW50aWZpZXIsIHJlcXVlc3QubmFtZSk7CiAgICAgICAgICAgICAgICAgc2V0dGxlUmVsZWFz
ZVByb21pc2UocmVxdWVzdC5sb2NrSWRlbnRpZmllciwgRXhjZXB0aW9uIHsgRXhpc3RpbmdFeGNl
cHRpb25FcnJvciB9KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIERPTVByb21pc2U6OndoZW5Qcm9taXNlSXNTZXR0bGVkKHdhaXRpbmdQcm9t
aXNlLT5nbG9iYWxPYmplY3QoKSwgd2FpdGluZ1Byb21pc2UtPnByb21pc2UoKSwgW3RoaXMsIHdl
YWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGxvY2tJZGVudGlmaWVyID0gcmVxdWVzdC5sb2Nr
SWRlbnRpZmllciwgY2xpZW50SUQgPSByZXF1ZXN0LmNsaWVudElELCBuYW1lID0gcmVxdWVzdC5u
YW1lLCB3YWl0aW5nUHJvbWlzZV0geworICAgICAgICAgICAgRE9NUHJvbWlzZTo6d2hlblByb21p
c2VJc1NldHRsZWQod2FpdGluZ1Byb21pc2UtPmdsb2JhbE9iamVjdCgpLCB3YWl0aW5nUHJvbWlz
ZS0+cHJvbWlzZSgpLCBbdGhpcywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgbG9ja0lk
ZW50aWZpZXIgPSByZXF1ZXN0LmxvY2tJZGVudGlmaWVyLCBuYW1lID0gcmVxdWVzdC5uYW1lLCB3
YWl0aW5nUHJvbWlzZV0gewogICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICByZWxlYXNlTG9ja09uTWFpblRo
cmVhZChsb2NrSWRlbnRpZmllciwgY2xpZW50SUQsIG5hbWUpOworICAgICAgICAgICAgICAgIG1f
bWFpblRocmVhZEJyaWRnZS0+cmVsZWFzZUxvY2sobG9ja0lkZW50aWZpZXIsIG5hbWUpOwogICAg
ICAgICAgICAgICAgIHNldHRsZVJlbGVhc2VQcm9taXNlKGxvY2tJZGVudGlmaWVyLCBzdGF0aWNf
Y2FzdDxKU0M6OkpTVmFsdWU+KHdhaXRpbmdQcm9taXNlLT5wcm9taXNlKCkpKTsKICAgICAgICAg
ICAgIH0pOwogICAgICAgICB9IGVsc2UgewpAQCAtMTk0LDUwICsyOTYsNiBAQCB2b2lkIFdlYkxv
Y2tNYW5hZ2VyOjpkaWRDb21wbGV0ZUxvY2tSZXF1ZXN0KFdlYkxvY2tJZGVudGlmaWVyIGxvY2tJ
ZGVudGlmaWVyLCBibwogICAgIH0pOwogfQogCi12b2lkIFdlYkxvY2tNYW5hZ2VyOjpyZXF1ZXN0
TG9ja09uTWFpblRocmVhZChXZWJMb2NrSWRlbnRpZmllciBsb2NrSWRlbnRpZmllciwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIgY2xpZW50SUQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgT3B0aW9ucyYgb3B0aW9ucywgRnVuY3Rpb248dm9pZChib29sKT4mJiBncmFudGVkSGFu
ZGxlciwgRnVuY3Rpb248dm9pZCgpPiYmIGxvY2tTdG9sZW5IYW5kbGVyKQotewotICAgIGVuc3Vy
ZU9uTWFpblRocmVhZChbY2xpZW50SUQsIGNsaWVudE9yaWdpbiA9IGNyb3NzVGhyZWFkQ29weSgq
bV9jbGllbnRPcmlnaW4pLCBuYW1lID0gY3Jvc3NUaHJlYWRDb3B5KG5hbWUpLCBtb2RlID0gb3B0
aW9ucy5tb2RlLCBzdGVhbCA9IG9wdGlvbnMuc3RlYWwsIGlmQXZhaWxhYmxlID0gb3B0aW9ucy5p
ZkF2YWlsYWJsZSwgbG9ja0lkZW50aWZpZXIsIGdyYW50ZWRIYW5kbGVyID0gV1RGTW92ZShncmFu
dGVkSGFuZGxlciksIGxvY2tTdG9sZW5IYW5kbGVyID0gV1RGTW92ZShsb2NrU3RvbGVuSGFuZGxl
cildKGF1dG8mIHJlZ2lzdHJ5KSBtdXRhYmxlIHsKLSAgICAgICAgcmVnaXN0cnkucmVxdWVzdExv
Y2soY2xpZW50T3JpZ2luLCBsb2NrSWRlbnRpZmllciwgY2xpZW50SUQsIG5hbWUsIG1vZGUsIHN0
ZWFsLCBpZkF2YWlsYWJsZSwgW2NsaWVudElELCBncmFudGVkSGFuZGxlciA9IFdURk1vdmUoZ3Jh
bnRlZEhhbmRsZXIpXSAoYm9vbCBzdWNjZXNzKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OmVuc3VyZU9uQ29udGV4dFRocmVhZChjbGllbnRJRCwgW2dyYW50
ZWRIYW5kbGVyID0gV1RGTW92ZShncmFudGVkSGFuZGxlciksIHN1Y2Nlc3NdKGF1dG8mKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgICAgICBncmFudGVkSGFuZGxlcihzdWNjZXNzKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9LCBbY2xpZW50SUQsIGxvY2tTdG9sZW5IYW5kbGVyID0gV1RGTW92
ZShsb2NrU3RvbGVuSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjplbnN1cmVPbkNvbnRleHRUaHJlYWQoY2xpZW50SUQsIFtsb2NrU3RvbGVu
SGFuZGxlciA9IFdURk1vdmUobG9ja1N0b2xlbkhhbmRsZXIpXShhdXRvJikgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICAgICAgbG9ja1N0b2xlbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJMb2NrTWFuYWdlcjo6cmVsZWFzZUxvY2tP
bk1haW5UaHJlYWQoV2ViTG9ja0lkZW50aWZpZXIgbG9ja0lkZW50aWZpZXIsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRJZGVudGlmaWVyIGNsaWVudElELCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgZW5zdXJlT25NYWluVGhyZWFkKFtjbGllbnRPcmlnaW4gPSBjcm9zc1RocmVhZENvcHkoKm1f
Y2xpZW50T3JpZ2luKSwgbG9ja0lkZW50aWZpZXIsIGNsaWVudElELCBuYW1lID0gY3Jvc3NUaHJl
YWRDb3B5KG5hbWUpXShhdXRvJiByZWdpc3RyeSkgewotICAgICAgICByZWdpc3RyeS5yZWxlYXNl
TG9jayhjbGllbnRPcmlnaW4sIGxvY2tJZGVudGlmaWVyLCBjbGllbnRJRCwgbmFtZSk7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgV2ViTG9ja01hbmFnZXI6OmFib3J0TG9ja1JlcXVlc3RPbk1haW5UaHJl
YWQoV2ViTG9ja0lkZW50aWZpZXIgbG9ja0lkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAg
ICBlbnN1cmVPbk1haW5UaHJlYWQoW2NsaWVudElEID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5pZGVudGlmaWVyKCksIGNsaWVudE9yaWdpbiA9IGNyb3NzVGhyZWFkQ29weSgqbV9jbGllbnRP
cmlnaW4pLCBsb2NrSWRlbnRpZmllciwgbmFtZSA9IGNyb3NzVGhyZWFkQ29weShuYW1lKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYgcmVnaXN0
cnkpIG11dGFibGUgewotICAgICAgICByZWdpc3RyeS5hYm9ydExvY2tSZXF1ZXN0KGNsaWVudE9y
aWdpbiwgbG9ja0lkZW50aWZpZXIsIGNsaWVudElELCBuYW1lLCBbY2xpZW50SUQsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzQWJvcnRlZCkg
bXV0YWJsZSB7Ci0gICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjplbnN1cmVPbkNv
bnRleHRUaHJlYWQoY2xpZW50SUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCB3YXNBYm9ydGVkXShhdXRvJikgbXV0YWJsZSB7Ci0gICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIod2FzQWJvcnRlZCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViTG9ja01hbmFnZXI6OnF1ZXJ5T25NYWluVGhy
ZWFkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU25hcHNob3QmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCi17Ci0gICAgZW5zdXJlT25NYWluVGhyZWFkKFtjb250ZXh0SWRlbnRpZmllciA9IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aWRlbnRpZmllcigpLCBjbGllbnRPcmlnaW4gPSBjcm9zc1Ro
cmVhZENvcHkoKm1fY2xpZW50T3JpZ2luKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oYXV0byYgcmVnaXN0cnkpIG11dGFibGUgewotICAgICAgICByZWdp
c3RyeS5zbmFwc2hvdChjbGllbnRPcmlnaW4sIFtjb250ZXh0SWRlbnRpZmllciwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU25hcHNob3QmJiBzbmFwc2hv
dCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjplbnN1cmVP
bkNvbnRleHRUaHJlYWQoY29udGV4dElkZW50aWZpZXIsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzbmFwc2hvdCA9IGNyb3NzVGhyZWFkQ29weShzbmFw
c2hvdCldKGF1dG8mKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihXVEZNb3ZlKHNuYXBzaG90KSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAg
fSk7Ci19Ci0KIHZvaWQgV2ViTG9ja01hbmFnZXI6OnF1ZXJ5KFJlZjxEZWZlcnJlZFByb21pc2U+
JiYgcHJvbWlzZSkKIHsKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewpAQCAt
MjUwLDEyICszMDgsMTIgQEAgdm9pZCBXZWJMb2NrTWFuYWdlcjo6cXVlcnkoUmVmPERlZmVycmVk
UHJvbWlzZT4mJiBwcm9taXNlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFt
X2NsaWVudE9yaWdpbikgeworICAgIGlmICghbV9tYWluVGhyZWFkQnJpZGdlKSB7CiAgICAgICAg
IHByb21pc2UtPnJlamVjdChTZWN1cml0eUVycm9yLCAiQ29udGV4dCdzIG9yaWdpbiBpcyBvcGFx
dWUiX3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcXVlcnlPbk1haW5UaHJlYWQo
W3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH0sIHByb21pc2UgPSBXVEZNb3ZlKHByb21pc2Up
XShTbmFwc2hvdCYmIHNuYXBzaG90KSBtdXRhYmxlIHsKKyAgICBtX21haW5UaHJlYWRCcmlkZ2Ut
PnF1ZXJ5KFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCBwcm9taXNlID0gV1RGTW92ZShw
cm9taXNlKV0oU25hcHNob3QmJiBzbmFwc2hvdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vh
a1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTI2OCw3ICszMjYsNyBAQCB2b2lkIFdl
YkxvY2tNYW5hZ2VyOjpxdWVyeShSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiAvLyBo
dHRwczovL3dpY2cuZ2l0aHViLmlvL3dlYi1sb2Nrcy8jc2lnbmFsLXRvLWFib3J0LXRoZS1yZXF1
ZXN0CiB2b2lkIFdlYkxvY2tNYW5hZ2VyOjpzaWduYWxUb0Fib3J0VGhlUmVxdWVzdChXZWJMb2Nr
SWRlbnRpZmllciBsb2NrSWRlbnRpZmllcikKIHsKLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSkKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB8fCAhbV9tYWluVGhy
ZWFkQnJpZGdlKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHJlcXVlc3RzSXRlcmF0b3Ig
PSBtX3BlbmRpbmdSZXF1ZXN0cy5maW5kKGxvY2tJZGVudGlmaWVyKTsKQEAgLTI3Niw3ICszMzQs
NyBAQCB2b2lkIFdlYkxvY2tNYW5hZ2VyOjpzaWduYWxUb0Fib3J0VGhlUmVxdWVzdChXZWJMb2Nr
SWRlbnRpZmllciBsb2NrSWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8mIHJl
cXVlc3QgPSByZXF1ZXN0c0l0ZXJhdG9yLT52YWx1ZTsKIAotICAgIGFib3J0TG9ja1JlcXVlc3RP
bk1haW5UaHJlYWQocmVxdWVzdC5sb2NrSWRlbnRpZmllciwgcmVxdWVzdC5uYW1lLCBbd2Vha1Ro
aXMgPSBXZWFrUHRyIHsgKnRoaXMgfSwgbG9ja0lkZW50aWZpZXJdKGJvb2wgd2FzQWJvcnRlZCkg
eworICAgIG1fbWFpblRocmVhZEJyaWRnZS0+YWJvcnRMb2NrUmVxdWVzdChyZXF1ZXN0LmxvY2tJ
ZGVudGlmaWVyLCByZXF1ZXN0Lm5hbWUsIFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCBs
b2NrSWRlbnRpZmllcl0oYm9vbCB3YXNBYm9ydGVkKSB7CiAgICAgICAgIGlmICh3YXNBYm9ydGVk
ICYmIHdlYWtUaGlzKQogICAgICAgICAgICAgd2Vha1RoaXMtPm1fcGVuZGluZ1JlcXVlc3RzLnJl
bW92ZShsb2NrSWRlbnRpZmllcik7CiAgICAgfSk7CkBAIC0zMDgsMjcgKzM2Niw4IEBAIHZvaWQg
V2ViTG9ja01hbmFnZXI6OmNsaWVudElzR29pbmdBd2F5KCkKICAgICBtX3BlbmRpbmdSZXF1ZXN0
cy5jbGVhcigpOwogICAgIG1fcmVsZWFzZVByb21pc2VzLmNsZWFyKCk7CiAKLSAgICBlbnN1cmVP
bk1haW5UaHJlYWQoW2NsaWVudE9yaWdpbiA9IGNyb3NzVGhyZWFkQ29weSgqbV9jbGllbnRPcmln
aW4pLCBjb250ZXh0SWRlbnRpZmllciA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aWRlbnRp
ZmllcigpXShhdXRvJiByZWdpc3RyeSkgewotICAgICAgICByZWdpc3RyeS5jbGllbnRJc0dvaW5n
QXdheShjbGllbnRPcmlnaW4sIGNvbnRleHRJZGVudGlmaWVyKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBXZWJMb2NrTWFuYWdlcjo6ZW5zdXJlT25NYWluVGhyZWFkKEZ1bmN0aW9uPHZvaWQoV2ViTG9j
a1JlZ2lzdHJ5Jik+JiYgdGFzaykKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFT
U0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0KLSAgICBpZiAoaXM8RG9jdW1lbnQ+
KCpjb250ZXh0KSkgewotICAgICAgICBpZiAoYXV0byBwYWdlID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KS5wYWdlKCkpCi0gICAgICAgICAgICB0YXNrKHBhZ2UtPndlYkxvY2tSZWdpc3Ry
eSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4o
KmNvbnRleHQpLnRocmVhZCgpLndvcmtlckxvYWRlclByb3h5KCkucG9zdFRhc2tUb0xvYWRlcihb
dGFzayA9IFdURk1vdmUodGFzayldKGF1dG8mIGNvbnRleHQpIHsKLSAgICAgICAgICAgIGlmIChh
dXRvIHBhZ2UgPSBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCkucGFnZSgpKQotICAgICAgICAg
ICAgICAgIHRhc2socGFnZS0+d2ViTG9ja1JlZ2lzdHJ5KCkpOwotICAgICAgICB9KTsKLSAgICB9
CisgICAgaWYgKG1fbWFpblRocmVhZEJyaWRnZSkKKyAgICAgICAgbV9tYWluVGhyZWFkQnJpZGdl
LT5jbGllbnRJc0dvaW5nQXdheSgpOwogfQogCiBib29sIFdlYkxvY2tNYW5hZ2VyOjp2aXJ0dWFs
SGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViLWxvY2tzL1dlYkxvY2tNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYi1sb2Nrcy9XZWJMb2NrTWFuYWdlci5oCmluZGV4IDk2ODI2NjIyNGNkZmVlNTQxZmI3OWZi
MGJkYjUwOTkxNDI2MGVkZjAuLjJmZGUwOWJjY2Y3NDQzNmRiZjFiZWIyMjRhOWMyNTM4NDA3Y2Fh
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViLWxvY2tzL1dlYkxvY2tN
YW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWItbG9ja3MvV2ViTG9ja01h
bmFnZXIuaApAQCAtNjMsMjQgKzYzLDE5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgV2ViTG9ja01hbmFnZXIoTmF2aWdhdG9yQmFzZSYpOwogCi0gICAgdm9pZCByZXF1ZXN0TG9j
a09uTWFpblRocmVhZChXZWJMb2NrSWRlbnRpZmllciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dElk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9ucyYsIEZ1bmN0aW9uPHZv
aWQoYm9vbCk+JiYsIEZ1bmN0aW9uPHZvaWQoKT4mJiBsb2NrU3RvbGVuSGFuZGxlcik7Ci0gICAg
dm9pZCByZWxlYXNlTG9ja09uTWFpblRocmVhZChXZWJMb2NrSWRlbnRpZmllciwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBh
Ym9ydExvY2tSZXF1ZXN0T25NYWluVGhyZWFkKFdlYkxvY2tJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwotICAgIHZvaWQgcXVl
cnlPbk1haW5UaHJlYWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTbmFwc2hvdCYmKT4mJik7Ci0K
ICAgICB2b2lkIGRpZENvbXBsZXRlTG9ja1JlcXVlc3QoV2ViTG9ja0lkZW50aWZpZXIsIGJvb2wg
c3VjY2Vzcyk7CiAgICAgdm9pZCBzZXR0bGVSZWxlYXNlUHJvbWlzZShXZWJMb2NrSWRlbnRpZmll
ciwgRXhjZXB0aW9uT3I8SlNDOjpKU1ZhbHVlPiYmKTsKICAgICB2b2lkIHNpZ25hbFRvQWJvcnRU
aGVSZXF1ZXN0KFdlYkxvY2tJZGVudGlmaWVyKTsKICAgICB2b2lkIGNsaWVudElzR29pbmdBd2F5
KCk7CiAKLSAgICB2b2lkIGVuc3VyZU9uTWFpblRocmVhZChGdW5jdGlvbjx2b2lkKFdlYkxvY2tS
ZWdpc3RyeSYpPiYmIHRhc2spOwotCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0LgogICAgIHZvaWQg
c3RvcCgpIGZpbmFsOwogICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25z
dCBmaW5hbDsKICAgICBib29sIHZpcnR1YWxIYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBmaW5h
bDsKIAotICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q2xpZW50T3JpZ2luPiBtX2NsaWVudE9yaWdp
bjsKKyAgICBjbGFzcyBNYWluVGhyZWFkQnJpZGdlOworICAgIFJlZlB0cjxNYWluVGhyZWFkQnJp
ZGdlPiBtX21haW5UaHJlYWRCcmlkZ2U7CisKICAgICBIYXNoTWFwPFdlYkxvY2tJZGVudGlmaWVy
LCBSZWZQdHI8RGVmZXJyZWRQcm9taXNlPj4gbV9yZWxlYXNlUHJvbWlzZXM7CiAKICAgICBzdHJ1
Y3QgTG9ja1JlcXVlc3Q7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>