<?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>41547</bug_id>
          
          <creation_ts>2010-07-02 16:00:30 -0700</creation_ts>
          <short_desc>Turn on adoptRef assertion for RefCounted</short_desc>
          <delta_ts>2010-07-08 08:49:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>kinuko</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>246136</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-02 16:00:30 -0700</bug_when>
    <thetext>Turn on adoptRef assertion for RefCounted</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246141</commentid>
    <comment_count>1</comment_count>
      <attachid>60415</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-02 16:20:06 -0700</bug_when>
    <thetext>Created attachment 60415
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247463</commentid>
    <comment_count>2</comment_count>
      <attachid>60415</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-07 03:49:54 -0700</bug_when>
    <thetext>Comment on attachment 60415
Patch

A bunch of minor comments below.  Really glad to see this patch!  Thanks for picking up this project and running with it.

WebCore/html/FileStreamProxy.cpp:60
 +      proxy-&gt;ref();
This seems like a bad design.  The way we solved this problem in Chrome is by having specialized Task objects that understood how to ref/deref the objects that they operated upon.  It took a few iterations of the design to get it right, but we got rid of almost all the instances of this (error-prone) pattern.

WebCore/page/EventSource.cpp:71
 +  PassRefPtr&lt;EventSource&gt; EventSource::create(const String&amp; url, ScriptExecutionContext* context, ExceptionCode&amp; ec)
This change is slightly complex, but looks like a nice win in terms of readability.

WebCore/page/EventSource.h: 
 +          EventSource(const String&amp; url, ScriptExecutionContext* context, ExceptionCode&amp; ec);
Yeah, having the ec in the constructor seems like nonsense semantically.  Constructors that can fail don&apos;t make much sense.

WebCore/storage/StorageAreaSync.h:44
 +          static PassRefPtr&lt;StorageAreaSync&gt; create(PassRefPtr&lt;StorageSyncManager&gt;, PassRefPtr&lt;StorageAreaImpl&gt;, const String&amp; databaseIdentifier);
We should improve the linter to find Strings passed by value.

WebCore/workers/SharedWorker.cpp: 
 +      ASSERT(!ec);
What happend to this assert?

WebCore/workers/SharedWorker.cpp:60
 +      KURL scriptURL = worker-&gt;resolveURL(url, ec);
Can we get an ec without scriptURL being empty?  Do we need to return like the old code did?

WebCore/workers/Worker.cpp:63
 +      KURL scriptURL = worker-&gt;resolveURL(url, ec);
Same ec question.

WebCore/workers/Worker.cpp:67
 +      worker-&gt;m_scriptLoader = new WorkerScriptLoader(ResourceRequestBase::TargetIsWorker);
Naked new?

WebCore/workers/Worker.h:57
 +          virtual ~Worker();
!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247696</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-07 12:51:31 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; WebCore/html/FileStreamProxy.cpp:60
&gt;  +      proxy-&gt;ref();
&gt; This seems like a bad design.  The way we solved this problem in Chrome is by having specialized Task objects that understood how to ref/deref the objects that they operated upon.  It took a few iterations of the design to get it right, but we got rid of almost all the instances of this (error-prone) pattern.

Good feedback for the engineers working on FileSystemProxy.cpp, Kinuko Yasuda and Jian Li. I believe both work for Google so maybe you can talk to them in person? I wasn’t changing the design; just refactoring to work with the new assertion. I just moved the ref out of the constructor into the create function.

&gt; WebCore/workers/SharedWorker.cpp: 
&gt;  +      ASSERT(!ec);
&gt; What happend to this assert?

I replaced an unimportant assertion with the more important one. The function returns null when it fails. The fact that it also returns an exception code is only for the convenience of JavaScript. I changed the code to assert that the return value is non-null. An alternative would be to keep the !ec assertion and initialize ec to zero. I don’t feel strongly either way.

&gt; WebCore/workers/SharedWorker.cpp:60
&gt;  +      KURL scriptURL = worker-&gt;resolveURL(url, ec);
&gt; Can we get an ec without scriptURL being empty?  Do we need to return like the old code did?

We can&apos;t. This function always returns a null scriptURL when there is an exception. We don&apos;t need code to explicitly check the exception. Generally speaking, exception codes are not a good way for our internal code to work. They are good for one purpose only, to provide exceptions for the binding layer. I think a good general guideline is that when possible, internal code should do nothing with the exceptions except pass them out to the binding layer, and should indicate failure in other ways.

&gt; WebCore/workers/Worker.cpp:63
&gt;  +      KURL scriptURL = worker-&gt;resolveURL(url, ec);
&gt; Same ec question.

Same answer.

&gt; WebCore/workers/Worker.cpp:67
&gt;  +      worker-&gt;m_scriptLoader = new WorkerScriptLoader(ResourceRequestBase::TargetIsWorker);
&gt; Naked new?

That&apos;s an error. This should have an adoptPtr. Once we turn off LOOSE_OWN_PTR it will be an error to omit the adoptPtr. I&apos;ll add it, but generally speaking I&apos;ll get to those in another patch.

&gt; WebCore/workers/Worker.h:57
&gt;  +          virtual ~Worker();
&gt; !

The destructor was already virtual because the base class, AbstractWorker, has a virtual destructor. I was simply fixing a style mistake. Generally speaking in WebKit we always want to explicitly declare functions virtual rather than letting them be virtual implicitly because they overload virtual function from the base class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247715</commentid>
    <comment_count>4</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-07 13:12:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; WebCore/html/FileStreamProxy.cpp:60
&gt; &gt;  +      proxy-&gt;ref();
&gt; &gt; This seems like a bad design.  The way we solved this problem in Chrome is by having specialized Task objects that understood how to ref/deref the objects that they operated upon.  It took a few iterations of the design to get it right, but we got rid of almost all the instances of this (error-prone) pattern.
&gt; 
&gt; Good feedback for the engineers working on FileSystemProxy.cpp, Kinuko Yasuda and Jian Li. I believe both work for Google so maybe you can talk to them in person? I wasn’t changing the design; just refactoring to work with the new assertion. I just moved the ref out of the constructor into the create function.

Thanks for the feedback, that&apos;s true that this design is very error-prone.   I&apos;ll open a new bug to fix FileStreamProxy design right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247732</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-07 13:55:58 -0700</bug_when>
    <thetext>Committed r62696: &lt;http://trac.webkit.org/changeset/62696&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247755</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-07 14:24:17 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/62696 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247757</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-07 14:27:27 -0700</bug_when>
    <thetext>abarth: http://build.webkit.org/results/GTK%20Linux%2064-bit%20Debug/r62696%20(9359)/results.html
abarth: darin: someone set us up the svg crash
abarth: ASSERTION FAILED: !m_adoptionIsRequired
abarth: (../../JavaScriptCore/wtf/RefCounted.h:37 void WTF::RefCountedBase::ref())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247892</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-07 17:43:46 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; abarth: http://build.webkit.org/results/GTK%20Linux%2064-bit%20Debug/r62696%20(9359)/results.html
&gt; abarth: darin: someone set us up the svg crash
&gt; abarth: ASSERTION FAILED: !m_adoptionIsRequired
&gt; abarth: (../../JavaScriptCore/wtf/RefCounted.h:37 void WTF::RefCountedBase::ref())

I wonder why this is GTK-specific. These same tests don&apos;t seem to have this problem on the non-GTK platforms. Could someone show me the backtrace so I can fix this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248232</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-08 08:49:58 -0700</bug_when>
    <thetext>Seems to also have caused problems on Leopard Debug

platform/mac/plugins/webScriptObject-exception-deadlock.html
http/tests/workers/shared-worker-redirect.html

http://build.webkit.org/results/Leopard%20Intel%20Debug%20(Tests)/r62785%20(17026)/results.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60415</attachid>
            <date>2010-07-02 16:20:06 -0700</date>
            <delta_ts>2010-07-07 03:49:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41547-20100702162005.patch</filename>
            <type>text/plain</type>
            <size>27341</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyNDExKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDctMDIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFR1cm4gb24gYWRvcHRSZWYgYXNzZXJ0aW9uIGZvciBSZWZDb3VudGVk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTU0Nwor
CisgICAgICAgICogd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oOiBGaXhlZCBpbmNsdWRlIHN0
eWxlLiBJbmNsdWRlcyBvZiBvdGhlcgorICAgICAgICBXVEYgaGVhZGVycyBzaG91bGQgdXNlICIi
IGluY2x1ZGVzOyBjb25zaXN0ZW50IGluIG1vc3QgV1RGIGhlYWRlcnMuCisgICAgICAgIEFkZGVk
IGEgY2FsbCB0byByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQuCisKKyAgICAgICAgKiB3dGYvUmVm
Q291bnRlZC5oOiBGaXhlZCBpbmNsdWRlIHN0eWxlLiBSZW1vdmVkIExPT1NFX1JFRl9DT1VOVEVE
LgorICAgICAgICBBZGRlZCByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQuCisKIDIwMTAtMDctMDIg
IE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBH
ZW9mZnJleSBHYXJlbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNv
dW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkLmgJKHJldmlzaW9uIDYyNDA3KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0Nyb3NzVGhy
ZWFkUmVmQ291bnRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMxLDEwICszMiw5IEBACiAjaWZuZGVmIENy
b3NzVGhyZWFkUmVmQ291bnRlZF9oCiAjZGVmaW5lIENyb3NzVGhyZWFkUmVmQ291bnRlZF9oCiAK
LSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgorI2luY2x1ZGUgIlBhc3NSZWZQdHIuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5j
bHVkZSAiVGhyZWFkaW5nLmgiCiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC03OCw2ICs3OCw5IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgLCBtX3RocmVhZElkKDApCiAjZW5kaWYKICAg
ICAgICAgeworICAgICAgICAgICAgLy8gV2UgdXNlIFJlZkNvdW50ZWRCYXNlIGluIGFuIHVudXN1
YWwgd2F5IGhlcmUsIHNvIGdldCByaWQgb2YgdGhlIHJlcXVpcmVtZW50CisgICAgICAgICAgICAv
LyB0aGF0IGFkb3B0UmVmIGJlIGNhbGxlZCBvbiBpdC4KKyAgICAgICAgICAgIG1fcmVmQ291bnRl
ci5yZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICAgICAgfQogCiAgICAgICAgIH5Dcm9z
c1RocmVhZFJlZkNvdW50ZWQoKQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRlZC5oCShyZXZpc2lv
biA2MjQwNykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIFJlZkNvdW50ZWRfaAogI2RlZmluZSBSZWZD
b3VudGVkX2gKIAotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+Ci0KLS8vIFJlbW92ZSB0aGlzIG9uY2Ugd2UgbWFrZSBhbGwgV2ViS2l0IGNv
ZGUgY29tcGF0aWJsZSB3aXRoIHN0cmljdGVyIHJ1bGVzIGFib3V0IFJlZkNvdW50ZWQuCi0jZGVm
aW5lIExPT1NFX1JFRl9DT1VOVEVECisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUg
Ik5vbmNvcHlhYmxlLmgiCiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC0zNyw5ICszNCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHJlZigpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fZGVsZXRpb25I
YXNCZWd1bik7Ci0jaWZuZGVmIExPT1NFX1JFRl9DT1VOVEVECiAgICAgICAgIEFTU0VSVCghbV9h
ZG9wdGlvbklzUmVxdWlyZWQpOwotI2VuZGlmCiAgICAgICAgICsrbV9yZWZDb3VudDsKICAgICB9
CiAKQEAgLTU0LDYgKzQ5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7
CiAgICAgfQogCisgICAgdm9pZCByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKQorICAgIHsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgICAgIEFTU0VSVCghbV9kZWxldGlvbkhhc0JlZ3VuKTsKKyAgICAg
ICAgQVNTRVJUKG1fYWRvcHRpb25Jc1JlcXVpcmVkKTsKKyAgICAgICAgbV9hZG9wdGlvbklzUmVx
dWlyZWQgPSBmYWxzZTsKKyNlbmRpZgorICAgIH0KKwogcHJvdGVjdGVkOgogICAgIFJlZkNvdW50
ZWRCYXNlKCkKICAgICAgICAgOiBtX3JlZkNvdW50KDEpCkBAIC02NiwxOSArNzAsMTUgQEAgcHJv
dGVjdGVkOgogCiAgICAgflJlZkNvdW50ZWRCYXNlKCkKICAgICB7Ci0jaWZuZGVmIExPT1NFX1JF
Rl9DT1VOVEVECiAgICAgICAgIEFTU0VSVChtX2RlbGV0aW9uSGFzQmVndW4pOwogICAgICAgICBB
U1NFUlQoIW1fYWRvcHRpb25Jc1JlcXVpcmVkKTsKLSNlbmRpZgogICAgIH0KIAogICAgIC8vIFJl
dHVybnMgd2hldGhlciB0aGUgcG9pbnRlciBzaG91bGQgYmUgZnJlZWQgb3Igbm90LgogICAgIGJv
b2wgZGVyZWZCYXNlKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9kZWxldGlvbkhhc0JlZ3Vu
KTsKLSNpZm5kZWYgTE9PU0VfUkVGX0NPVU5URUQKICAgICAgICAgQVNTRVJUKCFtX2Fkb3B0aW9u
SXNSZXF1aXJlZCk7Ci0jZW5kaWYKIAogICAgICAgICBBU1NFUlQobV9yZWZDb3VudCA+IDApOwog
ICAgICAgICBpZiAobV9yZWZDb3VudCA9PSAxKSB7CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNjI0MTEpCisrKyBXZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDEwLTA3LTAy
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUdXJuIG9uIGFkb3B0UmVmIGFzc2VydGlvbiBmb3Ig
UmVmQ291bnRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDE1NDcKKworICAgICAgICBUaGUgV2ViQ29yZSBwYXJ0IG9mIHRoaXMgZml4ZXMgYWxsIHRo
ZSBhc3NlcnRpb25zIEkgc2F3IGluIHRlc3RpbmcuCisKKyAgICAgICAgKiBodG1sL0ZpbGVSZWFk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5n
KTogQWRkZWQgbnVsbCBjaGVja3MuCisgICAgICAgIENhbGxlcnMgZnJvbSBKYXZhU2NyaXB0IGNh
biBwYXNzIHRoZSB3cm9uZyB0eXBlLCB3aGljaCBiZWNvbWVzIG51bGwuCisgICAgICAgIChXZWJD
b3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNUZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpG
aWxlUmVhZGVyOjpyZWFkQXNEYXRhVVJMKTogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0ZpbGVT
dHJlYW1DbGllbnQuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlLgorCisgICAgICAgICogaHRt
bC9GaWxlU3RyZWFtUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbVByb3h5
OjpGaWxlU3RyZWFtUHJveHkpOiBNYWRlIGlubGluZSBhbmQgbW92ZWQKKyAgICAgICAgc29tZSBv
ZiB0aGUgY29kZSwgaW5jbHVkaW5nIHRoZSByZWYsIGludG8gdGhlIGNyZWF0ZSBmdW5jdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1Qcm94eTo6Y3JlYXRlKTogTW92ZWQgc29tZSBv
ZiB0aGUgY29kZSBmcm9tCisgICAgICAgIHRoZSBjb25zdHJ1Y3RvciBoZXJlLiBJdCdzIHNhZmUg
dG8gcmVmIG9uY2UgdGhlIG9iamVjdCBoYXMgYmVlbgorICAgICAgICBjcmVhdGVkIGFuZCBhZG9w
dGVkLgorCisgICAgICAgICogaHRtbC9GaWxlU3RyZWFtUHJveHkuaDogQ2hhbmdlZCBjcmVhdGUg
ZnVuY3Rpb24gdG8gbm8gbG9uZ2VyIGJlCisgICAgICAgIGlubGluZWQuIEFsc28gcmVtb3ZlZCBh
biB1bm5lZWRlZCBpbmNsdWRlLgorCisgICAgICAgICogcGFnZS9FdmVudFNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6RXZlbnRTb3VyY2UpOiBNYWRlIGlubGluZSwg
Y2hhbmdlZCBhcmd1bWVudHMKKyAgICAgICAgYW5kIG1vdmVkIGNvZGUgdGhhdCBpbnZvbHZlcyB0
aGUgbmVlZCB0byByZWYgdGhpcyBvYmplY3QgaW50byB0aGUKKyAgICAgICAgY3JlYXRlIGZ1bmN0
aW9uLiBBbHNvIG1vdmVkIGZhaWx1cmUgaGFuZGxpbmcgb3V0IHRoZXJlIHNpbmNlIGl0J3MKKyAg
ICAgICAgY2xlYW5lciB0byBoYXZlIGEgZnVuY3Rpb24gdGhhdCBmYWlscyB0aGFuIGEgY29uc3Ry
dWN0b3IuIEZvcgorICAgICAgICBleGFtcGxlLCB0aGUgZnVuY3Rpb24gY2FuIHJldHVybiAwLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmNyZWF0ZSk6IE1vdmVkIHNvbWUgb2YgdGhl
IGNvZGUgZnJvbSB0aGUKKyAgICAgICAgY29uc3RydWN0b3IgaGVyZS4KKworICAgICAgICAqIHBh
Z2UvRXZlbnRTb3VyY2UuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4gTWFkZSB0aGUKKyAg
ICAgICAgY3JlYXRpb24gZnVuY3Rpb24gbm9uLWlubGluZS4gQ2hhbmdlZCB0aGUgYXJndW1lbnRz
IHRvIHRoZSBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5j
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6U3RvcmFnZUFyZWFTeW5j
KTogTWFkZSBpbmxpbmUuIE1vdmVkCisgICAgICAgIGNvZGUgdGhhdCByZXF1aXJlcyByZWYnaW5n
IHRoaXMgb2JqZWN0IG91dCB0byB0aGUgY3JlYXRlIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZUFyZWFTeW5jOjpjcmVhdGUpOiBNb3ZlZCBzb21lIG9mIHRoZSBjb2RlIGZyb20g
dGhlCisgICAgICAgIGNvbnN0cnVjdG9yIGhlcmUuCisKKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VBcmVhU3luYy5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzLiBDaGFuZ2VkCisgICAgICAg
IHRoZSB0eXBlIG9mIG9uZSBvZiB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzIGZyb20gU3RyaW5n
IHRvCisgICAgICAgIGNvbnN0IFN0cmluZyYuCisKKyAgICAgICAgKiB3b3JrZXJzL1NoYXJlZFdv
cmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXI6OlNoYXJlZFdvcmtlcik6
IE1hZGUgaW5saW5lLiBNb3ZlZCBtb3N0IG9mCisgICAgICAgIHRoZSBzZXR1cCBjb2RlIG91dCBv
ZiBoZXJlIGludG8gdGhlIGNyZWF0ZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZFdvcmtlcjo6Y3JlYXRlKTogTW92ZWQgdGhlIGNvZGUgaGVyZS4KKworICAgICAgICAqIHdvcmtl
cnMvU2hhcmVkV29ya2VyLmg6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZXMuIE1hZGUgdGhlCisg
ICAgICAgIGNyZWF0ZSBmdW5jdGlvbiBub24taW5saW5lLiBNYXJrZWQgdGhlIHRvU2hhcmVkV29y
a2VyIG92ZXJyaWRlIHByaXZhdGUKKyAgICAgICAgdG8gY2F0Y2ggcGVvcGxlIGRvaW5nIGFuIHVu
bmVjZXNzYXJ5IHZpcnR1YWwgZnVuY3Rpb24gY2FsbCBpZiB0aGV5CisgICAgICAgIGFscmVhZHkg
aGF2ZSBhIFNoYXJlZFdvcmtlciouCisKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXI6Oldvcmtlcik6IE1hZGUgaW5saW5lLiBNb3ZlZCBtb3N0
IG9mIHRoZSBzZXR1cCBjb2RlCisgICAgICAgIG91dCBvZiBoZXJlIGludG8gdGhlIGNyZWF0ZSBm
dW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6Y3JlYXRlKTogTW92ZWQgdGhlIGNv
ZGUgaGVyZS4KKworICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmg6IE1hZGUgdGhlIGNyZWF0ZSBm
dW5jdGlvbiBub24taW5saW5lLiBDaGFuZ2VkCisgICAgICAgIHRoZSBhcmd1bWVudHMgdG8gdGhl
IGNvbnN0cnVjdG9yLgorCiAyMDEwLTA3LTAyICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2Vi
Q29yZS9odG1sL0ZpbGVSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9GaWxl
UmVhZGVyLmNwcAkocmV2aXNpb24gNjI0MDcpCisrKyBXZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDkgQEAgdm9pZCBGaWxlUmVhZGVyOjpzdG9w
KCkKIAogdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiogZmlsZUJsb2Ip
CiB7CisgICAgaWYgKCFmaWxlQmxvYikKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gRklYTUU6
IG5lZWRzIHRvIGhhbmRsZSBub24tZmlsZSBibG9icy4KICAgICBMT0coRmlsZUFQSSwgIkZpbGVS
ZWFkZXI6IHJlYWRpbmcgYXMgYmluYXJ5OiAlc1xuIiwgZmlsZUJsb2ItPnBhdGgoKS51dGY4KCku
ZGF0YSgpKTsKIApAQCAtOTMsNiArOTYsOSBAQCB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc0JpbmFy
eVN0cmluZyhCbG9iCiAKIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzVGV4dChCbG9iKiBmaWxlQmxv
YiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZykKIHsKKyAgICBpZiAoIWZpbGVCbG9iKQorICAgICAg
ICByZXR1cm47CisKICAgICAvLyBGSVhNRTogbmVlZHMgdG8gaGFuZGxlIG5vbi1maWxlIGJsb2Jz
LgogICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyB0ZXh0OiAlc1xuIiwg
ZmlsZUJsb2ItPnBhdGgoKS51dGY4KCkuZGF0YSgpKTsKIApAQCAtMTAzLDYgKzEwOSw5IEBAIHZv
aWQgRmlsZVJlYWRlcjo6cmVhZEFzVGV4dChCbG9iKiBmaWxlQmwKIAogdm9pZCBGaWxlUmVhZGVy
OjpyZWFkQXNEYXRhVVJMKEZpbGUqIGZpbGUpCiB7CisgICAgaWYgKCFmaWxlKQorICAgICAgICBy
ZXR1cm47CisKICAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgZGF0YSBV
Ukw6ICVzXG4iLCBmaWxlLT5wYXRoKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBtX2ZpbGVUeXBl
ID0gZmlsZS0+dHlwZSgpOwpJbmRleDogV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmlsZVN0cmVhbUNsaWVudC5oCShyZXZpc2lvbiA2
MjQwNykKKysrIFdlYkNvcmUvaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDYgQEAKICNpZiBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxF
X1dSSVRFUikKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9G
aWxlU3RyZWFtUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9GaWxlU3RyZWFt
UHJveHkuY3BwCShyZXZpc2lvbiA2MjQwNykKKysrIFdlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNSArNDQsMjQgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1GaWxlU3RyZWFtUHJveHk6OkZpbGVTdHJlYW1Qcm94eShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCitpbmxpbmUgRmls
ZVN0cmVhbVByb3h5OjpGaWxlU3RyZWFtUHJveHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQp
CiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX3N0cmVhbShGaWxlU3RyZWFtOjpjcmVh
dGUodGhpcykpCiB7Ci0gICAgLy8gSG9sZHMgYW4gZXh0cmEgcmVmIHNvIHRoYXQgdGhlIGluc3Rh
bmNlIHdpbGwgbm90IGdldCBkZWxldGVkIHdoaWxlIHRoZXJlIGNhbiBiZSBhbnkgdGFza3Mgb24g
dGhlIGZpbGUgdGhyZWFkLgotICAgIHJlZigpOworfQorCitQYXNzUmVmUHRyPEZpbGVTdHJlYW1Q
cm94eT4gRmlsZVN0cmVhbVByb3h5OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQoreworICAgIFJlZlB0cjxGaWxlU3RyZWFt
UHJveHk+IHByb3h5ID0gYWRvcHRSZWYobmV3IEZpbGVTdHJlYW1Qcm94eShjb250ZXh0LCBjbGll
bnQpKTsKKworICAgIC8vIEhvbGQgYW4gcmVmIHNvIHRoYXQgdGhlIGluc3RhbmNlIHdpbGwgbm90
IGdldCBkZWxldGVkIHdoaWxlIHRoZXJlIGFyZSB0YXNrcyBvbiB0aGUgZmlsZSB0aHJlYWQuCisg
ICAgLy8gVGhpcyBpcyBiYWxhbmNlZCBieSB0aGUgZGVyZWYgaW4gZGVyZWZQcm94eU9uQ29udGV4
dCBiZWxvdy4KKyAgICBwcm94eS0+cmVmKCk7CisKKyAgICBwcm94eS0+ZmlsZVRocmVhZCgpLT5w
b3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayhwcm94eS0+bV9zdHJlYW0uZ2V0KCksICZGaWxl
U3RyZWFtOjpzdGFydCkpOwogCi0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxl
VGhyZWFkVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06OnN0YXJ0KSk7CisgICAgcmV0
dXJuIHByb3h5LnJlbGVhc2UoKTsKIH0KIAogRmlsZVN0cmVhbVByb3h5Ojp+RmlsZVN0cmVhbVBy
b3h5KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmgJKHJldmlzaW9uIDYyNDA3KQorKysgV2Vi
Q29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMyw3ICszNCw2IEBA
CiAKICNpZiBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKIAotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGaWxlU3RyZWFtQ2xpZW50LmgiCiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpA
QCAtNTAsMTAgKzUwLDcgQEAgY2xhc3MgU3RyaW5nOwogLy8gQSBwcm94eSBtb2R1bGUgdGhhdCBj
YWxscyBjb3JyZXNwb25kaW5nIEZpbGVTdHJlYW0gbWV0aG9kcyBvbiB0aGUgZmlsZSB0aHJlYWQu
ICBOb3RlOiB5b3UgbXVzdCBjYWxsIHN0b3AoKSBmaXJzdCBhbmQgdGhlbiByZWxlYXNlIHRoZSBy
ZWZlcmVuY2UgdG8gZGVzdHJ1Y3QgdGhlIEZpbGVTdHJlYW1Qcm94eSBpbnN0YW5jZS4KIGNsYXNz
IEZpbGVTdHJlYW1Qcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVTdHJlYW1Qcm94eT4sIHB1
YmxpYyBGaWxlU3RyZWFtQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxG
aWxlU3RyZWFtUHJveHk+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBG
aWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEZpbGVTdHJlYW1Qcm94eShjb250ZXh0LCBjbGllbnQpKTsKLSAgICB9CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RmlsZVN0cmVhbVByb3h5PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEZpbGVTdHJlYW1DbGllbnQqKTsKICAgICB2aXJ0dWFsIH5GaWxlU3RyZWFtUHJveHkoKTsK
IAogICAgIHZvaWQgb3BlbkZvclJlYWQoQmxvYiogYmxvYik7CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
RXZlbnRTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5j
cHAJKHJldmlzaW9uIDYyNDA3KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJp
Y3Nzb24gQUIKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MywzMCArNTQsNDUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCB1
bnNpZ25lZCBsb25nIGxvbmcgRXZlbnRTb3VyY2U6OmRlZmF1bHRSZWNvbm5lY3REZWxheSA9IDMw
MDA7CiAKLUV2ZW50U291cmNlOjpFdmVudFNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCitpbmxpbmUgRXZl
bnRTb3VyY2U6OkV2ZW50U291cmNlKGNvbnN0IEtVUkwmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQorICAg
ICwgbV91cmwodXJsKQogICAgICwgbV9zdGF0ZShDT05ORUNUSU5HKQorICAgICwgbV9kZWNvZGVy
KFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsICJVVEYtOCIpKQogICAg
ICwgbV9yZWNvbm5lY3RUaW1lcih0aGlzLCAmRXZlbnRTb3VyY2U6OnJlY29ubmVjdFRpbWVyRmly
ZWQpCiAgICAgLCBtX2Rpc2NhcmRUcmFpbGluZ05ld2xpbmUoZmFsc2UpCiAgICAgLCBtX2ZhaWxT
aWxlbnRseShmYWxzZSkKICAgICAsIG1fcmVxdWVzdEluRmxpZ2h0KGZhbHNlKQogICAgICwgbV9y
ZWNvbm5lY3REZWxheShkZWZhdWx0UmVjb25uZWN0RGVsYXkpCisgICAgLCBtX29yaWdpbihjb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKQogewotICAgIGlmICh1cmwuaXNFbXB0
eSgpIHx8ICEobV91cmwgPSBjb250ZXh0LT5jb21wbGV0ZVVSTCh1cmwpKS5pc1ZhbGlkKCkpIHsK
K30KKworUGFzc1JlZlB0cjxFdmVudFNvdXJjZT4gRXZlbnRTb3VyY2U6OmNyZWF0ZShjb25zdCBT
dHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhf
RVJSOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAvLyBG
SVhNRTogc2hvdWxkIHN1cHBvcnQgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzCi0gICAgaWYgKCFzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QobV91cmwp
KSB7CisKKyAgICBLVVJMIGZ1bGxVUkwgPSBjb250ZXh0LT5jb21wbGV0ZVVSTCh1cmwpOworICAg
IGlmICghZnVsbFVSTC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogU2hvdWxkIHN1cHBvcnQgYXQg
bGVhc3Qgc29tZSBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuCisgICAgaWYgKCFjb250ZXh0LT5zZWN1
cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KGZ1bGxVUkwpKSB7CiAgICAgICAgIGVjID0gU0VDVVJJ
VFlfRVJSOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAg
IG1fb3JpZ2luID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50
b1N0cmluZygpOwotICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgi
dGV4dC9wbGFpbiIsICJVVEYtOCIpOworICAgIFJlZlB0cjxFdmVudFNvdXJjZT4gc291cmNlID0g
YWRvcHRSZWYobmV3IEV2ZW50U291cmNlKGZ1bGxVUkwsIGNvbnRleHQpKTsKIAotICAgIHNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKLSAgICBjb25uZWN0KCk7CisgICAgc291cmNlLT5zZXRQZW5k
aW5nQWN0aXZpdHkoc291cmNlLmdldCgpKTsKKyAgICBzb3VyY2UtPmNvbm5lY3QoKTsKKworICAg
IHJldHVybiBzb3VyY2UucmVsZWFzZSgpOwogfQogCiBFdmVudFNvdXJjZTo6fkV2ZW50U291cmNl
KCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9FdmVudFNvdXJjZS5oCShyZXZpc2lvbiA2MjQwNykKKysrIFdlYkNvcmUvcGFnZS9F
dmVudFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOSBFcmljc3NvbiBBQgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDE1ICszNiwxMCBAQAogI2lmIEVOQUJMRShF
VkVOVFNPVVJDRSkKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkF0
b21pY1N0cmluZ0hhc2guaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXZl
bnRUYXJnZXQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRl
ckNsaWVudC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCi0KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNTYsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBjbGFzcyBFdmVudFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEV2ZW50
U291cmNlPiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwcml2YXRlIFRocmVhZGFibGVMb2FkZXJDbGll
bnQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RXZlbnRTb3VyY2U+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBFdmVudFNvdXJjZSh1cmwsIGNvbnRleHQsIGVjKSk7IH0KKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RXZlbnRTb3VyY2U+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybCwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdmlydHVhbCB+
RXZlbnRTb3VyY2UoKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBsb25n
IGRlZmF1bHRSZWNvbm5lY3REZWxheTsKQEAgLTg2LDE3ICs4MiwxNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKICAgICBwcml2YXRlOgotICAg
ICAgICBFdmVudFNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgICAgICBFdmVudFNvdXJjZShjb25z
dCBLVVJMJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVm
RXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldERh
dGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSog
ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVk
IGxvbmcpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CiAKICAg
ICAgICAgdm9pZCBjb25uZWN0KCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFT
eW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNw
cAkocmV2aXNpb24gNjI0MDcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksMTIgKzQ5LDcgQEAgc3RhdGljIGNvbnN0
IGRvdWJsZSBTdG9yYWdlU3luY0ludGVydmFsIAogLy8gbXVjaCBoYXJkZXIgdG8gc3RhcnZlIHRo
ZSByZXN0IG9mIExvY2FsU3RvcmFnZSBhbmQgdGhlIE9TJ3MgSU8gc3Vic3lzdGVtIGluIGdlbmVy
YWwuCiBzdGF0aWMgY29uc3QgaW50IE1heGl1bUl0ZW1zVG9TeW5jID0gMTAwOwogCi1QYXNzUmVm
UHRyPFN0b3JhZ2VBcmVhU3luYz4gU3RvcmFnZUFyZWFTeW5jOjpjcmVhdGUoUGFzc1JlZlB0cjxT
dG9yYWdlU3luY01hbmFnZXI+IHN0b3JhZ2VTeW5jTWFuYWdlciwgUGFzc1JlZlB0cjxTdG9yYWdl
QXJlYUltcGw+IHN0b3JhZ2VBcmVhLCBTdHJpbmcgZGF0YWJhc2VJZGVudGlmaWVyKQotewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWFTeW5jKHN0b3JhZ2VTeW5jTWFuYWdlciwg
c3RvcmFnZUFyZWEsIGRhdGFiYXNlSWRlbnRpZmllcikpOwotfQotCi1TdG9yYWdlQXJlYVN5bmM6
OlN0b3JhZ2VBcmVhU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3RvcmFnZVN5
bmNNYW5hZ2VyLCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEsIFN0cmlu
ZyBkYXRhYmFzZUlkZW50aWZpZXIpCitpbmxpbmUgU3RvcmFnZUFyZWFTeW5jOjpTdG9yYWdlQXJl
YVN5bmMoUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN0b3JhZ2VTeW5jTWFuYWdlciwg
UGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IHN0b3JhZ2VBcmVhLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlSWRlbnRpZmllcikKICAgICA6IG1fc3luY1RpbWVyKHRoaXMsICZTdG9yYWdlQXJlYVN5
bmM6OnN5bmNUaW1lckZpcmVkKQogICAgICwgbV9pdGVtc0NsZWFyZWQoZmFsc2UpCiAgICAgLCBt
X2ZpbmFsU3luY1NjaGVkdWxlZChmYWxzZSkKQEAgLTcwLDExICs2NSwxOCBAQCBTdG9yYWdlQXJl
YVN5bmM6OlN0b3JhZ2VBcmVhU3luYyhQYXNzUmVmCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYSk7CiAgICAgQVNTRVJUKG1fc3luY01hbmFnZXIp
OworfQorCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gU3RvcmFnZUFyZWFTeW5jOjpjcmVh
dGUoUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN0b3JhZ2VTeW5jTWFuYWdlciwgUGFz
c1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IHN0b3JhZ2VBcmVhLCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlSWRlbnRpZmllcikKK3sKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBhcmVhID0gYWRv
cHRSZWYobmV3IFN0b3JhZ2VBcmVhU3luYyhzdG9yYWdlU3luY01hbmFnZXIsIHN0b3JhZ2VBcmVh
LCBkYXRhYmFzZUlkZW50aWZpZXIpKTsKIAogICAgIC8vIEZJWE1FOiBJZiBpdCBjYW4ndCBpbXBv
cnQsIHRoZW4gdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2aW9yIHNob3VsZCBiZSB0aGF0IG9mIHBy
aXZhdGUgYnJvd3NpbmcsCi0gICAgLy8gbm90IHNpbGVudGx5IGlnbm9yaW5nIGl0LiAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODk0Ci0gICAgaWYgKCFtX3N5bmNN
YW5hZ2VyLT5zY2hlZHVsZUltcG9ydCh0aGlzKSkKLSAgICAgICAgbV9pbXBvcnRDb21wbGV0ZSA9
IHRydWU7CisgICAgLy8gbm90IHNpbGVudGx5IGlnbm9yaW5nIGl0LiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4OTQKKyAgICBpZiAoIWFyZWEtPm1fc3luY01hbmFn
ZXItPnNjaGVkdWxlSW1wb3J0KGFyZWEuZ2V0KCkpKQorICAgICAgICBhcmVhLT5tX2ltcG9ydENv
bXBsZXRlID0gdHJ1ZTsKKworICAgIHJldHVybiBhcmVhLnJlbGVhc2UoKTsKIH0KIAogU3RvcmFn
ZUFyZWFTeW5jOjp+U3RvcmFnZUFyZWFTeW5jKCkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFT
eW5jLmgJKHJldmlzaW9uIDYyNDA3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCiAKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCkBAIC00Miw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNz
IFN0b3JhZ2VBcmVhU3luYyA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3JhZ2VBcmVhU3luYz4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBj
cmVhdGUoUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN0b3JhZ2VTeW5jTWFuYWdlciwg
UGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IHN0b3JhZ2VBcmVhLCBTdHJpbmcgZGF0YWJhc2VJ
ZGVudGlmaWVyKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBj
cmVhdGUoUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+LCBQYXNzUmVmUHRyPFN0b3JhZ2VB
cmVhSW1wbD4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKTsKICAgICAgICAgflN0
b3JhZ2VBcmVhU3luYygpOwogCiAgICAgICAgIHZvaWQgc2NoZWR1bGVGaW5hbFN5bmMoKTsKQEAg
LTUyLDcgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNjaGVkdWxl
Q2xlYXIoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0b3JhZ2VBcmVhU3luYyhQYXNzUmVm
UHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3RvcmFnZVN5bmNNYW5hZ2VyLCBQYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEsIFN0cmluZyBkYXRhYmFzZUlkZW50aWZpZXIpOwor
ICAgICAgICBTdG9yYWdlQXJlYVN5bmMoUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+LCBQ
YXNzUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlm
aWVyKTsKIAogICAgICAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFt
ZSogc291cmNlRnJhbWUpOwogCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmNwcAkocmV2aXNp
b24gNjI0MDcpCisrKyBXZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CkBAIC00MiwyMiArNDMsMzIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TaGFyZWRXb3Jr
ZXI6OlNoYXJlZFdvcmtlcihjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK2lubGlu
ZSBTaGFyZWRXb3JrZXI6OlNoYXJlZFdvcmtlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQogICAgIDogQWJzdHJhY3RXb3JrZXIoY29udGV4dCkKIHsKLSAgICBSZWZQdHI8TWVzc2Fn
ZUNoYW5uZWw+IGNoYW5uZWwgPSBNZXNzYWdlQ2hhbm5lbDo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7Ci0gICAgbV9wb3J0ID0gY2hhbm5lbC0+cG9ydDEoKTsKK30KKworUGFzc1Jl
ZlB0cjxTaGFyZWRXb3JrZXI+IFNoYXJlZFdvcmtlcjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIG5hbWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxTaGFyZWRXb3JrZXI+IHdvcmtlciA9IGFk
b3B0UmVmKG5ldyBTaGFyZWRXb3JrZXIoY29udGV4dCkpOworCisgICAgUmVmUHRyPE1lc3NhZ2VD
aGFubmVsPiBjaGFubmVsID0gTWVzc2FnZUNoYW5uZWw6OmNyZWF0ZShjb250ZXh0KTsKKyAgICB3
b3JrZXItPm1fcG9ydCA9IGNoYW5uZWwtPnBvcnQxKCk7CiAgICAgT3duUHRyPE1lc3NhZ2VQb3J0
Q2hhbm5lbD4gcmVtb3RlUG9ydCA9IGNoYW5uZWwtPnBvcnQyKCktPmRpc2VudGFuZ2xlKGVjKTsK
LSAgICBBU1NFUlQoIWVjKTsKKyAgICBBU1NFUlQocmVtb3RlUG9ydCk7CisKKyAgICBLVVJMIHNj
cmlwdFVSTCA9IHdvcmtlci0+cmVzb2x2ZVVSTCh1cmwsIGVjKTsKKyAgICBpZiAoc2NyaXB0VVJM
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTaGFyZWRXb3JrZXJSZXBvc2l0
b3J5Ojpjb25uZWN0KHdvcmtlci5nZXQoKSwgcmVtb3RlUG9ydC5yZWxlYXNlKCksIHNjcmlwdFVS
TCwgbmFtZSwgZWMpOwogCi0gICAgS1VSTCBzY3JpcHRVcmwgPSByZXNvbHZlVVJMKHVybCwgZWMp
OwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotICAgIFNoYXJlZFdvcmtlclJlcG9zaXRv
cnk6OmNvbm5lY3QodGhpcywgcmVtb3RlUG9ydC5yZWxlYXNlKCksIHNjcmlwdFVybCwgbmFtZSwg
ZWMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvciA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpKQotICAgICAgICBpbnNwZWN0b3ItPmRpZENyZWF0ZVdvcmtlcihhc0lEKCksIHNjcmlwdFVy
bC5zdHJpbmcoKSwgdHJ1ZSk7CisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ciA9IGNvbnRleHQtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICAgICAgaW5zcGVjdG9yLT5k
aWRDcmVhdGVXb3JrZXIod29ya2VyLT5hc0lEKCksIHNjcmlwdFVSTC5zdHJpbmcoKSwgdHJ1ZSk7
CiAjZW5kaWYKKworICAgIHJldHVybiB3b3JrZXIucmVsZWFzZSgpOwogfQogCiBTaGFyZWRXb3Jr
ZXI6On5TaGFyZWRXb3JrZXIoKQpJbmRleDogV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXIuaAkocmV2aXNpb24g
NjI0MDcpCisrKyBXZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAt
MzMsMjYgKzM0LDIxIEBACiAKICNpbmNsdWRlICJBYnN0cmFjdFdvcmtlci5oIgogCi0jaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KICNpZiBFTkFC
TEUoU0hBUkVEX1dPUktFUlMpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFNo
YXJlZFdvcmtlciA6IHB1YmxpYyBBYnN0cmFjdFdvcmtlciB7CiAgICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBF
eGNlcHRpb25Db2RlJiBlYykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTaGFyZWRXb3JrZXIodXJsLCBuYW1lLCBjb250ZXh0LCBlYykpOwotICAgICAgICB9Ci0g
ICAgICAgIH5TaGFyZWRXb3JrZXIoKTsKLSAgICAgICAgTWVzc2FnZVBvcnQqIHBvcnQoKSBjb25z
dCB7IHJldHVybiBtX3BvcnQuZ2V0KCk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hh
cmVkV29ya2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdmlydHVh
bCB+U2hhcmVkV29ya2VyKCk7CiAKLSAgICAgICAgdmlydHVhbCBTaGFyZWRXb3JrZXIqIHRvU2hh
cmVkV29ya2VyKCkgeyByZXR1cm4gdGhpczsgfQorICAgICAgICBNZXNzYWdlUG9ydCogcG9ydCgp
IGNvbnN0IHsgcmV0dXJuIG1fcG9ydC5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
U2hhcmVkV29ya2VyKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIFNoYXJlZFdvcmtl
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKKyAgICAgICAgdmlydHVhbCBTaGFyZWRXb3Jr
ZXIqIHRvU2hhcmVkV29ya2VyKCkgeyByZXR1cm4gdGhpczsgfQogCiAgICAgICAgIFJlZlB0cjxN
ZXNzYWdlUG9ydD4gbV9wb3J0OwogICAgIH07CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAkocmV2aXNpb24g
NjI0MDcpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTAsMjEgKzUwLDMyIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV29ya2VyOjpXb3JrZXIoY29uc3QgU3RyaW5nJiB1cmws
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoraW5s
aW5lIFdvcmtlcjo6V29ya2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAg
OiBBYnN0cmFjdFdvcmtlcihjb250ZXh0KQogICAgICwgbV9jb250ZXh0UHJveHkoV29ya2VyQ29u
dGV4dFByb3h5OjpjcmVhdGUodGhpcykpCiB7Ci0gICAgS1VSTCBzY3JpcHRVUkwgPSByZXNvbHZl
VVJMKHVybCwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOworfQorCitQYXNzUmVm
UHRyPFdvcmtlcj4gV29ya2VyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxX
b3JrZXI+IHdvcmtlciA9IGFkb3B0UmVmKG5ldyBXb3JrZXIoY29udGV4dCkpOworCisgICAgS1VS
TCBzY3JpcHRVUkwgPSB3b3JrZXItPnJlc29sdmVVUkwodXJsLCBlYyk7CisgICAgaWYgKHNjcmlw
dFVSTC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgd29ya2VyLT5tX3Njcmlw
dExvYWRlciA9IG5ldyBXb3JrZXJTY3JpcHRMb2FkZXIoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VGFy
Z2V0SXNXb3JrZXIpOworICAgIHdvcmtlci0+bV9zY3JpcHRMb2FkZXItPmxvYWRBc3luY2hyb25v
dXNseShjb250ZXh0LCBzY3JpcHRVUkwsIERlbnlDcm9zc09yaWdpblJlcXVlc3RzLCB3b3JrZXIu
Z2V0KCkpOworCisgICAgLy8gVGhlIHdvcmtlciBjb250ZXh0IGRvZXMgbm90IGV4aXN0IHdoaWxl
IGxvYWRpbmcsIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIHdvcmtlciBvYmplY3QgaXMgbm90
IGNvbGxlY3RlZCwgbm9yIGFyZSBpdHMgZXZlbnQgbGlzdGVuZXJzLgorICAgIHdvcmtlci0+c2V0
UGVuZGluZ0FjdGl2aXR5KHdvcmtlci5nZXQoKSk7CiAKLSAgICBtX3NjcmlwdExvYWRlciA9IG5l
dyBXb3JrZXJTY3JpcHRMb2FkZXIoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VGFyZ2V0SXNXb3JrZXIp
OwotICAgIG1fc2NyaXB0TG9hZGVyLT5sb2FkQXN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCBzY3JpcHRVUkwsIERlbnlDcm9zc09yaWdpblJlcXVlc3RzLCB0aGlzKTsKLSAg
ICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7ICAvLyBUaGUgd29ya2VyIGNvbnRleHQgZG9lcyBu
b3QgZXhpc3Qgd2hpbGUgbG9hZGluZywgc28gd2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgd29ya2Vy
IG9iamVjdCBpcyBub3QgY29sbGVjdGVkLCBhcyB3ZWxsIGFzIGl0cyBldmVudCBsaXN0ZW5lcnMu
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5z
cGVjdG9yID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkp
Ci0gICAgICAgIGluc3BlY3Rvci0+ZGlkQ3JlYXRlV29ya2VyKGFzSUQoKSwgc2NyaXB0VVJMLnN0
cmluZygpLCBmYWxzZSk7CisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9
IGNvbnRleHQtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICAgICAgaW5zcGVjdG9yLT5kaWRD
cmVhdGVXb3JrZXIod29ya2VyLT5hc0lEKCksIHNjcmlwdFVSTC5zdHJpbmcoKSwgZmFsc2UpOwog
I2VuZGlmCisKKyAgICByZXR1cm4gd29ya2VyLnJlbGVhc2UoKTsKIH0KIAogV29ya2VyOjp+V29y
a2VyKCkKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3dvcmtlcnMvV29ya2VyLmgJKHJldmlzaW9uIDYyNDA3KQorKysgV2ViQ29yZS93b3JrZXJz
L1dvcmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MywxMyArNTMsMTMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgV29ya2VyIDogcHVibGljIEFic3RyYWN0V29ya2VyLCBwcml2YXRl
IFdvcmtlclNjcmlwdExvYWRlckNsaWVudCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXb3JrZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXb3JrZXIodXJsLCBjb250ZXh0LCBlYykpOyB9Ci0gICAgICAgIH5Xb3JrZXIoKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmws
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZpcnR1
YWwgfldvcmtlcigpOwogCiAgICAgICAgIHZpcnR1YWwgV29ya2VyKiB0b1dvcmtlcigpIHsgcmV0
dXJuIHRoaXM7IH0KIAotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgICAgICB2b2lkIHBvc3RNZXNz
YWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgTWVzc2FnZVBvcnRB
cnJheSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
ICAgICB2b2lkIHBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBt
ZXNzYWdlLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAg
ICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSB1cGRhdGUgdGhlIE9iakMgYmluZGluZ3Mg
KGJ1ZyAjMjg3NzQpLgogICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBNZXNzYWdlUG9ydCosIEV4Y2VwdGlvbkNvZGUmKTsK
IApAQCAtNzIsNyArNzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIobWVzc2FnZSk7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBXb3JrZXIoY29uc3QgU3RyaW5nJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICAgICAgV29ya2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoKTsKIAo=
</data>
<flag name="review"
          id="47894"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>