<?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>179586</bug_id>
          
          <creation_ts>2017-11-11 19:15:33 -0800</creation_ts>
          <short_desc>[Attachment Support] Implement SPI for clients to request data for a given attachment</short_desc>
          <delta_ts>2017-11-16 22:16:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>mitz</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1370735</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-11-11 19:15:33 -0800</bug_when>
    <thetext>&lt;rdar://problem/35355720&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370747</commentid>
    <comment_count>1</comment_count>
      <attachid>326709</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-11-11 21:34:15 -0800</bug_when>
    <thetext>Created attachment 326709
First pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370749</commentid>
    <comment_count>2</comment_count>
      <attachid>326710</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-11-11 22:37:17 -0800</bug_when>
    <thetext>Created attachment 326710
Fix WinCairo build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370792</commentid>
    <comment_count>3</comment_count>
      <attachid>326710</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-12 16:08:02 -0800</bug_when>
    <thetext>Comment on attachment 326710
Fix WinCairo build

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

&gt; Source/WebCore/dom/Document.cpp:7492
&gt; +    m_attachmentIdentifierToElementMap.set(identifier, makeRef(attachment));

Surprised the makeRef is required.

&gt; Source/WebCore/dom/Document.cpp:7516
&gt; +    auto iter = m_attachmentIdentifierToElementMap.find(identifier);
&gt; +    if (iter == m_attachmentIdentifierToElementMap.end())
&gt; +        return nullptr;
&gt; +
&gt; +    return iter-&gt;value.copyRef();

Should be able to write:

    return m_attachmentIdentifierToElementMap.get(identifier);

Should not need find/end and explicit nullptr.

&gt; Source/WebCore/html/HTMLAttachmentElement.cpp:83
&gt; -HTMLAttachmentElement::~HTMLAttachmentElement() = default;
&gt; +HTMLAttachmentElement::~HTMLAttachmentElement()
&gt; +{
&gt; +    m_attachmentReaders.clear();
&gt; +}

I don’t understand why this change is needed. Why do we need to explicitly clear out the vector of unique_ptr before it gets destroyed?

&gt; Source/WebCore/html/HTMLAttachmentElement.cpp:191
&gt; +        invokeCallbackAndFinishReading(SharedBuffer::create(reinterpret_cast&lt;uint8_t*&gt;(arrayBuffer-&gt;data()), arrayBuffer-&gt;byteLength()));

Really annoying that we need the reinterpret_cast. Need to rearrange things so that does not happen!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370806</commentid>
    <comment_count>4</comment_count>
      <attachid>326710</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-11-12 18:22:32 -0800</bug_when>
    <thetext>Comment on attachment 326710
Fix WinCairo build

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

Thanks for taking a look!

&gt;&gt; Source/WebCore/dom/Document.cpp:7492
&gt;&gt; +    m_attachmentIdentifierToElementMap.set(identifier, makeRef(attachment));
&gt; 
&gt; Surprised the makeRef is required.

Whoops — the makeRef isn&apos;t necessary here. Removed.

&gt;&gt; Source/WebCore/dom/Document.cpp:7516
&gt;&gt; +    return iter-&gt;value.copyRef();
&gt; 
&gt; Should be able to write:
&gt; 
&gt;     return m_attachmentIdentifierToElementMap.get(identifier);
&gt; 
&gt; Should not need find/end and explicit nullptr.

Good catch — simplified to just get() from the HashMap.

&gt;&gt; Source/WebCore/html/HTMLAttachmentElement.cpp:83
&gt;&gt; +}
&gt; 
&gt; I don’t understand why this change is needed. Why do we need to explicitly clear out the vector of unique_ptr before it gets destroyed?

At second glance, I don&apos;t think it&apos;s needed. I originally put it here so that if the attachment element is destroyed with active attachment data readers, the attachment data readers will still tear down and invoke callbacks within the lifetime of the owning attachment element, since ~AttachmentDataReader called back into its HTMLAttachmentElement&amp;. I moved a bit of logic around to avoid this dance, so the destructor of AttachmentDataReader doesn&apos;t rely on the existence of the HTMLAttachmentElement.

&gt;&gt; Source/WebCore/html/HTMLAttachmentElement.cpp:191
&gt;&gt; +        invokeCallbackAndFinishReading(SharedBuffer::create(reinterpret_cast&lt;uint8_t*&gt;(arrayBuffer-&gt;data()), arrayBuffer-&gt;byteLength()));
&gt; 
&gt; Really annoying that we need the reinterpret_cast. Need to rearrange things so that does not happen!

Ok. I&apos;ll look into this...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370812</commentid>
    <comment_count>5</comment_count>
      <attachid>326710</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-12 18:25:54 -0800</bug_when>
    <thetext>Comment on attachment 326710
Fix WinCairo build

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

&gt;&gt;&gt; Source/WebCore/html/HTMLAttachmentElement.cpp:191
&gt;&gt;&gt; +        invokeCallbackAndFinishReading(SharedBuffer::create(reinterpret_cast&lt;uint8_t*&gt;(arrayBuffer-&gt;data()), arrayBuffer-&gt;byteLength()));
&gt;&gt; 
&gt;&gt; Really annoying that we need the reinterpret_cast. Need to rearrange things so that does not happen!
&gt; 
&gt; Ok. I&apos;ll look into this...

Oh, I mean long term. Not right now. This is expedient for the moment.

I believe the problem comes from mixing char and unsigned char in our various buffers, particularly in Vector&lt;&gt;. We also sometimes use the other name for unsigned char, uint8_t. We need to choose one and convert as much as possible to the same so there is no casting needed. I think people are likely leaning towards uint8_t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370813</commentid>
    <comment_count>6</comment_count>
      <attachid>326710</attachid>
    <who name="">mitz</who>
    <bug_when>2017-11-12 18:26:07 -0800</bug_when>
    <thetext>Comment on attachment 326710
Fix WinCairo build

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

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKAttachment.h:32
&gt; +typedef void(^_WKAttachmentDataCompletionHandler)(NSData *, NSError *);

Not sure what the extra indirection through this type adds. I think we normally avoid such typedefs.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKAttachment.mm:70
&gt; +        if (buffer &amp;&amp; buffer-&gt;size() &amp;&amp; error == CallbackBase::Error::None)

Why is the empty data case considered an error? Can there not be, say, and empty text file as an attachment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370815</commentid>
    <comment_count>7</comment_count>
      <attachid>326710</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-11-12 18:40:16 -0800</bug_when>
    <thetext>Comment on attachment 326710
Fix WinCairo build

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

&gt;&gt;&gt;&gt; Source/WebCore/html/HTMLAttachmentElement.cpp:191
&gt;&gt;&gt;&gt; +        invokeCallbackAndFinishReading(SharedBuffer::create(reinterpret_cast&lt;uint8_t*&gt;(arrayBuffer-&gt;data()), arrayBuffer-&gt;byteLength()));
&gt;&gt;&gt; 
&gt;&gt;&gt; Really annoying that we need the reinterpret_cast. Need to rearrange things so that does not happen!
&gt;&gt; 
&gt;&gt; Ok. I&apos;ll look into this...
&gt; 
&gt; Oh, I mean long term. Not right now. This is expedient for the moment.
&gt; 
&gt; I believe the problem comes from mixing char and unsigned char in our various buffers, particularly in Vector&lt;&gt;. We also sometimes use the other name for unsigned char, uint8_t. We need to choose one and convert as much as possible to the same so there is no casting needed. I think people are likely leaning towards uint8_t.

Got it – thanks for the explanation!

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKAttachment.h:32
&gt;&gt; +typedef void(^_WKAttachmentDataCompletionHandler)(NSData *, NSError *);
&gt; 
&gt; Not sure what the extra indirection through this type adds. I think we normally avoid such typedefs.

I generally find it more readable to use a typedef for these block types, especially if I need to declare one as a local or instance variable, but this isn&apos;t really a strong preference.

Removed this typedef.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKAttachment.mm:70
&gt;&gt; +        if (buffer &amp;&amp; buffer-&gt;size() &amp;&amp; error == CallbackBase::Error::None)
&gt; 
&gt; Why is the empty data case considered an error? Can there not be, say, and empty text file as an attachment?

Good point. Do you think Mail will have a need for supplying empty data through this SPI?

At any rate, it&apos;s probably expected that one should be able to create an attachment with an empty NSData, and then -requestData: and get an empty data blob back. I&apos;ll do this and add a new test for this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370818</commentid>
    <comment_count>8</comment_count>
    <who name="">mitz</who>
    <bug_when>2017-11-12 19:09:21 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #7)

&gt; &gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKAttachment.mm:70
&gt; &gt;&gt; +        if (buffer &amp;&amp; buffer-&gt;size() &amp;&amp; error == CallbackBase::Error::None)
&gt; &gt; 
&gt; &gt; Why is the empty data case considered an error? Can there not be, say, and empty text file as an attachment?
&gt; 
&gt; Good point. Do you think Mail will have a need for supplying empty data
&gt; through this SPI?

It may be unnecessary to *set* the data to be empty, assuming that’s the initial value, but attachments with empty data exist, and retrieving their data should work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370823</commentid>
    <comment_count>9</comment_count>
      <attachid>326740</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-11-12 21:00:31 -0800</bug_when>
    <thetext>Created attachment 326740
Wait for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370899</commentid>
    <comment_count>10</comment_count>
      <attachid>326740</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-13 07:30:43 -0800</bug_when>
    <thetext>Comment on attachment 326740
Wait for EWS

Clearing flags on attachment: 326740

Committed r224755: &lt;https://trac.webkit.org/changeset/224755&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326709</attachid>
            <date>2017-11-11 21:34:15 -0800</date>
            <delta_ts>2017-11-11 22:37:15 -0800</delta_ts>
            <desc>First pass</desc>
            <filename>bug-179586-20171111213414.patch</filename>
            <type>text/plain</type>
            <size>43174</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0NzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjQ4NzYwZjI2Y2ZkYmY0
ZDkzNDQ1OTc3Y2VkMzc2MGRjNDY1ZmZmMi4uMTdhNWEyZDkyY2QyNTM5YWVlOWJlMDBkNGJjZTJi
OTc0Y2ZkMjViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE3LTExLTExICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtBdHRhY2htZW50
IFN1cHBvcnRdIEltcGxlbWVudCBTUEkgZm9yIGNsaWVudHMgdG8gcmVxdWVzdCBkYXRhIGZvciBh
IGdpdmVuIGF0dGFjaG1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3OTU4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzUzNTU3MjA+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0
IGluIFdlYkNvcmUgZm9yIGZldGNoaW5nIGRhdGEgZm9yIGEgZ2l2ZW4gYXR0YWNobWVudCBlbGVt
ZW50LiBTZWUgcGVyLW1ldGhvZCBjb21tZW50cyBiZWxvdyBmb3IKKyAgICAgICAgbW9yZSBkZXRh
aWwuCisKKyAgICAgICAgVGVzdCBjb3ZlcmFnZSBieSBhdWdtZW50aW5nIGV4aXN0aW5nIEFQSSB0
ZXN0cyBpbiBXS0F0dGFjaG1lbnRUZXN0cywgYW5kIGFkZGluZyAyIG5ldyB0ZXN0cy4KKworICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlk
SW5zZXJ0QXR0YWNobWVudEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRp
ZFJlbW92ZUF0dGFjaG1lbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojph
dHRhY2htZW50Rm9ySWRlbnRpZmllciBjb25zdCk6CisKKyAgICAgICAgRmV0Y2hlcyBhbiBhdHRh
Y2htZW50IGVsZW1lbnQgbWF0Y2hpbmcgdGhlIGdpdmVuIGlkZW50aWZpZXIuIFVzaW5nIHRoZSBp
ZGVudGlmaWVyID0+IGF0dGFjaG1lbnQgZWxlbWVudCBtYXAgaGVyZQorICAgICAgICBhbGxvd3Mg
dXMgdG8gYXZvaWQgdGhlIGNvc3Qgb2Ygd2Fsa2luZyB0aGUgRE9NIGluIHNlYXJjaCBmb3IgSFRN
TEF0dGFjaG1lbnRFbGVtZW50cyBldmVyeSB0aW1lIGRhdGEgaXMKKyAgICAgICAgcmVxdWVzdGVk
LgorCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisKKyAgICAgICAgQWRkIGEgbWFwIG9mIGF0
dGFjaG1lbnQgaWRlbnRpZmllciA9PiBIVE1MQXR0YWNobWVudEVsZW1lbnQgaW4gRG9jdW1lbnQu
IFRoaXMgbWFwIGlzIHVwZGF0ZWQgd2hlbiBhdHRhY2htZW50CisgICAgICAgIGVsZW1lbnRzIGFy
ZSBjb25uZWN0ZWQgdG8gb3IgZGlzY29ubmVjdGVkIGZyb20gdGhlIGRvY3VtZW50LiBBZGRpdGlv
bmFsbHksIGRlbGVnYXRlIGF0dGFjaG1lbnQgaW5zZXJ0aW9uIGFuZAorICAgICAgICByZW1vdmFs
IG91dCB0byB0aGUgRWRpdG9yIGlmIHBvc3NpYmxlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRBdHRhY2htZW50RnJvbUZp
bGUpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL1dlYkNvbnRlbnRSZWFkZXJNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZW5hbWVzKToKKyAgICAgICAg
KiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZy
b21NYXJrdXApOgorCisgICAgICAgIFR3ZWFrIGV4aXN0aW5nIGxvZ2ljIHRoYXQgdHJhbnNmZXJz
IGZpbGUtYmFja2VkIEZpbGUgb2JqZWN0cyB3aGVuIGRlc2VyaWFsaXppbmcgSFRNTEF0dGFjaG1l
bnRFbGVtZW50cyBmcm9tCisgICAgICAgIG1hcmt1cCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUg
dGhlIGF0dGFjaG1lbnQgZWxlbWVudCBpcyBub3QgZmlsZS1iYWNrZWQuIEluIHRoaXMgY2FzZSwg
d2UgY29uc3RydWN0IGEgbmV3CisgICAgICAgIEZpbGUgb2JqZWN0IHVzaW5nIHRoZSBkZXNlcmlh
bGl6aW5nIGNvbnN0cnVjdG9yLiBUbyBkbyB0aGlzLCB3ZSB1c2UgdGhlIGF0dGFjaG1lbnQgZWxl
bWVudCdzIGJsb2IgVVJMIHRvIG1ha2UKKyAgICAgICAgc3VyZSB0aGF0IHRoZSBuZXcgRmlsZSBy
ZWZlcmVuY2VzIGFuIGV4aXN0aW5nIGJsb2IgbWF0Y2hpbmcgdGhhdCBVUkwuCisKKyAgICAgICAg
KiBodG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRh
Y2htZW50RGF0YVJlYWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0dGFjaG1lbnRE
YXRhUmVhZGVyOjpBdHRhY2htZW50RGF0YVJlYWRlcik6CisKKyAgICAgICAgSW50cm9kdWNlIEF0
dGFjaG1lbnREYXRhUmVhZGVyLCBhIGhlbHBlciBjbGFzcyBsb2NhbCB0byBIVE1MQXR0YWNobWVu
dEVsZW1lbnQgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZworICAgICAgICBhbiBhdHRh
Y2htZW50IGVsZW1lbnQncyBmaWxlIGFuZCBpbnZva2luZyBhIGdpdmVuIGNhbGxiYWNrIHdoZW4g
bG9hZGluZyBoYXMgc3VjY2VlZGVkIG9yIGZhaWxlZC4KKyAgICAgICAgRWFjaCBBdHRhY2htZW50
RGF0YVJlYWRlciBpcyByZXRhaW5lZCBleGNsdXNpdmVseSBieSBpdHMgSFRNTEF0dGFjaG1lbnRF
bGVtZW50LCB0aHJvdWdoIHRoZQorICAgICAgICBIVE1MQXR0YWNobWVudEVsZW1lbnQncyB2ZWN0
b3Igb2YgdW5pcXVlX3B0cnMgdG8gQXR0YWNobWVudERhdGFSZWFkZXJzLgorCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6On5IVE1MQXR0YWNobWVudEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEF0dGFjaG1lbnRFbGVtZW50OjpibG9iVVJMIGNvbnN0KToK
KworICAgICAgICBBZGQgYSBjb252ZW5pZW5jZSBnZXR0ZXIgZm9yIHRoZSBibG9iIFVSTCBvZiB0
aGUgYXR0YWNobWVudCdzIGJhY2tpbmcgRmlsZSBvYmplY3QuCisKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxBdHRhY2htZW50RWxlbWVudDo6c2V0RmlsZSk6CisKKyAgICAgICAgV2hlbiBzZXR0aW5n
IGFuIGF0dGFjaG1lbnQgZWxlbWVudCdzIGZpbGUsIHNldCB0aGUgYmxvYiBVUkwgYXR0cmlidXRl
IGFzIHdlbGwgdG8gdGhlIGJsb2IgVVJMLiBBbHNvLCB0d2VhayB0aGlzCisgICAgICAgIHRvIHRh
a2UgYSBSZWZQdHI8RmlsZT4mJiBpbnN0ZWFkIG9mIGEgcmF3IEZpbGUqLgorCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxBdHRhY2htZW50RWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3Rv
cik6CisKKyAgICAgICAgSW5zdGVhZCBvZiBkZWxlZ2F0aW5nIGF0dGFjaG1lbnQgaW5zZXJ0aW9u
IGFuZCByZW1vdmFsIHRvIHRoZSBFZGl0b3IsIGp1c3QgY2FsbCBvdXQgdG8gdGhlIERvY3VtZW50
LCB3aGljaCB3aWxsCisgICAgICAgIG5vdyBjYWxsIG91dCB0byB0aGUgRWRpdG9yLgorCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6OmF0dGFjaG1lbnRQYXRoIGNvbnN0
KToKKworICAgICAgICBBZGQgYSBjb252ZW5pZW5jZSBnZXR0ZXIgZm9yIHRoZSBhdHRhY2htZW50
IHBhdGggYXR0cmlidXRlLgorCisgICAgICAgIChXZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1l
bnQ6OnJlcXVlc3REYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdHRhY2htZW50RWxlbWVu
dDo6ZGVzdHJveVJlYWRlcik6CisKKyAgICAgICAgQ2FsbGVkIHdoZW4gYSBBdHRhY2htZW50RGF0
YVJlYWRlciBoYXMgY29tcGxldGVkIChlaXRoZXIgd2l0aCBzdWNjZXNzIG9yIGZhaWx1cmUpLCBh
bmQgaXMgcmVhZHkgdG8gYmUgcmVtb3ZlZAorICAgICAgICBmcm9tIHRoZSBhdHRhY2htZW50IGVs
ZW1lbnQncyBsaXN0IG9mIGFjdGl2ZSBkYXRhIHJlYWRlcnMuCisKKyAgICAgICAgKFdlYkNvcmU6
OkF0dGFjaG1lbnREYXRhUmVhZGVyOjp+QXR0YWNobWVudERhdGFSZWFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6QXR0YWNobWVudERhdGFSZWFkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6QXR0YWNobWVudERhdGFSZWFkZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2Vi
Q29yZTo6QXR0YWNobWVudERhdGFSZWFkZXI6Omludm9rZUNhbGxiYWNrQW5kRmluaXNoUmVhZGlu
Zyk6CisKKyAgICAgICAgV2hlbiB0aGUgcmVhZGVyIGlzIGRvbmUgbG9hZGluZywgb3IgaGFzIGZh
aWxlZCwgb3IgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLCBmaXJlIHRoZSBjYWxsYmFjayB3aXRo
IGxvYWRlZCBkYXRhCisgICAgICAgIChpZiBhbnkpIGFuZCBjYW5jZWwgdGhlIEZpbGVSZWFkZXJM
b2FkZXIuCisKKyAgICAgICAgKiBodG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oOgorICAgICAg
ICAqIGh0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluOgorCisgICAgICAgIEFkZHMgYSBuZXcgIndl
YmtpdGF0dGFjaG1lbnRibG9idXJsIiBhdHRyaWJ1dGUgdGhhdCBrZWVwcyB0cmFjayBvZiBhbiBh
dHRhY2htZW50IGVsZW1lbnQncyBmaWxlJ3MgYmxvYiBVUkwuIFRoaXMKKyAgICAgICAgaXMgdXNl
ZCB0byBlbnN1cmUgdGhhdCBpbmZvcm1hdGlvbiBhYm91dCBhbiBhdHRhY2htZW50IGVsZW1lbnQn
cyBmaWxlIGlzIG5vdCBsb3N0IGJldHdlZW4gY2VydGFpbiBlZGl0aW5nCisgICAgICAgIG9wZXJh
dGlvbnMgKGZvciBpbnN0YW5jZSwgZGVsZXRpbmcgYSBsaW5lIGJyZWFrKSB0aGF0IGludm9sdmUg
c2VyaWFsaXppbmcgYW5kIHRoZW4gZGVzZXJpYWxpemluZyBtYXJrdXAgaW50bworICAgICAgICBE
b2N1bWVudEZyYWdtZW50cyB0byB0aGVuIGluc2VydC4KKwogMjAxNy0xMS0xMCAgSmVyIE5vYmxl
ICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBGYWlyUGxheSBTdHJlYW1p
bmcgYmFzZWQgQ0RNIGZvciBNb2Rlcm4gRU1FCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE2NzUzYjljZDIzM2EyNGE3
ODk1Yjg1NDg4ZWRjNjIzMGI1MDFkYTQuLmE1ODlmOGY1ZmM1NjM5YTFmZTBmODZkYWU0NmJiYWUx
NWRlZmY5ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTctMTEtMTEgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0F0dGFjaG1lbnQgU3Vw
cG9ydF0gSW1wbGVtZW50IFNQSSBmb3IgY2xpZW50cyB0byByZXF1ZXN0IGRhdGEgZm9yIGEgZ2l2
ZW4gYXR0YWNobWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc5NTg2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTM1NTcyMD4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHN1cHBvcnQgaW4g
V2ViS2l0IGZvciBmZXRjaGluZyBkYXRhIGZvciBhIGdpdmVuIGF0dGFjaG1lbnQgZWxlbWVudC4g
U2VlIFdlYkNvcmUvQ2hhbmdlTG9nIGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIE1vc3Qgb2Yg
dGhlIGNoYW5nZXMgaGVyZSBhcmUgYm9pbGVycGxhdGUgcGx1bWJpbmcgb2YgLXJlcXVlc3RBdHRh
Y2htZW50RGF0YSB0aHJvdWdoIHRoZSBjbGllbnQgbGF5ZXJzLgorCisgICAgICAgIFRlc3QgY292
ZXJhZ2UgYnkgYXVnbWVudGluZyBleGlzdGluZyBBUEkgdGVzdHMgaW4gV0tBdHRhY2htZW50VGVz
dHMsIGFuZCBhZGRpbmcgMiBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQ
SUF0dGFjaG1lbnQuY3BwOgorICAgICAgICAoQVBJOjpBdHRhY2htZW50OjpyZXF1ZXN0RGF0YSk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tBdHRhY2htZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tBdHRhY2htZW50Lm1tOgorICAgICAgICAoLVtfV0tBdHRhY2htZW50IHJlcXVl
c3REYXRhOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNoYXJlZEJ1ZmZlckNhbGxiYWNrKToKKworICAgICAg
ICBBZGQgYSBuZXcgSVBDIGNhbGxiYWNrIGhlbHBlciB0eXBlLCBTaGFyZWRCdWZmZXJDYWxsYmFj
ay4gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZyBEYXRhQ2FsbGJhY2ssIGJ1dAorICAg
ICAgICBpbnN0ZWFkIG9mIGRlc2VyaWFsaXppbmcgdG8gYW4gQVBJOjpEYXRhLCB3ZSBjb252ZXJ0
IHRvIGEgU2hhcmVkQnVmZmVyIGluc3RlYWQuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpkYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omluc2Vy
dEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlcXVlc3RBdHRh
Y2htZW50RGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1
ZXN0QXR0YWNobWVudERhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisK
IDIwMTctMTEtMTAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBb
U2VydmljZSBXb3JrZXJzXSBJbXBsZW1lbnQgIlRyeSBBY3RpdmF0ZSIgLyAiQWN0aXZhdGUiIGFs
Z29yaXRobXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDgyMDVhMjQ3MTBmMDNmNTAzODkw
ZWI2YjYzMGI5ZWI3NDJiZGQ5MzIuLjQzODcxNjg5M2QyZDI5YWNjMDEwNmJkYjE1NDlkMjgxMGIx
YTYzMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1
ZGUgIkdlbmVyaWNDYWNoZWRIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxBbGxDb2xs
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
QXR0YWNobWVudEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQmFzZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MQm9keUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgpA
QCAtNzQ4MCw2ICs3NDgxLDQzIEBAIFZlY3RvcjxSZWZQdHI8V2ViQW5pbWF0aW9uPj4gRG9jdW1l
bnQ6OmdldEFuaW1hdGlvbnMoKQogICAgIHJldHVybiBhbmltYXRpb25zOwogfQogCisjaWYgRU5B
QkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKwordm9pZCBEb2N1bWVudDo6ZGlkSW5zZXJ0QXR0YWNo
bWVudEVsZW1lbnQoSFRNTEF0dGFjaG1lbnRFbGVtZW50JiBhdHRhY2htZW50KQoreworICAgIGF1
dG8gaWRlbnRpZmllciA9IGF0dGFjaG1lbnQudW5pcXVlSWRlbnRpZmllcigpOworICAgIGlmICgh
aWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hdHRhY2htZW50SWRlbnRpZmll
clRvRWxlbWVudE1hcC5zZXQoaWRlbnRpZmllciwgbWFrZVJlZihhdHRhY2htZW50KSk7CisKKyAg
ICBpZiAoZnJhbWUoKSkKKyAgICAgICAgZnJhbWUoKS0+ZWRpdG9yKCkuZGlkSW5zZXJ0QXR0YWNo
bWVudEVsZW1lbnQoYXR0YWNobWVudCk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZUF0
dGFjaG1lbnRFbGVtZW50KEhUTUxBdHRhY2htZW50RWxlbWVudCYgYXR0YWNobWVudCkKK3sKKyAg
ICBhdXRvIGlkZW50aWZpZXIgPSBhdHRhY2htZW50LnVuaXF1ZUlkZW50aWZpZXIoKTsKKyAgICBp
ZiAoIWlkZW50aWZpZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYXR0YWNobWVudElkZW50
aWZpZXJUb0VsZW1lbnRNYXAucmVtb3ZlKGlkZW50aWZpZXIpOworCisgICAgaWYgKGZyYW1lKCkp
CisgICAgICAgIGZyYW1lKCktPmVkaXRvcigpLmRpZFJlbW92ZUF0dGFjaG1lbnRFbGVtZW50KGF0
dGFjaG1lbnQpOworfQorCitSZWZQdHI8SFRNTEF0dGFjaG1lbnRFbGVtZW50PiBEb2N1bWVudDo6
YXR0YWNobWVudEZvcklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKSBjb25zdAor
eworICAgIGF1dG8gaXRlciA9IG1fYXR0YWNobWVudElkZW50aWZpZXJUb0VsZW1lbnRNYXAuZmlu
ZChpZGVudGlmaWVyKTsKKyAgICBpZiAoaXRlciA9PSBtX2F0dGFjaG1lbnRJZGVudGlmaWVyVG9F
bGVtZW50TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBp
dGVyLT52YWx1ZS5jb3B5UmVmKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQVRUQUNITUVOVF9F
TEVNRU5UKQorCiBzdGF0aWMgTWVzc2FnZVNvdXJjZSBtZXNzYWdlU291cmNlRm9yV1RGTG9nQ2hh
bm5lbChjb25zdCBXVEZMb2dDaGFubmVsJiBjaGFubmVsKQogewogICAgIHN0YXRpYyBjb25zdCBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IG1lZGlhQ2hhbm5lbCA9IE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJtZWRpYSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAyYTg2YjdmMDNmOWQyODc0NjIx
NzdiOWZkMTZiZTdlOTg0NmVlMWQ4Li5jM2FlMDlmMGEwZDZkZjk3ZThjNzNlNjkzOTE2YzcxYmRi
ZGZiOGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEZv
cm1Db250cm9sbGVyOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBIVE1M
QWxsQ29sbGVjdGlvbjsKK2NsYXNzIEhUTUxBdHRhY2htZW50RWxlbWVudDsKIGNsYXNzIEhUTUxC
b2R5RWxlbWVudDsKIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OwogY2xhc3MgSFRNTENvbGxlY3Rp
b247CkBAIC0xMzc1LDYgKzEzNzYsMTIgQEAgcHVibGljOgogICAgIERvY3VtZW50VGltZWxpbmUm
IHRpbWVsaW5lKCk7CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJBbmltYXRpb24+PiBnZXRBbmltYXRp
b25zKCk7CiAgICAgICAgIAorI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCisgICAgdm9p
ZCBkaWRJbnNlcnRBdHRhY2htZW50RWxlbWVudChIVE1MQXR0YWNobWVudEVsZW1lbnQmKTsKKyAg
ICB2b2lkIGRpZFJlbW92ZUF0dGFjaG1lbnRFbGVtZW50KEhUTUxBdHRhY2htZW50RWxlbWVudCYp
OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxIVE1MQXR0YWNobWVudEVsZW1lbnQ+IGF0dGFj
aG1lbnRGb3JJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikgY29uc3Q7CisjZW5k
aWYKKwogcHJvdGVjdGVkOgogICAgIGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXpl
ZCA9IDEsIE5vblJlbmRlcmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChG
cmFtZSosIGNvbnN0IFVSTCYsIHVuc2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2ln
bmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CkBAIC0xNzIzLDYgKzE3MzAsMTAgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8SURCQ2xpZW50OjpJREJDb25uZWN0aW9uUHJveHk+IG1faWRiQ29ubmVj
dGlvblByb3h5OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWY8SFRNTEF0dGFjaG1lbnRFbGVtZW50Pj4gbV9hdHRhY2htZW50
SWRlbnRpZmllclRvRWxlbWVudE1hcDsKKyNlbmRpZgorCiAgICAgVGltZXIgbV9kaWRBc3NvY2lh
dGVGb3JtQ29udHJvbHNUaW1lcjsKICAgICBUaW1lciBtX2Nvb2tpZUNhY2hlRXhwaXJ5VGltZXI7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA5NWJhNDE4MGJmZDBkM2M1ZGQ0MTM0
OTM2YWE1ZDU5ZWUxMjg2ZjBhLi5hN2U1NTJmZTVhYWQ0NDgzNDQyY2JhYThkYjU0MjZkMTkzMDJm
YzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0zODAwLDcgKzM4MDAsNyBAQCB2
b2lkIEVkaXRvcjo6aW5zZXJ0QXR0YWNobWVudEZyb21GaWxlKGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBmaQogICAgIGF0dGFjaG1lbnQtPnNldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OnN1YnRpdGxlQXR0ciwgZmlsZVNpemVEZXNjcmlwdGlvbihmaWxlLT5zaXplKCkpKTsK
ICAgICBhdHRhY2htZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0eXBlQXR0ciwgY29udGVu
dFR5cGUpOwogICAgIGF0dGFjaG1lbnQtPnNldFVuaXF1ZUlkZW50aWZpZXIoaWRlbnRpZmllcik7
Ci0gICAgYXR0YWNobWVudC0+c2V0RmlsZShmaWxlLnB0cigpKTsKKyAgICBhdHRhY2htZW50LT5z
ZXRGaWxlKFdURk1vdmUoZmlsZSkpOwogCiAgICAgYXV0byBmcmFnbWVudFRvSW5zZXJ0ID0gZG9j
dW1lbnQoKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICAgZnJhZ21lbnRUb0luc2VydC0+
YXBwZW5kQ2hpbGQoYXR0YWNobWVudC5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9XZWJDb250ZW50UmVhZGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvV2ViQ29udGVudFJlYWRlck1hYy5tbQppbmRleCBkM2Q3YjdkNGZhMTQxMmRlOWI2
ZmM3ZDUwOWMyM2Y3MGVlZTA1YmU3Li5hNzk4YTE5YzQ3OWU3MzEwNGFkNGEwNGExZWE1NGVhYmIx
Mzk3ZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9XZWJDb250ZW50
UmVhZGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL1dlYkNvbnRlbnRS
ZWFkZXJNYWMubW0KQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFk
RmlsZW5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKICNpZiBFTkFCTEUoQVRUQUNI
TUVOVF9FTEVNRU5UKQogICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS5hdHRhY2htZW50RWxlbWVudEVuYWJsZWQoKSkgewogICAgICAgICAgICAgYXV0
byBhdHRhY2htZW50ID0gSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjph
dHRhY2htZW50VGFnLCBkb2N1bWVudCk7Ci0gICAgICAgICAgICBhdHRhY2htZW50LT5zZXRGaWxl
KEZpbGU6OmNyZWF0ZShbW05TVVJMIGZpbGVVUkxXaXRoUGF0aDp0ZXh0XSBwYXRoXSkucHRyKCkp
OworICAgICAgICAgICAgYXR0YWNobWVudC0+c2V0RmlsZShGaWxlOjpjcmVhdGUoW1tOU1VSTCBm
aWxlVVJMV2l0aFBhdGg6dGV4dF0gcGF0aF0pKTsKICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBl
bmRDaGlsZChhdHRhY2htZW50KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggNmIwNDk2NTE1NjllYjRmZDBmMDI5NmVlNWE0
OTVlNGQ2NmUwOGEyYS4uM2NmNDBlZDc4YzVhODgyNjNjNjU1Yjc0MDI2NTJkNDdmODIyN2UxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNzYzLDcgKzc2MywxMSBAQCBSZWY8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50JiBkb2N1bWVu
dCwgY29uc3QgU3RyaW5nJgogICAgICAgICBhdHRhY2htZW50cy5hcHBlbmQoYXR0YWNobWVudCk7
CiAKICAgICBmb3IgKGF1dG8mIGF0dGFjaG1lbnQgOiBhdHRhY2htZW50cykgewotICAgICAgICBh
dHRhY2htZW50LT5zZXRGaWxlKEZpbGU6OmNyZWF0ZShhdHRhY2htZW50LT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKHdlYmtpdGF0dGFjaG1lbnRwYXRoQXR0cikpLnB0cigpKTsKKyAg
ICAgICAgYXV0byBhdHRhY2htZW50UGF0aCA9IGF0dGFjaG1lbnQtPmF0dGFjaG1lbnRQYXRoKCk7
CisgICAgICAgIGlmIChhdHRhY2htZW50UGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAgICBhdHRh
Y2htZW50LT5zZXRGaWxlKEZpbGU6OmRlc2VyaWFsaXplKHsgfSwgYXR0YWNobWVudC0+YmxvYlVS
TCgpLCBhdHRhY2htZW50LT5hdHRhY2htZW50VHlwZSgpLCBhdHRhY2htZW50LT5hdHRhY2htZW50
VGl0bGUoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhdHRhY2htZW50LT5zZXRGaWxl
KEZpbGU6OmNyZWF0ZShhdHRhY2htZW50UGF0aCkpOwogICAgICAgICBhdHRhY2htZW50LT5yZW1v
dmVBdHRyaWJ1dGUod2Via2l0YXR0YWNobWVudHBhdGhBdHRyKTsKICAgICB9CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcAppbmRleCBkMTM2
YjQ4OGU0N2E0NmFiMjljZmJhOTc3OWJlNWE5MGIxYTdiN2I5Li43OWU4NzBmNTY0OWUwY2YxYWMx
MDUzMmVjNTljMjQwMWFlMDlmNWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBdHRhY2htZW50RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0
YWNobWVudEVsZW1lbnQuY3BwCkBAIC0zMCwyMSArMzAsNTcgQEAKIAogI2luY2x1ZGUgIkVkaXRv
ci5oIgogI2luY2x1ZGUgIkZpbGUuaCIKKyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVyLmgiCisj
aW5jbHVkZSAiRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXR0YWNobWVudC5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKK2NsYXNzIEF0dGFjaG1lbnREYXRhUmVhZGVyIDogcHVibGlj
IEZpbGVSZWFkZXJMb2FkZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8QXR0YWNobWVudERhdGFSZWFkZXI+IGNyZWF0ZShIVE1MQXR0YWNobWVudEVsZW1lbnQm
IGF0dGFjaG1lbnQsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pPiYmIGNhbGxi
YWNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QXR0YWNobWVudERh
dGFSZWFkZXI+KGF0dGFjaG1lbnQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICB9CisKKyAgICBB
dHRhY2htZW50RGF0YVJlYWRlcihIVE1MQXR0YWNobWVudEVsZW1lbnQmIGF0dGFjaG1lbnQsIEZ1
bmN0aW9uPHZvaWQoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pPiYmIGNhbGxiYWNrKQorICAgICAgICA6
IG1fYXR0YWNobWVudChhdHRhY2htZW50KQorICAgICAgICAsIG1fY2FsbGJhY2soc3RkOjptYWtl
X3VuaXF1ZTxGdW5jdGlvbjx2b2lkKFJlZlB0cjxTaGFyZWRCdWZmZXI+KT4+KFdURk1vdmUoY2Fs
bGJhY2spKSkKKyAgICAgICAgLCBtX2xvYWRlcihzdGQ6Om1ha2VfdW5pcXVlPEZpbGVSZWFkZXJM
b2FkZXI+KEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRUeXBlOjpSZWFkQXNBcnJheUJ1ZmZlciwgc3Rh
dGljX2Nhc3Q8RmlsZVJlYWRlckxvYWRlckNsaWVudCo+KHRoaXMpKSkKKyAgICB7CisgICAgICAg
IG1fbG9hZGVyLT5zdGFydCgmYXR0YWNobWVudC5kb2N1bWVudCgpLCAqYXR0YWNobWVudC5maWxl
KCkpOworICAgIH0KKworICAgIH5BdHRhY2htZW50RGF0YVJlYWRlcigpOworCitwcml2YXRlOgor
ICAgIHZvaWQgZGlkU3RhcnRMb2FkaW5nKCkgZmluYWwgeyB9CisgICAgdm9pZCBkaWRSZWNlaXZl
RGF0YSgpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygpIGZpbmFsOworICAg
IHZvaWQgZGlkRmFpbChpbnQgZXJyb3IpIGZpbmFsOworCisgICAgdm9pZCBpbnZva2VDYWxsYmFj
a0FuZEZpbmlzaFJlYWRpbmcoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJik7CisKKyAgICBIVE1MQXR0
YWNobWVudEVsZW1lbnQmIG1fYXR0YWNobWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rp
b248dm9pZChSZWZQdHI8U2hhcmVkQnVmZmVyPik+PiBtX2NhbGxiYWNrOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxGaWxlUmVhZGVyTG9hZGVyPiBtX2xvYWRlcjsKK307CisKIEhUTUxBdHRhY2htZW50
RWxlbWVudDo6SFRNTEF0dGFjaG1lbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGF0dGFjaG1lbnRUYWcpKTsKIH0KIAotSFRN
TEF0dGFjaG1lbnRFbGVtZW50Ojp+SFRNTEF0dGFjaG1lbnRFbGVtZW50KCkgPSBkZWZhdWx0Owor
SFRNTEF0dGFjaG1lbnRFbGVtZW50Ojp+SFRNTEF0dGFjaG1lbnRFbGVtZW50KCkKK3sKKyAgICBt
X2F0dGFjaG1lbnRSZWFkZXJzLmNsZWFyKCk7Cit9CiAKIFJlZjxIVE1MQXR0YWNobWVudEVsZW1l
bnQ+IEhUTUxBdHRhY2htZW50RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKQEAgLTYxLDkgKzk3LDE2IEBAIEZpbGUqIEhU
TUxBdHRhY2htZW50RWxlbWVudDo6ZmlsZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZmlsZS5nZXQo
KTsKIH0KIAotdm9pZCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OnNldEZpbGUoRmlsZSogZmlsZSkK
K1VSTCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OmJsb2JVUkwoKSBjb25zdAogewotICAgIG1fZmls
ZSA9IGZpbGU7CisgICAgcmV0dXJuIHsgeyB9LCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKEhUTUxOYW1lczo6d2Via2l0YXR0YWNobWVudGJsb2J1cmxBdHRyKS5zdHJpbmcoKSB9Owor
fQorCit2b2lkIEhUTUxBdHRhY2htZW50RWxlbWVudDo6c2V0RmlsZShSZWZQdHI8RmlsZT4mJiBm
aWxlKQoreworICAgIG1fZmlsZSA9IFdURk1vdmUoZmlsZSk7CisKKyAgICBzZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6d2Via2l0YXR0YWNobWVudGJsb2J1cmxB
dHRyLCBtX2ZpbGUgPyBtX2ZpbGUtPnVybCgpIDogZW1wdHlTdHJpbmcoKSk7CiAKICAgICBpZiAo
YXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlci0+aW52
YWxpZGF0ZSgpOwpAQCAtNzIsMjAgKzExNSwxNiBAQCB2b2lkIEhUTUxBdHRhY2htZW50RWxlbWVu
dDo6c2V0RmlsZShGaWxlKiBmaWxlKQogTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQg
SFRNTEF0dGFjaG1lbnRFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpb25UeXBl
IHR5cGUsIENvbnRhaW5lck5vZGUmIGFuY2VzdG9yKQogewogICAgIGF1dG8gcmVzdWx0ID0gSFRN
TEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKHR5cGUsIGFuY2VzdG9yKTsKLSAgICBpZiAo
YXV0byogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKHR5cGUuY29u
bmVjdGVkVG9Eb2N1bWVudCkKLSAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS5kaWRJbnNlcnRB
dHRhY2htZW50RWxlbWVudCgqdGhpcyk7Ci0gICAgfQorICAgIGlmICh0eXBlLmNvbm5lY3RlZFRv
RG9jdW1lbnQpCisgICAgICAgIGRvY3VtZW50KCkuZGlkSW5zZXJ0QXR0YWNobWVudEVsZW1lbnQo
KnRoaXMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgSFRNTEF0dGFjaG1lbnRFbGVt
ZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlIHR5cGUsIENvbnRhaW5lck5vZGUm
IGFuY2VzdG9yKQogewogICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKHR5cGUs
IGFuY2VzdG9yKTsKLSAgICBpZiAoYXV0byogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpIHsK
LSAgICAgICAgaWYgKHR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQotICAgICAgICAgICAg
ZnJhbWUtPmVkaXRvcigpLmRpZFJlbW92ZUF0dGFjaG1lbnRFbGVtZW50KCp0aGlzKTsKLSAgICB9
CisgICAgaWYgKHR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQorICAgICAgICBkb2N1bWVu
dCgpLmRpZFJlbW92ZUF0dGFjaG1lbnRFbGVtZW50KCp0aGlzKTsKIH0KIAogdm9pZCBIVE1MQXR0
YWNobWVudEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC0xMjEsNiArMTYwLDU2IEBAIFN0cmluZyBI
VE1MQXR0YWNobWVudEVsZW1lbnQ6OmF0dGFjaG1lbnRUeXBlKCkgY29uc3QKICAgICByZXR1cm4g
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih0eXBlQXR0cik7CiB9CiAKK1N0cmluZyBI
VE1MQXR0YWNobWVudEVsZW1lbnQ6OmF0dGFjaG1lbnRQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih3ZWJraXRhdHRhY2htZW50cGF0aEF0
dHIpOworfQorCit2b2lkIEhUTUxBdHRhY2htZW50RWxlbWVudDo6cmVxdWVzdERhdGEoRnVuY3Rp
b248dm9pZChSZWZQdHI8U2hhcmVkQnVmZmVyPik+JiYgY2FsbGJhY2spCit7CisgICAgaWYgKG1f
ZmlsZSkKKyAgICAgICAgbV9hdHRhY2htZW50UmVhZGVycy5hcHBlbmQoQXR0YWNobWVudERhdGFS
ZWFkZXI6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShjYWxsYmFjaykpKTsKKyAgICBlbHNlCisgICAg
ICAgIGNhbGxiYWNrKG51bGxwdHIpOworfQorCit2b2lkIEhUTUxBdHRhY2htZW50RWxlbWVudDo6
ZGVzdHJveVJlYWRlcihBdHRhY2htZW50RGF0YVJlYWRlciYgZmluaXNoZWRSZWFkZXIpCit7Cisg
ICAgbV9hdHRhY2htZW50UmVhZGVycy5yZW1vdmVGaXJzdE1hdGNoaW5nKFsmXSAoY29uc3Qgc3Rk
Ojp1bmlxdWVfcHRyPEF0dGFjaG1lbnREYXRhUmVhZGVyPiYgcmVhZGVyKSAtPiBib29sIHsKKyAg
ICAgICAgcmV0dXJuIHJlYWRlci5nZXQoKSA9PSAmZmluaXNoZWRSZWFkZXI7CisgICAgfSk7Cit9
CisKK0F0dGFjaG1lbnREYXRhUmVhZGVyOjp+QXR0YWNobWVudERhdGFSZWFkZXIoKQoreworICAg
IGludm9rZUNhbGxiYWNrQW5kRmluaXNoUmVhZGluZyhudWxscHRyKTsKK30KKwordm9pZCBBdHRh
Y2htZW50RGF0YVJlYWRlcjo6ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgaWYgKGF1dG8gYXJy
YXlCdWZmZXIgPSBtX2xvYWRlci0+YXJyYXlCdWZmZXJSZXN1bHQoKSkKKyAgICAgICAgaW52b2tl
Q2FsbGJhY2tBbmRGaW5pc2hSZWFkaW5nKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpKSk7CisgICAgZWxzZQorICAgICAgICBpbnZva2VDYWxsYmFja0FuZEZpbmlzaFJlYWRp
bmcobnVsbHB0cik7Cit9CisKK3ZvaWQgQXR0YWNobWVudERhdGFSZWFkZXI6OmRpZEZhaWwoaW50
KQoreworICAgIGludm9rZUNhbGxiYWNrQW5kRmluaXNoUmVhZGluZyhudWxscHRyKTsKK30KKwor
dm9pZCBBdHRhY2htZW50RGF0YVJlYWRlcjo6aW52b2tlQ2FsbGJhY2tBbmRGaW5pc2hSZWFkaW5n
KFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgZGF0YSkKK3sKKyAgICBhdXRvIGNhbGxiYWNrID0gV1RG
TW92ZShtX2NhbGxiYWNrKTsKKyAgICBpZiAoIWNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAgbV9sb2FkZXIgPSBudWxscHRyOworICAgICgq
Y2FsbGJhY2spKFdURk1vdmUoZGF0YSkpOworICAgIG1fYXR0YWNobWVudC5kZXN0cm95UmVhZGVy
KCp0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KEFUVEFDSE1FTlRfRUxFTUVOVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEF0dGFjaG1lbnRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50
RWxlbWVudC5oCmluZGV4IGJkOWM1NjQ4N2JhNjJlYzNlOTQ5ZTI0NjFhOWRiNDFkMDQ0MTU1YjYu
LjAwNjY5OTFhYmUyOGNmNWYyMjQ0YWEzYzdkNGI3NGE4MjQyNGNlNDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuaApAQCAtMzEsNiArMzEsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEF0dGFjaG1lbnREYXRhUmVhZGVyOwogY2xhc3Mg
RmlsZTsKIGNsYXNzIFJlbmRlckF0dGFjaG1lbnQ7CiAKQEAgLTM4LDggKzM5LDkgQEAgY2xhc3Mg
SFRNTEF0dGFjaG1lbnRFbGVtZW50IGZpbmFsIDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPEhUTUxBdHRhY2htZW50RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgVVJMIGJsb2JV
UkwoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBGaWxlKiBmaWxlKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRGaWxlKEZpbGUqKTsKKyAgICB2b2lkIHNldEZpbGUoUmVmUHRyPEZpbGU+JiYpOwog
CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIoKSBjb25zdDsKICAg
ICB2b2lkIHNldFVuaXF1ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CkBAIC00OSw5ICs1MSwx
MyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgYXR0YWNobWVudFRpdGxl
KCkgY29uc3Q7CiAgICAgU3RyaW5nIGF0dGFjaG1lbnRUeXBlKCkgY29uc3Q7CisgICAgU3RyaW5n
IGF0dGFjaG1lbnRQYXRoKCkgY29uc3Q7CiAKICAgICBSZW5kZXJBdHRhY2htZW50KiByZW5kZXJl
cigpIGNvbnN0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXF1ZXN0RGF0YShGdW5jdGlv
bjx2b2lkKFJlZlB0cjxTaGFyZWRCdWZmZXI+KT4mJiBjYWxsYmFjayk7CisgICAgdm9pZCBkZXN0
cm95UmVhZGVyKEF0dGFjaG1lbnREYXRhUmVhZGVyJik7CisKIHByaXZhdGU6CiAgICAgSFRNTEF0
dGFjaG1lbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogICAgIHZp
cnR1YWwgfkhUTUxBdHRhY2htZW50RWxlbWVudCgpOwpAQCAtNjksNiArNzUsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21pY1N0cmluZyYpIGZpbmFsOwogICAgIAogICAgIFJlZlB0cjxGaWxlPiBtX2ZpbGU7CisgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBdHRhY2htZW50RGF0YVJlYWRlcj4+IG1fYXR0YWNobWVu
dFJlYWRlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbiBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCmluZGV4IGI2ZjA0MzM5NTQyMGYwOTY5MDRlNzU1Y2Iw
MTFmYTU3ZmFjZTAyN2QuLjdhMWI1ZTEwMTQ1ZTY0NzZiOGQ5MjEwOTRmYTAwMGQ2OWQ3MDIyMDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCkBAIC0zODMsNiAr
MzgzLDcgQEAgdnNwYWNlCiB3ZWJraXRhbGxvd2Z1bGxzY3JlZW4KIHdlYmtpdGF0dGFjaG1lbnRp
ZAogd2Via2l0YXR0YWNobWVudHBhdGgKK3dlYmtpdGF0dGFjaG1lbnRibG9idXJsCiB3ZWJraXRk
aXJlY3RvcnkKIHdpZHRoCiB3cmFwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJQXR0YWNobWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
QXR0YWNobWVudC5jcHAKaW5kZXggOTFlYzBiN2ViYzA0ZmM2NmQ4OGViMDU1ZjhkNWQ2NjNmOGFl
MmExNi4uMWQ0OWIwN2IyYjFiNTFlN2IyNzM1ZWQzZDE0NmQ0Yjc3NjlhMTRiNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmNwcApAQCAtMjYsNiArMjYs
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFQSUF0dGFjaG1lbnQuaCIKIAor
I2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL0Jsb2NrUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBBUEkgewpA
QCAtNDUsNCArNDcsMTIgQEAgQXR0YWNobWVudDo6fkF0dGFjaG1lbnQoKQogewogfQogCit2b2lk
IEF0dGFjaG1lbnQ6OnJlcXVlc3REYXRhKEZ1bmN0aW9uPHZvaWQoUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4sIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2spCit7
CisgICAgaWYgKG1fd2ViUGFnZSkKKyAgICAgICAgbV93ZWJQYWdlLT5yZXF1ZXN0QXR0YWNobWVu
dERhdGEobV9pZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgZWxzZQorICAgICAg
ICBjYWxsYmFjayhudWxscHRyLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2Fz
SW52YWxpZGF0ZWQpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJQXR0YWNobWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0
dGFjaG1lbnQuaAppbmRleCAyNDU1OTBlZmRlNzliMDlhMDdiNDA0ODJjMDcwZDlmMTYyOGQ1ZDNh
Li4xZWEwMDdkNmUwNzNiMTM0Y2I0ZDlhZTQ1NTY4MTlkOWM5NTgyMjQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmgKQEAgLTI4LDkgKzI4LDE0IEBACiAj
aW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgogI2luY2x1
ZGUgPFdlYktpdC9XZWJQYWdlUHJveHkuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2hhcmVkQnVmZmVyOworfQorCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIH0KQEAgLTQzLDYgKzQ4LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfkF0dGFjaG1lbnQoKTsKIAogICAgIGNvbnN0IFdURjo6U3RyaW5nJiBp
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgdm9pZCByZXF1
ZXN0RGF0YShGdW5jdGlvbjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCBXZWJL
aXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBB
dHRhY2htZW50KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXZWJLaXQ6OldlYlBhZ2VQ
cm94eSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S0F0dGFjaG1lbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdHRh
Y2htZW50LmgKaW5kZXggOTQwMzIzOTdlMDNmOTYwYTE5YzY5ZDRhN2QwMDZiZTc4ZGQyYjZjMC4u
NWYwZDUwZjYwNWViYjg4Y2UwNjZjMjNlNDEyY2RlNDY5MWQyZTI1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXR0YWNobWVudC5oCkBAIC0yOSw2ICsy
OSw4IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAogCit0eXBlZGVmIHZvaWQoXl9XS0F0dGFjaG1l
bnREYXRhQ29tcGxldGlvbkhhbmRsZXIpKE5TRGF0YSAqLCBOU0Vycm9yICopOworCiB0eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tBdHRhY2htZW50RGlzcGxheU1vZGUpIHsKICAgICBfV0tB
dHRhY2htZW50RGlzcGxheU1vZGVBdXRvID0gMSwKICAgICBfV0tBdHRhY2htZW50RGlzcGxheU1v
ZGVJblBsYWNlLApAQCAtNDMsNiArNDUsNyBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3N4KFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCiAKIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3go
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKIEBpbnRlcmZhY2UgX1dLQXR0YWNobWVudCA6
IE5TT2JqZWN0CistICh2b2lkKXJlcXVlc3REYXRhOihfV0tBdHRhY2htZW50RGF0YUNvbXBsZXRp
b25IYW5kbGVyKWNvbXBsZXRpb25IYW5kbGVyOwogQGVuZAogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdHRhY2htZW50Lm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQubW0KaW5kZXggZDFi
MTQ2ZjE1NWYxZjBkMjQzMWFlNGVhNDgzY2FkYjA3ZTMwMDAyOS4uMGIwYzM2MmU3YzE5ZTQ0MmMy
OWRkNGMzMWJlN2Q5ZjA5ODA2YWY5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQubW0KQEAgLTI5LDcgKzI5LDEwIEBACiAjaWYgV0tf
QVBJX0VOQUJMRUQKIAogI2ltcG9ydCAiQVBJQXR0YWNobWVudC5oIgorI2ltcG9ydCAiV0tFcnJv
clByaXZhdGUuaCIKICNpbXBvcnQgIl9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oIgorI2ltcG9ydCA8
V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwogCkBAIC01OCw2ICs2MSwxOSBAQCAtIChCT09MKWlzRXF1YWw6
KGlkKW9iamVjdAogICAgIHJldHVybiBbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W19XS0F0dGFjaG1l
bnQgY2xhc3NdXSAmJiBbc2VsZi51bmlxdWVJZGVudGlmaWVyIGlzRXF1YWw6WyhfV0tBdHRhY2ht
ZW50ICopb2JqZWN0IHVuaXF1ZUlkZW50aWZpZXJdXTsKIH0KIAorLSAodm9pZClyZXF1ZXN0RGF0
YTooX1dLQXR0YWNobWVudERhdGFDb21wbGV0aW9uSGFuZGxlciljb21wbGV0aW9uSGFuZGxlcgor
eworICAgIF9hdHRhY2htZW50LT5yZXF1ZXN0RGF0YShbIGNhcHR1cmVkQmxvY2sgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpIF0gKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
IGJ1ZmZlciwgQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICBpZiAoIWNhcHR1
cmVkQmxvY2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGJ1ZmZlciAmJiBi
dWZmZXItPnNpemUoKSAmJiBlcnJvciA9PSBDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKQorICAg
ICAgICAgICAgY2FwdHVyZWRCbG9jayhidWZmZXItPmNyZWF0ZU5TRGF0YSgpLmF1dG9yZWxlYXNl
KCksIG5pbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhcHR1cmVkQmxvY2sobmlsLCBb
TlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOjEgdXNlckluZm86bmls
XSk7CisgICAgfSk7Cit9CisKIC0gKE5TU3RyaW5nICopdW5pcXVlSWRlbnRpZmllcgogewogICAg
IHJldHVybiBfYXR0YWNobWVudC0+aWRlbnRpZmllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggNWNjM2ZmNzVkNWZkZDA4ZmJmMmYzNDE2MGQwY2QwMTk1
YzJlNzMzNi4uN2Y4ZjEwZGMyY2I3OGYxNDRhOTQ3YzRlZWQwYTY4YjJlNDA5ZWNiMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xMjksNiArMTI5LDcgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL1B1YmxpY1N1ZmZpeC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6ZWRDcnlwdG9L
ZXlXcmFwLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SW5kaWNh
dG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KQEAgLTUxNjEsMTQgKzUxNjIsMjMgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnZvaWRDYWxsYmFjayhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAg
ICAgY2FsbGJhY2stPnBlcmZvcm1DYWxsYmFjaygpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
ZGF0YUNhbGxiYWNrKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVyZW5jZSwgQ2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdlUHJveHk6OnNoYXJlZEJ1ZmZlckNhbGxi
YWNrKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVyZW5jZSwgQ2FsbGJhY2tJRCBj
YWxsYmFja0lEKQogewotICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlPERhdGFD
YWxsYmFjaz4oY2FsbGJhY2tJRCk7CisgICAgYXV0byBjYWxsYmFjayA9IG1fY2FsbGJhY2tzLnRh
a2U8U2hhcmVkQnVmZmVyQ2FsbGJhY2s+KGNhbGxiYWNrSUQpOwogICAgIGlmICghY2FsbGJhY2sp
IHsKLSAgICAgICAgLy8gRklYTUU6IExvZyBlcnJvciBvciBhc3NlcnQuCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY2FsbGJhY2st
PnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRh
UmVmZXJlbmNlLmRhdGEoKSwgZGF0YVJlZmVyZW5jZS5zaXplKCkpKTsKK30KKwordm9pZCBXZWJQ
YWdlUHJveHk6OmRhdGFDYWxsYmFjayhjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZl
cmVuY2UsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKK3sKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9j
YWxsYmFja3MudGFrZTxEYXRhQ2FsbGJhY2s+KGNhbGxiYWNrSUQpOworICAgIGlmICghY2FsbGJh
Y2spCisgICAgICAgIHJldHVybjsKKwogICAgIGNhbGxiYWNrLT5wZXJmb3JtQ2FsbGJhY2tXaXRo
UmV0dXJuVmFsdWUoQVBJOjpEYXRhOjpjcmVhdGUoZGF0YVJlZmVyZW5jZS5kYXRhKCksIGRhdGFS
ZWZlcmVuY2Uuc2l6ZSgpKS5wdHIoKSk7CiB9CiAKQEAgLTcxMTUsMTAgKzcxMjUsMjYgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9z
dCwgU3RyaW5nJiYgdG9wRnJhbWUKIAogdm9pZCBXZWJQYWdlUHJveHk6Omluc2VydEF0dGFjaG1l
bnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4gY29udGVudFR5cGUsIFNoYXJlZEJ1ZmZlciYgZGF0YSwgRnVuY3Rp
b248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFjaykKIHsKKyAgICBpZiAoIWlz
VmFsaWQoKSkgeworICAgICAgICBjYWxsYmFjayhDYWxsYmFja0Jhc2U6OkVycm9yOjpPd25lcldh
c0ludmFsaWRhdGVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGF1dG8gY2FsbGJh
Y2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrKSwgbV9wcm9jZXNzLT50aHJv
dHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbigpKTsKICAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydEF0dGFjaG1lbnQoaWRlbnRpZmllciwgZmlsZW5hbWUs
IGNvbnRlbnRUeXBlLCBJUEM6OlNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVuY2UgeyAmZGF0YSB9LCBj
YWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdEF0
dGFjaG1lbnREYXRhKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChSZWZQ
dHI8U2hhcmVkQnVmZmVyPiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2spCit7Cisg
ICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgY2FsbGJhY2sobnVsbHB0ciwgQ2FsbGJhY2tC
YXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFj
ayksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4oKSk7Cisg
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXF1ZXN0QXR0YWNobWVudERh
dGEoaWRlbnRpZmllciwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKK30KKwogdm9pZCBXZWJQYWdl
UHJveHk6OmRpZEluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQogewog
ICAgIG1fcGFnZUNsaWVudC5kaWRJbnNlcnRBdHRhY2htZW50KGlkZW50aWZpZXIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAzZTY4MjM2ZDJmODY5MjViNmZmYTJm
ZmU4ZmJiODQwOTYwNWI1MDAzLi4wMWZjMmUxZDE4YjE2NTgwYTJlYWI1ODI0NmUzY2UxM2NkMGIy
Y2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMjM2LDYgKzIz
Niw3IEBAIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPHVpbnQ2NF90PiBVbnNpZ25lZENhbGxiYWNr
OwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8RWRpdGluZ1JhbmdlPiBFZGl0aW5nUmFuZ2VDYWxs
YmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFN0cmluZyY+IFN0cmluZ0NhbGxi
YWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUq
LCBib29sLCBjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzJj4gU2NyaXB0VmFsdWVDYWxs
YmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+PiBTaGFyZWRCdWZmZXJDYWxsYmFjazsKIAogI2lmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYg
R2VuZXJpY0NhbGxiYWNrPEFQSTo6RXJyb3IqPiBQcmludEZpbmlzaGVkQ2FsbGJhY2s7CkBAIC0x
MjEzLDYgKzEyMTQsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5U
KQogICAgIHZvaWQgaW5zZXJ0QXR0YWNobWVudChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjb250ZW50VHlwZSwg
V2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhLCBGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6
RXJyb3IpPiYmKTsKKyAgICB2b2lkIHJlcXVlc3RBdHRhY2htZW50RGF0YShjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4s
IENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTQ2Niw2
ICsxNDY4LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdm9pZENhbGxiYWNrKENhbGxiYWNrSUQp
OwogICAgIHZvaWQgZGF0YUNhbGxiYWNrKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIENhbGxi
YWNrSUQpOworICAgIHZvaWQgc2hhcmVkQnVmZmVyQ2FsbGJhY2soY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJiwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBpbWFnZUNhbGxiYWNrKGNvbnN0IFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlJiwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBzdHJpbmdDYWxsYmFj
ayhjb25zdCBTdHJpbmcmLCBDYWxsYmFja0lEKTsKICAgICB2b2lkIGludmFsaWRhdGVTdHJpbmdD
YWxsYmFjayhDYWxsYmFja0lEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCBmMWVmNWU1OGE0MzhhZjRhNGQ2MjkwOGI4NTk2YTNh
ZDM3NmViNzE3Li44YTk0ZmVmMzdiZmVlMjFjNGVkMjZmNDdhYjk4NGM1NjM5OWYxMzA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBA
IC0xNTcsNiArMTU3LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICAjIENhbGxi
YWNrIG1lc3NhZ2VzCiAgICAgVm9pZENhbGxiYWNrKFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFj
a0lEKQogICAgIERhdGFDYWxsYmFjayhJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdWx0RGF0YSwgV2Vi
S2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAgU2hhcmVkQnVmZmVyQ2FsbGJhY2soSVBD
OjpEYXRhUmVmZXJlbmNlIHJlc3VsdERhdGEsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lE
KTsKICAgICBJbWFnZUNhbGxiYWNrKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgYml0
bWFwSGFuZGxlLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBTdHJpbmdDYWxs
YmFjayhTdHJpbmcgcmVzdWx0U3RyaW5nLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
ICAgICBJbnZhbGlkYXRlU3RyaW5nQ2FsbGJhY2soV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4
IDk3MTFiOTBhZDQ2YTMwMjlhNjE2MGMwMTY5MDVhYmJiMTA3OGRjOTMuLmZiODZiNDA5NDRhZDg2
OTgxMjg5MmU3ZmUzZjRlZmM3NDg4ODUxMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0xNDEsMTEgKzE0MSwxMyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvRWxlbWVudEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FdmVudEhhbmRsZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zp
bGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRm9ybVN0YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxBdHRhY2htZW50RWxlbWVudC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MSW1hZ2VFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSW5wdXRFbGVtZW50
Lmg+CkBAIC01Nzc0LDYgKzU3NzYsMjkgQEAgdm9pZCBXZWJQYWdlOjppbnNlcnRBdHRhY2htZW50
KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwKICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lEKSk7CiB9
CiAKK3ZvaWQgV2ViUGFnZTo6cmVxdWVzdEF0dGFjaG1lbnREYXRhKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQoreworICAgIC8vIEZJWE1FOiBXZSBkb24n
dCBjdXJyZW50bHkgaGFuZGxlIGF0dGFjaG1lbnQgZGF0YSByZXF1ZXN0cyBmb3IgYXR0YWNobWVu
dCBlbGVtZW50cyBpbiBzdWJmcmFtZXMuCisgICAgYXV0byogZnJhbWUgPSBtYWluRnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNoYXJlZEJ1ZmZlckNhbGxiYWNrKHsgfSwgY2FsbGJhY2tJ
RCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBhdHRhY2htZW50ID0gZnJh
bWUtPmRvY3VtZW50KCktPmF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpOworICAg
IGlmICghYXR0YWNobWVudCkgeworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlNoYXJlZEJ1ZmZlckNhbGxiYWNrKHsgfSwgY2FsbGJhY2tJRCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgYXR0YWNobWVudC0+cmVxdWVzdERhdGEoW2NhbGxiYWNrSUQsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvdGVjdGVkQXR0YWNobWVudCA9IFdURk1vdmUo
YXR0YWNobWVudCldIChSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpIHsKKyAgICAgICAgaWYg
KGJ1ZmZlciAmJiBidWZmZXItPnNpemUoKSkKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hhcmVkQnVmZmVyQ2FsbGJhY2soSVBDOjpTaGFy
ZWRCdWZmZXJEYXRhUmVmZXJlbmNlIHsgYnVmZmVyLmdldCgpIH0sIGNhbGxiYWNrSUQpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTaGFyZWRCdWZmZXJDYWxsYmFjayh7IH0sIGNhbGxiYWNrSUQpKTsKKyAgICB9
KTsKK30KKwogI2VuZGlmIC8vIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CmluZGV4IDFkODRkNGRiODRhZmZhZDI2NjQ1MDhkMWE1Y2VlZGIzNDk1MTUzY2YuLmJiN2ZmZmQy
OThiZWJhNzIwODQ5YjhmOWQ1YmZkMmNmOWE4NWY0ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTEwMDEsNiArMTAwMSw3IEBAIHB1YmxpYzoKIAog
I2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgdm9pZCBpbnNlcnRBdHRhY2htZW50
KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgc3RkOjpv
cHRpb25hbDxTdHJpbmc+IGNvbnRlbnRUeXBlLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBD
YWxsYmFja0lEKTsKKyAgICB2b2lkIHJlcXVlc3RBdHRhY2htZW50RGF0YShjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXIsIENhbGxiYWNrSUQpOwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRl
eCAxYjI4ZDFhNmZhMmE2YmUwMTE4NmE0NzQyM2NiZDQ3NzJjZmE5MzE5Li42ZDdiNmVkNjI2MzU5
NmU4NjlmM2E0YTdlYzQ0OTcxNTM2Y2E4NzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTQ4Nyw1ICs0ODcsNiBA
QCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKIAogI2lmIEVOQUJMRShBVFRB
Q0hNRU5UX0VMRU1FTlQpCiAgICAgSW5zZXJ0QXR0YWNobWVudChTdHJpbmcgaWRlbnRpZmllciwg
U3RyaW5nIGZpbGVuYW1lLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY29udGVudFR5cGUsIElQQzo6
RGF0YVJlZmVyZW5jZSBkYXRhLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKKyAgICBS
ZXF1ZXN0QXR0YWNobWVudERhdGEoU3RyaW5nIGlkZW50aWZpZXIsIFdlYktpdDo6Q2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggZmEyOTE1MTIxNTA3ZmRjZWEwYTFmZTdkZGFiMThiZDA1Y2Rh
OTI1Yy4uZDM4NGRkM2Y0NmRjNDI2ZDkzMzU2M2I0MjlhNzY0NTEzNjliODY4OCAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBA
CisyMDE3LTExLTExICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisg
ICAgICAgIFtBdHRhY2htZW50IFN1cHBvcnRdIEltcGxlbWVudCBTUEkgZm9yIGNsaWVudHMgdG8g
cmVxdWVzdCBkYXRhIGZvciBhIGdpdmVuIGF0dGFjaG1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTU4NgorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMzUzNTU3MjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQXVnbWVudHMgZXhpc3RpbmcgQVBJIHRlc3RzIGluIFdLQXR0YWNobWVudFRlc3RzIHRv
IGFkZGl0aW9uYWxseSBjaGVjayB0aGF0IC1yZXF1ZXN0RGF0YSB5aWVsZHMgdGhlIGNvcnJlY3QK
KyAgICAgICAgcmVzdWx0IHdoZW4gcGVyZm9ybWluZyB2YXJpb3VzIGVkaXRpbmcgb3BlcmF0aW9u
cy4gQWxzbyBhZGRzIGEgbmV3IEFQSSB0ZXN0IHRoYXQgY3V0cyBhbmQgcGFzdGVzIGFuIGF0dGFj
aG1lbnQKKyAgICAgICAgaW5zZXJ0ZWQgdXNpbmcgV0tXZWJWaWV3IGF0dGFjaG1lbnQgU1BJLCBh
bmQgZXhwZWN0cyB0aGF0IHRoZSBkYXRhIG9mIHRoZSBhdHRhY2htZW50IGNhbiBzdGlsbCBiZSBm
ZXRjaGVkIHVzaW5nCisgICAgICAgIHRoZSBfV0tBdHRhY2htZW50IFNQSS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW06Cisg
ICAgICAgICgtW05TRGF0YSBzaG9ydERlc2NyaXB0aW9uXSk6CisgICAgICAgICgtW19XS0F0dGFj
aG1lbnQgc3luY2hyb25vdXNseVJlcXVlc3REYXRhOl0pOgorICAgICAgICAoLVtfV0tBdHRhY2ht
ZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOl0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVCk6CisKIDIwMTctMTEtMTAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5j
b20+CiAKICAgICAgICAgRmluaXNoIHJvbGxpbmcgb3V0IHIyMjQ1NDQKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3Rz
Lm1tCmluZGV4IGY0YmZlMTAzMDE1NTM5MzYyNTUwMGEyM2Q4MzExYjI4YjFiOTJmZWMuLmYzNjdh
Y2MzM2M0MWI2NzE0OGY0NWM2ZTE2YzhhZmI4MzlmZWE5MDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5t
bQpAQCAtMTc3LDYgKzE3Nyw1MCBAQCAtICh2b2lkKWV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6
KE5TU3RyaW5nICopY29tbWFuZCB3aXRoQXJndW1lbnQ6KE5TU3RyaW5nICopYQogCiBAZW5kCiAK
K0BpbXBsZW1lbnRhdGlvbiBOU0RhdGEgKEF0dGFjaG1lbnRUZXN0aW5nKQorCistIChOU1N0cmlu
ZyAqKXNob3J0RGVzY3JpcHRpb24KK3sKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCI8JXR1IGJ5dGVzPiIsIHNlbGYubGVuZ3RoXTsKK30KKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gX1dLQXR0YWNobWVudCAoQXR0YWNobWVudFRlc3RpbmcpCisKKy0gKE5TRGF0YSAq
KXN5bmNocm9ub3VzbHlSZXF1ZXN0RGF0YTooTlNFcnJvciAqKillcnJvcgoreworICAgIF9fYmxv
Y2sgUmV0YWluUHRyPE5TRGF0YT4gcmVzdWx0OworICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TRXJy
b3I+IHJlc3VsdEVycm9yOworICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgW3Nl
bGYgcmVxdWVzdERhdGE6XihOU0RhdGEgKmRhdGEsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAg
IHJlc3VsdCA9IHJldGFpblB0cihkYXRhKTsKKyAgICAgICAgcmVzdWx0RXJyb3IgPSByZXRhaW5Q
dHIoZXJyb3IpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBpZiAoZXJyb3IpCisgICAgICAgICplcnJv
ciA9IHJlc3VsdEVycm9yLmF1dG9yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gcmVzdWx0LmF1dG9y
ZWxlYXNlKCk7Cit9CisKKy0gKHZvaWQpZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6KE5TRGF0YSAq
KWV4cGVjdGVkRGF0YQoreworICAgIE5TRXJyb3IgKmRhdGFSZXF1ZXN0RXJyb3IgPSBuaWw7Cisg
ICAgTlNEYXRhICpvYnNlcnZlZERhdGEgPSBbc2VsZiBzeW5jaHJvbm91c2x5UmVxdWVzdERhdGE6
JmRhdGFSZXF1ZXN0RXJyb3JdOworICAgIEJPT0wgb2JzZXJ2ZWREYXRhSXNFcXVhbFRvRXhwZWN0
ZWREYXRhID0gW29ic2VydmVkRGF0YSBpc0VxdWFsVG9EYXRhOmV4cGVjdGVkRGF0YV0gfHwgb2Jz
ZXJ2ZWREYXRhID09IGV4cGVjdGVkRGF0YTsKKyAgICBFWFBFQ1RfVFJVRShvYnNlcnZlZERhdGFJ
c0VxdWFsVG9FeHBlY3RlZERhdGEpOworICAgIGlmICghb2JzZXJ2ZWREYXRhSXNFcXVhbFRvRXhw
ZWN0ZWREYXRhKSB7CisgICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQgZGF0YTogJUAgYnV0IG9ic2Vy
dmVkOiAlQCBmb3IgJUAiLCBbZXhwZWN0ZWREYXRhIHNob3J0RGVzY3JpcHRpb25dLCBbb2JzZXJ2
ZWREYXRhIHNob3J0RGVzY3JpcHRpb25dLCBzZWxmKTsKKyAgICAgICAgTlNMb2coQCJPYnNlcnZl
ZCBlcnJvcjogJUAgd2hpbGUgcmVhZGluZyBkYXRhIGZvciAlQCIsIGRhdGFSZXF1ZXN0RXJyb3Is
IHNlbGYpOworICAgIH0KK30KKworQGVuZAorCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAK
IFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEF0dGFjaG1lbnRFbGVtZW50SW5zZXJ0aW9uKQpAQCAt
MTkzLDYgKzIzNyw5IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEF0dGFjaG1lbnRFbGVtZW50
SW5zZXJ0aW9uKQogICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCIzOCBieXRlcyIsIFt3ZWJWaWV3
IHZhbHVlT2ZBdHRyaWJ1dGU6QCJzdWJ0aXRsZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1l
bnQiXSk7CiAgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIF0sIEBb
IGZpcnN0QXR0YWNobWVudC5nZXQoKSBdKTsKICAgICB9CisKKyAgICBbZmlyc3RBdHRhY2htZW50
IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOnRlc3RIVE1MRGF0YSgpXTsKKwogICAgIHsKICAgICAg
ICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgc2NvcGUod2ViVmlldy5nZXQoKSk7
CiAgICAgICAgIC8vIFNpbmNlIG5vIGNvbnRlbnQgdHlwZSBpcyBleHBsaWNpdGx5IHNwZWNpZmll
ZCwgY29tcHV0ZSBpdCBmcm9tIHRoZSBmaWxlIGV4dGVuc2lvbi4KQEAgLTIwMyw2ICsyNTAsOSBA
QCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50RWxlbWVudEluc2VydGlvbikKICAg
ICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiMzcgS0IiLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRl
OkAic3VidGl0bGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOwogICAgICAgICBz
Y29wZS5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBmaXJzdEF0dGFjaG1lbnQuZ2V0KCkgXSwg
QFsgc2Vjb25kQXR0YWNobWVudC5nZXQoKSBdKTsKICAgICB9CisKKyAgICBbZmlyc3RBdHRhY2ht
ZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOm5pbF07CisgICAgW3NlY29uZEF0dGFjaG1lbnQg
ZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6dGVzdEltYWdlRGF0YSgpXTsKIH0KIAogVEVTVChXS0F0
dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudFVwZGF0ZXNXaGVuSW5zZXJ0aW5nQW5kRGVsZXRpbmdO
ZXdsaW5lKQpAQCAtMjE4LDEyICsyNjgsMTggQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0
YWNobWVudFVwZGF0ZXNXaGVuSW5zZXJ0aW5nQW5kRGVsZXRpbmdOZXdsaW5lKQogICAgIFt3ZWJW
aWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgd2l0aEFyZ3Vt
ZW50Om5pbCBleHBlY3RlZFJlbW92YWxzOkBbXSBleHBlY3RlZEluc2VydGlvbnM6QFtdXTsKICAg
ICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCku
Y29sbGFwc2UoZG9jdW1lbnQuYm9keSkiXTsKICAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0
ZXJDb21tYW5kOkAiSW5zZXJ0UGFyYWdyYXBoIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVt
b3ZhbHM6QFtdIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOworCisgICAgW3dlYlZpZXcgZXhwZWN0
VXBkYXRlc0FmdGVyQ29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiB3aXRoQXJndW1lbnQ6bmlsIGV4
cGVjdGVkUmVtb3ZhbHM6QFtdIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOworICAgIFthdHRhY2ht
ZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOnRlc3RIVE1MRGF0YSgpXTsKKwogICAgIFt3ZWJW
aWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJEZWxldGVGb3J3YXJkIiB3aXRoQXJndW1l
bnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFthdHRhY2htZW50LmdldCgpXSBleHBlY3RlZEluc2Vy
dGlvbnM6QFtdXTsKKyAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpuaWxd
OwogfQogCiBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5VbmRv
aW5nQW5kUmVkb2luZykKIHsKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0
dGFjaG1lbnRzKCk7CisgICAgUmV0YWluUHRyPE5TRGF0YT4gaHRtbERhdGEgPSByZXRhaW5QdHIo
dGVzdEhUTUxEYXRhKCkpOwogICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBhdHRhY2htZW50
OwogICAgIHsKICAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2
ZXIod2ViVmlldy5nZXQoKSk7CkBAIC0yMzEsMTAgKzI4NywxOSBAQCBURVNUKFdLQXR0YWNobWVu
dFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5VbmRvaW5nQW5kUmVkb2luZykKICAgICAgICAg
b2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFthdHRhY2htZW50LmdldCgp
XSk7CiAgICAgfQogICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJVbmRv
IiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFthdHRhY2htZW50LmdldCgpXSBl
eHBlY3RlZEluc2VydGlvbnM6QFtdXTsKKyAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWRE
YXRhVG9CZTpuaWxdOworCiAgICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpA
IlJlZG8iIHdpdGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhwZWN0ZWRJbnNl
cnRpb25zOkBbYXR0YWNobWVudC5nZXQoKV1dOworICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVl
c3RlZERhdGFUb0JlOmh0bWxEYXRhLmdldCgpXTsKKwogICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0
ZXNBZnRlckNvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgd2l0aEFyZ3VtZW50Om5pbCBleHBlY3Rl
ZFJlbW92YWxzOkBbYXR0YWNobWVudC5nZXQoKV0gZXhwZWN0ZWRJbnNlcnRpb25zOkBbXV07Cisg
ICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6bmlsXTsKKwogICAgIFt3ZWJW
aWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJVbmRvIiB3aXRoQXJndW1lbnQ6bmlsIGV4
cGVjdGVkUmVtb3ZhbHM6QFtdIGV4cGVjdGVkSW5zZXJ0aW9uczpAW2F0dGFjaG1lbnQuZ2V0KCld
XTsKKyAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpodG1sRGF0YS5nZXQo
KV07CisKICAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5kOkAiUmVkbyIgd2l0
aEFyZ3VtZW50Om5pbCBleHBlY3RlZFJlbW92YWxzOkBbYXR0YWNobWVudC5nZXQoKV0gZXhwZWN0
ZWRJbnNlcnRpb25zOkBbXV07CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRv
QmU6bmlsXTsKIH0KIAogVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudFVwZGF0ZXNX
aGVuQ2hhbmdpbmdGb250U3R5bGVzKQpAQCAtMjUyLDkgKzMxNywxMSBAQCBURVNUKFdLQXR0YWNo
bWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5DaGFuZ2luZ0ZvbnRTdHlsZXMpCiAgICAg
W3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIlRvZ2dsZUJvbGQiIHdpdGhBcmd1
bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhwZWN0ZWRJbnNlcnRpb25zOkBbXV07CiAg
ICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIlRvZ2dsZUl0YWxpYyIgd2l0
aEFyZ3VtZW50Om5pbCBleHBlY3RlZFJlbW92YWxzOkBbXSBleHBlY3RlZEluc2VydGlvbnM6QFtd
XTsKICAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5kOkAiVG9nZ2xlVW5kZXJs
aW5lIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFtdIGV4cGVjdGVkSW5zZXJ0
aW9uczpAW11dOworICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOnRlc3RI
VE1MRGF0YSgpXTsKIAogICAgIC8vIEluc2VydGluZyB0ZXh0IHNob3VsZCBkZWxldGUgdGhlIGN1
cnJlbnQgc2VsZWN0aW9uLCByZW1vdmluZyB0aGUgYXR0YWNobWVudCBpbiB0aGUgcHJvY2Vzcy4K
ICAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5kOkAiSW5zZXJ0VGV4dCIgd2l0
aEFyZ3VtZW50OkAiZm9vIiBleHBlY3RlZFJlbW92YWxzOkBbYXR0YWNobWVudC5nZXQoKV0gZXhw
ZWN0ZWRJbnNlcnRpb25zOkBbXV07CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0
YVRvQmU6bmlsXTsKIH0KIAogVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudFVwZGF0
ZXNXaGVuSW5zZXJ0aW5nTGlzdHMpCkBAIC0yNzEsNiArMzM4LDcgQEAgVEVTVChXS0F0dGFjaG1l
bnRUZXN0cywgQXR0YWNobWVudFVwZGF0ZXNXaGVuSW5zZXJ0aW5nTGlzdHMpCiAgICAgW3dlYlZp
ZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIkluc2VydE9yZGVyZWRMaXN0IiB3aXRoQXJn
dW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFtdIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOwog
ICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJJbnNlcnRVbm9yZGVyZWRM
aXN0IiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFtdIGV4cGVjdGVkSW5zZXJ0
aW9uczpAW11dOwogICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJJbnNl
cnRVbm9yZGVyZWRMaXN0IiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFtdIGV4
cGVjdGVkSW5zZXJ0aW9uczpAW11dOworICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERh
dGFUb0JlOnRlc3RIVE1MRGF0YSgpXTsKIH0KIAogVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0
YWNobWVudFVwZGF0ZXNXaGVuSW5zZXJ0aW5nUmljaE1hcmt1cCkKQEAgLTI4OSw2ICszNTcsNjEg
QEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudFVwZGF0ZXNXaGVuSW5zZXJ0aW5n
UmljaE1hcmt1cCkKICAgICAgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25VcGRh
dGVdOwogICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAW2F0dGFjaG1l
bnQuZ2V0KCldLCBAWyBdKTsKICAgICB9CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVk
RGF0YVRvQmU6bmlsXTsKK30KKworVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudFVw
ZGF0ZXNXaGVuQ3V0dGluZ0FuZFBhc3RpbmcpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmll
d0ZvclRlc3RpbmdBdHRhY2htZW50cygpOworICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBh
dHRhY2htZW50OworICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2Nv
cGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIGF0dGFjaG1lbnQgPSByZXRhaW5Q
dHIoW3dlYlZpZXcgc3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRoRmlsZW5hbWU6QCJm
b28udHh0IiBjb250ZW50VHlwZTpAInRleHQvcGxhaW4iIGRhdGE6dGVzdEhUTUxEYXRhKCkgb3B0
aW9uczpuaWxdKTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFtd
LCBAW2F0dGFjaG1lbnQuZ2V0KCldKTsKKyAgICB9CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVx
dWVzdGVkRGF0YVRvQmU6dGVzdEhUTUxEYXRhKCldOworICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91
c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiU2VsZWN0QWxsIiBhcmd1bWVudDpuaWxdOworICAgIHsK
KyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmll
dy5nZXQoKSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21t
YW5kOkAiQ3V0IiBhcmd1bWVudDpuaWxdOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2ht
ZW50VXBkYXRlcyhAW2F0dGFjaG1lbnQuZ2V0KCldLCBAW10pOworICAgIH0KKyAgICBbYXR0YWNo
bWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpuaWxdOworICAgIHsKKyAgICAgICAgT2JzZXJ2
ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAg
ICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiUGFzdGUiIGFy
Z3VtZW50Om5pbF07CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBb
XSwgQFthdHRhY2htZW50LmdldCgpXSk7CisgICAgfQorICAgIFthdHRhY2htZW50IGV4cGVjdFJl
cXVlc3RlZERhdGFUb0JlOnRlc3RIVE1MRGF0YSgpXTsKK30KKworVEVTVChXS0F0dGFjaG1lbnRU
ZXN0cywgTXVsdGlwbGVTaW11bHRhbmVvdXNBdHRhY2htZW50RGF0YVJlcXVlc3RzKQoreworICAg
IGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKKyAgICBSZXRh
aW5QdHI8TlNEYXRhPiBodG1sRGF0YSA9IHRlc3RIVE1MRGF0YSgpOworICAgIFJldGFpblB0cjxf
V0tBdHRhY2htZW50PiBhdHRhY2htZW50OworICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1l
bnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIGF0dGFj
aG1lbnQgPSByZXRhaW5QdHIoW3dlYlZpZXcgc3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRX
aXRoRmlsZW5hbWU6QCJmb28udHh0IiBjb250ZW50VHlwZTpAInRleHQvcGxhaW4iIGRhdGE6aHRt
bERhdGEuZ2V0KCkgb3B0aW9uczpuaWxdKTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNo
bWVudFVwZGF0ZXMoQFtdLCBAW2F0dGFjaG1lbnQuZ2V0KCldKTsKKyAgICB9CisgICAgX19ibG9j
ayBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhRm9yRmlyc3RSZXF1ZXN0OworICAgIF9fYmxvY2sgUmV0
YWluUHRyPE5TRGF0YT4gZGF0YUZvclNlY29uZFJlcXVlc3Q7CisgICAgX19ibG9jayBib29sIGRv
bmUgPSBmYWxzZTsKKyAgICBbYXR0YWNobWVudCByZXF1ZXN0RGF0YTpeKE5TRGF0YSAqZGF0YSwg
TlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWVycm9yKTsKKyAgICAgICAg
ZGF0YUZvckZpcnN0UmVxdWVzdCA9IHJldGFpblB0cihkYXRhKTsKKyAgICB9XTsKKyAgICBbYXR0
YWNobWVudCByZXF1ZXN0RGF0YTpeKE5TRGF0YSAqZGF0YSwgTlNFcnJvciAqZXJyb3IpIHsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoIWVycm9yKTsKKyAgICAgICAgZGF0YUZvclNlY29uZFJlcXVlc3Qg
PSByZXRhaW5QdHIoZGF0YSk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworCisgICAg
VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVDVF9UUlVFKFtkYXRhRm9yRmlyc3RSZXF1ZXN0
IGlzRXF1YWxUb0RhdGE6aHRtbERhdGEuZ2V0KCldKTsKKyAgICBFWFBFQ1RfVFJVRShbZGF0YUZv
clNlY29uZFJlcXVlc3QgaXNFcXVhbFRvRGF0YTpodG1sRGF0YS5nZXQoKV0pOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326710</attachid>
            <date>2017-11-11 22:37:17 -0800</date>
            <delta_ts>2017-11-12 16:08:02 -0800</delta_ts>
            <desc>Fix WinCairo build</desc>
            <filename>bug-179586-20171111223716.patch</filename>
            <type>text/plain</type>
            <size>43180</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0NzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjQ4NzYwZjI2Y2ZkYmY0
ZDkzNDQ1OTc3Y2VkMzc2MGRjNDY1ZmZmMi4uMTdhNWEyZDkyY2QyNTM5YWVlOWJlMDBkNGJjZTJi
OTc0Y2ZkMjViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE3LTExLTExICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtBdHRhY2htZW50
IFN1cHBvcnRdIEltcGxlbWVudCBTUEkgZm9yIGNsaWVudHMgdG8gcmVxdWVzdCBkYXRhIGZvciBh
IGdpdmVuIGF0dGFjaG1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3OTU4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzUzNTU3MjA+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0
IGluIFdlYkNvcmUgZm9yIGZldGNoaW5nIGRhdGEgZm9yIGEgZ2l2ZW4gYXR0YWNobWVudCBlbGVt
ZW50LiBTZWUgcGVyLW1ldGhvZCBjb21tZW50cyBiZWxvdyBmb3IKKyAgICAgICAgbW9yZSBkZXRh
aWwuCisKKyAgICAgICAgVGVzdCBjb3ZlcmFnZSBieSBhdWdtZW50aW5nIGV4aXN0aW5nIEFQSSB0
ZXN0cyBpbiBXS0F0dGFjaG1lbnRUZXN0cywgYW5kIGFkZGluZyAyIG5ldyB0ZXN0cy4KKworICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlk
SW5zZXJ0QXR0YWNobWVudEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRp
ZFJlbW92ZUF0dGFjaG1lbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojph
dHRhY2htZW50Rm9ySWRlbnRpZmllciBjb25zdCk6CisKKyAgICAgICAgRmV0Y2hlcyBhbiBhdHRh
Y2htZW50IGVsZW1lbnQgbWF0Y2hpbmcgdGhlIGdpdmVuIGlkZW50aWZpZXIuIFVzaW5nIHRoZSBp
ZGVudGlmaWVyID0+IGF0dGFjaG1lbnQgZWxlbWVudCBtYXAgaGVyZQorICAgICAgICBhbGxvd3Mg
dXMgdG8gYXZvaWQgdGhlIGNvc3Qgb2Ygd2Fsa2luZyB0aGUgRE9NIGluIHNlYXJjaCBmb3IgSFRN
TEF0dGFjaG1lbnRFbGVtZW50cyBldmVyeSB0aW1lIGRhdGEgaXMKKyAgICAgICAgcmVxdWVzdGVk
LgorCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisKKyAgICAgICAgQWRkIGEgbWFwIG9mIGF0
dGFjaG1lbnQgaWRlbnRpZmllciA9PiBIVE1MQXR0YWNobWVudEVsZW1lbnQgaW4gRG9jdW1lbnQu
IFRoaXMgbWFwIGlzIHVwZGF0ZWQgd2hlbiBhdHRhY2htZW50CisgICAgICAgIGVsZW1lbnRzIGFy
ZSBjb25uZWN0ZWQgdG8gb3IgZGlzY29ubmVjdGVkIGZyb20gdGhlIGRvY3VtZW50LiBBZGRpdGlv
bmFsbHksIGRlbGVnYXRlIGF0dGFjaG1lbnQgaW5zZXJ0aW9uIGFuZAorICAgICAgICByZW1vdmFs
IG91dCB0byB0aGUgRWRpdG9yIGlmIHBvc3NpYmxlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRBdHRhY2htZW50RnJvbUZp
bGUpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL1dlYkNvbnRlbnRSZWFkZXJNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZW5hbWVzKToKKyAgICAgICAg
KiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZy
b21NYXJrdXApOgorCisgICAgICAgIFR3ZWFrIGV4aXN0aW5nIGxvZ2ljIHRoYXQgdHJhbnNmZXJz
IGZpbGUtYmFja2VkIEZpbGUgb2JqZWN0cyB3aGVuIGRlc2VyaWFsaXppbmcgSFRNTEF0dGFjaG1l
bnRFbGVtZW50cyBmcm9tCisgICAgICAgIG1hcmt1cCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUg
dGhlIGF0dGFjaG1lbnQgZWxlbWVudCBpcyBub3QgZmlsZS1iYWNrZWQuIEluIHRoaXMgY2FzZSwg
d2UgY29uc3RydWN0IGEgbmV3CisgICAgICAgIEZpbGUgb2JqZWN0IHVzaW5nIHRoZSBkZXNlcmlh
bGl6aW5nIGNvbnN0cnVjdG9yLiBUbyBkbyB0aGlzLCB3ZSB1c2UgdGhlIGF0dGFjaG1lbnQgZWxl
bWVudCdzIGJsb2IgVVJMIHRvIG1ha2UKKyAgICAgICAgc3VyZSB0aGF0IHRoZSBuZXcgRmlsZSBy
ZWZlcmVuY2VzIGFuIGV4aXN0aW5nIGJsb2IgbWF0Y2hpbmcgdGhhdCBVUkwuCisKKyAgICAgICAg
KiBodG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRh
Y2htZW50RGF0YVJlYWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0dGFjaG1lbnRE
YXRhUmVhZGVyOjpBdHRhY2htZW50RGF0YVJlYWRlcik6CisKKyAgICAgICAgSW50cm9kdWNlIEF0
dGFjaG1lbnREYXRhUmVhZGVyLCBhIGhlbHBlciBjbGFzcyBsb2NhbCB0byBIVE1MQXR0YWNobWVu
dEVsZW1lbnQgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZworICAgICAgICBhbiBhdHRh
Y2htZW50IGVsZW1lbnQncyBmaWxlIGFuZCBpbnZva2luZyBhIGdpdmVuIGNhbGxiYWNrIHdoZW4g
bG9hZGluZyBoYXMgc3VjY2VlZGVkIG9yIGZhaWxlZC4KKyAgICAgICAgRWFjaCBBdHRhY2htZW50
RGF0YVJlYWRlciBpcyByZXRhaW5lZCBleGNsdXNpdmVseSBieSBpdHMgSFRNTEF0dGFjaG1lbnRF
bGVtZW50LCB0aHJvdWdoIHRoZQorICAgICAgICBIVE1MQXR0YWNobWVudEVsZW1lbnQncyB2ZWN0
b3Igb2YgdW5pcXVlX3B0cnMgdG8gQXR0YWNobWVudERhdGFSZWFkZXJzLgorCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6On5IVE1MQXR0YWNobWVudEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEF0dGFjaG1lbnRFbGVtZW50OjpibG9iVVJMIGNvbnN0KToK
KworICAgICAgICBBZGQgYSBjb252ZW5pZW5jZSBnZXR0ZXIgZm9yIHRoZSBibG9iIFVSTCBvZiB0
aGUgYXR0YWNobWVudCdzIGJhY2tpbmcgRmlsZSBvYmplY3QuCisKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxBdHRhY2htZW50RWxlbWVudDo6c2V0RmlsZSk6CisKKyAgICAgICAgV2hlbiBzZXR0aW5n
IGFuIGF0dGFjaG1lbnQgZWxlbWVudCdzIGZpbGUsIHNldCB0aGUgYmxvYiBVUkwgYXR0cmlidXRl
IGFzIHdlbGwgdG8gdGhlIGJsb2IgVVJMLiBBbHNvLCB0d2VhayB0aGlzCisgICAgICAgIHRvIHRh
a2UgYSBSZWZQdHI8RmlsZT4mJiBpbnN0ZWFkIG9mIGEgcmF3IEZpbGUqLgorCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxBdHRhY2htZW50RWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3Rv
cik6CisKKyAgICAgICAgSW5zdGVhZCBvZiBkZWxlZ2F0aW5nIGF0dGFjaG1lbnQgaW5zZXJ0aW9u
IGFuZCByZW1vdmFsIHRvIHRoZSBFZGl0b3IsIGp1c3QgY2FsbCBvdXQgdG8gdGhlIERvY3VtZW50
LCB3aGljaCB3aWxsCisgICAgICAgIG5vdyBjYWxsIG91dCB0byB0aGUgRWRpdG9yLgorCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6OmF0dGFjaG1lbnRQYXRoIGNvbnN0
KToKKworICAgICAgICBBZGQgYSBjb252ZW5pZW5jZSBnZXR0ZXIgZm9yIHRoZSBhdHRhY2htZW50
IHBhdGggYXR0cmlidXRlLgorCisgICAgICAgIChXZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1l
bnQ6OnJlcXVlc3REYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdHRhY2htZW50RWxlbWVu
dDo6ZGVzdHJveVJlYWRlcik6CisKKyAgICAgICAgQ2FsbGVkIHdoZW4gYSBBdHRhY2htZW50RGF0
YVJlYWRlciBoYXMgY29tcGxldGVkIChlaXRoZXIgd2l0aCBzdWNjZXNzIG9yIGZhaWx1cmUpLCBh
bmQgaXMgcmVhZHkgdG8gYmUgcmVtb3ZlZAorICAgICAgICBmcm9tIHRoZSBhdHRhY2htZW50IGVs
ZW1lbnQncyBsaXN0IG9mIGFjdGl2ZSBkYXRhIHJlYWRlcnMuCisKKyAgICAgICAgKFdlYkNvcmU6
OkF0dGFjaG1lbnREYXRhUmVhZGVyOjp+QXR0YWNobWVudERhdGFSZWFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6QXR0YWNobWVudERhdGFSZWFkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6QXR0YWNobWVudERhdGFSZWFkZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2Vi
Q29yZTo6QXR0YWNobWVudERhdGFSZWFkZXI6Omludm9rZUNhbGxiYWNrQW5kRmluaXNoUmVhZGlu
Zyk6CisKKyAgICAgICAgV2hlbiB0aGUgcmVhZGVyIGlzIGRvbmUgbG9hZGluZywgb3IgaGFzIGZh
aWxlZCwgb3IgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLCBmaXJlIHRoZSBjYWxsYmFjayB3aXRo
IGxvYWRlZCBkYXRhCisgICAgICAgIChpZiBhbnkpIGFuZCBjYW5jZWwgdGhlIEZpbGVSZWFkZXJM
b2FkZXIuCisKKyAgICAgICAgKiBodG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oOgorICAgICAg
ICAqIGh0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluOgorCisgICAgICAgIEFkZHMgYSBuZXcgIndl
YmtpdGF0dGFjaG1lbnRibG9idXJsIiBhdHRyaWJ1dGUgdGhhdCBrZWVwcyB0cmFjayBvZiBhbiBh
dHRhY2htZW50IGVsZW1lbnQncyBmaWxlJ3MgYmxvYiBVUkwuIFRoaXMKKyAgICAgICAgaXMgdXNl
ZCB0byBlbnN1cmUgdGhhdCBpbmZvcm1hdGlvbiBhYm91dCBhbiBhdHRhY2htZW50IGVsZW1lbnQn
cyBmaWxlIGlzIG5vdCBsb3N0IGJldHdlZW4gY2VydGFpbiBlZGl0aW5nCisgICAgICAgIG9wZXJh
dGlvbnMgKGZvciBpbnN0YW5jZSwgZGVsZXRpbmcgYSBsaW5lIGJyZWFrKSB0aGF0IGludm9sdmUg
c2VyaWFsaXppbmcgYW5kIHRoZW4gZGVzZXJpYWxpemluZyBtYXJrdXAgaW50bworICAgICAgICBE
b2N1bWVudEZyYWdtZW50cyB0byB0aGVuIGluc2VydC4KKwogMjAxNy0xMS0xMCAgSmVyIE5vYmxl
ICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBGYWlyUGxheSBTdHJlYW1p
bmcgYmFzZWQgQ0RNIGZvciBNb2Rlcm4gRU1FCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE2NzUzYjljZDIzM2EyNGE3
ODk1Yjg1NDg4ZWRjNjIzMGI1MDFkYTQuLmE1ODlmOGY1ZmM1NjM5YTFmZTBmODZkYWU0NmJiYWUx
NWRlZmY5ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTctMTEtMTEgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0F0dGFjaG1lbnQgU3Vw
cG9ydF0gSW1wbGVtZW50IFNQSSBmb3IgY2xpZW50cyB0byByZXF1ZXN0IGRhdGEgZm9yIGEgZ2l2
ZW4gYXR0YWNobWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc5NTg2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTM1NTcyMD4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHN1cHBvcnQgaW4g
V2ViS2l0IGZvciBmZXRjaGluZyBkYXRhIGZvciBhIGdpdmVuIGF0dGFjaG1lbnQgZWxlbWVudC4g
U2VlIFdlYkNvcmUvQ2hhbmdlTG9nIGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIE1vc3Qgb2Yg
dGhlIGNoYW5nZXMgaGVyZSBhcmUgYm9pbGVycGxhdGUgcGx1bWJpbmcgb2YgLXJlcXVlc3RBdHRh
Y2htZW50RGF0YSB0aHJvdWdoIHRoZSBjbGllbnQgbGF5ZXJzLgorCisgICAgICAgIFRlc3QgY292
ZXJhZ2UgYnkgYXVnbWVudGluZyBleGlzdGluZyBBUEkgdGVzdHMgaW4gV0tBdHRhY2htZW50VGVz
dHMsIGFuZCBhZGRpbmcgMiBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQ
SUF0dGFjaG1lbnQuY3BwOgorICAgICAgICAoQVBJOjpBdHRhY2htZW50OjpyZXF1ZXN0RGF0YSk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tBdHRhY2htZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tBdHRhY2htZW50Lm1tOgorICAgICAgICAoLVtfV0tBdHRhY2htZW50IHJlcXVl
c3REYXRhOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNoYXJlZEJ1ZmZlckNhbGxiYWNrKToKKworICAgICAg
ICBBZGQgYSBuZXcgSVBDIGNhbGxiYWNrIGhlbHBlciB0eXBlLCBTaGFyZWRCdWZmZXJDYWxsYmFj
ay4gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZyBEYXRhQ2FsbGJhY2ssIGJ1dAorICAg
ICAgICBpbnN0ZWFkIG9mIGRlc2VyaWFsaXppbmcgdG8gYW4gQVBJOjpEYXRhLCB3ZSBjb252ZXJ0
IHRvIGEgU2hhcmVkQnVmZmVyIGluc3RlYWQuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpkYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omluc2Vy
dEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlcXVlc3RBdHRh
Y2htZW50RGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1
ZXN0QXR0YWNobWVudERhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisK
IDIwMTctMTEtMTAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBb
U2VydmljZSBXb3JrZXJzXSBJbXBsZW1lbnQgIlRyeSBBY3RpdmF0ZSIgLyAiQWN0aXZhdGUiIGFs
Z29yaXRobXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDgyMDVhMjQ3MTBmMDNmNTAzODkw
ZWI2YjYzMGI5ZWI3NDJiZGQ5MzIuLjQzODcxNjg5M2QyZDI5YWNjMDEwNmJkYjE1NDlkMjgxMGIx
YTYzMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1
ZGUgIkdlbmVyaWNDYWNoZWRIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxBbGxDb2xs
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
QXR0YWNobWVudEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQmFzZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MQm9keUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgpA
QCAtNzQ4MCw2ICs3NDgxLDQzIEBAIFZlY3RvcjxSZWZQdHI8V2ViQW5pbWF0aW9uPj4gRG9jdW1l
bnQ6OmdldEFuaW1hdGlvbnMoKQogICAgIHJldHVybiBhbmltYXRpb25zOwogfQogCisjaWYgRU5B
QkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKwordm9pZCBEb2N1bWVudDo6ZGlkSW5zZXJ0QXR0YWNo
bWVudEVsZW1lbnQoSFRNTEF0dGFjaG1lbnRFbGVtZW50JiBhdHRhY2htZW50KQoreworICAgIGF1
dG8gaWRlbnRpZmllciA9IGF0dGFjaG1lbnQudW5pcXVlSWRlbnRpZmllcigpOworICAgIGlmICgh
aWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hdHRhY2htZW50SWRlbnRpZmll
clRvRWxlbWVudE1hcC5zZXQoaWRlbnRpZmllciwgbWFrZVJlZihhdHRhY2htZW50KSk7CisKKyAg
ICBpZiAoZnJhbWUoKSkKKyAgICAgICAgZnJhbWUoKS0+ZWRpdG9yKCkuZGlkSW5zZXJ0QXR0YWNo
bWVudEVsZW1lbnQoYXR0YWNobWVudCk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZUF0
dGFjaG1lbnRFbGVtZW50KEhUTUxBdHRhY2htZW50RWxlbWVudCYgYXR0YWNobWVudCkKK3sKKyAg
ICBhdXRvIGlkZW50aWZpZXIgPSBhdHRhY2htZW50LnVuaXF1ZUlkZW50aWZpZXIoKTsKKyAgICBp
ZiAoIWlkZW50aWZpZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYXR0YWNobWVudElkZW50
aWZpZXJUb0VsZW1lbnRNYXAucmVtb3ZlKGlkZW50aWZpZXIpOworCisgICAgaWYgKGZyYW1lKCkp
CisgICAgICAgIGZyYW1lKCktPmVkaXRvcigpLmRpZFJlbW92ZUF0dGFjaG1lbnRFbGVtZW50KGF0
dGFjaG1lbnQpOworfQorCitSZWZQdHI8SFRNTEF0dGFjaG1lbnRFbGVtZW50PiBEb2N1bWVudDo6
YXR0YWNobWVudEZvcklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKSBjb25zdAor
eworICAgIGF1dG8gaXRlciA9IG1fYXR0YWNobWVudElkZW50aWZpZXJUb0VsZW1lbnRNYXAuZmlu
ZChpZGVudGlmaWVyKTsKKyAgICBpZiAoaXRlciA9PSBtX2F0dGFjaG1lbnRJZGVudGlmaWVyVG9F
bGVtZW50TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBp
dGVyLT52YWx1ZS5jb3B5UmVmKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQVRUQUNITUVOVF9F
TEVNRU5UKQorCiBzdGF0aWMgTWVzc2FnZVNvdXJjZSBtZXNzYWdlU291cmNlRm9yV1RGTG9nQ2hh
bm5lbChjb25zdCBXVEZMb2dDaGFubmVsJiBjaGFubmVsKQogewogICAgIHN0YXRpYyBjb25zdCBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IG1lZGlhQ2hhbm5lbCA9IE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJtZWRpYSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAyYTg2YjdmMDNmOWQyODc0NjIx
NzdiOWZkMTZiZTdlOTg0NmVlMWQ4Li5jM2FlMDlmMGEwZDZkZjk3ZThjNzNlNjkzOTE2YzcxYmRi
ZGZiOGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEZv
cm1Db250cm9sbGVyOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBIVE1M
QWxsQ29sbGVjdGlvbjsKK2NsYXNzIEhUTUxBdHRhY2htZW50RWxlbWVudDsKIGNsYXNzIEhUTUxC
b2R5RWxlbWVudDsKIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OwogY2xhc3MgSFRNTENvbGxlY3Rp
b247CkBAIC0xMzc1LDYgKzEzNzYsMTIgQEAgcHVibGljOgogICAgIERvY3VtZW50VGltZWxpbmUm
IHRpbWVsaW5lKCk7CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJBbmltYXRpb24+PiBnZXRBbmltYXRp
b25zKCk7CiAgICAgICAgIAorI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCisgICAgdm9p
ZCBkaWRJbnNlcnRBdHRhY2htZW50RWxlbWVudChIVE1MQXR0YWNobWVudEVsZW1lbnQmKTsKKyAg
ICB2b2lkIGRpZFJlbW92ZUF0dGFjaG1lbnRFbGVtZW50KEhUTUxBdHRhY2htZW50RWxlbWVudCYp
OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxIVE1MQXR0YWNobWVudEVsZW1lbnQ+IGF0dGFj
aG1lbnRGb3JJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikgY29uc3Q7CisjZW5k
aWYKKwogcHJvdGVjdGVkOgogICAgIGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXpl
ZCA9IDEsIE5vblJlbmRlcmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChG
cmFtZSosIGNvbnN0IFVSTCYsIHVuc2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2ln
bmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CkBAIC0xNzIzLDYgKzE3MzAsMTAgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8SURCQ2xpZW50OjpJREJDb25uZWN0aW9uUHJveHk+IG1faWRiQ29ubmVj
dGlvblByb3h5OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWY8SFRNTEF0dGFjaG1lbnRFbGVtZW50Pj4gbV9hdHRhY2htZW50
SWRlbnRpZmllclRvRWxlbWVudE1hcDsKKyNlbmRpZgorCiAgICAgVGltZXIgbV9kaWRBc3NvY2lh
dGVGb3JtQ29udHJvbHNUaW1lcjsKICAgICBUaW1lciBtX2Nvb2tpZUNhY2hlRXhwaXJ5VGltZXI7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA5NWJhNDE4MGJmZDBkM2M1ZGQ0MTM0
OTM2YWE1ZDU5ZWUxMjg2ZjBhLi5hN2U1NTJmZTVhYWQ0NDgzNDQyY2JhYThkYjU0MjZkMTkzMDJm
YzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0zODAwLDcgKzM4MDAsNyBAQCB2
b2lkIEVkaXRvcjo6aW5zZXJ0QXR0YWNobWVudEZyb21GaWxlKGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBmaQogICAgIGF0dGFjaG1lbnQtPnNldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OnN1YnRpdGxlQXR0ciwgZmlsZVNpemVEZXNjcmlwdGlvbihmaWxlLT5zaXplKCkpKTsK
ICAgICBhdHRhY2htZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0eXBlQXR0ciwgY29udGVu
dFR5cGUpOwogICAgIGF0dGFjaG1lbnQtPnNldFVuaXF1ZUlkZW50aWZpZXIoaWRlbnRpZmllcik7
Ci0gICAgYXR0YWNobWVudC0+c2V0RmlsZShmaWxlLnB0cigpKTsKKyAgICBhdHRhY2htZW50LT5z
ZXRGaWxlKFdURk1vdmUoZmlsZSkpOwogCiAgICAgYXV0byBmcmFnbWVudFRvSW5zZXJ0ID0gZG9j
dW1lbnQoKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICAgZnJhZ21lbnRUb0luc2VydC0+
YXBwZW5kQ2hpbGQoYXR0YWNobWVudC5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9XZWJDb250ZW50UmVhZGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvV2ViQ29udGVudFJlYWRlck1hYy5tbQppbmRleCBkM2Q3YjdkNGZhMTQxMmRlOWI2
ZmM3ZDUwOWMyM2Y3MGVlZTA1YmU3Li5hNzk4YTE5YzQ3OWU3MzEwNGFkNGEwNGExZWE1NGVhYmIx
Mzk3ZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9XZWJDb250ZW50
UmVhZGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL1dlYkNvbnRlbnRS
ZWFkZXJNYWMubW0KQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFk
RmlsZW5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKICNpZiBFTkFCTEUoQVRUQUNI
TUVOVF9FTEVNRU5UKQogICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS5hdHRhY2htZW50RWxlbWVudEVuYWJsZWQoKSkgewogICAgICAgICAgICAgYXV0
byBhdHRhY2htZW50ID0gSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjph
dHRhY2htZW50VGFnLCBkb2N1bWVudCk7Ci0gICAgICAgICAgICBhdHRhY2htZW50LT5zZXRGaWxl
KEZpbGU6OmNyZWF0ZShbW05TVVJMIGZpbGVVUkxXaXRoUGF0aDp0ZXh0XSBwYXRoXSkucHRyKCkp
OworICAgICAgICAgICAgYXR0YWNobWVudC0+c2V0RmlsZShGaWxlOjpjcmVhdGUoW1tOU1VSTCBm
aWxlVVJMV2l0aFBhdGg6dGV4dF0gcGF0aF0pKTsKICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBl
bmRDaGlsZChhdHRhY2htZW50KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggNmIwNDk2NTE1NjllYjRmZDBmMDI5NmVlNWE0
OTVlNGQ2NmUwOGEyYS4uM2NmNDBlZDc4YzVhODgyNjNjNjU1Yjc0MDI2NTJkNDdmODIyN2UxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNzYzLDcgKzc2MywxMSBAQCBSZWY8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50JiBkb2N1bWVu
dCwgY29uc3QgU3RyaW5nJgogICAgICAgICBhdHRhY2htZW50cy5hcHBlbmQoYXR0YWNobWVudCk7
CiAKICAgICBmb3IgKGF1dG8mIGF0dGFjaG1lbnQgOiBhdHRhY2htZW50cykgewotICAgICAgICBh
dHRhY2htZW50LT5zZXRGaWxlKEZpbGU6OmNyZWF0ZShhdHRhY2htZW50LT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKHdlYmtpdGF0dGFjaG1lbnRwYXRoQXR0cikpLnB0cigpKTsKKyAg
ICAgICAgYXV0byBhdHRhY2htZW50UGF0aCA9IGF0dGFjaG1lbnQtPmF0dGFjaG1lbnRQYXRoKCk7
CisgICAgICAgIGlmIChhdHRhY2htZW50UGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAgICBhdHRh
Y2htZW50LT5zZXRGaWxlKEZpbGU6OmRlc2VyaWFsaXplKHsgfSwgYXR0YWNobWVudC0+YmxvYlVS
TCgpLCBhdHRhY2htZW50LT5hdHRhY2htZW50VHlwZSgpLCBhdHRhY2htZW50LT5hdHRhY2htZW50
VGl0bGUoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhdHRhY2htZW50LT5zZXRGaWxl
KEZpbGU6OmNyZWF0ZShhdHRhY2htZW50UGF0aCkpOwogICAgICAgICBhdHRhY2htZW50LT5yZW1v
dmVBdHRyaWJ1dGUod2Via2l0YXR0YWNobWVudHBhdGhBdHRyKTsKICAgICB9CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcAppbmRleCBkMTM2
YjQ4OGU0N2E0NmFiMjljZmJhOTc3OWJlNWE5MGIxYTdiN2I5Li43OWU4NzBmNTY0OWUwY2YxYWMx
MDUzMmVjNTljMjQwMWFlMDlmNWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBdHRhY2htZW50RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0
YWNobWVudEVsZW1lbnQuY3BwCkBAIC0zMCwyMSArMzAsNTcgQEAKIAogI2luY2x1ZGUgIkVkaXRv
ci5oIgogI2luY2x1ZGUgIkZpbGUuaCIKKyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVyLmgiCisj
aW5jbHVkZSAiRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXR0YWNobWVudC5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKK2NsYXNzIEF0dGFjaG1lbnREYXRhUmVhZGVyIDogcHVibGlj
IEZpbGVSZWFkZXJMb2FkZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8QXR0YWNobWVudERhdGFSZWFkZXI+IGNyZWF0ZShIVE1MQXR0YWNobWVudEVsZW1lbnQm
IGF0dGFjaG1lbnQsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pPiYmIGNhbGxi
YWNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QXR0YWNobWVudERh
dGFSZWFkZXI+KGF0dGFjaG1lbnQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICB9CisKKyAgICBB
dHRhY2htZW50RGF0YVJlYWRlcihIVE1MQXR0YWNobWVudEVsZW1lbnQmIGF0dGFjaG1lbnQsIEZ1
bmN0aW9uPHZvaWQoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pPiYmIGNhbGxiYWNrKQorICAgICAgICA6
IG1fYXR0YWNobWVudChhdHRhY2htZW50KQorICAgICAgICAsIG1fY2FsbGJhY2soc3RkOjptYWtl
X3VuaXF1ZTxGdW5jdGlvbjx2b2lkKFJlZlB0cjxTaGFyZWRCdWZmZXI+KT4+KFdURk1vdmUoY2Fs
bGJhY2spKSkKKyAgICAgICAgLCBtX2xvYWRlcihzdGQ6Om1ha2VfdW5pcXVlPEZpbGVSZWFkZXJM
b2FkZXI+KEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRUeXBlOjpSZWFkQXNBcnJheUJ1ZmZlciwgc3Rh
dGljX2Nhc3Q8RmlsZVJlYWRlckxvYWRlckNsaWVudCo+KHRoaXMpKSkKKyAgICB7CisgICAgICAg
IG1fbG9hZGVyLT5zdGFydCgmYXR0YWNobWVudC5kb2N1bWVudCgpLCAqYXR0YWNobWVudC5maWxl
KCkpOworICAgIH0KKworICAgIH5BdHRhY2htZW50RGF0YVJlYWRlcigpOworCitwcml2YXRlOgor
ICAgIHZvaWQgZGlkU3RhcnRMb2FkaW5nKCkgZmluYWwgeyB9CisgICAgdm9pZCBkaWRSZWNlaXZl
RGF0YSgpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygpIGZpbmFsOworICAg
IHZvaWQgZGlkRmFpbChpbnQgZXJyb3IpIGZpbmFsOworCisgICAgdm9pZCBpbnZva2VDYWxsYmFj
a0FuZEZpbmlzaFJlYWRpbmcoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJik7CisKKyAgICBIVE1MQXR0
YWNobWVudEVsZW1lbnQmIG1fYXR0YWNobWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rp
b248dm9pZChSZWZQdHI8U2hhcmVkQnVmZmVyPik+PiBtX2NhbGxiYWNrOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxGaWxlUmVhZGVyTG9hZGVyPiBtX2xvYWRlcjsKK307CisKIEhUTUxBdHRhY2htZW50
RWxlbWVudDo6SFRNTEF0dGFjaG1lbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGF0dGFjaG1lbnRUYWcpKTsKIH0KIAotSFRN
TEF0dGFjaG1lbnRFbGVtZW50Ojp+SFRNTEF0dGFjaG1lbnRFbGVtZW50KCkgPSBkZWZhdWx0Owor
SFRNTEF0dGFjaG1lbnRFbGVtZW50Ojp+SFRNTEF0dGFjaG1lbnRFbGVtZW50KCkKK3sKKyAgICBt
X2F0dGFjaG1lbnRSZWFkZXJzLmNsZWFyKCk7Cit9CiAKIFJlZjxIVE1MQXR0YWNobWVudEVsZW1l
bnQ+IEhUTUxBdHRhY2htZW50RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKQEAgLTYxLDkgKzk3LDE2IEBAIEZpbGUqIEhU
TUxBdHRhY2htZW50RWxlbWVudDo6ZmlsZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZmlsZS5nZXQo
KTsKIH0KIAotdm9pZCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OnNldEZpbGUoRmlsZSogZmlsZSkK
K1VSTCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OmJsb2JVUkwoKSBjb25zdAogewotICAgIG1fZmls
ZSA9IGZpbGU7CisgICAgcmV0dXJuIHsgeyB9LCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKEhUTUxOYW1lczo6d2Via2l0YXR0YWNobWVudGJsb2J1cmxBdHRyKS5zdHJpbmcoKSB9Owor
fQorCit2b2lkIEhUTUxBdHRhY2htZW50RWxlbWVudDo6c2V0RmlsZShSZWZQdHI8RmlsZT4mJiBm
aWxlKQoreworICAgIG1fZmlsZSA9IFdURk1vdmUoZmlsZSk7CisKKyAgICBzZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6d2Via2l0YXR0YWNobWVudGJsb2J1cmxB
dHRyLCBtX2ZpbGUgPyBtX2ZpbGUtPnVybCgpIDogZW1wdHlTdHJpbmcoKSk7CiAKICAgICBpZiAo
YXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlci0+aW52
YWxpZGF0ZSgpOwpAQCAtNzIsMjAgKzExNSwxNiBAQCB2b2lkIEhUTUxBdHRhY2htZW50RWxlbWVu
dDo6c2V0RmlsZShGaWxlKiBmaWxlKQogTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQg
SFRNTEF0dGFjaG1lbnRFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpb25UeXBl
IHR5cGUsIENvbnRhaW5lck5vZGUmIGFuY2VzdG9yKQogewogICAgIGF1dG8gcmVzdWx0ID0gSFRN
TEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKHR5cGUsIGFuY2VzdG9yKTsKLSAgICBpZiAo
YXV0byogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKHR5cGUuY29u
bmVjdGVkVG9Eb2N1bWVudCkKLSAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS5kaWRJbnNlcnRB
dHRhY2htZW50RWxlbWVudCgqdGhpcyk7Ci0gICAgfQorICAgIGlmICh0eXBlLmNvbm5lY3RlZFRv
RG9jdW1lbnQpCisgICAgICAgIGRvY3VtZW50KCkuZGlkSW5zZXJ0QXR0YWNobWVudEVsZW1lbnQo
KnRoaXMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgSFRNTEF0dGFjaG1lbnRFbGVt
ZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlIHR5cGUsIENvbnRhaW5lck5vZGUm
IGFuY2VzdG9yKQogewogICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKHR5cGUs
IGFuY2VzdG9yKTsKLSAgICBpZiAoYXV0byogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpIHsK
LSAgICAgICAgaWYgKHR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQotICAgICAgICAgICAg
ZnJhbWUtPmVkaXRvcigpLmRpZFJlbW92ZUF0dGFjaG1lbnRFbGVtZW50KCp0aGlzKTsKLSAgICB9
CisgICAgaWYgKHR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KQorICAgICAgICBkb2N1bWVu
dCgpLmRpZFJlbW92ZUF0dGFjaG1lbnRFbGVtZW50KCp0aGlzKTsKIH0KIAogdm9pZCBIVE1MQXR0
YWNobWVudEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC0xMjEsNiArMTYwLDU2IEBAIFN0cmluZyBI
VE1MQXR0YWNobWVudEVsZW1lbnQ6OmF0dGFjaG1lbnRUeXBlKCkgY29uc3QKICAgICByZXR1cm4g
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih0eXBlQXR0cik7CiB9CiAKK1N0cmluZyBI
VE1MQXR0YWNobWVudEVsZW1lbnQ6OmF0dGFjaG1lbnRQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih3ZWJraXRhdHRhY2htZW50cGF0aEF0
dHIpOworfQorCit2b2lkIEhUTUxBdHRhY2htZW50RWxlbWVudDo6cmVxdWVzdERhdGEoRnVuY3Rp
b248dm9pZChSZWZQdHI8U2hhcmVkQnVmZmVyPik+JiYgY2FsbGJhY2spCit7CisgICAgaWYgKG1f
ZmlsZSkKKyAgICAgICAgbV9hdHRhY2htZW50UmVhZGVycy5hcHBlbmQoQXR0YWNobWVudERhdGFS
ZWFkZXI6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShjYWxsYmFjaykpKTsKKyAgICBlbHNlCisgICAg
ICAgIGNhbGxiYWNrKG51bGxwdHIpOworfQorCit2b2lkIEhUTUxBdHRhY2htZW50RWxlbWVudDo6
ZGVzdHJveVJlYWRlcihBdHRhY2htZW50RGF0YVJlYWRlciYgZmluaXNoZWRSZWFkZXIpCit7Cisg
ICAgbV9hdHRhY2htZW50UmVhZGVycy5yZW1vdmVGaXJzdE1hdGNoaW5nKFsmXSAoY29uc3Qgc3Rk
Ojp1bmlxdWVfcHRyPEF0dGFjaG1lbnREYXRhUmVhZGVyPiYgcmVhZGVyKSAtPiBib29sIHsKKyAg
ICAgICAgcmV0dXJuIHJlYWRlci5nZXQoKSA9PSAmZmluaXNoZWRSZWFkZXI7CisgICAgfSk7Cit9
CisKK0F0dGFjaG1lbnREYXRhUmVhZGVyOjp+QXR0YWNobWVudERhdGFSZWFkZXIoKQoreworICAg
IGludm9rZUNhbGxiYWNrQW5kRmluaXNoUmVhZGluZyhudWxscHRyKTsKK30KKwordm9pZCBBdHRh
Y2htZW50RGF0YVJlYWRlcjo6ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgaWYgKGF1dG8gYXJy
YXlCdWZmZXIgPSBtX2xvYWRlci0+YXJyYXlCdWZmZXJSZXN1bHQoKSkKKyAgICAgICAgaW52b2tl
Q2FsbGJhY2tBbmRGaW5pc2hSZWFkaW5nKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpKSk7CisgICAgZWxzZQorICAgICAgICBpbnZva2VDYWxsYmFja0FuZEZpbmlzaFJlYWRp
bmcobnVsbHB0cik7Cit9CisKK3ZvaWQgQXR0YWNobWVudERhdGFSZWFkZXI6OmRpZEZhaWwoaW50
KQoreworICAgIGludm9rZUNhbGxiYWNrQW5kRmluaXNoUmVhZGluZyhudWxscHRyKTsKK30KKwor
dm9pZCBBdHRhY2htZW50RGF0YVJlYWRlcjo6aW52b2tlQ2FsbGJhY2tBbmRGaW5pc2hSZWFkaW5n
KFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgZGF0YSkKK3sKKyAgICBhdXRvIGNhbGxiYWNrID0gV1RG
TW92ZShtX2NhbGxiYWNrKTsKKyAgICBpZiAoIWNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAgbV9sb2FkZXIgPSBudWxscHRyOworICAgICgq
Y2FsbGJhY2spKFdURk1vdmUoZGF0YSkpOworICAgIG1fYXR0YWNobWVudC5kZXN0cm95UmVhZGVy
KCp0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KEFUVEFDSE1FTlRfRUxFTUVOVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEF0dGFjaG1lbnRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50
RWxlbWVudC5oCmluZGV4IGJkOWM1NjQ4N2JhNjJlYzNlOTQ5ZTI0NjFhOWRiNDFkMDQ0MTU1YjYu
LjMzY2M0MWVjN2ZjNjJlYzY5OGNmZmY5YThlOTBjZTY1ZDZlNWRlMmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuaApAQCAtMzEsMTUgKzMxLDE4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXR0YWNobWVudERhdGFSZWFkZXI7CiBjbGFz
cyBGaWxlOwogY2xhc3MgUmVuZGVyQXR0YWNobWVudDsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKIAog
Y2xhc3MgSFRNTEF0dGFjaG1lbnRFbGVtZW50IGZpbmFsIDogcHVibGljIEhUTUxFbGVtZW50IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEhUTUxBdHRhY2htZW50RWxlbWVudD4gY3JlYXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgVVJM
IGJsb2JVUkwoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBGaWxlKiBmaWxlKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRGaWxlKEZpbGUqKTsKKyAgICB2b2lkIHNldEZpbGUoUmVmUHRyPEZpbGU+
JiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIoKSBjb25z
dDsKICAgICB2b2lkIHNldFVuaXF1ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CkBAIC00OSw5
ICs1MiwxMyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgYXR0YWNobWVu
dFRpdGxlKCkgY29uc3Q7CiAgICAgU3RyaW5nIGF0dGFjaG1lbnRUeXBlKCkgY29uc3Q7CisgICAg
U3RyaW5nIGF0dGFjaG1lbnRQYXRoKCkgY29uc3Q7CiAKICAgICBSZW5kZXJBdHRhY2htZW50KiBy
ZW5kZXJlcigpIGNvbnN0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXF1ZXN0RGF0YShG
dW5jdGlvbjx2b2lkKFJlZlB0cjxTaGFyZWRCdWZmZXI+KT4mJiBjYWxsYmFjayk7CisgICAgdm9p
ZCBkZXN0cm95UmVhZGVyKEF0dGFjaG1lbnREYXRhUmVhZGVyJik7CisKIHByaXZhdGU6CiAgICAg
SFRNTEF0dGFjaG1lbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwog
ICAgIHZpcnR1YWwgfkhUTUxBdHRhY2htZW50RWxlbWVudCgpOwpAQCAtNjksNiArNzYsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNv
bnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwogICAgIAogICAgIFJlZlB0cjxGaWxlPiBtX2ZpbGU7
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBdHRhY2htZW50RGF0YVJlYWRlcj4+IG1fYXR0
YWNobWVudFJlYWRlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbiBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCmluZGV4IGI2ZjA0MzM5NTQyMGYwOTY5MDRl
NzU1Y2IwMTFmYTU3ZmFjZTAyN2QuLjdhMWI1ZTEwMTQ1ZTY0NzZiOGQ5MjEwOTRmYTAwMGQ2OWQ3
MDIyMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVz
LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCkBAIC0z
ODMsNiArMzgzLDcgQEAgdnNwYWNlCiB3ZWJraXRhbGxvd2Z1bGxzY3JlZW4KIHdlYmtpdGF0dGFj
aG1lbnRpZAogd2Via2l0YXR0YWNobWVudHBhdGgKK3dlYmtpdGF0dGFjaG1lbnRibG9idXJsCiB3
ZWJraXRkaXJlY3RvcnkKIHdpZHRoCiB3cmFwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJQXR0YWNobWVudC5jcHAKaW5kZXggOTFlYzBiN2ViYzA0ZmM2NmQ4OGViMDU1ZjhkNWQ2
NjNmOGFlMmExNi4uMWQ0OWIwN2IyYjFiNTFlN2IyNzM1ZWQzZDE0NmQ0Yjc3NjlhMTRiNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmNwcApAQCAtMjYs
NiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFQSUF0dGFjaG1lbnQu
aCIKIAorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL0Js
b2NrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBB
UEkgewpAQCAtNDUsNCArNDcsMTIgQEAgQXR0YWNobWVudDo6fkF0dGFjaG1lbnQoKQogewogfQog
Cit2b2lkIEF0dGFjaG1lbnQ6OnJlcXVlc3REYXRhKEZ1bmN0aW9uPHZvaWQoUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4sIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJh
Y2spCit7CisgICAgaWYgKG1fd2ViUGFnZSkKKyAgICAgICAgbV93ZWJQYWdlLT5yZXF1ZXN0QXR0
YWNobWVudERhdGEobV9pZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgZWxzZQor
ICAgICAgICBjYWxsYmFjayhudWxscHRyLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok93
bmVyV2FzSW52YWxpZGF0ZWQpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSUF0dGFjaG1lbnQuaAppbmRleCAyNDU1OTBlZmRlNzliMDlhMDdiNDA0ODJjMDcwZDlmMTYy
OGQ1ZDNhLi4xZWEwMDdkNmUwNzNiMTM0Y2I0ZDlhZTQ1NTY4MTlkOWM5NTgyMjQ0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmgKQEAgLTI4LDkgKzI4LDE0
IEBACiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgog
I2luY2x1ZGUgPFdlYktpdC9XZWJQYWdlUHJveHkuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2hhcmVkQnVmZmVyOworfQorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIH0KQEAgLTQzLDYgKzQ4LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgfkF0dGFjaG1lbnQoKTsKIAogICAgIGNvbnN0IFdURjo6U3Ry
aW5nJiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgdm9p
ZCByZXF1ZXN0RGF0YShGdW5jdGlvbjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
LCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKIAogcHJpdmF0ZToKICAgICBleHBs
aWNpdCBBdHRhY2htZW50KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXZWJLaXQ6Oldl
YlBhZ2VQcm94eSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS0F0dGFjaG1lbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tBdHRhY2htZW50LmgKaW5kZXggOTQwMzIzOTdlMDNmOTYwYTE5YzY5ZDRhN2QwMDZiZTc4ZGQy
YjZjMC4uNWYwZDUwZjYwNWViYjg4Y2UwNjZjMjNlNDEyY2RlNDY5MWQyZTI1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXR0YWNobWVudC5oCkBAIC0y
OSw2ICsyOSw4IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAogCit0eXBlZGVmIHZvaWQoXl9XS0F0
dGFjaG1lbnREYXRhQ29tcGxldGlvbkhhbmRsZXIpKE5TRGF0YSAqLCBOU0Vycm9yICopOworCiB0
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tBdHRhY2htZW50RGlzcGxheU1vZGUpIHsKICAg
ICBfV0tBdHRhY2htZW50RGlzcGxheU1vZGVBdXRvID0gMSwKICAgICBfV0tBdHRhY2htZW50RGlz
cGxheU1vZGVJblBsYWNlLApAQCAtNDMsNiArNDUsNyBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFj
b3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCiAKIFdLX0NMQVNTX0FWQUlMQUJMRSht
YWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKIEBpbnRlcmZhY2UgX1dLQXR0YWNo
bWVudCA6IE5TT2JqZWN0CistICh2b2lkKXJlcXVlc3REYXRhOihfV0tBdHRhY2htZW50RGF0YUNv
bXBsZXRpb25IYW5kbGVyKWNvbXBsZXRpb25IYW5kbGVyOwogQGVuZAogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdHRhY2htZW50Lm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQubW0KaW5k
ZXggZDFiMTQ2ZjE1NWYxZjBkMjQzMWFlNGVhNDgzY2FkYjA3ZTMwMDAyOS4uMGIwYzM2MmU3YzE5
ZTQ0MmMyOWRkNGMzMWJlN2Q5ZjA5ODA2YWY5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQubW0KQEAgLTI5LDcgKzI5LDEwIEBACiAj
aWYgV0tfQVBJX0VOQUJMRUQKIAogI2ltcG9ydCAiQVBJQXR0YWNobWVudC5oIgorI2ltcG9ydCAi
V0tFcnJvclByaXZhdGUuaCIKICNpbXBvcnQgIl9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oIgorI2lt
cG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCkBAIC01OCw2ICs2MSwxOSBAQCAtIChCT09MKWlz
RXF1YWw6KGlkKW9iamVjdAogICAgIHJldHVybiBbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W19XS0F0
dGFjaG1lbnQgY2xhc3NdXSAmJiBbc2VsZi51bmlxdWVJZGVudGlmaWVyIGlzRXF1YWw6WyhfV0tB
dHRhY2htZW50ICopb2JqZWN0IHVuaXF1ZUlkZW50aWZpZXJdXTsKIH0KIAorLSAodm9pZClyZXF1
ZXN0RGF0YTooX1dLQXR0YWNobWVudERhdGFDb21wbGV0aW9uSGFuZGxlciljb21wbGV0aW9uSGFu
ZGxlcgoreworICAgIF9hdHRhY2htZW50LT5yZXF1ZXN0RGF0YShbIGNhcHR1cmVkQmxvY2sgPSBt
YWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpIF0gKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+IGJ1ZmZlciwgQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICBpZiAo
IWNhcHR1cmVkQmxvY2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGJ1ZmZl
ciAmJiBidWZmZXItPnNpemUoKSAmJiBlcnJvciA9PSBDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25l
KQorICAgICAgICAgICAgY2FwdHVyZWRCbG9jayhidWZmZXItPmNyZWF0ZU5TRGF0YSgpLmF1dG9y
ZWxlYXNlKCksIG5pbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhcHR1cmVkQmxvY2so
bmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOjEgdXNlcklu
Zm86bmlsXSk7CisgICAgfSk7Cit9CisKIC0gKE5TU3RyaW5nICopdW5pcXVlSWRlbnRpZmllcgog
ewogICAgIHJldHVybiBfYXR0YWNobWVudC0+aWRlbnRpZmllcigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggNWNjM2ZmNzVkNWZkZDA4ZmJmMmYzNDE2MGQw
Y2QwMTk1YzJlNzMzNi4uN2Y4ZjEwZGMyY2I3OGYxNDRhOTQ3YzRlZWQwYTY4YjJlNDA5ZWNiMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xMjksNiArMTI5
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1B1YmxpY1N1ZmZpeC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyRW1iZWRkZWRPYmplY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6ZWRD
cnlwdG9LZXlXcmFwLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0
SW5kaWNhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KQEAgLTUxNjEsMTQgKzUxNjIs
MjMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnZvaWRDYWxsYmFjayhDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCiAgICAgY2FsbGJhY2stPnBlcmZvcm1DYWxsYmFjaygpOwogfQogCi12b2lkIFdlYlBhZ2VQ
cm94eTo6ZGF0YUNhbGxiYWNrKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVyZW5j
ZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdlUHJveHk6OnNoYXJlZEJ1ZmZl
ckNhbGxiYWNrKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVyZW5jZSwgQ2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQogewotICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtl
PERhdGFDYWxsYmFjaz4oY2FsbGJhY2tJRCk7CisgICAgYXV0byBjYWxsYmFjayA9IG1fY2FsbGJh
Y2tzLnRha2U8U2hhcmVkQnVmZmVyQ2FsbGJhY2s+KGNhbGxiYWNrSUQpOwogICAgIGlmICghY2Fs
bGJhY2spIHsKLSAgICAgICAgLy8gRklYTUU6IExvZyBlcnJvciBvciBhc3NlcnQuCisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY2Fs
bGJhY2stPnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShTaGFyZWRCdWZmZXI6OmNyZWF0
ZShkYXRhUmVmZXJlbmNlLmRhdGEoKSwgZGF0YVJlZmVyZW5jZS5zaXplKCkpKTsKK30KKwordm9p
ZCBXZWJQYWdlUHJveHk6OmRhdGFDYWxsYmFjayhjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRh
dGFSZWZlcmVuY2UsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKK3sKKyAgICBhdXRvIGNhbGxiYWNr
ID0gbV9jYWxsYmFja3MudGFrZTxEYXRhQ2FsbGJhY2s+KGNhbGxiYWNrSUQpOworICAgIGlmICgh
Y2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKwogICAgIGNhbGxiYWNrLT5wZXJmb3JtQ2FsbGJh
Y2tXaXRoUmV0dXJuVmFsdWUoQVBJOjpEYXRhOjpjcmVhdGUoZGF0YVJlZmVyZW5jZS5kYXRhKCks
IGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKS5wdHIoKSk7CiB9CiAKQEAgLTcxMTUsMTAgKzcxMjUsMjYg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZy
YW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWUKIAogdm9pZCBXZWJQYWdlUHJveHk6Omluc2VydEF0
dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY29udGVudFR5cGUsIFNoYXJlZEJ1ZmZlciYgZGF0YSwg
RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFjaykKIHsKKyAgICBp
ZiAoIWlzVmFsaWQoKSkgeworICAgICAgICBjYWxsYmFjayhDYWxsYmFja0Jhc2U6OkVycm9yOjpP
d25lcldhc0ludmFsaWRhdGVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGF1dG8g
Y2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrKSwgbV9wcm9jZXNz
LT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbigpKTsKICAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydEF0dGFjaG1lbnQoaWRlbnRpZmllciwgZmls
ZW5hbWUsIGNvbnRlbnRUeXBlLCBJUEM6OlNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVuY2UgeyAmZGF0
YSB9LCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVx
dWVzdEF0dGFjaG1lbnREYXRhKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9p
ZChSZWZQdHI8U2hhcmVkQnVmZmVyPiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2sp
Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgY2FsbGJhY2sobnVsbHB0ciwgQ2Fs
bGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShj
YWxsYmFjayksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4o
KSk7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXF1ZXN0QXR0YWNo
bWVudERhdGEoaWRlbnRpZmllciwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKK30KKwogdm9pZCBX
ZWJQYWdlUHJveHk6OmRpZEluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
KQogewogICAgIG1fcGFnZUNsaWVudC5kaWRJbnNlcnRBdHRhY2htZW50KGlkZW50aWZpZXIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAzZTY4MjM2ZDJmODY5MjVi
NmZmYTJmZmU4ZmJiODQwOTYwNWI1MDAzLi4wMWZjMmUxZDE4YjE2NTgwYTJlYWI1ODI0NmUzY2Ux
M2NkMGIyY2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMjM2
LDYgKzIzNiw3IEBAIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPHVpbnQ2NF90PiBVbnNpZ25lZENh
bGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8RWRpdGluZ1JhbmdlPiBFZGl0aW5nUmFu
Z2VDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFN0cmluZyY+IFN0cmlu
Z0NhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWUqLCBib29sLCBjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzJj4gU2NyaXB0VmFs
dWVDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPFJlZlB0cjxXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI+PiBTaGFyZWRCdWZmZXJDYWxsYmFjazsKIAogI2lmIFBMQVRGT1JNKEdUSykKIHR5
cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6RXJyb3IqPiBQcmludEZpbmlzaGVkQ2FsbGJhY2s7
CkBAIC0xMjEzLDYgKzEyMTQsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9F
TEVNRU5UKQogICAgIHZvaWQgaW5zZXJ0QXR0YWNobWVudChjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjb250ZW50
VHlwZSwgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhLCBGdW5jdGlvbjx2b2lkKENhbGxiYWNr
QmFzZTo6RXJyb3IpPiYmKTsKKyAgICB2b2lkIHJlcXVlc3RBdHRhY2htZW50RGF0YShjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4sIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAt
MTQ2Niw2ICsxNDY4LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdm9pZENhbGxiYWNrKENhbGxi
YWNrSUQpOwogICAgIHZvaWQgZGF0YUNhbGxiYWNrKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYs
IENhbGxiYWNrSUQpOworICAgIHZvaWQgc2hhcmVkQnVmZmVyQ2FsbGJhY2soY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJiwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBpbWFnZUNhbGxiYWNrKGNvbnN0
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBzdHJpbmdD
YWxsYmFjayhjb25zdCBTdHJpbmcmLCBDYWxsYmFja0lEKTsKICAgICB2b2lkIGludmFsaWRhdGVT
dHJpbmdDYWxsYmFjayhDYWxsYmFja0lEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCBmMWVmNWU1OGE0MzhhZjRhNGQ2MjkwOGI4
NTk2YTNhZDM3NmViNzE3Li44YTk0ZmVmMzdiZmVlMjFjNGVkMjZmNDdhYjk4NGM1NjM5OWYxMzA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCkBAIC0xNTcsNiArMTU3LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICAj
IENhbGxiYWNrIG1lc3NhZ2VzCiAgICAgVm9pZENhbGxiYWNrKFdlYktpdDo6Q2FsbGJhY2tJRCBj
YWxsYmFja0lEKQogICAgIERhdGFDYWxsYmFjayhJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdWx0RGF0
YSwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAgU2hhcmVkQnVmZmVyQ2FsbGJh
Y2soSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VsdERhdGEsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxs
YmFja0lEKTsKICAgICBJbWFnZUNhbGxiYWNrKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5k
bGUgYml0bWFwSGFuZGxlLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBTdHJp
bmdDYWxsYmFjayhTdHJpbmcgcmVzdWx0U3RyaW5nLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKICAgICBJbnZhbGlkYXRlU3RyaW5nQ2FsbGJhY2soV2ViS2l0OjpDYWxsYmFja0lEIGNh
bGxiYWNrSUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CmluZGV4IDk3MTFiOTBhZDQ2YTMwMjlhNjE2MGMwMTY5MDVhYmJiMTA3OGRjOTMuLmZiODZiNDA5
NDRhZDg2OTgxMjg5MmU3ZmUzZjRlZmM3NDg4ODUxMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0xNDEsMTEgKzE0MSwxMyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvRWxlbWVudEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FdmVudEhh
bmRsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZpbGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRm9ybVN0YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1
ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxBdHRhY2htZW50RWxl
bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9IVE1MSW1hZ2VFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSW5wdXRF
bGVtZW50Lmg+CkBAIC01Nzc0LDYgKzU3NzYsMjkgQEAgdm9pZCBXZWJQYWdlOjppbnNlcnRBdHRh
Y2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwK
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lE
KSk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6cmVxdWVzdEF0dGFjaG1lbnREYXRhKGNvbnN0IFN0cmlu
ZyYgaWRlbnRpZmllciwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQoreworICAgIC8vIEZJWE1FOiBX
ZSBkb24ndCBjdXJyZW50bHkgaGFuZGxlIGF0dGFjaG1lbnQgZGF0YSByZXF1ZXN0cyBmb3IgYXR0
YWNobWVudCBlbGVtZW50cyBpbiBzdWJmcmFtZXMuCisgICAgYXV0byogZnJhbWUgPSBtYWluRnJh
bWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNoYXJlZEJ1ZmZlckNhbGxiYWNrKHsgfSwgY2Fs
bGJhY2tJRCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBhdHRhY2htZW50
ID0gZnJhbWUtPmRvY3VtZW50KCktPmF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIp
OworICAgIGlmICghYXR0YWNobWVudCkgeworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlNoYXJlZEJ1ZmZlckNhbGxiYWNrKHsgfSwgY2FsbGJhY2tJRCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYXR0YWNobWVudC0+cmVxdWVzdERhdGEoW2NhbGxiYWNrSUQs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvdGVjdGVkQXR0YWNobWVudCA9IFdU
Rk1vdmUoYXR0YWNobWVudCldIChSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpIHsKKyAgICAg
ICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPnNpemUoKSkKKyAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hhcmVkQnVmZmVyQ2FsbGJhY2soSVBD
OjpTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlIHsgYnVmZmVyLmdldCgpIH0sIGNhbGxiYWNrSUQp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpTaGFyZWRCdWZmZXJDYWxsYmFjayh7IH0sIGNhbGxiYWNrSUQpKTsK
KyAgICB9KTsKK30KKwogI2VuZGlmIC8vIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCmluZGV4IDFkODRkNGRiODRhZmZhZDI2NjQ1MDhkMWE1Y2VlZGIzNDk1MTUzY2YuLmJi
N2ZmZmQyOThiZWJhNzIwODQ5YjhmOWQ1YmZkMmNmOWE4NWY0ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTEwMDEsNiArMTAwMSw3IEBAIHB1Ymxp
YzoKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgdm9pZCBpbnNlcnRBdHRh
Y2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
c3RkOjpvcHRpb25hbDxTdHJpbmc+IGNvbnRlbnRUeXBlLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmLCBDYWxsYmFja0lEKTsKKyAgICB2b2lkIHJlcXVlc3RBdHRhY2htZW50RGF0YShjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIsIENhbGxiYWNrSUQpOwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgppbmRleCAxYjI4ZDFhNmZhMmE2YmUwMTE4NmE0NzQyM2NiZDQ3NzJjZmE5MzE5Li42ZDdiNmVk
NjI2MzU5NmU4NjlmM2E0YTdlYzQ0OTcxNTM2Y2E4NzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTQ4Nyw1ICs0
ODcsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKIAogI2lmIEVOQUJM
RShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgSW5zZXJ0QXR0YWNobWVudChTdHJpbmcgaWRlbnRp
ZmllciwgU3RyaW5nIGZpbGVuYW1lLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY29udGVudFR5cGUs
IElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
KyAgICBSZXF1ZXN0QXR0YWNobWVudERhdGEoU3RyaW5nIGlkZW50aWZpZXIsIFdlYktpdDo6Q2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmEyOTE1MTIxNTA3ZmRjZWEwYTFmZTdkZGFiMThi
ZDA1Y2RhOTI1Yy4uZDM4NGRkM2Y0NmRjNDI2ZDkzMzU2M2I0MjlhNzY0NTEzNjliODY4OCAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIyIEBACisyMDE3LTExLTExICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgorCisgICAgICAgIFtBdHRhY2htZW50IFN1cHBvcnRdIEltcGxlbWVudCBTUEkgZm9yIGNsaWVu
dHMgdG8gcmVxdWVzdCBkYXRhIGZvciBhIGdpdmVuIGF0dGFjaG1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTU4NgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzUzNTU3MjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQXVnbWVudHMgZXhpc3RpbmcgQVBJIHRlc3RzIGluIFdLQXR0YWNobWVudFRl
c3RzIHRvIGFkZGl0aW9uYWxseSBjaGVjayB0aGF0IC1yZXF1ZXN0RGF0YSB5aWVsZHMgdGhlIGNv
cnJlY3QKKyAgICAgICAgcmVzdWx0IHdoZW4gcGVyZm9ybWluZyB2YXJpb3VzIGVkaXRpbmcgb3Bl
cmF0aW9ucy4gQWxzbyBhZGRzIGEgbmV3IEFQSSB0ZXN0IHRoYXQgY3V0cyBhbmQgcGFzdGVzIGFu
IGF0dGFjaG1lbnQKKyAgICAgICAgaW5zZXJ0ZWQgdXNpbmcgV0tXZWJWaWV3IGF0dGFjaG1lbnQg
U1BJLCBhbmQgZXhwZWN0cyB0aGF0IHRoZSBkYXRhIG9mIHRoZSBhdHRhY2htZW50IGNhbiBzdGls
bCBiZSBmZXRjaGVkIHVzaW5nCisgICAgICAgIHRoZSBfV0tBdHRhY2htZW50IFNQSS4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMu
bW06CisgICAgICAgICgtW05TRGF0YSBzaG9ydERlc2NyaXB0aW9uXSk6CisgICAgICAgICgtW19X
S0F0dGFjaG1lbnQgc3luY2hyb25vdXNseVJlcXVlc3REYXRhOl0pOgorICAgICAgICAoLVtfV0tB
dHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOl0pOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisKIDIwMTctMTEtMTAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBh
cHBsZS5jb20+CiAKICAgICAgICAgRmluaXNoIHJvbGxpbmcgb3V0IHIyMjQ1NDQKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVz
dHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVu
dFRlc3RzLm1tCmluZGV4IGY0YmZlMTAzMDE1NTM5MzYyNTUwMGEyM2Q4MzExYjI4YjFiOTJmZWMu
LmYzNjdhY2MzM2M0MWI2NzE0OGY0NWM2ZTE2YzhhZmI4MzlmZWE5MDUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRU
ZXN0cy5tbQpAQCAtMTc3LDYgKzE3Nyw1MCBAQCAtICh2b2lkKWV4cGVjdFVwZGF0ZXNBZnRlckNv
bW1hbmQ6KE5TU3RyaW5nICopY29tbWFuZCB3aXRoQXJndW1lbnQ6KE5TU3RyaW5nICopYQogCiBA
ZW5kCiAKK0BpbXBsZW1lbnRhdGlvbiBOU0RhdGEgKEF0dGFjaG1lbnRUZXN0aW5nKQorCistIChO
U1N0cmluZyAqKXNob3J0RGVzY3JpcHRpb24KK3sKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCI8JXR1IGJ5dGVzPiIsIHNlbGYubGVuZ3RoXTsKK30KKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gX1dLQXR0YWNobWVudCAoQXR0YWNobWVudFRlc3RpbmcpCisKKy0gKE5T
RGF0YSAqKXN5bmNocm9ub3VzbHlSZXF1ZXN0RGF0YTooTlNFcnJvciAqKillcnJvcgoreworICAg
IF9fYmxvY2sgUmV0YWluUHRyPE5TRGF0YT4gcmVzdWx0OworICAgIF9fYmxvY2sgUmV0YWluUHRy
PE5TRXJyb3I+IHJlc3VsdEVycm9yOworICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7Cisg
ICAgW3NlbGYgcmVxdWVzdERhdGE6XihOU0RhdGEgKmRhdGEsIE5TRXJyb3IgKmVycm9yKSB7Cisg
ICAgICAgIHJlc3VsdCA9IHJldGFpblB0cihkYXRhKTsKKyAgICAgICAgcmVzdWx0RXJyb3IgPSBy
ZXRhaW5QdHIoZXJyb3IpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBpZiAoZXJyb3IpCisgICAgICAg
ICplcnJvciA9IHJlc3VsdEVycm9yLmF1dG9yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gcmVzdWx0
LmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKHZvaWQpZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6KE5T
RGF0YSAqKWV4cGVjdGVkRGF0YQoreworICAgIE5TRXJyb3IgKmRhdGFSZXF1ZXN0RXJyb3IgPSBu
aWw7CisgICAgTlNEYXRhICpvYnNlcnZlZERhdGEgPSBbc2VsZiBzeW5jaHJvbm91c2x5UmVxdWVz
dERhdGE6JmRhdGFSZXF1ZXN0RXJyb3JdOworICAgIEJPT0wgb2JzZXJ2ZWREYXRhSXNFcXVhbFRv
RXhwZWN0ZWREYXRhID0gW29ic2VydmVkRGF0YSBpc0VxdWFsVG9EYXRhOmV4cGVjdGVkRGF0YV0g
fHwgb2JzZXJ2ZWREYXRhID09IGV4cGVjdGVkRGF0YTsKKyAgICBFWFBFQ1RfVFJVRShvYnNlcnZl
ZERhdGFJc0VxdWFsVG9FeHBlY3RlZERhdGEpOworICAgIGlmICghb2JzZXJ2ZWREYXRhSXNFcXVh
bFRvRXhwZWN0ZWREYXRhKSB7CisgICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQgZGF0YTogJUAgYnV0
IG9ic2VydmVkOiAlQCBmb3IgJUAiLCBbZXhwZWN0ZWREYXRhIHNob3J0RGVzY3JpcHRpb25dLCBb
b2JzZXJ2ZWREYXRhIHNob3J0RGVzY3JpcHRpb25dLCBzZWxmKTsKKyAgICAgICAgTlNMb2coQCJP
YnNlcnZlZCBlcnJvcjogJUAgd2hpbGUgcmVhZGluZyBkYXRhIGZvciAlQCIsIGRhdGFSZXF1ZXN0
RXJyb3IsIHNlbGYpOworICAgIH0KK30KKworQGVuZAorCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7CiAKIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEF0dGFjaG1lbnRFbGVtZW50SW5zZXJ0aW9u
KQpAQCAtMTkzLDYgKzIzNyw5IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEF0dGFjaG1lbnRF
bGVtZW50SW5zZXJ0aW9uKQogICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCIzOCBieXRlcyIsIFt3
ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJzdWJ0aXRsZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0
dGFjaG1lbnQiXSk7CiAgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBb
IF0sIEBbIGZpcnN0QXR0YWNobWVudC5nZXQoKSBdKTsKICAgICB9CisKKyAgICBbZmlyc3RBdHRh
Y2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOnRlc3RIVE1MRGF0YSgpXTsKKwogICAgIHsK
ICAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgc2NvcGUod2ViVmlldy5n
ZXQoKSk7CiAgICAgICAgIC8vIFNpbmNlIG5vIGNvbnRlbnQgdHlwZSBpcyBleHBsaWNpdGx5IHNw
ZWNpZmllZCwgY29tcHV0ZSBpdCBmcm9tIHRoZSBmaWxlIGV4dGVuc2lvbi4KQEAgLTIwMyw2ICsy
NTAsOSBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50RWxlbWVudEluc2VydGlv
bikKICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiMzcgS0IiLCBbd2ViVmlldyB2YWx1ZU9mQXR0
cmlidXRlOkAic3VidGl0bGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOwogICAg
ICAgICBzY29wZS5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBmaXJzdEF0dGFjaG1lbnQuZ2V0
KCkgXSwgQFsgc2Vjb25kQXR0YWNobWVudC5nZXQoKSBdKTsKICAgICB9CisKKyAgICBbZmlyc3RB
dHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOm5pbF07CisgICAgW3NlY29uZEF0dGFj
aG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6dGVzdEltYWdlRGF0YSgpXTsKIH0KIAogVEVT
VChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudFVwZGF0ZXNXaGVuSW5zZXJ0aW5nQW5kRGVs
ZXRpbmdOZXdsaW5lKQpAQCAtMjE4LDEyICsyNjgsMTggQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0
cywgQXR0YWNobWVudFVwZGF0ZXNXaGVuSW5zZXJ0aW5nQW5kRGVsZXRpbmdOZXdsaW5lKQogICAg
IFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgd2l0
aEFyZ3VtZW50Om5pbCBleHBlY3RlZFJlbW92YWxzOkBbXSBleHBlY3RlZEluc2VydGlvbnM6QFtd
XTsKICAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0
aW9uKCkuY29sbGFwc2UoZG9jdW1lbnQuYm9keSkiXTsKICAgICBbd2ViVmlldyBleHBlY3RVcGRh
dGVzQWZ0ZXJDb21tYW5kOkAiSW5zZXJ0UGFyYWdyYXBoIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVj
dGVkUmVtb3ZhbHM6QFtdIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOworCisgICAgW3dlYlZpZXcg
ZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiB3aXRoQXJndW1lbnQ6
bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFtdIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOworICAgIFth
dHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOnRlc3RIVE1MRGF0YSgpXTsKKwogICAg
IFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJEZWxldGVGb3J3YXJkIiB3aXRo
QXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFthdHRhY2htZW50LmdldCgpXSBleHBlY3Rl
ZEluc2VydGlvbnM6QFtdXTsKKyAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9C
ZTpuaWxdOwogfQogCiBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1do
ZW5VbmRvaW5nQW5kUmVkb2luZykKIHsKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVz
dGluZ0F0dGFjaG1lbnRzKCk7CisgICAgUmV0YWluUHRyPE5TRGF0YT4gaHRtbERhdGEgPSByZXRh
aW5QdHIodGVzdEhUTUxEYXRhKCkpOwogICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBhdHRh
Y2htZW50OwogICAgIHsKICAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUg
b2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CkBAIC0yMzEsMTAgKzI4NywxOSBAQCBURVNUKFdLQXR0
YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5VbmRvaW5nQW5kUmVkb2luZykKICAg
ICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFthdHRhY2htZW50
LmdldCgpXSk7CiAgICAgfQogICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6
QCJVbmRvIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFthdHRhY2htZW50Lmdl
dCgpXSBleHBlY3RlZEluc2VydGlvbnM6QFtdXTsKKyAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1
ZXN0ZWREYXRhVG9CZTpuaWxdOworCiAgICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29t
bWFuZDpAIlJlZG8iIHdpdGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhwZWN0
ZWRJbnNlcnRpb25zOkBbYXR0YWNobWVudC5nZXQoKV1dOworICAgIFthdHRhY2htZW50IGV4cGVj
dFJlcXVlc3RlZERhdGFUb0JlOmh0bWxEYXRhLmdldCgpXTsKKwogICAgIFt3ZWJWaWV3IGV4cGVj
dFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgd2l0aEFyZ3VtZW50Om5pbCBl
eHBlY3RlZFJlbW92YWxzOkBbYXR0YWNobWVudC5nZXQoKV0gZXhwZWN0ZWRJbnNlcnRpb25zOkBb
XV07CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6bmlsXTsKKwogICAg
IFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJVbmRvIiB3aXRoQXJndW1lbnQ6
bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFtdIGV4cGVjdGVkSW5zZXJ0aW9uczpAW2F0dGFjaG1lbnQu
Z2V0KCldXTsKKyAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpodG1sRGF0
YS5nZXQoKV07CisKICAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5kOkAiUmVk
byIgd2l0aEFyZ3VtZW50Om5pbCBleHBlY3RlZFJlbW92YWxzOkBbYXR0YWNobWVudC5nZXQoKV0g
ZXhwZWN0ZWRJbnNlcnRpb25zOkBbXV07CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVk
RGF0YVRvQmU6bmlsXTsKIH0KIAogVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudFVw
ZGF0ZXNXaGVuQ2hhbmdpbmdGb250U3R5bGVzKQpAQCAtMjUyLDkgKzMxNywxMSBAQCBURVNUKFdL
QXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5DaGFuZ2luZ0ZvbnRTdHlsZXMp
CiAgICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIlRvZ2dsZUJvbGQiIHdp
dGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhwZWN0ZWRJbnNlcnRpb25zOkBb
XV07CiAgICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIlRvZ2dsZUl0YWxp
YyIgd2l0aEFyZ3VtZW50Om5pbCBleHBlY3RlZFJlbW92YWxzOkBbXSBleHBlY3RlZEluc2VydGlv
bnM6QFtdXTsKICAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5kOkAiVG9nZ2xl
VW5kZXJsaW5lIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFtdIGV4cGVjdGVk
SW5zZXJ0aW9uczpAW11dOworICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0Jl
OnRlc3RIVE1MRGF0YSgpXTsKIAogICAgIC8vIEluc2VydGluZyB0ZXh0IHNob3VsZCBkZWxldGUg
dGhlIGN1cnJlbnQgc2VsZWN0aW9uLCByZW1vdmluZyB0aGUgYXR0YWNobWVudCBpbiB0aGUgcHJv
Y2Vzcy4KICAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5kOkAiSW5zZXJ0VGV4
dCIgd2l0aEFyZ3VtZW50OkAiZm9vIiBleHBlY3RlZFJlbW92YWxzOkBbYXR0YWNobWVudC5nZXQo
KV0gZXhwZWN0ZWRJbnNlcnRpb25zOkBbXV07CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVz
dGVkRGF0YVRvQmU6bmlsXTsKIH0KIAogVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVu
dFVwZGF0ZXNXaGVuSW5zZXJ0aW5nTGlzdHMpCkBAIC0yNzEsNiArMzM4LDcgQEAgVEVTVChXS0F0
dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudFVwZGF0ZXNXaGVuSW5zZXJ0aW5nTGlzdHMpCiAgICAg
W3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIkluc2VydE9yZGVyZWRMaXN0IiB3
aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFtdIGV4cGVjdGVkSW5zZXJ0aW9uczpA
W11dOwogICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJJbnNlcnRVbm9y
ZGVyZWRMaXN0IiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFtdIGV4cGVjdGVk
SW5zZXJ0aW9uczpAW11dOwogICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6
QCJJbnNlcnRVbm9yZGVyZWRMaXN0IiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6
QFtdIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOworICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVl
c3RlZERhdGFUb0JlOnRlc3RIVE1MRGF0YSgpXTsKIH0KIAogVEVTVChXS0F0dGFjaG1lbnRUZXN0
cywgQXR0YWNobWVudFVwZGF0ZXNXaGVuSW5zZXJ0aW5nUmljaE1hcmt1cCkKQEAgLTI4OSw2ICsz
NTcsNjEgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudFVwZGF0ZXNXaGVuSW5z
ZXJ0aW5nUmljaE1hcmt1cCkKICAgICAgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRp
b25VcGRhdGVdOwogICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAW2F0
dGFjaG1lbnQuZ2V0KCldLCBAWyBdKTsKICAgICB9CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVx
dWVzdGVkRGF0YVRvQmU6bmlsXTsKK30KKworVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNo
bWVudFVwZGF0ZXNXaGVuQ3V0dGluZ0FuZFBhc3RpbmcpCit7CisgICAgYXV0byB3ZWJWaWV3ID0g
d2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOworICAgIFJldGFpblB0cjxfV0tBdHRhY2ht
ZW50PiBhdHRhY2htZW50OworICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVz
Rm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIGF0dGFjaG1lbnQgPSBy
ZXRhaW5QdHIoW3dlYlZpZXcgc3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRoRmlsZW5h
bWU6QCJmb28udHh0IiBjb250ZW50VHlwZTpAInRleHQvcGxhaW4iIGRhdGE6dGVzdEhUTUxEYXRh
KCkgb3B0aW9uczpuaWxdKTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0
ZXMoQFtdLCBAW2F0dGFjaG1lbnQuZ2V0KCldKTsKKyAgICB9CisgICAgW2F0dGFjaG1lbnQgZXhw
ZWN0UmVxdWVzdGVkRGF0YVRvQmU6dGVzdEhUTUxEYXRhKCldOworICAgIFt3ZWJWaWV3IF9zeW5j
aHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiU2VsZWN0QWxsIiBhcmd1bWVudDpuaWxdOwor
ICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIo
d2ViVmlldy5nZXQoKSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVk
aXRDb21tYW5kOkAiQ3V0IiBhcmd1bWVudDpuaWxdOworICAgICAgICBvYnNlcnZlci5leHBlY3RB
dHRhY2htZW50VXBkYXRlcyhAW2F0dGFjaG1lbnQuZ2V0KCldLCBAW10pOworICAgIH0KKyAgICBb
YXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpuaWxdOworICAgIHsKKyAgICAgICAg
T2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7
CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiUGFz
dGUiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRh
dGVzKEBbXSwgQFthdHRhY2htZW50LmdldCgpXSk7CisgICAgfQorICAgIFthdHRhY2htZW50IGV4
cGVjdFJlcXVlc3RlZERhdGFUb0JlOnRlc3RIVE1MRGF0YSgpXTsKK30KKworVEVTVChXS0F0dGFj
aG1lbnRUZXN0cywgTXVsdGlwbGVTaW11bHRhbmVvdXNBdHRhY2htZW50RGF0YVJlcXVlc3RzKQor
eworICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKKyAg
ICBSZXRhaW5QdHI8TlNEYXRhPiBodG1sRGF0YSA9IHRlc3RIVE1MRGF0YSgpOworICAgIFJldGFp
blB0cjxfV0tBdHRhY2htZW50PiBhdHRhY2htZW50OworICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0
dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAg
IGF0dGFjaG1lbnQgPSByZXRhaW5QdHIoW3dlYlZpZXcgc3luY2hyb25vdXNseUluc2VydEF0dGFj
aG1lbnRXaXRoRmlsZW5hbWU6QCJmb28udHh0IiBjb250ZW50VHlwZTpAInRleHQvcGxhaW4iIGRh
dGE6aHRtbERhdGEuZ2V0KCkgb3B0aW9uczpuaWxdKTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0
QXR0YWNobWVudFVwZGF0ZXMoQFtdLCBAW2F0dGFjaG1lbnQuZ2V0KCldKTsKKyAgICB9CisgICAg
X19ibG9jayBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhRm9yRmlyc3RSZXF1ZXN0OworICAgIF9fYmxv
Y2sgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUZvclNlY29uZFJlcXVlc3Q7CisgICAgX19ibG9jayBi
b29sIGRvbmUgPSBmYWxzZTsKKyAgICBbYXR0YWNobWVudCByZXF1ZXN0RGF0YTpeKE5TRGF0YSAq
ZGF0YSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWVycm9yKTsKKyAg
ICAgICAgZGF0YUZvckZpcnN0UmVxdWVzdCA9IHJldGFpblB0cihkYXRhKTsKKyAgICB9XTsKKyAg
ICBbYXR0YWNobWVudCByZXF1ZXN0RGF0YTpeKE5TRGF0YSAqZGF0YSwgTlNFcnJvciAqZXJyb3Ip
IHsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWVycm9yKTsKKyAgICAgICAgZGF0YUZvclNlY29uZFJl
cXVlc3QgPSByZXRhaW5QdHIoZGF0YSk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOwor
CisgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVDVF9UUlVFKFtkYXRhRm9yRmlyc3RS
ZXF1ZXN0IGlzRXF1YWxUb0RhdGE6aHRtbERhdGEuZ2V0KCldKTsKKyAgICBFWFBFQ1RfVFJVRShb
ZGF0YUZvclNlY29uZFJlcXVlc3QgaXNFcXVhbFRvRGF0YTpodG1sRGF0YS5nZXQoKV0pOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="345998"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326740</attachid>
            <date>2017-11-12 21:00:31 -0800</date>
            <delta_ts>2017-11-13 07:30:43 -0800</delta_ts>
            <desc>Wait for EWS</desc>
            <filename>bug-179586-20171112210030.patch</filename>
            <type>text/plain</type>
            <size>44800</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0NzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjQ4NzYwZjI2Y2ZkYmY0
ZDkzNDQ1OTc3Y2VkMzc2MGRjNDY1ZmZmMi4uYTliOGU2MmVhNjE4YWQ0YzFkM2U2MzI1ODM2YTFi
MDA2YTE0ZmMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE3LTExLTExICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtBdHRhY2htZW50
IFN1cHBvcnRdIEltcGxlbWVudCBTUEkgZm9yIGNsaWVudHMgdG8gcmVxdWVzdCBkYXRhIGZvciBh
IGdpdmVuIGF0dGFjaG1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3OTU4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzUzNTU3MjA+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0IGlu
IFdlYkNvcmUgZm9yIGZldGNoaW5nIGRhdGEgZm9yIGEgZ2l2ZW4gYXR0YWNobWVudCBlbGVtZW50
LiBTZWUgcGVyLW1ldGhvZCBjb21tZW50cyBiZWxvdyBmb3IKKyAgICAgICAgbW9yZSBkZXRhaWwu
CisKKyAgICAgICAgVGVzdCBjb3ZlcmFnZSBieSBhdWdtZW50aW5nIGV4aXN0aW5nIEFQSSB0ZXN0
cyBpbiBXS0F0dGFjaG1lbnRUZXN0cywgYW5kIGFkZGluZyAzIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkSW5z
ZXJ0QXR0YWNobWVudEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZFJl
bW92ZUF0dGFjaG1lbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphdHRh
Y2htZW50Rm9ySWRlbnRpZmllciBjb25zdCk6CisKKyAgICAgICAgRmV0Y2hlcyBhbiBhdHRhY2ht
ZW50IGVsZW1lbnQgbWF0Y2hpbmcgdGhlIGdpdmVuIGlkZW50aWZpZXIuIFVzaW5nIHRoZSBpZGVu
dGlmaWVyID0+IGF0dGFjaG1lbnQgZWxlbWVudCBtYXAgaGVyZQorICAgICAgICBhbGxvd3MgdXMg
dG8gYXZvaWQgdGhlIGNvc3Qgb2Ygd2Fsa2luZyB0aGUgRE9NIGluIHNlYXJjaCBmb3IgSFRNTEF0
dGFjaG1lbnRFbGVtZW50cyBldmVyeSB0aW1lIGRhdGEgaXMKKyAgICAgICAgcmVxdWVzdGVkLgor
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisKKyAgICAgICAgQWRkIGEgbWFwIG9mIGF0dGFj
aG1lbnQgaWRlbnRpZmllciA9PiBIVE1MQXR0YWNobWVudEVsZW1lbnQgaW4gRG9jdW1lbnQuIFRo
aXMgbWFwIGlzIHVwZGF0ZWQgd2hlbiBhdHRhY2htZW50CisgICAgICAgIGVsZW1lbnRzIGFyZSBj
b25uZWN0ZWQgdG8gb3IgZGlzY29ubmVjdGVkIGZyb20gdGhlIGRvY3VtZW50LiBBZGRpdGlvbmFs
bHksIGRlbGVnYXRlIGF0dGFjaG1lbnQgaW5zZXJ0aW9uIGFuZAorICAgICAgICByZW1vdmFsIG91
dCB0byB0aGUgRWRpdG9yIGlmIHBvc3NpYmxlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRBdHRhY2htZW50RnJvbUZpbGUp
OgorICAgICAgICAqIGVkaXRpbmcvbWFjL1dlYkNvbnRlbnRSZWFkZXJNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZW5hbWVzKToKKyAgICAgICAgKiBl
ZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZyb21N
YXJrdXApOgorCisgICAgICAgIFR3ZWFrIGV4aXN0aW5nIGxvZ2ljIHRoYXQgdHJhbnNmZXJzIGZp
bGUtYmFja2VkIEZpbGUgb2JqZWN0cyB3aGVuIGRlc2VyaWFsaXppbmcgSFRNTEF0dGFjaG1lbnRF
bGVtZW50cyBmcm9tCisgICAgICAgIG1hcmt1cCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhl
IGF0dGFjaG1lbnQgZWxlbWVudCBpcyBub3QgZmlsZS1iYWNrZWQuIEluIHRoaXMgY2FzZSwgd2Ug
Y29uc3RydWN0IGEgbmV3CisgICAgICAgIEZpbGUgb2JqZWN0IHVzaW5nIHRoZSBkZXNlcmlhbGl6
aW5nIGNvbnN0cnVjdG9yLiBUbyBkbyB0aGlzLCB3ZSB1c2UgdGhlIGF0dGFjaG1lbnQgZWxlbWVu
dCdzIGJsb2IgVVJMIHRvIG1ha2UKKyAgICAgICAgc3VyZSB0aGF0IHRoZSBuZXcgRmlsZSByZWZl
cmVuY2VzIGFuIGV4aXN0aW5nIGJsb2IgbWF0Y2hpbmcgdGhhdCBVUkwuCisKKyAgICAgICAgKiBo
dG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRhY2ht
ZW50RGF0YVJlYWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0dGFjaG1lbnREYXRh
UmVhZGVyOjpBdHRhY2htZW50RGF0YVJlYWRlcik6CisKKyAgICAgICAgSW50cm9kdWNlIEF0dGFj
aG1lbnREYXRhUmVhZGVyLCBhIGhlbHBlciBjbGFzcyBsb2NhbCB0byBIVE1MQXR0YWNobWVudEVs
ZW1lbnQgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZworICAgICAgICBhbiBhdHRhY2ht
ZW50IGVsZW1lbnQncyBmaWxlIGFuZCBpbnZva2luZyBhIGdpdmVuIGNhbGxiYWNrIHdoZW4gbG9h
ZGluZyBoYXMgc3VjY2VlZGVkIG9yIGZhaWxlZC4KKyAgICAgICAgRWFjaCBBdHRhY2htZW50RGF0
YVJlYWRlciBpcyByZXRhaW5lZCBleGNsdXNpdmVseSBieSBpdHMgSFRNTEF0dGFjaG1lbnRFbGVt
ZW50LCB0aHJvdWdoIHRoZQorICAgICAgICBIVE1MQXR0YWNobWVudEVsZW1lbnQncyB2ZWN0b3Ig
b2YgdW5pcXVlX3B0cnMgdG8gQXR0YWNobWVudERhdGFSZWFkZXJzLgorCisgICAgICAgIChXZWJD
b3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6On5IVE1MQXR0YWNobWVudEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEF0dGFjaG1lbnRFbGVtZW50OjpibG9iVVJMIGNvbnN0KToKKwor
ICAgICAgICBBZGQgYSBjb252ZW5pZW5jZSBnZXR0ZXIgZm9yIHRoZSBibG9iIFVSTCBvZiB0aGUg
YXR0YWNobWVudCdzIGJhY2tpbmcgRmlsZSBvYmplY3QuCisKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxBdHRhY2htZW50RWxlbWVudDo6c2V0RmlsZSk6CisKKyAgICAgICAgV2hlbiBzZXR0aW5nIGFu
IGF0dGFjaG1lbnQgZWxlbWVudCdzIGZpbGUsIHNldCB0aGUgYmxvYiBVUkwgYXR0cmlidXRlIGFz
IHdlbGwgdG8gdGhlIGJsb2IgVVJMLiBBbHNvLCB0d2VhayB0aGlzCisgICAgICAgIHRvIHRha2Ug
YSBSZWZQdHI8RmlsZT4mJiBpbnN0ZWFkIG9mIGEgcmF3IEZpbGUqLgorCisgICAgICAgIChXZWJD
b3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxBdHRhY2htZW50RWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3Rvcik6
CisKKyAgICAgICAgSW5zdGVhZCBvZiBkZWxlZ2F0aW5nIGF0dGFjaG1lbnQgaW5zZXJ0aW9uIGFu
ZCByZW1vdmFsIHRvIHRoZSBFZGl0b3IsIGp1c3QgY2FsbCBvdXQgdG8gdGhlIERvY3VtZW50LCB3
aGljaCB3aWxsCisgICAgICAgIG5vdyBjYWxsIG91dCB0byB0aGUgRWRpdG9yLgorCisgICAgICAg
IChXZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6OmF0dGFjaG1lbnRQYXRoIGNvbnN0KToK
KworICAgICAgICBBZGQgYSBjb252ZW5pZW5jZSBnZXR0ZXIgZm9yIHRoZSBhdHRhY2htZW50IHBh
dGggYXR0cmlidXRlLgorCisgICAgICAgIChXZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6
OnJlcXVlc3REYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdHRhY2htZW50RWxlbWVudDo6
ZGVzdHJveVJlYWRlcik6CisKKyAgICAgICAgQ2FsbGVkIHdoZW4gYSBBdHRhY2htZW50RGF0YVJl
YWRlciBoYXMgY29tcGxldGVkIChlaXRoZXIgd2l0aCBzdWNjZXNzIG9yIGZhaWx1cmUpLCBhbmQg
aXMgcmVhZHkgdG8gYmUgcmVtb3ZlZAorICAgICAgICBmcm9tIHRoZSBhdHRhY2htZW50IGVsZW1l
bnQncyBsaXN0IG9mIGFjdGl2ZSBkYXRhIHJlYWRlcnMuCisKKyAgICAgICAgKFdlYkNvcmU6OkF0
dGFjaG1lbnREYXRhUmVhZGVyOjp+QXR0YWNobWVudERhdGFSZWFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QXR0YWNobWVudERhdGFSZWFkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6QXR0YWNobWVudERhdGFSZWFkZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29y
ZTo6QXR0YWNobWVudERhdGFSZWFkZXI6Omludm9rZUNhbGxiYWNrQW5kRmluaXNoUmVhZGluZyk6
CisKKyAgICAgICAgV2hlbiB0aGUgcmVhZGVyIGlzIGRvbmUgbG9hZGluZywgb3IgaGFzIGZhaWxl
ZCwgb3IgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLCBmaXJlIHRoZSBjYWxsYmFjayB3aXRoIGxv
YWRlZCBkYXRhCisgICAgICAgIChpZiBhbnkpIGFuZCBjYW5jZWwgdGhlIEZpbGVSZWFkZXJMb2Fk
ZXIuCisKKyAgICAgICAgKiBodG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluOgorCisgICAgICAgIEFkZHMgYSBuZXcgIndlYmtp
dGF0dGFjaG1lbnRibG9idXJsIiBhdHRyaWJ1dGUgdGhhdCBrZWVwcyB0cmFjayBvZiBhbiBhdHRh
Y2htZW50IGVsZW1lbnQncyBmaWxlJ3MgYmxvYiBVUkwuIFRoaXMKKyAgICAgICAgaXMgdXNlZCB0
byBlbnN1cmUgdGhhdCBpbmZvcm1hdGlvbiBhYm91dCBhbiBhdHRhY2htZW50IGVsZW1lbnQncyBm
aWxlIGlzIG5vdCBsb3N0IGJldHdlZW4gY2VydGFpbiBlZGl0aW5nCisgICAgICAgIG9wZXJhdGlv
bnMgKGZvciBpbnN0YW5jZSwgZGVsZXRpbmcgYSBsaW5lIGJyZWFrKSB0aGF0IGludm9sdmUgc2Vy
aWFsaXppbmcgYW5kIHRoZW4gZGVzZXJpYWxpemluZyBtYXJrdXAgaW50bworICAgICAgICBEb2N1
bWVudEZyYWdtZW50cyB0byB0aGVuIGluc2VydC4KKwogMjAxNy0xMS0xMCAgSmVyIE5vYmxlICA8
amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBGYWlyUGxheSBTdHJlYW1pbmcg
YmFzZWQgQ0RNIGZvciBNb2Rlcm4gRU1FCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE2NzUzYjljZDIzM2EyNGE3ODk1
Yjg1NDg4ZWRjNjIzMGI1MDFkYTQuLmQ5MmIzMWFhZjZlZjU1Y2MwOGJkYWRiYzNjZGQyOTRiYzI3
MzM1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTctMTEtMTIgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0F0dGFjaG1lbnQgU3VwcG9y
dF0gSW1wbGVtZW50IFNQSSBmb3IgY2xpZW50cyB0byByZXF1ZXN0IGRhdGEgZm9yIGEgZ2l2ZW4g
YXR0YWNobWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc5NTg2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTM1NTcyMD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBBZGRzIHN1cHBvcnQgaW4gV2ViS2l0
IGZvciBmZXRjaGluZyBkYXRhIGZvciBhIGdpdmVuIGF0dGFjaG1lbnQgZWxlbWVudC4gU2VlIFdl
YkNvcmUvQ2hhbmdlTG9nIGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIE1vc3Qgb2YgdGhlIGNo
YW5nZXMgaGVyZSBhcmUgYm9pbGVycGxhdGUgcGx1bWJpbmcgb2YgLXJlcXVlc3RBdHRhY2htZW50
RGF0YSB0aHJvdWdoIHRoZSBjbGllbnQgbGF5ZXJzLgorCisgICAgICAgIFRlc3QgY292ZXJhZ2Ug
YnkgYXVnbWVudGluZyBleGlzdGluZyBBUEkgdGVzdHMgaW4gV0tBdHRhY2htZW50VGVzdHMsIGFu
ZCBhZGRpbmcgMyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUF0dGFj
aG1lbnQuY3BwOgorICAgICAgICAoQVBJOjpBdHRhY2htZW50OjpyZXF1ZXN0RGF0YSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tBdHRhY2htZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tBdHRhY2htZW50Lm1tOgorICAgICAgICAoLVtfV0tBdHRhY2htZW50IHJlcXVlc3REYXRh
Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNoYXJlZEJ1ZmZlckNhbGxiYWNrKToKKworICAgICAgICBBZGQg
YSBuZXcgSVBDIGNhbGxiYWNrIGhlbHBlciB0eXBlLCBTaGFyZWRCdWZmZXJDYWxsYmFjay4gVGhp
cyBpcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZyBEYXRhQ2FsbGJhY2ssIGJ1dAorICAgICAgICBp
bnN0ZWFkIG9mIGRlc2VyaWFsaXppbmcgdG8gYW4gQVBJOjpEYXRhLCB3ZSBjb252ZXJ0IHRvIGEg
U2hhcmVkQnVmZmVyIGluc3RlYWQuIEFkZGl0aW9uYWxseSwKKyAgICAgICAgU2hhcmVkQnVmZmVy
Q2FsbGJhY2sgaXMgYWJsZSB0byBkcmF3IGEgZGlzdGluY3Rpb24gYmV0d2VlbiBudWxsIGRhdGEg
YW5kIGVtcHR5IGRhdGEuIFRoaXMgYWxsb3dzIC1yZXF1ZXN0RGF0YToKKyAgICAgICAgdG8gZGlz
dGluZ3Vpc2ggYmV0d2VlbiBjYXNlcyB3aGVyZSAoZm9yIGluc3RhbmNlKSB0aGUgZGF0YSBmb3Ig
YSBnaXZlbiBhdHRhY2htZW50IGlzIGFuIGVtcHR5IGJsb2IsIGFuZCB3aGVuCisgICAgICAgIHRo
ZSBhdHRhY2htZW50IGRvZXNuJ3QgZXhpc3QgYXQgYWxsLgorCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6ZGF0YUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjppbnNlcnRBdHRhY2htZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aW52b2tlU2hh
cmVkQnVmZmVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlcXVl
c3RBdHRhY2htZW50RGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpyZXF1ZXN0QXR0YWNobWVudERhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW46CisKIDIwMTctMTEtMTAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBbU2VydmljZSBXb3JrZXJzXSBJbXBsZW1lbnQgIlRyeSBBY3RpdmF0ZSIgLyAiQWN0aXZh
dGUiIGFsZ29yaXRobXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDgyMDVhMjQ3MTBmMDNm
NTAzODkwZWI2YjYzMGI5ZWI3NDJiZGQ5MzIuLmFjMTg1N2VmNTdhYTE1NDIxZDEyM2FiNWMyZDgx
MDI4NmQyNmQ3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNzUsNiArNzUsNyBAQAog
I2luY2x1ZGUgIkdlbmVyaWNDYWNoZWRIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxB
bGxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MQXR0YWNobWVudEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQmFzZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVu
dC5oIgpAQCAtNzQ4MCw2ICs3NDgxLDM5IEBAIFZlY3RvcjxSZWZQdHI8V2ViQW5pbWF0aW9uPj4g
RG9jdW1lbnQ6OmdldEFuaW1hdGlvbnMoKQogICAgIHJldHVybiBhbmltYXRpb25zOwogfQogCisj
aWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKwordm9pZCBEb2N1bWVudDo6ZGlkSW5zZXJ0
QXR0YWNobWVudEVsZW1lbnQoSFRNTEF0dGFjaG1lbnRFbGVtZW50JiBhdHRhY2htZW50KQorewor
ICAgIGF1dG8gaWRlbnRpZmllciA9IGF0dGFjaG1lbnQudW5pcXVlSWRlbnRpZmllcigpOworICAg
IGlmICghaWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hdHRhY2htZW50SWRl
bnRpZmllclRvRWxlbWVudE1hcC5zZXQoaWRlbnRpZmllciwgYXR0YWNobWVudCk7CisKKyAgICBp
ZiAoZnJhbWUoKSkKKyAgICAgICAgZnJhbWUoKS0+ZWRpdG9yKCkuZGlkSW5zZXJ0QXR0YWNobWVu
dEVsZW1lbnQoYXR0YWNobWVudCk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZUF0dGFj
aG1lbnRFbGVtZW50KEhUTUxBdHRhY2htZW50RWxlbWVudCYgYXR0YWNobWVudCkKK3sKKyAgICBh
dXRvIGlkZW50aWZpZXIgPSBhdHRhY2htZW50LnVuaXF1ZUlkZW50aWZpZXIoKTsKKyAgICBpZiAo
IWlkZW50aWZpZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYXR0YWNobWVudElkZW50aWZp
ZXJUb0VsZW1lbnRNYXAucmVtb3ZlKGlkZW50aWZpZXIpOworCisgICAgaWYgKGZyYW1lKCkpCisg
ICAgICAgIGZyYW1lKCktPmVkaXRvcigpLmRpZFJlbW92ZUF0dGFjaG1lbnRFbGVtZW50KGF0dGFj
aG1lbnQpOworfQorCitSZWZQdHI8SFRNTEF0dGFjaG1lbnRFbGVtZW50PiBEb2N1bWVudDo6YXR0
YWNobWVudEZvcklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKSBjb25zdAorewor
ICAgIHJldHVybiBtX2F0dGFjaG1lbnRJZGVudGlmaWVyVG9FbGVtZW50TWFwLmdldChpZGVudGlm
aWVyKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCisKIHN0YXRp
YyBNZXNzYWdlU291cmNlIG1lc3NhZ2VTb3VyY2VGb3JXVEZMb2dDaGFubmVsKGNvbnN0IFdURkxv
Z0NoYW5uZWwmIGNoYW5uZWwpCiB7CiAgICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gbWVkaWFDaGFubmVsID0gTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIm1lZGlhIik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCmluZGV4IDJhODZiN2YwM2Y5ZDI4NzQ2MjE3N2I5ZmQxNmJlN2U5ODQ2
ZWUxZDguLjZiNDY3NGM3ZmY5OWYwYmEzMzI0NzFiYTRhNjEzYTU4Y2UxODRkNmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCkBAIC0yMTcsNiArMjE3LDEwIEBAIGNsYXNzIFRleHRBdXRvU2l6aW5nOwog
Y2xhc3MgTWVkaWFTZXNzaW9uOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVN
RU5UKQorY2xhc3MgSFRNTEF0dGFjaG1lbnRFbGVtZW50OworI2VuZGlmCisKIG5hbWVzcGFjZSBT
dHlsZSB7CiBjbGFzcyBTY29wZTsKIH07CkBAIC0xMzc1LDYgKzEzNzksMTIgQEAgcHVibGljOgog
ICAgIERvY3VtZW50VGltZWxpbmUmIHRpbWVsaW5lKCk7CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJB
bmltYXRpb24+PiBnZXRBbmltYXRpb25zKCk7CiAgICAgICAgIAorI2lmIEVOQUJMRShBVFRBQ0hN
RU5UX0VMRU1FTlQpCisgICAgdm9pZCBkaWRJbnNlcnRBdHRhY2htZW50RWxlbWVudChIVE1MQXR0
YWNobWVudEVsZW1lbnQmKTsKKyAgICB2b2lkIGRpZFJlbW92ZUF0dGFjaG1lbnRFbGVtZW50KEhU
TUxBdHRhY2htZW50RWxlbWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxIVE1MQXR0
YWNobWVudEVsZW1lbnQ+IGF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllcikgY29uc3Q7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIGVudW0gQ29uc3RydWN0
aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVkUGxhY2Vob2xkZXIgPSAxIDw8
IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIHVuc2lnbmVkID0gRGVmYXVs
dERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CkBAIC0xNzIz
LDYgKzE3MzMsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2xpZW50OjpJREJDb25uZWN0
aW9uUHJveHk+IG1faWRiQ29ubmVjdGlvblByb3h5OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQVRU
QUNITUVOVF9FTEVNRU5UKQorICAgIEhhc2hNYXA8U3RyaW5nLCBSZWY8SFRNTEF0dGFjaG1lbnRF
bGVtZW50Pj4gbV9hdHRhY2htZW50SWRlbnRpZmllclRvRWxlbWVudE1hcDsKKyNlbmRpZgorCiAg
ICAgVGltZXIgbV9kaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNUaW1lcjsKICAgICBUaW1lciBtX2Nv
b2tpZUNhY2hlRXhwaXJ5VGltZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA5
NWJhNDE4MGJmZDBkM2M1ZGQ0MTM0OTM2YWE1ZDU5ZWUxMjg2ZjBhLi5hN2U1NTJmZTVhYWQ0NDgz
NDQyY2JhYThkYjU0MjZkMTkzMDJmYzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBA
IC0zODAwLDcgKzM4MDAsNyBAQCB2b2lkIEVkaXRvcjo6aW5zZXJ0QXR0YWNobWVudEZyb21GaWxl
KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBmaQogICAgIGF0dGFjaG1l
bnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN1YnRpdGxlQXR0ciwgZmlsZVNpemVEZXNjcmlw
dGlvbihmaWxlLT5zaXplKCkpKTsKICAgICBhdHRhY2htZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5h
bWVzOjp0eXBlQXR0ciwgY29udGVudFR5cGUpOwogICAgIGF0dGFjaG1lbnQtPnNldFVuaXF1ZUlk
ZW50aWZpZXIoaWRlbnRpZmllcik7Ci0gICAgYXR0YWNobWVudC0+c2V0RmlsZShmaWxlLnB0cigp
KTsKKyAgICBhdHRhY2htZW50LT5zZXRGaWxlKFdURk1vdmUoZmlsZSkpOwogCiAgICAgYXV0byBm
cmFnbWVudFRvSW5zZXJ0ID0gZG9jdW1lbnQoKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAg
ICAgZnJhZ21lbnRUb0luc2VydC0+YXBwZW5kQ2hpbGQoYXR0YWNobWVudC5nZXQoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9XZWJDb250ZW50UmVhZGVyTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvV2ViQ29udGVudFJlYWRlck1hYy5tbQppbmRl
eCBkM2Q3YjdkNGZhMTQxMmRlOWI2ZmM3ZDUwOWMyM2Y3MGVlZTA1YmU3Li5hNzk4YTE5YzQ3OWU3
MzEwNGFkNGEwNGExZWE1NGVhYmIxMzk3ZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9XZWJDb250ZW50UmVhZGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL1dlYkNvbnRlbnRSZWFkZXJNYWMubW0KQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBX
ZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZW5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRo
cykKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgICAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5hdHRhY2htZW50RWxlbWVudEVuYWJsZWQo
KSkgewogICAgICAgICAgICAgYXV0byBhdHRhY2htZW50ID0gSFRNTEF0dGFjaG1lbnRFbGVtZW50
OjpjcmVhdGUoSFRNTE5hbWVzOjphdHRhY2htZW50VGFnLCBkb2N1bWVudCk7Ci0gICAgICAgICAg
ICBhdHRhY2htZW50LT5zZXRGaWxlKEZpbGU6OmNyZWF0ZShbW05TVVJMIGZpbGVVUkxXaXRoUGF0
aDp0ZXh0XSBwYXRoXSkucHRyKCkpOworICAgICAgICAgICAgYXR0YWNobWVudC0+c2V0RmlsZShG
aWxlOjpjcmVhdGUoW1tOU1VSTCBmaWxlVVJMV2l0aFBhdGg6dGV4dF0gcGF0aF0pKTsKICAgICAg
ICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChhdHRhY2htZW50KTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggNmIwNDk2
NTE1NjllYjRmZDBmMDI5NmVlNWE0OTVlNGQ2NmUwOGEyYS4uM2NmNDBlZDc4YzVhODgyNjNjNjU1
Yjc0MDI2NTJkNDdmODIyN2UxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNzYz
LDcgKzc2MywxMSBAQCBSZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJgogICAgICAgICBhdHRhY2htZW50
cy5hcHBlbmQoYXR0YWNobWVudCk7CiAKICAgICBmb3IgKGF1dG8mIGF0dGFjaG1lbnQgOiBhdHRh
Y2htZW50cykgewotICAgICAgICBhdHRhY2htZW50LT5zZXRGaWxlKEZpbGU6OmNyZWF0ZShhdHRh
Y2htZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHdlYmtpdGF0dGFjaG1lbnRw
YXRoQXR0cikpLnB0cigpKTsKKyAgICAgICAgYXV0byBhdHRhY2htZW50UGF0aCA9IGF0dGFjaG1l
bnQtPmF0dGFjaG1lbnRQYXRoKCk7CisgICAgICAgIGlmIChhdHRhY2htZW50UGF0aC5pc0VtcHR5
KCkpCisgICAgICAgICAgICBhdHRhY2htZW50LT5zZXRGaWxlKEZpbGU6OmRlc2VyaWFsaXplKHsg
fSwgYXR0YWNobWVudC0+YmxvYlVSTCgpLCBhdHRhY2htZW50LT5hdHRhY2htZW50VHlwZSgpLCBh
dHRhY2htZW50LT5hdHRhY2htZW50VGl0bGUoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBhdHRhY2htZW50LT5zZXRGaWxlKEZpbGU6OmNyZWF0ZShhdHRhY2htZW50UGF0aCkpOwogICAg
ICAgICBhdHRhY2htZW50LT5yZW1vdmVBdHRyaWJ1dGUod2Via2l0YXR0YWNobWVudHBhdGhBdHRy
KTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0
dGFjaG1lbnRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRF
bGVtZW50LmNwcAppbmRleCBkMTM2YjQ4OGU0N2E0NmFiMjljZmJhOTc3OWJlNWE5MGIxYTdiN2I5
Li4zOGQ3ZGZlODhkYWZkM2QxMmEwZTQwNDM3ZTAyODlkNTZmZjI4NjMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuY3BwCkBAIC0zMCwxNCArMzAsNDcg
QEAKIAogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZpbGUuaCIKKyNpbmNsdWRlICJG
aWxlUmVhZGVyTG9hZGVyLmgiCisjaW5jbHVkZSAiRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQXR0YWNobWVudC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK2NsYXNzIEF0dGFjaG1l
bnREYXRhUmVhZGVyIDogcHVibGljIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQgeworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QXR0YWNobWVudERhdGFSZWFkZXI+IGNyZWF0ZShI
VE1MQXR0YWNobWVudEVsZW1lbnQmIGF0dGFjaG1lbnQsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4mJik+JiYgY2FsbGJhY2spCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxBdHRhY2htZW50RGF0YVJlYWRlcj4oYXR0YWNobWVudCwgV1RGTW92ZShjYWxs
YmFjaykpOworICAgIH0KKworICAgIEF0dGFjaG1lbnREYXRhUmVhZGVyKEhUTUxBdHRhY2htZW50
RWxlbWVudCYgYXR0YWNobWVudCwgRnVuY3Rpb248dm9pZChSZWZQdHI8U2hhcmVkQnVmZmVyPiYm
KT4mJiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2F0dGFjaG1lbnQoYXR0YWNobWVudCkKKyAgICAg
ICAgLCBtX2NhbGxiYWNrKHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9pZChSZWZQdHI8U2hh
cmVkQnVmZmVyPiYmKT4+KFdURk1vdmUoY2FsbGJhY2spKSkKKyAgICAgICAgLCBtX2xvYWRlcihz
dGQ6Om1ha2VfdW5pcXVlPEZpbGVSZWFkZXJMb2FkZXI+KEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRU
eXBlOjpSZWFkQXNBcnJheUJ1ZmZlciwgdGhpcykpCisgICAgeworICAgICAgICBtX2xvYWRlci0+
c3RhcnQoJmF0dGFjaG1lbnQuZG9jdW1lbnQoKSwgKmF0dGFjaG1lbnQuZmlsZSgpKTsKKyAgICB9
CisKKyAgICB+QXR0YWNobWVudERhdGFSZWFkZXIoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGRp
ZFN0YXJ0TG9hZGluZygpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKSBmaW5hbDsKKyAgICB2b2lkIGRpZEZh
aWwoaW50IGVycm9yKSBmaW5hbDsKKworICAgIHZvaWQgaW52b2tlQ2FsbGJhY2tBbmRGaW5pc2hS
ZWFkaW5nKFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYpOworCisgICAgSFRNTEF0dGFjaG1lbnRFbGVt
ZW50JiBtX2F0dGFjaG1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uPHZvaWQoUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4mJik+PiBtX2NhbGxiYWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxG
aWxlUmVhZGVyTG9hZGVyPiBtX2xvYWRlcjsKK307CisKIEhUTUxBdHRhY2htZW50RWxlbWVudDo6
SFRNTEF0dGFjaG1lbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50JiBkb2N1bWVudCkKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogewpA
QCAtNjEsOSArOTQsMTYgQEAgRmlsZSogSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpmaWxlKCkgY29u
c3QKICAgICByZXR1cm4gbV9maWxlLmdldCgpOwogfQogCi12b2lkIEhUTUxBdHRhY2htZW50RWxl
bWVudDo6c2V0RmlsZShGaWxlKiBmaWxlKQorVVJMIEhUTUxBdHRhY2htZW50RWxlbWVudDo6Ymxv
YlVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgeyB9LCBhdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKEhUTUxOYW1lczo6d2Via2l0YXR0YWNobWVudGJsb2J1cmxBdHRyKS5zdHJpbmco
KSB9OworfQorCit2b2lkIEhUTUxBdHRhY2htZW50RWxlbWVudDo6c2V0RmlsZShSZWZQdHI8Rmls
ZT4mJiBmaWxlKQogewotICAgIG1fZmlsZSA9IGZpbGU7CisgICAgbV9maWxlID0gV1RGTW92ZShm
aWxlKTsKKworICAgIHNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVz
Ojp3ZWJraXRhdHRhY2htZW50YmxvYnVybEF0dHIsIG1fZmlsZSA/IG1fZmlsZS0+dXJsKCkgOiBl
bXB0eVN0cmluZygpKTsKIAogICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVy
KCkpCiAgICAgICAgIHJlbmRlcmVyLT5pbnZhbGlkYXRlKCk7CkBAIC03MiwyMCArMTEyLDE2IEBA
IHZvaWQgSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpzZXRGaWxlKEZpbGUqIGZpbGUpCiBOb2RlOjpJ
bnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6Omluc2VydGVk
SW50b0FuY2VzdG9yKEluc2VydGlvblR5cGUgdHlwZSwgQ29udGFpbmVyTm9kZSYgYW5jZXN0b3Ip
CiB7CiAgICAgYXV0byByZXN1bHQgPSBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3Io
dHlwZSwgYW5jZXN0b3IpOwotICAgIGlmIChhdXRvKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUo
KSkgewotICAgICAgICBpZiAodHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50KQotICAgICAgICAgICAg
ZnJhbWUtPmVkaXRvcigpLmRpZEluc2VydEF0dGFjaG1lbnRFbGVtZW50KCp0aGlzKTsKLSAgICB9
CisgICAgaWYgKHR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudCkKKyAgICAgICAgZG9jdW1lbnQoKS5k
aWRJbnNlcnRBdHRhY2htZW50RWxlbWVudCgqdGhpcyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogdm9pZCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3Zh
bFR5cGUgdHlwZSwgQ29udGFpbmVyTm9kZSYgYW5jZXN0b3IpCiB7CiAgICAgSFRNTEVsZW1lbnQ6
OnJlbW92ZWRGcm9tQW5jZXN0b3IodHlwZSwgYW5jZXN0b3IpOwotICAgIGlmIChhdXRvKiBmcmFt
ZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkgewotICAgICAgICBpZiAodHlwZS5kaXNjb25uZWN0ZWRG
cm9tRG9jdW1lbnQpCi0gICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuZGlkUmVtb3ZlQXR0YWNo
bWVudEVsZW1lbnQoKnRoaXMpOwotICAgIH0KKyAgICBpZiAodHlwZS5kaXNjb25uZWN0ZWRGcm9t
RG9jdW1lbnQpCisgICAgICAgIGRvY3VtZW50KCkuZGlkUmVtb3ZlQXR0YWNobWVudEVsZW1lbnQo
KnRoaXMpOwogfQogCiB2b2lkIEhUTUxBdHRhY2htZW50RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKQEAg
LTEyMSw2ICsxNTcsNTcgQEAgU3RyaW5nIEhUTUxBdHRhY2htZW50RWxlbWVudDo6YXR0YWNobWVu
dFR5cGUoKSBjb25zdAogICAgIHJldHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KHR5cGVBdHRyKTsKIH0KIAorU3RyaW5nIEhUTUxBdHRhY2htZW50RWxlbWVudDo6YXR0YWNobWVu
dFBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHdlYmtpdGF0dGFjaG1lbnRwYXRoQXR0cik7Cit9CisKK3ZvaWQgSFRNTEF0dGFjaG1lbnRF
bGVtZW50OjpyZXF1ZXN0RGF0YShGdW5jdGlvbjx2b2lkKFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYp
PiYmIGNhbGxiYWNrKQoreworICAgIGlmIChtX2ZpbGUpCisgICAgICAgIG1fYXR0YWNobWVudFJl
YWRlcnMuYXBwZW5kKEF0dGFjaG1lbnREYXRhUmVhZGVyOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUo
Y2FsbGJhY2spKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFjayhudWxscHRyKTsKK30KKwor
dm9pZCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OmRlc3Ryb3lSZWFkZXIoQXR0YWNobWVudERhdGFS
ZWFkZXImIGZpbmlzaGVkUmVhZGVyKQoreworICAgIG1fYXR0YWNobWVudFJlYWRlcnMucmVtb3Zl
Rmlyc3RNYXRjaGluZyhbJl0gKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxBdHRhY2htZW50RGF0YVJl
YWRlcj4mIHJlYWRlcikgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiByZWFkZXIuZ2V0KCkgPT0g
JmZpbmlzaGVkUmVhZGVyOworICAgIH0pOworfQorCitBdHRhY2htZW50RGF0YVJlYWRlcjo6fkF0
dGFjaG1lbnREYXRhUmVhZGVyKCkKK3sKKyAgICBpbnZva2VDYWxsYmFja0FuZEZpbmlzaFJlYWRp
bmcobnVsbHB0cik7Cit9CisKK3ZvaWQgQXR0YWNobWVudERhdGFSZWFkZXI6OmRpZEZpbmlzaExv
YWRpbmcoKQoreworICAgIGlmIChhdXRvIGFycmF5QnVmZmVyID0gbV9sb2FkZXItPmFycmF5QnVm
ZmVyUmVzdWx0KCkpCisgICAgICAgIGludm9rZUNhbGxiYWNrQW5kRmluaXNoUmVhZGluZyhTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+
ZGF0YSgpKSwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSkpOworICAgIGVsc2UKKyAgICAgICAg
aW52b2tlQ2FsbGJhY2tBbmRGaW5pc2hSZWFkaW5nKG51bGxwdHIpOworICAgIG1fYXR0YWNobWVu
dC5kZXN0cm95UmVhZGVyKCp0aGlzKTsKK30KKwordm9pZCBBdHRhY2htZW50RGF0YVJlYWRlcjo6
ZGlkRmFpbChpbnQpCit7CisgICAgaW52b2tlQ2FsbGJhY2tBbmRGaW5pc2hSZWFkaW5nKG51bGxw
dHIpOworICAgIG1fYXR0YWNobWVudC5kZXN0cm95UmVhZGVyKCp0aGlzKTsKK30KKwordm9pZCBB
dHRhY2htZW50RGF0YVJlYWRlcjo6aW52b2tlQ2FsbGJhY2tBbmRGaW5pc2hSZWFkaW5nKFJlZlB0
cjxTaGFyZWRCdWZmZXI+JiYgZGF0YSkKK3sKKyAgICBhdXRvIGNhbGxiYWNrID0gV1RGTW92ZSht
X2NhbGxiYWNrKTsKKyAgICBpZiAoIWNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2xvYWRlci0+Y2FuY2VsKCk7CisgICAgbV9sb2FkZXIgPSBudWxscHRyOworICAgICgqY2FsbGJh
Y2spKFdURk1vdmUoZGF0YSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEF0dGFjaG1lbnRFbGVtZW50LmgKaW5kZXggYmQ5YzU2NDg3YmE2MmVjM2U5NDllMjQ2MWE5ZGI0
MWQwNDQxNTViNi4uNjc0NmQ5MDczNzZkYmQyM2I2NjRlZmU3ZjUyMzc0MDFjY2Q3ZmU1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oCkBAIC0zMSwxNSAr
MzEsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBdHRhY2htZW50RGF0YVJl
YWRlcjsKIGNsYXNzIEZpbGU7CiBjbGFzcyBSZW5kZXJBdHRhY2htZW50OworY2xhc3MgU2hhcmVk
QnVmZmVyOwogCiBjbGFzcyBIVE1MQXR0YWNobWVudEVsZW1lbnQgZmluYWwgOiBwdWJsaWMgSFRN
TEVsZW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8SFRNTEF0dGFjaG1lbnRFbGVtZW50
PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKKyAgICBXRUJDT1JF
X0VYUE9SVCBVUkwgYmxvYlVSTCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIEZpbGUqIGZp
bGUoKSBjb25zdDsKLSAgICB2b2lkIHNldEZpbGUoRmlsZSopOworICAgIHZvaWQgc2V0RmlsZShS
ZWZQdHI8RmlsZT4mJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdW5pcXVlSWRlbnRp
ZmllcigpIGNvbnN0OwogICAgIHZvaWQgc2V0VW5pcXVlSWRlbnRpZmllcihjb25zdCBTdHJpbmcm
KTsKQEAgLTQ5LDkgKzUyLDEzIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBhdHRhY2htZW50VGl0bGUoKSBjb25zdDsKICAgICBTdHJpbmcgYXR0YWNobWVudFR5cGUoKSBj
b25zdDsKKyAgICBTdHJpbmcgYXR0YWNobWVudFBhdGgoKSBjb25zdDsKIAogICAgIFJlbmRlckF0
dGFjaG1lbnQqIHJlbmRlcmVyKCkgY29uc3Q7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
cXVlc3REYXRhKEZ1bmN0aW9uPHZvaWQoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJik+JiYgY2FsbGJh
Y2spOworICAgIHZvaWQgZGVzdHJveVJlYWRlcihBdHRhY2htZW50RGF0YVJlYWRlciYpOworCiBw
cml2YXRlOgogICAgIEhUTUxBdHRhY2htZW50RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQmKTsKICAgICB2aXJ0dWFsIH5IVE1MQXR0YWNobWVudEVsZW1lbnQoKTsKQEAgLTY5
LDYgKzc2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsKICAgICAKICAgICBSZWZQdHI8
RmlsZT4gbV9maWxlOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QXR0YWNobWVudERhdGFS
ZWFkZXI+PiBtX2F0dGFjaG1lbnRSZWFkZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4g
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgppbmRleCBiNmYwNDMz
OTU0MjBmMDk2OTA0ZTc1NWNiMDExZmE1N2ZhY2UwMjdkLi43YTFiNWUxMDE0NWU2NDc2YjhkOTIx
MDk0ZmEwMDBkNjlkNzAyMjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
dHRyaWJ1dGVOYW1lcy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVO
YW1lcy5pbgpAQCAtMzgzLDYgKzM4Myw3IEBAIHZzcGFjZQogd2Via2l0YWxsb3dmdWxsc2NyZWVu
CiB3ZWJraXRhdHRhY2htZW50aWQKIHdlYmtpdGF0dGFjaG1lbnRwYXRoCit3ZWJraXRhdHRhY2ht
ZW50YmxvYnVybAogd2Via2l0ZGlyZWN0b3J5CiB3aWR0aAogd3JhcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuY3BwCmluZGV4IDkxZWMwYjdlYmMwNGZjNjZk
ODhlYjA1NWY4ZDVkNjYzZjhhZTJhMTYuLjFkNDliMDdiMmIxYjUxZTdiMjczNWVkM2QxNDZkNGI3
NzY5YTE0YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRh
Y2htZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVu
dC5jcHAKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJB
UElBdHRhY2htZW50LmgiCiAKKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9CbG9ja1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgQVBJIHsKQEAgLTQ1LDQgKzQ3LDEyIEBAIEF0dGFjaG1lbnQ6On5BdHRhY2ht
ZW50KCkKIHsKIH0KIAordm9pZCBBdHRhY2htZW50OjpyZXF1ZXN0RGF0YShGdW5jdGlvbjx2b2lk
KFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJy
b3IpPiYmIGNhbGxiYWNrKQoreworICAgIGlmIChtX3dlYlBhZ2UpCisgICAgICAgIG1fd2ViUGFn
ZS0+cmVxdWVzdEF0dGFjaG1lbnREYXRhKG1faWRlbnRpZmllciwgV1RGTW92ZShjYWxsYmFjaykp
OworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2sobnVsbHB0ciwgV2ViS2l0OjpDYWxsYmFja0Jh
c2U6OkVycm9yOjpPd25lcldhc0ludmFsaWRhdGVkKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmgKaW5kZXggMjQ1NTkwZWZkZTc5YjA5YTA3YjQw
NDgyYzA3MGQ5ZjE2MjhkNWQzYS4uMWVhMDA3ZDZlMDczYjEzNGNiNGQ5YWU0NTU2ODE5ZDljOTU4
MjI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oCkBA
IC0yOCw5ICsyOCwxNCBAQAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgPFdlYktp
dC9XS0Jhc2UuaD4KICNpbmNsdWRlIDxXZWJLaXQvV2ViUGFnZVByb3h5Lmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNoYXJlZEJ1ZmZl
cjsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiB9CkBAIC00
Myw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BdHRhY2htZW50KCk7CiAKICAgICBj
b25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmll
cjsgfQorICAgIHZvaWQgcmVxdWVzdERhdGEoRnVuY3Rpb248dm9pZChSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPiwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAKIHByaXZh
dGU6CiAgICAgZXhwbGljaXQgQXR0YWNobWVudChjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmll
ciwgV2ViS2l0OjpXZWJQYWdlUHJveHkmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tBdHRhY2htZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLQXR0YWNobWVudC5oCmluZGV4IDk0MDMyMzk3ZTAzZjk2MGExOWM2OWQ0
YTdkMDA2YmU3OGRkMmI2YzAuLjFjZDQ1NzQ1YjUxYzFjNDVjMzBlODkxMTgxMzRlYzMwNjNlN2Qx
NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdHRh
Y2htZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F0dGFj
aG1lbnQuaApAQCAtNDMsNiArNDMsNyBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3N4KFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCiAKIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKIEBpbnRlcmZhY2UgX1dLQXR0YWNobWVudCA6IE5T
T2JqZWN0CistICh2b2lkKXJlcXVlc3REYXRhOih2b2lkKF4pKE5TRGF0YSAqLCBOU0Vycm9yICop
KWNvbXBsZXRpb25IYW5kbGVyOwogQGVuZAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdHRhY2htZW50Lm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQubW0KaW5kZXggZDFiMTQ2ZjE1NWYx
ZjBkMjQzMWFlNGVhNDgzY2FkYjA3ZTMwMDAyOS4uZDAzZDk0M2FkOWQ4YmRlMmM2ZmU4YWQ0NmZj
MmVlODU3MDE0ZWZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS0F0dGFjaG1lbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS0F0dGFjaG1lbnQubW0KQEAgLTI5LDcgKzI5LDEwIEBACiAjaWYgV0tfQVBJX0VOQUJM
RUQKIAogI2ltcG9ydCAiQVBJQXR0YWNobWVudC5oIgorI2ltcG9ydCAiV0tFcnJvclByaXZhdGUu
aCIKICNpbXBvcnQgIl9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oIgorI2ltcG9ydCA8V2ViQ29yZS9T
aGFyZWRCdWZmZXIuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogCkBAIC01OCw2ICs2MSwxOSBAQCAtIChCT09MKWlzRXF1YWw6KGlkKW9iamVj
dAogICAgIHJldHVybiBbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W19XS0F0dGFjaG1lbnQgY2xhc3Nd
XSAmJiBbc2VsZi51bmlxdWVJZGVudGlmaWVyIGlzRXF1YWw6WyhfV0tBdHRhY2htZW50ICopb2Jq
ZWN0IHVuaXF1ZUlkZW50aWZpZXJdXTsKIH0KIAorLSAodm9pZClyZXF1ZXN0RGF0YToodm9pZChe
KShOU0RhdGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIF9hdHRhY2ht
ZW50LT5yZXF1ZXN0RGF0YShbIGNhcHR1cmVkQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bkhhbmRsZXIpIF0gKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgQ2FsbGJh
Y2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICBpZiAoIWNhcHR1cmVkQmxvY2spCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGJ1ZmZlciAmJiBlcnJvciA9PSBDYWxsYmFj
a0Jhc2U6OkVycm9yOjpOb25lKQorICAgICAgICAgICAgY2FwdHVyZWRCbG9jayhidWZmZXItPmNy
ZWF0ZU5TRGF0YSgpLmF1dG9yZWxlYXNlKCksIG5pbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGNhcHR1cmVkQmxvY2sobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRv
bWFpbiBjb2RlOjEgdXNlckluZm86bmlsXSk7CisgICAgfSk7Cit9CisKIC0gKE5TU3RyaW5nICop
dW5pcXVlSWRlbnRpZmllcgogewogICAgIHJldHVybiBfYXR0YWNobWVudC0+aWRlbnRpZmllcigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggNWNjM2ZmNzVk
NWZkZDA4ZmJmMmYzNDE2MGQwY2QwMTk1YzJlNzMzNi4uOTI0ZGYwZWE3ZDI0MTAxNDIzZDNmZjZi
NDI0YzhiZjNjMDVjYmJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCkBAIC0xMjksNiArMTI5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1B1YmxpY1N1ZmZpeC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyRW1iZWRkZWRPYmplY3QuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFy
ZWRCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4K
QEAgLTUxNjEsMTQgKzUxNjIsMjkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnZvaWRDYWxsYmFjayhD
YWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgY2FsbGJhY2stPnBlcmZvcm1DYWxsYmFjaygpOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGF0YUNhbGxiYWNrKGNvbnN0IElQQzo6RGF0YVJlZmVy
ZW5jZSYgZGF0YVJlZmVyZW5jZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdl
UHJveHk6OnNoYXJlZEJ1ZmZlckNhbGxiYWNrKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0
YVJlZmVyZW5jZSwgYm9vbCBpc051bGwsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKLSAgICBh
dXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZTxEYXRhQ2FsbGJhY2s+KGNhbGxiYWNrSUQp
OworICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlPFNoYXJlZEJ1ZmZlckNhbGxi
YWNrPihjYWxsYmFja0lEKTsKICAgICBpZiAoIWNhbGxiYWNrKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBMb2cgZXJyb3Igb3IgYXNzZXJ0LgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc051bGwpIHsKKyAgICAgICAgQVNTRVJU
KGRhdGFSZWZlcmVuY2UuaXNFbXB0eSgpKTsKKyAgICAgICAgY2FsbGJhY2stPnBlcmZvcm1DYWxs
YmFja1dpdGhSZXR1cm5WYWx1ZShudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAor
ICAgIGNhbGxiYWNrLT5wZXJmb3JtQ2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUoU2hhcmVkQnVmZmVy
OjpjcmVhdGUoZGF0YVJlZmVyZW5jZS5kYXRhKCksIGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKSk7Cit9
CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpkYXRhQ2FsbGJhY2soY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJiBkYXRhUmVmZXJlbmNlLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCit7CisgICAgYXV0byBj
YWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2U8RGF0YUNhbGxiYWNrPihjYWxsYmFja0lEKTsKKyAg
ICBpZiAoIWNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisKICAgICBjYWxsYmFjay0+cGVyZm9y
bUNhbGxiYWNrV2l0aFJldHVyblZhbHVlKEFQSTo6RGF0YTo6Y3JlYXRlKGRhdGFSZWZlcmVuY2Uu
ZGF0YSgpLCBkYXRhUmVmZXJlbmNlLnNpemUoKSkucHRyKCkpOwogfQogCkBAIC03MTE1LDEwICs3
MTMxLDI2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcm
JiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lCiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpp
bnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGNvbnRlbnRUeXBlLCBTaGFyZWRCdWZmZXIm
IGRhdGEsIEZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2spCiB7
CisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgY2FsbGJhY2soQ2FsbGJhY2tCYXNlOjpF
cnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjayksIG1f
cHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4oKSk7CiAgICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnNlcnRBdHRhY2htZW50KGlkZW50aWZp
ZXIsIGZpbGVuYW1lLCBjb250ZW50VHlwZSwgSVBDOjpTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNl
IHsgJmRhdGEgfSwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKIH0KIAordm9pZCBXZWJQYWdlUHJv
eHk6OnJlcXVlc3RBdHRhY2htZW50RGF0YShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0
aW9uPHZvaWQoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNh
bGxiYWNrKQoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIGNhbGxiYWNrKG51bGxw
dHIsIENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdU
Rk1vdmUoY2FsbGJhY2spLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0
eVRva2VuKCkpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVxdWVz
dEF0dGFjaG1lbnREYXRhKGlkZW50aWZpZXIsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7Cit9CisK
IHZvaWQgV2ViUGFnZVByb3h5OjpkaWRJbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllcikKIHsKICAgICBtX3BhZ2VDbGllbnQuZGlkSW5zZXJ0QXR0YWNobWVudChpZGVudGlm
aWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggM2U2ODIzNmQy
Zjg2OTI1YjZmZmEyZmZlOGZiYjg0MDk2MDViNTAwMy4uNWQwN2NiMTI3ZjUyNzI3MGM4NWM3ZjUw
MTY5YjAyNTMwZDZhZDRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
QEAgLTIzNiw2ICsyMzYsNyBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazx1aW50NjRfdD4gVW5z
aWduZWRDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEVkaXRpbmdSYW5nZT4gRWRp
dGluZ1JhbmdlQ2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBTdHJpbmcm
PiBTdHJpbmdDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiwgYm9vbCwgY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlscyY+IFNj
cmlwdFZhbHVlQ2FsbGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPj4gU2hhcmVkQnVmZmVyQ2FsbGJhY2s7CiAKICNpZiBQTEFURk9STShH
VEspCiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkVycm9yKj4gUHJpbnRGaW5pc2hlZENh
bGxiYWNrOwpAQCAtMTIxMyw2ICsxMjE0LDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKEFUVEFD
SE1FTlRfRUxFTUVOVCkKICAgICB2b2lkIGluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBp
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4g
Y29udGVudFR5cGUsIFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSwgRnVuY3Rpb248dm9pZChD
YWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAgdm9pZCByZXF1ZXN0QXR0YWNobWVudERhdGEo
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAjZW5kaWYKIAogcHJpdmF0
ZToKQEAgLTE0NjYsNiArMTQ2OCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHZvaWRDYWxsYmFj
ayhDYWxsYmFja0lEKTsKICAgICB2b2lkIGRhdGFDYWxsYmFjayhjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmLCBDYWxsYmFja0lEKTsKKyAgICB2b2lkIHNoYXJlZEJ1ZmZlckNhbGxiYWNrKGNvbnN0
IElQQzo6RGF0YVJlZmVyZW5jZSYsIGJvb2wgaXNOdWxsLCBDYWxsYmFja0lEKTsKICAgICB2b2lk
IGltYWdlQ2FsbGJhY2soY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBDYWxsYmFja0lE
KTsKICAgICB2b2lkIHN0cmluZ0NhbGxiYWNrKGNvbnN0IFN0cmluZyYsIENhbGxiYWNrSUQpOwog
ICAgIHZvaWQgaW52YWxpZGF0ZVN0cmluZ0NhbGxiYWNrKENhbGxiYWNrSUQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGYxZWY1
ZTU4YTQzOGFmNGE0ZDYyOTA4Yjg1OTZhM2FkMzc2ZWI3MTcuLjE1YWZmMzFlYzkzOTU5OTMzZjFh
MWViZjdiZWU3MGViOGRhNTYwOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTE1Nyw2ICsxNTcsNyBAQCBtZXNzYWdlcyAtPiBX
ZWJQYWdlUHJveHkgewogICAgICMgQ2FsbGJhY2sgbWVzc2FnZXMKICAgICBWb2lkQ2FsbGJhY2so
V2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgRGF0YUNhbGxiYWNrKElQQzo6RGF0
YVJlZmVyZW5jZSByZXN1bHREYXRhLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKKyAg
ICBTaGFyZWRCdWZmZXJDYWxsYmFjayhJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdWx0RGF0YSwgYm9v
bCBpc051bGwsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKTsKICAgICBJbWFnZUNhbGxi
YWNrKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgYml0bWFwSGFuZGxlLCBXZWJLaXQ6
OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBTdHJpbmdDYWxsYmFjayhTdHJpbmcgcmVzdWx0
U3RyaW5nLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBJbnZhbGlkYXRlU3Ry
aW5nQ2FsbGJhY2soV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDk3MTFiOTBhZDQ2YTMwMjlh
NjE2MGMwMTY5MDVhYmJiMTA3OGRjOTMuLjA0ZWU1ZmMxZDUwYmQxNzg3YTM5NTBmYmI4ODgzMGNk
MDBlYjRiNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCkBAIC0xNDEsMTEgKzE0MSwxMyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRWxlbWVudEl0ZXJh
dG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0V2ZW50TmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9ybVN0YXRlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUTUxBdHRhY2htZW50RWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSW1hZ2VFbGVtZW50
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSW5wdXRFbGVtZW50Lmg+CkBAIC01NzY1LDYgKzU3
NjcsMTQgQEAgdm9pZCBXZWJQYWdlOjpzdG9yYWdlQWNjZXNzUmVzcG9uc2UoYm9vbCB3YXNHcmFu
dGVkLCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgY2FsbGJhY2sod2FzR3JhbnRlZCk7CiB9CiAK
K3ZvaWQgV2ViUGFnZTo6aW52b2tlU2hhcmVkQnVmZmVyQ2FsbGJhY2soUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4mJiBidWZmZXIsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKK3sKKyAgICBpZiAoYnVmZmVy
KQorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNoYXJlZEJ1ZmZlckNhbGxi
YWNrKElQQzo6U2hhcmVkQnVmZmVyRGF0YVJlZmVyZW5jZSB7IGJ1ZmZlci5nZXQoKSB9LCBmYWxz
ZSwgY2FsbGJhY2tJRCkpOworICAgIGVsc2UKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTaGFyZWRCdWZmZXJDYWxsYmFjayh7IH0sIHRydWUsIGNhbGxiYWNrSUQpKTsKK30K
KwogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIHZvaWQgV2ViUGFnZTo6aW5zZXJ0
QXR0YWNobWVudChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjb250ZW50VHlwZSwgY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJiBkYXRhLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCkBAIC01Nzc0LDYgKzU3ODQsMjkg
QEAgdm9pZCBXZWJQYWdlOjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lEKSk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6cmVxdWVz
dEF0dGFjaG1lbnREYXRhKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgQ2FsbGJhY2tJRCBjYWxs
YmFja0lEKQoreworICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkgaGFuZGxlIGF0dGFj
aG1lbnQgZGF0YSByZXF1ZXN0cyBmb3IgYXR0YWNobWVudCBlbGVtZW50cyBpbiBzdWJmcmFtZXMu
CisgICAgYXV0byogZnJhbWUgPSBtYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFt
ZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBpbnZva2VTaGFyZWRCdWZmZXJDYWxsYmFjayh7IH0s
IGNhbGxiYWNrSUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBhdHRhY2ht
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZp
ZXIpOworICAgIGlmICghYXR0YWNobWVudCkgeworICAgICAgICBpbnZva2VTaGFyZWRCdWZmZXJD
YWxsYmFjayh7IH0sIGNhbGxiYWNrSUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
YXR0YWNobWVudC0+cmVxdWVzdERhdGEoW2NhbGxiYWNrSUQsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgcHJvdGVjdGVkQXR0YWNobWVudCA9IFdURk1vdmUoYXR0YWNobWVudCldIChS
ZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikgeworICAgICAgICBpZiAoYnVmZmVyKQorICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+aW52b2tlU2hhcmVkQnVmZmVyQ2FsbGJhY2soV1RGTW92
ZShidWZmZXIpLCBjYWxsYmFja0lEKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdGVj
dGVkVGhpcy0+aW52b2tlU2hhcmVkQnVmZmVyQ2FsbGJhY2soeyB9LCBjYWxsYmFja0lEKTsKKyAg
ICB9KTsKK30KKwogI2VuZGlmIC8vIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCmluZGV4IDFkODRkNGRiODRhZmZhZDI2NjQ1MDhkMWE1Y2VlZGIzNDk1MTUzY2YuLmEyZjdl
MDI1MmY5NzQwMzlkZmFmNTkzY2Y1MDJhNDkzNjE3YzZiOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTEwMDEsNiArMTAwMSw3IEBAIHB1YmxpYzoK
IAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgdm9pZCBpbnNlcnRBdHRhY2ht
ZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgc3Rk
OjpvcHRpb25hbDxTdHJpbmc+IGNvbnRlbnRUeXBlLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
LCBDYWxsYmFja0lEKTsKKyAgICB2b2lkIHJlcXVlc3RBdHRhY2htZW50RGF0YShjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIsIENhbGxiYWNrSUQpOwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xMTA2
LDYgKzExMDcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzdG9yZVNlc3Npb24oY29uc3QgVmVj
dG9yPEJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZT4mKTsKICAgICB2b2lkIGRpZFJlbW92ZUJhY2tG
b3J3YXJkSXRlbSh1aW50NjRfdCk7CiAKKyAgICB2b2lkIGludm9rZVNoYXJlZEJ1ZmZlckNhbGxi
YWNrKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYsIENhbGxiYWNrSUQpOworCiAjaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgdm9pZCBzZXRBbGxvd3NSZW1vdGVJbnNwZWN0
aW9uKGJvb2wpOwogICAgIHZvaWQgc2V0UmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZShjb25z
dCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDFiMjhkMWE2ZmEyYTZiZTAxMTg2YTQ3NDIzY2JkNDc3
MmNmYTkzMTkuLjZkN2I2ZWQ2MjYzNTk2ZTg2OWYzYTRhN2VjNDQ5NzE1MzZjYTg3NzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbgpAQCAtNDg3LDUgKzQ4Nyw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2
ZXIgewogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBJbnNlcnRBdHRhY2ht
ZW50KFN0cmluZyBpZGVudGlmaWVyLCBTdHJpbmcgZmlsZW5hbWUsIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBjb250ZW50VHlwZSwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEsIFdlYktpdDo6Q2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQorICAgIFJlcXVlc3RBdHRhY2htZW50RGF0YShTdHJpbmcgaWRlbnRp
ZmllciwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAjZW5kaWYKIH0KZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmYTI5MTUxMjE1MDdm
ZGNlYTBhMWZlN2RkYWIxOGJkMDVjZGE5MjVjLi44NDY4ZmM0NmViMDdkYzkxZjMyZTM4NzA3Zjk3
OTAwNjA4MWM4NzIwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTctMTEtMTIgIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0F0dGFjaG1lbnQgU3VwcG9ydF0gSW1wbGVt
ZW50IFNQSSBmb3IgY2xpZW50cyB0byByZXF1ZXN0IGRhdGEgZm9yIGEgZ2l2ZW4gYXR0YWNobWVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NTg2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTM1NTcyMD4KKworICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KKworICAgICAgICBBdWdtZW50cyBleGlzdGluZyBBUEkgdGVzdHMgaW4g
V0tBdHRhY2htZW50VGVzdHMgdG8gYWRkaXRpb25hbGx5IGNoZWNrIHRoYXQgLXJlcXVlc3REYXRh
OiB5aWVsZHMgdGhlIGNvcnJlY3QKKyAgICAgICAgcmVzdWx0IHdoZW4gcGVyZm9ybWluZyB2YXJp
b3VzIGVkaXRpbmcgb3BlcmF0aW9ucy4gQWxzbyBhZGRzIGEgbmV3IEFQSSB0ZXN0IHRoYXQgY3V0
cyBhbmQgcGFzdGVzIGFuIGF0dGFjaG1lbnQKKyAgICAgICAgaW5zZXJ0ZWQgdXNpbmcgV0tXZWJW
aWV3IGF0dGFjaG1lbnQgU1BJLCBhbmQgZXhwZWN0cyB0aGF0IHRoZSBkYXRhIG9mIHRoZSBhdHRh
Y2htZW50IGNhbiBzdGlsbCBiZSBmZXRjaGVkIHVzaW5nCisgICAgICAgIHRoZSBfV0tBdHRhY2ht
ZW50IFNQSSwgYXMgd2VsbCBhcyBhbm90aGVyIHRlc3QgdGhhdCBpbnNlcnRzIGFuIGVtcHR5IE5T
RGF0YSBhbmQgZXhwZWN0cyB0aGF0IHJlcXVlc3REYXRhOiBhbHNvCisgICAgICAgIHlpZWxkcyBh
biBlbXB0eSBOU0RhdGEgcmVzdWx0LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbToKKyAgICAgICAgKC1bTlNEYXRhIHNob3J0
RGVzY3JpcHRpb25dKToKKyAgICAgICAgKC1bX1dLQXR0YWNobWVudCBzeW5jaHJvbm91c2x5UmVx
dWVzdERhdGE6XSk6CisgICAgICAgICgtW19XS0F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0
YVRvQmU6XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0xMS0xMCAg
V2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBGaW5pc2gg
cm9sbGluZyBvdXQgcjIyNDU0NApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0KaW5kZXggZjRiZmUxMDMwMTU1
MzkzNjI1NTAwYTIzZDgzMTFiMjhiMWI5MmZlYy4uMjBkMTJjMTk2YjBjMjNkNDI3ODkzNWIxMGY3
NWIzYzQyOWM2ZmE1MyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCkBAIC0xNzcsNiArMTc3LDUwIEBA
IC0gKHZvaWQpZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDooTlNTdHJpbmcgKiljb21tYW5kIHdp
dGhBcmd1bWVudDooTlNTdHJpbmcgKilhCiAKIEBlbmQKIAorQGltcGxlbWVudGF0aW9uIE5TRGF0
YSAoQXR0YWNobWVudFRlc3RpbmcpCisKKy0gKE5TU3RyaW5nICopc2hvcnREZXNjcmlwdGlvbgor
eworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwldHUgYnl0ZXM+Iiwg
c2VsZi5sZW5ndGhdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdHRhY2htZW50
IChBdHRhY2htZW50VGVzdGluZykKKworLSAoTlNEYXRhICopc3luY2hyb25vdXNseVJlcXVlc3RE
YXRhOihOU0Vycm9yICoqKWVycm9yCit7CisgICAgX19ibG9jayBSZXRhaW5QdHI8TlNEYXRhPiBy
ZXN1bHQ7CisgICAgX19ibG9jayBSZXRhaW5QdHI8TlNFcnJvcj4gcmVzdWx0RXJyb3I7CisgICAg
X19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbc2VsZiByZXF1ZXN0RGF0YTpeKE5TRGF0
YSAqZGF0YSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgcmVzdWx0ID0gcmV0YWluUHRyKGRh
dGEpOworICAgICAgICByZXN1bHRFcnJvciA9IHJldGFpblB0cihlcnJvcik7CisgICAgICAgIGRv
bmUgPSB0cnVlOworICAgIH1dOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKKworICAgIGlmIChlcnJvcikKKyAgICAgICAgKmVycm9yID0gcmVzdWx0RXJyb3IuYXV0b3Jl
bGVhc2UoKTsKKworICAgIHJldHVybiByZXN1bHQuYXV0b3JlbGVhc2UoKTsKK30KKworLSAodm9p
ZClleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTooTlNEYXRhICopZXhwZWN0ZWREYXRhCit7CisgICAg
TlNFcnJvciAqZGF0YVJlcXVlc3RFcnJvciA9IG5pbDsKKyAgICBOU0RhdGEgKm9ic2VydmVkRGF0
YSA9IFtzZWxmIHN5bmNocm9ub3VzbHlSZXF1ZXN0RGF0YTomZGF0YVJlcXVlc3RFcnJvcl07Cisg
ICAgQk9PTCBvYnNlcnZlZERhdGFJc0VxdWFsVG9FeHBlY3RlZERhdGEgPSBbb2JzZXJ2ZWREYXRh
IGlzRXF1YWxUb0RhdGE6ZXhwZWN0ZWREYXRhXSB8fCBvYnNlcnZlZERhdGEgPT0gZXhwZWN0ZWRE
YXRhOworICAgIEVYUEVDVF9UUlVFKG9ic2VydmVkRGF0YUlzRXF1YWxUb0V4cGVjdGVkRGF0YSk7
CisgICAgaWYgKCFvYnNlcnZlZERhdGFJc0VxdWFsVG9FeHBlY3RlZERhdGEpIHsKKyAgICAgICAg
TlNMb2coQCJFeHBlY3RlZCBkYXRhOiAlQCBidXQgb2JzZXJ2ZWQ6ICVAIGZvciAlQCIsIFtleHBl
Y3RlZERhdGEgc2hvcnREZXNjcmlwdGlvbl0sIFtvYnNlcnZlZERhdGEgc2hvcnREZXNjcmlwdGlv
bl0sIHNlbGYpOworICAgICAgICBOU0xvZyhAIk9ic2VydmVkIGVycm9yOiAlQCB3aGlsZSByZWFk
aW5nIGRhdGEgZm9yICVAIiwgZGF0YVJlcXVlc3RFcnJvciwgc2VsZik7CisgICAgfQorfQorCitA
ZW5kCisKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVTVChXS0F0dGFjaG1lbnRUZXN0
cywgQXR0YWNobWVudEVsZW1lbnRJbnNlcnRpb24pCkBAIC0xOTMsNiArMjM3LDkgQEAgVEVTVChX
S0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudEVsZW1lbnRJbnNlcnRpb24pCiAgICAgICAgIEVY
UEVDVF9XS19TVFJFUShAIjM4IGJ5dGVzIiwgW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInN1
YnRpdGxlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKICAgICAgICAgb2JzZXJ2
ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsgZmlyc3RBdHRhY2htZW50LmdldCgp
IF0pOwogICAgIH0KKworICAgIFtmaXJzdEF0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRv
QmU6dGVzdEhUTUxEYXRhKCldOworCiAgICAgewogICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVw
ZGF0ZXNGb3JTY29wZSBzY29wZSh3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgLy8gU2luY2Ugbm8g
Y29udGVudCB0eXBlIGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBjb21wdXRlIGl0IGZyb20gdGhl
IGZpbGUgZXh0ZW5zaW9uLgpAQCAtMjAzLDYgKzI1MCw5IEBAIFRFU1QoV0tBdHRhY2htZW50VGVz
dHMsIEF0dGFjaG1lbnRFbGVtZW50SW5zZXJ0aW9uKQogICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
QCIzNyBLQiIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJzdWJ0aXRsZSIgZm9yUXVlcnlT
ZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CiAgICAgICAgIHNjb3BlLmV4cGVjdEF0dGFjaG1lbnRV
cGRhdGVzKEBbIGZpcnN0QXR0YWNobWVudC5nZXQoKSBdLCBAWyBzZWNvbmRBdHRhY2htZW50Lmdl
dCgpIF0pOwogICAgIH0KKworICAgIFtmaXJzdEF0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0
YVRvQmU6bmlsXTsKKyAgICBbc2Vjb25kQXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9C
ZTp0ZXN0SW1hZ2VEYXRhKCldOwogfQogCiBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2ht
ZW50VXBkYXRlc1doZW5JbnNlcnRpbmdBbmREZWxldGluZ05ld2xpbmUpCkBAIC0yMTgsMTIgKzI2
OCwxOCBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5JbnNl
cnRpbmdBbmREZWxldGluZ05ld2xpbmUpCiAgICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVy
Q29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3Zh
bHM6QFtdIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOwogICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5jb2xsYXBzZShkb2N1bWVudC5ib2R5
KSJdOwogICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJJbnNlcnRQYXJh
Z3JhcGgiIHdpdGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhwZWN0ZWRJbnNl
cnRpb25zOkBbXV07CisKKyAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5kOkAi
RGVsZXRlQmFja3dhcmQiIHdpdGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhw
ZWN0ZWRJbnNlcnRpb25zOkBbXV07CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0
YVRvQmU6dGVzdEhUTUxEYXRhKCldOworCiAgICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVy
Q29tbWFuZDpAIkRlbGV0ZUZvcndhcmQiIHdpdGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFs
czpAW2F0dGFjaG1lbnQuZ2V0KCldIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOworICAgIFthdHRh
Y2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOm5pbF07CiB9CiAKIFRFU1QoV0tBdHRhY2ht
ZW50VGVzdHMsIEF0dGFjaG1lbnRVcGRhdGVzV2hlblVuZG9pbmdBbmRSZWRvaW5nKQogewogICAg
IGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKKyAgICBSZXRh
aW5QdHI8TlNEYXRhPiBodG1sRGF0YSA9IHJldGFpblB0cih0ZXN0SFRNTERhdGEoKSk7CiAgICAg
UmV0YWluUHRyPF9XS0F0dGFjaG1lbnQ+IGF0dGFjaG1lbnQ7CiAgICAgewogICAgICAgICBPYnNl
cnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKQEAg
LTIzMSwxMCArMjg3LDE5IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEF0dGFjaG1lbnRVcGRh
dGVzV2hlblVuZG9pbmdBbmRSZWRvaW5nKQogICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2ht
ZW50VXBkYXRlcyhAWyBdLCBAW2F0dGFjaG1lbnQuZ2V0KCldKTsKICAgICB9CiAgICAgW3dlYlZp
ZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIlVuZG8iIHdpdGhBcmd1bWVudDpuaWwgZXhw
ZWN0ZWRSZW1vdmFsczpAW2F0dGFjaG1lbnQuZ2V0KCldIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11d
OworICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOm5pbF07CisKICAgICBb
d2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5kOkAiUmVkbyIgd2l0aEFyZ3VtZW50Om5p
bCBleHBlY3RlZFJlbW92YWxzOkBbXSBleHBlY3RlZEluc2VydGlvbnM6QFthdHRhY2htZW50Lmdl
dCgpXV07CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6aHRtbERhdGEu
Z2V0KCldOworCiAgICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIkRlbGV0
ZUJhY2t3YXJkIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFthdHRhY2htZW50
LmdldCgpXSBleHBlY3RlZEluc2VydGlvbnM6QFtdXTsKKyAgICBbYXR0YWNobWVudCBleHBlY3RS
ZXF1ZXN0ZWREYXRhVG9CZTpuaWxdOworCiAgICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVy
Q29tbWFuZDpAIlVuZG8iIHdpdGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhw
ZWN0ZWRJbnNlcnRpb25zOkBbYXR0YWNobWVudC5nZXQoKV1dOworICAgIFthdHRhY2htZW50IGV4
cGVjdFJlcXVlc3RlZERhdGFUb0JlOmh0bWxEYXRhLmdldCgpXTsKKwogICAgIFt3ZWJWaWV3IGV4
cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJSZWRvIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVk
UmVtb3ZhbHM6QFthdHRhY2htZW50LmdldCgpXSBleHBlY3RlZEluc2VydGlvbnM6QFtdXTsKKyAg
ICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpuaWxdOwogfQogCiBURVNUKFdL
QXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5DaGFuZ2luZ0ZvbnRTdHlsZXMp
CkBAIC0yNTIsOSArMzE3LDExIEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEF0dGFjaG1lbnRV
cGRhdGVzV2hlbkNoYW5naW5nRm9udFN0eWxlcykKICAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVz
QWZ0ZXJDb21tYW5kOkAiVG9nZ2xlQm9sZCIgd2l0aEFyZ3VtZW50Om5pbCBleHBlY3RlZFJlbW92
YWxzOkBbXSBleHBlY3RlZEluc2VydGlvbnM6QFtdXTsKICAgICBbd2ViVmlldyBleHBlY3RVcGRh
dGVzQWZ0ZXJDb21tYW5kOkAiVG9nZ2xlSXRhbGljIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVk
UmVtb3ZhbHM6QFtdIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOwogICAgIFt3ZWJWaWV3IGV4cGVj
dFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJUb2dnbGVVbmRlcmxpbmUiIHdpdGhBcmd1bWVudDpuaWwg
ZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhwZWN0ZWRJbnNlcnRpb25zOkBbXV07CisgICAgW2F0dGFj
aG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6dGVzdEhUTUxEYXRhKCldOwogCiAgICAgLy8g
SW5zZXJ0aW5nIHRleHQgc2hvdWxkIGRlbGV0ZSB0aGUgY3VycmVudCBzZWxlY3Rpb24sIHJlbW92
aW5nIHRoZSBhdHRhY2htZW50IGluIHRoZSBwcm9jZXNzLgogICAgIFt3ZWJWaWV3IGV4cGVjdFVw
ZGF0ZXNBZnRlckNvbW1hbmQ6QCJJbnNlcnRUZXh0IiB3aXRoQXJndW1lbnQ6QCJmb28iIGV4cGVj
dGVkUmVtb3ZhbHM6QFthdHRhY2htZW50LmdldCgpXSBleHBlY3RlZEluc2VydGlvbnM6QFtdXTsK
KyAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpuaWxdOwogfQogCiBURVNU
KFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5JbnNlcnRpbmdMaXN0cykK
QEAgLTI3MSw2ICszMzgsNyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBk
YXRlc1doZW5JbnNlcnRpbmdMaXN0cykKICAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJD
b21tYW5kOkAiSW5zZXJ0T3JkZXJlZExpc3QiIHdpdGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1v
dmFsczpAW10gZXhwZWN0ZWRJbnNlcnRpb25zOkBbXV07CiAgICAgW3dlYlZpZXcgZXhwZWN0VXBk
YXRlc0FmdGVyQ29tbWFuZDpAIkluc2VydFVub3JkZXJlZExpc3QiIHdpdGhBcmd1bWVudDpuaWwg
ZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhwZWN0ZWRJbnNlcnRpb25zOkBbXV07CiAgICAgW3dlYlZp
ZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIkluc2VydFVub3JkZXJlZExpc3QiIHdpdGhB
cmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhwZWN0ZWRJbnNlcnRpb25zOkBbXV07
CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6dGVzdEhUTUxEYXRhKCld
OwogfQogCiBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5JbnNl
cnRpbmdSaWNoTWFya3VwKQpAQCAtMjg5LDYgKzM1Nyw3OSBAQCBURVNUKFdLQXR0YWNobWVudFRl
c3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5JbnNlcnRpbmdSaWNoTWFya3VwKQogICAgICAgICBb
d2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CiAgICAgICAgIG9ic2VydmVy
LmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbYXR0YWNobWVudC5nZXQoKV0sIEBbIF0pOwogICAg
IH0KKyAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpuaWxdOworfQorCitU
RVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5DdXR0aW5nQW5kUGFz
dGluZykKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRz
KCk7CisgICAgUmV0YWluUHRyPF9XS0F0dGFjaG1lbnQ+IGF0dGFjaG1lbnQ7CisgICAgeworICAg
ICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3Lmdl
dCgpKTsKKyAgICAgICAgYXR0YWNobWVudCA9IHJldGFpblB0cihbd2ViVmlldyBzeW5jaHJvbm91
c2x5SW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlbmFtZTpAImZvby50eHQiIGNvbnRlbnRUeXBlOkAi
dGV4dC9wbGFpbiIgZGF0YTp0ZXN0SFRNTERhdGEoKSBvcHRpb25zOm5pbF0pOworICAgICAgICBv
YnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAW10sIEBbYXR0YWNobWVudC5nZXQoKV0p
OworICAgIH0KKyAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTp0ZXN0SFRN
TERhdGEoKV07CisgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6
QCJTZWxlY3RBbGwiIGFyZ3VtZW50Om5pbF07CisgICAgeworICAgICAgICBPYnNlcnZlQXR0YWNo
bWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgW3dl
YlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJDdXQiIGFyZ3VtZW50Om5p
bF07CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbYXR0YWNobWVu
dC5nZXQoKV0sIEBbXSk7CisgICAgfQorICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERh
dGFUb0JlOm5pbF07CisgICAgeworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JT
Y29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9u
b3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJQYXN0ZSIgYXJndW1lbnQ6bmlsXTsKKyAgICAgICAg
b2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFtdLCBAW2F0dGFjaG1lbnQuZ2V0KCld
KTsKKyAgICB9CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6dGVzdEhU
TUxEYXRhKCldOworfQorCitURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50RGF0YUZv
ckVtcHR5RmlsZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFj
aG1lbnRzKCk7CisgICAgUmV0YWluUHRyPF9XS0F0dGFjaG1lbnQ+IGF0dGFjaG1lbnQ7CisgICAg
eworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJW
aWV3LmdldCgpKTsKKyAgICAgICAgYXR0YWNobWVudCA9IHJldGFpblB0cihbd2ViVmlldyBzeW5j
aHJvbm91c2x5SW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlbmFtZTpAImVtcHR5LnR4dCIgY29udGVu
dFR5cGU6QCJ0ZXh0L3BsYWluIiBkYXRhOltOU0RhdGEgZGF0YV0gb3B0aW9uczpuaWxdKTsKKyAg
ICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFtdLCBAW2F0dGFjaG1lbnQu
Z2V0KCldKTsKKyAgICB9CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6
W05TRGF0YSBkYXRhXV07CisgICAgeworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNG
b3JTY29wZSBzY29wZSh3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9u
b3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgYXJndW1lbnQ6bmlsXTsK
KyAgICAgICAgc2NvcGUuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFthdHRhY2htZW50LmdldCgp
XSwgQFtdKTsKKyAgICB9CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6
bmlsXTsKK30KKworVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgTXVsdGlwbGVTaW11bHRhbmVvdXNB
dHRhY2htZW50RGF0YVJlcXVlc3RzKQoreworICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JU
ZXN0aW5nQXR0YWNobWVudHMoKTsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBodG1sRGF0YSA9IHRl
c3RIVE1MRGF0YSgpOworICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBhdHRhY2htZW50Owor
ICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIo
d2ViVmlldy5nZXQoKSk7CisgICAgICAgIGF0dGFjaG1lbnQgPSByZXRhaW5QdHIoW3dlYlZpZXcg
c3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRoRmlsZW5hbWU6QCJmb28udHh0IiBjb250
ZW50VHlwZTpAInRleHQvcGxhaW4iIGRhdGE6aHRtbERhdGEuZ2V0KCkgb3B0aW9uczpuaWxdKTsK
KyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFtdLCBAW2F0dGFjaG1l
bnQuZ2V0KCldKTsKKyAgICB9CisgICAgX19ibG9jayBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhRm9y
Rmlyc3RSZXF1ZXN0OworICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUZvclNlY29u
ZFJlcXVlc3Q7CisgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbYXR0YWNobWVu
dCByZXF1ZXN0RGF0YTpeKE5TRGF0YSAqZGF0YSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAg
RVhQRUNUX1RSVUUoIWVycm9yKTsKKyAgICAgICAgZGF0YUZvckZpcnN0UmVxdWVzdCA9IHJldGFp
blB0cihkYXRhKTsKKyAgICB9XTsKKyAgICBbYXR0YWNobWVudCByZXF1ZXN0RGF0YTpeKE5TRGF0
YSAqZGF0YSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWVycm9yKTsK
KyAgICAgICAgZGF0YUZvclNlY29uZFJlcXVlc3QgPSByZXRhaW5QdHIoZGF0YSk7CisgICAgICAg
IGRvbmUgPSB0cnVlOworICAgIH1dOworCisgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVY
UEVDVF9UUlVFKFtkYXRhRm9yRmlyc3RSZXF1ZXN0IGlzRXF1YWxUb0RhdGE6aHRtbERhdGEuZ2V0
KCldKTsKKyAgICBFWFBFQ1RfVFJVRShbZGF0YUZvclNlY29uZFJlcXVlc3QgaXNFcXVhbFRvRGF0
YTpodG1sRGF0YS5nZXQoKV0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>