<?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>220509</bug_id>
          
          <creation_ts>2021-01-11 06:30:32 -0800</creation_ts>
          <short_desc>[SOUP] Stop using SoupRequest API to load files in preparation for libsoup3</short_desc>
          <delta_ts>2021-02-03 21:03:47 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=220981</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=221127</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=221379</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>220508</blocked>
    
    <blocked>220764</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jbedard</cc>
    
    <cc>jenner</cc>
    
    <cc>pgriffis</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1718671</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-01-11 06:30:32 -0800</bug_when>
    <thetext>SoupRequest API is gone in libsoup3 and there&apos;s no replacement for file requests. GResource and data URI loads already happen in the web process so we only need to care about file and directory loads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718673</commentid>
    <comment_count>1</comment_count>
      <attachid>417376</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-01-11 06:41:53 -0800</bug_when>
    <thetext>Created attachment 417376
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720538</commentid>
    <comment_count>2</comment_count>
      <attachid>417376</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-01-19 09:00:31 -0800</bug_when>
    <thetext>Comment on attachment 417376
Patch

Patch looks good overall, but I have a few comments, could you please take
a look at them below? Thanks!

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

&gt; Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp:259
&gt; +        else if (m_file) {

I checked the code a bit, and IIUC it looks like only one of m_inputStream,
m_multipartInputStream, m_soupRequest, or m_file can be valid at a time. It
would be nice to convert this to use std::variant&lt;…&gt; at some point — but of
course that&apos;s out of the scope of this patch, and we would need to build in
C++17 mode first 🤷️

&gt; Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp:1182
&gt; +    if (file != task-&gt;m_file.get())

As far as I can see, this could be an ASSERT(file == task-&gt;m_file.get())
because the callback is only used above (in line 247) where m_file.get()
is passed to g_file_query_info_async().

The only case in which m_file.get() could be different is after a call
to ::clearRequest(), as done below, but at this point here the pointer
should always be valid because the request has not been cleared yet.

&gt; Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp:1200
&gt; +    g_file_read_async(file, RunLoopSourcePriority::AsyncIONetwork, task-&gt;m_cancellable.get(), reinterpret_cast&lt;GAsyncReadyCallback&gt;(readFileCallback), protectedThis.leakRef());

This will try to read the file even if g_file_query_info_finish() fails.
Do I understand correctly that the idea is to try to read the file anyway
and let it fail, to avoid duplicating the code to handle read errors here?
If that&apos;s the case, a one-line comment explaining this will be handy for
whoever needs to read this code in the future.

&gt; Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp:1222
&gt; +    if (file != task-&gt;m_file.get())

Same here, this could be an ASSERT().

&gt; Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp:1247
&gt; +    if (file != task-&gt;m_file.get())

And here, this could be an ASSERT() as well.

&gt; Source/WebKit/NetworkProcess/soup/Resources/directory.css:1
&gt; +:root {

Does this CSS file also come from the Firefox directory listing code?
At least we should have a comment here stating the license for this file.

&gt; Source/WebKit/NetworkProcess/soup/WebKitDirectoryInputStream.cpp:46
&gt; +        &quot;&lt;html&gt;&lt;head&gt;&quot;                                                  \

The backslashes at the end of line are not needed, the preprocessor will
happily paste strings together into a single one across multiple lines.

&gt; Source/WebKit/NetworkProcess/soup/WebKitDirectoryInputStream.cpp:101
&gt; +        &quot;&lt;tr&gt;&quot;                                                          \

Same here, the backslashes are not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720858</commentid>
    <comment_count>3</comment_count>
      <attachid>417376</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-01-20 04:58:38 -0800</bug_when>
    <thetext>Comment on attachment 417376
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp:259
&gt;&gt; +        else if (m_file) {
&gt; 
&gt; I checked the code a bit, and IIUC it looks like only one of m_inputStream,
&gt; m_multipartInputStream, m_soupRequest, or m_file can be valid at a time. It
&gt; would be nice to convert this to use std::variant&lt;…&gt; at some point — but of
&gt; course that&apos;s out of the scope of this patch, and we would need to build in
&gt; C++17 mode first 🤷️

Well, we have Variant in WTF, but that would be out of scope of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720861</commentid>
    <comment_count>4</comment_count>
      <attachid>417960</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-01-20 05:15:19 -0800</bug_when>
    <thetext>Created attachment 417960
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722066</commentid>
    <comment_count>5</comment_count>
      <attachid>417960</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-01-25 07:16:19 -0800</bug_when>
    <thetext>Comment on attachment 417960
Patch

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

&gt; Source/WebKit/NetworkProcess/soup/Resources/directory.css:1
&gt; +:root {

Could we at least add a comment mentioning that this file comes from
libsoup and that therefore it&apos;s assumed that it has a license compatible
with WebKit&apos;s?

Other than this detail, I think the patch can be landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722446</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-01-26 03:49:30 -0800</bug_when>
    <thetext>Committed r271879: &lt;https://trac.webkit.org/changeset/271879&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722767</commentid>
    <comment_count>7</comment_count>
    <who name="Robert Jenner">jenner</who>
    <bug_when>2021-01-26 16:11:40 -0800</bug_when>
    <thetext>Changes in r271879 have caused test:

fast/selectors/selection-window-inactive-text-shadow.html

to flakey fail.


Tracking in:

https://bugs.webkit.org/show_bug.cgi?id=221011</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417376</attachid>
            <date>2021-01-11 06:41:53 -0800</date>
            <delta_ts>2021-01-20 05:15:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-soup-file-request.diff</filename>
            <type>text/plain</type>
            <size>37524</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nCmluZGV4IDU3YjQyZjZhNzg3
Yy4uMDkxNDljNDA1MGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
cG8vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0wMS0xMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIFN0b3AgdXNpbmcgU291cFJlcXVl
c3QgQVBJIHRvIGxvYWQgZmlsZXMgaW4gcHJlcGFyYXRpb24gZm9yIGxpYnNvdXAzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MDkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBPVEZJTEVTLmluOiBB
ZGQgV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0uY3BwCisKIDIwMjAtMDktMTggIFJhZmFlbCBG
b250ZW5lbGxlICA8cmFmYWVsZmZAZ25vbWUub3JnPgogCiAgICAgICAgIFtsMTBuXSBbcHRfQlJd
IFVwZGF0ZWQgQnJhemlsaWFuIFBvcnR1Z3Vlc2UgdHJhbnNsYXRpb24KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbiBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbgppbmRleCBlNGNhMzNhYWYyMWQuLjgyMTJiZjJj
Yzk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJTEVT
LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbgpAQCAt
NCw2ICs0LDcgQEAgTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKIC4uL25ldHdvcmsvc291cC9OZXR3
b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcAogLi4vLi4vZWRpdGluZy9FZGl0QWN0aW9uLmNwcAog
Li4vLi4vLi4vSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDT3B0aW9ucy5jcHAKKy4uLy4uLy4u
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtLmNw
cAogLi4vLi4vLi4vV2ViS2l0L1NoYXJlZC9BUEkvZ2xpYi9XZWJLaXRIaXRUZXN0UmVzdWx0LmNw
cAogLi4vLi4vLi4vV2ViS2l0L1NoYXJlZC9BUEkvZ2xpYi9XZWJLaXRVUklSZXF1ZXN0LmNwcAog
Li4vLi4vLi4vV2ViS2l0L1NoYXJlZC9BUEkvZ2xpYi9XZWJLaXRVUklSZXNwb25zZS5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggODJiN2FmMjgwYzIzLi5lZTFlOGFkNWVhNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NDQgQEAKKzIwMjEtMDEtMTEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtTT1VQXSBTdG9wIHVzaW5nIFNvdXBSZXF1ZXN0IEFQSSB0byBsb2Fk
IGZpbGVzIGluIHByZXBhcmF0aW9uIGZvciBsaWJzb3VwMworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU291cFJlcXVlc3QgQVBJIGlzIGdvbmUgaW4gbGli
c291cDMgYW5kIHRoZXJlJ3Mgbm8gcmVwbGFjZW1lbnQgZm9yIGZpbGUgcmVxdWVzdHMuIEdSZXNv
dXJjZSBhbmQgZGF0YSBVUkkgbG9hZHMKKyAgICAgICAgYWxyZWFkeSBoYXBwZW4gaW4gdGhlIHdl
YiBwcm9jZXNzIHNvIHdlIG9ubHkgbmVlZCB0byBjYXJlIGFib3V0IGZpbGUgYW5kIGRpcmVjdG9y
eSBsb2Fkcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNr
U291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZVJl
cXVlc3QpOiBDcmVhdGUgYSBHRmlsZSBmb3IgbG9jYWwgZmlsZXMuCisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmNsZWFyUmVxdWVzdCk6IENsZWFyIHRoZSBtX2ZpbGUuCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OnJlc3VtZSk6IENoZWNrIGFsc28g
aWYgdGhlcmUncyBhIGZpbGUgb3BlcmF0aW9uIHRvIHJlc3VtZS4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkU2VuZFJlcXVlc3QpOiBXZSBhbHdheXMgaGF2ZSBhIHNv
dXAgbWVzc2FnZSBub3cgaGVyZSBiZWNhdXNlIFNvdXBSZXF1ZXN0IGlzCisgICAgICAgIG9ubHkg
dXNlZCBmb3IgSFRUUC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6cmVh
ZENhbGxiYWNrKTogSW4gY2FzZSBvZiBmYWlsdXJlIGNoZWNrIGlmIHRoaXMgaXMgYW4gSFRUUCBv
ciBmaWxlIHJlcXVlc3QgdG8KKyAgICAgICAgY3JlYXRlIHRoZSBlcnJvci4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZmlsZVF1ZXJ5SW5mb0NhbGxiYWNrKTogQ2FsbCBk
aWRHZXRGaWxlSW5mbygpIGFuZCBjb250aW51ZSByZWFkaW5nIHRoZSBmaWxlIG9yIGRpcmVjdG9y
eS4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkR2V0RmlsZUluZm8p
OiBTZXQgVVJMLCBjb250ZW50IHR5cGUgYW5kIGxlbmd0aCBvZiB0aGUgcmVzcG9uc2UgZm9yIHRo
ZSBnaXZlbiBHRmlsZUluZm8uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6
OnJlYWRGaWxlQ2FsbGJhY2spOiBDb21wbGV0ZSB0aGUgZ19maWxlX3JlYWRfYXN5bmMgb3BlcmF0
aW9uLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjplbnVtZXJhdGVGaWxl
Q2hpbGRyZW5DYWxsYmFjayk6IENyZWF0ZSBhIFdlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZWFkRmlsZSk6IFNldCB0
aGUgaW5wdXQgc3RyZWFtIGFuZCBub3RpZnkgdGhlIHJlc3BvbnNlIGlzIHJlYWR5LgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVzb3VyY2VzL2RpcmVjdG9yeS5jc3M6IEFkZGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVzb3VyY2VzL2RpcmVjdG9yeS5qczogQWRkZWQu
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVh
bS5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1DcmVhdGVI
ZWFkZXIpOgorICAgICAgICAod2Via2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1DcmVhdGVGb290ZXIp
OgorICAgICAgICAod2Via2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1DcmVhdGVSb3cpOgorICAgICAg
ICAod2Via2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1SZWFkTmV4dEZpbGUpOgorICAgICAgICAod2Vi
a2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1SZWFkKToKKyAgICAgICAgKHdlYmtpdERpcmVjdG9yeUlu
cHV0U3RyZWFtQ2xvc2UpOgorICAgICAgICAod2Via2l0X2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1f
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXREaXJlY3RvcnlJbnB1dFN0cmVhbU5ldyk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbS5o
OiBBZGRlZC4KKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bVdQRS5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2Vz
V1BFLnR4dDoKKwogMjAyMS0wMS0xMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gU3lzdGVtIGZvbnQgc2NhbGluZyBub3QgYXBwbGll
ZCB0byAnZm9udC1zaXplOiBYWFhwdCcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAppbmRleCBjOTliY2IwNzM2
NmIuLjNjZWI5YzliZTI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcApAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Tb3Vw
LmgiCiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCisjaW5jbHVkZSAiV2ViS2l0RGlyZWN0b3J5SW5w
dXRTdHJlYW0uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTUlN
RVR5cGVSZWdpc3RyeS5oPgpAQCAtMTA3LDYgKzEwOCwxMCBAQCB2b2lkIE5ldHdvcmtEYXRhVGFz
a1NvdXA6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUs
IFNhbgogdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjcmVhdGVSZXF1ZXN0KFJlc291cmNlUmVx
dWVzdCYmIHJlcXVlc3QsIFdhc0Jsb2NraW5nQ29va2llcyB3YXNCbG9ja2luZ0Nvb2tpZXMpCiB7
CiAgICAgbV9jdXJyZW50UmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCk7CisgICAgaWYgKG1fY3Vy
cmVudFJlcXVlc3QudXJsKCkuaXNMb2NhbEZpbGUoKSkgeworICAgICAgICBtX2ZpbGUgPSBhZG9w
dEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChtX2N1cnJlbnRSZXF1ZXN0LnVybCgpLmZpbGVTeXN0
ZW1QYXRoKCkudXRmOCgpLmRhdGEoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAg
R1VuaXF1ZVB0cjxTb3VwVVJJPiBzb3VwVVJJID0gbV9jdXJyZW50UmVxdWVzdC5jcmVhdGVTb3Vw
VVJJKCk7CiAgICAgaWYgKCFzb3VwVVJJKSB7CkBAIC0xMjIsMTEgKzEyNyw2IEBAIHZvaWQgTmV0
d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0
LCBXYXNCbG9ja2luZ0NvCiAKICAgICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZVNvdXBSZXF1ZXN0
KHNvdXBSZXF1ZXN0LmdldCgpKTsKIAotICAgIGlmICghbV9jdXJyZW50UmVxdWVzdC51cmwoKS5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAgbV9zb3VwUmVxdWVzdCA9IFdURk1v
dmUoc291cFJlcXVlc3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gSFRUUCBy
ZXF1ZXN0LgogICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+IHNvdXBNZXNzYWdlID0gYWRvcHRHUmVm
KHNvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlKFNPVVBfUkVRVUVTVF9IVFRQKHNvdXBSZXF1
ZXN0LmdldCgpKSkpOwogICAgIGlmICghc291cE1lc3NhZ2UpIHsKQEAgLTIwMyw2ICsyMDMsNyBA
QCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNsZWFyUmVxdWVzdCgpCiAgICAgc3RvcFRpbWVv
dXQoKTsKICAgICBtX3BlbmRpbmdSZXN1bHQgPSBudWxscHRyOwogICAgIG1fc291cFJlcXVlc3Qg
PSBudWxscHRyOworICAgIG1fZmlsZSA9IG51bGxwdHI7CiAgICAgbV9pbnB1dFN0cmVhbSA9IG51
bGxwdHI7CiAgICAgbV9tdWx0aXBhcnRJbnB1dFN0cmVhbSA9IG51bGxwdHI7CiAgICAgbV9kb3du
bG9hZE91dHB1dFN0cmVhbSA9IG51bGxwdHI7CkBAIC0yNDAsNiArMjQxLDEzIEBAIHZvaWQgTmV0
d29ya0RhdGFUYXNrU291cDo6cmVzdW1lKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAg
IGlmIChtX2ZpbGUgJiYgIW1fY2FuY2VsbGFibGUpIHsKKyAgICAgICAgbV9jYW5jZWxsYWJsZSA9
IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICAgICAgZ19maWxlX3F1ZXJ5X2lu
Zm9fYXN5bmMobV9maWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1RZUEUgIiwi
IEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVOVF9UWVBFICIsIiBHX0ZJTEVfQVRUUklC
VVRFX1NUQU5EQVJEX1NJWkUsCisgICAgICAgICAgICBHX0ZJTEVfUVVFUllfSU5GT19OT05FLCBS
dW5Mb29wU291cmNlUHJpb3JpdHk6OkFzeW5jSU9OZXR3b3JrLCBtX2NhbmNlbGxhYmxlLmdldCgp
LCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGZpbGVRdWVyeUluZm9DYWxs
YmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIGlmIChtX3BlbmRpbmdSZXN1bHQpIHsKICAgICAgICAgR1JlZlB0cjxHQXN5bmNSZXN1
bHQ+IHBlbmRpbmdSZXN1bHQgPSBXVEZNb3ZlKG1fcGVuZGluZ1Jlc3VsdCk7CiAgICAgICAgIGlm
IChtX2lucHV0U3RyZWFtKQpAQCAtMjQ4LDcgKzI1NiwxMiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFz
a1NvdXA6OnJlc3VtZSgpCiAgICAgICAgICAgICByZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayhtX211
bHRpcGFydElucHV0U3RyZWFtLmdldCgpLCBwZW5kaW5nUmVzdWx0LmdldCgpLCBwcm90ZWN0ZWRU
aGlzLmxlYWtSZWYoKSk7CiAgICAgICAgIGVsc2UgaWYgKG1fc291cFJlcXVlc3QpCiAgICAgICAg
ICAgICBzZW5kUmVxdWVzdENhbGxiYWNrKG1fc291cFJlcXVlc3QuZ2V0KCksIHBlbmRpbmdSZXN1
bHQuZ2V0KCksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKLSAgICAgICAgZWxzZQorICAgICAg
ICBlbHNlIGlmIChtX2ZpbGUpIHsKKyAgICAgICAgICAgIGlmIChtX3Jlc3BvbnNlLmV4cGVjdGVk
Q29udGVudExlbmd0aCgpID09IC0xKQorICAgICAgICAgICAgICAgIGVudW1lcmF0ZUZpbGVDaGls
ZHJlbkNhbGxiYWNrKG1fZmlsZS5nZXQoKSwgcGVuZGluZ1Jlc3VsdC5nZXQoKSwgcHJvdGVjdGVk
VGhpcy5sZWFrUmVmKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlYWRG
aWxlQ2FsbGJhY2sobV9maWxlLmdldCgpLCBwZW5kaW5nUmVzdWx0LmdldCgpLCBwcm90ZWN0ZWRU
aGlzLmxlYWtSZWYoKSk7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQogfQpAQCAtMzM5LDM3ICszNTIsMjQgQEAgdm9pZCBOZXR3b3JrRGF0
YVRhc2tTb3VwOjpzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwg
R0FzeW5jUmUKIAogdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRTZW5kUmVxdWVzdChHUmVm
UHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKIHsKLSAgICBpZiAobV9zb3VwTWVzc2Fn
ZSkgewotICAgICAgICBpZiAobV9zaG91bGRDb250ZW50U25pZmYgPT0gQ29udGVudFNuaWZmaW5n
UG9saWN5OjpTbmlmZkNvbnRlbnQgJiYgbV9zb3VwTWVzc2FnZS0+c3RhdHVzX2NvZGUgIT0gU09V
UF9TVEFUVVNfTk9UX01PRElGSUVEKQotICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRTbmlmZmVk
Q29udGVudFR5cGUoc291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUobV9zb3VwUmVxdWVzdC5n
ZXQoKSkpOwotICAgICAgICBtX3Jlc3BvbnNlLnVwZGF0ZUZyb21Tb3VwTWVzc2FnZShtX3NvdXBN
ZXNzYWdlLmdldCgpKTsKLSAgICAgICAgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKS5pc0VtcHR5
KCkgJiYgbV9zb3VwTWVzc2FnZS0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTk9UX01PRElG
SUVEKQotICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5
OjptaW1lVHlwZUZvclBhdGgobV9yZXNwb25zZS51cmwoKS5wYXRoKCkudG9TdHJpbmcoKSkpOwot
Ci0gICAgICAgIGlmIChzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigpKSB7Ci0gICAgICAgICAg
ICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7Ci0gICAgICAgICAgICBza2lw
SW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1fcmVzcG9uc2UuaXNNdWx0aXBhcnQoKSkKLSAgICAgICAgICAg
IG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoc291cF9tdWx0aXBhcnRfaW5wdXRf
c3RyZWFtX25ldyhtX3NvdXBNZXNzYWdlLmdldCgpLCBpbnB1dFN0cmVhbS5nZXQoKSkpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0cmVh
bSk7Ci0KLSAgICAgICAgbV9uZXR3b3JrTG9hZE1ldHJpY3MucmVzcG9uc2VTdGFydCA9IE1vbm90
b25pY1RpbWU6Om5vdygpIC0gbV9zdGFydFRpbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9y
ZXNwb25zZS5zZXRVUkwobV9maXJzdFJlcXVlc3QudXJsKCkpOwotICAgICAgICBjb25zdCBnY2hh
ciogY29udGVudFR5cGUgPSBzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShtX3NvdXBSZXF1
ZXN0LmdldCgpKTsKLSAgICAgICAgbV9yZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5
cGVGcm9tTWVkaWFUeXBlKGNvbnRlbnRUeXBlKSk7Ci0gICAgICAgIG1fcmVzcG9uc2Uuc2V0VGV4
dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsK
LSAgICAgICAgbV9yZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoc291cF9yZXF1ZXN0
X2dldF9jb250ZW50X2xlbmd0aChtX3NvdXBSZXF1ZXN0LmdldCgpKSk7Ci0gICAgICAgIGlmICht
X3Jlc3BvbnNlLm1pbWVUeXBlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9yZXNwb25zZS5z
ZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjptaW1lVHlwZUZvclBhdGgobV9yZXNwb25zZS51
cmwoKS5wYXRoKCkudG9TdHJpbmcoKSkpOworICAgIGlmIChtX3Nob3VsZENvbnRlbnRTbmlmZiA9
PSBDb250ZW50U25pZmZpbmdQb2xpY3k6OlNuaWZmQ29udGVudCAmJiBtX3NvdXBNZXNzYWdlLT5z
dGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQpCisgICAgICAgIG1fcmVzcG9u
c2Uuc2V0U25pZmZlZENvbnRlbnRUeXBlKHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlKG1f
c291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICBtX3Jlc3BvbnNlLnVwZGF0ZUZyb21Tb3VwTWVzc2Fn
ZShtX3NvdXBNZXNzYWdlLmdldCgpKTsKKyAgICBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpLmlz
RW1wdHkoKSAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT1Rf
TU9ESUZJRUQpCisgICAgICAgIG1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoTUlNRVR5cGVSZWdpc3Ry
eTo6bWltZVR5cGVGb3JQYXRoKG1fcmVzcG9uc2UudXJsKCkucGF0aCgpLnRvU3RyaW5nKCkpKTsK
IAorICAgIGlmIChzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigpKSB7CiAgICAgICAgIG1faW5w
dXRTdHJlYW0gPSBXVEZNb3ZlKGlucHV0U3RyZWFtKTsKKyAgICAgICAgc2tpcElucHV0U3RyZWFt
Rm9yUmVkaXJlY3Rpb24oKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChtX3Jl
c3BvbnNlLmlzTXVsdGlwYXJ0KCkpCisgICAgICAgIG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0gPSBh
ZG9wdEdSZWYoc291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFtX25ldyhtX3NvdXBNZXNzYWdlLmdl
dCgpLCBpbnB1dFN0cmVhbS5nZXQoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9pbnB1dFN0cmVh
bSA9IFdURk1vdmUoaW5wdXRTdHJlYW0pOworCisgICAgbV9uZXR3b3JrTG9hZE1ldHJpY3MucmVz
cG9uc2VTdGFydCA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9zdGFydFRpbWU7CiAgICAgZGlz
cGF0Y2hEaWRSZWNlaXZlUmVzcG9uc2UoKTsKIH0KIApAQCAtNzU3LDkgKzc1NywxNCBAQCB2b2lk
IE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3Ry
ZWFtLCBHQXN5bmNSZXN1bHQqCiAKICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CiAg
ICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGlucHV0U3Ry
ZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgaWYgKGVycm9yKQotICAgICAgICB0
YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6OmdlbmVyaWNHRXJyb3IoZXJyb3IuZ2V0KCksIHRh
c2stPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKLSAgICBlbHNlIGlmIChieXRlc1JlYWQgPiAwKQor
ICAgIGlmIChlcnJvcikgeworICAgICAgICBpZiAodGFzay0+bV9zb3VwUmVxdWVzdCkKKyAgICAg
ICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6Z2VuZXJpY0dFcnJvcihlcnJvci5n
ZXQoKSwgdGFzay0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICBlbHNlIGlmICh0YXNr
LT5tX2ZpbGUpCisgICAgICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3IoZ19xdWFy
a190b19zdHJpbmcoZXJyb3ItPmRvbWFpbiksIGVycm9yLT5jb2RlLCB0YXNrLT5tX2ZpcnN0UmVx
dWVzdC51cmwoKSwgU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9IGVs
c2UgaWYgKGJ5dGVzUmVhZCA+IDApCiAgICAgICAgIHRhc2stPmRpZFJlYWQoYnl0ZXNSZWFkKTsK
ICAgICBlbHNlCiAgICAgICAgIHRhc2stPmRpZEZpbmlzaFJlYWQoKTsKQEAgLTExNzEsNSArMTE3
NiwxMDEgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZXN0YXJ0KCkKICAgICBtX25l
dHdvcmtMb2FkTWV0cmljcyA9IHsgfTsKIH0KIAordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpm
aWxlUXVlcnlJbmZvQ2FsbGJhY2soR0ZpbGUqIGZpbGUsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBO
ZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQoreworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tT
b3VwPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7CisgICAgaWYgKGZpbGUgIT0gdGFz
ay0+bV9maWxlLmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodGFzay0+c3RhdGUo
KSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRl
ZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKKyAgICAgICAgdGFzay0+Y2xlYXJSZXF1ZXN0KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoR1JlZlB0cjxHRmlsZUluZm8+IGluZm8g
PSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm9fZmluaXNoKGZpbGUsIHJlc3VsdCwgbnVsbHB0
cikpKSB7CisgICAgICAgIHRhc2stPmRpZEdldEZpbGVJbmZvKGluZm8uZ2V0KCkpOworCisgICAg
ICAgIGlmIChnX2ZpbGVfaW5mb19nZXRfZmlsZV90eXBlKGluZm8uZ2V0KCkpID09IEdfRklMRV9U
WVBFX0RJUkVDVE9SWSkgeworICAgICAgICAgICAgZ19maWxlX2VudW1lcmF0ZV9jaGlsZHJlbl9h
c3luYyhmaWxlLCAiKiIsIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsIFJ1bkxvb3BTb3VyY2VQcmlv
cml0eTo6QXN5bmNJT05ldHdvcmssIHRhc2stPm1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihlbnVtZXJhdGVG
aWxlQ2hpbGRyZW5DYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdfZmlsZV9yZWFkX2FzeW5jKGZp
bGUsIFJ1bkxvb3BTb3VyY2VQcmlvcml0eTo6QXN5bmNJT05ldHdvcmssIHRhc2stPm1fY2FuY2Vs
bGFibGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVhZEZp
bGVDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2tTb3VwOjpkaWRHZXRGaWxlSW5mbyhHRmlsZUluZm8qIGluZm8pCit7CisgICAgbV9y
ZXNwb25zZS5zZXRVUkwobV9maXJzdFJlcXVlc3QudXJsKCkpOworICAgIGlmIChnX2ZpbGVfaW5m
b19nZXRfZmlsZV90eXBlKGluZm8pID09IEdfRklMRV9UWVBFX0RJUkVDVE9SWSkgeworICAgICAg
ICBtX3Jlc3BvbnNlLnNldE1pbWVUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgbV9yZXNwb25z
ZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoLTEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNv
bnN0IGdjaGFyKiBjb250ZW50VHlwZSA9IGdfZmlsZV9pbmZvX2dldF9jb250ZW50X3R5cGUoaW5m
byk7CisgICAgICAgIG1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJvbU1l
ZGlhVHlwZShjb250ZW50VHlwZSkpOworICAgICAgICBtX3Jlc3BvbnNlLnNldFRleHRFbmNvZGlu
Z05hbWUoZXh0cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKGNvbnRlbnRUeXBlKSk7CisgICAgICAg
IGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9yZXNw
b25zZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjptaW1lVHlwZUZvclBhdGgobV9yZXNw
b25zZS51cmwoKS5wYXRoKCkudG9TdHJpbmcoKSkpOworICAgICAgICBtX3Jlc3BvbnNlLnNldEV4
cGVjdGVkQ29udGVudExlbmd0aChnX2ZpbGVfaW5mb19nZXRfc2l6ZShpbmZvKSk7CisgICAgfQor
fQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlYWRGaWxlQ2FsbGJhY2soR0ZpbGUqIGZp
bGUsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQorewor
ICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYo
dGFzayk7CisgICAgaWYgKGZpbGUgIT0gdGFzay0+bV9maWxlLmdldCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2st
PnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKKyAgICAg
ICAgdGFzay0+Y2xlYXJSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6U3VzcGVuZGVkKSB7CisgICAgICAgIEFTU0VSVCgh
dGFzay0+bV9wZW5kaW5nUmVzdWx0KTsKKyAgICAgICAgdGFzay0+bV9wZW5kaW5nUmVzdWx0ID0g
cmVzdWx0OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1VuaXF1ZU91dFB0cjxHRXJy
b3I+IGVycm9yOworICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBpbnB1dFN0cmVhbSA9IGFkb3B0
R1JlZihHX0lOUFVUX1NUUkVBTShnX2ZpbGVfcmVhZF9maW5pc2goZmlsZSwgcmVzdWx0LCAmZXJy
b3Iub3V0UHRyKCkpKSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICB0YXNrLT5kaWRGYWlsKFJl
c291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoZXJyb3ItPmRvbWFpbiksIGVycm9yLT5jb2Rl
LCB0YXNrLT5tX2ZpcnN0UmVxdWVzdC51cmwoKSwgU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVz
c2FnZSkpKTsKKyAgICBlbHNlCisgICAgICAgIHRhc2stPmRpZFJlYWRGaWxlKFdURk1vdmUoaW5w
dXRTdHJlYW0pKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjplbnVtZXJhdGVGaWxl
Q2hpbGRyZW5DYWxsYmFjayhHRmlsZSogZmlsZSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdv
cmtEYXRhVGFza1NvdXAqIHRhc2spCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+
IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBpZiAoZmlsZSAhPSB0YXNrLT5t
X2ZpbGUuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09
IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8
ICF0YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpTdXNw
ZW5kZWQpIHsKKyAgICAgICAgQVNTRVJUKCF0YXNrLT5tX3BlbmRpbmdSZXN1bHQpOworICAgICAg
ICB0YXNrLT5tX3BlbmRpbmdSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR1JlZlB0cjxHRmlsZUVu
dW1lcmF0b3I+IGVudW1lcmF0b3IgPSBhZG9wdEdSZWYoZ19maWxlX2VudW1lcmF0ZV9jaGlsZHJl
bl9maW5pc2goZmlsZSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoZXJyb3Ip
CisgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhl
cnJvci0+ZG9tYWluKSwgZXJyb3ItPmNvZGUsIHRhc2stPm1fZmlyc3RSZXF1ZXN0LnVybCgpLCBT
dHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSkpOworICAgIGVsc2UKKyAgICAgICAgdGFz
ay0+ZGlkUmVhZEZpbGUod2Via2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1OZXcoV1RGTW92ZShlbnVt
ZXJhdG9yKSwgdGFzay0+bV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpKSk7Cit9
CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkUmVhZEZpbGUoR1JlZlB0cjxHSW5wdXRT
dHJlYW0+JiYgaW5wdXRTdHJlYW0pCit7CisgICAgbV9pbnB1dFN0cmVhbSA9IFdURk1vdmUoaW5w
dXRTdHJlYW0pOworICAgIGRpc3BhdGNoRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaAppbmRleCAxY2E0NTA3Y2FkYTUuLjRlYzgw
NWNlZWVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtEYXRhVGFza1NvdXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya0RhdGFUYXNrU291cC5oCkBAIC0xMjYsMTIgKzEyNiwxOSBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyB2b2lkIHJlc3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0Rh
dGFUYXNrU291cCopOwogICAgIHZvaWQgZGlkUmVzdGFydCgpOwogCisgICAgc3RhdGljIHZvaWQg
ZmlsZVF1ZXJ5SW5mb0NhbGxiYWNrKEdGaWxlKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFU
YXNrU291cCopOworICAgIHZvaWQgZGlkR2V0RmlsZUluZm8oR0ZpbGVJbmZvKik7CisgICAgc3Rh
dGljIHZvaWQgcmVhZEZpbGVDYWxsYmFjayhHRmlsZSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtE
YXRhVGFza1NvdXAqKTsKKyAgICBzdGF0aWMgdm9pZCBlbnVtZXJhdGVGaWxlQ2hpbGRyZW5DYWxs
YmFjayhHRmlsZSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2
b2lkIGRpZFJlYWRGaWxlKEdSZWZQdHI8R0lucHV0U3RyZWFtPiYmKTsKKwogICAgIFdlYkNvcmU6
OkZyYW1lSWRlbnRpZmllciBtX2ZyYW1lSUQ7CiAgICAgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIg
bV9wYWdlSUQ7CiAgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpTdXNwZW5kZWQgfTsKICAgICBX
ZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgbV9zaG91bGRDb250ZW50U25pZmY7CiAgICAg
R1JlZlB0cjxTb3VwUmVxdWVzdD4gbV9zb3VwUmVxdWVzdDsKICAgICBHUmVmUHRyPFNvdXBNZXNz
YWdlPiBtX3NvdXBNZXNzYWdlOworICAgIEdSZWZQdHI8R0ZpbGU+IG1fZmlsZTsKICAgICBHUmVm
UHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKICAgICBHUmVmUHRyPFNvdXBNdWx0aXBh
cnRJbnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJbnB1dFN0cmVhbTsKICAgICBHUmVmUHRyPEdDYW5j
ZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc291cC9SZXNvdXJjZXMvZGlyZWN0b3J5LmNzcyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc291cC9SZXNvdXJjZXMvZGlyZWN0b3J5LmNzcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjgyZTg2NTE2YTAxOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9SZXNvdXJjZXMvZGlyZWN0b3J5LmNz
cwpAQCAtMCwwICsxLDcwIEBACis6cm9vdCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNmY1ZjQ7
Cit9CisKK2EgeworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKK2E6aG92ZXIgeworICB0
ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKwordGFibGUgeworICB3aWR0aDogMTAwJTsK
KyAgdGFibGUtbGF5b3V0OiBmaXhlZDsKKyAgbWFyZ2luOiAwIGF1dG87Cit9CisKK3RoID4gYSB7
CisgIGNvbG9yOiBpbmhlcml0OworfQorCit0YWJsZVtvcmRlcl0gPiB0aGVhZCA+IHRyID4gdGg6
OmFmdGVyIHsKKyAgZGlzcGxheTogbm9uZTsKKyAgd2lkdGg6IC44ZW07CisgIG1hcmdpbi1pbmxp
bmUtZW5kOiAtLjhlbTsKKyAgdGV4dC1hbGlnbjogZW5kOworfQorCit0YWJsZVtvcmRlcj0iYXNj
Il0gPiB0aGVhZCA+IHRyID4gdGg6OmFmdGVyIHsKKyAgY29udGVudDogIlwyMTkzIjsKK30KK3Rh
YmxlW29yZGVyPSJkZXNjIl0gPiB0aGVhZCA+IHRyID4gdGg6OmFmdGVyIHsKKyAgY29udGVudDog
IlwyMTkxIjsKK30KKwordGFibGVbb3JkZXJdW29yZGVyLWJ5PSIwIl0gPiB0aGVhZCA+IHRyID4g
dGg6Zmlyc3QtY2hpbGQgPiBhICwKK3RhYmxlW29yZGVyXVtvcmRlci1ieT0iMSJdID4gdGhlYWQg
PiB0ciA+IHRoOmZpcnN0LWNoaWxkICsgdGggPiBhICwKK3RhYmxlW29yZGVyXVtvcmRlci1ieT0i
MiJdID4gdGhlYWQgPiB0ciA+IHRoOmZpcnN0LWNoaWxkICsgdGggKyB0aCA+IGEgeworICB0ZXh0
LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKwordGFibGVbb3JkZXJdW29yZGVyLWJ5PSIwIl0g
PiB0aGVhZCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQ6OmFmdGVyICwKK3RhYmxlW29yZGVyXVtvcmRl
ci1ieT0iMSJdID4gdGhlYWQgPiB0ciA+IHRoOmZpcnN0LWNoaWxkICsgdGg6OmFmdGVyICwKK3Rh
YmxlW29yZGVyXVtvcmRlci1ieT0iMiJdID4gdGhlYWQgPiB0ciA+IHRoOmZpcnN0LWNoaWxkICsg
dGggKyB0aDo6YWZ0ZXIgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cit9CisKK3RkOmZpcnN0
LWNoaWxkIHsKKyAgbWF4LXdpZHRoOiAxMDAlOworICBvdmVyZmxvdzogaGlkZGVuOworICB0ZXh0
LW92ZXJmbG93OiBlbGxpcHNpczsKKyAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKK30KKwordHI6bnRo
LWNoaWxkKGV2ZW4pIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsKK30KKworQG1lZGlh
IChtaW4td2lkdGg6IDU1MHB4KSB7CisgIGJvZHkgeworICAgIHBhZGRpbmc6IDNlbTsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXItcmFkaXVzOiAxZW07CisgICAgYm9y
ZGVyOiAycHggc29saWQgcmdiYSgyMTEsIDIxNSwgMjA3KTsKKyAgICBtYXgtd2lkdGg6IDY1ZW07
CisgICAgbWFyZ2luOiAyZW0gYXV0bzsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvUmVzb3VyY2VzL2RpcmVjdG9yeS5qcyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9SZXNvdXJjZXMvZGlyZWN0b3J5LmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjEzODBiZDhjNjk3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1Jlc291cmNlcy9kaXJl
Y3RvcnkuanMKQEAgLTAsMCArMSw3NiBAQAorCisvKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gRmly
ZWZveCBkaXJlY3RvcnkgbGlzdGluZywgZGlzdHJpYnV0ZWQgdW5kZXIKKyAqIE1vemlsbGEgUHVi
bGljIExpY2Vuc2UuCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgZ1RhYmxlLCBnT3JkZXJC
eSwgZ1RCb2R5LCBnUm93czsKKworZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVu
dExvYWRlZCIsIGZ1bmN0aW9uKCkgeworICBnVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgidGFibGUiKVswXTsKKyAgZ1RCb2R5ID0gZ1RhYmxlLnRCb2RpZXNbMF07CisgIGlm
IChnVEJvZHkucm93cy5sZW5ndGggPCAyKQorICAgIHJldHVybjsKKyAgdmFyIGhlYWRDZWxscyA9
IGdUYWJsZS50SGVhZC5yb3dzWzBdLmNlbGxzOworCisgIGZ1bmN0aW9uIHJvd0FjdGlvbihpKSB7
CisgICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOworICAgICAgb3JkZXJCeShpKTsKKyAgICB9CisgIH0KKworICBmb3IgKHZhciBpID0gaGVh
ZENlbGxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgdmFyIGFuY2hvciA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKKyAgICBhbmNob3IuaHJlZiA9ICIiOworICAgIGFuY2hv
ci5hcHBlbmRDaGlsZChoZWFkQ2VsbHNbaV0uZmlyc3RDaGlsZCk7CisgICAgaGVhZENlbGxzW2ld
LmFwcGVuZENoaWxkKGFuY2hvcik7CisgICAgaGVhZENlbGxzW2ldLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgcm93QWN0aW9uKGkpLCB0cnVlKTsKKyAgfQorICBnVGFibGUuc2V0QXR0cmlidXRl
KCJvcmRlciIsICIiKTsKKyAgb3JkZXJCeSgwKTsKK30sICJmYWxzZSIpOworCitmdW5jdGlvbiBj
b21wYXJlUm93cyhyb3dBLCByb3dCKSB7CisgIHZhciBhID0gcm93QS5jZWxsc1tnT3JkZXJCeV0u
Z2V0QXR0cmlidXRlKCJzb3J0YWJsZS1kYXRhIikgfHwgcm93QS5jZWxsc1tnT3JkZXJCeV0uaW5u
ZXJIVE1MOworICB2YXIgYiA9IHJvd0IuY2VsbHNbZ09yZGVyQnldLmdldEF0dHJpYnV0ZSgic29y
dGFibGUtZGF0YSIpIHx8IHJvd0IuY2VsbHNbZ09yZGVyQnldLmlubmVySFRNTDsKKyAgdmFyIGlu
dEEgPSArYTsKKyAgdmFyIGludEIgPSArYjsKKyAgaWYgKGEgPT0gaW50QSAmJiBiID09IGludEIp
IHsKKyAgICBhID0gaW50QTsKKyAgICBiID0gaW50QjsKKyAgfSBlbHNlIHsKKyAgICBhID0gYS50
b0xvd2VyQ2FzZSgpOworICAgIGIgPSBiLnRvTG93ZXJDYXNlKCk7CisgIH0KKyAgaWYgKGEgPCBi
KQorICAgIHJldHVybiAtMTsKKyAgaWYgKGEgPiBiKQorICAgIHJldHVybiAxOworICByZXR1cm4g
MDsKK30KKworZnVuY3Rpb24gb3JkZXJCeShjb2x1bW4pIHsKKyAgaWYgKCFnUm93cykKKyAgICBn
Um93cyA9IEFycmF5LmZyb20oZ1RCb2R5LnJvd3MpOworICB2YXIgb3JkZXI7CisgIGlmIChnT3Jk
ZXJCeSA9PSBjb2x1bW4pIHsKKyAgICBvcmRlciA9IGdUYWJsZS5nZXRBdHRyaWJ1dGUoIm9yZGVy
IikgPT0gImFzYyIgPyAiZGVzYyIgOiAiYXNjIjsKKyAgfSBlbHNlIHsKKyAgICBvcmRlciA9ICJh
c2MiOworICAgIGdPcmRlckJ5ID0gY29sdW1uOworICAgIGdUYWJsZS5zZXRBdHRyaWJ1dGUoIm9y
ZGVyLWJ5IiwgY29sdW1uKTsKKyAgICBnUm93cy5zb3J0KGNvbXBhcmVSb3dzKTsKKyAgfQorICBn
VGFibGUucmVtb3ZlQ2hpbGQoZ1RCb2R5KTsKKyAgZ1RhYmxlLnNldEF0dHJpYnV0ZSgib3JkZXIi
LCBvcmRlcik7CisgIGlmIChvcmRlciA9PSAiYXNjIikKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGdSb3dzLmxlbmd0aDsgaSsrKQorICAgICAgZ1RCb2R5LmFwcGVuZENoaWxkKGdSb3dzW2ldKTsK
KyAgZWxzZQorICAgIGZvciAodmFyIGkgPSBnUm93cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkK
KyAgICAgIGdUQm9keS5hcHBlbmRDaGlsZChnUm93c1tpXSk7CisgIGdUYWJsZS5hcHBlbmRDaGls
ZChnVEJvZHkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3NvdXAvV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0uY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmUxNTk5ZTJjMTVjMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJLaXREaXJlY3RvcnlJ
bnB1dFN0cmVhbS5jcHAKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtLmgiCisKKyNpbmNsdWRlICJXZWJLaXREaXJlY3Rv
cnlJbnB1dFN0cmVhbURhdGEuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CisKK3N0cnVjdCBfV2ViS2l0RGlyZWN0b3J5SW5wdXRT
dHJlYW1Qcml2YXRlIHsKKyAgICBHUmVmUHRyPEdGaWxlRW51bWVyYXRvcj4gZW51bWVyYXRvcjsK
KyAgICBDU3RyaW5nIHVyaTsKKworICAgIEdSZWZQdHI8R0J5dGVzPiBidWZmZXI7CisgICAgYm9v
bCByZWFkRG9uZTsKK307CisKK1dFQktJVF9ERUZJTkVfVFlQRShXZWJLaXREaXJlY3RvcnlJbnB1
dFN0cmVhbSwgd2Via2l0X2RpcmVjdG9yeV9pbnB1dF9zdHJlYW0sIEdfVFlQRV9JTlBVVF9TVFJF
QU0pCisKK3N0YXRpYyBHQnl0ZXMqIHdlYmtpdERpcmVjdG9yeUlucHV0U3RyZWFtQ3JlYXRlSGVh
ZGVyKFdlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtICpzdHJlYW0pCit7CisgICAgY2hhciogaGVh
ZGVyID0gZ19zdHJkdXBfcHJpbnRmKAorICAgICAgICAiPGh0bWw+PGhlYWQ+IiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiPHRpdGxl
PiVzPC90aXRsZT4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAiPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0
ZXh0L2h0bWw7XCIgY2hhcnNldD1cIlVURi04XCI+IiBcCisgICAgICAgICI8c3R5bGU+JXM8L3N0
eWxlPiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICI8c2NyaXB0PiVzPC9zY3JpcHQ+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICI8L2hlYWQ+IiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICI8Ym9keT4iICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICI8dGFibGU+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICI8dGhlYWQ+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICI8dGggYWxpZ249XCJsZWZ0XCI+
JXM8L3RoPjx0aCBhbGlnbj1cInJpZ2h0XCI+JXM8L3RoPjx0aCBhbGlnbj1cInJpZ2h0XCI+JXM8
L3RoPiIgXAorICAgICAgICAiPC90aGVhZD4iLAorICAgICAgICBzdHJlYW0tPnByaXYtPnVyaS5k
YXRhKCksCisgICAgICAgIFdlYkNvcmU6OmRpcmVjdG9yeVVzZXJBZ2VudFN0eWxlU2hlZXQsCisg
ICAgICAgIFdlYkNvcmU6OmRpcmVjdG9yeUphdmFTY3JpcHQsCisgICAgICAgIF8oIk5hbWUiKSwK
KyAgICAgICAgXygiU2l6ZSIpLAorICAgICAgICBfKCJEYXRlIE1vZGlmaWVkIikpOworCisgICAg
cmV0dXJuIGdfYnl0ZXNfbmV3X3dpdGhfZnJlZV9mdW5jKGhlYWRlciwgc3RybGVuKGhlYWRlciks
IGdfZnJlZSwgaGVhZGVyKTsKK30KKworc3RhdGljIEdCeXRlcyogd2Via2l0RGlyZWN0b3J5SW5w
dXRTdHJlYW1DcmVhdGVGb290ZXIoV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSkK
K3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZm9vdGVyID0gIjwvdGFibGU+PC9ib2R5PjwvaHRt
bD4iOworICAgIHJldHVybiBnX2J5dGVzX25ld19zdGF0aWMoZm9vdGVyLCBzdHJsZW4oZm9vdGVy
KSk7Cit9CisKK3N0YXRpYyBHQnl0ZXMqIHdlYmtpdERpcmVjdG9yeUlucHV0U3RyZWFtQ3JlYXRl
Um93KFdlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtICpzdHJlYW0sIEdGaWxlSW5mbyogaW5mbykK
K3sKKyAgICBpZiAoIWdfZmlsZV9pbmZvX2dldF9uYW1lKGluZm8pKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBnX2ZpbGVfaW5mb19nZXRfZGlzcGxh
eV9uYW1lKGluZm8pOworICAgIGlmICghbmFtZSkgeworICAgICAgICBuYW1lID0gZ19maWxlX2lu
Zm9fZ2V0X25hbWUoaW5mbyk7CisgICAgICAgIGlmICghZ191dGY4X3ZhbGlkYXRlKG5hbWUsIC0x
LCBudWxscHRyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEdV
bmlxdWVQdHI8Y2hhcj4gbWFya3VwTmFtZShnX21hcmt1cF9lc2NhcGVfdGV4dChuYW1lLCAtMSkp
OworICAgIEdVbmlxdWVQdHI8Y2hhcj4gZXNjYXBlZE5hbWUoZ191cmlfZXNjYXBlX3N0cmluZyhu
YW1lLCBudWxscHRyLCBGQUxTRSkpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2J1aWxk
X2ZpbGVuYW1lKHN0cmVhbS0+cHJpdi0+dXJpLmRhdGEoKSwgZXNjYXBlZE5hbWUuZ2V0KCksIG51
bGxwdHIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGZvcm1hdHRlZFNpemUoZ19maWxlX2luZm9f
Z2V0X2ZpbGVfdHlwZShpbmZvKSA9PSBHX0ZJTEVfVFlQRV9SRUdVTEFSID8gZ19mb3JtYXRfc2l6
ZShnX2ZpbGVfaW5mb19nZXRfc2l6ZShpbmZvKSkgOiBudWxscHRyKTsKKyAgICBHVW5pcXVlUHRy
PGNoYXI+IGZvcm1hdHRlZE5hbWUoZ19maWxlX2luZm9fZ2V0X2ZpbGVfdHlwZShpbmZvKSA9PSBH
X0ZJTEVfVFlQRV9ESVJFQ1RPUlkgPyBnX3N0cmR1cF9wcmludGYoIjEuJXMiLCBwYXRoLmdldCgp
KSA6IGdfc3RyZHVwX3ByaW50ZigiJXMiLCBwYXRoLmdldCgpKSk7CisjaWYgR0xJQl9DSEVDS19W
RVJTSU9OICgyLCA2MSwgMikKKyAgICBHUmVmUHRyPEdEYXRlVGltZT4gbW9kaWZpY2F0aW9uVGlt
ZSA9IGFkb3B0R1JlZihnX2ZpbGVfaW5mb19nZXRfbW9kaWZpY2F0aW9uX2RhdGVfdGltZShpbmZv
KSk7CisjZWxzZQorICAgIEdUaW1lVmFsIG1vZGlmaWVkOworICAgIGdfZmlsZV9pbmZvX2dldF9t
b2RpZmljYXRpb25fdGltZShpbmZvLCAmbW9kaWZpZWQpOworICAgIEdSZWZQdHI8R0RhdGVUaW1l
PiBtb2RpZmljYXRpb25UaW1lID0gYWRvcHRHUmVmKGdfZGF0ZV90aW1lX25ld19mcm9tX3RpbWV2
YWxfbG9jYWwoJm1vZGlmaWVkKSk7CisjZW5kaWYKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGZvcm1h
dHRlZFRpbWUoZ19kYXRlX3RpbWVfZm9ybWF0KG1vZGlmaWNhdGlvblRpbWUuZ2V0KCksICIlWCIp
KTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGZvcm1hdHRlZERhdGUoZ19kYXRlX3RpbWVfZm9ybWF0
KG1vZGlmaWNhdGlvblRpbWUuZ2V0KCksICIleCIpKTsKKworICAgIGNoYXIqIHJvdyA9IGdfc3Ry
ZHVwX3ByaW50ZigKKyAgICAgICAgIjx0cj4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIjx0ZCBzb3J0YWJsZS1kYXRh
PVwiJXNcIj48YSBocmVmPVwiJXNcIj4lczwvYT48L3RkPiIgICAgICAgICAgIFwKKyAgICAgICAg
Ijx0ZCBhbGlnbj1cInJpZ2h0XCIgc29ydGFibGUtZGF0YT1cIiUiIEdfR09GRlNFVF9GT1JNQVQg
IlwiPiVzPC90ZD4iIFwKKyAgICAgICAgIjx0ZCBhbGlnbj1cInJpZ2h0XCIgc29ydGFibGUtZGF0
YT1cIiUiIEdfR0lOVDY0X0ZPUk1BVCAiXCI+JXMmZW5zcDslczwvdGQ+XG4iIFwKKyAgICAgICAg
IjwvdHI+IiwKKyAgICAgICAgZm9ybWF0dGVkTmFtZS5nZXQoKSwgcGF0aC5nZXQoKSwgbWFya3Vw
TmFtZS5nZXQoKSwgZ19maWxlX2luZm9fZ2V0X3NpemUoaW5mbyksCisgICAgICAgIGZvcm1hdHRl
ZFNpemUgPyBmb3JtYXR0ZWRTaXplLmdldCgpIDogIiIsIGdfZGF0ZV90aW1lX3RvX3VuaXgobW9k
aWZpY2F0aW9uVGltZS5nZXQoKSksIGZvcm1hdHRlZFRpbWUuZ2V0KCksIGZvcm1hdHRlZERhdGUu
Z2V0KCkpOworICAgIHJldHVybiBnX2J5dGVzX25ld193aXRoX2ZyZWVfZnVuYyhyb3csIHN0cmxl
bihyb3cpLCBnX2ZyZWUsIHJvdyk7Cit9CisKK3N0YXRpYyBHQnl0ZXMqIHdlYmtpdERpcmVjdG9y
eUlucHV0U3RyZWFtUmVhZE5leHRGaWxlKFdlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtKiBzdHJl
YW0sIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIEdC
eXRlcyogYnVmZmVyID0gbnVsbHB0cjsKKyAgICBkbyB7CisgICAgICAgIEdFcnJvciogZmlsZUVy
cm9yID0gbnVsbHB0cjsKKyAgICAgICAgR1JlZlB0cjxHRmlsZUluZm8+IGluZm8gPSBhZG9wdEdS
ZWYoZ19maWxlX2VudW1lcmF0b3JfbmV4dF9maWxlKHN0cmVhbS0+cHJpdi0+ZW51bWVyYXRvci5n
ZXQoKSwgY2FuY2VsbGFibGUsICZmaWxlRXJyb3IpKTsKKyAgICAgICAgaWYgKGZpbGVFcnJvcikg
eworICAgICAgICAgICAgZ19wcm9wYWdhdGVfZXJyb3IoZXJyb3IsIGZpbGVFcnJvcik7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaW5mbyAm
JiAhc3RyZWFtLT5wcml2LT5yZWFkRG9uZSkgeworICAgICAgICAgICAgc3RyZWFtLT5wcml2LT5y
ZWFkRG9uZSA9IHRydWU7CisgICAgICAgICAgICBidWZmZXIgPSB3ZWJraXREaXJlY3RvcnlJbnB1
dFN0cmVhbUNyZWF0ZUZvb3RlcihzdHJlYW0pOworICAgICAgICB9IGVsc2UgaWYgKGluZm8pCisg
ICAgICAgICAgICBidWZmZXIgPSB3ZWJraXREaXJlY3RvcnlJbnB1dFN0cmVhbUNyZWF0ZVJvdyhz
dHJlYW0sIGluZm8uZ2V0KCkpOworICAgIH0gd2hpbGUgKCFidWZmZXIgJiYgIXN0cmVhbS0+cHJp
di0+cmVhZERvbmUpOworCisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIGdzc2l6ZSB3
ZWJraXREaXJlY3RvcnlJbnB1dFN0cmVhbVJlYWQoR0lucHV0U3RyZWFtKiBpbnB1dCwgdm9pZCog
YnVmZmVyLCBnc2l6ZSBjb3VudCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vycm9yKiog
ZXJyb3IpCit7CisgICAgYXV0byogc3RyZWFtID0gV0VCS0lUX0RJUkVDVE9SWV9JTlBVVF9TVFJF
QU0oaW5wdXQpOworCisgICAgaWYgKHN0cmVhbS0+cHJpdi0+cmVhZERvbmUpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgZ3NpemUgdG90YWxCeXRlc1JlYWQgPSAwOworICAgIHdoaWxlICh0b3Rh
bEJ5dGVzUmVhZCA8IGNvdW50KSB7CisgICAgICAgIGlmICghc3RyZWFtLT5wcml2LT5idWZmZXIp
IHsKKyAgICAgICAgICAgIHN0cmVhbS0+cHJpdi0+YnVmZmVyID0gYWRvcHRHUmVmKHdlYmtpdERp
cmVjdG9yeUlucHV0U3RyZWFtUmVhZE5leHRGaWxlKHN0cmVhbSwgY2FuY2VsbGFibGUsIGVycm9y
KSk7CisgICAgICAgICAgICBpZiAoIXN0cmVhbS0+cHJpdi0+YnVmZmVyKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRvdGFsQnl0ZXNSZWFkKQorICAgICAgICAgICAgICAgICAgICBnX2NsZWFyX2Vy
cm9yKGVycm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxCeXRlc1JlYWQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBnc2l6ZSBidWZmZXJTaXplOworICAgICAg
ICBhdXRvKiBidWZmZXJEYXRhID0gZ19ieXRlc19nZXRfZGF0YShzdHJlYW0tPnByaXYtPmJ1ZmZl
ci5nZXQoKSwgJmJ1ZmZlclNpemUpOworICAgICAgICBnc2l6ZSBieXRlc1JlYWQgPSBzdGQ6Om1p
bihidWZmZXJTaXplLCB0b3RhbEJ5dGVzUmVhZCAtIGNvdW50KTsKKyAgICAgICAgbWVtY3B5KHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlcikgKyB0b3RhbEJ5dGVzUmVhZCwgYnVmZmVyRGF0
YSwgYnl0ZXNSZWFkKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA9PSBidWZmZXJTaXplKQorICAg
ICAgICAgICAgc3RyZWFtLT5wcml2LT5idWZmZXIgPSBudWxscHRyOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzdHJlYW0tPnByaXYtPmJ1ZmZlciA9IGdfYnl0ZXNfbmV3X2Zyb21fYnl0ZXMo
c3RyZWFtLT5wcml2LT5idWZmZXIuZ2V0KCksIGJ5dGVzUmVhZCwgYnVmZmVyU2l6ZSAtIGJ5dGVz
UmVhZCk7CisgICAgICAgIHRvdGFsQnl0ZXNSZWFkICs9IGJ5dGVzUmVhZDsKKyAgICB9CisKKyAg
ICByZXR1cm4gdG90YWxCeXRlc1JlYWQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXREaXJl
Y3RvcnlJbnB1dFN0cmVhbUNsb3NlKEdJbnB1dFN0cmVhbSogaW5wdXQsIEdDYW5jZWxsYWJsZSog
Y2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIGF1dG8qIHByaXYgPSBXRUJLSVRf
RElSRUNUT1JZX0lOUFVUX1NUUkVBTShpbnB1dCktPnByaXY7CisKKyAgICBwcml2LT5idWZmZXIg
PSBudWxscHRyOworCisgICAgcmV0dXJuIGdfZmlsZV9lbnVtZXJhdG9yX2Nsb3NlKHByaXYtPmVu
dW1lcmF0b3IuZ2V0KCksIGNhbmNlbGxhYmxlLCBlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCit3
ZWJraXRfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9jbGFzc19pbml0KFdlYktpdERpcmVjdG9yeUlu
cHV0U3RyZWFtQ2xhc3MqIGtsYXNzKQoreworICAgIGF1dG8qIGlucHV0U3RyZWFtQ2xhc3MgPSBH
X0lOUFVUX1NUUkVBTV9DTEFTUyhrbGFzcyk7CisgICAgaW5wdXRTdHJlYW1DbGFzcy0+cmVhZF9m
biA9IHdlYmtpdERpcmVjdG9yeUlucHV0U3RyZWFtUmVhZDsKKyAgICBpbnB1dFN0cmVhbUNsYXNz
LT5jbG9zZV9mbiA9IHdlYmtpdERpcmVjdG9yeUlucHV0U3RyZWFtQ2xvc2U7Cit9CisKK0dSZWZQ
dHI8R0lucHV0U3RyZWFtPiB3ZWJraXREaXJlY3RvcnlJbnB1dFN0cmVhbU5ldyhHUmVmUHRyPEdG
aWxlRW51bWVyYXRvcj4mJiBlbnVtZXJhdG9yLCBDU3RyaW5nJiYgdXJpKQoreworICAgIGF1dG8q
IHN0cmVhbSA9IFdFQktJVF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBudWxscHRyKSk7CisgICAgc3RyZWFtLT5w
cml2LT5lbnVtZXJhdG9yID0gV1RGTW92ZShlbnVtZXJhdG9yKTsKKyAgICBzdHJlYW0tPnByaXYt
PnVyaSA9IFdURk1vdmUodXJpKTsKKyAgICBzdHJlYW0tPnByaXYtPmJ1ZmZlciA9IGFkb3B0R1Jl
Zih3ZWJraXREaXJlY3RvcnlJbnB1dFN0cmVhbUNyZWF0ZUhlYWRlcihzdHJlYW0pKTsKKworICAg
IHJldHVybiBhZG9wdEdSZWYoR19JTlBVVF9TVFJFQU0oKHN0cmVhbSkpKTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJLaXREaXJlY3RvcnlJbnB1
dFN0cmVhbS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYktpdERpcmVj
dG9yeUlucHV0U3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li5iMzNmNmY5Yzc5NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3NvdXAvV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0uaApAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfVFlQRV9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNICAgICAgICAgICAgKHdl
YmtpdF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRf
RElSRUNUT1JZX0lOUFVUX1NUUkVBTShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUICgob2JqKSwgV0VCS0lUX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgV2Vi
S2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0pKQorI2RlZmluZSBXRUJLSVRfSVNfRElSRUNUT1JZX0lO
UFVUX1NUUkVBTShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2Jq
KSwgV0VCS0lUX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFdFQktJVF9E
SVJFQ1RPUllfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFdlYktp
dERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRElSRUNUT1JZ
X0lOUFVUX1NUUkVBTV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgob2Jq
KSwgV0VCS0lUX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFdFQktJVF9E
SVJFQ1RPUllfSU5QVVRfU1RSRUFNX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFdlYktp
dERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGly
ZWN0b3J5SW5wdXRTdHJlYW0gV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW07Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcyBXZWJLaXREaXJlY3RvcnlJbnB1
dFN0cmVhbUNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFt
UHJpdmF0ZSBXZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbVByaXZhdGU7CisKK3N0cnVjdCBfV2Vi
S2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0geworICAgIEdJbnB1dFN0cmVhbSBwYXJlbnQ7CisKKyAg
ICBXZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbVByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MgeworICAgIEdJbnB1dFN0cmVhbUNsYXNz
IHBhcmVudENsYXNzOworfTsKKworR1R5cGUgd2Via2l0X2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1f
Z2V0X3R5cGUodm9pZCk7CisKK0dSZWZQdHI8R0lucHV0U3RyZWFtPiB3ZWJraXREaXJlY3RvcnlJ
bnB1dFN0cmVhbU5ldyhHUmVmUHRyPEdGaWxlRW51bWVyYXRvcj4mJiwgQ1N0cmluZyYmIHVyaSk7
CisKK0dfRU5EX0RFQ0xTCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGJhMzRjN2E5OWZk
OC4uYWQyZmFhNTZkZDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTUwLDYgKzUwLDcg
QEAgZW5kaWYgKCkKIAogbGlzdChBUFBFTkQgV2ViS2l0X0RFUklWRURfU09VUkNFUwogICAgICR7
REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSfS9JbnNwZWN0b3JHUmVzb3VyY2VCdW5kbGUu
YworICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSfS9XZWJLaXREaXJlY3RvcnlJ
bnB1dFN0cmVhbURhdGEuY3BwCiAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUMkdUS19ESVJ9
L1dlYktpdFJlc291cmNlc0dSZXNvdXJjZUJ1bmRsZS5jCiAKICAgICAke0RFUklWRURfU09VUkNF
U19XRUJLSVQyR1RLX0FQSV9ESVJ9L1dlYktpdEVudW1UeXBlcy5jcHAKQEAgLTY0LDYgKzY1LDE5
IEBAIGlmIChFTkFCTEVfV0FZTEFORF9UQVJHRVQpCiAgICAgKQogZW5kaWYgKCkKIAorc2V0KFdl
YktpdF9EaXJlY3RvcnlJbnB1dFN0cmVhbV9EQVRBCisgICAgJHtXRUJLSVRfRElSfS9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL1Jlc291cmNlcy9kaXJlY3RvcnkuY3NzCisgICAgJHtXRUJLSVRfRElSfS9O
ZXR3b3JrUHJvY2Vzcy9zb3VwL1Jlc291cmNlcy9kaXJlY3RvcnkuanMKKykKKworYWRkX2N1c3Rv
bV9jb21tYW5kKAorICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0RJUn0v
V2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1EYXRhLmNwcCAke0RFUklWRURfU09VUkNFU19XRUJL
SVQyR1RLX0RJUn0vV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1EYXRhLmgKKyAgICBNQUlOX0RF
UEVOREVOQ1kgJHtXRUJDT1JFX0RJUn0vY3NzL21ha2UtY3NzLWZpbGUtYXJyYXlzLnBsCisgICAg
REVQRU5EUyAke1dlYktpdF9EaXJlY3RvcnlJbnB1dFN0cmVhbV9EQVRBfQorICAgIENPTU1BTkQg
JHtQRVJMX0VYRUNVVEFCTEV9ICR7V0VCQ09SRV9ESVJ9L2Nzcy9tYWtlLWNzcy1maWxlLWFycmF5
cy5wbCAke0RFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0RJUn0vV2ViS2l0RGlyZWN0b3J5SW5w
dXRTdHJlYW1EYXRhLmggJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUMkdUS19ESVJ9L1dlYktpdERp
cmVjdG9yeUlucHV0U3RyZWFtRGF0YS5jcHAgJHtXZWJLaXRfRGlyZWN0b3J5SW5wdXRTdHJlYW1f
REFUQX0KKyAgICBWRVJCQVRJTQorKQorCiBpZiAoVVNFX0dUSzQpCiAgICAgc2V0KEdUS19BUElf
VkVSU0lPTiA0KQogICAgIHNldChHVEtfUEtHQ09ORklHX1BBQ0tBR0UgZ3RrNCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtV1BFLmNtYWtlCmluZGV4IDA0N2MzNzVhMWJiNy4uODdmYjQyZDliZTVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm1XUEUuY21ha2UKQEAgLTgyLDExICs4MiwyNSBAQCBsaXN0KEFQUEVORCBXZWJLaXRfVU5J
RklFRF9TT1VSQ0VfTElTVF9GSUxFUwogCiBsaXN0KEFQUEVORCBXZWJLaXRfREVSSVZFRF9TT1VS
Q0VTCiAgICAgJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0UmVzb3VyY2VzR1Jl
c291cmNlQnVuZGxlLmMKKyAgICAke1dlYktpdF9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJLaXRE
aXJlY3RvcnlJbnB1dFN0cmVhbURhdGEuY3BwCiAKICAgICAke0RFUklWRURfU09VUkNFU19XUEVf
QVBJX0RJUn0vV2ViS2l0RW51bVR5cGVzLmNwcAogICAgICR7REVSSVZFRF9TT1VSQ0VTX1dQRV9B
UElfRElSfS9XZWJLaXRXZWJQcm9jZXNzRW51bVR5cGVzLmNwcAogKQogCitzZXQoV2ViS2l0X0Rp
cmVjdG9yeUlucHV0U3RyZWFtX0RBVEEKKyAgICAke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNz
L3NvdXAvUmVzb3VyY2VzL2RpcmVjdG9yeS5jc3MKKyAgICAke1dFQktJVF9ESVJ9L05ldHdvcmtQ
cm9jZXNzL3NvdXAvUmVzb3VyY2VzL2RpcmVjdG9yeS5qcworKQorCithZGRfY3VzdG9tX2NvbW1h
bmQoCisgICAgT1VUUFVUICR7V2ViS2l0X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdERpcmVj
dG9yeUlucHV0U3RyZWFtRGF0YS5jcHAgJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2Vi
S2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1EYXRhLmgKKyAgICBNQUlOX0RFUEVOREVOQ1kgJHtXRUJD
T1JFX0RJUn0vY3NzL21ha2UtY3NzLWZpbGUtYXJyYXlzLnBsCisgICAgREVQRU5EUyAke1dlYktp
dF9EaXJlY3RvcnlJbnB1dFN0cmVhbV9EQVRBfQorICAgIENPTU1BTkQgJHtQRVJMX0VYRUNVVEFC
TEV9ICR7V0VCQ09SRV9ESVJ9L2Nzcy9tYWtlLWNzcy1maWxlLWFycmF5cy5wbCAke1dlYktpdF9E
RVJJVkVEX1NPVVJDRVNfRElSfS9XZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbURhdGEuaCAke1dl
YktpdF9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbURhdGEu
Y3BwICR7V2ViS2l0X0RpcmVjdG9yeUlucHV0U3RyZWFtX0RBVEF9CisgICAgVkVSQkFUSU0KKykK
Kwogc2V0KFdQRV9BUElfSU5TVEFMTEVEX0hFQURFUlMKICAgICAke0RFUklWRURfU09VUkNFU19X
UEVfQVBJX0RJUn0vV2ViS2l0RW51bVR5cGVzLmgKICAgICAke0RFUklWRURfU09VUkNFU19XUEVf
QVBJX0RJUn0vV2ViS2l0VmVyc2lvbi5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNHVEsudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAppbmRleCA2NjNjMmUzOWE1
ODUuLjVkNWIwM2IyZTVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC00Myw2ICs0Myw3IEBAIE5l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAKIE5ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrU2Vzc2lvblNvdXAuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdD
b250ZXh0U291cC5jcHAKK05ldHdvcmtQcm9jZXNzL3NvdXAvV2ViS2l0RGlyZWN0b3J5SW5wdXRT
dHJlYW0uY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYlNvY2tldFRhc2tTb3VwLmNwcAogCiBO
ZXR3b3JrUHJvY2Vzcy93ZWJydGMvTGliV2ViUlRDU29ja2V0Q2xpZW50LmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQ
RS50eHQKaW5kZXggNWYzNTUzMWRlMTE2Li5jNjc2NzA3NGNkYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4
dApAQCAtNDMsNiArNDMsNyBAQCBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFp
blNvdXAuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKIE5l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcAogTmV0d29ya1Byb2Nlc3Mv
c291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwCitOZXR3b3JrUHJvY2Vzcy9zb3Vw
L1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtLmNwcAogTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJT
b2NrZXRUYXNrU291cC5jcHAKIAogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL0xpYldlYlJUQ1NvY2tl
dENsaWVudC5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBmZjU1OGEyNTI0NzcuLjk3OWExZTBmMTJjZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTAxLTEx
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBb
U09VUF0gU3RvcCB1c2luZyBTb3VwUmVxdWVzdCBBUEkgdG8gbG9hZCBmaWxlcyBpbiBwcmVwYXJh
dGlvbiBmb3IgbGlic291cDMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMDUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBXZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbS5jcHAgYXMgZXhjZXB0aW9u
IGZvciBzdHlsZSBjaGVja2VyLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2VyLnB5OgorCiAyMDIxLTAxLTA5ICBMYXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtHU3RyZWFtZXJdIEJ1aWxkIGZhaWx1cmUgd2l0aCBnc3QtYnVpbGQ6IE1p
c3NpbmcgZ3N0L2F1ZGlvL2F1ZGlvLmgKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
ci5weQppbmRleCA0ZWJmMGJkOGU2ZTQuLjkyY2U0YjNhMjBmZCAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMjI3LDcgKzIyNyw4IEBAIF9QQVRIX1JVTEVTX1NQ
RUNJRklFUiA9IFsKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxh
dGZvcm0nLCAnbWVkaWFzdHJlYW0nLCAnZ3N0cmVhbWVyJywgJ0dTdHJlYW1lck1lZGlhU3RyZWFt
U291cmNlLmgnKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxh
dGZvcm0nLCAnbWVkaWFzdHJlYW0nLCAnZ3N0cmVhbWVyJywgJ0dTdHJlYW1lck1lZGlhU3RyZWFt
U291cmNlLmNwcCcpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdw
bGF0Zm9ybScsICduZXR3b3JrJywgJ3NvdXAnLCAnUHJveHlSZXNvbHZlclNvdXAuY3BwJyksCi0g
ICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ25ldHdv
cmsnLCAnc291cCcsICdQcm94eVJlc29sdmVyU291cC5oJyldLAorICAgICAgb3MucGF0aC5qb2lu
KCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICduZXR3b3JrJywgJ3NvdXAnLCAnUHJv
eHlSZXNvbHZlclNvdXAuaCcpLAorICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0
JywgJ05ldHdvcmtQcm9jZXNzJywgJ3NvdXAnLCAnV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0u
aCcpXSwKICAgICAgWyItcmVhZGFiaWxpdHkvbmFtaW5nIiwKICAgICAgICItcmVhZGFiaWxpdHkv
ZW51bV9jYXNpbmciXSksCiAK
</data>
<flag name="review"
          id="435073"
          type_id="1"
          status="-"
          setter="aperez"
    />
    <flag name="commit-queue"
          id="435083"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417960</attachid>
            <date>2021-01-20 05:15:19 -0800</date>
            <delta_ts>2021-01-25 07:16:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk-soup-file-request.diff</filename>
            <type>text/plain</type>
            <size>37255</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nCmluZGV4IDU3YjQyZjZhNzg3
Yy4uMDkxNDljNDA1MGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
cG8vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0wMS0xMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIFN0b3AgdXNpbmcgU291cFJlcXVl
c3QgQVBJIHRvIGxvYWQgZmlsZXMgaW4gcHJlcGFyYXRpb24gZm9yIGxpYnNvdXAzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MDkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBPVEZJTEVTLmluOiBB
ZGQgV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0uY3BwCisKIDIwMjAtMDktMTggIFJhZmFlbCBG
b250ZW5lbGxlICA8cmFmYWVsZmZAZ25vbWUub3JnPgogCiAgICAgICAgIFtsMTBuXSBbcHRfQlJd
IFVwZGF0ZWQgQnJhemlsaWFuIFBvcnR1Z3Vlc2UgdHJhbnNsYXRpb24KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbiBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbgppbmRleCBlNGNhMzNhYWYyMWQuLjgyMTJiZjJj
Yzk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJTEVT
LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbgpAQCAt
NCw2ICs0LDcgQEAgTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKIC4uL25ldHdvcmsvc291cC9OZXR3
b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcAogLi4vLi4vZWRpdGluZy9FZGl0QWN0aW9uLmNwcAog
Li4vLi4vLi4vSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDT3B0aW9ucy5jcHAKKy4uLy4uLy4u
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtLmNw
cAogLi4vLi4vLi4vV2ViS2l0L1NoYXJlZC9BUEkvZ2xpYi9XZWJLaXRIaXRUZXN0UmVzdWx0LmNw
cAogLi4vLi4vLi4vV2ViS2l0L1NoYXJlZC9BUEkvZ2xpYi9XZWJLaXRVUklSZXF1ZXN0LmNwcAog
Li4vLi4vLi4vV2ViS2l0L1NoYXJlZC9BUEkvZ2xpYi9XZWJLaXRVUklSZXNwb25zZS5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggOGQ5ZDZjZGVjYTRkLi43MDk0NzUyNmJlYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NDQgQEAKKzIwMjEtMDEtMTEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtTT1VQXSBTdG9wIHVzaW5nIFNvdXBSZXF1ZXN0IEFQSSB0byBsb2Fk
IGZpbGVzIGluIHByZXBhcmF0aW9uIGZvciBsaWJzb3VwMworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU291cFJlcXVlc3QgQVBJIGlzIGdvbmUgaW4gbGli
c291cDMgYW5kIHRoZXJlJ3Mgbm8gcmVwbGFjZW1lbnQgZm9yIGZpbGUgcmVxdWVzdHMuIEdSZXNv
dXJjZSBhbmQgZGF0YSBVUkkgbG9hZHMKKyAgICAgICAgYWxyZWFkeSBoYXBwZW4gaW4gdGhlIHdl
YiBwcm9jZXNzIHNvIHdlIG9ubHkgbmVlZCB0byBjYXJlIGFib3V0IGZpbGUgYW5kIGRpcmVjdG9y
eSBsb2Fkcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNr
U291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZVJl
cXVlc3QpOiBDcmVhdGUgYSBHRmlsZSBmb3IgbG9jYWwgZmlsZXMuCisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmNsZWFyUmVxdWVzdCk6IENsZWFyIHRoZSBtX2ZpbGUuCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OnJlc3VtZSk6IENoZWNrIGFsc28g
aWYgdGhlcmUncyBhIGZpbGUgb3BlcmF0aW9uIHRvIHJlc3VtZS4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkU2VuZFJlcXVlc3QpOiBXZSBhbHdheXMgaGF2ZSBhIHNv
dXAgbWVzc2FnZSBub3cgaGVyZSBiZWNhdXNlIFNvdXBSZXF1ZXN0IGlzCisgICAgICAgIG9ubHkg
dXNlZCBmb3IgSFRUUC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6cmVh
ZENhbGxiYWNrKTogSW4gY2FzZSBvZiBmYWlsdXJlIGNoZWNrIGlmIHRoaXMgaXMgYW4gSFRUUCBv
ciBmaWxlIHJlcXVlc3QgdG8KKyAgICAgICAgY3JlYXRlIHRoZSBlcnJvci4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZmlsZVF1ZXJ5SW5mb0NhbGxiYWNrKTogQ2FsbCBk
aWRHZXRGaWxlSW5mbygpIGFuZCBjb250aW51ZSByZWFkaW5nIHRoZSBmaWxlIG9yIGRpcmVjdG9y
eS4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkR2V0RmlsZUluZm8p
OiBTZXQgVVJMLCBjb250ZW50IHR5cGUgYW5kIGxlbmd0aCBvZiB0aGUgcmVzcG9uc2UgZm9yIHRo
ZSBnaXZlbiBHRmlsZUluZm8uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6
OnJlYWRGaWxlQ2FsbGJhY2spOiBDb21wbGV0ZSB0aGUgZ19maWxlX3JlYWRfYXN5bmMgb3BlcmF0
aW9uLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjplbnVtZXJhdGVGaWxl
Q2hpbGRyZW5DYWxsYmFjayk6IENyZWF0ZSBhIFdlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZWFkRmlsZSk6IFNldCB0
aGUgaW5wdXQgc3RyZWFtIGFuZCBub3RpZnkgdGhlIHJlc3BvbnNlIGlzIHJlYWR5LgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVzb3VyY2VzL2RpcmVjdG9yeS5jc3M6IEFkZGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVzb3VyY2VzL2RpcmVjdG9yeS5qczogQWRkZWQu
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVh
bS5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1DcmVhdGVI
ZWFkZXIpOgorICAgICAgICAod2Via2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1DcmVhdGVGb290ZXIp
OgorICAgICAgICAod2Via2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1DcmVhdGVSb3cpOgorICAgICAg
ICAod2Via2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1SZWFkTmV4dEZpbGUpOgorICAgICAgICAod2Vi
a2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1SZWFkKToKKyAgICAgICAgKHdlYmtpdERpcmVjdG9yeUlu
cHV0U3RyZWFtQ2xvc2UpOgorICAgICAgICAod2Via2l0X2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1f
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXREaXJlY3RvcnlJbnB1dFN0cmVhbU5ldyk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbS5o
OiBBZGRlZC4KKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bVdQRS5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2Vz
V1BFLnR4dDoKKwogMjAyMS0wMS0xOSAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAg
ICAgICAgIE51bGwgY2hlY2sgUmVzb3VyY2VSZXF1ZXN0IElQQyBkZWNvZGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3Vw
LmNwcAppbmRleCBjOTliY2IwNzM2NmIuLjI4YzYzYjBhNzIwNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNw
cApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Nlc3Npb25Tb3VwLmgiCiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgpAQCAtMTA3LDYgKzEwOCwxMCBA
QCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUsIFNhbgogdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjcmVh
dGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFdhc0Jsb2NraW5nQ29va2llcyB3
YXNCbG9ja2luZ0Nvb2tpZXMpCiB7CiAgICAgbV9jdXJyZW50UmVxdWVzdCA9IFdURk1vdmUocmVx
dWVzdCk7CisgICAgaWYgKG1fY3VycmVudFJlcXVlc3QudXJsKCkuaXNMb2NhbEZpbGUoKSkgewor
ICAgICAgICBtX2ZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChtX2N1cnJlbnRS
ZXF1ZXN0LnVybCgpLmZpbGVTeXN0ZW1QYXRoKCkudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogCiAgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBzb3VwVVJJID0gbV9jdXJy
ZW50UmVxdWVzdC5jcmVhdGVTb3VwVVJJKCk7CiAgICAgaWYgKCFzb3VwVVJJKSB7CkBAIC0xMjIs
MTEgKzEyNyw2IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVxdWVzdChSZXNv
dXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBXYXNCbG9ja2luZ0NvCiAKICAgICBtX2N1cnJlbnRSZXF1
ZXN0LnVwZGF0ZVNvdXBSZXF1ZXN0KHNvdXBSZXF1ZXN0LmdldCgpKTsKIAotICAgIGlmICghbV9j
dXJyZW50UmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAg
bV9zb3VwUmVxdWVzdCA9IFdURk1vdmUoc291cFJlcXVlc3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgLy8gSFRUUCByZXF1ZXN0LgogICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+IHNv
dXBNZXNzYWdlID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlKFNPVVBf
UkVRVUVTVF9IVFRQKHNvdXBSZXF1ZXN0LmdldCgpKSkpOwogICAgIGlmICghc291cE1lc3NhZ2Up
IHsKQEAgLTIwMyw2ICsyMDMsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNsZWFyUmVx
dWVzdCgpCiAgICAgc3RvcFRpbWVvdXQoKTsKICAgICBtX3BlbmRpbmdSZXN1bHQgPSBudWxscHRy
OwogICAgIG1fc291cFJlcXVlc3QgPSBudWxscHRyOworICAgIG1fZmlsZSA9IG51bGxwdHI7CiAg
ICAgbV9pbnB1dFN0cmVhbSA9IG51bGxwdHI7CiAgICAgbV9tdWx0aXBhcnRJbnB1dFN0cmVhbSA9
IG51bGxwdHI7CiAgICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IG51bGxwdHI7CkBAIC0yNDAs
NiArMjQxLDEzIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6cmVzdW1lKCkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIGlmIChtX2ZpbGUgJiYgIW1fY2FuY2VsbGFibGUpIHsKKyAg
ICAgICAgbV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAg
ICAgICAgZ19maWxlX3F1ZXJ5X2luZm9fYXN5bmMobV9maWxlLmdldCgpLCBHX0ZJTEVfQVRUUklC
VVRFX1NUQU5EQVJEX1RZUEUgIiwiIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVOVF9U
WVBFICIsIiBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCisgICAgICAgICAgICBHX0ZJ
TEVfUVVFUllfSU5GT19OT05FLCBSdW5Mb29wU291cmNlUHJpb3JpdHk6OkFzeW5jSU9OZXR3b3Jr
LCBtX2NhbmNlbGxhYmxlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJh
Y2s+KGZpbGVRdWVyeUluZm9DYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChtX3BlbmRpbmdSZXN1bHQpIHsKICAgICAg
ICAgR1JlZlB0cjxHQXN5bmNSZXN1bHQ+IHBlbmRpbmdSZXN1bHQgPSBXVEZNb3ZlKG1fcGVuZGlu
Z1Jlc3VsdCk7CiAgICAgICAgIGlmIChtX2lucHV0U3RyZWFtKQpAQCAtMjQ4LDcgKzI1NiwxMiBA
QCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlc3VtZSgpCiAgICAgICAgICAgICByZXF1ZXN0
TmV4dFBhcnRDYWxsYmFjayhtX211bHRpcGFydElucHV0U3RyZWFtLmdldCgpLCBwZW5kaW5nUmVz
dWx0LmdldCgpLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CiAgICAgICAgIGVsc2UgaWYgKG1f
c291cFJlcXVlc3QpCiAgICAgICAgICAgICBzZW5kUmVxdWVzdENhbGxiYWNrKG1fc291cFJlcXVl
c3QuZ2V0KCksIHBlbmRpbmdSZXN1bHQuZ2V0KCksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsK
LSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIGlmIChtX2ZpbGUpIHsKKyAgICAgICAgICAgIGlm
IChtX3Jlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpID09IC0xKQorICAgICAgICAgICAg
ICAgIGVudW1lcmF0ZUZpbGVDaGlsZHJlbkNhbGxiYWNrKG1fZmlsZS5nZXQoKSwgcGVuZGluZ1Jl
c3VsdC5nZXQoKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJlYWRGaWxlQ2FsbGJhY2sobV9maWxlLmdldCgpLCBwZW5kaW5nUmVz
dWx0LmdldCgpLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CisgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogfQpAQCAtMzM5LDM3ICszNTIs
MjQgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBS
ZXF1ZXN0KiBzb3VwUmVxdWVzdCwgR0FzeW5jUmUKIAogdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3Vw
OjpkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKIHsK
LSAgICBpZiAobV9zb3VwTWVzc2FnZSkgewotICAgICAgICBpZiAobV9zaG91bGRDb250ZW50U25p
ZmYgPT0gQ29udGVudFNuaWZmaW5nUG9saWN5OjpTbmlmZkNvbnRlbnQgJiYgbV9zb3VwTWVzc2Fn
ZS0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTk9UX01PRElGSUVEKQotICAgICAgICAgICAg
bV9yZXNwb25zZS5zZXRTbmlmZmVkQ29udGVudFR5cGUoc291cF9yZXF1ZXN0X2dldF9jb250ZW50
X3R5cGUobV9zb3VwUmVxdWVzdC5nZXQoKSkpOwotICAgICAgICBtX3Jlc3BvbnNlLnVwZGF0ZUZy
b21Tb3VwTWVzc2FnZShtX3NvdXBNZXNzYWdlLmdldCgpKTsKLSAgICAgICAgaWYgKG1fcmVzcG9u
c2UubWltZVR5cGUoKS5pc0VtcHR5KCkgJiYgbV9zb3VwTWVzc2FnZS0+c3RhdHVzX2NvZGUgIT0g
U09VUF9TVEFUVVNfTk9UX01PRElGSUVEKQotICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRNaW1l
VHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjptaW1lVHlwZUZvclBhdGgobV9yZXNwb25zZS51cmwoKS5w
YXRoKCkudG9TdHJpbmcoKSkpOwotCi0gICAgICAgIGlmIChzaG91bGRTdGFydEhUVFBSZWRpcmVj
dGlvbigpKSB7Ci0gICAgICAgICAgICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0cmVh
bSk7Ci0gICAgICAgICAgICBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fcmVzcG9uc2UuaXNNdWx0
aXBhcnQoKSkKLSAgICAgICAgICAgIG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYo
c291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFtX25ldyhtX3NvdXBNZXNzYWdlLmdldCgpLCBpbnB1
dFN0cmVhbS5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2lucHV0U3RyZWFt
ID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7Ci0KLSAgICAgICAgbV9uZXR3b3JrTG9hZE1ldHJpY3Mu
cmVzcG9uc2VTdGFydCA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9zdGFydFRpbWU7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgbV9yZXNwb25zZS5zZXRVUkwobV9maXJzdFJlcXVlc3QudXJsKCkp
OwotICAgICAgICBjb25zdCBnY2hhciogY29udGVudFR5cGUgPSBzb3VwX3JlcXVlc3RfZ2V0X2Nv
bnRlbnRfdHlwZShtX3NvdXBSZXF1ZXN0LmdldCgpKTsKLSAgICAgICAgbV9yZXNwb25zZS5zZXRN
aW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGNvbnRlbnRUeXBlKSk7Ci0gICAg
ICAgIG1fcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21NZWRp
YVR5cGUoY29udGVudFR5cGUpKTsKLSAgICAgICAgbV9yZXNwb25zZS5zZXRFeHBlY3RlZENvbnRl
bnRMZW5ndGgoc291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aChtX3NvdXBSZXF1ZXN0Lmdl
dCgpKSk7Ci0gICAgICAgIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgbV9yZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjptaW1lVHlw
ZUZvclBhdGgobV9yZXNwb25zZS51cmwoKS5wYXRoKCkudG9TdHJpbmcoKSkpOworICAgIGlmICht
X3Nob3VsZENvbnRlbnRTbmlmZiA9PSBDb250ZW50U25pZmZpbmdQb2xpY3k6OlNuaWZmQ29udGVu
dCAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT1RfTU9ESUZJ
RUQpCisgICAgICAgIG1fcmVzcG9uc2Uuc2V0U25pZmZlZENvbnRlbnRUeXBlKHNvdXBfcmVxdWVz
dF9nZXRfY29udGVudF90eXBlKG1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICBtX3Jlc3BvbnNl
LnVwZGF0ZUZyb21Tb3VwTWVzc2FnZShtX3NvdXBNZXNzYWdlLmdldCgpKTsKKyAgICBpZiAobV9y
ZXNwb25zZS5taW1lVHlwZSgpLmlzRW1wdHkoKSAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0dXNfY29k
ZSAhPSBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQpCisgICAgICAgIG1fcmVzcG9uc2Uuc2V0TWlt
ZVR5cGUoTUlNRVR5cGVSZWdpc3RyeTo6bWltZVR5cGVGb3JQYXRoKG1fcmVzcG9uc2UudXJsKCku
cGF0aCgpLnRvU3RyaW5nKCkpKTsKIAorICAgIGlmIChzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlv
bigpKSB7CiAgICAgICAgIG1faW5wdXRTdHJlYW0gPSBXVEZNb3ZlKGlucHV0U3RyZWFtKTsKKyAg
ICAgICAgc2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIGlmIChtX3Jlc3BvbnNlLmlzTXVsdGlwYXJ0KCkpCisgICAgICAgIG1fbXVs
dGlwYXJ0SW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoc291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFt
X25ldyhtX3NvdXBNZXNzYWdlLmdldCgpLCBpbnB1dFN0cmVhbS5nZXQoKSkpOworICAgIGVsc2UK
KyAgICAgICAgbV9pbnB1dFN0cmVhbSA9IFdURk1vdmUoaW5wdXRTdHJlYW0pOworCisgICAgbV9u
ZXR3b3JrTG9hZE1ldHJpY3MucmVzcG9uc2VTdGFydCA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0g
bV9zdGFydFRpbWU7CiAgICAgZGlzcGF0Y2hEaWRSZWNlaXZlUmVzcG9uc2UoKTsKIH0KIApAQCAt
NzU3LDkgKzc1NywxNCBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlYWRDYWxsYmFjayhH
SW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqCiAKICAgICBHVW5pcXVlT3V0
UHRyPEdFcnJvcj4gZXJyb3I7CiAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFt
X3JlYWRfZmluaXNoKGlucHV0U3RyZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAg
aWYgKGVycm9yKQotICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6OmdlbmVyaWNH
RXJyb3IoZXJyb3IuZ2V0KCksIHRhc2stPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKLSAgICBlbHNl
IGlmIChieXRlc1JlYWQgPiAwKQorICAgIGlmIChlcnJvcikgeworICAgICAgICBpZiAodGFzay0+
bV9zb3VwUmVxdWVzdCkKKyAgICAgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6
Z2VuZXJpY0dFcnJvcihlcnJvci5nZXQoKSwgdGFzay0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpOwor
ICAgICAgICBlbHNlIGlmICh0YXNrLT5tX2ZpbGUpCisgICAgICAgICAgICB0YXNrLT5kaWRGYWls
KFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoZXJyb3ItPmRvbWFpbiksIGVycm9yLT5j
b2RlLCB0YXNrLT5tX2ZpcnN0UmVxdWVzdC51cmwoKSwgU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+
bWVzc2FnZSkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9IGVsc2UgaWYgKGJ5dGVzUmVhZCA+IDApCiAgICAgICAgIHRhc2st
PmRpZFJlYWQoYnl0ZXNSZWFkKTsKICAgICBlbHNlCiAgICAgICAgIHRhc2stPmRpZEZpbmlzaFJl
YWQoKTsKQEAgLTExNzEsNSArMTE3Niw5OSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRp
ZFJlc3RhcnQoKQogICAgIG1fbmV0d29ya0xvYWRNZXRyaWNzID0geyB9OwogfQogCit2b2lkIE5l
dHdvcmtEYXRhVGFza1NvdXA6OmZpbGVRdWVyeUluZm9DYWxsYmFjayhHRmlsZSogZmlsZSwgR0Fz
eW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCit7CisgICAgUmVm
UHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsK
KyAgICBBU1NFUlQoZmlsZSA9PSB0YXNrLT5tX2ZpbGUuZ2V0KCkpOworCisgICAgaWYgKHRhc2st
PnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpD
b21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVz
dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWdub3JlIHRoZSBlcnJvciBo
ZXJlLCBpdCB3aWxsIGJlIGhhbmRsZWQgYnkgZ19maWxlX3JlYWRfYXN5bmMgYmVsb3cuCisgICAg
aWYgKEdSZWZQdHI8R0ZpbGVJbmZvPiBpbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZv
X2ZpbmlzaChmaWxlLCByZXN1bHQsIG51bGxwdHIpKSkgeworICAgICAgICB0YXNrLT5kaWRHZXRG
aWxlSW5mbyhpbmZvLmdldCgpKTsKKworICAgICAgICBpZiAoZ19maWxlX2luZm9fZ2V0X2ZpbGVf
dHlwZShpbmZvLmdldCgpKSA9PSBHX0ZJTEVfVFlQRV9ESVJFQ1RPUlkpIHsKKyAgICAgICAgICAg
IGdfZmlsZV9lbnVtZXJhdGVfY2hpbGRyZW5fYXN5bmMoZmlsZSwgIioiLCBHX0ZJTEVfUVVFUllf
SU5GT19OT05FLCBSdW5Mb29wU291cmNlUHJpb3JpdHk6OkFzeW5jSU9OZXR3b3JrLCB0YXNrLT5t
X2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Fz
eW5jUmVhZHlDYWxsYmFjaz4oZW51bWVyYXRlRmlsZUNoaWxkcmVuQ2FsbGJhY2spLCBwcm90ZWN0
ZWRUaGlzLmxlYWtSZWYoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBnX2ZpbGVfcmVhZF9hc3luYyhmaWxlLCBSdW5Mb29wU291cmNlUHJpb3JpdHk6OkFz
eW5jSU9OZXR3b3JrLCB0YXNrLT5tX2NhbmNlbGxhYmxlLmdldCgpLCByZWludGVycHJldF9jYXN0
PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJlYWRGaWxlQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxl
YWtSZWYoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkR2V0RmlsZUluZm8o
R0ZpbGVJbmZvKiBpbmZvKQoreworICAgIG1fcmVzcG9uc2Uuc2V0VVJMKG1fZmlyc3RSZXF1ZXN0
LnVybCgpKTsKKyAgICBpZiAoZ19maWxlX2luZm9fZ2V0X2ZpbGVfdHlwZShpbmZvKSA9PSBHX0ZJ
TEVfVFlQRV9ESVJFQ1RPUlkpIHsKKyAgICAgICAgbV9yZXNwb25zZS5zZXRNaW1lVHlwZSgidGV4
dC9odG1sIik7CisgICAgICAgIG1fcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKC0x
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBnY2hhciogY29udGVudFR5cGUgPSBnX2Zp
bGVfaW5mb19nZXRfY29udGVudF90eXBlKGluZm8pOworICAgICAgICBtX3Jlc3BvbnNlLnNldE1p
bWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsKKyAgICAg
ICAgbV9yZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlh
VHlwZShjb250ZW50VHlwZSkpOworICAgICAgICBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIG1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoTUlNRVR5cGVSZWdp
c3RyeTo6bWltZVR5cGVGb3JQYXRoKG1fcmVzcG9uc2UudXJsKCkucGF0aCgpLnRvU3RyaW5nKCkp
KTsKKyAgICAgICAgbV9yZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoZ19maWxlX2lu
Zm9fZ2V0X3NpemUoaW5mbykpOworICAgIH0KK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3Vw
OjpyZWFkRmlsZUNhbGxiYWNrKEdGaWxlKiBmaWxlLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0
d29ya0RhdGFUYXNrU291cCogdGFzaykKK3sKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291
cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOworICAgIEFTU0VSVChmaWxlID09IHRh
c2stPm1fZmlsZS5nZXQoKSk7CisKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2Fu
Y2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9j
bGllbnQpIHsKKyAgICAgICAgdGFzay0+Y2xlYXJSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6U3VzcGVuZGVkKSB7Cisg
ICAgICAgIEFTU0VSVCghdGFzay0+bV9wZW5kaW5nUmVzdWx0KTsKKyAgICAgICAgdGFzay0+bV9w
ZW5kaW5nUmVzdWx0ID0gcmVzdWx0OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1Vu
aXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBpbnB1
dFN0cmVhbSA9IGFkb3B0R1JlZihHX0lOUFVUX1NUUkVBTShnX2ZpbGVfcmVhZF9maW5pc2goZmls
ZSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICB0
YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoZXJyb3ItPmRvbWFp
biksIGVycm9yLT5jb2RlLCB0YXNrLT5tX2ZpcnN0UmVxdWVzdC51cmwoKSwgU3RyaW5nOjpmcm9t
VVRGOChlcnJvci0+bWVzc2FnZSkpKTsKKyAgICBlbHNlCisgICAgICAgIHRhc2stPmRpZFJlYWRG
aWxlKFdURk1vdmUoaW5wdXRTdHJlYW0pKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3Vw
OjplbnVtZXJhdGVGaWxlQ2hpbGRyZW5DYWxsYmFjayhHRmlsZSogZmlsZSwgR0FzeW5jUmVzdWx0
KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCit7CisgICAgUmVmUHRyPE5ldHdv
cmtEYXRhVGFza1NvdXA+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBBU1NF
UlQoZmlsZSA9PSB0YXNrLT5tX2ZpbGUuZ2V0KCkpOworCisgICAgaWYgKHRhc2stPnN0YXRlKCkg
PT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQg
fHwgIXRhc2stPm1fY2xpZW50KSB7CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OlN1
c3BlbmRlZCkgeworICAgICAgICBBU1NFUlQoIXRhc2stPm1fcGVuZGluZ1Jlc3VsdCk7CisgICAg
ICAgIHRhc2stPm1fcGVuZGluZ1Jlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHUmVmUHRyPEdGaWxl
RW51bWVyYXRvcj4gZW51bWVyYXRvciA9IGFkb3B0R1JlZihnX2ZpbGVfZW51bWVyYXRlX2NoaWxk
cmVuX2ZpbmlzaChmaWxlLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgIGlmIChlcnJv
cikKKyAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5n
KGVycm9yLT5kb21haW4pLCBlcnJvci0+Y29kZSwgdGFzay0+bV9maXJzdFJlcXVlc3QudXJsKCks
IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpKSk7CisgICAgZWxzZQorICAgICAgICB0
YXNrLT5kaWRSZWFkRmlsZSh3ZWJraXREaXJlY3RvcnlJbnB1dFN0cmVhbU5ldyhXVEZNb3ZlKGVu
dW1lcmF0b3IpLCB0YXNrLT5tX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkpKTsK
K30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZWFkRmlsZShHUmVmUHRyPEdJbnB1
dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKK3sKKyAgICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShp
bnB1dFN0cmVhbSk7CisgICAgZGlzcGF0Y2hEaWRSZWNlaXZlUmVzcG9uc2UoKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oCmluZGV4IDFjYTQ1MDdjYWRhNS4uNGVj
ODA1Y2VlZWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya0RhdGFUYXNrU291cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgKQEAgLTEyNiwxMiArMTI2LDE5IEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIHZvaWQgcmVzdGFydGVkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3Jr
RGF0YVRhc2tTb3VwKik7CiAgICAgdm9pZCBkaWRSZXN0YXJ0KCk7CiAKKyAgICBzdGF0aWMgdm9p
ZCBmaWxlUXVlcnlJbmZvQ2FsbGJhY2soR0ZpbGUqLCBHQXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0
YVRhc2tTb3VwKik7CisgICAgdm9pZCBkaWRHZXRGaWxlSW5mbyhHRmlsZUluZm8qKTsKKyAgICBz
dGF0aWMgdm9pZCByZWFkRmlsZUNhbGxiYWNrKEdGaWxlKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29y
a0RhdGFUYXNrU291cCopOworICAgIHN0YXRpYyB2b2lkIGVudW1lcmF0ZUZpbGVDaGlsZHJlbkNh
bGxiYWNrKEdGaWxlKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrU291cCopOworICAg
IHZvaWQgZGlkUmVhZEZpbGUoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYpOworCiAgICAgV2ViQ29y
ZTo6RnJhbWVJZGVudGlmaWVyIG1fZnJhbWVJRDsKICAgICBXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciBtX3BhZ2VJRDsKICAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9OwogICAg
IFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBtX3Nob3VsZENvbnRlbnRTbmlmZjsKICAg
ICBHUmVmUHRyPFNvdXBSZXF1ZXN0PiBtX3NvdXBSZXF1ZXN0OwogICAgIEdSZWZQdHI8U291cE1l
c3NhZ2U+IG1fc291cE1lc3NhZ2U7CisgICAgR1JlZlB0cjxHRmlsZT4gbV9maWxlOwogICAgIEdS
ZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOwogICAgIEdSZWZQdHI8U291cE11bHRp
cGFydElucHV0U3RyZWFtPiBtX211bHRpcGFydElucHV0U3RyZWFtOwogICAgIEdSZWZQdHI8R0Nh
bmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL1Jlc291cmNlcy9kaXJlY3RvcnkuY3NzIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zb3VwL1Jlc291cmNlcy9kaXJlY3RvcnkuY3NzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODJlODY1MTZhMDE4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1Jlc291cmNlcy9kaXJlY3Rvcnku
Y3NzCkBAIC0wLDAgKzEsNzAgQEAKKzpyb290IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjVm
NDsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworYTpob3ZlciB7Cisg
IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCit0YWJsZSB7CisgIHdpZHRoOiAxMDAl
OworICB0YWJsZS1sYXlvdXQ6IGZpeGVkOworICBtYXJnaW46IDAgYXV0bzsKK30KKwordGggPiBh
IHsKKyAgY29sb3I6IGluaGVyaXQ7Cit9CisKK3RhYmxlW29yZGVyXSA+IHRoZWFkID4gdHIgPiB0
aDo6YWZ0ZXIgeworICBkaXNwbGF5OiBub25lOworICB3aWR0aDogLjhlbTsKKyAgbWFyZ2luLWlu
bGluZS1lbmQ6IC0uOGVtOworICB0ZXh0LWFsaWduOiBlbmQ7Cit9CisKK3RhYmxlW29yZGVyPSJh
c2MiXSA+IHRoZWFkID4gdHIgPiB0aDo6YWZ0ZXIgeworICBjb250ZW50OiAiXDIxOTMiOworfQor
dGFibGVbb3JkZXI9ImRlc2MiXSA+IHRoZWFkID4gdHIgPiB0aDo6YWZ0ZXIgeworICBjb250ZW50
OiAiXDIxOTEiOworfQorCit0YWJsZVtvcmRlcl1bb3JkZXItYnk9IjAiXSA+IHRoZWFkID4gdHIg
PiB0aDpmaXJzdC1jaGlsZCA+IGEgLAordGFibGVbb3JkZXJdW29yZGVyLWJ5PSIxIl0gPiB0aGVh
ZCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQgKyB0aCA+IGEgLAordGFibGVbb3JkZXJdW29yZGVyLWJ5
PSIyIl0gPiB0aGVhZCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQgKyB0aCArIHRoID4gYSB7CisgIHRl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCit0YWJsZVtvcmRlcl1bb3JkZXItYnk9IjAi
XSA+IHRoZWFkID4gdHIgPiB0aDpmaXJzdC1jaGlsZDo6YWZ0ZXIgLAordGFibGVbb3JkZXJdW29y
ZGVyLWJ5PSIxIl0gPiB0aGVhZCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQgKyB0aDo6YWZ0ZXIgLAor
dGFibGVbb3JkZXJdW29yZGVyLWJ5PSIyIl0gPiB0aGVhZCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQg
KyB0aCArIHRoOjphZnRlciB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKK30KKwordGQ6Zmly
c3QtY2hpbGQgeworICBtYXgtd2lkdGg6IDEwMCU7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIHRl
eHQtb3ZlcmZsb3c6IGVsbGlwc2lzOworICB3aGl0ZS1zcGFjZTogbm93cmFwOworfQorCit0cjpu
dGgtY2hpbGQoZXZlbikgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOworfQorCitAbWVk
aWEgKG1pbi13aWR0aDogNTUwcHgpIHsKKyAgYm9keSB7CisgICAgcGFkZGluZzogM2VtOworICAg
IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIGJvcmRlci1yYWRpdXM6IDFlbTsKKyAgICBi
b3JkZXI6IDJweCBzb2xpZCByZ2JhKDIxMSwgMjE1LCAyMDcpOworICAgIG1heC13aWR0aDogNjVl
bTsKKyAgICBtYXJnaW46IDJlbSBhdXRvOworICB9Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9SZXNvdXJjZXMvZGlyZWN0b3J5LmpzIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1Jlc291cmNlcy9kaXJlY3RvcnkuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iMTM4MGJkOGM2OTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvUmVzb3VyY2VzL2Rp
cmVjdG9yeS5qcwpAQCAtMCwwICsxLDc2IEBACisKKy8qIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBG
aXJlZm94IGRpcmVjdG9yeSBsaXN0aW5nLCBkaXN0cmlidXRlZCB1bmRlcgorICogTW96aWxsYSBQ
dWJsaWMgTGljZW5zZS4KKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBnVGFibGUsIGdPcmRl
ckJ5LCBnVEJvZHksIGdSb3dzOworCitkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250
ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7CisgIGdUYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJ0YWJsZSIpWzBdOworICBnVEJvZHkgPSBnVGFibGUudEJvZGllc1swXTsKKyAg
aWYgKGdUQm9keS5yb3dzLmxlbmd0aCA8IDIpCisgICAgcmV0dXJuOworICB2YXIgaGVhZENlbGxz
ID0gZ1RhYmxlLnRIZWFkLnJvd3NbMF0uY2VsbHM7CisKKyAgZnVuY3Rpb24gcm93QWN0aW9uKGkp
IHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7CisgICAgICBvcmRlckJ5KGkpOworICAgIH0KKyAgfQorCisgIGZvciAodmFyIGkgPSBo
ZWFkQ2VsbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICB2YXIgYW5jaG9yID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICAgIGFuY2hvci5ocmVmID0gIiI7CisgICAgYW5j
aG9yLmFwcGVuZENoaWxkKGhlYWRDZWxsc1tpXS5maXJzdENoaWxkKTsKKyAgICBoZWFkQ2VsbHNb
aV0uYXBwZW5kQ2hpbGQoYW5jaG9yKTsKKyAgICBoZWFkQ2VsbHNbaV0uYWRkRXZlbnRMaXN0ZW5l
cigiY2xpY2siLCByb3dBY3Rpb24oaSksIHRydWUpOworICB9CisgIGdUYWJsZS5zZXRBdHRyaWJ1
dGUoIm9yZGVyIiwgIiIpOworICBvcmRlckJ5KDApOworfSwgImZhbHNlIik7CisKK2Z1bmN0aW9u
IGNvbXBhcmVSb3dzKHJvd0EsIHJvd0IpIHsKKyAgdmFyIGEgPSByb3dBLmNlbGxzW2dPcmRlckJ5
XS5nZXRBdHRyaWJ1dGUoInNvcnRhYmxlLWRhdGEiKSB8fCByb3dBLmNlbGxzW2dPcmRlckJ5XS5p
bm5lckhUTUw7CisgIHZhciBiID0gcm93Qi5jZWxsc1tnT3JkZXJCeV0uZ2V0QXR0cmlidXRlKCJz
b3J0YWJsZS1kYXRhIikgfHwgcm93Qi5jZWxsc1tnT3JkZXJCeV0uaW5uZXJIVE1MOworICB2YXIg
aW50QSA9ICthOworICB2YXIgaW50QiA9ICtiOworICBpZiAoYSA9PSBpbnRBICYmIGIgPT0gaW50
QikgeworICAgIGEgPSBpbnRBOworICAgIGIgPSBpbnRCOworICB9IGVsc2UgeworICAgIGEgPSBh
LnRvTG93ZXJDYXNlKCk7CisgICAgYiA9IGIudG9Mb3dlckNhc2UoKTsKKyAgfQorICBpZiAoYSA8
IGIpCisgICAgcmV0dXJuIC0xOworICBpZiAoYSA+IGIpCisgICAgcmV0dXJuIDE7CisgIHJldHVy
biAwOworfQorCitmdW5jdGlvbiBvcmRlckJ5KGNvbHVtbikgeworICBpZiAoIWdSb3dzKQorICAg
IGdSb3dzID0gQXJyYXkuZnJvbShnVEJvZHkucm93cyk7CisgIHZhciBvcmRlcjsKKyAgaWYgKGdP
cmRlckJ5ID09IGNvbHVtbikgeworICAgIG9yZGVyID0gZ1RhYmxlLmdldEF0dHJpYnV0ZSgib3Jk
ZXIiKSA9PSAiYXNjIiA/ICJkZXNjIiA6ICJhc2MiOworICB9IGVsc2UgeworICAgIG9yZGVyID0g
ImFzYyI7CisgICAgZ09yZGVyQnkgPSBjb2x1bW47CisgICAgZ1RhYmxlLnNldEF0dHJpYnV0ZSgi
b3JkZXItYnkiLCBjb2x1bW4pOworICAgIGdSb3dzLnNvcnQoY29tcGFyZVJvd3MpOworICB9Cisg
IGdUYWJsZS5yZW1vdmVDaGlsZChnVEJvZHkpOworICBnVGFibGUuc2V0QXR0cmlidXRlKCJvcmRl
ciIsIG9yZGVyKTsKKyAgaWYgKG9yZGVyID09ICJhc2MiKQorICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZ1Jvd3MubGVuZ3RoOyBpKyspCisgICAgICBnVEJvZHkuYXBwZW5kQ2hpbGQoZ1Jvd3NbaV0p
OworICBlbHNlCisgICAgZm9yICh2YXIgaSA9IGdSb3dzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0t
KQorICAgICAgZ1RCb2R5LmFwcGVuZENoaWxkKGdSb3dzW2ldKTsKKyAgZ1RhYmxlLmFwcGVuZENo
aWxkKGdUQm9keSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc291cC9XZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjY1Mjg2NWUzYzQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYktpdERpcmVjdG9y
eUlucHV0U3RyZWFtLmNwcApAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0uaCIKKworI2luY2x1ZGUgIldlYktpdERpcmVj
dG9yeUlucHV0U3RyZWFtRGF0YS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5j
bHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKworc3RydWN0IF9XZWJLaXREaXJlY3RvcnlJbnB1
dFN0cmVhbVByaXZhdGUgeworICAgIEdSZWZQdHI8R0ZpbGVFbnVtZXJhdG9yPiBlbnVtZXJhdG9y
OworICAgIENTdHJpbmcgdXJpOworCisgICAgR1JlZlB0cjxHQnl0ZXM+IGJ1ZmZlcjsKKyAgICBi
b29sIHJlYWREb25lOworfTsKKworV0VCS0lUX0RFRklORV9UWVBFKFdlYktpdERpcmVjdG9yeUlu
cHV0U3RyZWFtLCB3ZWJraXRfZGlyZWN0b3J5X2lucHV0X3N0cmVhbSwgR19UWVBFX0lOUFVUX1NU
UkVBTSkKKworc3RhdGljIEdCeXRlcyogd2Via2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1DcmVhdGVI
ZWFkZXIoV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKyAgICBjaGFyKiBo
ZWFkZXIgPSBnX3N0cmR1cF9wcmludGYoCisgICAgICAgICI8aHRtbD48aGVhZD4iCisgICAgICAg
ICI8dGl0bGU+JXM8L3RpdGxlPiIKKyAgICAgICAgIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50
LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sO1wiIGNoYXJzZXQ9XCJVVEYtOFwiPiIKKyAgICAg
ICAgIjxzdHlsZT4lczwvc3R5bGU+IgorICAgICAgICAiPHNjcmlwdD4lczwvc2NyaXB0PiIKKyAg
ICAgICAgIjwvaGVhZD4iCisgICAgICAgICI8Ym9keT4iCisgICAgICAgICI8dGFibGU+IgorICAg
ICAgICAiPHRoZWFkPiIKKyAgICAgICAgIjx0aCBhbGlnbj1cImxlZnRcIj4lczwvdGg+PHRoIGFs
aWduPVwicmlnaHRcIj4lczwvdGg+PHRoIGFsaWduPVwicmlnaHRcIj4lczwvdGg+IgorICAgICAg
ICAiPC90aGVhZD4iLAorICAgICAgICBzdHJlYW0tPnByaXYtPnVyaS5kYXRhKCksCisgICAgICAg
IFdlYkNvcmU6OmRpcmVjdG9yeVVzZXJBZ2VudFN0eWxlU2hlZXQsCisgICAgICAgIFdlYkNvcmU6
OmRpcmVjdG9yeUphdmFTY3JpcHQsCisgICAgICAgIF8oIk5hbWUiKSwKKyAgICAgICAgXygiU2l6
ZSIpLAorICAgICAgICBfKCJEYXRlIE1vZGlmaWVkIikpOworCisgICAgcmV0dXJuIGdfYnl0ZXNf
bmV3X3dpdGhfZnJlZV9mdW5jKGhlYWRlciwgc3RybGVuKGhlYWRlciksIGdfZnJlZSwgaGVhZGVy
KTsKK30KKworc3RhdGljIEdCeXRlcyogd2Via2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1DcmVhdGVG
b290ZXIoV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogZm9vdGVyID0gIjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iOworICAgIHJldHVy
biBnX2J5dGVzX25ld19zdGF0aWMoZm9vdGVyLCBzdHJsZW4oZm9vdGVyKSk7Cit9CisKK3N0YXRp
YyBHQnl0ZXMqIHdlYmtpdERpcmVjdG9yeUlucHV0U3RyZWFtQ3JlYXRlUm93KFdlYktpdERpcmVj
dG9yeUlucHV0U3RyZWFtICpzdHJlYW0sIEdGaWxlSW5mbyogaW5mbykKK3sKKyAgICBpZiAoIWdf
ZmlsZV9pbmZvX2dldF9uYW1lKGluZm8pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGNvbnN0IGNoYXIqIG5hbWUgPSBnX2ZpbGVfaW5mb19nZXRfZGlzcGxheV9uYW1lKGluZm8pOwor
ICAgIGlmICghbmFtZSkgeworICAgICAgICBuYW1lID0gZ19maWxlX2luZm9fZ2V0X25hbWUoaW5m
byk7CisgICAgICAgIGlmICghZ191dGY4X3ZhbGlkYXRlKG5hbWUsIC0xLCBudWxscHRyKSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEdVbmlxdWVQdHI8Y2hhcj4g
bWFya3VwTmFtZShnX21hcmt1cF9lc2NhcGVfdGV4dChuYW1lLCAtMSkpOworICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gZXNjYXBlZE5hbWUoZ191cmlfZXNjYXBlX3N0cmluZyhuYW1lLCBudWxscHRyLCBG
QUxTRSkpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2J1aWxkX2ZpbGVuYW1lKHN0cmVh
bS0+cHJpdi0+dXJpLmRhdGEoKSwgZXNjYXBlZE5hbWUuZ2V0KCksIG51bGxwdHIpKTsKKyAgICBH
VW5pcXVlUHRyPGNoYXI+IGZvcm1hdHRlZFNpemUoZ19maWxlX2luZm9fZ2V0X2ZpbGVfdHlwZShp
bmZvKSA9PSBHX0ZJTEVfVFlQRV9SRUdVTEFSID8gZ19mb3JtYXRfc2l6ZShnX2ZpbGVfaW5mb19n
ZXRfc2l6ZShpbmZvKSkgOiBudWxscHRyKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGZvcm1hdHRl
ZE5hbWUoZ19maWxlX2luZm9fZ2V0X2ZpbGVfdHlwZShpbmZvKSA9PSBHX0ZJTEVfVFlQRV9ESVJF
Q1RPUlkgPyBnX3N0cmR1cF9wcmludGYoIjEuJXMiLCBwYXRoLmdldCgpKSA6IGdfc3RyZHVwX3By
aW50ZigiJXMiLCBwYXRoLmdldCgpKSk7CisjaWYgR0xJQl9DSEVDS19WRVJTSU9OICgyLCA2MSwg
MikKKyAgICBHUmVmUHRyPEdEYXRlVGltZT4gbW9kaWZpY2F0aW9uVGltZSA9IGFkb3B0R1JlZihn
X2ZpbGVfaW5mb19nZXRfbW9kaWZpY2F0aW9uX2RhdGVfdGltZShpbmZvKSk7CisjZWxzZQorICAg
IEdUaW1lVmFsIG1vZGlmaWVkOworICAgIGdfZmlsZV9pbmZvX2dldF9tb2RpZmljYXRpb25fdGlt
ZShpbmZvLCAmbW9kaWZpZWQpOworICAgIEdSZWZQdHI8R0RhdGVUaW1lPiBtb2RpZmljYXRpb25U
aW1lID0gYWRvcHRHUmVmKGdfZGF0ZV90aW1lX25ld19mcm9tX3RpbWV2YWxfbG9jYWwoJm1vZGlm
aWVkKSk7CisjZW5kaWYKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGZvcm1hdHRlZFRpbWUoZ19kYXRl
X3RpbWVfZm9ybWF0KG1vZGlmaWNhdGlvblRpbWUuZ2V0KCksICIlWCIpKTsKKyAgICBHVW5pcXVl
UHRyPGNoYXI+IGZvcm1hdHRlZERhdGUoZ19kYXRlX3RpbWVfZm9ybWF0KG1vZGlmaWNhdGlvblRp
bWUuZ2V0KCksICIleCIpKTsKKworICAgIGNoYXIqIHJvdyA9IGdfc3RyZHVwX3ByaW50ZigKKyAg
ICAgICAgIjx0cj4iCisgICAgICAgICI8dGQgc29ydGFibGUtZGF0YT1cIiVzXCI+PGEgaHJlZj1c
IiVzXCI+JXM8L2E+PC90ZD4iCisgICAgICAgICI8dGQgYWxpZ249XCJyaWdodFwiIHNvcnRhYmxl
LWRhdGE9XCIlIiBHX0dPRkZTRVRfRk9STUFUICJcIj4lczwvdGQ+IgorICAgICAgICAiPHRkIGFs
aWduPVwicmlnaHRcIiBzb3J0YWJsZS1kYXRhPVwiJSIgR19HSU5UNjRfRk9STUFUICJcIj4lcyZl
bnNwOyVzPC90ZD5cbiIKKyAgICAgICAgIjwvdHI+IiwKKyAgICAgICAgZm9ybWF0dGVkTmFtZS5n
ZXQoKSwgcGF0aC5nZXQoKSwgbWFya3VwTmFtZS5nZXQoKSwgZ19maWxlX2luZm9fZ2V0X3NpemUo
aW5mbyksCisgICAgICAgIGZvcm1hdHRlZFNpemUgPyBmb3JtYXR0ZWRTaXplLmdldCgpIDogIiIs
IGdfZGF0ZV90aW1lX3RvX3VuaXgobW9kaWZpY2F0aW9uVGltZS5nZXQoKSksIGZvcm1hdHRlZFRp
bWUuZ2V0KCksIGZvcm1hdHRlZERhdGUuZ2V0KCkpOworICAgIHJldHVybiBnX2J5dGVzX25ld193
aXRoX2ZyZWVfZnVuYyhyb3csIHN0cmxlbihyb3cpLCBnX2ZyZWUsIHJvdyk7Cit9CisKK3N0YXRp
YyBHQnl0ZXMqIHdlYmtpdERpcmVjdG9yeUlucHV0U3RyZWFtUmVhZE5leHRGaWxlKFdlYktpdERp
cmVjdG9yeUlucHV0U3RyZWFtKiBzdHJlYW0sIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdF
cnJvcioqIGVycm9yKQoreworICAgIEdCeXRlcyogYnVmZmVyID0gbnVsbHB0cjsKKyAgICBkbyB7
CisgICAgICAgIEdFcnJvciogZmlsZUVycm9yID0gbnVsbHB0cjsKKyAgICAgICAgR1JlZlB0cjxH
RmlsZUluZm8+IGluZm8gPSBhZG9wdEdSZWYoZ19maWxlX2VudW1lcmF0b3JfbmV4dF9maWxlKHN0
cmVhbS0+cHJpdi0+ZW51bWVyYXRvci5nZXQoKSwgY2FuY2VsbGFibGUsICZmaWxlRXJyb3IpKTsK
KyAgICAgICAgaWYgKGZpbGVFcnJvcikgeworICAgICAgICAgICAgZ19wcm9wYWdhdGVfZXJyb3Io
ZXJyb3IsIGZpbGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghaW5mbyAmJiAhc3RyZWFtLT5wcml2LT5yZWFkRG9uZSkgeworICAg
ICAgICAgICAgc3RyZWFtLT5wcml2LT5yZWFkRG9uZSA9IHRydWU7CisgICAgICAgICAgICBidWZm
ZXIgPSB3ZWJraXREaXJlY3RvcnlJbnB1dFN0cmVhbUNyZWF0ZUZvb3RlcihzdHJlYW0pOworICAg
ICAgICB9IGVsc2UgaWYgKGluZm8pCisgICAgICAgICAgICBidWZmZXIgPSB3ZWJraXREaXJlY3Rv
cnlJbnB1dFN0cmVhbUNyZWF0ZVJvdyhzdHJlYW0sIGluZm8uZ2V0KCkpOworICAgIH0gd2hpbGUg
KCFidWZmZXIgJiYgIXN0cmVhbS0+cHJpdi0+cmVhZERvbmUpOworCisgICAgcmV0dXJuIGJ1ZmZl
cjsKK30KKworc3RhdGljIGdzc2l6ZSB3ZWJraXREaXJlY3RvcnlJbnB1dFN0cmVhbVJlYWQoR0lu
cHV0U3RyZWFtKiBpbnB1dCwgdm9pZCogYnVmZmVyLCBnc2l6ZSBjb3VudCwgR0NhbmNlbGxhYmxl
KiBjYW5jZWxsYWJsZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgYXV0byogc3RyZWFtID0gV0VC
S0lUX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0oaW5wdXQpOworCisgICAgaWYgKHN0cmVhbS0+cHJp
di0+cmVhZERvbmUpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ3NpemUgdG90YWxCeXRlc1Jl
YWQgPSAwOworICAgIHdoaWxlICh0b3RhbEJ5dGVzUmVhZCA8IGNvdW50KSB7CisgICAgICAgIGlm
ICghc3RyZWFtLT5wcml2LT5idWZmZXIpIHsKKyAgICAgICAgICAgIHN0cmVhbS0+cHJpdi0+YnVm
ZmVyID0gYWRvcHRHUmVmKHdlYmtpdERpcmVjdG9yeUlucHV0U3RyZWFtUmVhZE5leHRGaWxlKHN0
cmVhbSwgY2FuY2VsbGFibGUsIGVycm9yKSk7CisgICAgICAgICAgICBpZiAoIXN0cmVhbS0+cHJp
di0+YnVmZmVyKSB7CisgICAgICAgICAgICAgICAgaWYgKHRvdGFsQnl0ZXNSZWFkKQorICAgICAg
ICAgICAgICAgICAgICBnX2NsZWFyX2Vycm9yKGVycm9yKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdG90YWxCeXRlc1JlYWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBn
c2l6ZSBidWZmZXJTaXplOworICAgICAgICBhdXRvKiBidWZmZXJEYXRhID0gZ19ieXRlc19nZXRf
ZGF0YShzdHJlYW0tPnByaXYtPmJ1ZmZlci5nZXQoKSwgJmJ1ZmZlclNpemUpOworICAgICAgICBn
c2l6ZSBieXRlc1JlYWQgPSBzdGQ6Om1pbihidWZmZXJTaXplLCB0b3RhbEJ5dGVzUmVhZCAtIGNv
dW50KTsKKyAgICAgICAgbWVtY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlcikgKyB0
b3RhbEJ5dGVzUmVhZCwgYnVmZmVyRGF0YSwgYnl0ZXNSZWFkKTsKKyAgICAgICAgaWYgKGJ5dGVz
UmVhZCA9PSBidWZmZXJTaXplKQorICAgICAgICAgICAgc3RyZWFtLT5wcml2LT5idWZmZXIgPSBu
dWxscHRyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdHJlYW0tPnByaXYtPmJ1ZmZlciA9
IGdfYnl0ZXNfbmV3X2Zyb21fYnl0ZXMoc3RyZWFtLT5wcml2LT5idWZmZXIuZ2V0KCksIGJ5dGVz
UmVhZCwgYnVmZmVyU2l6ZSAtIGJ5dGVzUmVhZCk7CisgICAgICAgIHRvdGFsQnl0ZXNSZWFkICs9
IGJ5dGVzUmVhZDsKKyAgICB9CisKKyAgICByZXR1cm4gdG90YWxCeXRlc1JlYWQ7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXREaXJlY3RvcnlJbnB1dFN0cmVhbUNsb3NlKEdJbnB1dFN0cmVh
bSogaW5wdXQsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIGF1dG8qIHByaXYgPSBXRUJLSVRfRElSRUNUT1JZX0lOUFVUX1NUUkVBTShpbnB1dCktPnBy
aXY7CisKKyAgICBwcml2LT5idWZmZXIgPSBudWxscHRyOworCisgICAgcmV0dXJuIGdfZmlsZV9l
bnVtZXJhdG9yX2Nsb3NlKHByaXYtPmVudW1lcmF0b3IuZ2V0KCksIGNhbmNlbGxhYmxlLCBlcnJv
cik7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9jbGFz
c19pbml0KFdlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MqIGtsYXNzKQoreworICAgIGF1
dG8qIGlucHV0U3RyZWFtQ2xhc3MgPSBHX0lOUFVUX1NUUkVBTV9DTEFTUyhrbGFzcyk7CisgICAg
aW5wdXRTdHJlYW1DbGFzcy0+cmVhZF9mbiA9IHdlYmtpdERpcmVjdG9yeUlucHV0U3RyZWFtUmVh
ZDsKKyAgICBpbnB1dFN0cmVhbUNsYXNzLT5jbG9zZV9mbiA9IHdlYmtpdERpcmVjdG9yeUlucHV0
U3RyZWFtQ2xvc2U7Cit9CisKK0dSZWZQdHI8R0lucHV0U3RyZWFtPiB3ZWJraXREaXJlY3RvcnlJ
bnB1dFN0cmVhbU5ldyhHUmVmUHRyPEdGaWxlRW51bWVyYXRvcj4mJiBlbnVtZXJhdG9yLCBDU3Ry
aW5nJiYgdXJpKQoreworICAgIGF1dG8qIHN0cmVhbSA9IFdFQktJVF9ESVJFQ1RPUllfSU5QVVRf
U1RSRUFNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBu
dWxscHRyKSk7CisgICAgc3RyZWFtLT5wcml2LT5lbnVtZXJhdG9yID0gV1RGTW92ZShlbnVtZXJh
dG9yKTsKKyAgICBzdHJlYW0tPnByaXYtPnVyaSA9IFdURk1vdmUodXJpKTsKKyAgICBzdHJlYW0t
PnByaXYtPmJ1ZmZlciA9IGFkb3B0R1JlZih3ZWJraXREaXJlY3RvcnlJbnB1dFN0cmVhbUNyZWF0
ZUhlYWRlcihzdHJlYW0pKTsKKworICAgIHJldHVybiBhZG9wdEdSZWYoR19JTlBVVF9TVFJFQU0o
KHN0cmVhbSkpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c291cC9XZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iMzNmNmY5Yzc5NTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvV2ViS2l0RGlyZWN0b3J5SW5wdXRT
dHJlYW0uaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgor
I2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9ESVJFQ1RPUllfSU5Q
VVRfU1RSRUFNICAgICAgICAgICAgKHdlYmtpdF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90
eXBlICgpKQorI2RlZmluZSBXRUJLSVRfRElSRUNUT1JZX0lOUFVUX1NUUkVBTShvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgV0VCS0lUX1RZUEVfRElS
RUNUT1JZX0lOUFVUX1NUUkVBTSwgV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0pKQorI2RlZmlu
ZSBXRUJLSVRfSVNfRElSRUNUT1JZX0lOUFVUX1NUUkVBTShvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NU
UkVBTSkpCisjZGVmaW5lIFdFQktJVF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX0RJUkVD
VE9SWV9JTlBVVF9TVFJFQU0sIFdlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MpKQorI2Rl
ZmluZSBXRUJLSVRfSVNfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NU
UkVBTSkpCisjZGVmaW5lIFdFQktJVF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX0RJUkVD
VE9SWV9JTlBVVF9TVFJFQU0sIFdlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MpKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0gV2ViS2l0RGlyZWN0b3J5
SW5wdXRTdHJlYW07Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1D
bGFzcyBXZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERpcmVjdG9yeUlucHV0U3RyZWFtUHJpdmF0ZSBXZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVh
bVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0geworICAgIEdJ
bnB1dFN0cmVhbSBwYXJlbnQ7CisKKyAgICBXZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbVByaXZh
dGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3Mg
eworICAgIEdJbnB1dFN0cmVhbUNsYXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUgd2Via2l0
X2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUodm9pZCk7CisKK0dSZWZQdHI8R0lucHV0
U3RyZWFtPiB3ZWJraXREaXJlY3RvcnlJbnB1dFN0cmVhbU5ldyhHUmVmUHRyPEdGaWxlRW51bWVy
YXRvcj4mJiwgQ1N0cmluZyYmIHVyaSk7CisKK0dfRU5EX0RFQ0xTCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IDljODYzMjA2OTdhMy4uMzEyZjU5Y2IxN2E5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1H
VEsuY21ha2UKQEAgLTUwLDYgKzUwLDcgQEAgZW5kaWYgKCkKIAogbGlzdChBUFBFTkQgV2ViS2l0
X0RFUklWRURfU09VUkNFUwogICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSfS9J
bnNwZWN0b3JHUmVzb3VyY2VCdW5kbGUuYworICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJH
VEtfRElSfS9XZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbURhdGEuY3BwCiAgICAgJHtERVJJVkVE
X1NPVVJDRVNfV0VCS0lUMkdUS19ESVJ9L1dlYktpdFJlc291cmNlc0dSZXNvdXJjZUJ1bmRsZS5j
CiAKICAgICAke0RFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0FQSV9ESVJ9L1dlYktpdEVudW1U
eXBlcy5jcHAKQEAgLTY0LDYgKzY1LDE5IEBAIGlmIChFTkFCTEVfV0FZTEFORF9UQVJHRVQpCiAg
ICAgKQogZW5kaWYgKCkKIAorc2V0KFdlYktpdF9EaXJlY3RvcnlJbnB1dFN0cmVhbV9EQVRBCisg
ICAgJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9zb3VwL1Jlc291cmNlcy9kaXJlY3Rvcnku
Y3NzCisgICAgJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9zb3VwL1Jlc291cmNlcy9kaXJl
Y3RvcnkuanMKKykKKworYWRkX2N1c3RvbV9jb21tYW5kKAorICAgIE9VVFBVVCAke0RFUklWRURf
U09VUkNFU19XRUJLSVQyR1RLX0RJUn0vV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1EYXRhLmNw
cCAke0RFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0RJUn0vV2ViS2l0RGlyZWN0b3J5SW5wdXRT
dHJlYW1EYXRhLmgKKyAgICBNQUlOX0RFUEVOREVOQ1kgJHtXRUJDT1JFX0RJUn0vY3NzL21ha2Ut
Y3NzLWZpbGUtYXJyYXlzLnBsCisgICAgREVQRU5EUyAke1dlYktpdF9EaXJlY3RvcnlJbnB1dFN0
cmVhbV9EQVRBfQorICAgIENPTU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9ICR7V0VCQ09SRV9ESVJ9
L2Nzcy9tYWtlLWNzcy1maWxlLWFycmF5cy5wbCAtLWRlZmluZXMgIiR7RkVBVFVSRV9ERUZJTkVT
X1dJVEhfU1BBQ0VfU0VQQVJBVE9SfSIgLS1wcmVwcm9jZXNzb3IgIiR7Q09ERV9HRU5FUkFUT1Jf
UFJFUFJPQ0VTU09SfSIgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUMkdUS19ESVJ9L1dlYktpdERp
cmVjdG9yeUlucHV0U3RyZWFtRGF0YS5oICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElS
fS9XZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbURhdGEuY3BwICR7V2ViS2l0X0RpcmVjdG9yeUlu
cHV0U3RyZWFtX0RBVEF9CisgICAgVkVSQkFUSU0KKykKKwogaWYgKFVTRV9HVEs0KQogICAgIHNl
dChHVEtfQVBJX1ZFUlNJT04gNCkKICAgICBzZXQoR1RLX1BLR0NPTkZJR19QQUNLQUdFIGd0azQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BFLmNtYWtlIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCA3ZTNkOGE3ZTgzZDAuLmM0NDFlNmFhYmY0MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtV1BFLmNtYWtlCkBAIC04MiwxMSArODIsMjUgQEAgbGlzdChBUFBFTkQg
V2ViS2l0X1VOSUZJRURfU09VUkNFX0xJU1RfRklMRVMKIAogbGlzdChBUFBFTkQgV2ViS2l0X0RF
UklWRURfU09VUkNFUwogICAgICR7V2ViS2l0X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdFJl
c291cmNlc0dSZXNvdXJjZUJ1bmRsZS5jCisgICAgJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW1EYXRhLmNwcAogCiAgICAgJHtERVJJVkVEX1NP
VVJDRVNfV1BFX0FQSV9ESVJ9L1dlYktpdEVudW1UeXBlcy5jcHAKICAgICAke0RFUklWRURfU09V
UkNFU19XUEVfQVBJX0RJUn0vV2ViS2l0V2ViUHJvY2Vzc0VudW1UeXBlcy5jcHAKICkKIAorc2V0
KFdlYktpdF9EaXJlY3RvcnlJbnB1dFN0cmVhbV9EQVRBCisgICAgJHtXRUJLSVRfRElSfS9OZXR3
b3JrUHJvY2Vzcy9zb3VwL1Jlc291cmNlcy9kaXJlY3RvcnkuY3NzCisgICAgJHtXRUJLSVRfRElS
fS9OZXR3b3JrUHJvY2Vzcy9zb3VwL1Jlc291cmNlcy9kaXJlY3RvcnkuanMKKykKKworYWRkX2N1
c3RvbV9jb21tYW5kKAorICAgIE9VVFBVVCAke1dlYktpdF9ERVJJVkVEX1NPVVJDRVNfRElSfS9X
ZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVhbURhdGEuY3BwICR7V2ViS2l0X0RFUklWRURfU09VUkNF
U19ESVJ9L1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtRGF0YS5oCisgICAgTUFJTl9ERVBFTkRF
TkNZICR7V0VCQ09SRV9ESVJ9L2Nzcy9tYWtlLWNzcy1maWxlLWFycmF5cy5wbAorICAgIERFUEVO
RFMgJHtXZWJLaXRfRGlyZWN0b3J5SW5wdXRTdHJlYW1fREFUQX0KKyAgICBDT01NQU5EICR7UEVS
TF9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9jc3MvbWFrZS1jc3MtZmlsZS1hcnJheXMucGwg
LS1kZWZpbmVzICIke0ZFQVRVUkVfREVGSU5FU19XSVRIX1NQQUNFX1NFUEFSQVRPUn0iIC0tcHJl
cHJvY2Vzc29yICIke0NPREVfR0VORVJBVE9SX1BSRVBST0NFU1NPUn0iICR7V2ViS2l0X0RFUklW
RURfU09VUkNFU19ESVJ9L1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtRGF0YS5oICR7V2ViS2l0
X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtRGF0YS5jcHAg
JHtXZWJLaXRfRGlyZWN0b3J5SW5wdXRTdHJlYW1fREFUQX0KKyAgICBWRVJCQVRJTQorKQorCiBz
ZXQoV1BFX0FQSV9JTlNUQUxMRURfSEVBREVSUwogICAgICR7REVSSVZFRF9TT1VSQ0VTX1dQRV9B
UElfRElSfS9XZWJLaXRFbnVtVHlwZXMuaAogICAgICR7REVSSVZFRF9TT1VSQ0VTX1dQRV9BUElf
RElSfS9XZWJLaXRWZXJzaW9uLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dU
Sy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IDY2M2MyZTM5YTU4NS4u
NWQ1YjAzYjJlNWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKQEAgLTQzLDYgKzQzLDcgQEAgTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcAogTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtT
ZXNzaW9uU291cC5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHRTb3VwLmNwcAorTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJLaXREaXJlY3RvcnlJbnB1dFN0cmVh
bS5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvV2ViU29ja2V0VGFza1NvdXAuY3BwCiAKIE5ldHdv
cmtQcm9jZXNzL3dlYnJ0Yy9MaWJXZWJSVENTb2NrZXRDbGllbnQuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4
dAppbmRleCA1ZjM1NTMxZGUxMTYuLmM2NzY3MDc0Y2RiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CkBA
IC00Myw2ICs0Myw3IEBAIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291
cC5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAogTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3Vw
L1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAKK05ldHdvcmtQcm9jZXNzL3NvdXAvV2Vi
S2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0uY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYlNvY2tl
dFRhc2tTb3VwLmNwcAogCiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMvTGliV2ViUlRDU29ja2V0Q2xp
ZW50LmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IGUxMjY0Zjg1Njk0OC4uNGQyOWVhMWFlNzdmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDEtMTEgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtTT1VQ
XSBTdG9wIHVzaW5nIFNvdXBSZXF1ZXN0IEFQSSB0byBsb2FkIGZpbGVzIGluIHByZXBhcmF0aW9u
IGZvciBsaWJzb3VwMworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjIwNTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIFdlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtLmNwcCBhcyBleGNlcHRpb24gZm9y
IHN0eWxlIGNoZWNrZXIuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHk6CisKIDIwMjEtMDEtMTggIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29u
eS5jb20+CiAKICAgICAgICAgW1dpbl1bRHVtcFJlbmRlclRyZWVdIEFTU0VSVCghbV9jaGFubmVs
KSBmYWlsZWQgaW4gV2ViU29ja2V0Ojpjb250ZXh0RGVzdHJveWVkCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggMzExOWI3OGU3ZGYxLi42ODE5ODgxN2Q0YmQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTIzMyw3ICsyMzMsOCBA
QCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScs
ICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ21lZGlhc3RyZWFtJywgJ2dzdHJlYW1lcicsICdHU3Ry
ZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScs
ICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ21lZGlhc3RyZWFtJywgJ2dzdHJlYW1lcicsICdHU3Ry
ZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAnKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNl
JywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnbmV0d29yaycsICdzb3VwJywgJ1Byb3h5UmVzb2x2
ZXJTb3VwLmNwcCcpLAotICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdw
bGF0Zm9ybScsICduZXR3b3JrJywgJ3NvdXAnLCAnUHJveHlSZXNvbHZlclNvdXAuaCcpXSwKKyAg
ICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnbmV0d29y
aycsICdzb3VwJywgJ1Byb3h5UmVzb2x2ZXJTb3VwLmgnKSwKKyAgICAgIG9zLnBhdGguam9pbign
U291cmNlJywgJ1dlYktpdCcsICdOZXR3b3JrUHJvY2VzcycsICdzb3VwJywgJ1dlYktpdERpcmVj
dG9yeUlucHV0U3RyZWFtLmgnKV0sCiAgICAgIFsiLXJlYWRhYmlsaXR5L25hbWluZyIsCiAgICAg
ICAiLXJlYWRhYmlsaXR5L2VudW1fY2FzaW5nIl0pLAogCg==
</data>
<flag name="review"
          id="435781"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>