<?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>27421</bug_id>
          
          <creation_ts>2009-07-18 21:35:03 -0700</creation_ts>
          <short_desc>[V8] Factor V8ConsoleMessage out of V8Proxy</short_desc>
          <delta_ts>2009-07-19 20:56:40 -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>Evangelism</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>132973</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-18 21:35:03 -0700</bug_when>
    <thetext>patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132974</commentid>
    <comment_count>1</comment_count>
      <attachid>33034</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-18 21:36:35 -0700</bug_when>
    <thetext>Created attachment 33034
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132975</commentid>
    <comment_count>2</comment_count>
      <attachid>33035</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-18 21:42:18 -0700</bug_when>
    <thetext>Created attachment 33035
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132976</commentid>
    <comment_count>3</comment_count>
      <attachid>33036</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-18 23:13:28 -0700</bug_when>
    <thetext>Created attachment 33036
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133055</commentid>
    <comment_count>4</comment_count>
      <attachid>33036</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-19 19:24:43 -0700</bug_when>
    <thetext>Comment on attachment 33036
patch

This one was a lot more understandable to me.  In general, it looks great. Just a few nits and but r- for the one concern to address.



&gt; Index: WebCore/bindings/v8/V8ConsoleMessage.cpp
&gt; +    for (int i = 0; i &lt; size; ++i)
&gt; +        delayedMessages-&gt;at(i).dispatchNow(page);

I&apos;m concerned about the call to dispatchNow because it in turn calls V8ConsoleMessage::processDelayed.

At first, I thought this was ok because no new messages should get added to the console but then I saw this note about dispatchNow
   48         // Add a message to the console. May end up calling JavaScript code
   49         // indirectly through the inspector so only call this function when
   50         // it is safe to do allocations.
so it looks like it can end up running JavaScript (which may result in added messages?).

If that is true, then it would seem good if this code called
   console-&gt;addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, m_string, m_lineNumber, m_source);
more directly in some manner (without calling processDelayed).


&gt; + }  // namespace WebCore

Extra space before the // here.


&gt; Index: WebCore/bindings/v8/V8ConsoleMessage.h
&gt; +        static void handler(v8::Handle&lt;v8::Message&gt; message, v8::Handle&lt;v8::Value&gt; data);

&quot;message&quot; param name looks redundant.

&gt; +        // All delayed messages are stored in this vector. If the vector
&gt; +        // is NULL, there are no delayed messages.

Since no NULLs are in the code, it would be good just to make this comment say &quot;0&quot; as well.

&gt; + }

Change to &quot;} // namespace WebCore&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133060</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-19 19:55:22 -0700</bug_when>
    <thetext>&gt; &gt; Index: WebCore/bindings/v8/V8ConsoleMessage.cpp
&gt; &gt; +    for (int i = 0; i &lt; size; ++i)
&gt; &gt; +        delayedMessages-&gt;at(i).dispatchNow(page);
&gt; 
&gt; I&apos;m concerned about the call to dispatchNow because it in turn calls
&gt; V8ConsoleMessage::processDelayed.
&gt; 
&gt; At first, I thought this was ok because no new messages should get added to the
&gt; console but then I saw this note about dispatchNow
&gt;    48         // Add a message to the console. May end up calling JavaScript
&gt; code
&gt;    49         // indirectly through the inspector so only call this function
&gt; when
&gt;    50         // it is safe to do allocations.
&gt; so it looks like it can end up running JavaScript (which may result in added
&gt; messages?).

I think this stuff is all fine.  The only one we have to worry about is |dispatchLater|.  We&apos;re not supposed to call JavaScript while running that function.  Both dispatchNow and processDelayed are supposed to be called when it&apos;s safe to do allocations.

&gt; &gt; + }  // namespace WebCore
&gt; 
&gt; Extra space before the // here.

Fixed.

&gt; &gt; Index: WebCore/bindings/v8/V8ConsoleMessage.h
&gt; &gt; +        static void handler(v8::Handle&lt;v8::Message&gt; message, v8::Handle&lt;v8::Value&gt; data);
&gt; 
&gt; &quot;message&quot; param name looks redundant.

Fixed.

&gt; &gt; +        // All delayed messages are stored in this vector. If the vector
&gt; &gt; +        // is NULL, there are no delayed messages.
&gt; 
&gt; Since no NULLs are in the code, it would be good just to make this comment say
&gt; &quot;0&quot; as well.

Fixed.

&gt; &gt; + }
&gt; 
&gt; Change to &quot;} // namespace WebCore&quot;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133061</commentid>
    <comment_count>6</comment_count>
      <attachid>33070</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-19 19:56:06 -0700</bug_when>
    <thetext>Created attachment 33070
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133066</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-19 20:26:05 -0700</bug_when>
    <thetext>&gt; I think this stuff is all fine. 

But couldn&apos;t it lead to console messages getting display in a (wrong and) confusing order. 

Message 1 and Message 2 are in the queue.
Message 3 gets created and message3.dispatchNow() is called.

Message 1 gets dispatched and results in js being executed which posts another message (Message 4  -- I&apos;m not sure if the js can do something which causes another message to get posted, but it seems like any messages happening here should get posted.)

Message 2 is about to get dispatched but first processes messages in the queue, so Message 4 goes to the console.

End result:

Message 1
Message 4
Message 2
Message 3

Actually, it looks like this can&apos;t happen currently. Message 4 would actually happen immediately without getting posted, and the new code is more robust to possible badness by taking ownership of the pointer immediately and setting it to 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133069</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-19 20:56:40 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/WebCore.gypi
	A	WebCore/bindings/v8/V8ConsoleMessage.cpp
	A	WebCore/bindings/v8/V8ConsoleMessage.h
	M	WebCore/bindings/v8/V8Proxy.cpp
Committed r46106
	M	WebCore/ChangeLog
	M	WebCore/WebCore.gypi
	A	WebCore/bindings/v8/V8ConsoleMessage.cpp
	M	WebCore/bindings/v8/V8Proxy.cpp
	A	WebCore/bindings/v8/V8ConsoleMessage.h
r46106 = d6c8a595074589399f53fa597a1a895bbab8b29d (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46106</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33034</attachid>
            <date>2009-07-18 21:36:35 -0700</date>
            <delta_ts>2009-07-18 21:41:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug-27421-20090718213634.patch</filename>
            <type>text/plain</type>
            <size>19843</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjEwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDktMDctMTggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhd
IEZhY3RvciBWOENvbnNvbGVNZXNzYWdlIG91dCBvZiBWOFByb3h5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQyMQorCisgICAgICAgIE5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9WOENvbnNvbGVNZXNzYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOENv
bnNvbGVNZXNzYWdlOjpWOENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q29u
c29sZU1lc3NhZ2U6OmRpc3BhdGNoTm93KToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q29uc29sZU1l
c3NhZ2U6OmRpc3BhdGNoTGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhDb25zb2xlTWVzc2Fn
ZTo6cHJvY2Vzc0RlbGF5ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhDb25zb2xlTWVzc2FnZTo6
aGFuZGxlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhDb25zb2xlTWVzc2FnZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q29uc29sZU1lc3NhZ2U6OlNjb3BlOjpTY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOENvbnNvbGVNZXNzYWdlOjpTY29wZTo6flNjb3BlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvZ0luZm8p
OgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0VW5zYWZlQWNjZXNzVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6VjhQcm94eTo6cnVuU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNh
bGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpuZXdJbnN0YW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4UHJveHk6OnByb2Nlc3NDb25zb2xlTWVzc2FnZXMpOgorCiAyMDA5LTA3LTE4
ICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA0NjA5MSkKKysrIFdl
YkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNiArNjkzLDggQEAKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhDb2xsZWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhDb2xs
ZWN0aW9uLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuY3Bw
JywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOENvbnNvbGVNZXNzYWdlLmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhET01NYXAuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNw
cCcsCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb25zb2xlTWVzc2FnZS5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJWOENvbnNvbGVNZXNzYWdlLmgiCisKKyNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAi
RE9NV2luZG93LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJPd25QdHIuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94
eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZlY3RvcjxWOENvbnNvbGVNZXNzYWdlPiog
VjhDb25zb2xlTWVzc2FnZTo6bV9kZWxheWVkTWVzc2FnZXMgPSAwOworCitWOENvbnNvbGVNZXNz
YWdlOjpWOENvbnNvbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQorICAgICA6IG1fc3RyaW5nKHN0cmluZykK
KyAgICAgLCBtX3NvdXJjZUlEKHNvdXJjZUlEKQorICAgICAsIG1fbGluZU51bWJlcihsaW5lTnVt
YmVyKQoreworfQorCit2b2lkIFY4Q29uc29sZU1lc3NhZ2U6OmRpc3BhdGNoTm93KFBhZ2UqIHBh
Z2UpCit7CisgICAgQVNTRVJUKHBhZ2UpOworCisgICAgLy8gUHJvY2VzcyBhbnkgZGVsYXllZCBt
ZXNzYWdlcyB0byBtYWtlIHN1cmUgdGhhdCBtZXNzYWdlcworICAgIC8vIGFwcGVhciBpbiB0aGUg
cmlnaHQgb3JkZXIgaW4gdGhlIGNvbnNvbGUuCisgICAgcHJvY2Vzc0RlbGF5ZWQoKTsKKworICAg
IENvbnNvbGUqIGNvbnNvbGUgPSBwYWdlLT5tYWluRnJhbWUoKS0+ZG9tV2luZG93KCktPmNvbnNv
bGUoKTsKKyAgICBjb25zb2xlLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2Fn
ZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCBtX3N0cmluZywgbV9saW5lTnVtYmVyLCBtX3NvdXJj
ZUlEKTsKK30KKwordm9pZCBWOENvbnNvbGVNZXNzYWdlOjpkaXNwYXRjaExhdGVyKCkKK3sKKyAg
ICBpZiAoIW1fZGVsYXllZE1lc3NhZ2VzKSB7CisgICAgICAgIC8vIEFsbG9jYXRlIGEgdmVjdG9y
IGZvciB0aGUgZGVsYXllZCBtZXNzYWdlcy4gV2lsbCBiZQorICAgICAgICAvLyBkZWFsbG9jYXRl
ZCB3aGVuIHRoZSBkZWxheWVkIG1lc3NhZ2VzIGFyZSBwcm9jZXNzZWQKKyAgICAgICAgLy8gaW4g
cHJvY2Vzc0RlbGF5ZWQoKS4KKyAgICAgICAgbV9kZWxheWVkTWVzc2FnZXMgPSBuZXcgVmVjdG9y
PFY4Q29uc29sZU1lc3NhZ2U+KCk7CisgICAgfQorCisgICAgbV9kZWxheWVkTWVzc2FnZXMtPmFw
cGVuZCgqdGhpcyk7Cit9CisKK3ZvaWQgVjhDb25zb2xlTWVzc2FnZTo6cHJvY2Vzc0RlbGF5ZWQo
KQoreworICAgIGlmICghbV9kZWxheWVkTWVzc2FnZXMpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBkZWxheWVkIHZlY3RvciB0byBhdm9pZCByZS1lbnRy
YW5jeSBpc3N1ZXMuCisgICAgT3duUHRyPFZlY3RvcjxWOENvbnNvbGVNZXNzYWdlPiA+IGRlbGF0
ZWRNZXNzYWdlcyhtX2RlbGF5ZWRNZXNzYWdlcyk7CisgICAgbV9kZWxheWVkTWVzc2FnZXMgPSAw
OworCisgICAgLy8gSWYgd2UgaGF2ZSBhIGRlbGF5ZWQgdmVjdG9yIGl0IGNhbm5vdCBiZSBlbXB0
eS4KKyAgICBBU1NFUlQoIW1fZGVsYXllZE1lc3NhZ2VzLT5pc0VtcHR5KCkpOworCisgICAgLy8g
QWRkIHRoZSBkZWxheWVkIG1lc3NhZ2VzIHRvIHRoZSBwYWdlIG9mIHRoZSBhY3RpdmUKKyAgICAv
LyBjb250ZXh0LiBJZiB0aGF0IGZvciBzb21lIGJpemFycmUgcmVhc29uIGRvZXMgbm90CisgICAg
Ly8gZXhpc3QsIHdlIGNsZWFyIHRoZSBsaXN0IG9mIGRlbGF5ZWQgbWVzc2FnZXMgdG8gYXZvaWQK
KyAgICAvLyBwb3N0aW5nIG1lc3NhZ2VzLiBXZSBzdGlsbCBkZWFsbG9jYXRlIHRoZSB2ZWN0b3Iu
CisgICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250
ZXh0KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIFBhZ2UqIHBhZ2Ug
PSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gSXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgZGVsYXllZCBtZXNzYWdlcyBhbmQgYWRkIHRoZW0K
KyAgICAvLyB0byB0aGUgY29uc29sZS4KKyAgICBjb25zdCBpbnQgc2l6ZSA9IGRlbGF0ZWRNZXNz
YWdlcy0+c2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAg
ICBkZWxhdGVkTWVzc2FnZXMtPmF0KGkpLmRpc3BhdGNoTm93KHBhZ2UpOworfQorCit2b2lkIFY4
Q29uc29sZU1lc3NhZ2U6OmhhbmRsZXIodjg6OkhhbmRsZTx2ODo6TWVzc2FnZT4gbWVzc2FnZSwg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGRhdGEpCit7CisgICAgLy8gVXNlIHRoZSBmcmFtZSB3aGVy
ZSBKYXZhU2NyaXB0IGlzIGNhbGxlZCBmcm9tLgorICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6
OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybjsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBh
Z2UpCisgICAgICAgIHJldHVybjsKKworICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gZXJyb3JN
ZXNzYWdlU3RyaW5nID0gbWVzc2FnZS0+R2V0KCk7CisgICAgQVNTRVJUKCFlcnJvck1lc3NhZ2VT
dHJpbmcuSXNFbXB0eSgpKTsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gdG9XZWJDb3JlU3Ry
aW5nKGVycm9yTWVzc2FnZVN0cmluZyk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVz
b3VyY2VOYW1lID0gbWVzc2FnZS0+R2V0U2NyaXB0UmVzb3VyY2VOYW1lKCk7CisgICAgYm9vbCB1
c2VVUkwgPSByZXNvdXJjZU5hbWUuSXNFbXB0eSgpIHx8ICFyZXNvdXJjZU5hbWUtPklzU3RyaW5n
KCk7CisgICAgU3RyaW5nIHJlc291cmNlTmFtZVN0cmluZyA9IHVzZVVSTCA/IGZyYW1lLT5kb2N1
bWVudCgpLT51cmwoKSA6IHRvV2ViQ29yZVN0cmluZyhyZXNvdXJjZU5hbWUpOworICAgIFY4Q29u
c29sZU1lc3NhZ2UgY29uc29sZU1lc3NhZ2UoZXJyb3JNZXNzYWdlLCByZXNvdXJjZU5hbWVTdHJp
bmcsIG1lc3NhZ2UtPkdldExpbmVOdW1iZXIoKSk7CisgICAgY29uc29sZU1lc3NhZ2UuZGlzcGF0
Y2hOb3cocGFnZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhDb25zb2xlTWVzc2FnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBWOENvbnNvbGVNZXNzYWdlX2gKKyNkZWZpbmUgVjhDb25zb2xlTWVzc2FnZV9o
CisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3Mg
UGFnZTsKKworICAgIC8vIFY4Q29uc29sZU1lc3NhZ2UgZW5jYXBzdWxhdGVzIGV2ZXJ5dGhpbmcg
bmVlZGVkIHRvCisgICAgLy8gbG9nIG1lc3NhZ2VzIG9yaWdpbmF0aW5nIGZyb20gSmF2YVNjcmlw
dCB0byB0aGUgY29uc29sZS4KKyAgICBjbGFzcyBWOENvbnNvbGVNZXNzYWdlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFY4Q29uc29sZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpOworCisgICAgICAgIC8vIEFk
ZCBhIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUuIE1heSBlbmQgdXAgY2FsbGluZyBKYXZhU2NyaXB0
IGNvZGUKKyAgICAgICAgLy8gaW5kaXJlY3RseSB0aHJvdWdoIHRoZSBpbnNwZWN0b3Igc28gb25s
eSBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbgorICAgICAgICAvLyBpdCBpcyBzYWZlIHRvIGRvIGFs
bG9jYXRpb25zLgorICAgICAgICB2b2lkIGRpc3BhdGNoTm93KFBhZ2UqKTsKKworICAgICAgICAv
LyBBZGQgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlIGJ1dCBkZWxheSB0aGUgcmVwb3J0aW5nIHVu
dGlsIGl0CisgICAgICAgIC8vIGlzIHNhZmUgdG8gZG8gc286IEVpdGhlciB3aGVuIHdlIGxlYXZl
IEphdmFTY3JpcHQgZXhlY3V0aW9uIG9yCisgICAgICAgIC8vIHdoZW4gYWRkaW5nIG90aGVyIGNv
bnNvbGUgbWVzc2FnZXMuIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcworICAgICAgICAvLyBt
ZXRob2QgaXMgdG8gYXZvaWQgY2FsbGluZyBpbnRvIFY4IHRvIGhhbmRsZSBjb25zb2xlIG1lc3Nh
Z2VzCisgICAgICAgIC8vIHdoZW4gdGhlIFZNIGlzIGluIGEgc3RhdGUgdGhhdCBkb2VzIG5vdCBz
dXBwb3J0IEdDcyBvciBhbGxvY2F0aW9ucy4KKyAgICAgICAgLy8gRGVsYXllZCBtZXNzYWdlcyBh
cmUgYWx3YXlzIHJlcG9ydGVkIGluIHRoZSBwYWdlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgLy8g
dG8gdGhlIGFjdGl2ZSBjb250ZXh0LgorICAgICAgICB2b2lkIGRpc3BhdGNoTGF0ZXIoKTsKKwor
ICAgICAgICAvLyBQcm9jZXNzIGFueSBkZWxheWVkIG1lc3NhZ2VzLiBNYXkgZW5kIHVwIGNhbGxp
bmcgSmF2YVNjcmlwdCBjb2RlCisgICAgICAgIC8vIGluZGlyZWN0bHkgdGhyb3VnaCB0aGUgaW5z
cGVjdG9yIHNvIG9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4KKyAgICAgICAgLy8gaXQgaXMg
c2FmZSB0byBkbyBhbGxvY2F0aW9ucy4KKyAgICAgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0RlbGF5
ZWQoKTsKKworICAgICAgICAvLyBDb252ZW5pZW5jZSBjbGFzcyBmb3IgZW5zdXJpbmcgdGhhdCBk
ZWxheWVkIG1lc3NhZ2VzIGluIHRoZQorICAgICAgICAvLyBDb25zb2xlTWVzc2FnZU1hbmFnZXIg
YXJlIHByb2Nlc3NlZCBxdWlja2x5LgorICAgICAgICBjbGFzcyBTY29wZSB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIFNjb3BlKCkgeyBWOENvbnNvbGVNZXNzYWdlOjpwcm9jZXNzRGVs
YXllZCgpOyB9CisgICAgICAgICAgICB+U2NvcGUoKSB7IFY4Q29uc29sZU1lc3NhZ2U6OnByb2Nl
c3NEZWxheWVkKCk7IH0KKyAgICAgICAgfTsKKworICAgICAgICAvLyBDYWxsYmFjayBmcm9tIFY4
LgorICAgICAgICBzdGF0aWMgdm9pZCBoYW5kbGVyKHY4OjpIYW5kbGU8djg6Ok1lc3NhZ2U+IG1l
c3NhZ2UsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkYXRhKTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIGNvbnN0IFN0cmluZyBtX3N0cmluZzsKKyAgICAgICAgY29uc3QgU3RyaW5nIG1fc291cmNl
SUQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1fbGluZU51bWJlcjsKKworICAgICAgICAvLyBB
bGwgZGVsYXllZCBtZXNzYWdlcyBhcmUgc3RvcmVkIGluIHRoaXMgdmVjdG9yLiBJZiB0aGUgdmVj
dG9yCisgICAgICAgIC8vIGlzIE5VTEwsIHRoZXJlIGFyZSBubyBkZWxheWVkIG1lc3NhZ2VzLgor
ICAgICAgICBzdGF0aWMgVmVjdG9yPFY4Q29uc29sZU1lc3NhZ2U+KiBtX2RlbGF5ZWRNZXNzYWdl
czsKKyAgICB9OworCit9CisKKyNlbmRpZiAvLyBWOENvbnNvbGVNZXNzYWdlX2gKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmNwcAkocmV2aXNpb24gNDYwOTEpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVk
ZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUg
IlY4Q29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIlY4Q29uc29sZU1lc3NhZ2UuaCIKICNpbmNsdWRl
ICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTU1hcC5oIgogI2luY2x1ZGUgIlY4
RE9NV2luZG93LmgiCkBAIC0xMzAsMTQ5ICsxMzEsMTMgQEAgdHlwZWRlZiBIYXNoTWFwPGludCwg
djg6OkZ1bmN0aW9uVGVtcGxhdAogCiBib29sIEFsbG93QWxsb2NhdGlvbjo6bV9jdXJyZW50ID0g
ZmFsc2U7CiAKLS8vIEphdmFTY3JpcHRDb25zb2xlTWVzc2FnZXMgZW5jYXBzdWxhdGUgZXZlcnl0
aGluZyBuZWVkZWQgdG8KLS8vIGxvZyBtZXNzYWdlcyBvcmlnaW5hdGluZyBmcm9tIEphdmFTY3Jp
cHQgdG8gdGhlIENocm9tZSBjb25zb2xlLgotY2xhc3MgSmF2YVNjcmlwdENvbnNvbGVNZXNzYWdl
IHsKLXB1YmxpYzoKLSAgICBKYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCi0gICAg
ICAgIDogbV9zdHJpbmcoc3RyaW5nKQotICAgICAgICAsIG1fc291cmNlSUQoc291cmNlSUQpCi0g
ICAgICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCi0gICAgICAgIHsgCi0gICAgICAgIH0K
LQotICAgIHZvaWQgYWRkVG9QYWdlKFBhZ2UqKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBjb25z
dCBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgY29uc3QgU3RyaW5nIG1fc291cmNlSUQ7Ci0gICAgY29u
c3QgdW5zaWduZWQgbV9saW5lTnVtYmVyOwotfTsKLQotdm9pZCBKYXZhU2NyaXB0Q29uc29sZU1l
c3NhZ2U6OmFkZFRvUGFnZShQYWdlKiBwYWdlKSBjb25zdAotewotICAgIEFTU0VSVChwYWdlKTsK
LSAgICBDb25zb2xlKiBjb25zb2xlID0gcGFnZS0+bWFpbkZyYW1lKCktPmRvbVdpbmRvdygpLT5j
b25zb2xlKCk7Ci0gICAgY29uc29sZS0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01l
c3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgbV9zdHJpbmcsIG1fbGluZU51bWJlciwgbV9z
b3VyY2VJRCk7Ci19Ci0KLS8vIFRoZSBDb25zb2xlTWVzc2FnZU1hbmFnZXIgaGFuZGxlcyBhbGwg
Y29uc29sZSBtZXNzYWdlcyB0aGF0IHN0ZW0KLS8vIGZyb20gSmF2YVNjcmlwdC4gSXQga2VlcHMg
YSBsaXN0IG9mIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIGRlbGF5ZWQgYnV0Ci0vLyBpdCBtYWtl
cyBzdXJlIHRvIGFkZCBhbGwgbWVzc2FnZXMgdG8gdGhlIGNvbnNvbGUgaW4gdGhlIHJpZ2h0IG9y
ZGVyLgotY2xhc3MgQ29uc29sZU1lc3NhZ2VNYW5hZ2VyIHsKLXB1YmxpYzoKLSAgICAvLyBBZGQg
YSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlLiBNYXkgZW5kIHVwIGNhbGxpbmcgSmF2YVNjcmlwdCBj
b2RlCi0gICAgLy8gaW5kaXJlY3RseSB0aHJvdWdoIHRoZSBpbnNwZWN0b3Igc28gb25seSBjYWxs
IHRoaXMgZnVuY3Rpb24gd2hlbgotICAgIC8vIGl0IGlzIHNhZmUgdG8gZG8gYWxsb2NhdGlvbnMu
Ci0gICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZShQYWdlKiwgY29uc3QgSmF2YVNjcmlwdENvbnNv
bGVNZXNzYWdlJik7Ci0KLSAgICAvLyBBZGQgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlIGJ1dCBk
ZWxheSB0aGUgcmVwb3J0aW5nIHVudGlsIGl0Ci0gICAgLy8gaXMgc2FmZSB0byBkbyBzbzogRWl0
aGVyIHdoZW4gd2UgbGVhdmUgSmF2YVNjcmlwdCBleGVjdXRpb24gb3IKLSAgICAvLyB3aGVuIGFk
ZGluZyBvdGhlciBjb25zb2xlIG1lc3NhZ2VzLiBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMK
LSAgICAvLyBtZXRob2QgaXMgdG8gYXZvaWQgY2FsbGluZyBpbnRvIFY4IHRvIGhhbmRsZSBjb25z
b2xlIG1lc3NhZ2VzCi0gICAgLy8gd2hlbiB0aGUgVk0gaXMgaW4gYSBzdGF0ZSB0aGF0IGRvZXMg
bm90IHN1cHBvcnQgR0NzIG9yIGFsbG9jYXRpb25zLgotICAgIC8vIERlbGF5ZWQgbWVzc2FnZXMg
YXJlIGFsd2F5cyByZXBvcnRlZCBpbiB0aGUgcGFnZSBjb3JyZXNwb25kaW5nCi0gICAgLy8gdG8g
dGhlIGFjdGl2ZSBjb250ZXh0LgotICAgIHN0YXRpYyB2b2lkIGFkZERlbGF5ZWRNZXNzYWdlKGNv
bnN0IEphdmFTY3JpcHRDb25zb2xlTWVzc2FnZSYpOwotCi0gICAgLy8gUHJvY2VzcyBhbnkgZGVs
YXllZCBtZXNzYWdlcy4gTWF5IGVuZCB1cCBjYWxsaW5nIEphdmFTY3JpcHQgY29kZQotICAgIC8v
IGluZGlyZWN0bHkgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIHNvIG9ubHkgY2FsbCB0aGlzIGZ1bmN0
aW9uIHdoZW4KLSAgICAvLyBpdCBpcyBzYWZlIHRvIGRvIGFsbG9jYXRpb25zLgotICAgIHN0YXRp
YyB2b2lkIHByb2Nlc3NEZWxheWVkTWVzc2FnZXMoKTsKLQotcHJpdmF0ZToKLSAgICAvLyBBbGwg
ZGVsYXllZCBtZXNzYWdlcyBhcmUgc3RvcmVkIGluIHRoaXMgdmVjdG9yLiBJZiB0aGUgdmVjdG9y
Ci0gICAgLy8gaXMgTlVMTCwgdGhlcmUgYXJlIG5vIGRlbGF5ZWQgbWVzc2FnZXMuCi0gICAgc3Rh
dGljIFZlY3RvcjxKYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2U+KiBtX2RlbGF5ZWQ7Ci19OwotCi1W
ZWN0b3I8SmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlPiogQ29uc29sZU1lc3NhZ2VNYW5hZ2VyOjpt
X2RlbGF5ZWQgPSAwOwotCi12b2lkIENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6YWRkTWVzc2FnZShQ
YWdlKiBwYWdlLCBjb25zdCBKYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UmIG1lc3NhZ2UpCi17Ci0g
ICAgLy8gUHJvY2VzcyBhbnkgZGVsYXllZCBtZXNzYWdlcyB0byBtYWtlIHN1cmUgdGhhdCBtZXNz
YWdlcwotICAgIC8vIGFwcGVhciBpbiB0aGUgcmlnaHQgb3JkZXIgaW4gdGhlIGNvbnNvbGUuCi0g
ICAgcHJvY2Vzc0RlbGF5ZWRNZXNzYWdlcygpOwotICAgIG1lc3NhZ2UuYWRkVG9QYWdlKHBhZ2Up
OwotfQotCi12b2lkIENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6YWRkRGVsYXllZE1lc3NhZ2UoY29u
c3QgSmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlJiBtZXNzYWdlKQotewotICAgIGlmICghbV9kZWxh
eWVkKSB7Ci0gICAgICAgIC8vIEFsbG9jYXRlIGEgdmVjdG9yIGZvciB0aGUgZGVsYXllZCBtZXNz
YWdlcy4gV2lsbCBiZQotICAgICAgICAvLyBkZWFsbG9jYXRlZCB3aGVuIHRoZSBkZWxheWVkIG1l
c3NhZ2VzIGFyZSBwcm9jZXNzZWQKLSAgICAgICAgLy8gaW4gcHJvY2Vzc0RlbGF5ZWRNZXNzYWdl
cygpLgotICAgICAgICBtX2RlbGF5ZWQgPSBuZXcgVmVjdG9yPEphdmFTY3JpcHRDb25zb2xlTWVz
c2FnZT4oKTsKLSAgICB9Ci0gICAgbV9kZWxheWVkLT5hcHBlbmQobWVzc2FnZSk7Ci19Ci0KLXZv
aWQgQ29uc29sZU1lc3NhZ2VNYW5hZ2VyOjpwcm9jZXNzRGVsYXllZE1lc3NhZ2VzKCkKLXsKLSAg
ICAvLyBJZiB3ZSBoYXZlIGEgZGVsYXllZCB2ZWN0b3IgaXQgY2Fubm90IGJlIGVtcHR5LgotICAg
IGlmICghbV9kZWxheWVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKCFtX2RlbGF5ZWQt
PmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBBZGQgdGhlIGRlbGF5ZWQgbWVzc2FnZXMgdG8gdGhlIHBh
Z2Ugb2YgdGhlIGFjdGl2ZQotICAgIC8vIGNvbnRleHQuIElmIHRoYXQgZm9yIHNvbWUgYml6YXJy
ZSByZWFzb24gZG9lcyBub3QKLSAgICAvLyBleGlzdCwgd2UgY2xlYXIgdGhlIGxpc3Qgb2YgZGVs
YXllZCBtZXNzYWdlcyB0byBhdm9pZAotICAgIC8vIHBvc3RpbmcgbWVzc2FnZXMuIFdlIHN0aWxs
IGRlYWxsb2NhdGUgdGhlIHZlY3Rvci4KLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRy
aWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICBQYWdlKiBwYWdlID0gMDsKLSAgICBp
ZiAoZnJhbWUpCi0gICAgICAgIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkK
LSAgICAgICAgbV9kZWxheWVkLT5jbGVhcigpOwotCi0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFs
bCB0aGUgZGVsYXllZCBtZXNzYWdlcyBhbmQgYWRkIHRoZW0KLSAgICAvLyB0byB0aGUgY29uc29s
ZS4KLSAgICBjb25zdCBpbnQgc2l6ZSA9IG1fZGVsYXllZC0+c2l6ZSgpOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICBtX2RlbGF5ZWQtPmF0KGkpLmFkZFRvUGFn
ZShwYWdlKTsKLQotICAgIC8vIERlYWxsb2NhdGUgdGhlIGRlbGF5ZWQgdmVjdG9yLgotICAgIGRl
bGV0ZSBtX2RlbGF5ZWQ7Ci0gICAgbV9kZWxheWVkID0gMDsKLX0KLQotLy8gQ29udmVuaWVuY2Ug
Y2xhc3MgZm9yIGVuc3VyaW5nIHRoYXQgZGVsYXllZCBtZXNzYWdlcyBpbiB0aGUKLS8vIENvbnNv
bGVNZXNzYWdlTWFuYWdlciBhcmUgcHJvY2Vzc2VkIHF1aWNrbHkuCi1jbGFzcyBDb25zb2xlTWVz
c2FnZVNjb3BlIHsKLXB1YmxpYzoKLSAgICBDb25zb2xlTWVzc2FnZVNjb3BlKCkgeyBDb25zb2xl
TWVzc2FnZU1hbmFnZXI6OnByb2Nlc3NEZWxheWVkTWVzc2FnZXMoKTsgfQotICAgIH5Db25zb2xl
TWVzc2FnZVNjb3BlKCkgeyBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OnByb2Nlc3NEZWxheWVkTWVz
c2FnZXMoKTsgfQotfTsKLQogdm9pZCBsb2dJbmZvKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBQYWdlKiBwYWdlID0gZnJhbWUt
PnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBKYXZhU2NyaXB0
Q29uc29sZU1lc3NhZ2UgY29uc29sZU1lc3NhZ2UobWVzc2FnZSwgdXJsLCAwKTsKLSAgICBDb25z
b2xlTWVzc2FnZU1hbmFnZXI6OmFkZE1lc3NhZ2UocGFnZSwgY29uc29sZU1lc3NhZ2UpOwotfQot
Ci1zdGF0aWMgdm9pZCBoYW5kbGVDb25zb2xlTWVzc2FnZSh2ODo6SGFuZGxlPHY4OjpNZXNzYWdl
PiBtZXNzYWdlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGF0YSkKLXsKLSAgICAvLyBVc2UgdGhl
IGZyYW1lIHdoZXJlIEphdmFTY3JpcHQgaXMgY2FsbGVkIGZyb20uCi0gICAgRnJhbWUqIGZyYW1l
ID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7
Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpT
dHJpbmc+IGVycm9yTWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UtPkdldCgpOwotICAgIEFTU0VSVCgh
ZXJyb3JNZXNzYWdlU3RyaW5nLklzRW1wdHkoKSk7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9
IHRvV2ViQ29yZVN0cmluZyhlcnJvck1lc3NhZ2VTdHJpbmcpOwotCi0gICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHJlc291cmNlTmFtZSA9IG1lc3NhZ2UtPkdldFNjcmlwdFJlc291cmNlTmFtZSgp
OwotICAgIGJvb2wgdXNlVVJMID0gcmVzb3VyY2VOYW1lLklzRW1wdHkoKSB8fCAhcmVzb3VyY2VO
YW1lLT5Jc1N0cmluZygpOwotICAgIFN0cmluZyByZXNvdXJjZU5hbWVTdHJpbmcgPSB1c2VVUkwg
PyBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiB0b1dlYkNvcmVTdHJpbmcocmVzb3VyY2VOYW1l
KTsKLSAgICBKYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UgY29uc29sZU1lc3NhZ2UoZXJyb3JNZXNz
YWdlLCByZXNvdXJjZU5hbWVTdHJpbmcsIG1lc3NhZ2UtPkdldExpbmVOdW1iZXIoKSk7Ci0gICAg
Q29uc29sZU1lc3NhZ2VNYW5hZ2VyOjphZGRNZXNzYWdlKHBhZ2UsIGNvbnNvbGVNZXNzYWdlKTsK
KyAgICBWOENvbnNvbGVNZXNzYWdlIGNvbnNvbGVNZXNzYWdlKG1lc3NhZ2UsIHVybCwgMCk7Cisg
ICAgY29uc29sZU1lc3NhZ2UuZGlzcGF0Y2hOb3cocGFnZSk7CiB9CiAKIGVudW0gRGVsYXlSZXBv
cnRpbmcgewpAQCAtMzA0LDIwICsxNjksMTkgQEAgc3RhdGljIHZvaWQgcmVwb3J0VW5zYWZlQWNj
ZXNzVG8oRnJhbWUqIAogICAgIC8vIEJ1aWxkIGEgY29uc29sZSBtZXNzYWdlIHdpdGggZmFrZSBz
b3VyY2UgSUQgYW5kIGxpbmUgbnVtYmVyLgogICAgIGNvbnN0IFN0cmluZyBrU291cmNlSUQgPSAi
IjsKICAgICBjb25zdCBpbnQga0xpbmVOdW1iZXIgPSAxOwotICAgIEphdmFTY3JpcHRDb25zb2xl
TWVzc2FnZSBtZXNzYWdlKHN0ciwga1NvdXJjZUlELCBrTGluZU51bWJlcik7CisgICAgVjhDb25z
b2xlTWVzc2FnZSBtZXNzYWdlKHN0ciwga1NvdXJjZUlELCBrTGluZU51bWJlcik7CiAKICAgICBp
ZiAoZGVsYXkgPT0gUmVwb3J0Tm93KSB7CiAgICAgICAgIC8vIE5PVEU6IFNhZmFyaSBwcmludHMg
dGhlIG1lc3NhZ2UgaW4gdGhlIHRhcmdldCBwYWdlLCBidXQgaXQgc2VlbXMgbGlrZQogICAgICAg
ICAvLyBpdCBzaG91bGQgYmUgaW4gdGhlIHNvdXJjZSBwYWdlLiBFdmVuIGZvciBkZWxheWVkIG1l
c3NhZ2VzLCB3ZSBwdXQgaXQgaW4KLSAgICAgICAgLy8gdGhlIHNvdXJjZSBwYWdlOyBzZWUgQ29u
c29sZU1lc3NhZ2VNYW5hZ2VyOjpwcm9jZXNzRGVsYXllZE1lc3NhZ2VzKCkuCi0gICAgICAgIENv
bnNvbGVNZXNzYWdlTWFuYWdlcjo6YWRkTWVzc2FnZShzb3VyY2UtPnBhZ2UoKSwgbWVzc2FnZSk7
Ci0KKyAgICAgICAgLy8gdGhlIHNvdXJjZSBwYWdlOyBzZWUgVjhDb25zb2xlTWVzc2FnZTo6cHJv
Y2Vzc0RlbGF5ZWQoKS4KKyAgICAgICAgbWVzc2FnZS5kaXNwYXRjaE5vdyhzb3VyY2UtPnBhZ2Uo
KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGRlbGF5ID09IFJlcG9ydExhdGVyKTsK
ICAgICAgICAgLy8gV2UgY2Fubm90IHNhZmVseSByZXBvcnQgdGhlIG1lc3NhZ2UgZWFnZXJseSwg
YmVjYXVzZSB0aGlzIG1heSBjYXVzZQogICAgICAgICAvLyBhbGxvY2F0aW9ucyBhbmQgR0NzIGlu
dGVybmFsbHkgaW4gVjggYW5kIHdlIGNhbm5vdCBoYW5kbGUgdGhhdCBhdCB0aGlzCiAgICAgICAg
IC8vIHBvaW50LiBUaGVyZWZvcmUgd2UgZGVsYXkgdGhlIHJlcG9ydGluZy4KLSAgICAgICAgQ29u
c29sZU1lc3NhZ2VNYW5hZ2VyOjphZGREZWxheWVkTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAg
bWVzc2FnZS5kaXNwYXRjaExhdGVyKCk7CiAgICAgfQogfQogCkBAIC01NjAsNyArNDI0LDcgQEAg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhQcm94eTo6cnVuU2NyaXB0KAogICAgIC8vIFJ1biB0aGUg
c2NyaXB0IGFuZCBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBkZXB0aC4KICAg
ICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXN1bHQ7CiAgICAgewotICAgICAgICBDb25zb2xlTWVz
c2FnZVNjb3BlIHNjb3BlOworICAgICAgICBWOENvbnNvbGVNZXNzYWdlOjpTY29wZSBzY29wZTsK
ICAgICAgICAgbV9yZWN1cnNpb24rKzsKIAogICAgICAgICAvLyBTZWUgY29tbWVudCBpbiBWOFBy
b3h5OjpjYWxsRnVuY3Rpb24uCkBAIC01OTMsNyArNDU3LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gVjhQcm94eTo6Y2FsbEZ1bmN0aQogICAgIC8vIGNvbnRyYXN0IHRvIHRoZSBzY3JpcHQgZXZh
bHVhdGlvbnMuCiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0OwogICAgIHsKLSAgICAg
ICAgQ29uc29sZU1lc3NhZ2VTY29wZSBzY29wZTsKKyAgICAgICAgVjhDb25zb2xlTWVzc2FnZTo6
U2NvcGUgc2NvcGU7CiAKICAgICAgICAgLy8gRXZhbHVhdGluZyB0aGUgSmF2YVNjcmlwdCBjb3Vs
ZCBjYXVzZSB0aGUgZnJhbWUgdG8gYmUgZGVhbGxvY2F0ZWQsCiAgICAgICAgIC8vIHNvIHdlIHN0
YXJ0IHRoZSBrZWVwIGFsaXZlIHRpbWVyIGhlcmUuCkBAIC02MTcsNyArNDgxLDcgQEAgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gVjhQcm94eTo6bmV3SW5zdGFuYwogICAgIC8vIFY4UHJveHk6OmNhbGxG
dW5jdGlvbi4KICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXN1bHQ7CiAgICAgewotICAgICAg
ICBDb25zb2xlTWVzc2FnZVNjb3BlIHNjb3BlOworICAgICAgICBWOENvbnNvbGVNZXNzYWdlOjpT
Y29wZSBzY29wZTsKIAogICAgICAgICAvLyBTZWUgY29tbWVudCBpbiBWOFByb3h5OjpjYWxsRnVu
Y3Rpb24uCiAgICAgICAgIG1fZnJhbWUtPmtlZXBBbGl2ZSgpOwpAQCAtMTE1MSw3ICsxMDE1LDcg
QEAgdm9pZCBWOFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkKICAgICAgICAgdjg6OlY4OjpT
ZXRHbG9iYWxHQ1Byb2xvZ3VlQ2FsbGJhY2soJlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKTsK
ICAgICAgICAgdjg6OlY4OjpTZXRHbG9iYWxHQ0VwaWxvZ3VlQ2FsbGJhY2soJlY4R0NDb250cm9s
bGVyOjpnY0VwaWxvZ3VlKTsKIAotICAgICAgICB2ODo6Vjg6OkFkZE1lc3NhZ2VMaXN0ZW5lciho
YW5kbGVDb25zb2xlTWVzc2FnZSk7CisgICAgICAgIHY4OjpWODo6QWRkTWVzc2FnZUxpc3RlbmVy
KCZWOENvbnNvbGVNZXNzYWdlOjpoYW5kbGVyKTsKIAogICAgICAgICB2ODo6Vjg6OlNldEZhaWxl
ZEFjY2Vzc0NoZWNrQ2FsbGJhY2tGdW5jdGlvbihyZXBvcnRVbnNhZmVKYXZhU2NyaXB0QWNjZXNz
KTsKIApAQCAtMTMxMCw3ICsxMTc0LDcgQEAgdm9pZCBWOFByb3h5OjpiaW5kSnNPYmplY3RUb1dp
bmRvdyhGcmFtZQogCiB2b2lkIFY4UHJveHk6OnByb2Nlc3NDb25zb2xlTWVzc2FnZXMoKQogewot
ICAgIENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6cHJvY2Vzc0RlbGF5ZWRNZXNzYWdlcygpOworICAg
IFY4Q29uc29sZU1lc3NhZ2U6OnByb2Nlc3NEZWxheWVkKCk7CiB9CiAKIC8vIENyZWF0ZSB0aGUg
dXRpbGl0eSBjb250ZXh0IGZvciBob2xkaW5nIEphdmFTY3JpcHQgZnVuY3Rpb25zIHVzZWQgaW50
ZXJuYWxseQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33035</attachid>
            <date>2009-07-18 21:42:18 -0700</date>
            <delta_ts>2009-07-18 23:13:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug-27421-20090718214215.patch</filename>
            <type>text/plain</type>
            <size>19841</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjEwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDktMDctMTggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhd
IEZhY3RvciBWOENvbnNvbGVNZXNzYWdlIG91dCBvZiBWOFByb3h5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQyMQorCisgICAgICAgIE5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9WOENvbnNvbGVNZXNzYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOENv
bnNvbGVNZXNzYWdlOjpWOENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q29u
c29sZU1lc3NhZ2U6OmRpc3BhdGNoTm93KToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q29uc29sZU1l
c3NhZ2U6OmRpc3BhdGNoTGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhDb25zb2xlTWVzc2Fn
ZTo6cHJvY2Vzc0RlbGF5ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhDb25zb2xlTWVzc2FnZTo6
aGFuZGxlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhDb25zb2xlTWVzc2FnZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q29uc29sZU1lc3NhZ2U6OlNjb3BlOjpTY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOENvbnNvbGVNZXNzYWdlOjpTY29wZTo6flNjb3BlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvZ0luZm8p
OgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0VW5zYWZlQWNjZXNzVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6VjhQcm94eTo6cnVuU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNh
bGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpuZXdJbnN0YW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4UHJveHk6OnByb2Nlc3NDb25zb2xlTWVzc2FnZXMpOgorCiAyMDA5LTA3LTE4
ICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA0NjA5MSkKKysrIFdl
YkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNiArNjkzLDggQEAKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhDb2xsZWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhDb2xs
ZWN0aW9uLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuY3Bw
JywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOENvbnNvbGVNZXNzYWdlLmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhET01NYXAuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNw
cCcsCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb25zb2xlTWVzc2FnZS5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJWOENvbnNvbGVNZXNzYWdlLmgiCisKKyNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAi
RE9NV2luZG93LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJPd25QdHIuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94
eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZlY3RvcjxWOENvbnNvbGVNZXNzYWdlPiog
VjhDb25zb2xlTWVzc2FnZTo6bV9kZWxheWVkTWVzc2FnZXMgPSAwOworCitWOENvbnNvbGVNZXNz
YWdlOjpWOENvbnNvbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQorICAgICA6IG1fc3RyaW5nKHN0cmluZykK
KyAgICAgLCBtX3NvdXJjZUlEKHNvdXJjZUlEKQorICAgICAsIG1fbGluZU51bWJlcihsaW5lTnVt
YmVyKQoreworfQorCit2b2lkIFY4Q29uc29sZU1lc3NhZ2U6OmRpc3BhdGNoTm93KFBhZ2UqIHBh
Z2UpCit7CisgICAgQVNTRVJUKHBhZ2UpOworCisgICAgLy8gUHJvY2VzcyBhbnkgZGVsYXllZCBt
ZXNzYWdlcyB0byBtYWtlIHN1cmUgdGhhdCBtZXNzYWdlcworICAgIC8vIGFwcGVhciBpbiB0aGUg
cmlnaHQgb3JkZXIgaW4gdGhlIGNvbnNvbGUuCisgICAgcHJvY2Vzc0RlbGF5ZWQoKTsKKworICAg
IENvbnNvbGUqIGNvbnNvbGUgPSBwYWdlLT5tYWluRnJhbWUoKS0+ZG9tV2luZG93KCktPmNvbnNv
bGUoKTsKKyAgICBjb25zb2xlLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2Fn
ZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCBtX3N0cmluZywgbV9saW5lTnVtYmVyLCBtX3NvdXJj
ZUlEKTsKK30KKwordm9pZCBWOENvbnNvbGVNZXNzYWdlOjpkaXNwYXRjaExhdGVyKCkKK3sKKyAg
ICBpZiAoIW1fZGVsYXllZE1lc3NhZ2VzKSB7CisgICAgICAgIC8vIEFsbG9jYXRlIGEgdmVjdG9y
IGZvciB0aGUgZGVsYXllZCBtZXNzYWdlcy4gV2lsbCBiZQorICAgICAgICAvLyBkZWFsbG9jYXRl
ZCB3aGVuIHRoZSBkZWxheWVkIG1lc3NhZ2VzIGFyZSBwcm9jZXNzZWQKKyAgICAgICAgLy8gaW4g
cHJvY2Vzc0RlbGF5ZWQoKS4KKyAgICAgICAgbV9kZWxheWVkTWVzc2FnZXMgPSBuZXcgVmVjdG9y
PFY4Q29uc29sZU1lc3NhZ2U+KCk7CisgICAgfQorCisgICAgbV9kZWxheWVkTWVzc2FnZXMtPmFw
cGVuZCgqdGhpcyk7Cit9CisKK3ZvaWQgVjhDb25zb2xlTWVzc2FnZTo6cHJvY2Vzc0RlbGF5ZWQo
KQoreworICAgIGlmICghbV9kZWxheWVkTWVzc2FnZXMpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBkZWxheWVkIHZlY3RvciB0byBhdm9pZCByZS1lbnRy
YW5jeSBpc3N1ZXMuCisgICAgT3duUHRyPFZlY3RvcjxWOENvbnNvbGVNZXNzYWdlPiA+IGRlbGF0
ZWRNZXNzYWdlcyhtX2RlbGF5ZWRNZXNzYWdlcyk7CisgICAgbV9kZWxheWVkTWVzc2FnZXMgPSAw
OworCisgICAgLy8gSWYgd2UgaGF2ZSBhIGRlbGF5ZWQgdmVjdG9yIGl0IGNhbm5vdCBiZSBlbXB0
eS4KKyAgICBBU1NFUlQoIWRlbGF5ZWRNZXNzYWdlcy0+aXNFbXB0eSgpKTsKKworICAgIC8vIEFk
ZCB0aGUgZGVsYXllZCBtZXNzYWdlcyB0byB0aGUgcGFnZSBvZiB0aGUgYWN0aXZlCisgICAgLy8g
Y29udGV4dC4gSWYgdGhhdCBmb3Igc29tZSBiaXphcnJlIHJlYXNvbiBkb2VzIG5vdAorICAgIC8v
IGV4aXN0LCB3ZSBjbGVhciB0aGUgbGlzdCBvZiBkZWxheWVkIG1lc3NhZ2VzIHRvIGF2b2lkCisg
ICAgLy8gcG9zdGluZyBtZXNzYWdlcy4gV2Ugc3RpbGwgZGVhbGxvY2F0ZSB0aGUgdmVjdG9yLgor
ICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4
dCgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBQYWdlKiBwYWdlID0g
ZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGRlbGF5ZWQgbWVzc2FnZXMgYW5kIGFkZCB0aGVtCisg
ICAgLy8gdG8gdGhlIGNvbnNvbGUuCisgICAgY29uc3QgaW50IHNpemUgPSBkZWxhdGVkTWVzc2Fn
ZXMtPnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAg
ZGVsYXRlZE1lc3NhZ2VzLT5hdChpKS5kaXNwYXRjaE5vdyhwYWdlKTsKK30KKwordm9pZCBWOENv
bnNvbGVNZXNzYWdlOjpoYW5kbGVyKHY4OjpIYW5kbGU8djg6Ok1lc3NhZ2U+IG1lc3NhZ2UsIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBkYXRhKQoreworICAgIC8vIFVzZSB0aGUgZnJhbWUgd2hlcmUg
SmF2YVNjcmlwdCBpcyBjYWxsZWQgZnJvbS4KKyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5Ojpy
ZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGVycm9yTWVz
c2FnZVN0cmluZyA9IG1lc3NhZ2UtPkdldCgpOworICAgIEFTU0VSVCghZXJyb3JNZXNzYWdlU3Ry
aW5nLklzRW1wdHkoKSk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHRvV2ViQ29yZVN0cmlu
ZyhlcnJvck1lc3NhZ2VTdHJpbmcpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc291
cmNlTmFtZSA9IG1lc3NhZ2UtPkdldFNjcmlwdFJlc291cmNlTmFtZSgpOworICAgIGJvb2wgdXNl
VVJMID0gcmVzb3VyY2VOYW1lLklzRW1wdHkoKSB8fCAhcmVzb3VyY2VOYW1lLT5Jc1N0cmluZygp
OworICAgIFN0cmluZyByZXNvdXJjZU5hbWVTdHJpbmcgPSB1c2VVUkwgPyBmcmFtZS0+ZG9jdW1l
bnQoKS0+dXJsKCkgOiB0b1dlYkNvcmVTdHJpbmcocmVzb3VyY2VOYW1lKTsKKyAgICBWOENvbnNv
bGVNZXNzYWdlIGNvbnNvbGVNZXNzYWdlKGVycm9yTWVzc2FnZSwgcmVzb3VyY2VOYW1lU3RyaW5n
LCBtZXNzYWdlLT5HZXRMaW5lTnVtYmVyKCkpOworICAgIGNvbnNvbGVNZXNzYWdlLmRpc3BhdGNo
Tm93KHBhZ2UpOworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9WOENvbnNvbGVNZXNzYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9WOENvbnNvbGVNZXNzYWdlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgVjhDb25zb2xlTWVzc2FnZV9oCisjZGVmaW5lIFY4Q29uc29sZU1lc3NhZ2VfaAor
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIFBh
Z2U7CisKKyAgICAvLyBWOENvbnNvbGVNZXNzYWdlIGVuY2Fwc3VsYXRlcyBldmVyeXRoaW5nIG5l
ZWRlZCB0bworICAgIC8vIGxvZyBtZXNzYWdlcyBvcmlnaW5hdGluZyBmcm9tIEphdmFTY3JpcHQg
dG8gdGhlIGNvbnNvbGUuCisgICAgY2xhc3MgVjhDb25zb2xlTWVzc2FnZSB7CisgICAgcHVibGlj
OgorICAgICAgICBWOENvbnNvbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBT
dHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKKworICAgICAgICAvLyBBZGQg
YSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlLiBNYXkgZW5kIHVwIGNhbGxpbmcgSmF2YVNjcmlwdCBj
b2RlCisgICAgICAgIC8vIGluZGlyZWN0bHkgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIHNvIG9ubHkg
Y2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4KKyAgICAgICAgLy8gaXQgaXMgc2FmZSB0byBkbyBhbGxv
Y2F0aW9ucy4KKyAgICAgICAgdm9pZCBkaXNwYXRjaE5vdyhQYWdlKik7CisKKyAgICAgICAgLy8g
QWRkIGEgbWVzc2FnZSB0byB0aGUgY29uc29sZSBidXQgZGVsYXkgdGhlIHJlcG9ydGluZyB1bnRp
bCBpdAorICAgICAgICAvLyBpcyBzYWZlIHRvIGRvIHNvOiBFaXRoZXIgd2hlbiB3ZSBsZWF2ZSBK
YXZhU2NyaXB0IGV4ZWN1dGlvbiBvcgorICAgICAgICAvLyB3aGVuIGFkZGluZyBvdGhlciBjb25z
b2xlIG1lc3NhZ2VzLiBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMKKyAgICAgICAgLy8gbWV0
aG9kIGlzIHRvIGF2b2lkIGNhbGxpbmcgaW50byBWOCB0byBoYW5kbGUgY29uc29sZSBtZXNzYWdl
cworICAgICAgICAvLyB3aGVuIHRoZSBWTSBpcyBpbiBhIHN0YXRlIHRoYXQgZG9lcyBub3Qgc3Vw
cG9ydCBHQ3Mgb3IgYWxsb2NhdGlvbnMuCisgICAgICAgIC8vIERlbGF5ZWQgbWVzc2FnZXMgYXJl
IGFsd2F5cyByZXBvcnRlZCBpbiB0aGUgcGFnZSBjb3JyZXNwb25kaW5nCisgICAgICAgIC8vIHRv
IHRoZSBhY3RpdmUgY29udGV4dC4KKyAgICAgICAgdm9pZCBkaXNwYXRjaExhdGVyKCk7CisKKyAg
ICAgICAgLy8gUHJvY2VzcyBhbnkgZGVsYXllZCBtZXNzYWdlcy4gTWF5IGVuZCB1cCBjYWxsaW5n
IEphdmFTY3JpcHQgY29kZQorICAgICAgICAvLyBpbmRpcmVjdGx5IHRocm91Z2ggdGhlIGluc3Bl
Y3RvciBzbyBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuCisgICAgICAgIC8vIGl0IGlzIHNh
ZmUgdG8gZG8gYWxsb2NhdGlvbnMuCisgICAgICAgIHN0YXRpYyB2b2lkIHByb2Nlc3NEZWxheWVk
KCk7CisKKyAgICAgICAgLy8gQ29udmVuaWVuY2UgY2xhc3MgZm9yIGVuc3VyaW5nIHRoYXQgZGVs
YXllZCBtZXNzYWdlcyBpbiB0aGUKKyAgICAgICAgLy8gQ29uc29sZU1lc3NhZ2VNYW5hZ2VyIGFy
ZSBwcm9jZXNzZWQgcXVpY2tseS4KKyAgICAgICAgY2xhc3MgU2NvcGUgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBTY29wZSgpIHsgVjhDb25zb2xlTWVzc2FnZTo6cHJvY2Vzc0RlbGF5
ZWQoKTsgfQorICAgICAgICAgICAgflNjb3BlKCkgeyBWOENvbnNvbGVNZXNzYWdlOjpwcm9jZXNz
RGVsYXllZCgpOyB9CisgICAgICAgIH07CisKKyAgICAgICAgLy8gQ2FsbGJhY2sgZnJvbSBWOC4K
KyAgICAgICAgc3RhdGljIHZvaWQgaGFuZGxlcih2ODo6SGFuZGxlPHY4OjpNZXNzYWdlPiBtZXNz
YWdlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGF0YSk7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBjb25zdCBTdHJpbmcgbV9zdHJpbmc7CisgICAgICAgIGNvbnN0IFN0cmluZyBtX3NvdXJjZUlE
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBtX2xpbmVOdW1iZXI7CisKKyAgICAgICAgLy8gQWxs
IGRlbGF5ZWQgbWVzc2FnZXMgYXJlIHN0b3JlZCBpbiB0aGlzIHZlY3Rvci4gSWYgdGhlIHZlY3Rv
cgorICAgICAgICAvLyBpcyBOVUxMLCB0aGVyZSBhcmUgbm8gZGVsYXllZCBtZXNzYWdlcy4KKyAg
ICAgICAgc3RhdGljIFZlY3RvcjxWOENvbnNvbGVNZXNzYWdlPiogbV9kZWxheWVkTWVzc2FnZXM7
CisgICAgfTsKKworfQorCisjZW5kaWYgLy8gVjhDb25zb2xlTWVzc2FnZV9oCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDQ2MDkxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUg
IlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJW
OENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJWOENvbnNvbGVNZXNzYWdlLmgiCiAjaW5jbHVkZSAi
VjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOERP
TVdpbmRvdy5oIgpAQCAtMTMwLDE0OSArMTMxLDEzIEBAIHR5cGVkZWYgSGFzaE1hcDxpbnQsIHY4
OjpGdW5jdGlvblRlbXBsYXQKIAogYm9vbCBBbGxvd0FsbG9jYXRpb246Om1fY3VycmVudCA9IGZh
bHNlOwogCi0vLyBKYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2VzIGVuY2Fwc3VsYXRlIGV2ZXJ5dGhp
bmcgbmVlZGVkIHRvCi0vLyBsb2cgbWVzc2FnZXMgb3JpZ2luYXRpbmcgZnJvbSBKYXZhU2NyaXB0
IHRvIHRoZSBDaHJvbWUgY29uc29sZS4KLWNsYXNzIEphdmFTY3JpcHRDb25zb2xlTWVzc2FnZSB7
Ci1wdWJsaWM6Ci0gICAgSmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQotICAgICAg
ICA6IG1fc3RyaW5nKHN0cmluZykKLSAgICAgICAgLCBtX3NvdXJjZUlEKHNvdXJjZUlEKQotICAg
ICAgICAsIG1fbGluZU51bWJlcihsaW5lTnVtYmVyKQotICAgICAgICB7IAotICAgICAgICB9Ci0K
LSAgICB2b2lkIGFkZFRvUGFnZShQYWdlKikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgY29uc3Qg
U3RyaW5nIG1fc3RyaW5nOwotICAgIGNvbnN0IFN0cmluZyBtX3NvdXJjZUlEOwotICAgIGNvbnN0
IHVuc2lnbmVkIG1fbGluZU51bWJlcjsKLX07Ci0KLXZvaWQgSmF2YVNjcmlwdENvbnNvbGVNZXNz
YWdlOjphZGRUb1BhZ2UoUGFnZSogcGFnZSkgY29uc3QKLXsKLSAgICBBU1NFUlQocGFnZSk7Ci0g
ICAgQ29uc29sZSogY29uc29sZSA9IHBhZ2UtPm1haW5GcmFtZSgpLT5kb21XaW5kb3coKS0+Y29u
c29sZSgpOwotICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNz
YWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1fc3RyaW5nLCBtX2xpbmVOdW1iZXIsIG1fc291
cmNlSUQpOwotfQotCi0vLyBUaGUgQ29uc29sZU1lc3NhZ2VNYW5hZ2VyIGhhbmRsZXMgYWxsIGNv
bnNvbGUgbWVzc2FnZXMgdGhhdCBzdGVtCi0vLyBmcm9tIEphdmFTY3JpcHQuIEl0IGtlZXBzIGEg
bGlzdCBvZiBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiBkZWxheWVkIGJ1dAotLy8gaXQgbWFrZXMg
c3VyZSB0byBhZGQgYWxsIG1lc3NhZ2VzIHRvIHRoZSBjb25zb2xlIGluIHRoZSByaWdodCBvcmRl
ci4KLWNsYXNzIENvbnNvbGVNZXNzYWdlTWFuYWdlciB7Ci1wdWJsaWM6Ci0gICAgLy8gQWRkIGEg
bWVzc2FnZSB0byB0aGUgY29uc29sZS4gTWF5IGVuZCB1cCBjYWxsaW5nIEphdmFTY3JpcHQgY29k
ZQotICAgIC8vIGluZGlyZWN0bHkgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIHNvIG9ubHkgY2FsbCB0
aGlzIGZ1bmN0aW9uIHdoZW4KLSAgICAvLyBpdCBpcyBzYWZlIHRvIGRvIGFsbG9jYXRpb25zLgot
ICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2UoUGFnZSosIGNvbnN0IEphdmFTY3JpcHRDb25zb2xl
TWVzc2FnZSYpOwotCi0gICAgLy8gQWRkIGEgbWVzc2FnZSB0byB0aGUgY29uc29sZSBidXQgZGVs
YXkgdGhlIHJlcG9ydGluZyB1bnRpbCBpdAotICAgIC8vIGlzIHNhZmUgdG8gZG8gc286IEVpdGhl
ciB3aGVuIHdlIGxlYXZlIEphdmFTY3JpcHQgZXhlY3V0aW9uIG9yCi0gICAgLy8gd2hlbiBhZGRp
bmcgb3RoZXIgY29uc29sZSBtZXNzYWdlcy4gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzCi0g
ICAgLy8gbWV0aG9kIGlzIHRvIGF2b2lkIGNhbGxpbmcgaW50byBWOCB0byBoYW5kbGUgY29uc29s
ZSBtZXNzYWdlcwotICAgIC8vIHdoZW4gdGhlIFZNIGlzIGluIGEgc3RhdGUgdGhhdCBkb2VzIG5v
dCBzdXBwb3J0IEdDcyBvciBhbGxvY2F0aW9ucy4KLSAgICAvLyBEZWxheWVkIG1lc3NhZ2VzIGFy
ZSBhbHdheXMgcmVwb3J0ZWQgaW4gdGhlIHBhZ2UgY29ycmVzcG9uZGluZwotICAgIC8vIHRvIHRo
ZSBhY3RpdmUgY29udGV4dC4KLSAgICBzdGF0aWMgdm9pZCBhZGREZWxheWVkTWVzc2FnZShjb25z
dCBKYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UmKTsKLQotICAgIC8vIFByb2Nlc3MgYW55IGRlbGF5
ZWQgbWVzc2FnZXMuIE1heSBlbmQgdXAgY2FsbGluZyBKYXZhU2NyaXB0IGNvZGUKLSAgICAvLyBp
bmRpcmVjdGx5IHRocm91Z2ggdGhlIGluc3BlY3RvciBzbyBvbmx5IGNhbGwgdGhpcyBmdW5jdGlv
biB3aGVuCi0gICAgLy8gaXQgaXMgc2FmZSB0byBkbyBhbGxvY2F0aW9ucy4KLSAgICBzdGF0aWMg
dm9pZCBwcm9jZXNzRGVsYXllZE1lc3NhZ2VzKCk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gQWxsIGRl
bGF5ZWQgbWVzc2FnZXMgYXJlIHN0b3JlZCBpbiB0aGlzIHZlY3Rvci4gSWYgdGhlIHZlY3Rvcgot
ICAgIC8vIGlzIE5VTEwsIHRoZXJlIGFyZSBubyBkZWxheWVkIG1lc3NhZ2VzLgotICAgIHN0YXRp
YyBWZWN0b3I8SmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlPiogbV9kZWxheWVkOwotfTsKLQotVmVj
dG9yPEphdmFTY3JpcHRDb25zb2xlTWVzc2FnZT4qIENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6bV9k
ZWxheWVkID0gMDsKLQotdm9pZCBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OmFkZE1lc3NhZ2UoUGFn
ZSogcGFnZSwgY29uc3QgSmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlJiBtZXNzYWdlKQotewotICAg
IC8vIFByb2Nlc3MgYW55IGRlbGF5ZWQgbWVzc2FnZXMgdG8gbWFrZSBzdXJlIHRoYXQgbWVzc2Fn
ZXMKLSAgICAvLyBhcHBlYXIgaW4gdGhlIHJpZ2h0IG9yZGVyIGluIHRoZSBjb25zb2xlLgotICAg
IHByb2Nlc3NEZWxheWVkTWVzc2FnZXMoKTsKLSAgICBtZXNzYWdlLmFkZFRvUGFnZShwYWdlKTsK
LX0KLQotdm9pZCBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OmFkZERlbGF5ZWRNZXNzYWdlKGNvbnN0
IEphdmFTY3JpcHRDb25zb2xlTWVzc2FnZSYgbWVzc2FnZSkKLXsKLSAgICBpZiAoIW1fZGVsYXll
ZCkgewotICAgICAgICAvLyBBbGxvY2F0ZSBhIHZlY3RvciBmb3IgdGhlIGRlbGF5ZWQgbWVzc2Fn
ZXMuIFdpbGwgYmUKLSAgICAgICAgLy8gZGVhbGxvY2F0ZWQgd2hlbiB0aGUgZGVsYXllZCBtZXNz
YWdlcyBhcmUgcHJvY2Vzc2VkCi0gICAgICAgIC8vIGluIHByb2Nlc3NEZWxheWVkTWVzc2FnZXMo
KS4KLSAgICAgICAgbV9kZWxheWVkID0gbmV3IFZlY3RvcjxKYXZhU2NyaXB0Q29uc29sZU1lc3Nh
Z2U+KCk7Ci0gICAgfQotICAgIG1fZGVsYXllZC0+YXBwZW5kKG1lc3NhZ2UpOwotfQotCi12b2lk
IENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6cHJvY2Vzc0RlbGF5ZWRNZXNzYWdlcygpCi17Ci0gICAg
Ly8gSWYgd2UgaGF2ZSBhIGRlbGF5ZWQgdmVjdG9yIGl0IGNhbm5vdCBiZSBlbXB0eS4KLSAgICBp
ZiAoIW1fZGVsYXllZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCghbV9kZWxheWVkLT5p
c0VtcHR5KCkpOwotCi0gICAgLy8gQWRkIHRoZSBkZWxheWVkIG1lc3NhZ2VzIHRvIHRoZSBwYWdl
IG9mIHRoZSBhY3RpdmUKLSAgICAvLyBjb250ZXh0LiBJZiB0aGF0IGZvciBzb21lIGJpemFycmUg
cmVhc29uIGRvZXMgbm90Ci0gICAgLy8gZXhpc3QsIHdlIGNsZWFyIHRoZSBsaXN0IG9mIGRlbGF5
ZWQgbWVzc2FnZXMgdG8gYXZvaWQKLSAgICAvLyBwb3N0aW5nIG1lc3NhZ2VzLiBXZSBzdGlsbCBk
ZWFsbG9jYXRlIHRoZSB2ZWN0b3IuCi0gICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmll
dmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Ci0gICAgUGFnZSogcGFnZSA9IDA7Ci0gICAgaWYg
KGZyYW1lKQotICAgICAgICBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIG1fZGVsYXllZC0+Y2xlYXIoKTsKLQotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwg
dGhlIGRlbGF5ZWQgbWVzc2FnZXMgYW5kIGFkZCB0aGVtCi0gICAgLy8gdG8gdGhlIGNvbnNvbGUu
Ci0gICAgY29uc3QgaW50IHNpemUgPSBtX2RlbGF5ZWQtPnNpemUoKTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgbV9kZWxheWVkLT5hdChpKS5hZGRUb1BhZ2Uo
cGFnZSk7Ci0KLSAgICAvLyBEZWFsbG9jYXRlIHRoZSBkZWxheWVkIHZlY3Rvci4KLSAgICBkZWxl
dGUgbV9kZWxheWVkOwotICAgIG1fZGVsYXllZCA9IDA7Ci19Ci0KLS8vIENvbnZlbmllbmNlIGNs
YXNzIGZvciBlbnN1cmluZyB0aGF0IGRlbGF5ZWQgbWVzc2FnZXMgaW4gdGhlCi0vLyBDb25zb2xl
TWVzc2FnZU1hbmFnZXIgYXJlIHByb2Nlc3NlZCBxdWlja2x5LgotY2xhc3MgQ29uc29sZU1lc3Nh
Z2VTY29wZSB7Ci1wdWJsaWM6Ci0gICAgQ29uc29sZU1lc3NhZ2VTY29wZSgpIHsgQ29uc29sZU1l
c3NhZ2VNYW5hZ2VyOjpwcm9jZXNzRGVsYXllZE1lc3NhZ2VzKCk7IH0KLSAgICB+Q29uc29sZU1l
c3NhZ2VTY29wZSgpIHsgQ29uc29sZU1lc3NhZ2VNYW5hZ2VyOjpwcm9jZXNzRGVsYXllZE1lc3Nh
Z2VzKCk7IH0KLX07Ci0KIHZvaWQgbG9nSW5mbyhGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgSmF2YVNjcmlwdENv
bnNvbGVNZXNzYWdlIGNvbnNvbGVNZXNzYWdlKG1lc3NhZ2UsIHVybCwgMCk7Ci0gICAgQ29uc29s
ZU1lc3NhZ2VNYW5hZ2VyOjphZGRNZXNzYWdlKHBhZ2UsIGNvbnNvbGVNZXNzYWdlKTsKLX0KLQot
c3RhdGljIHZvaWQgaGFuZGxlQ29uc29sZU1lc3NhZ2Uodjg6OkhhbmRsZTx2ODo6TWVzc2FnZT4g
bWVzc2FnZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRhdGEpCi17Ci0gICAgLy8gVXNlIHRoZSBm
cmFtZSB3aGVyZSBKYXZhU2NyaXB0IGlzIGNhbGxlZCBmcm9tLgotICAgIEZyYW1lKiBmcmFtZSA9
IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwot
ICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6U3Ry
aW5nPiBlcnJvck1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLT5HZXQoKTsKLSAgICBBU1NFUlQoIWVy
cm9yTWVzc2FnZVN0cmluZy5Jc0VtcHR5KCkpOwotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSB0
b1dlYkNvcmVTdHJpbmcoZXJyb3JNZXNzYWdlU3RyaW5nKTsKLQotICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiByZXNvdXJjZU5hbWUgPSBtZXNzYWdlLT5HZXRTY3JpcHRSZXNvdXJjZU5hbWUoKTsK
LSAgICBib29sIHVzZVVSTCA9IHJlc291cmNlTmFtZS5Jc0VtcHR5KCkgfHwgIXJlc291cmNlTmFt
ZS0+SXNTdHJpbmcoKTsKLSAgICBTdHJpbmcgcmVzb3VyY2VOYW1lU3RyaW5nID0gdXNlVVJMID8g
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogdG9XZWJDb3JlU3RyaW5nKHJlc291cmNlTmFtZSk7
Ci0gICAgSmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlIGNvbnNvbGVNZXNzYWdlKGVycm9yTWVzc2Fn
ZSwgcmVzb3VyY2VOYW1lU3RyaW5nLCBtZXNzYWdlLT5HZXRMaW5lTnVtYmVyKCkpOwotICAgIENv
bnNvbGVNZXNzYWdlTWFuYWdlcjo6YWRkTWVzc2FnZShwYWdlLCBjb25zb2xlTWVzc2FnZSk7Cisg
ICAgVjhDb25zb2xlTWVzc2FnZSBjb25zb2xlTWVzc2FnZShtZXNzYWdlLCB1cmwsIDApOworICAg
IGNvbnNvbGVNZXNzYWdlLmRpc3BhdGNoTm93KHBhZ2UpOwogfQogCiBlbnVtIERlbGF5UmVwb3J0
aW5nIHsKQEAgLTMwNCwyMCArMTY5LDE5IEBAIHN0YXRpYyB2b2lkIHJlcG9ydFVuc2FmZUFjY2Vz
c1RvKEZyYW1lKiAKICAgICAvLyBCdWlsZCBhIGNvbnNvbGUgbWVzc2FnZSB3aXRoIGZha2Ugc291
cmNlIElEIGFuZCBsaW5lIG51bWJlci4KICAgICBjb25zdCBTdHJpbmcga1NvdXJjZUlEID0gIiI7
CiAgICAgY29uc3QgaW50IGtMaW5lTnVtYmVyID0gMTsKLSAgICBKYXZhU2NyaXB0Q29uc29sZU1l
c3NhZ2UgbWVzc2FnZShzdHIsIGtTb3VyY2VJRCwga0xpbmVOdW1iZXIpOworICAgIFY4Q29uc29s
ZU1lc3NhZ2UgbWVzc2FnZShzdHIsIGtTb3VyY2VJRCwga0xpbmVOdW1iZXIpOwogCiAgICAgaWYg
KGRlbGF5ID09IFJlcG9ydE5vdykgewogICAgICAgICAvLyBOT1RFOiBTYWZhcmkgcHJpbnRzIHRo
ZSBtZXNzYWdlIGluIHRoZSB0YXJnZXQgcGFnZSwgYnV0IGl0IHNlZW1zIGxpa2UKICAgICAgICAg
Ly8gaXQgc2hvdWxkIGJlIGluIHRoZSBzb3VyY2UgcGFnZS4gRXZlbiBmb3IgZGVsYXllZCBtZXNz
YWdlcywgd2UgcHV0IGl0IGluCi0gICAgICAgIC8vIHRoZSBzb3VyY2UgcGFnZTsgc2VlIENvbnNv
bGVNZXNzYWdlTWFuYWdlcjo6cHJvY2Vzc0RlbGF5ZWRNZXNzYWdlcygpLgotICAgICAgICBDb25z
b2xlTWVzc2FnZU1hbmFnZXI6OmFkZE1lc3NhZ2Uoc291cmNlLT5wYWdlKCksIG1lc3NhZ2UpOwot
CisgICAgICAgIC8vIHRoZSBzb3VyY2UgcGFnZTsgc2VlIFY4Q29uc29sZU1lc3NhZ2U6OnByb2Nl
c3NEZWxheWVkKCkuCisgICAgICAgIG1lc3NhZ2UuZGlzcGF0Y2hOb3coc291cmNlLT5wYWdlKCkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChkZWxheSA9PSBSZXBvcnRMYXRlcik7CiAg
ICAgICAgIC8vIFdlIGNhbm5vdCBzYWZlbHkgcmVwb3J0IHRoZSBtZXNzYWdlIGVhZ2VybHksIGJl
Y2F1c2UgdGhpcyBtYXkgY2F1c2UKICAgICAgICAgLy8gYWxsb2NhdGlvbnMgYW5kIEdDcyBpbnRl
cm5hbGx5IGluIFY4IGFuZCB3ZSBjYW5ub3QgaGFuZGxlIHRoYXQgYXQgdGhpcwogICAgICAgICAv
LyBwb2ludC4gVGhlcmVmb3JlIHdlIGRlbGF5IHRoZSByZXBvcnRpbmcuCi0gICAgICAgIENvbnNv
bGVNZXNzYWdlTWFuYWdlcjo6YWRkRGVsYXllZE1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgIG1l
c3NhZ2UuZGlzcGF0Y2hMYXRlcigpOwogICAgIH0KIH0KIApAQCAtNTYwLDcgKzQyNCw3IEBAIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IFY4UHJveHk6OnJ1blNjcmlwdCgKICAgICAvLyBSdW4gdGhlIHNj
cmlwdCBhbmQga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCByZWN1cnNpb24gZGVwdGguCiAgICAg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0OwogICAgIHsKLSAgICAgICAgQ29uc29sZU1lc3Nh
Z2VTY29wZSBzY29wZTsKKyAgICAgICAgVjhDb25zb2xlTWVzc2FnZTo6U2NvcGUgc2NvcGU7CiAg
ICAgICAgIG1fcmVjdXJzaW9uKys7CiAKICAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gVjhQcm94
eTo6Y2FsbEZ1bmN0aW9uLgpAQCAtNTkzLDcgKzQ1Nyw3IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IFY4UHJveHk6OmNhbGxGdW5jdGkKICAgICAvLyBjb250cmFzdCB0byB0aGUgc2NyaXB0IGV2YWx1
YXRpb25zLgogICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdDsKICAgICB7Ci0gICAgICAg
IENvbnNvbGVNZXNzYWdlU2NvcGUgc2NvcGU7CisgICAgICAgIFY4Q29uc29sZU1lc3NhZ2U6OlNj
b3BlIHNjb3BlOwogCiAgICAgICAgIC8vIEV2YWx1YXRpbmcgdGhlIEphdmFTY3JpcHQgY291bGQg
Y2F1c2UgdGhlIGZyYW1lIHRvIGJlIGRlYWxsb2NhdGVkLAogICAgICAgICAvLyBzbyB3ZSBzdGFy
dCB0aGUga2VlcCBhbGl2ZSB0aW1lciBoZXJlLgpAQCAtNjE3LDcgKzQ4MSw3IEBAIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IFY4UHJveHk6Om5ld0luc3RhbmMKICAgICAvLyBWOFByb3h5OjpjYWxsRnVu
Y3Rpb24uCiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0OwogICAgIHsKLSAgICAgICAg
Q29uc29sZU1lc3NhZ2VTY29wZSBzY29wZTsKKyAgICAgICAgVjhDb25zb2xlTWVzc2FnZTo6U2Nv
cGUgc2NvcGU7CiAKICAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gVjhQcm94eTo6Y2FsbEZ1bmN0
aW9uLgogICAgICAgICBtX2ZyYW1lLT5rZWVwQWxpdmUoKTsKQEAgLTExNTEsNyArMTAxNSw3IEBA
IHZvaWQgVjhQcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCgpCiAgICAgICAgIHY4OjpWODo6U2V0
R2xvYmFsR0NQcm9sb2d1ZUNhbGxiYWNrKCZWOEdDQ29udHJvbGxlcjo6Z2NQcm9sb2d1ZSk7CiAg
ICAgICAgIHY4OjpWODo6U2V0R2xvYmFsR0NFcGlsb2d1ZUNhbGxiYWNrKCZWOEdDQ29udHJvbGxl
cjo6Z2NFcGlsb2d1ZSk7CiAKLSAgICAgICAgdjg6OlY4OjpBZGRNZXNzYWdlTGlzdGVuZXIoaGFu
ZGxlQ29uc29sZU1lc3NhZ2UpOworICAgICAgICB2ODo6Vjg6OkFkZE1lc3NhZ2VMaXN0ZW5lcigm
VjhDb25zb2xlTWVzc2FnZTo6aGFuZGxlcik7CiAKICAgICAgICAgdjg6OlY4OjpTZXRGYWlsZWRB
Y2Nlc3NDaGVja0NhbGxiYWNrRnVuY3Rpb24ocmVwb3J0VW5zYWZlSmF2YVNjcmlwdEFjY2Vzcyk7
CiAKQEAgLTEzMTAsNyArMTE3NCw3IEBAIHZvaWQgVjhQcm94eTo6YmluZEpzT2JqZWN0VG9XaW5k
b3coRnJhbWUKIAogdm9pZCBWOFByb3h5Ojpwcm9jZXNzQ29uc29sZU1lc3NhZ2VzKCkKIHsKLSAg
ICBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OnByb2Nlc3NEZWxheWVkTWVzc2FnZXMoKTsKKyAgICBW
OENvbnNvbGVNZXNzYWdlOjpwcm9jZXNzRGVsYXllZCgpOwogfQogCiAvLyBDcmVhdGUgdGhlIHV0
aWxpdHkgY29udGV4dCBmb3IgaG9sZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB1c2VkIGludGVy
bmFsbHk=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33036</attachid>
            <date>2009-07-18 23:13:28 -0700</date>
            <delta_ts>2009-07-19 19:55:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug-27421-20090718231327.patch</filename>
            <type>text/plain</type>
            <size>19841</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjEwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDktMDctMTggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhd
IEZhY3RvciBWOENvbnNvbGVNZXNzYWdlIG91dCBvZiBWOFByb3h5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQyMQorCisgICAgICAgIE5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9WOENvbnNvbGVNZXNzYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOENv
bnNvbGVNZXNzYWdlOjpWOENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q29u
c29sZU1lc3NhZ2U6OmRpc3BhdGNoTm93KToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q29uc29sZU1l
c3NhZ2U6OmRpc3BhdGNoTGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhDb25zb2xlTWVzc2Fn
ZTo6cHJvY2Vzc0RlbGF5ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhDb25zb2xlTWVzc2FnZTo6
aGFuZGxlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhDb25zb2xlTWVzc2FnZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q29uc29sZU1lc3NhZ2U6OlNjb3BlOjpTY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOENvbnNvbGVNZXNzYWdlOjpTY29wZTo6flNjb3BlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvZ0luZm8p
OgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0VW5zYWZlQWNjZXNzVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6VjhQcm94eTo6cnVuU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNh
bGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpuZXdJbnN0YW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4UHJveHk6OnByb2Nlc3NDb25zb2xlTWVzc2FnZXMpOgorCiAyMDA5LTA3LTE4
ICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA0NjA5MSkKKysrIFdl
YkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNiArNjkzLDggQEAKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhDb2xsZWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhDb2xs
ZWN0aW9uLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuY3Bw
JywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOENvbnNvbGVNZXNzYWdlLmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhET01NYXAuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNw
cCcsCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb25zb2xlTWVzc2FnZS5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJWOENvbnNvbGVNZXNzYWdlLmgiCisKKyNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAi
RE9NV2luZG93LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJPd25QdHIuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94
eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZlY3RvcjxWOENvbnNvbGVNZXNzYWdlPiog
VjhDb25zb2xlTWVzc2FnZTo6bV9kZWxheWVkTWVzc2FnZXMgPSAwOworCitWOENvbnNvbGVNZXNz
YWdlOjpWOENvbnNvbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQorICAgICA6IG1fc3RyaW5nKHN0cmluZykK
KyAgICAgLCBtX3NvdXJjZUlEKHNvdXJjZUlEKQorICAgICAsIG1fbGluZU51bWJlcihsaW5lTnVt
YmVyKQoreworfQorCit2b2lkIFY4Q29uc29sZU1lc3NhZ2U6OmRpc3BhdGNoTm93KFBhZ2UqIHBh
Z2UpCit7CisgICAgQVNTRVJUKHBhZ2UpOworCisgICAgLy8gUHJvY2VzcyBhbnkgZGVsYXllZCBt
ZXNzYWdlcyB0byBtYWtlIHN1cmUgdGhhdCBtZXNzYWdlcworICAgIC8vIGFwcGVhciBpbiB0aGUg
cmlnaHQgb3JkZXIgaW4gdGhlIGNvbnNvbGUuCisgICAgcHJvY2Vzc0RlbGF5ZWQoKTsKKworICAg
IENvbnNvbGUqIGNvbnNvbGUgPSBwYWdlLT5tYWluRnJhbWUoKS0+ZG9tV2luZG93KCktPmNvbnNv
bGUoKTsKKyAgICBjb25zb2xlLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2Fn
ZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCBtX3N0cmluZywgbV9saW5lTnVtYmVyLCBtX3NvdXJj
ZUlEKTsKK30KKwordm9pZCBWOENvbnNvbGVNZXNzYWdlOjpkaXNwYXRjaExhdGVyKCkKK3sKKyAg
ICBpZiAoIW1fZGVsYXllZE1lc3NhZ2VzKSB7CisgICAgICAgIC8vIEFsbG9jYXRlIGEgdmVjdG9y
IGZvciB0aGUgZGVsYXllZCBtZXNzYWdlcy4gV2lsbCBiZQorICAgICAgICAvLyBkZWFsbG9jYXRl
ZCB3aGVuIHRoZSBkZWxheWVkIG1lc3NhZ2VzIGFyZSBwcm9jZXNzZWQKKyAgICAgICAgLy8gaW4g
cHJvY2Vzc0RlbGF5ZWQoKS4KKyAgICAgICAgbV9kZWxheWVkTWVzc2FnZXMgPSBuZXcgVmVjdG9y
PFY4Q29uc29sZU1lc3NhZ2U+KCk7CisgICAgfQorCisgICAgbV9kZWxheWVkTWVzc2FnZXMtPmFw
cGVuZCgqdGhpcyk7Cit9CisKK3ZvaWQgVjhDb25zb2xlTWVzc2FnZTo6cHJvY2Vzc0RlbGF5ZWQo
KQoreworICAgIGlmICghbV9kZWxheWVkTWVzc2FnZXMpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBkZWxheWVkIHZlY3RvciB0byBhdm9pZCByZS1lbnRy
YW5jeSBpc3N1ZXMuCisgICAgT3duUHRyPFZlY3RvcjxWOENvbnNvbGVNZXNzYWdlPiA+IGRlbGF5
ZWRNZXNzYWdlcyhtX2RlbGF5ZWRNZXNzYWdlcyk7CisgICAgbV9kZWxheWVkTWVzc2FnZXMgPSAw
OworCisgICAgLy8gSWYgd2UgaGF2ZSBhIGRlbGF5ZWQgdmVjdG9yIGl0IGNhbm5vdCBiZSBlbXB0
eS4KKyAgICBBU1NFUlQoIWRlbGF5ZWRNZXNzYWdlcy0+aXNFbXB0eSgpKTsKKworICAgIC8vIEFk
ZCB0aGUgZGVsYXllZCBtZXNzYWdlcyB0byB0aGUgcGFnZSBvZiB0aGUgYWN0aXZlCisgICAgLy8g
Y29udGV4dC4gSWYgdGhhdCBmb3Igc29tZSBiaXphcnJlIHJlYXNvbiBkb2VzIG5vdAorICAgIC8v
IGV4aXN0LCB3ZSBjbGVhciB0aGUgbGlzdCBvZiBkZWxheWVkIG1lc3NhZ2VzIHRvIGF2b2lkCisg
ICAgLy8gcG9zdGluZyBtZXNzYWdlcy4gV2Ugc3RpbGwgZGVhbGxvY2F0ZSB0aGUgdmVjdG9yLgor
ICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4
dCgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBQYWdlKiBwYWdlID0g
ZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGRlbGF5ZWQgbWVzc2FnZXMgYW5kIGFkZCB0aGVtCisg
ICAgLy8gdG8gdGhlIGNvbnNvbGUuCisgICAgY29uc3QgaW50IHNpemUgPSBkZWxheWVkTWVzc2Fn
ZXMtPnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAg
ZGVsYXllZE1lc3NhZ2VzLT5hdChpKS5kaXNwYXRjaE5vdyhwYWdlKTsKK30KKwordm9pZCBWOENv
bnNvbGVNZXNzYWdlOjpoYW5kbGVyKHY4OjpIYW5kbGU8djg6Ok1lc3NhZ2U+IG1lc3NhZ2UsIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBkYXRhKQoreworICAgIC8vIFVzZSB0aGUgZnJhbWUgd2hlcmUg
SmF2YVNjcmlwdCBpcyBjYWxsZWQgZnJvbS4KKyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5Ojpy
ZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGVycm9yTWVz
c2FnZVN0cmluZyA9IG1lc3NhZ2UtPkdldCgpOworICAgIEFTU0VSVCghZXJyb3JNZXNzYWdlU3Ry
aW5nLklzRW1wdHkoKSk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHRvV2ViQ29yZVN0cmlu
ZyhlcnJvck1lc3NhZ2VTdHJpbmcpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc291
cmNlTmFtZSA9IG1lc3NhZ2UtPkdldFNjcmlwdFJlc291cmNlTmFtZSgpOworICAgIGJvb2wgdXNl
VVJMID0gcmVzb3VyY2VOYW1lLklzRW1wdHkoKSB8fCAhcmVzb3VyY2VOYW1lLT5Jc1N0cmluZygp
OworICAgIFN0cmluZyByZXNvdXJjZU5hbWVTdHJpbmcgPSB1c2VVUkwgPyBmcmFtZS0+ZG9jdW1l
bnQoKS0+dXJsKCkgOiB0b1dlYkNvcmVTdHJpbmcocmVzb3VyY2VOYW1lKTsKKyAgICBWOENvbnNv
bGVNZXNzYWdlIGNvbnNvbGVNZXNzYWdlKGVycm9yTWVzc2FnZSwgcmVzb3VyY2VOYW1lU3RyaW5n
LCBtZXNzYWdlLT5HZXRMaW5lTnVtYmVyKCkpOworICAgIGNvbnNvbGVNZXNzYWdlLmRpc3BhdGNo
Tm93KHBhZ2UpOworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9WOENvbnNvbGVNZXNzYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9WOENvbnNvbGVNZXNzYWdlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgVjhDb25zb2xlTWVzc2FnZV9oCisjZGVmaW5lIFY4Q29uc29sZU1lc3NhZ2VfaAor
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIFBh
Z2U7CisKKyAgICAvLyBWOENvbnNvbGVNZXNzYWdlIGVuY2Fwc3VsYXRlcyBldmVyeXRoaW5nIG5l
ZWRlZCB0bworICAgIC8vIGxvZyBtZXNzYWdlcyBvcmlnaW5hdGluZyBmcm9tIEphdmFTY3JpcHQg
dG8gdGhlIGNvbnNvbGUuCisgICAgY2xhc3MgVjhDb25zb2xlTWVzc2FnZSB7CisgICAgcHVibGlj
OgorICAgICAgICBWOENvbnNvbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBT
dHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKKworICAgICAgICAvLyBBZGQg
YSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlLiBNYXkgZW5kIHVwIGNhbGxpbmcgSmF2YVNjcmlwdCBj
b2RlCisgICAgICAgIC8vIGluZGlyZWN0bHkgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIHNvIG9ubHkg
Y2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4KKyAgICAgICAgLy8gaXQgaXMgc2FmZSB0byBkbyBhbGxv
Y2F0aW9ucy4KKyAgICAgICAgdm9pZCBkaXNwYXRjaE5vdyhQYWdlKik7CisKKyAgICAgICAgLy8g
QWRkIGEgbWVzc2FnZSB0byB0aGUgY29uc29sZSBidXQgZGVsYXkgdGhlIHJlcG9ydGluZyB1bnRp
bCBpdAorICAgICAgICAvLyBpcyBzYWZlIHRvIGRvIHNvOiBFaXRoZXIgd2hlbiB3ZSBsZWF2ZSBK
YXZhU2NyaXB0IGV4ZWN1dGlvbiBvcgorICAgICAgICAvLyB3aGVuIGFkZGluZyBvdGhlciBjb25z
b2xlIG1lc3NhZ2VzLiBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMKKyAgICAgICAgLy8gbWV0
aG9kIGlzIHRvIGF2b2lkIGNhbGxpbmcgaW50byBWOCB0byBoYW5kbGUgY29uc29sZSBtZXNzYWdl
cworICAgICAgICAvLyB3aGVuIHRoZSBWTSBpcyBpbiBhIHN0YXRlIHRoYXQgZG9lcyBub3Qgc3Vw
cG9ydCBHQ3Mgb3IgYWxsb2NhdGlvbnMuCisgICAgICAgIC8vIERlbGF5ZWQgbWVzc2FnZXMgYXJl
IGFsd2F5cyByZXBvcnRlZCBpbiB0aGUgcGFnZSBjb3JyZXNwb25kaW5nCisgICAgICAgIC8vIHRv
IHRoZSBhY3RpdmUgY29udGV4dC4KKyAgICAgICAgdm9pZCBkaXNwYXRjaExhdGVyKCk7CisKKyAg
ICAgICAgLy8gUHJvY2VzcyBhbnkgZGVsYXllZCBtZXNzYWdlcy4gTWF5IGVuZCB1cCBjYWxsaW5n
IEphdmFTY3JpcHQgY29kZQorICAgICAgICAvLyBpbmRpcmVjdGx5IHRocm91Z2ggdGhlIGluc3Bl
Y3RvciBzbyBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuCisgICAgICAgIC8vIGl0IGlzIHNh
ZmUgdG8gZG8gYWxsb2NhdGlvbnMuCisgICAgICAgIHN0YXRpYyB2b2lkIHByb2Nlc3NEZWxheWVk
KCk7CisKKyAgICAgICAgLy8gQ29udmVuaWVuY2UgY2xhc3MgZm9yIGVuc3VyaW5nIHRoYXQgZGVs
YXllZCBtZXNzYWdlcyBpbiB0aGUKKyAgICAgICAgLy8gQ29uc29sZU1lc3NhZ2VNYW5hZ2VyIGFy
ZSBwcm9jZXNzZWQgcXVpY2tseS4KKyAgICAgICAgY2xhc3MgU2NvcGUgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBTY29wZSgpIHsgVjhDb25zb2xlTWVzc2FnZTo6cHJvY2Vzc0RlbGF5
ZWQoKTsgfQorICAgICAgICAgICAgflNjb3BlKCkgeyBWOENvbnNvbGVNZXNzYWdlOjpwcm9jZXNz
RGVsYXllZCgpOyB9CisgICAgICAgIH07CisKKyAgICAgICAgLy8gQ2FsbGJhY2sgZnJvbSBWOC4K
KyAgICAgICAgc3RhdGljIHZvaWQgaGFuZGxlcih2ODo6SGFuZGxlPHY4OjpNZXNzYWdlPiBtZXNz
YWdlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGF0YSk7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBjb25zdCBTdHJpbmcgbV9zdHJpbmc7CisgICAgICAgIGNvbnN0IFN0cmluZyBtX3NvdXJjZUlE
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBtX2xpbmVOdW1iZXI7CisKKyAgICAgICAgLy8gQWxs
IGRlbGF5ZWQgbWVzc2FnZXMgYXJlIHN0b3JlZCBpbiB0aGlzIHZlY3Rvci4gSWYgdGhlIHZlY3Rv
cgorICAgICAgICAvLyBpcyBOVUxMLCB0aGVyZSBhcmUgbm8gZGVsYXllZCBtZXNzYWdlcy4KKyAg
ICAgICAgc3RhdGljIFZlY3RvcjxWOENvbnNvbGVNZXNzYWdlPiogbV9kZWxheWVkTWVzc2FnZXM7
CisgICAgfTsKKworfQorCisjZW5kaWYgLy8gVjhDb25zb2xlTWVzc2FnZV9oCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDQ2MDkxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUg
IlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJW
OENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJWOENvbnNvbGVNZXNzYWdlLmgiCiAjaW5jbHVkZSAi
VjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOERP
TVdpbmRvdy5oIgpAQCAtMTMwLDE0OSArMTMxLDEzIEBAIHR5cGVkZWYgSGFzaE1hcDxpbnQsIHY4
OjpGdW5jdGlvblRlbXBsYXQKIAogYm9vbCBBbGxvd0FsbG9jYXRpb246Om1fY3VycmVudCA9IGZh
bHNlOwogCi0vLyBKYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2VzIGVuY2Fwc3VsYXRlIGV2ZXJ5dGhp
bmcgbmVlZGVkIHRvCi0vLyBsb2cgbWVzc2FnZXMgb3JpZ2luYXRpbmcgZnJvbSBKYXZhU2NyaXB0
IHRvIHRoZSBDaHJvbWUgY29uc29sZS4KLWNsYXNzIEphdmFTY3JpcHRDb25zb2xlTWVzc2FnZSB7
Ci1wdWJsaWM6Ci0gICAgSmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQotICAgICAg
ICA6IG1fc3RyaW5nKHN0cmluZykKLSAgICAgICAgLCBtX3NvdXJjZUlEKHNvdXJjZUlEKQotICAg
ICAgICAsIG1fbGluZU51bWJlcihsaW5lTnVtYmVyKQotICAgICAgICB7IAotICAgICAgICB9Ci0K
LSAgICB2b2lkIGFkZFRvUGFnZShQYWdlKikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgY29uc3Qg
U3RyaW5nIG1fc3RyaW5nOwotICAgIGNvbnN0IFN0cmluZyBtX3NvdXJjZUlEOwotICAgIGNvbnN0
IHVuc2lnbmVkIG1fbGluZU51bWJlcjsKLX07Ci0KLXZvaWQgSmF2YVNjcmlwdENvbnNvbGVNZXNz
YWdlOjphZGRUb1BhZ2UoUGFnZSogcGFnZSkgY29uc3QKLXsKLSAgICBBU1NFUlQocGFnZSk7Ci0g
ICAgQ29uc29sZSogY29uc29sZSA9IHBhZ2UtPm1haW5GcmFtZSgpLT5kb21XaW5kb3coKS0+Y29u
c29sZSgpOwotICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNz
YWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1fc3RyaW5nLCBtX2xpbmVOdW1iZXIsIG1fc291
cmNlSUQpOwotfQotCi0vLyBUaGUgQ29uc29sZU1lc3NhZ2VNYW5hZ2VyIGhhbmRsZXMgYWxsIGNv
bnNvbGUgbWVzc2FnZXMgdGhhdCBzdGVtCi0vLyBmcm9tIEphdmFTY3JpcHQuIEl0IGtlZXBzIGEg
bGlzdCBvZiBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiBkZWxheWVkIGJ1dAotLy8gaXQgbWFrZXMg
c3VyZSB0byBhZGQgYWxsIG1lc3NhZ2VzIHRvIHRoZSBjb25zb2xlIGluIHRoZSByaWdodCBvcmRl
ci4KLWNsYXNzIENvbnNvbGVNZXNzYWdlTWFuYWdlciB7Ci1wdWJsaWM6Ci0gICAgLy8gQWRkIGEg
bWVzc2FnZSB0byB0aGUgY29uc29sZS4gTWF5IGVuZCB1cCBjYWxsaW5nIEphdmFTY3JpcHQgY29k
ZQotICAgIC8vIGluZGlyZWN0bHkgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIHNvIG9ubHkgY2FsbCB0
aGlzIGZ1bmN0aW9uIHdoZW4KLSAgICAvLyBpdCBpcyBzYWZlIHRvIGRvIGFsbG9jYXRpb25zLgot
ICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2UoUGFnZSosIGNvbnN0IEphdmFTY3JpcHRDb25zb2xl
TWVzc2FnZSYpOwotCi0gICAgLy8gQWRkIGEgbWVzc2FnZSB0byB0aGUgY29uc29sZSBidXQgZGVs
YXkgdGhlIHJlcG9ydGluZyB1bnRpbCBpdAotICAgIC8vIGlzIHNhZmUgdG8gZG8gc286IEVpdGhl
ciB3aGVuIHdlIGxlYXZlIEphdmFTY3JpcHQgZXhlY3V0aW9uIG9yCi0gICAgLy8gd2hlbiBhZGRp
bmcgb3RoZXIgY29uc29sZSBtZXNzYWdlcy4gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzCi0g
ICAgLy8gbWV0aG9kIGlzIHRvIGF2b2lkIGNhbGxpbmcgaW50byBWOCB0byBoYW5kbGUgY29uc29s
ZSBtZXNzYWdlcwotICAgIC8vIHdoZW4gdGhlIFZNIGlzIGluIGEgc3RhdGUgdGhhdCBkb2VzIG5v
dCBzdXBwb3J0IEdDcyBvciBhbGxvY2F0aW9ucy4KLSAgICAvLyBEZWxheWVkIG1lc3NhZ2VzIGFy
ZSBhbHdheXMgcmVwb3J0ZWQgaW4gdGhlIHBhZ2UgY29ycmVzcG9uZGluZwotICAgIC8vIHRvIHRo
ZSBhY3RpdmUgY29udGV4dC4KLSAgICBzdGF0aWMgdm9pZCBhZGREZWxheWVkTWVzc2FnZShjb25z
dCBKYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UmKTsKLQotICAgIC8vIFByb2Nlc3MgYW55IGRlbGF5
ZWQgbWVzc2FnZXMuIE1heSBlbmQgdXAgY2FsbGluZyBKYXZhU2NyaXB0IGNvZGUKLSAgICAvLyBp
bmRpcmVjdGx5IHRocm91Z2ggdGhlIGluc3BlY3RvciBzbyBvbmx5IGNhbGwgdGhpcyBmdW5jdGlv
biB3aGVuCi0gICAgLy8gaXQgaXMgc2FmZSB0byBkbyBhbGxvY2F0aW9ucy4KLSAgICBzdGF0aWMg
dm9pZCBwcm9jZXNzRGVsYXllZE1lc3NhZ2VzKCk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gQWxsIGRl
bGF5ZWQgbWVzc2FnZXMgYXJlIHN0b3JlZCBpbiB0aGlzIHZlY3Rvci4gSWYgdGhlIHZlY3Rvcgot
ICAgIC8vIGlzIE5VTEwsIHRoZXJlIGFyZSBubyBkZWxheWVkIG1lc3NhZ2VzLgotICAgIHN0YXRp
YyBWZWN0b3I8SmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlPiogbV9kZWxheWVkOwotfTsKLQotVmVj
dG9yPEphdmFTY3JpcHRDb25zb2xlTWVzc2FnZT4qIENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6bV9k
ZWxheWVkID0gMDsKLQotdm9pZCBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OmFkZE1lc3NhZ2UoUGFn
ZSogcGFnZSwgY29uc3QgSmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlJiBtZXNzYWdlKQotewotICAg
IC8vIFByb2Nlc3MgYW55IGRlbGF5ZWQgbWVzc2FnZXMgdG8gbWFrZSBzdXJlIHRoYXQgbWVzc2Fn
ZXMKLSAgICAvLyBhcHBlYXIgaW4gdGhlIHJpZ2h0IG9yZGVyIGluIHRoZSBjb25zb2xlLgotICAg
IHByb2Nlc3NEZWxheWVkTWVzc2FnZXMoKTsKLSAgICBtZXNzYWdlLmFkZFRvUGFnZShwYWdlKTsK
LX0KLQotdm9pZCBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OmFkZERlbGF5ZWRNZXNzYWdlKGNvbnN0
IEphdmFTY3JpcHRDb25zb2xlTWVzc2FnZSYgbWVzc2FnZSkKLXsKLSAgICBpZiAoIW1fZGVsYXll
ZCkgewotICAgICAgICAvLyBBbGxvY2F0ZSBhIHZlY3RvciBmb3IgdGhlIGRlbGF5ZWQgbWVzc2Fn
ZXMuIFdpbGwgYmUKLSAgICAgICAgLy8gZGVhbGxvY2F0ZWQgd2hlbiB0aGUgZGVsYXllZCBtZXNz
YWdlcyBhcmUgcHJvY2Vzc2VkCi0gICAgICAgIC8vIGluIHByb2Nlc3NEZWxheWVkTWVzc2FnZXMo
KS4KLSAgICAgICAgbV9kZWxheWVkID0gbmV3IFZlY3RvcjxKYXZhU2NyaXB0Q29uc29sZU1lc3Nh
Z2U+KCk7Ci0gICAgfQotICAgIG1fZGVsYXllZC0+YXBwZW5kKG1lc3NhZ2UpOwotfQotCi12b2lk
IENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6cHJvY2Vzc0RlbGF5ZWRNZXNzYWdlcygpCi17Ci0gICAg
Ly8gSWYgd2UgaGF2ZSBhIGRlbGF5ZWQgdmVjdG9yIGl0IGNhbm5vdCBiZSBlbXB0eS4KLSAgICBp
ZiAoIW1fZGVsYXllZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCghbV9kZWxheWVkLT5p
c0VtcHR5KCkpOwotCi0gICAgLy8gQWRkIHRoZSBkZWxheWVkIG1lc3NhZ2VzIHRvIHRoZSBwYWdl
IG9mIHRoZSBhY3RpdmUKLSAgICAvLyBjb250ZXh0LiBJZiB0aGF0IGZvciBzb21lIGJpemFycmUg
cmVhc29uIGRvZXMgbm90Ci0gICAgLy8gZXhpc3QsIHdlIGNsZWFyIHRoZSBsaXN0IG9mIGRlbGF5
ZWQgbWVzc2FnZXMgdG8gYXZvaWQKLSAgICAvLyBwb3N0aW5nIG1lc3NhZ2VzLiBXZSBzdGlsbCBk
ZWFsbG9jYXRlIHRoZSB2ZWN0b3IuCi0gICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmll
dmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Ci0gICAgUGFnZSogcGFnZSA9IDA7Ci0gICAgaWYg
KGZyYW1lKQotICAgICAgICBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIG1fZGVsYXllZC0+Y2xlYXIoKTsKLQotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwg
dGhlIGRlbGF5ZWQgbWVzc2FnZXMgYW5kIGFkZCB0aGVtCi0gICAgLy8gdG8gdGhlIGNvbnNvbGUu
Ci0gICAgY29uc3QgaW50IHNpemUgPSBtX2RlbGF5ZWQtPnNpemUoKTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgbV9kZWxheWVkLT5hdChpKS5hZGRUb1BhZ2Uo
cGFnZSk7Ci0KLSAgICAvLyBEZWFsbG9jYXRlIHRoZSBkZWxheWVkIHZlY3Rvci4KLSAgICBkZWxl
dGUgbV9kZWxheWVkOwotICAgIG1fZGVsYXllZCA9IDA7Ci19Ci0KLS8vIENvbnZlbmllbmNlIGNs
YXNzIGZvciBlbnN1cmluZyB0aGF0IGRlbGF5ZWQgbWVzc2FnZXMgaW4gdGhlCi0vLyBDb25zb2xl
TWVzc2FnZU1hbmFnZXIgYXJlIHByb2Nlc3NlZCBxdWlja2x5LgotY2xhc3MgQ29uc29sZU1lc3Nh
Z2VTY29wZSB7Ci1wdWJsaWM6Ci0gICAgQ29uc29sZU1lc3NhZ2VTY29wZSgpIHsgQ29uc29sZU1l
c3NhZ2VNYW5hZ2VyOjpwcm9jZXNzRGVsYXllZE1lc3NhZ2VzKCk7IH0KLSAgICB+Q29uc29sZU1l
c3NhZ2VTY29wZSgpIHsgQ29uc29sZU1lc3NhZ2VNYW5hZ2VyOjpwcm9jZXNzRGVsYXllZE1lc3Nh
Z2VzKCk7IH0KLX07Ci0KIHZvaWQgbG9nSW5mbyhGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgSmF2YVNjcmlwdENv
bnNvbGVNZXNzYWdlIGNvbnNvbGVNZXNzYWdlKG1lc3NhZ2UsIHVybCwgMCk7Ci0gICAgQ29uc29s
ZU1lc3NhZ2VNYW5hZ2VyOjphZGRNZXNzYWdlKHBhZ2UsIGNvbnNvbGVNZXNzYWdlKTsKLX0KLQot
c3RhdGljIHZvaWQgaGFuZGxlQ29uc29sZU1lc3NhZ2Uodjg6OkhhbmRsZTx2ODo6TWVzc2FnZT4g
bWVzc2FnZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRhdGEpCi17Ci0gICAgLy8gVXNlIHRoZSBm
cmFtZSB3aGVyZSBKYXZhU2NyaXB0IGlzIGNhbGxlZCBmcm9tLgotICAgIEZyYW1lKiBmcmFtZSA9
IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwot
ICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6U3Ry
aW5nPiBlcnJvck1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLT5HZXQoKTsKLSAgICBBU1NFUlQoIWVy
cm9yTWVzc2FnZVN0cmluZy5Jc0VtcHR5KCkpOwotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSB0
b1dlYkNvcmVTdHJpbmcoZXJyb3JNZXNzYWdlU3RyaW5nKTsKLQotICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiByZXNvdXJjZU5hbWUgPSBtZXNzYWdlLT5HZXRTY3JpcHRSZXNvdXJjZU5hbWUoKTsK
LSAgICBib29sIHVzZVVSTCA9IHJlc291cmNlTmFtZS5Jc0VtcHR5KCkgfHwgIXJlc291cmNlTmFt
ZS0+SXNTdHJpbmcoKTsKLSAgICBTdHJpbmcgcmVzb3VyY2VOYW1lU3RyaW5nID0gdXNlVVJMID8g
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogdG9XZWJDb3JlU3RyaW5nKHJlc291cmNlTmFtZSk7
Ci0gICAgSmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlIGNvbnNvbGVNZXNzYWdlKGVycm9yTWVzc2Fn
ZSwgcmVzb3VyY2VOYW1lU3RyaW5nLCBtZXNzYWdlLT5HZXRMaW5lTnVtYmVyKCkpOwotICAgIENv
bnNvbGVNZXNzYWdlTWFuYWdlcjo6YWRkTWVzc2FnZShwYWdlLCBjb25zb2xlTWVzc2FnZSk7Cisg
ICAgVjhDb25zb2xlTWVzc2FnZSBjb25zb2xlTWVzc2FnZShtZXNzYWdlLCB1cmwsIDApOworICAg
IGNvbnNvbGVNZXNzYWdlLmRpc3BhdGNoTm93KHBhZ2UpOwogfQogCiBlbnVtIERlbGF5UmVwb3J0
aW5nIHsKQEAgLTMwNCwyMCArMTY5LDE5IEBAIHN0YXRpYyB2b2lkIHJlcG9ydFVuc2FmZUFjY2Vz
c1RvKEZyYW1lKiAKICAgICAvLyBCdWlsZCBhIGNvbnNvbGUgbWVzc2FnZSB3aXRoIGZha2Ugc291
cmNlIElEIGFuZCBsaW5lIG51bWJlci4KICAgICBjb25zdCBTdHJpbmcga1NvdXJjZUlEID0gIiI7
CiAgICAgY29uc3QgaW50IGtMaW5lTnVtYmVyID0gMTsKLSAgICBKYXZhU2NyaXB0Q29uc29sZU1l
c3NhZ2UgbWVzc2FnZShzdHIsIGtTb3VyY2VJRCwga0xpbmVOdW1iZXIpOworICAgIFY4Q29uc29s
ZU1lc3NhZ2UgbWVzc2FnZShzdHIsIGtTb3VyY2VJRCwga0xpbmVOdW1iZXIpOwogCiAgICAgaWYg
KGRlbGF5ID09IFJlcG9ydE5vdykgewogICAgICAgICAvLyBOT1RFOiBTYWZhcmkgcHJpbnRzIHRo
ZSBtZXNzYWdlIGluIHRoZSB0YXJnZXQgcGFnZSwgYnV0IGl0IHNlZW1zIGxpa2UKICAgICAgICAg
Ly8gaXQgc2hvdWxkIGJlIGluIHRoZSBzb3VyY2UgcGFnZS4gRXZlbiBmb3IgZGVsYXllZCBtZXNz
YWdlcywgd2UgcHV0IGl0IGluCi0gICAgICAgIC8vIHRoZSBzb3VyY2UgcGFnZTsgc2VlIENvbnNv
bGVNZXNzYWdlTWFuYWdlcjo6cHJvY2Vzc0RlbGF5ZWRNZXNzYWdlcygpLgotICAgICAgICBDb25z
b2xlTWVzc2FnZU1hbmFnZXI6OmFkZE1lc3NhZ2Uoc291cmNlLT5wYWdlKCksIG1lc3NhZ2UpOwot
CisgICAgICAgIC8vIHRoZSBzb3VyY2UgcGFnZTsgc2VlIFY4Q29uc29sZU1lc3NhZ2U6OnByb2Nl
c3NEZWxheWVkKCkuCisgICAgICAgIG1lc3NhZ2UuZGlzcGF0Y2hOb3coc291cmNlLT5wYWdlKCkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChkZWxheSA9PSBSZXBvcnRMYXRlcik7CiAg
ICAgICAgIC8vIFdlIGNhbm5vdCBzYWZlbHkgcmVwb3J0IHRoZSBtZXNzYWdlIGVhZ2VybHksIGJl
Y2F1c2UgdGhpcyBtYXkgY2F1c2UKICAgICAgICAgLy8gYWxsb2NhdGlvbnMgYW5kIEdDcyBpbnRl
cm5hbGx5IGluIFY4IGFuZCB3ZSBjYW5ub3QgaGFuZGxlIHRoYXQgYXQgdGhpcwogICAgICAgICAv
LyBwb2ludC4gVGhlcmVmb3JlIHdlIGRlbGF5IHRoZSByZXBvcnRpbmcuCi0gICAgICAgIENvbnNv
bGVNZXNzYWdlTWFuYWdlcjo6YWRkRGVsYXllZE1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgIG1l
c3NhZ2UuZGlzcGF0Y2hMYXRlcigpOwogICAgIH0KIH0KIApAQCAtNTYwLDcgKzQyNCw3IEBAIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IFY4UHJveHk6OnJ1blNjcmlwdCgKICAgICAvLyBSdW4gdGhlIHNj
cmlwdCBhbmQga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCByZWN1cnNpb24gZGVwdGguCiAgICAg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0OwogICAgIHsKLSAgICAgICAgQ29uc29sZU1lc3Nh
Z2VTY29wZSBzY29wZTsKKyAgICAgICAgVjhDb25zb2xlTWVzc2FnZTo6U2NvcGUgc2NvcGU7CiAg
ICAgICAgIG1fcmVjdXJzaW9uKys7CiAKICAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gVjhQcm94
eTo6Y2FsbEZ1bmN0aW9uLgpAQCAtNTkzLDcgKzQ1Nyw3IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IFY4UHJveHk6OmNhbGxGdW5jdGkKICAgICAvLyBjb250cmFzdCB0byB0aGUgc2NyaXB0IGV2YWx1
YXRpb25zLgogICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdDsKICAgICB7Ci0gICAgICAg
IENvbnNvbGVNZXNzYWdlU2NvcGUgc2NvcGU7CisgICAgICAgIFY4Q29uc29sZU1lc3NhZ2U6OlNj
b3BlIHNjb3BlOwogCiAgICAgICAgIC8vIEV2YWx1YXRpbmcgdGhlIEphdmFTY3JpcHQgY291bGQg
Y2F1c2UgdGhlIGZyYW1lIHRvIGJlIGRlYWxsb2NhdGVkLAogICAgICAgICAvLyBzbyB3ZSBzdGFy
dCB0aGUga2VlcCBhbGl2ZSB0aW1lciBoZXJlLgpAQCAtNjE3LDcgKzQ4MSw3IEBAIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IFY4UHJveHk6Om5ld0luc3RhbmMKICAgICAvLyBWOFByb3h5OjpjYWxsRnVu
Y3Rpb24uCiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0OwogICAgIHsKLSAgICAgICAg
Q29uc29sZU1lc3NhZ2VTY29wZSBzY29wZTsKKyAgICAgICAgVjhDb25zb2xlTWVzc2FnZTo6U2Nv
cGUgc2NvcGU7CiAKICAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gVjhQcm94eTo6Y2FsbEZ1bmN0
aW9uLgogICAgICAgICBtX2ZyYW1lLT5rZWVwQWxpdmUoKTsKQEAgLTExNTEsNyArMTAxNSw3IEBA
IHZvaWQgVjhQcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCgpCiAgICAgICAgIHY4OjpWODo6U2V0
R2xvYmFsR0NQcm9sb2d1ZUNhbGxiYWNrKCZWOEdDQ29udHJvbGxlcjo6Z2NQcm9sb2d1ZSk7CiAg
ICAgICAgIHY4OjpWODo6U2V0R2xvYmFsR0NFcGlsb2d1ZUNhbGxiYWNrKCZWOEdDQ29udHJvbGxl
cjo6Z2NFcGlsb2d1ZSk7CiAKLSAgICAgICAgdjg6OlY4OjpBZGRNZXNzYWdlTGlzdGVuZXIoaGFu
ZGxlQ29uc29sZU1lc3NhZ2UpOworICAgICAgICB2ODo6Vjg6OkFkZE1lc3NhZ2VMaXN0ZW5lcigm
VjhDb25zb2xlTWVzc2FnZTo6aGFuZGxlcik7CiAKICAgICAgICAgdjg6OlY4OjpTZXRGYWlsZWRB
Y2Nlc3NDaGVja0NhbGxiYWNrRnVuY3Rpb24ocmVwb3J0VW5zYWZlSmF2YVNjcmlwdEFjY2Vzcyk7
CiAKQEAgLTEzMTAsNyArMTE3NCw3IEBAIHZvaWQgVjhQcm94eTo6YmluZEpzT2JqZWN0VG9XaW5k
b3coRnJhbWUKIAogdm9pZCBWOFByb3h5Ojpwcm9jZXNzQ29uc29sZU1lc3NhZ2VzKCkKIHsKLSAg
ICBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OnByb2Nlc3NEZWxheWVkTWVzc2FnZXMoKTsKKyAgICBW
OENvbnNvbGVNZXNzYWdlOjpwcm9jZXNzRGVsYXllZCgpOwogfQogCiAvLyBDcmVhdGUgdGhlIHV0
aWxpdHkgY29udGV4dCBmb3IgaG9sZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB1c2VkIGludGVy
bmFsbHk=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33070</attachid>
            <date>2009-07-19 19:56:06 -0700</date>
            <delta_ts>2009-07-19 20:26:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug-27421-20090719195605.patch</filename>
            <type>text/plain</type>
            <size>19850</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjEwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDktMDctMTggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhd
IEZhY3RvciBWOENvbnNvbGVNZXNzYWdlIG91dCBvZiBWOFByb3h5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQyMQorCisgICAgICAgIE5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9WOENvbnNvbGVNZXNzYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOENv
bnNvbGVNZXNzYWdlOjpWOENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q29u
c29sZU1lc3NhZ2U6OmRpc3BhdGNoTm93KToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q29uc29sZU1l
c3NhZ2U6OmRpc3BhdGNoTGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhDb25zb2xlTWVzc2Fn
ZTo6cHJvY2Vzc0RlbGF5ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhDb25zb2xlTWVzc2FnZTo6
aGFuZGxlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhDb25zb2xlTWVzc2FnZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q29uc29sZU1lc3NhZ2U6OlNjb3BlOjpTY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOENvbnNvbGVNZXNzYWdlOjpTY29wZTo6flNjb3BlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvZ0luZm8p
OgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0VW5zYWZlQWNjZXNzVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6VjhQcm94eTo6cnVuU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNh
bGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpuZXdJbnN0YW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4UHJveHk6OnByb2Nlc3NDb25zb2xlTWVzc2FnZXMpOgorCiAyMDA5LTA3LTE4
ICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA0NjA5MSkKKysrIFdl
YkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNiArNjkzLDggQEAKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhDb2xsZWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhDb2xs
ZWN0aW9uLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuY3Bw
JywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOENvbnNvbGVNZXNzYWdlLmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhET01NYXAuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNw
cCcsCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb25zb2xlTWVzc2FnZS5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJWOENvbnNvbGVNZXNzYWdlLmgiCisKKyNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAi
RE9NV2luZG93LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJPd25QdHIuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94
eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZlY3RvcjxWOENvbnNvbGVNZXNzYWdlPiog
VjhDb25zb2xlTWVzc2FnZTo6bV9kZWxheWVkTWVzc2FnZXMgPSAwOworCitWOENvbnNvbGVNZXNz
YWdlOjpWOENvbnNvbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQorICAgICA6IG1fc3RyaW5nKHN0cmluZykK
KyAgICAgLCBtX3NvdXJjZUlEKHNvdXJjZUlEKQorICAgICAsIG1fbGluZU51bWJlcihsaW5lTnVt
YmVyKQoreworfQorCit2b2lkIFY4Q29uc29sZU1lc3NhZ2U6OmRpc3BhdGNoTm93KFBhZ2UqIHBh
Z2UpCit7CisgICAgQVNTRVJUKHBhZ2UpOworCisgICAgLy8gUHJvY2VzcyBhbnkgZGVsYXllZCBt
ZXNzYWdlcyB0byBtYWtlIHN1cmUgdGhhdCBtZXNzYWdlcworICAgIC8vIGFwcGVhciBpbiB0aGUg
cmlnaHQgb3JkZXIgaW4gdGhlIGNvbnNvbGUuCisgICAgcHJvY2Vzc0RlbGF5ZWQoKTsKKworICAg
IENvbnNvbGUqIGNvbnNvbGUgPSBwYWdlLT5tYWluRnJhbWUoKS0+ZG9tV2luZG93KCktPmNvbnNv
bGUoKTsKKyAgICBjb25zb2xlLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2Fn
ZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCBtX3N0cmluZywgbV9saW5lTnVtYmVyLCBtX3NvdXJj
ZUlEKTsKK30KKwordm9pZCBWOENvbnNvbGVNZXNzYWdlOjpkaXNwYXRjaExhdGVyKCkKK3sKKyAg
ICBpZiAoIW1fZGVsYXllZE1lc3NhZ2VzKSB7CisgICAgICAgIC8vIEFsbG9jYXRlIGEgdmVjdG9y
IGZvciB0aGUgZGVsYXllZCBtZXNzYWdlcy4gV2lsbCBiZQorICAgICAgICAvLyBkZWFsbG9jYXRl
ZCB3aGVuIHRoZSBkZWxheWVkIG1lc3NhZ2VzIGFyZSBwcm9jZXNzZWQKKyAgICAgICAgLy8gaW4g
cHJvY2Vzc0RlbGF5ZWQoKS4KKyAgICAgICAgbV9kZWxheWVkTWVzc2FnZXMgPSBuZXcgVmVjdG9y
PFY4Q29uc29sZU1lc3NhZ2U+KCk7CisgICAgfQorCisgICAgbV9kZWxheWVkTWVzc2FnZXMtPmFw
cGVuZCgqdGhpcyk7Cit9CisKK3ZvaWQgVjhDb25zb2xlTWVzc2FnZTo6cHJvY2Vzc0RlbGF5ZWQo
KQoreworICAgIGlmICghbV9kZWxheWVkTWVzc2FnZXMpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBkZWxheWVkIHZlY3RvciB0byBhdm9pZCByZS1lbnRy
YW5jeSBpc3N1ZXMuCisgICAgT3duUHRyPFZlY3RvcjxWOENvbnNvbGVNZXNzYWdlPiA+IGRlbGF5
ZWRNZXNzYWdlcyhtX2RlbGF5ZWRNZXNzYWdlcyk7CisgICAgbV9kZWxheWVkTWVzc2FnZXMgPSAw
OworCisgICAgLy8gSWYgd2UgaGF2ZSBhIGRlbGF5ZWQgdmVjdG9yIGl0IGNhbm5vdCBiZSBlbXB0
eS4KKyAgICBBU1NFUlQoIWRlbGF5ZWRNZXNzYWdlcy0+aXNFbXB0eSgpKTsKKworICAgIC8vIEFk
ZCB0aGUgZGVsYXllZCBtZXNzYWdlcyB0byB0aGUgcGFnZSBvZiB0aGUgYWN0aXZlCisgICAgLy8g
Y29udGV4dC4gSWYgdGhhdCBmb3Igc29tZSBiaXphcnJlIHJlYXNvbiBkb2VzIG5vdAorICAgIC8v
IGV4aXN0LCB3ZSBjbGVhciB0aGUgbGlzdCBvZiBkZWxheWVkIG1lc3NhZ2VzIHRvIGF2b2lkCisg
ICAgLy8gcG9zdGluZyBtZXNzYWdlcy4gV2Ugc3RpbGwgZGVhbGxvY2F0ZSB0aGUgdmVjdG9yLgor
ICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4
dCgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBQYWdlKiBwYWdlID0g
ZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGRlbGF5ZWQgbWVzc2FnZXMgYW5kIGFkZCB0aGVtCisg
ICAgLy8gdG8gdGhlIGNvbnNvbGUuCisgICAgY29uc3QgaW50IHNpemUgPSBkZWxheWVkTWVzc2Fn
ZXMtPnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAg
ZGVsYXllZE1lc3NhZ2VzLT5hdChpKS5kaXNwYXRjaE5vdyhwYWdlKTsKK30KKwordm9pZCBWOENv
bnNvbGVNZXNzYWdlOjpoYW5kbGVyKHY4OjpIYW5kbGU8djg6Ok1lc3NhZ2U+IG1lc3NhZ2UsIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBkYXRhKQoreworICAgIC8vIFVzZSB0aGUgZnJhbWUgd2hlcmUg
SmF2YVNjcmlwdCBpcyBjYWxsZWQgZnJvbS4KKyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5Ojpy
ZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGVycm9yTWVz
c2FnZVN0cmluZyA9IG1lc3NhZ2UtPkdldCgpOworICAgIEFTU0VSVCghZXJyb3JNZXNzYWdlU3Ry
aW5nLklzRW1wdHkoKSk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHRvV2ViQ29yZVN0cmlu
ZyhlcnJvck1lc3NhZ2VTdHJpbmcpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc291
cmNlTmFtZSA9IG1lc3NhZ2UtPkdldFNjcmlwdFJlc291cmNlTmFtZSgpOworICAgIGJvb2wgdXNl
VVJMID0gcmVzb3VyY2VOYW1lLklzRW1wdHkoKSB8fCAhcmVzb3VyY2VOYW1lLT5Jc1N0cmluZygp
OworICAgIFN0cmluZyByZXNvdXJjZU5hbWVTdHJpbmcgPSB1c2VVUkwgPyBmcmFtZS0+ZG9jdW1l
bnQoKS0+dXJsKCkgOiB0b1dlYkNvcmVTdHJpbmcocmVzb3VyY2VOYW1lKTsKKyAgICBWOENvbnNv
bGVNZXNzYWdlIGNvbnNvbGVNZXNzYWdlKGVycm9yTWVzc2FnZSwgcmVzb3VyY2VOYW1lU3RyaW5n
LCBtZXNzYWdlLT5HZXRMaW5lTnVtYmVyKCkpOworICAgIGNvbnNvbGVNZXNzYWdlLmRpc3BhdGNo
Tm93KHBhZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4Q29uc29sZU1lc3NhZ2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhDb25zb2xlTWVzc2FnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBWOENvbnNvbGVNZXNzYWdlX2gKKyNkZWZpbmUgVjhDb25zb2xlTWVzc2FnZV9oCisK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgUGFn
ZTsKKworICAgIC8vIFY4Q29uc29sZU1lc3NhZ2UgZW5jYXBzdWxhdGVzIGV2ZXJ5dGhpbmcgbmVl
ZGVkIHRvCisgICAgLy8gbG9nIG1lc3NhZ2VzIG9yaWdpbmF0aW5nIGZyb20gSmF2YVNjcmlwdCB0
byB0aGUgY29uc29sZS4KKyAgICBjbGFzcyBWOENvbnNvbGVNZXNzYWdlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFY4Q29uc29sZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFN0
cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpOworCisgICAgICAgIC8vIEFkZCBh
IG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUuIE1heSBlbmQgdXAgY2FsbGluZyBKYXZhU2NyaXB0IGNv
ZGUKKyAgICAgICAgLy8gaW5kaXJlY3RseSB0aHJvdWdoIHRoZSBpbnNwZWN0b3Igc28gb25seSBj
YWxsIHRoaXMgZnVuY3Rpb24gd2hlbgorICAgICAgICAvLyBpdCBpcyBzYWZlIHRvIGRvIGFsbG9j
YXRpb25zLgorICAgICAgICB2b2lkIGRpc3BhdGNoTm93KFBhZ2UqKTsKKworICAgICAgICAvLyBB
ZGQgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlIGJ1dCBkZWxheSB0aGUgcmVwb3J0aW5nIHVudGls
IGl0CisgICAgICAgIC8vIGlzIHNhZmUgdG8gZG8gc286IEVpdGhlciB3aGVuIHdlIGxlYXZlIEph
dmFTY3JpcHQgZXhlY3V0aW9uIG9yCisgICAgICAgIC8vIHdoZW4gYWRkaW5nIG90aGVyIGNvbnNv
bGUgbWVzc2FnZXMuIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcworICAgICAgICAvLyBtZXRo
b2QgaXMgdG8gYXZvaWQgY2FsbGluZyBpbnRvIFY4IHRvIGhhbmRsZSBjb25zb2xlIG1lc3NhZ2Vz
CisgICAgICAgIC8vIHdoZW4gdGhlIFZNIGlzIGluIGEgc3RhdGUgdGhhdCBkb2VzIG5vdCBzdXBw
b3J0IEdDcyBvciBhbGxvY2F0aW9ucy4KKyAgICAgICAgLy8gRGVsYXllZCBtZXNzYWdlcyBhcmUg
YWx3YXlzIHJlcG9ydGVkIGluIHRoZSBwYWdlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgLy8gdG8g
dGhlIGFjdGl2ZSBjb250ZXh0LgorICAgICAgICB2b2lkIGRpc3BhdGNoTGF0ZXIoKTsKKworICAg
ICAgICAvLyBQcm9jZXNzIGFueSBkZWxheWVkIG1lc3NhZ2VzLiBNYXkgZW5kIHVwIGNhbGxpbmcg
SmF2YVNjcmlwdCBjb2RlCisgICAgICAgIC8vIGluZGlyZWN0bHkgdGhyb3VnaCB0aGUgaW5zcGVj
dG9yIHNvIG9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4KKyAgICAgICAgLy8gaXQgaXMgc2Fm
ZSB0byBkbyBhbGxvY2F0aW9ucy4KKyAgICAgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0RlbGF5ZWQo
KTsKKworICAgICAgICAvLyBDb252ZW5pZW5jZSBjbGFzcyBmb3IgZW5zdXJpbmcgdGhhdCBkZWxh
eWVkIG1lc3NhZ2VzIGluIHRoZQorICAgICAgICAvLyBDb25zb2xlTWVzc2FnZU1hbmFnZXIgYXJl
IHByb2Nlc3NlZCBxdWlja2x5LgorICAgICAgICBjbGFzcyBTY29wZSB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIFNjb3BlKCkgeyBWOENvbnNvbGVNZXNzYWdlOjpwcm9jZXNzRGVsYXll
ZCgpOyB9CisgICAgICAgICAgICB+U2NvcGUoKSB7IFY4Q29uc29sZU1lc3NhZ2U6OnByb2Nlc3NE
ZWxheWVkKCk7IH0KKyAgICAgICAgfTsKKworICAgICAgICAvLyBDYWxsYmFjayBmcm9tIFY4Lgor
ICAgICAgICBzdGF0aWMgdm9pZCBoYW5kbGVyKHY4OjpIYW5kbGU8djg6Ok1lc3NhZ2U+LCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gZGF0YSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBT
dHJpbmcgbV9zdHJpbmc7CisgICAgICAgIGNvbnN0IFN0cmluZyBtX3NvdXJjZUlEOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBtX2xpbmVOdW1iZXI7CisKKyAgICAgICAgLy8gQWxsIGRlbGF5ZWQg
bWVzc2FnZXMgYXJlIHN0b3JlZCBpbiB0aGlzIHZlY3Rvci4gSWYgdGhlIHZlY3RvcgorICAgICAg
ICAvLyBpcyAwLCB0aGVyZSBhcmUgbm8gZGVsYXllZCBtZXNzYWdlcy4KKyAgICAgICAgc3RhdGlj
IFZlY3RvcjxWOENvbnNvbGVNZXNzYWdlPiogbV9kZWxheWVkTWVzc2FnZXM7CisgICAgfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhDb25zb2xlTWVzc2FnZV9oCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDQ2MDkxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAog
I2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNp
bmNsdWRlICJWOENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJWOENvbnNvbGVNZXNzYWdlLmgiCiAj
aW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNs
dWRlICJWOERPTVdpbmRvdy5oIgpAQCAtMTMwLDE0OSArMTMxLDEzIEBAIHR5cGVkZWYgSGFzaE1h
cDxpbnQsIHY4OjpGdW5jdGlvblRlbXBsYXQKIAogYm9vbCBBbGxvd0FsbG9jYXRpb246Om1fY3Vy
cmVudCA9IGZhbHNlOwogCi0vLyBKYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2VzIGVuY2Fwc3VsYXRl
IGV2ZXJ5dGhpbmcgbmVlZGVkIHRvCi0vLyBsb2cgbWVzc2FnZXMgb3JpZ2luYXRpbmcgZnJvbSBK
YXZhU2NyaXB0IHRvIHRoZSBDaHJvbWUgY29uc29sZS4KLWNsYXNzIEphdmFTY3JpcHRDb25zb2xl
TWVzc2FnZSB7Ci1wdWJsaWM6Ci0gICAgSmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVy
KQotICAgICAgICA6IG1fc3RyaW5nKHN0cmluZykKLSAgICAgICAgLCBtX3NvdXJjZUlEKHNvdXJj
ZUlEKQotICAgICAgICAsIG1fbGluZU51bWJlcihsaW5lTnVtYmVyKQotICAgICAgICB7IAotICAg
ICAgICB9Ci0KLSAgICB2b2lkIGFkZFRvUGFnZShQYWdlKikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0g
ICAgY29uc3QgU3RyaW5nIG1fc3RyaW5nOwotICAgIGNvbnN0IFN0cmluZyBtX3NvdXJjZUlEOwot
ICAgIGNvbnN0IHVuc2lnbmVkIG1fbGluZU51bWJlcjsKLX07Ci0KLXZvaWQgSmF2YVNjcmlwdENv
bnNvbGVNZXNzYWdlOjphZGRUb1BhZ2UoUGFnZSogcGFnZSkgY29uc3QKLXsKLSAgICBBU1NFUlQo
cGFnZSk7Ci0gICAgQ29uc29sZSogY29uc29sZSA9IHBhZ2UtPm1haW5GcmFtZSgpLT5kb21XaW5k
b3coKS0+Y29uc29sZSgpOwotICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNl
LCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1fc3RyaW5nLCBtX2xpbmVOdW1i
ZXIsIG1fc291cmNlSUQpOwotfQotCi0vLyBUaGUgQ29uc29sZU1lc3NhZ2VNYW5hZ2VyIGhhbmRs
ZXMgYWxsIGNvbnNvbGUgbWVzc2FnZXMgdGhhdCBzdGVtCi0vLyBmcm9tIEphdmFTY3JpcHQuIEl0
IGtlZXBzIGEgbGlzdCBvZiBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiBkZWxheWVkIGJ1dAotLy8g
aXQgbWFrZXMgc3VyZSB0byBhZGQgYWxsIG1lc3NhZ2VzIHRvIHRoZSBjb25zb2xlIGluIHRoZSBy
aWdodCBvcmRlci4KLWNsYXNzIENvbnNvbGVNZXNzYWdlTWFuYWdlciB7Ci1wdWJsaWM6Ci0gICAg
Ly8gQWRkIGEgbWVzc2FnZSB0byB0aGUgY29uc29sZS4gTWF5IGVuZCB1cCBjYWxsaW5nIEphdmFT
Y3JpcHQgY29kZQotICAgIC8vIGluZGlyZWN0bHkgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIHNvIG9u
bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4KLSAgICAvLyBpdCBpcyBzYWZlIHRvIGRvIGFsbG9j
YXRpb25zLgotICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2UoUGFnZSosIGNvbnN0IEphdmFTY3Jp
cHRDb25zb2xlTWVzc2FnZSYpOwotCi0gICAgLy8gQWRkIGEgbWVzc2FnZSB0byB0aGUgY29uc29s
ZSBidXQgZGVsYXkgdGhlIHJlcG9ydGluZyB1bnRpbCBpdAotICAgIC8vIGlzIHNhZmUgdG8gZG8g
c286IEVpdGhlciB3aGVuIHdlIGxlYXZlIEphdmFTY3JpcHQgZXhlY3V0aW9uIG9yCi0gICAgLy8g
d2hlbiBhZGRpbmcgb3RoZXIgY29uc29sZSBtZXNzYWdlcy4gVGhlIHByaW1hcnkgcHVycG9zZSBv
ZiB0aGlzCi0gICAgLy8gbWV0aG9kIGlzIHRvIGF2b2lkIGNhbGxpbmcgaW50byBWOCB0byBoYW5k
bGUgY29uc29sZSBtZXNzYWdlcwotICAgIC8vIHdoZW4gdGhlIFZNIGlzIGluIGEgc3RhdGUgdGhh
dCBkb2VzIG5vdCBzdXBwb3J0IEdDcyBvciBhbGxvY2F0aW9ucy4KLSAgICAvLyBEZWxheWVkIG1l
c3NhZ2VzIGFyZSBhbHdheXMgcmVwb3J0ZWQgaW4gdGhlIHBhZ2UgY29ycmVzcG9uZGluZwotICAg
IC8vIHRvIHRoZSBhY3RpdmUgY29udGV4dC4KLSAgICBzdGF0aWMgdm9pZCBhZGREZWxheWVkTWVz
c2FnZShjb25zdCBKYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UmKTsKLQotICAgIC8vIFByb2Nlc3Mg
YW55IGRlbGF5ZWQgbWVzc2FnZXMuIE1heSBlbmQgdXAgY2FsbGluZyBKYXZhU2NyaXB0IGNvZGUK
LSAgICAvLyBpbmRpcmVjdGx5IHRocm91Z2ggdGhlIGluc3BlY3RvciBzbyBvbmx5IGNhbGwgdGhp
cyBmdW5jdGlvbiB3aGVuCi0gICAgLy8gaXQgaXMgc2FmZSB0byBkbyBhbGxvY2F0aW9ucy4KLSAg
ICBzdGF0aWMgdm9pZCBwcm9jZXNzRGVsYXllZE1lc3NhZ2VzKCk7Ci0KLXByaXZhdGU6Ci0gICAg
Ly8gQWxsIGRlbGF5ZWQgbWVzc2FnZXMgYXJlIHN0b3JlZCBpbiB0aGlzIHZlY3Rvci4gSWYgdGhl
IHZlY3RvcgotICAgIC8vIGlzIE5VTEwsIHRoZXJlIGFyZSBubyBkZWxheWVkIG1lc3NhZ2VzLgot
ICAgIHN0YXRpYyBWZWN0b3I8SmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlPiogbV9kZWxheWVkOwot
fTsKLQotVmVjdG9yPEphdmFTY3JpcHRDb25zb2xlTWVzc2FnZT4qIENvbnNvbGVNZXNzYWdlTWFu
YWdlcjo6bV9kZWxheWVkID0gMDsKLQotdm9pZCBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OmFkZE1l
c3NhZ2UoUGFnZSogcGFnZSwgY29uc3QgSmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlJiBtZXNzYWdl
KQotewotICAgIC8vIFByb2Nlc3MgYW55IGRlbGF5ZWQgbWVzc2FnZXMgdG8gbWFrZSBzdXJlIHRo
YXQgbWVzc2FnZXMKLSAgICAvLyBhcHBlYXIgaW4gdGhlIHJpZ2h0IG9yZGVyIGluIHRoZSBjb25z
b2xlLgotICAgIHByb2Nlc3NEZWxheWVkTWVzc2FnZXMoKTsKLSAgICBtZXNzYWdlLmFkZFRvUGFn
ZShwYWdlKTsKLX0KLQotdm9pZCBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OmFkZERlbGF5ZWRNZXNz
YWdlKGNvbnN0IEphdmFTY3JpcHRDb25zb2xlTWVzc2FnZSYgbWVzc2FnZSkKLXsKLSAgICBpZiAo
IW1fZGVsYXllZCkgewotICAgICAgICAvLyBBbGxvY2F0ZSBhIHZlY3RvciBmb3IgdGhlIGRlbGF5
ZWQgbWVzc2FnZXMuIFdpbGwgYmUKLSAgICAgICAgLy8gZGVhbGxvY2F0ZWQgd2hlbiB0aGUgZGVs
YXllZCBtZXNzYWdlcyBhcmUgcHJvY2Vzc2VkCi0gICAgICAgIC8vIGluIHByb2Nlc3NEZWxheWVk
TWVzc2FnZXMoKS4KLSAgICAgICAgbV9kZWxheWVkID0gbmV3IFZlY3RvcjxKYXZhU2NyaXB0Q29u
c29sZU1lc3NhZ2U+KCk7Ci0gICAgfQotICAgIG1fZGVsYXllZC0+YXBwZW5kKG1lc3NhZ2UpOwot
fQotCi12b2lkIENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6cHJvY2Vzc0RlbGF5ZWRNZXNzYWdlcygp
Ci17Ci0gICAgLy8gSWYgd2UgaGF2ZSBhIGRlbGF5ZWQgdmVjdG9yIGl0IGNhbm5vdCBiZSBlbXB0
eS4KLSAgICBpZiAoIW1fZGVsYXllZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCghbV9k
ZWxheWVkLT5pc0VtcHR5KCkpOwotCi0gICAgLy8gQWRkIHRoZSBkZWxheWVkIG1lc3NhZ2VzIHRv
IHRoZSBwYWdlIG9mIHRoZSBhY3RpdmUKLSAgICAvLyBjb250ZXh0LiBJZiB0aGF0IGZvciBzb21l
IGJpemFycmUgcmVhc29uIGRvZXMgbm90Ci0gICAgLy8gZXhpc3QsIHdlIGNsZWFyIHRoZSBsaXN0
IG9mIGRlbGF5ZWQgbWVzc2FnZXMgdG8gYXZvaWQKLSAgICAvLyBwb3N0aW5nIG1lc3NhZ2VzLiBX
ZSBzdGlsbCBkZWFsbG9jYXRlIHRoZSB2ZWN0b3IuCi0gICAgRnJhbWUqIGZyYW1lID0gVjhQcm94
eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Ci0gICAgUGFnZSogcGFnZSA9IDA7
Ci0gICAgaWYgKGZyYW1lKQotICAgICAgICBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAo
IXBhZ2UpCi0gICAgICAgIG1fZGVsYXllZC0+Y2xlYXIoKTsKLQotICAgIC8vIEl0ZXJhdGUgdGhy
b3VnaCBhbGwgdGhlIGRlbGF5ZWQgbWVzc2FnZXMgYW5kIGFkZCB0aGVtCi0gICAgLy8gdG8gdGhl
IGNvbnNvbGUuCi0gICAgY29uc3QgaW50IHNpemUgPSBtX2RlbGF5ZWQtPnNpemUoKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgbV9kZWxheWVkLT5hdChpKS5h
ZGRUb1BhZ2UocGFnZSk7Ci0KLSAgICAvLyBEZWFsbG9jYXRlIHRoZSBkZWxheWVkIHZlY3Rvci4K
LSAgICBkZWxldGUgbV9kZWxheWVkOwotICAgIG1fZGVsYXllZCA9IDA7Ci19Ci0KLS8vIENvbnZl
bmllbmNlIGNsYXNzIGZvciBlbnN1cmluZyB0aGF0IGRlbGF5ZWQgbWVzc2FnZXMgaW4gdGhlCi0v
LyBDb25zb2xlTWVzc2FnZU1hbmFnZXIgYXJlIHByb2Nlc3NlZCBxdWlja2x5LgotY2xhc3MgQ29u
c29sZU1lc3NhZ2VTY29wZSB7Ci1wdWJsaWM6Ci0gICAgQ29uc29sZU1lc3NhZ2VTY29wZSgpIHsg
Q29uc29sZU1lc3NhZ2VNYW5hZ2VyOjpwcm9jZXNzRGVsYXllZE1lc3NhZ2VzKCk7IH0KLSAgICB+
Q29uc29sZU1lc3NhZ2VTY29wZSgpIHsgQ29uc29sZU1lc3NhZ2VNYW5hZ2VyOjpwcm9jZXNzRGVs
YXllZE1lc3NhZ2VzKCk7IH0KLX07Ci0KIHZvaWQgbG9nSW5mbyhGcmFtZSogZnJhbWUsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgUGFnZSogcGFnZSA9
IGZyYW1lLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgSmF2
YVNjcmlwdENvbnNvbGVNZXNzYWdlIGNvbnNvbGVNZXNzYWdlKG1lc3NhZ2UsIHVybCwgMCk7Ci0g
ICAgQ29uc29sZU1lc3NhZ2VNYW5hZ2VyOjphZGRNZXNzYWdlKHBhZ2UsIGNvbnNvbGVNZXNzYWdl
KTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxlQ29uc29sZU1lc3NhZ2Uodjg6OkhhbmRsZTx2ODo6
TWVzc2FnZT4gbWVzc2FnZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRhdGEpCi17Ci0gICAgLy8g
VXNlIHRoZSBmcmFtZSB3aGVyZSBKYXZhU2NyaXB0IGlzIGNhbGxlZCBmcm9tLgotICAgIEZyYW1l
KiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+
cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdjg6OkhhbmRs
ZTx2ODo6U3RyaW5nPiBlcnJvck1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLT5HZXQoKTsKLSAgICBB
U1NFUlQoIWVycm9yTWVzc2FnZVN0cmluZy5Jc0VtcHR5KCkpOwotICAgIFN0cmluZyBlcnJvck1l
c3NhZ2UgPSB0b1dlYkNvcmVTdHJpbmcoZXJyb3JNZXNzYWdlU3RyaW5nKTsKLQotICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiByZXNvdXJjZU5hbWUgPSBtZXNzYWdlLT5HZXRTY3JpcHRSZXNvdXJj
ZU5hbWUoKTsKLSAgICBib29sIHVzZVVSTCA9IHJlc291cmNlTmFtZS5Jc0VtcHR5KCkgfHwgIXJl
c291cmNlTmFtZS0+SXNTdHJpbmcoKTsKLSAgICBTdHJpbmcgcmVzb3VyY2VOYW1lU3RyaW5nID0g
dXNlVVJMID8gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogdG9XZWJDb3JlU3RyaW5nKHJlc291
cmNlTmFtZSk7Ci0gICAgSmF2YVNjcmlwdENvbnNvbGVNZXNzYWdlIGNvbnNvbGVNZXNzYWdlKGVy
cm9yTWVzc2FnZSwgcmVzb3VyY2VOYW1lU3RyaW5nLCBtZXNzYWdlLT5HZXRMaW5lTnVtYmVyKCkp
OwotICAgIENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6YWRkTWVzc2FnZShwYWdlLCBjb25zb2xlTWVz
c2FnZSk7CisgICAgVjhDb25zb2xlTWVzc2FnZSBjb25zb2xlTWVzc2FnZShtZXNzYWdlLCB1cmws
IDApOworICAgIGNvbnNvbGVNZXNzYWdlLmRpc3BhdGNoTm93KHBhZ2UpOwogfQogCiBlbnVtIERl
bGF5UmVwb3J0aW5nIHsKQEAgLTMwNCwyMCArMTY5LDE5IEBAIHN0YXRpYyB2b2lkIHJlcG9ydFVu
c2FmZUFjY2Vzc1RvKEZyYW1lKiAKICAgICAvLyBCdWlsZCBhIGNvbnNvbGUgbWVzc2FnZSB3aXRo
IGZha2Ugc291cmNlIElEIGFuZCBsaW5lIG51bWJlci4KICAgICBjb25zdCBTdHJpbmcga1NvdXJj
ZUlEID0gIiI7CiAgICAgY29uc3QgaW50IGtMaW5lTnVtYmVyID0gMTsKLSAgICBKYXZhU2NyaXB0
Q29uc29sZU1lc3NhZ2UgbWVzc2FnZShzdHIsIGtTb3VyY2VJRCwga0xpbmVOdW1iZXIpOworICAg
IFY4Q29uc29sZU1lc3NhZ2UgbWVzc2FnZShzdHIsIGtTb3VyY2VJRCwga0xpbmVOdW1iZXIpOwog
CiAgICAgaWYgKGRlbGF5ID09IFJlcG9ydE5vdykgewogICAgICAgICAvLyBOT1RFOiBTYWZhcmkg
cHJpbnRzIHRoZSBtZXNzYWdlIGluIHRoZSB0YXJnZXQgcGFnZSwgYnV0IGl0IHNlZW1zIGxpa2UK
ICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGluIHRoZSBzb3VyY2UgcGFnZS4gRXZlbiBmb3IgZGVs
YXllZCBtZXNzYWdlcywgd2UgcHV0IGl0IGluCi0gICAgICAgIC8vIHRoZSBzb3VyY2UgcGFnZTsg
c2VlIENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6cHJvY2Vzc0RlbGF5ZWRNZXNzYWdlcygpLgotICAg
ICAgICBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OmFkZE1lc3NhZ2Uoc291cmNlLT5wYWdlKCksIG1l
c3NhZ2UpOwotCisgICAgICAgIC8vIHRoZSBzb3VyY2UgcGFnZTsgc2VlIFY4Q29uc29sZU1lc3Nh
Z2U6OnByb2Nlc3NEZWxheWVkKCkuCisgICAgICAgIG1lc3NhZ2UuZGlzcGF0Y2hOb3coc291cmNl
LT5wYWdlKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChkZWxheSA9PSBSZXBvcnRM
YXRlcik7CiAgICAgICAgIC8vIFdlIGNhbm5vdCBzYWZlbHkgcmVwb3J0IHRoZSBtZXNzYWdlIGVh
Z2VybHksIGJlY2F1c2UgdGhpcyBtYXkgY2F1c2UKICAgICAgICAgLy8gYWxsb2NhdGlvbnMgYW5k
IEdDcyBpbnRlcm5hbGx5IGluIFY4IGFuZCB3ZSBjYW5ub3QgaGFuZGxlIHRoYXQgYXQgdGhpcwog
ICAgICAgICAvLyBwb2ludC4gVGhlcmVmb3JlIHdlIGRlbGF5IHRoZSByZXBvcnRpbmcuCi0gICAg
ICAgIENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6YWRkRGVsYXllZE1lc3NhZ2UobWVzc2FnZSk7Cisg
ICAgICAgIG1lc3NhZ2UuZGlzcGF0Y2hMYXRlcigpOwogICAgIH0KIH0KIApAQCAtNTYwLDcgKzQy
NCw3IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4UHJveHk6OnJ1blNjcmlwdCgKICAgICAvLyBS
dW4gdGhlIHNjcmlwdCBhbmQga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCByZWN1cnNpb24gZGVw
dGguCiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0OwogICAgIHsKLSAgICAgICAgQ29u
c29sZU1lc3NhZ2VTY29wZSBzY29wZTsKKyAgICAgICAgVjhDb25zb2xlTWVzc2FnZTo6U2NvcGUg
c2NvcGU7CiAgICAgICAgIG1fcmVjdXJzaW9uKys7CiAKICAgICAgICAgLy8gU2VlIGNvbW1lbnQg
aW4gVjhQcm94eTo6Y2FsbEZ1bmN0aW9uLgpAQCAtNTkzLDcgKzQ1Nyw3IEBAIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IFY4UHJveHk6OmNhbGxGdW5jdGkKICAgICAvLyBjb250cmFzdCB0byB0aGUgc2Ny
aXB0IGV2YWx1YXRpb25zLgogICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdDsKICAgICB7
Ci0gICAgICAgIENvbnNvbGVNZXNzYWdlU2NvcGUgc2NvcGU7CisgICAgICAgIFY4Q29uc29sZU1l
c3NhZ2U6OlNjb3BlIHNjb3BlOwogCiAgICAgICAgIC8vIEV2YWx1YXRpbmcgdGhlIEphdmFTY3Jp
cHQgY291bGQgY2F1c2UgdGhlIGZyYW1lIHRvIGJlIGRlYWxsb2NhdGVkLAogICAgICAgICAvLyBz
byB3ZSBzdGFydCB0aGUga2VlcCBhbGl2ZSB0aW1lciBoZXJlLgpAQCAtNjE3LDcgKzQ4MSw3IEBA
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4UHJveHk6Om5ld0luc3RhbmMKICAgICAvLyBWOFByb3h5
OjpjYWxsRnVuY3Rpb24uCiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0OwogICAgIHsK
LSAgICAgICAgQ29uc29sZU1lc3NhZ2VTY29wZSBzY29wZTsKKyAgICAgICAgVjhDb25zb2xlTWVz
c2FnZTo6U2NvcGUgc2NvcGU7CiAKICAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gVjhQcm94eTo6
Y2FsbEZ1bmN0aW9uLgogICAgICAgICBtX2ZyYW1lLT5rZWVwQWxpdmUoKTsKQEAgLTExNTEsNyAr
MTAxNSw3IEBAIHZvaWQgVjhQcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCgpCiAgICAgICAgIHY4
OjpWODo6U2V0R2xvYmFsR0NQcm9sb2d1ZUNhbGxiYWNrKCZWOEdDQ29udHJvbGxlcjo6Z2NQcm9s
b2d1ZSk7CiAgICAgICAgIHY4OjpWODo6U2V0R2xvYmFsR0NFcGlsb2d1ZUNhbGxiYWNrKCZWOEdD
Q29udHJvbGxlcjo6Z2NFcGlsb2d1ZSk7CiAKLSAgICAgICAgdjg6OlY4OjpBZGRNZXNzYWdlTGlz
dGVuZXIoaGFuZGxlQ29uc29sZU1lc3NhZ2UpOworICAgICAgICB2ODo6Vjg6OkFkZE1lc3NhZ2VM
aXN0ZW5lcigmVjhDb25zb2xlTWVzc2FnZTo6aGFuZGxlcik7CiAKICAgICAgICAgdjg6OlY4OjpT
ZXRGYWlsZWRBY2Nlc3NDaGVja0NhbGxiYWNrRnVuY3Rpb24ocmVwb3J0VW5zYWZlSmF2YVNjcmlw
dEFjY2Vzcyk7CiAKQEAgLTEzMTAsNyArMTE3NCw3IEBAIHZvaWQgVjhQcm94eTo6YmluZEpzT2Jq
ZWN0VG9XaW5kb3coRnJhbWUKIAogdm9pZCBWOFByb3h5Ojpwcm9jZXNzQ29uc29sZU1lc3NhZ2Vz
KCkKIHsKLSAgICBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OnByb2Nlc3NEZWxheWVkTWVzc2FnZXMo
KTsKKyAgICBWOENvbnNvbGVNZXNzYWdlOjpwcm9jZXNzRGVsYXllZCgpOwogfQogCiAvLyBDcmVh
dGUgdGhlIHV0aWxpdHkgY29udGV4dCBmb3IgaG9sZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB1
c2VkIGludGVybmFsbHk=
</data>
<flag name="review"
          id="17403"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>