<?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>52867</bug_id>
          
          <creation_ts>2011-01-20 21:22:37 -0800</creation_ts>
          <short_desc>OwnArraryPtr.h uses deleteOwnedPtr but doesn’t include OwnPtrCommon.h</short_desc>
          <delta_ts>2011-02-06 21:25:04 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>bulach</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>jknotten</cc>
    
    <cc>jorlow</cc>
    
    <cc>mjs</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>tony</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>337858</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-20 21:22:37 -0800</bug_when>
    <thetext>Chromium clang build is failing with the following error:

&gt; In file included from
&gt; third_party/WebKit/Source/WebCore/html/HTMLFrameSetElement.h:27:
&gt; third_party/WebKit/Source/JavaScriptCore/wtf/OwnArrayPtr.h:123:5:error:
&gt; use of undeclared identifier &apos;deleteOwnedPtr&apos;
&gt;    deleteOwnedPtr(oldPtr);
&gt;    ^
&gt; third_party/WebKit/Source/WebCore/html/HTMLFrameSetElement.cpp:78:26:
&gt; note: in instantiation of member function
&gt; &apos;WTF::OwnArrayPtr&lt;WebCore::Length&gt;::set&apos; requested here
&gt;            m_rowLengths.set(newLengthArray(attr-&gt;value().string(),
&gt; m_totalRows));
&gt;                         ^
&gt; 1 error generated.

The problem is that OwnArrayPtr::set calls deleteOwnedPtr but doesn&apos;t include OwnPtrCommon.h.  We should either include the header or should call deleteOwnedArrayPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337869</commentid>
    <comment_count>1</comment_count>
      <attachid>79693</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-20 21:53:14 -0800</bug_when>
    <thetext>Created attachment 79693
Include OwnPtrCommon.h in OwnArrayPtr.h

Reading the comment:

// Remove this once we make all WebKit code compatible with stricter rules about OwnArrayPtr.
#define LOOSE_OWN_ARRAY_PTR

the correct thing to do here seems to include OwnPtrCommon.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337870</commentid>
    <comment_count>2</comment_count>
      <attachid>79693</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-01-20 22:01:55 -0800</bug_when>
    <thetext>Comment on attachment 79693
Include OwnPtrCommon.h in OwnArrayPtr.h

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337872</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-20 22:04:18 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 79693 [details])
&gt; r=me

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337873</commentid>
    <comment_count>4</comment_count>
      <attachid>79693</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-20 22:10:51 -0800</bug_when>
    <thetext>Comment on attachment 79693
Include OwnPtrCommon.h in OwnArrayPtr.h

Clearing flags on attachment: 79693

Committed r76334: &lt;http://trac.webkit.org/changeset/76334&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337874</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-20 22:10:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338205</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-21 11:40:14 -0800</bug_when>
    <thetext>This was the wrong fix. OwnArrayPtr&lt;T&gt;::set needs to use deletedOwnedArrayPtr. Or it needs to be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338220</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-21 11:49:51 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; This was the wrong fix. OwnArrayPtr&lt;T&gt;::set needs to use deletedOwnedArrayPtr. Or it needs to be removed.

Ok, let&apos;s fix then!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338225</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-21 11:53:12 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; This was the wrong fix. OwnArrayPtr&lt;T&gt;::set needs to use deletedOwnedArrayPtr. Or it needs to be removed.
&gt; 
&gt; Ok, let&apos;s fix then!

My preference would be to remove it, if we can quickly find the callers using it and change them to use adoptPtr instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338441</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-21 17:14:37 -0800</bug_when>
    <thetext>Let me do this over the weekend (hopefully).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338514</commentid>
    <comment_count>10</comment_count>
      <attachid>79827</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-21 22:17:08 -0800</bug_when>
    <thetext>Created attachment 79827
get rid of set</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338518</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-21 22:29:35 -0800</bug_when>
    <thetext>Attachment 79827 did not build on chromium:
Build output: http://queues.webkit.org/results/7521251</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338525</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-21 22:46:15 -0800</bug_when>
    <thetext>Attachment 79827 did not build on win:
Build output: http://queues.webkit.org/results/7622260</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338526</commentid>
    <comment_count>13</comment_count>
      <attachid>79830</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-21 23:07:39 -0800</bug_when>
    <thetext>Created attachment 79830
fixed platform code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338527</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-21 23:22:28 -0800</bug_when>
    <thetext>Attachment 79830 did not build on chromium:
Build output: http://queues.webkit.org/results/7510268</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338534</commentid>
    <comment_count>15</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-22 00:02:05 -0800</bug_when>
    <thetext>Attachment 79830 did not build on win:
Build output: http://queues.webkit.org/results/7596258</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338539</commentid>
    <comment_count>16</comment_count>
      <attachid>79834</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-22 00:43:17 -0800</bug_when>
    <thetext>Created attachment 79834
more port specific fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338541</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-22 00:57:27 -0800</bug_when>
    <thetext>Attachment 79834 did not build on chromium:
Build output: http://queues.webkit.org/results/7561293</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338545</commentid>
    <comment_count>18</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-22 01:38:41 -0800</bug_when>
    <thetext>Attachment 79834 did not build on win:
Build output: http://queues.webkit.org/results/7513275</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338560</commentid>
    <comment_count>19</comment_count>
      <attachid>79839</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-22 03:40:06 -0800</bug_when>
    <thetext>Created attachment 79839
another attempt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338563</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-22 04:03:01 -0800</bug_when>
    <thetext>Attachment 79839 did not build on chromium:
Build output: http://queues.webkit.org/results/7556269</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338572</commentid>
    <comment_count>21</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-22 04:35:15 -0800</bug_when>
    <thetext>Attachment 79839 did not build on win:
Build output: http://queues.webkit.org/results/7536279</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338626</commentid>
    <comment_count>22</comment_count>
      <attachid>79854</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-22 12:47:47 -0800</bug_when>
    <thetext>Created attachment 79854
yet another attempt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338629</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-22 13:10:47 -0800</bug_when>
    <thetext>Attachment 79854 did not build on chromium:
Build output: http://queues.webkit.org/results/7505249</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338657</commentid>
    <comment_count>24</comment_count>
      <attachid>79861</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-22 17:10:01 -0800</bug_when>
    <thetext>Created attachment 79861
fixed v8 binding</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338659</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-22 17:48:37 -0800</bug_when>
    <thetext>Attachment 79861 did not build on chromium:
Build output: http://queues.webkit.org/results/7626241</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346423</commentid>
    <comment_count>26</comment_count>
      <attachid>81438</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-06 18:06:47 -0800</bug_when>
    <thetext>Created attachment 81438
fixed cr-mac build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346427</commentid>
    <comment_count>27</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-06 18:30:06 -0800</bug_when>
    <thetext>Attachment 81438 did not build on qt:
Build output: http://queues.webkit.org/results/7700733</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346438</commentid>
    <comment_count>28</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-06 19:31:48 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; Attachment 81438 [details] did not build on qt:
&gt; Build output: http://queues.webkit.org/results/7700733

This is ews flakinss. kling kindly verified that it builds on qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346441</commentid>
    <comment_count>29</comment_count>
      <attachid>81438</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-06 20:04:40 -0800</bug_when>
    <thetext>Comment on attachment 81438
fixed cr-mac build

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

Exciting to see this. Looking forward to it landing. review- because of the JavaScriptCore registers issues.

&gt; Source/JavaScriptCore/runtime/Arguments.h:232
&gt;          Register* registerArray = new Register[registerArraySize];
&gt;          memcpy(registerArray, d-&gt;registers - registerOffset, registerArraySize * sizeof(Register));
&gt; -        d-&gt;registerArray.set(registerArray);
&gt; +        d-&gt;registerArray = registerArray;
&gt;          d-&gt;registers = registerArray + registerOffset;

Needs an adoptArrayPtr. Probably won’t compile. I think this is may be why EWS bots are failing to build.

&gt; Source/JavaScriptCore/runtime/JSVariableObject.h:165
&gt;      inline void JSVariableObject::setRegisters(Register* registers, Register* registerArray)
&gt;      {
&gt;          ASSERT(registerArray != d-&gt;registerArray.get());
&gt; -        d-&gt;registerArray.set(registerArray);
&gt; +        d-&gt;registerArray = registerArray;
&gt;          d-&gt;registers = registers;
&gt;      }

Needs PassOwnArrayPtr. Same as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346445</commentid>
    <comment_count>30</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-06 20:17:01 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 81438 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81438&amp;action=review
&gt; 
&gt; Exciting to see this. Looking forward to it landing. review- because of the JavaScriptCore registers issues.

Thanks for the review.

&gt; &gt; Source/JavaScriptCore/runtime/Arguments.h:232
&gt; &gt;          Register* registerArray = new Register[registerArraySize];
&gt; &gt;          memcpy(registerArray, d-&gt;registers - registerOffset, registerArraySize * sizeof(Register));
&gt; &gt; -        d-&gt;registerArray.set(registerArray);
&gt; &gt; +        d-&gt;registerArray = registerArray;
&gt; &gt;          d-&gt;registers = registerArray + registerOffset;
&gt; 
&gt; Needs an adoptArrayPtr. Probably won’t compile. I think this is may be why EWS bots are failing to build.

Sure enough.  I don&apos;t understand why XCode didn&apos;t complain about this.  Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346450</commentid>
    <comment_count>31</comment_count>
      <attachid>81445</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-06 20:35:18 -0800</bug_when>
    <thetext>Created attachment 81445
fixed per Darin&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346451</commentid>
    <comment_count>32</comment_count>
      <attachid>81445</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-06 20:40:31 -0800</bug_when>
    <thetext>Comment on attachment 81445
fixed per Darin&apos;s comment

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

&gt; Source/JavaScriptCore/runtime/JSVariableObject.h:165
&gt;      inline void JSVariableObject::setRegisters(Register* registers, Register* registerArray)
&gt;      {
&gt;          ASSERT(registerArray != d-&gt;registerArray.get());
&gt; -        d-&gt;registerArray.set(registerArray);
&gt; +        d-&gt;registerArray = adoptArrayPtr(registerArray);
&gt;          d-&gt;registers = registers;
&gt;      }

This is OK for landing, but really we need the adoptArrayPtr to be close to the actual allocation. In this case, setRegisters should be taking a PassOwnArrayPtr for registerArray. And JSGlobalObject::copyGlobalsFrom should be getting the register array in an OwnArrayPtr by calling JSVariableObject::copyRegisterArray. And inside copyRegisterArray, the adoptArrayPtr should be right there where it calls new.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346452</commentid>
    <comment_count>33</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-06 20:43:57 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 81445 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81445&amp;action=review
&gt; This is OK for landing, but really we need the adoptArrayPtr to be close to the actual allocation. In this case, setRegisters should be taking a PassOwnArrayPtr for registerArray. And JSGlobalObject::copyGlobalsFrom should be getting the register array in an OwnArrayPtr by calling JSVariableObject::copyRegisterArray. And inside copyRegisterArray, the adoptArrayPtr should be right there where it calls new.

I totally agree.  The only reason I didn&apos;t do was because this patch was already 47KB and adding that change seemed to bloat the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346458</commentid>
    <comment_count>34</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-06 21:01:45 -0800</bug_when>
    <thetext>Committed r77785: &lt;http://trac.webkit.org/changeset/77785&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346460</commentid>
    <comment_count>35</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-06 21:15:34 -0800</bug_when>
    <thetext>Attachment 81445 did not build on qt:
Build output: http://queues.webkit.org/results/7701754</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346462</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-06 21:25:04 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77785 might have broken Chromium Win Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79693</attachid>
            <date>2011-01-20 21:53:14 -0800</date>
            <delta_ts>2011-01-21 22:17:05 -0800</delta_ts>
            <desc>Include OwnPtrCommon.h in OwnArrayPtr.h</desc>
            <filename>fix52867-a</filename>
            <type>text/plain</type>
            <size>934</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzYzMDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAK
KzIwMTEtMDEtMjAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgT3duUHRyQ29tbW9u
LmggYmVjYXVzZSBPd25BcnJheVB0cjo6c2V0IGNhbGxzIGRlbGV0ZU93bmVkUHRyLgorCisgICAg
ICAgICogd3RmL093bkFycmF5UHRyLmg6CisKIDIwMTEtMDEtMjAgIFNpZGRoYXJ0aCBNYXRodXIg
IDxzaWRkaGFydGgubWF0aHVyQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9m
ZnJleSBHYXJlbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQdHIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5UHRyLmgJ
KHJldmlzaW9uIDc2MzA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiQXNzZXJ0aW9u
cy5oIgogI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCiAjaW5jbHVkZSAiTnVsbFB0ci5oIgorI2lu
Y2x1ZGUgIk93blB0ckNvbW1vbi5oIgogI2luY2x1ZGUgIk93bkFycmF5UHRyQ29tbW9uLmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79827</attachid>
            <date>2011-01-21 22:17:08 -0800</date>
            <delta_ts>2011-01-21 23:07:35 -0800</delta_ts>
            <desc>get rid of set</desc>
            <filename>bug-52867-20110121221707.patch</filename>
            <type>text/plain</type>
            <size>25980</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzY0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAK
KzIwMTEtMDEtMjEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmggdXNl
cyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisKKyAg
ICAgICAgUmVtb3ZlZCBMT09TRV9PV05fQVJSQVlfUFRSIGFuZCBPd25BcnJheVB0cjxUPjo6c2V0
LgorCisgICAgICAgIFJlcGxhY2VkIGFsbCBjYWxscyB0byBPd25BcnJheVB0cjo6c2V0IGFuZCBs
b29zZSBpbnN0YW50aWF0aW9uIG9mIE93bkFycmF5UHRyIGJ5CisgICAgICAgIGNhbGxzIHRvIG9w
ZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ci4KKworICAgICAgICAqIEFQSS9KU1N0cmluZ1JlZkNG
LmNwcDoKKyAgICAgICAgKEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKTogQ2FsbHMgb3BlcmF0
b3I9IGFuZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOiBSZW1vdmVkIE93bkFycmF5UHRyQ29tbW9uLmgKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHd0Zi9DTWFr
ZUxpc3RzLnR4dDogRGl0dG8uCisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KTogQ2FsbHMgb3BlcmF0b3I9IGFu
ZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1l
bnRzLmg6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6Y29weVJlZ2lzdGVycyk6IENhbGxzIGFk
b3B0QXJyYXlQdHIuCisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcik6IENhbGxzIG9wZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ciBpbnN0ZWFkIG9mIHNl
dC4KKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNWYXJpYWJsZU9iamVjdDo6c2V0UmVnaXN0ZXJzKTogQ2FsbHMgb3BlcmF0b3I9LgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVD
aGFpbjo6U3RydWN0dXJlQ2hhaW4pOiBDYWxscyBvcGVyYXRvcj0gYW5kIGFkb3B0QXJyYXlQdHIg
aW5zdGVhZCBvZiBzZXQuCisgICAgICAgICogd3RmL0RhdGVNYXRoLmg6CisgICAgICAgIChKU0M6
OkdyZWdvcmlhbkRhdGVUaW1lOjpHcmVnb3JpYW5EYXRlVGltZSk6CisgICAgICAgICogd3RmL093
bkFycmF5UHRyLmg6IEluY2x1ZGUgUGFzc093bkFycmF5UHRyLmggaW5zdGVhZCBvZiBPd25BcnJh
eVB0ckNvbW1vbi5oOyByZW1vdmVkIExPT1NFX09XTl9BUlJBWV9QVFIKKyAgICAgICAgYW5kIE93
bkFycmF5UHRyPFQ+OjpzZXQuCisgICAgICAgICogd3RmL093bkFycmF5UHRyQ29tbW9uLmg6IFJl
bW92ZWQuCisgICAgICAgICogd3RmL1Bhc3NPd25BcnJheVB0ci5oOiBObyBsb25nZXIgaW5jbHVk
ZXMgT3duQXJyYXlQdHJDb21tb24uaAorICAgICAgICAoV1RGOjpkZWxldGVPd25lZEFycmF5UHRy
KTogTW92ZWQgZnJvbSBPd25BcnJheVB0ckNvbW1vbi5oLgorCiAyMDExLTAxLTIxICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVq
IFN0YWNob3dpYWsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiA3NjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkod29y
a2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw2IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT1NBbGxvY2F0b3IuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL093bkZhc3RNYWxsb2NQdHIuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25B
cnJheVB0ckNvbW1vbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093blB0ckNvbW1v
bi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093blB0ci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmggXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1N0cmluZ1JlZkNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU3RyaW5nUmVmQ0YuY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgSlNTdHJpbmdSZWYgSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQwog
ICAgIC8vIGl0IGNhbiBob2xkLiAgKDxyZGFyOi8vcHJvYmxlbS82ODA2NDc4PikKICAgICBzaXpl
X3QgbGVuZ3RoID0gQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKICAgICBpZiAobGVuZ3RoKSB7
Ci0gICAgICAgIE93bkFycmF5UHRyPFVuaUNoYXI+IGJ1ZmZlcihuZXcgVW5pQ2hhcltsZW5ndGhd
KTsKKyAgICAgICAgT3duQXJyYXlQdHI8VW5pQ2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihu
ZXcgVW5pQ2hhcltsZW5ndGhdKTsKICAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHN0cmlu
ZywgQ0ZSYW5nZU1ha2UoMCwgbGVuZ3RoKSwgYnVmZmVyLmdldCgpKTsKICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFVuaUNoYXIpID09IHNpemVvZihVQ2hhciksIHVuaWNoYXJfYW5kX3Vj
aGFyX211c3RfYmVfc2FtZV9zaXplKTsKICAgICAgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjpj
cmVhdGUocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGJ1ZmZlci5nZXQoKSksIGxlbmd0aCkubGVh
a1JlZigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA3NjM5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTc0OSwxMCArNzQ5LDYgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8
RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcT3duQXJyYXlQdHJDb21tb24uaCIKLQkJ
CT4KLQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcT3duRmFz
dE1hbGxvY1B0ci5oIgogCQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQ3
LDcgKzU0Nyw2IEBACiAJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERTNBQjAw
RTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi87IH07CiAJCUJDRjYwNTE0MEUyMDNF
RjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkJFNjk2MTIy
NTYwRTgwMDMwOUU5RCAvKiBQYXNzT3duQXJyYXlQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkJFNjk1MTIyNTYwRTgwMDMwOUU5RCAvKiBQYXNz
T3duQXJyYXlQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlCQ0ZCRTY5ODEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21tb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkJFNjk3MTIy
NTYxRDIwMDMwOUU5RCAvKiBPd25BcnJheVB0ckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAv
KiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi87IH07CiAJ
CUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAv
KiBKdW1wVGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMwRTUwQTA2MzAwRTk2RTE1IC8qIE5vdEZv
dW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMEEy
NzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE0Nyw3ICsxMTQ2LDYgQEAKIAkJQkNGNjA1
MTIwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXJnTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y2NTUz
QjBBMjA0OERFMDAzOEExOTQgLyogTWF0aEV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWF0aEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Q0ZCRTY5NTEyMjU2MEU4MDAzMDlFOUQgLyogUGFzc093bkFycmF5UHRyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3NPd25BcnJheVB0ci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCQ0ZCRTY5NzEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21t
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3duQXJyYXlQdHJDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4
IC8qIEp1bXBUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
dW1wVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZEOEM5MTBFRUIy
RUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEp1bXBUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMEEyNzIzRjBF
NTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTm90Rm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjMsNyAr
MTU2MSw2IEBACiAJCQkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmgg
Ki8sCiAJCQkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3Bw
ICovLAogCQkJCTkzMDNGNUE0MDk5MTFBNTgwMEFENzFCOCAvKiBPd25BcnJheVB0ci5oICovLAot
CQkJCUJDRkJFNjk3MTIyNTYxRDIwMDMwOUU5RCAvKiBPd25BcnJheVB0ckNvbW1vbi5oICovLAog
CQkJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi8sCiAJ
CQkJOTMwM0Y1NjcwOTkxMThGQTAwQUQ3MUI4IC8qIE93blB0ci5oICovLAogCQkJCTQ0MEI3QUVE
MEZBRjdGQ0IwMDczMzIzRSAvKiBPd25QdHJDb21tb24uaCAqLywKQEAgLTIyODYsNyArMjI4Myw2
IEBACiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDkwRTE2RjVDRDAwQjM0NDYwIC8qIE93bkFycmF5UHRy
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0ZCRTY5ODEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJy
YXlQdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVG
NCAvKiBPd25GYXN0TWFsbG9jUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0QTBFMTZG
NUNEMDBCMzQ0NjAgLyogT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDA5RDg0NzBGQUY4
MEEyMDA1MjNCODcgLyogT3duUHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkocmV2aXNpb24gNzYzOTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5
KEV4ZWNTdGF0ZQogewogICAgIGlmIChpIDwgZC0+bnVtQXJndW1lbnRzKSB7CiAgICAgICAgIGlm
ICghZC0+ZGVsZXRlZEFyZ3VtZW50cykgewotICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50
cy5zZXQobmV3IGJvb2xbZC0+bnVtQXJndW1lbnRzXSk7CisgICAgICAgICAgICBkLT5kZWxldGVk
QXJndW1lbnRzID0gYWRvcHRBcnJheVB0cihuZXcgYm9vbFtkLT5udW1Bcmd1bWVudHNdKTsKICAg
ICAgICAgICAgIG1lbXNldChkLT5kZWxldGVkQXJndW1lbnRzLmdldCgpLCAwLCBzaXplb2YoYm9v
bCkgKiBkLT5udW1Bcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgIGlmICghZC0+ZGVsZXRl
ZEFyZ3VtZW50c1tpXSkgewpAQCAtMzIxLDcgKzMyMSw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWxl
dGVQcm9wZXJ0eShFeGVjU3RhdGUKICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLnRvQXJy
YXlJbmRleChpc0FycmF5SW5kZXgpOwogICAgIGlmIChpc0FycmF5SW5kZXggJiYgaSA8IGQtPm51
bUFyZ3VtZW50cykgewogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHMpIHsKLSAgICAg
ICAgICAgIGQtPmRlbGV0ZWRBcmd1bWVudHMuc2V0KG5ldyBib29sW2QtPm51bUFyZ3VtZW50c10p
OworICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50cyA9IGFkb3B0QXJyYXlQdHIobmV3IGJv
b2xbZC0+bnVtQXJndW1lbnRzXSk7CiAgICAgICAgICAgICBtZW1zZXQoZC0+ZGVsZXRlZEFyZ3Vt
ZW50cy5nZXQoKSwgMCwgc2l6ZW9mKGJvb2wpICogZC0+bnVtQXJndW1lbnRzKTsKICAgICAgICAg
fQogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiA3NjM5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzAsNyArMjMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXIqIHJl
Z2lzdGVyQXJyYXkgPSBuZXcgUmVnaXN0ZXJbcmVnaXN0ZXJBcnJheVNpemVdOwogICAgICAgICBt
ZW1jcHkocmVnaXN0ZXJBcnJheSwgZC0+cmVnaXN0ZXJzIC0gcmVnaXN0ZXJPZmZzZXQsIHJlZ2lz
dGVyQXJyYXlTaXplICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGQtPnJlZ2lzdGVyQXJy
YXkuc2V0KHJlZ2lzdGVyQXJyYXkpOworICAgICAgICBkLT5yZWdpc3RlckFycmF5ID0gcmVnaXN0
ZXJBcnJheTsKICAgICAgICAgZC0+cmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVy
T2Zmc2V0OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDc2MzkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6OkpTUHJvcGVydAogICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmUoMCkKICAgICAsIG1f
bnVtQ2FjaGVhYmxlU2xvdHMobnVtQ2FjaGVhYmxlU2xvdHMpCiAgICAgLCBtX2pzU3RyaW5nc1Np
emUocHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCkpCi0g
ICAgLCBtX2pzU3RyaW5ncyhuZXcgSlNWYWx1ZVttX2pzU3RyaW5nc1NpemVdKQorICAgICwgbV9q
c1N0cmluZ3MoYWRvcHRBcnJheVB0cihuZXcgSlNWYWx1ZVttX2pzU3RyaW5nc1NpemVdKSkKIHsK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3RvciYgcHJvcGVydHlO
YW1lVmVjdG9yID0gcHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fanNTdHJpbmdzU2l6ZTsgKytpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAko
cmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zhcmlh
YmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBpbmxpbmUgdm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpzZXRSZWdpc3RlcnMoUmVn
aXN0ZXIqIHJlZ2lzdGVycywgUmVnaXN0ZXIqIHJlZ2lzdGVyQXJyYXkpCiAgICAgewogICAgICAg
ICBBU1NFUlQocmVnaXN0ZXJBcnJheSAhPSBkLT5yZWdpc3RlckFycmF5LmdldCgpKTsKLSAgICAg
ICAgZC0+cmVnaXN0ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSk7CisgICAgICAgIGQtPnJlZ2lz
dGVyQXJyYXkgPSByZWdpc3RlckFycmF5OwogICAgICAgICBkLT5yZWdpc3RlcnMgPSByZWdpc3Rl
cnM7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBTdHJ1Y3R1cmVDaGFpbjo6U3RydWN0dXJlQ2hhaW4oU3RydWN0dXJlCiAgICAgZm9y
IChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDogYXNPYmplY3QoY3VycmVudC0+c3RvcmVk
UHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKICAgICAgICAgKytzaXplOwogICAgIAotICAgIG1f
dmVjdG9yLnNldChuZXcgUmVmUHRyPFN0cnVjdHVyZT5bc2l6ZSArIDFdKTsKKyAgICBtX3ZlY3Rv
ciA9IGFkb3B0QXJyYXlQdHIobmV3IFJlZlB0cjxTdHJ1Y3R1cmU+W3NpemUgKyAxXSk7CiAKICAg
ICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJy
ZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDog
YXNPYmplY3QoY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzYzOTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw2IEBAIFNFVChXVEZfSEVBREVSUwogICAgIE51bGxQdHIuaAogICAg
IE9TQWxsb2NhdG9yLmgKICAgICBPd25BcnJheVB0ci5oCi0gICAgT3duQXJyYXlQdHJDb21tb24u
aAogICAgIE93bkZhc3RNYWxsb2NQdHIuaAogICAgIE93blB0ci5oCiAgICAgT3duUHRyQ29tbW9u
LmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmgJKHJldmlzaW9uIDc2Mzkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsNyArMTM1LDYgQEAgcHVibGljOgogICAgICAgICAsIHllYXIoMCkKICAgICAgICAg
LCBpc0RTVCgwKQogICAgICAgICAsIHV0Y09mZnNldCgwKQotICAgICAgICAsIHRpbWVab25lKDAp
CiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJh
eVB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQ
dHIuaAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFy
cmF5UHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCw5IEBACiAjaW5jbHVkZSAiQXNz
ZXJ0aW9ucy5oIgogI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCiAjaW5jbHVkZSAiTnVsbFB0ci5o
IgotI2luY2x1ZGUgIk93blB0ckNvbW1vbi5oIgotI2luY2x1ZGUgIk93bkFycmF5UHRyQ29tbW9u
LmgiCisjaW5jbHVkZSAiUGFzc093bkFycmF5UHRyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
Ci0vLyBSZW1vdmUgdGhpcyBvbmNlIHdlIG1ha2UgYWxsIFdlYktpdCBjb2RlIGNvbXBhdGlibGUg
d2l0aCBzdHJpY3RlciBydWxlcyBhYm91dCBPd25BcnJheVB0ci4KLSNkZWZpbmUgTE9PU0VfT1dO
X0FSUkFZX1BUUgotCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgUGFzc093bkFycmF5UHRyOwpAQCAtMTE1LDE2ICsxMTEsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgT3duCiAgICAgcmV0dXJuIHB0cjsKIH0KIAotI2lmZGVmIExP
T1NFX09XTl9BUlJBWV9QVFIKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIE93bkFy
cmF5UHRyPFQ+OjpzZXQoUHRyVHlwZSBwdHIpCi17Ci0gICAgQVNTRVJUKCFwdHIgfHwgbV9wdHIg
IT0gcHRyKTsKLSAgICBQdHJUeXBlIG9sZFB0ciA9IG1fcHRyOwotICAgIG1fcHRyID0gcHRyOwot
ICAgIGRlbGV0ZU93bmVkUHRyKG9sZFB0cik7Ci19Ci0jZW5kaWYKLQogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIE93bkFycmF5UHRyPFQ+JiBPd25BcnJheVB0cjxUPjo6b3BlcmF0b3I9KGNv
bnN0IFBhc3NPd25BcnJheVB0cjxUPiYgbykKIHsKICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQdHJDb21tb24uaAko
cmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5UHRy
Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgV1RGX093bkFycmF5UHRyQ29tbW9uX2gKLSNkZWZpbmUgV1RGX093bkFycmF5UHRyQ29t
bW9uX2gKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2
b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKQotewotICAgIHR5cGVkZWYgY2hhciBrbm93
bltzaXplb2YoVCkgPyAxIDogLTFdOwotICAgIGlmIChzaXplb2Yoa25vd24pKQotICAgICAgICBk
ZWxldGUgW10gcHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFdURl9P
d25BcnJheVB0ckNvbW1vbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NP
d25BcnJheVB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFz
c093bkFycmF5UHRyLmgJKHJldmlzaW9uIDc2MzkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QYXNzT3duQXJyYXlQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAog
CiAjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgogI2luY2x1ZGUgIk51bGxQdHIuaCIKLSNpbmNsdWRl
ICJPd25BcnJheVB0ckNvbW1vbi5oIgogI2luY2x1ZGUgIlR5cGVUcmFpdHMuaCIKIAogLy8gUmVt
b3ZlIHRoaXMgb25jZSB3ZSBtYWtlIGFsbCBXZWJLaXQgY29kZSBjb21wYXRpYmxlIHdpdGggc3Ry
aWN0ZXIgcnVsZXMgYWJvdXQgUGFzc093bkFycmF5UHRyLgpAQCAtMzksNiArMzgsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIE93bkFycmF5UHRyOwogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093bkFycmF5UHRyOwogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gUGFzc093bkFycmF5UHRyPFQ+IGFkb3B0QXJyYXlQdHIoVCopOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBkZWxldGVPd25lZEFycmF5UHRyKFQqIHB0cik7CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25BcnJheVB0ciB7CiBwdWJsaWM6CkBAIC0xOTQsNiArMTk0
LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzT3duQXJyYXkKICAgICByZXR1
cm4gUGFzc093bkFycmF5UHRyPFQ+KHB0cik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB2b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKQoreworICAgIHR5cGVkZWYgY2hh
ciBrbm93bltzaXplb2YoVCkgPyAxIDogLTFdOworICAgIGlmIChzaXplb2Yoa25vd24pKQorICAg
ICAgICBkZWxldGUgW10gcHRyOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgUGFzc093bkFycmF5UHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgUGFz
c093bkFycmF5UHRyPFU+JiBwKSAKIHsKICAgICByZXR1cm4gYWRvcHRBcnJheVB0cihzdGF0aWNf
Y2FzdDxUKj4ocC5sZWFrUHRyKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2NDI3KQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTEtMDEtMjEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmgg
dXNlcyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisK
KyAgICAgICAgUmVwbGFjZWQgYWxsIGNhbGxzIHRvIE93bkFycmF5UHRyOjpzZXQgYW5kIGxvb3Nl
IGluc3RhbnRpYXRpb24gb2YgT3duQXJyYXlQdHIgYnkKKyAgICAgICAgY2FsbHMgdG8gb3BlcmF0
b3I9IGFuZCBhZG9wdEFycmF5UHRyLgorCisgICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6IENhbGxzIG9wZXJhdG9yPSBpbnN0ZWFkIG9mIHNldC4KKyAgICAgICAgKiBodG1sL0hU
TUxGcmFtZVNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBDYWxscyBvcGVyYXRvcj0gaW5zdGVhZCBvZiBz
ZXQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJz
KTogQ2FsbHMgb3BlcmF0b3I9IGFuZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaW11bGF0ZVZlcnRleEF0dHJp
YjApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJV
SW1hZ2VCdWZmZXJDYWNoZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZSk6IENhbGxzIGFkb3B0QXJyYXlQ
dHIuCisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5l
d0Nvb3Jkc0FycmF5KTogUmVwbGFjZSBMZW5ndGgqIGJ5IE93bkFycmF5UHRyPExlbmd0aD4uCisg
ICAgICAgIChXZWJDb3JlOjpuZXdMZW5ndGhBcnJheSk6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL0xlbmd0aC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJp
ZGdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFOR0xFV2ViS2l0QnJpZGdlOjp2YWxpZGF0ZVNo
YWRlclNvdXJjZSk6IENhbGxzIG9wZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ci4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvQ2FudmFzKTogRGl0dG8uCisKIDIwMTEtMDEtMjEgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFu
c2VuLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkocmV2aXNp
b24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidQogICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52
YWx1ZSgpLCAicmVjdCIpKQogICAgICAgICAgICAgbV9zaGFwZSA9IFJlY3Q7CiAgICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gY29vcmRzQXR0cikgewotICAgICAgICBtX2Nvb3Jkcy5zZXQo
bmV3Q29vcmRzQXJyYXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgbV9jb29yZHNMZW4pKTsKKyAg
ICAgICAgbV9jb29yZHMgPSBuZXdDb29yZHNBcnJheShhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBt
X2Nvb3Jkc0xlbik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWx0QXR0ciB8fCBh
dHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0cikgewogICAgICAgICAvLyBEbyBub3RoaW5nLgog
ICAgIH0gZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1l
bnQuY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1l
U2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDEyICs3NSwxMiBAQCB2b2lkIEhU
TUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0CiB7CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSByb3dzQXR0cikgewogICAgICAgICBpZiAoIWF0dHItPmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBtX3Jvd0xlbmd0aHMuc2V0KG5ld0xlbmd0aEFycmF5KGF0dHItPnZhbHVlKCkuc3RyaW5n
KCksIG1fdG90YWxSb3dzKSk7CisgICAgICAgICAgICBtX3Jvd0xlbmd0aHMgPSBuZXdMZW5ndGhB
cnJheShhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBtX3RvdGFsUm93cyk7CiAgICAgICAgICAgICBz
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBjb2xzQXR0cikgewogICAgICAgICBpZiAoIWF0dHItPmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICBtX2NvbExlbmd0aHMuc2V0KG5ld0xlbmd0aEFycmF5KGF0dHItPnZhbHVlKCkuc3Ry
aW5nKCksIG1fdG90YWxDb2xzKSk7CisgICAgICAgICAgICBtX2NvbExlbmd0aHMgPSBuZXdMZW5n
dGhBcnJheShhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBtX3RvdGFsQ29scyk7CiAgICAgICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBmcmFtZWJvcmRlckF0dHIpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNzYz
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjg5LDcgKzE2ODksNyBAQCBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTCiAgICAgR0MzRGludCBudW1TaGFkZXJzID0gMDsKICAg
ICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNz
Q29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTLCAmbnVtU2hhZGVycyk7CiAgICAgaWYgKG51bVNo
YWRlcnMpIHsKLSAgICAgICAgT3duQXJyYXlQdHI8UGxhdGZvcm0zRE9iamVjdD4gc2hhZGVycyhu
ZXcgUGxhdGZvcm0zRE9iamVjdFtudW1TaGFkZXJzXSk7CisgICAgICAgIE93bkFycmF5UHRyPFBs
YXRmb3JtM0RPYmplY3Q+IHNoYWRlcnMgPSBhZG9wdEFycmF5UHRyKG5ldyBQbGF0Zm9ybTNET2Jq
ZWN0W251bVNoYWRlcnNdKTsKICAgICAgICAgR0MzRHNpemVpIGNvdW50ID0gMDsKICAgICAgICAg
bV9jb250ZXh0LT5nZXRBdHRhY2hlZFNoYWRlcnMob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBudW1T
aGFkZXJzLCAmY291bnQsIHNoYWRlcnMuZ2V0KCkpOwogICAgICAgICBpZiAoY291bnQgIT0gbnVt
U2hhZGVycykKQEAgLTQ1MzMsNyArNDUzMyw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpzaW11bGF0ZVZlcnQKICAgICAgICAgfHwgc3RhdGUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyVmFsdWVbMV0KICAgICAgICAgfHwgc3RhdGUudmFsdWVbMl0gIT0gbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyVmFsdWVbMl0KICAgICAgICAgfHwgc3RhdGUudmFsdWVbM10gIT0gbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10pIHsKLSAgICAgICAgT3duQXJyYXlQdHI8R0MzRGZsb2F0
PiBidWZmZXJEYXRhKG5ldyBHQzNEZmxvYXRbKG51bVZlcnRleCArIDEpICogNF0pOworICAgICAg
ICBPd25BcnJheVB0cjxHQzNEZmxvYXQ+IGJ1ZmZlckRhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyBH
QzNEZmxvYXRbKG51bVZlcnRleCArIDEpICogNF0pOwogICAgICAgICBmb3IgKEdDM0RzaXplaSBp
aSA9IDA7IGlpIDwgbnVtVmVydGV4ICsgMTsgKytpaSkgewogICAgICAgICAgICAgYnVmZmVyRGF0
YVtpaSAqIDRdID0gc3RhdGUudmFsdWVbMF07CiAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICog
NCArIDFdID0gc3RhdGUudmFsdWVbMV07CkBAIC00NTg4LDcgKzQ1ODgsNyBAQCBXZWJHTEV4dGVu
c2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnCiB9CiAKIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZShpbnQgY2FwYWNpdHkp
Ci0gICAgOiBtX2J1ZmZlcnMobmV3IE93blB0cjxJbWFnZUJ1ZmZlcj5bY2FwYWNpdHldKQorICAg
IDogbV9idWZmZXJzKGFkb3B0QXJyYXlQdHIobmV3IE93blB0cjxJbWFnZUJ1ZmZlcj5bY2FwYWNp
dHldKSkKICAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xlbmd0aC5jcHAJKHJldmlzaW9uIDc2MzkwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwpA
QCAtODMsNyArODQsNyBAQCBzdGF0aWMgaW50IGNvdW50Q2hhcmFjdGVyKGNvbnN0IFVDaGFyKiBk
CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1MZW5ndGgqIG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBpbnQmIGxlbikKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0Nvb3Jk
c0FycmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikKIHsKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgY29uc3QgVUNoYXIqIGRhdGEgPSBzdHJpbmcu
Y2hhcmFjdGVycygpOwpAQCAtMTAwLDcgKzEwMSw3IEBAIExlbmd0aCogbmV3Q29vcmRzQXJyYXko
Y29uc3QgU3RyaW5nJiBzdHIKICAgICBzdHIgPSBzdHItPnNpbXBsaWZ5V2hpdGVTcGFjZSgpOwog
CiAgICAgbGVuID0gY291bnRDaGFyYWN0ZXIoc3RyLT5jaGFyYWN0ZXJzKCksIHN0ci0+bGVuZ3Ro
KCksICcgJykgKyAxOwotICAgIExlbmd0aCogciA9IG5ldyBMZW5ndGhbbGVuXTsKKyAgICBPd25B
cnJheVB0cjxMZW5ndGg+IHIgPSBhZG9wdEFycmF5UHRyKG5ldyBMZW5ndGhbbGVuXSk7CiAKICAg
ICBpbnQgaSA9IDA7CiAgICAgdW5zaWduZWQgcG9zID0gMDsKQEAgLTExNCwxMCArMTE1LDEwIEBA
IExlbmd0aCogbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiBzdHIKIAogICAgIEFTU0VSVChp
ID09IGxlbiAtIDEpOwogCi0gICAgcmV0dXJuIHI7CisgICAgcmV0dXJuIHIucmVsZWFzZSgpOwog
fQogCi1MZW5ndGgqIG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxl
bikKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBpbnQmIGxlbikKIHsKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gc3RyID0gc3RyaW5n
LmltcGwoKS0+c2ltcGxpZnlXaGl0ZVNwYWNlKCk7CiAgICAgaWYgKCFzdHItPmxlbmd0aCgpKSB7
CkBAIC0xMjYsNyArMTI3LDcgQEAgTGVuZ3RoKiBuZXdMZW5ndGhBcnJheShjb25zdCBTdHJpbmcm
IHN0cgogICAgIH0KIAogICAgIGxlbiA9IGNvdW50Q2hhcmFjdGVyKHN0ci0+Y2hhcmFjdGVycygp
LCBzdHItPmxlbmd0aCgpLCAnLCcpICsgMTsKLSAgICBMZW5ndGgqIHIgPSBuZXcgTGVuZ3RoW2xl
bl07CisgICAgT3duQXJyYXlQdHI8TGVuZ3RoPiByID0gYWRvcHRBcnJheVB0cihuZXcgTGVuZ3Ro
W2xlbl0pOwogCiAgICAgaW50IGkgPSAwOwogICAgIHVuc2lnbmVkIHBvcyA9IDA7CkBAIC0xNDUs
NyArMTQ2LDcgQEAgTGVuZ3RoKiBuZXdMZW5ndGhBcnJheShjb25zdCBTdHJpbmcmIHN0cgogICAg
IGVsc2UKICAgICAgICAgbGVuLS07CiAKLSAgICByZXR1cm4gcjsKKyAgICByZXR1cm4gci5yZWxl
YXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0xlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xlbmd0aC5oCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xl
bmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8d3RmL0Zh
c3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTE5Myw4ICsxOTQsOCBAQCBwcml2YXRlOgogICAgIGludCBtX3Zh
bHVlOwogfTsKIAotTGVuZ3RoKiBuZXdDb29yZHNBcnJheShjb25zdCBTdHJpbmcmLCBpbnQmIGxl
bik7Ci1MZW5ndGgqIG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmluZyYsIGludCYgbGVuKTsKK1Bh
c3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYsIGludCYg
bGVuKTsKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmlu
ZyYsIGludCYgbGVuKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2Uu
Y3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0FOR0xFV2ViS2l0QnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBi
b29sIEFOR0xFV2ViS2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNvCiAgICAgICAgIGludCBsb2dT
aXplID0gMDsKICAgICAgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9JTkZPX0xPR19MRU5HVEgs
ICZsb2dTaXplKTsKICAgICAgICAgaWYgKGxvZ1NpemUgPiAxKSB7Ci0gICAgICAgICAgICBPd25B
cnJheVB0cjxjaGFyPiBsb2dCdWZmZXIobmV3IGNoYXJbbG9nU2l6ZV0pOworICAgICAgICAgICAg
T3duQXJyYXlQdHI8Y2hhcj4gbG9nQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltsb2dT
aXplXSk7CiAgICAgICAgICAgICBpZiAobG9nQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgU2hH
ZXRJbmZvTG9nKGNvbXBpbGVyLCBsb2dCdWZmZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHNo
YWRlclZhbGlkYXRpb25Mb2cgPSBsb2dCdWZmZXIuZ2V0KCk7CkBAIC0xMDUsNyArMTA1LDcgQEAg
Ym9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJTbwogICAgIGludCB0cmFuc2xh
dGlvbkxlbmd0aCA9IDA7CiAgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9PQkpFQ1RfQ09ERV9M
RU5HVEgsICZ0cmFuc2xhdGlvbkxlbmd0aCk7CiAgICAgaWYgKHRyYW5zbGF0aW9uTGVuZ3RoID4g
MSkgewotICAgICAgICBPd25BcnJheVB0cjxjaGFyPiB0cmFuc2xhdGlvbkJ1ZmZlcihuZXcgY2hh
clt0cmFuc2xhdGlvbkxlbmd0aF0pOworICAgICAgICBPd25BcnJheVB0cjxjaGFyPiB0cmFuc2xh
dGlvbkJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbdHJhbnNsYXRpb25MZW5ndGhdKTsK
ICAgICAgICAgaWYgKCF0cmFuc2xhdGlvbkJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyLCB0cmFuc2xhdGlvbkJ1ZmZlci5n
ZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHJldmlz
aW9uIDc2MzkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1JlCiAgICAgaW50IHJvd0J5
dGVzID0gbV9jdXJyZW50V2lkdGggKiA0OwogICAgIGludCB0b3RhbEJ5dGVzID0gcm93Qnl0ZXMg
KiBtX2N1cnJlbnRIZWlnaHQ7CiAKLSAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBwaXhl
bHMobmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc10pOworICAgIE93bkFycmF5UHRyPHVuc2ln
bmVkIGNoYXI+IHBpeGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbdG90YWxC
eXRlc10pOwogICAgIGlmICghcGl4ZWxzKQogICAgICAgICByZXR1cm47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79830</attachid>
            <date>2011-01-21 23:07:39 -0800</date>
            <delta_ts>2011-01-22 00:43:13 -0800</delta_ts>
            <desc>fixed platform code</desc>
            <filename>bug-52867-20110121230738.patch</filename>
            <type>text/plain</type>
            <size>31465</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzY0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAK
KzIwMTEtMDEtMjEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmggdXNl
cyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisKKyAg
ICAgICAgUmVtb3ZlZCBMT09TRV9PV05fQVJSQVlfUFRSIGFuZCBPd25BcnJheVB0cjxUPjo6c2V0
LgorCisgICAgICAgIFJlcGxhY2VkIGFsbCBjYWxscyB0byBPd25BcnJheVB0cjo6c2V0IGFuZCBs
b29zZSBpbnN0YW50aWF0aW9uIG9mIE93bkFycmF5UHRyIGJ5CisgICAgICAgIGNhbGxzIHRvIG9w
ZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ci4KKworICAgICAgICAqIEFQSS9KU1N0cmluZ1JlZkNG
LmNwcDoKKyAgICAgICAgKEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKTogQ2FsbHMgb3BlcmF0
b3I9IGFuZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOiBSZW1vdmVkIE93bkFycmF5UHRyQ29tbW9uLmgKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHd0Zi9DTWFr
ZUxpc3RzLnR4dDogRGl0dG8uCisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KTogQ2FsbHMgb3BlcmF0b3I9IGFu
ZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1l
bnRzLmg6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6Y29weVJlZ2lzdGVycyk6IENhbGxzIGFk
b3B0QXJyYXlQdHIuCisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcik6IENhbGxzIG9wZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ciBpbnN0ZWFkIG9mIHNl
dC4KKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNWYXJpYWJsZU9iamVjdDo6c2V0UmVnaXN0ZXJzKTogQ2FsbHMgb3BlcmF0b3I9LgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVD
aGFpbjo6U3RydWN0dXJlQ2hhaW4pOiBDYWxscyBvcGVyYXRvcj0gYW5kIGFkb3B0QXJyYXlQdHIg
aW5zdGVhZCBvZiBzZXQuCisgICAgICAgICogd3RmL0RhdGVNYXRoLmg6CisgICAgICAgIChKU0M6
OkdyZWdvcmlhbkRhdGVUaW1lOjpHcmVnb3JpYW5EYXRlVGltZSk6CisgICAgICAgICogd3RmL093
bkFycmF5UHRyLmg6IEluY2x1ZGUgUGFzc093bkFycmF5UHRyLmggaW5zdGVhZCBvZiBPd25BcnJh
eVB0ckNvbW1vbi5oOyByZW1vdmVkIExPT1NFX09XTl9BUlJBWV9QVFIKKyAgICAgICAgYW5kIE93
bkFycmF5UHRyPFQ+OjpzZXQuCisgICAgICAgICogd3RmL093bkFycmF5UHRyQ29tbW9uLmg6IFJl
bW92ZWQuCisgICAgICAgICogd3RmL1Bhc3NPd25BcnJheVB0ci5oOiBObyBsb25nZXIgaW5jbHVk
ZXMgT3duQXJyYXlQdHJDb21tb24uaAorICAgICAgICAoV1RGOjpkZWxldGVPd25lZEFycmF5UHRy
KTogTW92ZWQgZnJvbSBPd25BcnJheVB0ckNvbW1vbi5oLgorCiAyMDExLTAxLTIxICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVq
IFN0YWNob3dpYWsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiA3NjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkod29y
a2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw2IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT1NBbGxvY2F0b3IuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL093bkZhc3RNYWxsb2NQdHIuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25B
cnJheVB0ckNvbW1vbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093blB0ckNvbW1v
bi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093blB0ci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmggXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1N0cmluZ1JlZkNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU3RyaW5nUmVmQ0YuY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgSlNTdHJpbmdSZWYgSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQwog
ICAgIC8vIGl0IGNhbiBob2xkLiAgKDxyZGFyOi8vcHJvYmxlbS82ODA2NDc4PikKICAgICBzaXpl
X3QgbGVuZ3RoID0gQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKICAgICBpZiAobGVuZ3RoKSB7
Ci0gICAgICAgIE93bkFycmF5UHRyPFVuaUNoYXI+IGJ1ZmZlcihuZXcgVW5pQ2hhcltsZW5ndGhd
KTsKKyAgICAgICAgT3duQXJyYXlQdHI8VW5pQ2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihu
ZXcgVW5pQ2hhcltsZW5ndGhdKTsKICAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHN0cmlu
ZywgQ0ZSYW5nZU1ha2UoMCwgbGVuZ3RoKSwgYnVmZmVyLmdldCgpKTsKICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFVuaUNoYXIpID09IHNpemVvZihVQ2hhciksIHVuaWNoYXJfYW5kX3Vj
aGFyX211c3RfYmVfc2FtZV9zaXplKTsKICAgICAgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjpj
cmVhdGUocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGJ1ZmZlci5nZXQoKSksIGxlbmd0aCkubGVh
a1JlZigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA3NjM5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTc0OSwxMCArNzQ5LDYgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8
RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcT3duQXJyYXlQdHJDb21tb24uaCIKLQkJ
CT4KLQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcT3duRmFz
dE1hbGxvY1B0ci5oIgogCQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQ3
LDcgKzU0Nyw2IEBACiAJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERTNBQjAw
RTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi87IH07CiAJCUJDRjYwNTE0MEUyMDNF
RjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkJFNjk2MTIy
NTYwRTgwMDMwOUU5RCAvKiBQYXNzT3duQXJyYXlQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkJFNjk1MTIyNTYwRTgwMDMwOUU5RCAvKiBQYXNz
T3duQXJyYXlQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlCQ0ZCRTY5ODEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21tb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkJFNjk3MTIy
NTYxRDIwMDMwOUU5RCAvKiBPd25BcnJheVB0ckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAv
KiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi87IH07CiAJ
CUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAv
KiBKdW1wVGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMwRTUwQTA2MzAwRTk2RTE1IC8qIE5vdEZv
dW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMEEy
NzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE0Nyw3ICsxMTQ2LDYgQEAKIAkJQkNGNjA1
MTIwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXJnTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y2NTUz
QjBBMjA0OERFMDAzOEExOTQgLyogTWF0aEV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWF0aEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Q0ZCRTY5NTEyMjU2MEU4MDAzMDlFOUQgLyogUGFzc093bkFycmF5UHRyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3NPd25BcnJheVB0ci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCQ0ZCRTY5NzEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21t
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3duQXJyYXlQdHJDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4
IC8qIEp1bXBUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
dW1wVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZEOEM5MTBFRUIy
RUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEp1bXBUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMEEyNzIzRjBF
NTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTm90Rm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjMsNyAr
MTU2MSw2IEBACiAJCQkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmgg
Ki8sCiAJCQkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3Bw
ICovLAogCQkJCTkzMDNGNUE0MDk5MTFBNTgwMEFENzFCOCAvKiBPd25BcnJheVB0ci5oICovLAot
CQkJCUJDRkJFNjk3MTIyNTYxRDIwMDMwOUU5RCAvKiBPd25BcnJheVB0ckNvbW1vbi5oICovLAog
CQkJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi8sCiAJ
CQkJOTMwM0Y1NjcwOTkxMThGQTAwQUQ3MUI4IC8qIE93blB0ci5oICovLAogCQkJCTQ0MEI3QUVE
MEZBRjdGQ0IwMDczMzIzRSAvKiBPd25QdHJDb21tb24uaCAqLywKQEAgLTIyODYsNyArMjI4Myw2
IEBACiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDkwRTE2RjVDRDAwQjM0NDYwIC8qIE93bkFycmF5UHRy
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0ZCRTY5ODEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJy
YXlQdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVG
NCAvKiBPd25GYXN0TWFsbG9jUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0QTBFMTZG
NUNEMDBCMzQ0NjAgLyogT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDA5RDg0NzBGQUY4
MEEyMDA1MjNCODcgLyogT3duUHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkocmV2aXNpb24gNzYzOTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5
KEV4ZWNTdGF0ZQogewogICAgIGlmIChpIDwgZC0+bnVtQXJndW1lbnRzKSB7CiAgICAgICAgIGlm
ICghZC0+ZGVsZXRlZEFyZ3VtZW50cykgewotICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50
cy5zZXQobmV3IGJvb2xbZC0+bnVtQXJndW1lbnRzXSk7CisgICAgICAgICAgICBkLT5kZWxldGVk
QXJndW1lbnRzID0gYWRvcHRBcnJheVB0cihuZXcgYm9vbFtkLT5udW1Bcmd1bWVudHNdKTsKICAg
ICAgICAgICAgIG1lbXNldChkLT5kZWxldGVkQXJndW1lbnRzLmdldCgpLCAwLCBzaXplb2YoYm9v
bCkgKiBkLT5udW1Bcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgIGlmICghZC0+ZGVsZXRl
ZEFyZ3VtZW50c1tpXSkgewpAQCAtMzIxLDcgKzMyMSw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWxl
dGVQcm9wZXJ0eShFeGVjU3RhdGUKICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLnRvQXJy
YXlJbmRleChpc0FycmF5SW5kZXgpOwogICAgIGlmIChpc0FycmF5SW5kZXggJiYgaSA8IGQtPm51
bUFyZ3VtZW50cykgewogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHMpIHsKLSAgICAg
ICAgICAgIGQtPmRlbGV0ZWRBcmd1bWVudHMuc2V0KG5ldyBib29sW2QtPm51bUFyZ3VtZW50c10p
OworICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50cyA9IGFkb3B0QXJyYXlQdHIobmV3IGJv
b2xbZC0+bnVtQXJndW1lbnRzXSk7CiAgICAgICAgICAgICBtZW1zZXQoZC0+ZGVsZXRlZEFyZ3Vt
ZW50cy5nZXQoKSwgMCwgc2l6ZW9mKGJvb2wpICogZC0+bnVtQXJndW1lbnRzKTsKICAgICAgICAg
fQogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiA3NjM5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzAsNyArMjMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXIqIHJl
Z2lzdGVyQXJyYXkgPSBuZXcgUmVnaXN0ZXJbcmVnaXN0ZXJBcnJheVNpemVdOwogICAgICAgICBt
ZW1jcHkocmVnaXN0ZXJBcnJheSwgZC0+cmVnaXN0ZXJzIC0gcmVnaXN0ZXJPZmZzZXQsIHJlZ2lz
dGVyQXJyYXlTaXplICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGQtPnJlZ2lzdGVyQXJy
YXkuc2V0KHJlZ2lzdGVyQXJyYXkpOworICAgICAgICBkLT5yZWdpc3RlckFycmF5ID0gcmVnaXN0
ZXJBcnJheTsKICAgICAgICAgZC0+cmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVy
T2Zmc2V0OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDc2MzkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6OkpTUHJvcGVydAogICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmUoMCkKICAgICAsIG1f
bnVtQ2FjaGVhYmxlU2xvdHMobnVtQ2FjaGVhYmxlU2xvdHMpCiAgICAgLCBtX2pzU3RyaW5nc1Np
emUocHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCkpCi0g
ICAgLCBtX2pzU3RyaW5ncyhuZXcgSlNWYWx1ZVttX2pzU3RyaW5nc1NpemVdKQorICAgICwgbV9q
c1N0cmluZ3MoYWRvcHRBcnJheVB0cihuZXcgSlNWYWx1ZVttX2pzU3RyaW5nc1NpemVdKSkKIHsK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3RvciYgcHJvcGVydHlO
YW1lVmVjdG9yID0gcHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fanNTdHJpbmdzU2l6ZTsgKytpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAko
cmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zhcmlh
YmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBpbmxpbmUgdm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpzZXRSZWdpc3RlcnMoUmVn
aXN0ZXIqIHJlZ2lzdGVycywgUmVnaXN0ZXIqIHJlZ2lzdGVyQXJyYXkpCiAgICAgewogICAgICAg
ICBBU1NFUlQocmVnaXN0ZXJBcnJheSAhPSBkLT5yZWdpc3RlckFycmF5LmdldCgpKTsKLSAgICAg
ICAgZC0+cmVnaXN0ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSk7CisgICAgICAgIGQtPnJlZ2lz
dGVyQXJyYXkgPSByZWdpc3RlckFycmF5OwogICAgICAgICBkLT5yZWdpc3RlcnMgPSByZWdpc3Rl
cnM7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBTdHJ1Y3R1cmVDaGFpbjo6U3RydWN0dXJlQ2hhaW4oU3RydWN0dXJlCiAgICAgZm9y
IChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDogYXNPYmplY3QoY3VycmVudC0+c3RvcmVk
UHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKICAgICAgICAgKytzaXplOwogICAgIAotICAgIG1f
dmVjdG9yLnNldChuZXcgUmVmUHRyPFN0cnVjdHVyZT5bc2l6ZSArIDFdKTsKKyAgICBtX3ZlY3Rv
ciA9IGFkb3B0QXJyYXlQdHIobmV3IFJlZlB0cjxTdHJ1Y3R1cmU+W3NpemUgKyAxXSk7CiAKICAg
ICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJy
ZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDog
YXNPYmplY3QoY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzYzOTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw2IEBAIFNFVChXVEZfSEVBREVSUwogICAgIE51bGxQdHIuaAogICAg
IE9TQWxsb2NhdG9yLmgKICAgICBPd25BcnJheVB0ci5oCi0gICAgT3duQXJyYXlQdHJDb21tb24u
aAogICAgIE93bkZhc3RNYWxsb2NQdHIuaAogICAgIE93blB0ci5oCiAgICAgT3duUHRyQ29tbW9u
LmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmgJKHJldmlzaW9uIDc2Mzkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsNyArMTM1LDYgQEAgcHVibGljOgogICAgICAgICAsIHllYXIoMCkKICAgICAgICAg
LCBpc0RTVCgwKQogICAgICAgICAsIHV0Y09mZnNldCgwKQotICAgICAgICAsIHRpbWVab25lKDAp
CiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJh
eVB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQ
dHIuaAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFy
cmF5UHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCw5IEBACiAjaW5jbHVkZSAiQXNz
ZXJ0aW9ucy5oIgogI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCiAjaW5jbHVkZSAiTnVsbFB0ci5o
IgotI2luY2x1ZGUgIk93blB0ckNvbW1vbi5oIgotI2luY2x1ZGUgIk93bkFycmF5UHRyQ29tbW9u
LmgiCisjaW5jbHVkZSAiUGFzc093bkFycmF5UHRyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
Ci0vLyBSZW1vdmUgdGhpcyBvbmNlIHdlIG1ha2UgYWxsIFdlYktpdCBjb2RlIGNvbXBhdGlibGUg
d2l0aCBzdHJpY3RlciBydWxlcyBhYm91dCBPd25BcnJheVB0ci4KLSNkZWZpbmUgTE9PU0VfT1dO
X0FSUkFZX1BUUgotCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgUGFzc093bkFycmF5UHRyOwpAQCAtMTE1LDE2ICsxMTEsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgT3duCiAgICAgcmV0dXJuIHB0cjsKIH0KIAotI2lmZGVmIExP
T1NFX09XTl9BUlJBWV9QVFIKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIE93bkFy
cmF5UHRyPFQ+OjpzZXQoUHRyVHlwZSBwdHIpCi17Ci0gICAgQVNTRVJUKCFwdHIgfHwgbV9wdHIg
IT0gcHRyKTsKLSAgICBQdHJUeXBlIG9sZFB0ciA9IG1fcHRyOwotICAgIG1fcHRyID0gcHRyOwot
ICAgIGRlbGV0ZU93bmVkUHRyKG9sZFB0cik7Ci19Ci0jZW5kaWYKLQogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIE93bkFycmF5UHRyPFQ+JiBPd25BcnJheVB0cjxUPjo6b3BlcmF0b3I9KGNv
bnN0IFBhc3NPd25BcnJheVB0cjxUPiYgbykKIHsKICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQdHJDb21tb24uaAko
cmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5UHRy
Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgV1RGX093bkFycmF5UHRyQ29tbW9uX2gKLSNkZWZpbmUgV1RGX093bkFycmF5UHRyQ29t
bW9uX2gKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2
b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKQotewotICAgIHR5cGVkZWYgY2hhciBrbm93
bltzaXplb2YoVCkgPyAxIDogLTFdOwotICAgIGlmIChzaXplb2Yoa25vd24pKQotICAgICAgICBk
ZWxldGUgW10gcHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFdURl9P
d25BcnJheVB0ckNvbW1vbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NP
d25BcnJheVB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFz
c093bkFycmF5UHRyLmgJKHJldmlzaW9uIDc2MzkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QYXNzT3duQXJyYXlQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAog
CiAjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgogI2luY2x1ZGUgIk51bGxQdHIuaCIKLSNpbmNsdWRl
ICJPd25BcnJheVB0ckNvbW1vbi5oIgogI2luY2x1ZGUgIlR5cGVUcmFpdHMuaCIKIAogLy8gUmVt
b3ZlIHRoaXMgb25jZSB3ZSBtYWtlIGFsbCBXZWJLaXQgY29kZSBjb21wYXRpYmxlIHdpdGggc3Ry
aWN0ZXIgcnVsZXMgYWJvdXQgUGFzc093bkFycmF5UHRyLgpAQCAtMzksNiArMzgsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIE93bkFycmF5UHRyOwogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093bkFycmF5UHRyOwogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gUGFzc093bkFycmF5UHRyPFQ+IGFkb3B0QXJyYXlQdHIoVCopOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBkZWxldGVPd25lZEFycmF5UHRyKFQqIHB0cik7CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25BcnJheVB0ciB7CiBwdWJsaWM6CkBAIC0xOTQsNiArMTk0
LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzT3duQXJyYXkKICAgICByZXR1
cm4gUGFzc093bkFycmF5UHRyPFQ+KHB0cik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB2b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKQoreworICAgIHR5cGVkZWYgY2hh
ciBrbm93bltzaXplb2YoVCkgPyAxIDogLTFdOworICAgIGlmIChzaXplb2Yoa25vd24pKQorICAg
ICAgICBkZWxldGUgW10gcHRyOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgUGFzc093bkFycmF5UHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgUGFz
c093bkFycmF5UHRyPFU+JiBwKSAKIHsKICAgICByZXR1cm4gYWRvcHRBcnJheVB0cihzdGF0aWNf
Y2FzdDxUKj4ocC5sZWFrUHRyKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2NDMxKQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQg
QEAKKzIwMTEtMDEtMjEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmgg
dXNlcyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisK
KyAgICAgICAgUmVwbGFjZWQgYWxsIGNhbGxzIHRvIE93bkFycmF5UHRyOjpzZXQgYW5kIGxvb3Nl
IGluc3RhbnRpYXRpb24gb2YgT3duQXJyYXlQdHIgYnkKKyAgICAgICAgY2FsbHMgdG8gb3BlcmF0
b3I9IGFuZCBhZG9wdEFycmF5UHRyLgorCisgICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaW11bGF0ZVZlcnRleEF0dHJp
YjApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1
ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5n
dGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV3Q29vcmRzQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6bmV3TGVuZ3RoQXJyYXkpOgorICAgICAgICAqIHBsYXRmb3JtL0xlbmd0aC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFOR0xFV2ViS2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNvdXJjZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdldERpcnR5UmVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2V0Tm9ybWFsaXplZFRleHRSdW4pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmU6OnVwZGF0ZVN1YlJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZWFkYmFja0hhcmR3YXJlVG9Tb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJpdG1hcDo6dG8xNmJpdCk6CisgICAgICAgICog
cGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51OjpnZXRDb250ZXh0TWVudUl0ZW1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vTG9n
Z2luZ1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplV2l0aFVzZXJEZWZhdWx0
KToKKwogMjAxMS0wMS0yMSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcg
QEAgdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgICAgICBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmVjdCIpKQogICAgICAgICAg
ICAgbV9zaGFwZSA9IFJlY3Q7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY29vcmRz
QXR0cikgewotICAgICAgICBtX2Nvb3Jkcy5zZXQobmV3Q29vcmRzQXJyYXkoYXR0ci0+dmFsdWUo
KS5zdHJpbmcoKSwgbV9jb29yZHNMZW4pKTsKKyAgICAgICAgbV9jb29yZHMgPSBuZXdDb29yZHNB
cnJheShhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBtX2Nvb3Jkc0xlbik7CiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gYWx0QXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0
cikgewogICAgICAgICAvLyBEbyBub3RoaW5nLgogICAgIH0gZWxzZQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NjM5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDEyICs3NSwxMiBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0CiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSByb3dzQXR0cikgewogICAgICAgICBp
ZiAoIWF0dHItPmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBtX3Jvd0xlbmd0aHMuc2V0KG5ld0xl
bmd0aEFycmF5KGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIG1fdG90YWxSb3dzKSk7CisgICAgICAg
ICAgICBtX3Jvd0xlbmd0aHMgPSBuZXdMZW5ndGhBcnJheShhdHRyLT52YWx1ZSgpLnN0cmluZygp
LCBtX3RvdGFsUm93cyk7CiAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjb2xzQXR0cikgewogICAgICAg
ICBpZiAoIWF0dHItPmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBtX2NvbExlbmd0aHMuc2V0KG5l
d0xlbmd0aEFycmF5KGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIG1fdG90YWxDb2xzKSk7CisgICAg
ICAgICAgICBtX2NvbExlbmd0aHMgPSBuZXdMZW5ndGhBcnJheShhdHRyLT52YWx1ZSgpLnN0cmlu
ZygpLCBtX3RvdGFsQ29scyk7CiAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAg
ICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBmcmFtZWJvcmRlckF0dHIp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjg5
LDcgKzE2ODksNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTCiAg
ICAgR0MzRGludCBudW1TaGFkZXJzID0gMDsKICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihv
YmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJT
LCAmbnVtU2hhZGVycyk7CiAgICAgaWYgKG51bVNoYWRlcnMpIHsKLSAgICAgICAgT3duQXJyYXlQ
dHI8UGxhdGZvcm0zRE9iamVjdD4gc2hhZGVycyhuZXcgUGxhdGZvcm0zRE9iamVjdFtudW1TaGFk
ZXJzXSk7CisgICAgICAgIE93bkFycmF5UHRyPFBsYXRmb3JtM0RPYmplY3Q+IHNoYWRlcnMgPSBh
ZG9wdEFycmF5UHRyKG5ldyBQbGF0Zm9ybTNET2JqZWN0W251bVNoYWRlcnNdKTsKICAgICAgICAg
R0MzRHNpemVpIGNvdW50ID0gMDsKICAgICAgICAgbV9jb250ZXh0LT5nZXRBdHRhY2hlZFNoYWRl
cnMob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBudW1TaGFkZXJzLCAmY291bnQsIHNoYWRlcnMuZ2V0
KCkpOwogICAgICAgICBpZiAoY291bnQgIT0gbnVtU2hhZGVycykKQEAgLTQ1MzMsNyArNDUzMyw3
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaW11bGF0ZVZlcnQKICAgICAgICAgfHwg
c3RhdGUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0KICAgICAgICAg
fHwgc3RhdGUudmFsdWVbMl0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KICAgICAg
ICAgfHwgc3RhdGUudmFsdWVbM10gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10pIHsK
LSAgICAgICAgT3duQXJyYXlQdHI8R0MzRGZsb2F0PiBidWZmZXJEYXRhKG5ldyBHQzNEZmxvYXRb
KG51bVZlcnRleCArIDEpICogNF0pOworICAgICAgICBPd25BcnJheVB0cjxHQzNEZmxvYXQ+IGJ1
ZmZlckRhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyBHQzNEZmxvYXRbKG51bVZlcnRleCArIDEpICog
NF0pOwogICAgICAgICBmb3IgKEdDM0RzaXplaSBpaSA9IDA7IGlpIDwgbnVtVmVydGV4ICsgMTsg
KytpaSkgewogICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDRdID0gc3RhdGUudmFsdWVbMF07
CiAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNCArIDFdID0gc3RhdGUudmFsdWVbMV07CkBA
IC00NTg4LDcgKzQ1ODgsNyBAQCBXZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnCiB9CiAKIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6TFJV
SW1hZ2VCdWZmZXJDYWNoZShpbnQgY2FwYWNpdHkpCi0gICAgOiBtX2J1ZmZlcnMobmV3IE93blB0
cjxJbWFnZUJ1ZmZlcj5bY2FwYWNpdHldKQorICAgIDogbV9idWZmZXJzKGFkb3B0QXJyYXlQdHIo
bmV3IE93blB0cjxJbWFnZUJ1ZmZlcj5bY2FwYWNpdHldKSkKICAgICAsIG1fY2FwYWNpdHkoY2Fw
YWNpdHkpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAJKHJldmlzaW9u
IDc2MzkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5j
bHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZl
ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAtODMsNyArODQsNyBAQCBzdGF0aWMgaW50
IGNvdW50Q2hhcmFjdGVyKGNvbnN0IFVDaGFyKiBkCiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1M
ZW5ndGgqIG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikKK1Bh
c3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBpbnQmIGxlbikKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAg
ICAgY29uc3QgVUNoYXIqIGRhdGEgPSBzdHJpbmcuY2hhcmFjdGVycygpOwpAQCAtMTAwLDcgKzEw
MSw3IEBAIExlbmd0aCogbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiBzdHIKICAgICBzdHIg
PSBzdHItPnNpbXBsaWZ5V2hpdGVTcGFjZSgpOwogCiAgICAgbGVuID0gY291bnRDaGFyYWN0ZXIo
c3RyLT5jaGFyYWN0ZXJzKCksIHN0ci0+bGVuZ3RoKCksICcgJykgKyAxOwotICAgIExlbmd0aCog
ciA9IG5ldyBMZW5ndGhbbGVuXTsKKyAgICBPd25BcnJheVB0cjxMZW5ndGg+IHIgPSBhZG9wdEFy
cmF5UHRyKG5ldyBMZW5ndGhbbGVuXSk7CiAKICAgICBpbnQgaSA9IDA7CiAgICAgdW5zaWduZWQg
cG9zID0gMDsKQEAgLTExNCwxMCArMTE1LDEwIEBAIExlbmd0aCogbmV3Q29vcmRzQXJyYXkoY29u
c3QgU3RyaW5nJiBzdHIKIAogICAgIEFTU0VSVChpID09IGxlbiAtIDEpOwogCi0gICAgcmV0dXJu
IHI7CisgICAgcmV0dXJuIHIucmVsZWFzZSgpOwogfQogCi1MZW5ndGgqIG5ld0xlbmd0aEFycmF5
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+
IG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikKIHsKICAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gc3RyID0gc3RyaW5nLmltcGwoKS0+c2ltcGxpZnlXaGl0ZVNwYWNl
KCk7CiAgICAgaWYgKCFzdHItPmxlbmd0aCgpKSB7CkBAIC0xMjYsNyArMTI3LDcgQEAgTGVuZ3Ro
KiBuZXdMZW5ndGhBcnJheShjb25zdCBTdHJpbmcmIHN0cgogICAgIH0KIAogICAgIGxlbiA9IGNv
dW50Q2hhcmFjdGVyKHN0ci0+Y2hhcmFjdGVycygpLCBzdHItPmxlbmd0aCgpLCAnLCcpICsgMTsK
LSAgICBMZW5ndGgqIHIgPSBuZXcgTGVuZ3RoW2xlbl07CisgICAgT3duQXJyYXlQdHI8TGVuZ3Ro
PiByID0gYWRvcHRBcnJheVB0cihuZXcgTGVuZ3RoW2xlbl0pOwogCiAgICAgaW50IGkgPSAwOwog
ICAgIHVuc2lnbmVkIHBvcyA9IDA7CkBAIC0xNDUsNyArMTQ2LDcgQEAgTGVuZ3RoKiBuZXdMZW5n
dGhBcnJheShjb25zdCBTdHJpbmcmIHN0cgogICAgIGVsc2UKICAgICAgICAgbGVuLS07CiAKLSAg
ICByZXR1cm4gcjsKKyAgICByZXR1cm4gci5yZWxlYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCShyZXZpc2lvbiA3NjM5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE5Myw4ICsx
OTQsOCBAQCBwcml2YXRlOgogICAgIGludCBtX3ZhbHVlOwogfTsKIAotTGVuZ3RoKiBuZXdDb29y
ZHNBcnJheShjb25zdCBTdHJpbmcmLCBpbnQmIGxlbik7Ci1MZW5ndGgqIG5ld0xlbmd0aEFycmF5
KGNvbnN0IFN0cmluZyYsIGludCYgbGVuKTsKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0Nv
b3Jkc0FycmF5KGNvbnN0IFN0cmluZyYsIGludCYgbGVuKTsKK1Bhc3NPd25BcnJheVB0cjxMZW5n
dGg+IG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmluZyYsIGludCYgbGVuKTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9B
TkdMRVdlYktpdEJyaWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBib29sIEFOR0xFV2ViS2l0QnJpZGdlOjp2YWxp
ZGF0ZVNoYWRlclNvCiAgICAgICAgIGludCBsb2dTaXplID0gMDsKICAgICAgICAgU2hHZXRJbmZv
KGNvbXBpbGVyLCBTSF9JTkZPX0xPR19MRU5HVEgsICZsb2dTaXplKTsKICAgICAgICAgaWYgKGxv
Z1NpemUgPiAxKSB7Ci0gICAgICAgICAgICBPd25BcnJheVB0cjxjaGFyPiBsb2dCdWZmZXIobmV3
IGNoYXJbbG9nU2l6ZV0pOworICAgICAgICAgICAgT3duQXJyYXlQdHI8Y2hhcj4gbG9nQnVmZmVy
ID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltsb2dTaXplXSk7CiAgICAgICAgICAgICBpZiAobG9n
QnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBsb2dCdWZm
ZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHNoYWRlclZhbGlkYXRpb25Mb2cgPSBsb2dCdWZm
ZXIuZ2V0KCk7CkBAIC0xMDUsNyArMTA1LDcgQEAgYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFs
aWRhdGVTaGFkZXJTbwogICAgIGludCB0cmFuc2xhdGlvbkxlbmd0aCA9IDA7CiAgICAgU2hHZXRJ
bmZvKGNvbXBpbGVyLCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEgsICZ0cmFuc2xhdGlvbkxlbmd0aCk7
CiAgICAgaWYgKHRyYW5zbGF0aW9uTGVuZ3RoID4gMSkgewotICAgICAgICBPd25BcnJheVB0cjxj
aGFyPiB0cmFuc2xhdGlvbkJ1ZmZlcihuZXcgY2hhclt0cmFuc2xhdGlvbkxlbmd0aF0pOworICAg
ICAgICBPd25BcnJheVB0cjxjaGFyPiB0cmFuc2xhdGlvbkJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIo
bmV3IGNoYXJbdHJhbnNsYXRpb25MZW5ndGhdKTsKICAgICAgICAgaWYgKCF0cmFuc2xhdGlvbkJ1
ZmZlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU2hHZXRPYmplY3RDb2Rl
KGNvbXBpbGVyLCB0cmFuc2xhdGlvbkJ1ZmZlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJU
cmVlSG9zdC5jcHAJKHJldmlzaW9uIDc2MzkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzk4LDcgKzM5OCw3IEBAIHN0YXRpYyB2b2lkIGdldERpcnR5UmVjdHMoSFdORCB3aW5kb3csIFYK
ICAgICB9CiAKICAgICBEV09SRCBkYXRhU2l6ZSA9IEdldFJlZ2lvbkRhdGEocmVnaW9uLmdldCgp
LCAwLCAwKTsKLSAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiByZWdpb25EYXRhQnVmZmVy
KG5ldyB1bnNpZ25lZCBjaGFyW2RhdGFTaXplXSk7CisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQg
Y2hhcj4gcmVnaW9uRGF0YUJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJb
ZGF0YVNpemVdKTsKICAgICBSR05EQVRBKiByZWdpb25EYXRhID0gcmVpbnRlcnByZXRfY2FzdDxS
R05EQVRBKj4ocmVnaW9uRGF0YUJ1ZmZlci5nZXQoKSk7CiAgICAgaWYgKCFHZXRSZWdpb25EYXRh
KHJlZ2lvbi5nZXQoKSwgZGF0YVNpemUsIHJlZ2lvbkRhdGEpKQogICAgICAgICByZXR1cm47Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4
dENvbnRyb2xsZXJMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCShyZXZp
c2lvbiA3NjM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDcg
KzM2OSw3IEBAIGNvbnN0IFRleHRSdW4mIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2UKICAgICAg
ICAgc291cmNlVGV4dCA9IG5vcm1hbGl6ZWRTdHJpbmcuZ2V0QnVmZmVyKCk7CiAgICAgfQogCi0g
ICAgbm9ybWFsaXplZEJ1ZmZlci5zZXQobmV3IFVDaGFyW25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgg
KyAxXSk7CisgICAgbm9ybWFsaXplZEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IFVDaGFyW25v
cm1hbGl6ZWRCdWZmZXJMZW5ndGggKyAxXSk7CiAKICAgICBub3JtYWxpemVTcGFjZXNBbmRNaXJy
b3JDaGFycyhzb3VyY2VUZXh0LCBvcmlnaW5hbFJ1bi5ydGwoKSwgbm9ybWFsaXplZEJ1ZmZlci5n
ZXQoKSwgbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAJKHJldmlzaW9uIDc2MzkwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBUZXh0dXJlOjp1cGRhdGVTdWJSZWN0
KHZvaWQqIHBpeGVscwogICAgIGludCB0ZW1wQnVmZlNpemUgPSAvLyBUZW1wb3JhcnkgYnVmZmVy
IHNpemUgaXMgdGhlIHNtYWxsZXIgb2YgdGhlIG1heCB0ZXh0dXJlIHNpemUgb3IgdGhlIHVwZGF0
ZVJlY3RTYW5pdGl6ZWQKICAgICAgICAgbWluKG1fdGlsZXMubWF4VGV4dHVyZVNpemUoKSwgbV90
aWxlcy5ib3JkZXJUZXhlbHMoKSArIHVwZGF0ZVJlY3RTYW5pdGl6ZWQud2lkdGgoKSkgKgogICAg
ICAgICBtaW4obV90aWxlcy5tYXhUZXh0dXJlU2l6ZSgpLCBtX3RpbGVzLmJvcmRlclRleGVscygp
ICsgdXBkYXRlUmVjdFNhbml0aXplZC5oZWlnaHQoKSk7Ci0gICAgT3duQXJyYXlQdHI8dWludDMy
X3Q+IHRlbXBCdWZmKG5ldyB1aW50MzJfdFt0ZW1wQnVmZlNpemVdKTsKKyAgICBPd25BcnJheVB0
cjx1aW50MzJfdD4gdGVtcEJ1ZmYgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50MzJfdFt0ZW1wQnVm
ZlNpemVdKTsKIAogICAgIGZvciAoaW50IHRpbGUgPSAwOyB0aWxlIDwgbV90aWxlcy5udW1UaWxl
cygpOyB0aWxlKyspIHsKICAgICAgICAgLy8gSW50ZXJzZWN0IHdpdGggdGlsZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZQogICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVudFdp
ZHRoICogNDsKICAgICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0
OwogCi0gICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzKG5ldyB1bnNpZ25lZCBj
aGFyW3RvdGFsQnl0ZXNdKTsKKyAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBwaXhlbHMg
PSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0ZXNdKTsKICAgICBpZiAo
IXBpeGVscykKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5j
cHAJKHJldmlzaW9uIDc2MzkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODY1LDcgKzg2
NSw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZGJhY2tIYXJkd2EKICAgICBjb25z
dCBTa0JpdG1hcCYgYml0bWFwID0gbV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAo
dHJ1ZSk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7CiAgICAgaW50IHdpZHRo
ID0gYml0bWFwLndpZHRoKCksIGhlaWdodCA9IGJpdG1hcC5oZWlnaHQoKTsKLSAgICBPd25BcnJh
eVB0cjx1aW50MzJfdD4gYnVmKG5ldyB1aW50MzJfdFt3aWR0aF0pOworICAgIE93bkFycmF5UHRy
PHVpbnQzMl90PiBidWYgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50MzJfdFt3aWR0aF0pOwogICAg
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9ncHVDYW52YXMtPmNvbnRleHQo
KTsKICAgICBtX2dwdUNhbnZhcy0+YmluZEZyYW1lYnVmZmVyKCk7CiAgICAgLy8gRmxpcHMgdGhl
IGltYWdlIHZlcnRpY2FsbHkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9TaGFyZWRCaXRtYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5jcHAJKHJldmlzaW9uIDc2MzkwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBAIGJvb2wgU2hhcmVkQml0bWFwOjp0
bzE2Yml0KCkKICAgICBpbnQgd2lkdGggPSBuZXdCbXBJbmZvLndpZHRoKCk7CiAgICAgaW50IHBh
ZGRlZFdpZHRoID0gbmV3Qm1wSW5mby5wYWRkZWRXaWR0aCgpOwogICAgIGludCBidWZmZXJTaXpl
ID0gcGFkZGVkV2lkdGggKiBuZXdCbXBJbmZvLmhlaWdodCgpOwotICAgIE93bkFycmF5UHRyPHVu
c2lnbmVkPiBuZXdQaXhlbERhdGEobmV3IHVuc2lnbmVkW2J1ZmZlclNpemUgLyAyXSk7CisgICAg
T3duQXJyYXlQdHI8dW5zaWduZWQ+IG5ld1BpeGVsRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IHVu
c2lnbmVkW2J1ZmZlclNpemUgLyAyXSk7CiAgICAgdm9pZCogbmV3UGl4ZWxzID0gbmV3UGl4ZWxE
YXRhLmdldCgpOwogCiAgICAgaWYgKCFuZXdQaXhlbHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAJKHJldmlzaW9uIDc2MzkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIENvbnRleHRNZW51OjpnZXRDb250ZXh0TWVudUl0
ZW1zKEhNCiAgICAgICAgIH0KIAogICAgICAgICBpbnQgbWVudVN0cmluZ0xlbmd0aCA9IGluZm8u
Y2NoICsgMTsKLSAgICAgICAgT3duQXJyYXlQdHI8V0NIQVI+IG1lbnVTdHJpbmcobmV3IFdDSEFS
W21lbnVTdHJpbmdMZW5ndGhdKTsKKyAgICAgICAgT3duQXJyYXlQdHI8V0NIQVI+IG1lbnVTdHJp
bmcgPSBhZG9wdEFycmF5UHRyKG5ldyBXQ0hBUlttZW51U3RyaW5nTGVuZ3RoXSk7CiAgICAgICAg
IGluZm8uZHdUeXBlRGF0YSA9IG1lbnVTdHJpbmcuZ2V0KCk7CiAgICAgICAgIGluZm8uY2NoID0g
bWVudVN0cmluZ0xlbmd0aDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0xv
Z2dpbmdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9M
b2dnaW5nV2luLmNwcAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vTG9nZ2luZ1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGluaXRpYWxpemVXaXRoVXNlckRlZgogICAgIGlmICghbGVuZ3RoKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBPd25BcnJheVB0cjxjaGFyPiBidWZmZXIobmV3IGNoYXJb
bGVuZ3RoXSk7CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihu
ZXcgY2hhcltsZW5ndGhdKTsKIAogICAgIGlmICghR2V0RW52aXJvbm1lbnRWYXJpYWJsZUEoY2hh
bm5lbC5kZWZhdWx0TmFtZSwgYnVmZmVyLmdldCgpLCBsZW5ndGgpKQogICAgICAgICByZXR1cm47
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79834</attachid>
            <date>2011-01-22 00:43:17 -0800</date>
            <delta_ts>2011-01-22 03:40:02 -0800</delta_ts>
            <desc>more port specific fixes</desc>
            <filename>bug-52867-20110122004316.patch</filename>
            <type>text/plain</type>
            <size>33447</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzY0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAK
KzIwMTEtMDEtMjEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmggdXNl
cyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisKKyAg
ICAgICAgUmVtb3ZlZCBMT09TRV9PV05fQVJSQVlfUFRSIGFuZCBPd25BcnJheVB0cjxUPjo6c2V0
LgorCisgICAgICAgIFJlcGxhY2VkIGFsbCBjYWxscyB0byBPd25BcnJheVB0cjo6c2V0IGFuZCBs
b29zZSBpbnN0YW50aWF0aW9uIG9mIE93bkFycmF5UHRyIGJ5CisgICAgICAgIGNhbGxzIHRvIG9w
ZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ci4KKworICAgICAgICAqIEFQSS9KU1N0cmluZ1JlZkNG
LmNwcDoKKyAgICAgICAgKEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKTogQ2FsbHMgb3BlcmF0
b3I9IGFuZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOiBSZW1vdmVkIE93bkFycmF5UHRyQ29tbW9uLmgKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHd0Zi9DTWFr
ZUxpc3RzLnR4dDogRGl0dG8uCisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KTogQ2FsbHMgb3BlcmF0b3I9IGFu
ZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1l
bnRzLmg6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6Y29weVJlZ2lzdGVycyk6IENhbGxzIGFk
b3B0QXJyYXlQdHIuCisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcik6IENhbGxzIG9wZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ciBpbnN0ZWFkIG9mIHNl
dC4KKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNWYXJpYWJsZU9iamVjdDo6c2V0UmVnaXN0ZXJzKTogQ2FsbHMgb3BlcmF0b3I9LgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVD
aGFpbjo6U3RydWN0dXJlQ2hhaW4pOiBDYWxscyBvcGVyYXRvcj0gYW5kIGFkb3B0QXJyYXlQdHIg
aW5zdGVhZCBvZiBzZXQuCisgICAgICAgICogd3RmL0RhdGVNYXRoLmg6CisgICAgICAgIChKU0M6
OkdyZWdvcmlhbkRhdGVUaW1lOjpHcmVnb3JpYW5EYXRlVGltZSk6CisgICAgICAgICogd3RmL093
bkFycmF5UHRyLmg6IEluY2x1ZGUgUGFzc093bkFycmF5UHRyLmggaW5zdGVhZCBvZiBPd25BcnJh
eVB0ckNvbW1vbi5oOyByZW1vdmVkIExPT1NFX09XTl9BUlJBWV9QVFIKKyAgICAgICAgYW5kIE93
bkFycmF5UHRyPFQ+OjpzZXQuCisgICAgICAgICogd3RmL093bkFycmF5UHRyQ29tbW9uLmg6IFJl
bW92ZWQuCisgICAgICAgICogd3RmL1Bhc3NPd25BcnJheVB0ci5oOiBObyBsb25nZXIgaW5jbHVk
ZXMgT3duQXJyYXlQdHJDb21tb24uaAorICAgICAgICAoV1RGOjpkZWxldGVPd25lZEFycmF5UHRy
KTogTW92ZWQgZnJvbSBPd25BcnJheVB0ckNvbW1vbi5oLgorCiAyMDExLTAxLTIxICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVq
IFN0YWNob3dpYWsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiA3NjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkod29y
a2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw2IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT1NBbGxvY2F0b3IuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL093bkZhc3RNYWxsb2NQdHIuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25B
cnJheVB0ckNvbW1vbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093blB0ckNvbW1v
bi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093blB0ci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmggXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1N0cmluZ1JlZkNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU3RyaW5nUmVmQ0YuY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgSlNTdHJpbmdSZWYgSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQwog
ICAgIC8vIGl0IGNhbiBob2xkLiAgKDxyZGFyOi8vcHJvYmxlbS82ODA2NDc4PikKICAgICBzaXpl
X3QgbGVuZ3RoID0gQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKICAgICBpZiAobGVuZ3RoKSB7
Ci0gICAgICAgIE93bkFycmF5UHRyPFVuaUNoYXI+IGJ1ZmZlcihuZXcgVW5pQ2hhcltsZW5ndGhd
KTsKKyAgICAgICAgT3duQXJyYXlQdHI8VW5pQ2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihu
ZXcgVW5pQ2hhcltsZW5ndGhdKTsKICAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHN0cmlu
ZywgQ0ZSYW5nZU1ha2UoMCwgbGVuZ3RoKSwgYnVmZmVyLmdldCgpKTsKICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFVuaUNoYXIpID09IHNpemVvZihVQ2hhciksIHVuaWNoYXJfYW5kX3Vj
aGFyX211c3RfYmVfc2FtZV9zaXplKTsKICAgICAgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjpj
cmVhdGUocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGJ1ZmZlci5nZXQoKSksIGxlbmd0aCkubGVh
a1JlZigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA3NjM5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTc0OSwxMCArNzQ5LDYgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8
RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcT3duQXJyYXlQdHJDb21tb24uaCIKLQkJ
CT4KLQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcT3duRmFz
dE1hbGxvY1B0ci5oIgogCQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQ3
LDcgKzU0Nyw2IEBACiAJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERTNBQjAw
RTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi87IH07CiAJCUJDRjYwNTE0MEUyMDNF
RjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkJFNjk2MTIy
NTYwRTgwMDMwOUU5RCAvKiBQYXNzT3duQXJyYXlQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkJFNjk1MTIyNTYwRTgwMDMwOUU5RCAvKiBQYXNz
T3duQXJyYXlQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlCQ0ZCRTY5ODEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21tb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkJFNjk3MTIy
NTYxRDIwMDMwOUU5RCAvKiBPd25BcnJheVB0ckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAv
KiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi87IH07CiAJ
CUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAv
KiBKdW1wVGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMwRTUwQTA2MzAwRTk2RTE1IC8qIE5vdEZv
dW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMEEy
NzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE0Nyw3ICsxMTQ2LDYgQEAKIAkJQkNGNjA1
MTIwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXJnTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y2NTUz
QjBBMjA0OERFMDAzOEExOTQgLyogTWF0aEV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWF0aEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Q0ZCRTY5NTEyMjU2MEU4MDAzMDlFOUQgLyogUGFzc093bkFycmF5UHRyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3NPd25BcnJheVB0ci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCQ0ZCRTY5NzEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21t
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3duQXJyYXlQdHJDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4
IC8qIEp1bXBUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
dW1wVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZEOEM5MTBFRUIy
RUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEp1bXBUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMEEyNzIzRjBF
NTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTm90Rm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjMsNyAr
MTU2MSw2IEBACiAJCQkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmgg
Ki8sCiAJCQkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3Bw
ICovLAogCQkJCTkzMDNGNUE0MDk5MTFBNTgwMEFENzFCOCAvKiBPd25BcnJheVB0ci5oICovLAot
CQkJCUJDRkJFNjk3MTIyNTYxRDIwMDMwOUU5RCAvKiBPd25BcnJheVB0ckNvbW1vbi5oICovLAog
CQkJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi8sCiAJ
CQkJOTMwM0Y1NjcwOTkxMThGQTAwQUQ3MUI4IC8qIE93blB0ci5oICovLAogCQkJCTQ0MEI3QUVE
MEZBRjdGQ0IwMDczMzIzRSAvKiBPd25QdHJDb21tb24uaCAqLywKQEAgLTIyODYsNyArMjI4Myw2
IEBACiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDkwRTE2RjVDRDAwQjM0NDYwIC8qIE93bkFycmF5UHRy
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0ZCRTY5ODEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJy
YXlQdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVG
NCAvKiBPd25GYXN0TWFsbG9jUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0QTBFMTZG
NUNEMDBCMzQ0NjAgLyogT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDA5RDg0NzBGQUY4
MEEyMDA1MjNCODcgLyogT3duUHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkocmV2aXNpb24gNzYzOTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5
KEV4ZWNTdGF0ZQogewogICAgIGlmIChpIDwgZC0+bnVtQXJndW1lbnRzKSB7CiAgICAgICAgIGlm
ICghZC0+ZGVsZXRlZEFyZ3VtZW50cykgewotICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50
cy5zZXQobmV3IGJvb2xbZC0+bnVtQXJndW1lbnRzXSk7CisgICAgICAgICAgICBkLT5kZWxldGVk
QXJndW1lbnRzID0gYWRvcHRBcnJheVB0cihuZXcgYm9vbFtkLT5udW1Bcmd1bWVudHNdKTsKICAg
ICAgICAgICAgIG1lbXNldChkLT5kZWxldGVkQXJndW1lbnRzLmdldCgpLCAwLCBzaXplb2YoYm9v
bCkgKiBkLT5udW1Bcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgIGlmICghZC0+ZGVsZXRl
ZEFyZ3VtZW50c1tpXSkgewpAQCAtMzIxLDcgKzMyMSw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWxl
dGVQcm9wZXJ0eShFeGVjU3RhdGUKICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLnRvQXJy
YXlJbmRleChpc0FycmF5SW5kZXgpOwogICAgIGlmIChpc0FycmF5SW5kZXggJiYgaSA8IGQtPm51
bUFyZ3VtZW50cykgewogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHMpIHsKLSAgICAg
ICAgICAgIGQtPmRlbGV0ZWRBcmd1bWVudHMuc2V0KG5ldyBib29sW2QtPm51bUFyZ3VtZW50c10p
OworICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50cyA9IGFkb3B0QXJyYXlQdHIobmV3IGJv
b2xbZC0+bnVtQXJndW1lbnRzXSk7CiAgICAgICAgICAgICBtZW1zZXQoZC0+ZGVsZXRlZEFyZ3Vt
ZW50cy5nZXQoKSwgMCwgc2l6ZW9mKGJvb2wpICogZC0+bnVtQXJndW1lbnRzKTsKICAgICAgICAg
fQogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiA3NjM5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzAsNyArMjMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXIqIHJl
Z2lzdGVyQXJyYXkgPSBuZXcgUmVnaXN0ZXJbcmVnaXN0ZXJBcnJheVNpemVdOwogICAgICAgICBt
ZW1jcHkocmVnaXN0ZXJBcnJheSwgZC0+cmVnaXN0ZXJzIC0gcmVnaXN0ZXJPZmZzZXQsIHJlZ2lz
dGVyQXJyYXlTaXplICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGQtPnJlZ2lzdGVyQXJy
YXkuc2V0KHJlZ2lzdGVyQXJyYXkpOworICAgICAgICBkLT5yZWdpc3RlckFycmF5ID0gcmVnaXN0
ZXJBcnJheTsKICAgICAgICAgZC0+cmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVy
T2Zmc2V0OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDc2MzkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6OkpTUHJvcGVydAogICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmUoMCkKICAgICAsIG1f
bnVtQ2FjaGVhYmxlU2xvdHMobnVtQ2FjaGVhYmxlU2xvdHMpCiAgICAgLCBtX2pzU3RyaW5nc1Np
emUocHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCkpCi0g
ICAgLCBtX2pzU3RyaW5ncyhuZXcgSlNWYWx1ZVttX2pzU3RyaW5nc1NpemVdKQorICAgICwgbV9q
c1N0cmluZ3MoYWRvcHRBcnJheVB0cihuZXcgSlNWYWx1ZVttX2pzU3RyaW5nc1NpemVdKSkKIHsK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3RvciYgcHJvcGVydHlO
YW1lVmVjdG9yID0gcHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fanNTdHJpbmdzU2l6ZTsgKytpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAko
cmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zhcmlh
YmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBpbmxpbmUgdm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpzZXRSZWdpc3RlcnMoUmVn
aXN0ZXIqIHJlZ2lzdGVycywgUmVnaXN0ZXIqIHJlZ2lzdGVyQXJyYXkpCiAgICAgewogICAgICAg
ICBBU1NFUlQocmVnaXN0ZXJBcnJheSAhPSBkLT5yZWdpc3RlckFycmF5LmdldCgpKTsKLSAgICAg
ICAgZC0+cmVnaXN0ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSk7CisgICAgICAgIGQtPnJlZ2lz
dGVyQXJyYXkgPSByZWdpc3RlckFycmF5OwogICAgICAgICBkLT5yZWdpc3RlcnMgPSByZWdpc3Rl
cnM7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBTdHJ1Y3R1cmVDaGFpbjo6U3RydWN0dXJlQ2hhaW4oU3RydWN0dXJlCiAgICAgZm9y
IChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDogYXNPYmplY3QoY3VycmVudC0+c3RvcmVk
UHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKICAgICAgICAgKytzaXplOwogICAgIAotICAgIG1f
dmVjdG9yLnNldChuZXcgUmVmUHRyPFN0cnVjdHVyZT5bc2l6ZSArIDFdKTsKKyAgICBtX3ZlY3Rv
ciA9IGFkb3B0QXJyYXlQdHIobmV3IFJlZlB0cjxTdHJ1Y3R1cmU+W3NpemUgKyAxXSk7CiAKICAg
ICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJy
ZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDog
YXNPYmplY3QoY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzYzOTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw2IEBAIFNFVChXVEZfSEVBREVSUwogICAgIE51bGxQdHIuaAogICAg
IE9TQWxsb2NhdG9yLmgKICAgICBPd25BcnJheVB0ci5oCi0gICAgT3duQXJyYXlQdHJDb21tb24u
aAogICAgIE93bkZhc3RNYWxsb2NQdHIuaAogICAgIE93blB0ci5oCiAgICAgT3duUHRyQ29tbW9u
LmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmgJKHJldmlzaW9uIDc2Mzkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsNyArMTM1LDYgQEAgcHVibGljOgogICAgICAgICAsIHllYXIoMCkKICAgICAgICAg
LCBpc0RTVCgwKQogICAgICAgICAsIHV0Y09mZnNldCgwKQotICAgICAgICAsIHRpbWVab25lKDAp
CiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJh
eVB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQ
dHIuaAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFy
cmF5UHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCw5IEBACiAjaW5jbHVkZSAiQXNz
ZXJ0aW9ucy5oIgogI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCiAjaW5jbHVkZSAiTnVsbFB0ci5o
IgotI2luY2x1ZGUgIk93blB0ckNvbW1vbi5oIgotI2luY2x1ZGUgIk93bkFycmF5UHRyQ29tbW9u
LmgiCisjaW5jbHVkZSAiUGFzc093bkFycmF5UHRyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
Ci0vLyBSZW1vdmUgdGhpcyBvbmNlIHdlIG1ha2UgYWxsIFdlYktpdCBjb2RlIGNvbXBhdGlibGUg
d2l0aCBzdHJpY3RlciBydWxlcyBhYm91dCBPd25BcnJheVB0ci4KLSNkZWZpbmUgTE9PU0VfT1dO
X0FSUkFZX1BUUgotCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgUGFzc093bkFycmF5UHRyOwpAQCAtMTE1LDE2ICsxMTEsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgT3duCiAgICAgcmV0dXJuIHB0cjsKIH0KIAotI2lmZGVmIExP
T1NFX09XTl9BUlJBWV9QVFIKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIE93bkFy
cmF5UHRyPFQ+OjpzZXQoUHRyVHlwZSBwdHIpCi17Ci0gICAgQVNTRVJUKCFwdHIgfHwgbV9wdHIg
IT0gcHRyKTsKLSAgICBQdHJUeXBlIG9sZFB0ciA9IG1fcHRyOwotICAgIG1fcHRyID0gcHRyOwot
ICAgIGRlbGV0ZU93bmVkUHRyKG9sZFB0cik7Ci19Ci0jZW5kaWYKLQogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIE93bkFycmF5UHRyPFQ+JiBPd25BcnJheVB0cjxUPjo6b3BlcmF0b3I9KGNv
bnN0IFBhc3NPd25BcnJheVB0cjxUPiYgbykKIHsKICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQdHJDb21tb24uaAko
cmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5UHRy
Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgV1RGX093bkFycmF5UHRyQ29tbW9uX2gKLSNkZWZpbmUgV1RGX093bkFycmF5UHRyQ29t
bW9uX2gKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2
b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKQotewotICAgIHR5cGVkZWYgY2hhciBrbm93
bltzaXplb2YoVCkgPyAxIDogLTFdOwotICAgIGlmIChzaXplb2Yoa25vd24pKQotICAgICAgICBk
ZWxldGUgW10gcHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFdURl9P
d25BcnJheVB0ckNvbW1vbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NP
d25BcnJheVB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFz
c093bkFycmF5UHRyLmgJKHJldmlzaW9uIDc2MzkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QYXNzT3duQXJyYXlQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAog
CiAjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgogI2luY2x1ZGUgIk51bGxQdHIuaCIKLSNpbmNsdWRl
ICJPd25BcnJheVB0ckNvbW1vbi5oIgogI2luY2x1ZGUgIlR5cGVUcmFpdHMuaCIKIAogLy8gUmVt
b3ZlIHRoaXMgb25jZSB3ZSBtYWtlIGFsbCBXZWJLaXQgY29kZSBjb21wYXRpYmxlIHdpdGggc3Ry
aWN0ZXIgcnVsZXMgYWJvdXQgUGFzc093bkFycmF5UHRyLgpAQCAtMzksNiArMzgsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIE93bkFycmF5UHRyOwogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093bkFycmF5UHRyOwogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gUGFzc093bkFycmF5UHRyPFQ+IGFkb3B0QXJyYXlQdHIoVCopOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBkZWxldGVPd25lZEFycmF5UHRyKFQqIHB0cik7CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25BcnJheVB0ciB7CiBwdWJsaWM6CkBAIC0xOTQsNiArMTk0
LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzT3duQXJyYXkKICAgICByZXR1
cm4gUGFzc093bkFycmF5UHRyPFQ+KHB0cik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB2b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKQoreworICAgIHR5cGVkZWYgY2hh
ciBrbm93bltzaXplb2YoVCkgPyAxIDogLTFdOworICAgIGlmIChzaXplb2Yoa25vd24pKQorICAg
ICAgICBkZWxldGUgW10gcHRyOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgUGFzc093bkFycmF5UHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgUGFz
c093bkFycmF5UHRyPFU+JiBwKSAKIHsKICAgICByZXR1cm4gYWRvcHRBcnJheVB0cihzdGF0aWNf
Y2FzdDxUKj4ocC5sZWFrUHRyKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2NDMyKQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTEtMDEtMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmgg
dXNlcyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisK
KyAgICAgICAgUmVwbGFjZWQgYWxsIGNhbGxzIHRvIE93bkFycmF5UHRyOjpzZXQgYW5kIGxvb3Nl
IGluc3RhbnRpYXRpb24gb2YgT3duQXJyYXlQdHIgYnkKKyAgICAgICAgY2FsbHMgdG8gb3BlcmF0
b3I9IGFuZCBhZG9wdEFycmF5UHRyLgorCisgICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaW11bGF0ZVZlcnRleEF0dHJp
YjApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1
ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5n
dGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV3Q29vcmRzQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6bmV3TGVuZ3RoQXJyYXkpOgorICAgICAgICAqIHBsYXRmb3JtL0xlbmd0aC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFOR0xFV2ViS2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNvdXJjZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdldERpcnR5UmVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2V0Tm9ybWFsaXplZFRleHRSdW4pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpnbHlwaHNUb0FkdmFuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmNhblJl
bmRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZTo6dXBkYXRlU3ViUmVjdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFy
ZHdhcmVUb1NvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFy
ZWRCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQml0bWFwOjp0bzE2Yml0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmdldENvbnRleHRNZW51SXRlbXMpOgorICAgICAgICAqIHBsYXRm
b3JtL3dpbi9Mb2dnaW5nV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVXaXRo
VXNlckRlZmF1bHQpOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKwogMjAxMS0w
MS0yMSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFF
bGVtZW50LmNwcAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
cmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBIVE1M
QXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgICAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmVjdCIpKQogICAgICAgICAgICAgbV9zaGFwZSA9
IFJlY3Q7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY29vcmRzQXR0cikgewotICAg
ICAgICBtX2Nvb3Jkcy5zZXQobmV3Q29vcmRzQXJyYXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwg
bV9jb29yZHNMZW4pKTsKKyAgICAgICAgbV9jb29yZHMgPSBuZXdDb29yZHNBcnJheShhdHRyLT52
YWx1ZSgpLnN0cmluZygpLCBtX2Nvb3Jkc0xlbik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gYWx0QXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0cikgewogICAgICAg
ICAvLyBEbyBub3RoaW5nLgogICAgIH0gZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRnJhbWVTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDEy
ICs3NSwxMiBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0CiB7CiAg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSByb3dzQXR0cikgewogICAgICAgICBpZiAoIWF0dHItPmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBtX3Jvd0xlbmd0aHMuc2V0KG5ld0xlbmd0aEFycmF5KGF0
dHItPnZhbHVlKCkuc3RyaW5nKCksIG1fdG90YWxSb3dzKSk7CisgICAgICAgICAgICBtX3Jvd0xl
bmd0aHMgPSBuZXdMZW5ndGhBcnJheShhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBtX3RvdGFsUm93
cyk7CiAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjb2xzQXR0cikgewogICAgICAgICBpZiAoIWF0dHIt
PmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBtX2NvbExlbmd0aHMuc2V0KG5ld0xlbmd0aEFycmF5
KGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIG1fdG90YWxDb2xzKSk7CisgICAgICAgICAgICBtX2Nv
bExlbmd0aHMgPSBuZXdMZW5ndGhBcnJheShhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBtX3RvdGFs
Q29scyk7CiAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBmcmFtZWJvcmRlckF0dHIpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjg5LDcgKzE2ODksNyBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTCiAgICAgR0MzRGludCBu
dW1TaGFkZXJzID0gMDsKICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8o
cHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTLCAmbnVtU2hhZGVy
cyk7CiAgICAgaWYgKG51bVNoYWRlcnMpIHsKLSAgICAgICAgT3duQXJyYXlQdHI8UGxhdGZvcm0z
RE9iamVjdD4gc2hhZGVycyhuZXcgUGxhdGZvcm0zRE9iamVjdFtudW1TaGFkZXJzXSk7CisgICAg
ICAgIE93bkFycmF5UHRyPFBsYXRmb3JtM0RPYmplY3Q+IHNoYWRlcnMgPSBhZG9wdEFycmF5UHRy
KG5ldyBQbGF0Zm9ybTNET2JqZWN0W251bVNoYWRlcnNdKTsKICAgICAgICAgR0MzRHNpemVpIGNv
dW50ID0gMDsKICAgICAgICAgbV9jb250ZXh0LT5nZXRBdHRhY2hlZFNoYWRlcnMob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBudW1TaGFkZXJzLCAmY291bnQsIHNoYWRlcnMuZ2V0KCkpOwogICAgICAg
ICBpZiAoY291bnQgIT0gbnVtU2hhZGVycykKQEAgLTQ1MzMsNyArNDUzMyw3IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzaW11bGF0ZVZlcnQKICAgICAgICAgfHwgc3RhdGUudmFsdWVb
MV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0KICAgICAgICAgfHwgc3RhdGUudmFs
dWVbMl0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KICAgICAgICAgfHwgc3RhdGUu
dmFsdWVbM10gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10pIHsKLSAgICAgICAgT3du
QXJyYXlQdHI8R0MzRGZsb2F0PiBidWZmZXJEYXRhKG5ldyBHQzNEZmxvYXRbKG51bVZlcnRleCAr
IDEpICogNF0pOworICAgICAgICBPd25BcnJheVB0cjxHQzNEZmxvYXQ+IGJ1ZmZlckRhdGEgPSBh
ZG9wdEFycmF5UHRyKG5ldyBHQzNEZmxvYXRbKG51bVZlcnRleCArIDEpICogNF0pOwogICAgICAg
ICBmb3IgKEdDM0RzaXplaSBpaSA9IDA7IGlpIDwgbnVtVmVydGV4ICsgMTsgKytpaSkgewogICAg
ICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDRdID0gc3RhdGUudmFsdWVbMF07CiAgICAgICAgICAg
ICBidWZmZXJEYXRhW2lpICogNCArIDFdID0gc3RhdGUudmFsdWVbMV07CkBAIC00NTg4LDcgKzQ1
ODgsNyBAQCBXZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnCiB9CiAKIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6TFJVSW1hZ2VCdWZmZXJD
YWNoZShpbnQgY2FwYWNpdHkpCi0gICAgOiBtX2J1ZmZlcnMobmV3IE93blB0cjxJbWFnZUJ1ZmZl
cj5bY2FwYWNpdHldKQorICAgIDogbV9idWZmZXJzKGFkb3B0QXJyYXlQdHIobmV3IE93blB0cjxJ
bWFnZUJ1ZmZlcj5bY2FwYWNpdHldKSkKICAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCiB7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAJKHJldmlzaW9uIDc2MzkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9P
d25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV1RGOwpAQCAtODMsNyArODQsNyBAQCBzdGF0aWMgaW50IGNvdW50Q2hhcmFj
dGVyKGNvbnN0IFVDaGFyKiBkCiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1MZW5ndGgqIG5ld0Nv
b3Jkc0FycmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikKK1Bhc3NPd25BcnJheVB0
cjxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikK
IHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgY29uc3QgVUNo
YXIqIGRhdGEgPSBzdHJpbmcuY2hhcmFjdGVycygpOwpAQCAtMTAwLDcgKzEwMSw3IEBAIExlbmd0
aCogbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiBzdHIKICAgICBzdHIgPSBzdHItPnNpbXBs
aWZ5V2hpdGVTcGFjZSgpOwogCiAgICAgbGVuID0gY291bnRDaGFyYWN0ZXIoc3RyLT5jaGFyYWN0
ZXJzKCksIHN0ci0+bGVuZ3RoKCksICcgJykgKyAxOwotICAgIExlbmd0aCogciA9IG5ldyBMZW5n
dGhbbGVuXTsKKyAgICBPd25BcnJheVB0cjxMZW5ndGg+IHIgPSBhZG9wdEFycmF5UHRyKG5ldyBM
ZW5ndGhbbGVuXSk7CiAKICAgICBpbnQgaSA9IDA7CiAgICAgdW5zaWduZWQgcG9zID0gMDsKQEAg
LTExNCwxMCArMTE1LDEwIEBAIExlbmd0aCogbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiBz
dHIKIAogICAgIEFTU0VSVChpID09IGxlbiAtIDEpOwogCi0gICAgcmV0dXJuIHI7CisgICAgcmV0
dXJuIHIucmVsZWFzZSgpOwogfQogCi1MZW5ndGgqIG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBpbnQmIGxlbikKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0xlbmd0aEFy
cmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikKIHsKICAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gc3RyID0gc3RyaW5nLmltcGwoKS0+c2ltcGxpZnlXaGl0ZVNwYWNlKCk7CiAgICAgaWYg
KCFzdHItPmxlbmd0aCgpKSB7CkBAIC0xMjYsNyArMTI3LDcgQEAgTGVuZ3RoKiBuZXdMZW5ndGhB
cnJheShjb25zdCBTdHJpbmcmIHN0cgogICAgIH0KIAogICAgIGxlbiA9IGNvdW50Q2hhcmFjdGVy
KHN0ci0+Y2hhcmFjdGVycygpLCBzdHItPmxlbmd0aCgpLCAnLCcpICsgMTsKLSAgICBMZW5ndGgq
IHIgPSBuZXcgTGVuZ3RoW2xlbl07CisgICAgT3duQXJyYXlQdHI8TGVuZ3RoPiByID0gYWRvcHRB
cnJheVB0cihuZXcgTGVuZ3RoW2xlbl0pOwogCiAgICAgaW50IGkgPSAwOwogICAgIHVuc2lnbmVk
IHBvcyA9IDA7CkBAIC0xNDUsNyArMTQ2LDcgQEAgTGVuZ3RoKiBuZXdMZW5ndGhBcnJheShjb25z
dCBTdHJpbmcmIHN0cgogICAgIGVsc2UKICAgICAgICAgbGVuLS07CiAKLSAgICByZXR1cm4gcjsK
KyAgICByZXR1cm4gci5yZWxlYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJh
eVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE5Myw4ICsxOTQsOCBAQCBwcml2
YXRlOgogICAgIGludCBtX3ZhbHVlOwogfTsKIAotTGVuZ3RoKiBuZXdDb29yZHNBcnJheShjb25z
dCBTdHJpbmcmLCBpbnQmIGxlbik7Ci1MZW5ndGgqIG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmlu
ZyYsIGludCYgbGVuKTsKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNv
bnN0IFN0cmluZyYsIGludCYgbGVuKTsKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0xlbmd0
aEFycmF5KGNvbnN0IFN0cmluZyYsIGludCYgbGVuKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJy
aWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QU5HTEVXZWJLaXRCcmlkZ2UuY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTMsNyArOTMsNyBAQCBib29sIEFOR0xFV2ViS2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNv
CiAgICAgICAgIGludCBsb2dTaXplID0gMDsKICAgICAgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBT
SF9JTkZPX0xPR19MRU5HVEgsICZsb2dTaXplKTsKICAgICAgICAgaWYgKGxvZ1NpemUgPiAxKSB7
Ci0gICAgICAgICAgICBPd25BcnJheVB0cjxjaGFyPiBsb2dCdWZmZXIobmV3IGNoYXJbbG9nU2l6
ZV0pOworICAgICAgICAgICAgT3duQXJyYXlQdHI8Y2hhcj4gbG9nQnVmZmVyID0gYWRvcHRBcnJh
eVB0cihuZXcgY2hhcltsb2dTaXplXSk7CiAgICAgICAgICAgICBpZiAobG9nQnVmZmVyKSB7CiAg
ICAgICAgICAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBsb2dCdWZmZXIuZ2V0KCkpOwog
ICAgICAgICAgICAgICAgIHNoYWRlclZhbGlkYXRpb25Mb2cgPSBsb2dCdWZmZXIuZ2V0KCk7CkBA
IC0xMDUsNyArMTA1LDcgQEAgYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJT
bwogICAgIGludCB0cmFuc2xhdGlvbkxlbmd0aCA9IDA7CiAgICAgU2hHZXRJbmZvKGNvbXBpbGVy
LCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEgsICZ0cmFuc2xhdGlvbkxlbmd0aCk7CiAgICAgaWYgKHRy
YW5zbGF0aW9uTGVuZ3RoID4gMSkgewotICAgICAgICBPd25BcnJheVB0cjxjaGFyPiB0cmFuc2xh
dGlvbkJ1ZmZlcihuZXcgY2hhclt0cmFuc2xhdGlvbkxlbmd0aF0pOworICAgICAgICBPd25BcnJh
eVB0cjxjaGFyPiB0cmFuc2xhdGlvbkJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbdHJh
bnNsYXRpb25MZW5ndGhdKTsKICAgICAgICAgaWYgKCF0cmFuc2xhdGlvbkJ1ZmZlcikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyLCB0
cmFuc2xhdGlvbkJ1ZmZlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAJ
KHJldmlzaW9uIDc2MzkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw3
IEBAIHN0YXRpYyB2b2lkIGdldERpcnR5UmVjdHMoSFdORCB3aW5kb3csIFYKICAgICB9CiAKICAg
ICBEV09SRCBkYXRhU2l6ZSA9IEdldFJlZ2lvbkRhdGEocmVnaW9uLmdldCgpLCAwLCAwKTsKLSAg
ICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiByZWdpb25EYXRhQnVmZmVyKG5ldyB1bnNpZ25l
ZCBjaGFyW2RhdGFTaXplXSk7CisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcmVnaW9u
RGF0YUJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbZGF0YVNpemVdKTsK
ICAgICBSR05EQVRBKiByZWdpb25EYXRhID0gcmVpbnRlcnByZXRfY2FzdDxSR05EQVRBKj4ocmVn
aW9uRGF0YUJ1ZmZlci5nZXQoKSk7CiAgICAgaWYgKCFHZXRSZWdpb25EYXRhKHJlZ2lvbi5nZXQo
KSwgZGF0YVNpemUsIHJlZ2lvbkRhdGEpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJM
aW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCShyZXZpc2lvbiA3NjM5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0
Q29udHJvbGxlckxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDcgKzM2OSw3IEBAIGNv
bnN0IFRleHRSdW4mIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2UKICAgICAgICAgc291cmNlVGV4
dCA9IG5vcm1hbGl6ZWRTdHJpbmcuZ2V0QnVmZmVyKCk7CiAgICAgfQogCi0gICAgbm9ybWFsaXpl
ZEJ1ZmZlci5zZXQobmV3IFVDaGFyW25vcm1hbGl6ZWRCdWZmZXJMZW5ndGggKyAxXSk7CisgICAg
bm9ybWFsaXplZEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IFVDaGFyW25vcm1hbGl6ZWRCdWZm
ZXJMZW5ndGggKyAxXSk7CiAKICAgICBub3JtYWxpemVTcGFjZXNBbmRNaXJyb3JDaGFycyhzb3Vy
Y2VUZXh0LCBvcmlnaW5hbFJ1bi5ydGwoKSwgbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbm9ybWFs
aXplZEJ1ZmZlckxlbmd0aCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcAkocmV2aXNpb24g
NzYzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJm
YnV6elNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyB2b2lk
IGdseXBoc1RvQWR2YW5jZXMoSEJfRm9udCBoYkYKICAgICBmb250LT5zZXR1cFBhaW50KCZwYWlu
dCk7CiAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNv
ZGluZyk7CiAKLSAgICBPd25BcnJheVB0cjx1aW50MTZfdD4gZ2x5cGhzMTYobmV3IHVpbnQxNl90
W251bUdseXBoc10pOworICAgIE93bkFycmF5UHRyPHVpbnQxNl90PiBnbHlwaHMxNiA9IGFkb3B0
QXJyYXlQdHIobmV3IHVpbnQxNl90W251bUdseXBoc10pOwogICAgIGlmICghZ2x5cGhzMTYuZ2V0
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5
cGhzOyArK2kpCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RhdGljIEhCX0Jvb2wgY2FuUmVuZGVyKEhC
X0ZvbnQgaGJGb250LAogICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsKICAgICBwYWludC5z
ZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7CiAKLSAgICBPd25B
cnJheVB0cjx1aW50MTZfdD4gZ2x5cGhzMTYobmV3IHVpbnQxNl90W2xlbmd0aF0pOworICAgIE93
bkFycmF5UHRyPHVpbnQxNl90PiBnbHlwaHMxNiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQxNl90
W2xlbmd0aF0pOwogICAgIGlmICghZ2x5cGhzMTYuZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIGludCBudW1HbHlwaHMgPSBwYWludC50ZXh0VG9HbHlwaHMoY2hhcmFjdGVycywgbGVuZ3Ro
ICogc2l6ZW9mKHVpbnQxNl90KSwgZ2x5cGhzMTYuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAkocmV2aXNpb24gNzYz
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIFRleHR1cmU6OnVwZGF0ZVN1
YlJlY3Qodm9pZCogcGl4ZWxzCiAgICAgaW50IHRlbXBCdWZmU2l6ZSA9IC8vIFRlbXBvcmFyeSBi
dWZmZXIgc2l6ZSBpcyB0aGUgc21hbGxlciBvZiB0aGUgbWF4IHRleHR1cmUgc2l6ZSBvciB0aGUg
dXBkYXRlUmVjdFNhbml0aXplZAogICAgICAgICBtaW4obV90aWxlcy5tYXhUZXh0dXJlU2l6ZSgp
LCBtX3RpbGVzLmJvcmRlclRleGVscygpICsgdXBkYXRlUmVjdFNhbml0aXplZC53aWR0aCgpKSAq
CiAgICAgICAgIG1pbihtX3RpbGVzLm1heFRleHR1cmVTaXplKCksIG1fdGlsZXMuYm9yZGVyVGV4
ZWxzKCkgKyB1cGRhdGVSZWN0U2FuaXRpemVkLmhlaWdodCgpKTsKLSAgICBPd25BcnJheVB0cjx1
aW50MzJfdD4gdGVtcEJ1ZmYobmV3IHVpbnQzMl90W3RlbXBCdWZmU2l6ZV0pOworICAgIE93bkFy
cmF5UHRyPHVpbnQzMl90PiB0ZW1wQnVmZiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQzMl90W3Rl
bXBCdWZmU2l6ZV0pOwogCiAgICAgZm9yIChpbnQgdGlsZSA9IDA7IHRpbGUgPCBtX3RpbGVzLm51
bVRpbGVzKCk7IHRpbGUrKykgewogICAgICAgICAvLyBJbnRlcnNlY3Qgd2l0aCB0aWxlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHJldmlzaW9uIDc2MzkwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1JlCiAgICAgaW50IHJvd0J5dGVzID0gbV9jdXJy
ZW50V2lkdGggKiA0OwogICAgIGludCB0b3RhbEJ5dGVzID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRI
ZWlnaHQ7CiAKLSAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBwaXhlbHMobmV3IHVuc2ln
bmVkIGNoYXJbdG90YWxCeXRlc10pOworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBp
eGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc10pOwogICAg
IGlmICghcGl4ZWxzKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjUs
NyArODY1LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZWFkYmFja0hhcmR3YQogICAg
IGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0Jp
dG1hcCh0cnVlKTsKICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKICAgICBpbnQg
d2lkdGggPSBiaXRtYXAud2lkdGgoKSwgaGVpZ2h0ID0gYml0bWFwLmhlaWdodCgpOwotICAgIE93
bkFycmF5UHRyPHVpbnQzMl90PiBidWYobmV3IHVpbnQzMl90W3dpZHRoXSk7CisgICAgT3duQXJy
YXlQdHI8dWludDMyX3Q+IGJ1ZiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQzMl90W3dpZHRoXSk7
CiAgICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29u
dGV4dCgpOwogICAgIG1fZ3B1Q2FudmFzLT5iaW5kRnJhbWVidWZmZXIoKTsKICAgICAvLyBGbGlw
cyB0aGUgaW1hZ2UgdmVydGljYWxseS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcAkocmV2aXNpb24gNzYz
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRt
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAgYm9vbCBTaGFyZWRCaXRt
YXA6OnRvMTZiaXQoKQogICAgIGludCB3aWR0aCA9IG5ld0JtcEluZm8ud2lkdGgoKTsKICAgICBp
bnQgcGFkZGVkV2lkdGggPSBuZXdCbXBJbmZvLnBhZGRlZFdpZHRoKCk7CiAgICAgaW50IGJ1ZmZl
clNpemUgPSBwYWRkZWRXaWR0aCAqIG5ld0JtcEluZm8uaGVpZ2h0KCk7Ci0gICAgT3duQXJyYXlQ
dHI8dW5zaWduZWQ+IG5ld1BpeGVsRGF0YShuZXcgdW5zaWduZWRbYnVmZmVyU2l6ZSAvIDJdKTsK
KyAgICBPd25BcnJheVB0cjx1bnNpZ25lZD4gbmV3UGl4ZWxEYXRhID0gYWRvcHRBcnJheVB0cihu
ZXcgdW5zaWduZWRbYnVmZmVyU2l6ZSAvIDJdKTsKICAgICB2b2lkKiBuZXdQaXhlbHMgPSBuZXdQ
aXhlbERhdGEuZ2V0KCk7CiAKICAgICBpZiAoIW5ld1BpeGVscykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAkocmV2aXNpb24gNzYzOTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgQ29udGV4dE1lbnU6OmdldENvbnRleHRN
ZW51SXRlbXMoSE0KICAgICAgICAgfQogCiAgICAgICAgIGludCBtZW51U3RyaW5nTGVuZ3RoID0g
aW5mby5jY2ggKyAxOwotICAgICAgICBPd25BcnJheVB0cjxXQ0hBUj4gbWVudVN0cmluZyhuZXcg
V0NIQVJbbWVudVN0cmluZ0xlbmd0aF0pOworICAgICAgICBPd25BcnJheVB0cjxXQ0hBUj4gbWVu
dVN0cmluZyA9IGFkb3B0QXJyYXlQdHIobmV3IFdDSEFSW21lbnVTdHJpbmdMZW5ndGhdKTsKICAg
ICAgICAgaW5mby5kd1R5cGVEYXRhID0gbWVudVN0cmluZy5nZXQoKTsKICAgICAgICAgaW5mby5j
Y2ggPSBtZW51U3RyaW5nTGVuZ3RoOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vTG9nZ2luZ1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0xvZ2dpbmdXaW4uY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZVdpdGhVc2VyRGVmCiAgICAgaWYgKCFsZW5n
dGgpCiAgICAgICAgIHJldHVybjsKIAotICAgIE93bkFycmF5UHRyPGNoYXI+IGJ1ZmZlcihuZXcg
Y2hhcltsZW5ndGhdKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBidWZmZXIgPSBhZG9wdEFycmF5
UHRyKG5ldyBjaGFyW2xlbmd0aF0pOwogCiAgICAgaWYgKCFHZXRFbnZpcm9ubWVudFZhcmlhYmxl
QShjaGFubmVsLmRlZmF1bHROYW1lLCBidWZmZXIuZ2V0KCksIGxlbmd0aCkpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpblBhY2thZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAg
Ym9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQogICAgIGlmICh2ZXJzaW9uSW5mb1NpemUg
PT0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4gdmVy
c2lvbkluZm9EYXRhKG5ldyBjaGFyW3ZlcnNpb25JbmZvU2l6ZV0pOworICAgIE93bkFycmF5UHRy
PGNoYXI+IHZlcnNpb25JbmZvRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbdmVyc2lvbklu
Zm9TaXplXSk7CiAKICAgICBpZiAoIUdldEZpbGVWZXJzaW9uSW5mb1coY29uc3RfY2FzdDxVQ2hh
cio+KG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSwKICAgICAgICAgICAg
IDAsIHZlcnNpb25JbmZvU2l6ZSwgdmVyc2lvbkluZm9EYXRhLmdldCgpKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79839</attachid>
            <date>2011-01-22 03:40:06 -0800</date>
            <delta_ts>2011-01-22 12:47:42 -0800</delta_ts>
            <desc>another attempt</desc>
            <filename>bug-52867-20110122034005.patch</filename>
            <type>text/plain</type>
            <size>41130</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzY0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAK
KzIwMTEtMDEtMjEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmggdXNl
cyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisKKyAg
ICAgICAgUmVtb3ZlZCBMT09TRV9PV05fQVJSQVlfUFRSIGFuZCBPd25BcnJheVB0cjxUPjo6c2V0
LgorCisgICAgICAgIFJlcGxhY2VkIGFsbCBjYWxscyB0byBPd25BcnJheVB0cjo6c2V0IGFuZCBs
b29zZSBpbnN0YW50aWF0aW9uIG9mIE93bkFycmF5UHRyIGJ5CisgICAgICAgIGNhbGxzIHRvIG9w
ZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ci4KKworICAgICAgICAqIEFQSS9KU1N0cmluZ1JlZkNG
LmNwcDoKKyAgICAgICAgKEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKTogQ2FsbHMgb3BlcmF0
b3I9IGFuZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOiBSZW1vdmVkIE93bkFycmF5UHRyQ29tbW9uLmgKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHd0Zi9DTWFr
ZUxpc3RzLnR4dDogRGl0dG8uCisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KTogQ2FsbHMgb3BlcmF0b3I9IGFu
ZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1l
bnRzLmg6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6Y29weVJlZ2lzdGVycyk6IENhbGxzIGFk
b3B0QXJyYXlQdHIuCisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcik6IENhbGxzIG9wZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ciBpbnN0ZWFkIG9mIHNl
dC4KKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNWYXJpYWJsZU9iamVjdDo6c2V0UmVnaXN0ZXJzKTogQ2FsbHMgb3BlcmF0b3I9LgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVD
aGFpbjo6U3RydWN0dXJlQ2hhaW4pOiBDYWxscyBvcGVyYXRvcj0gYW5kIGFkb3B0QXJyYXlQdHIg
aW5zdGVhZCBvZiBzZXQuCisgICAgICAgICogd3RmL0RhdGVNYXRoLmg6CisgICAgICAgIChKU0M6
OkdyZWdvcmlhbkRhdGVUaW1lOjpHcmVnb3JpYW5EYXRlVGltZSk6CisgICAgICAgICogd3RmL093
bkFycmF5UHRyLmg6IEluY2x1ZGUgUGFzc093bkFycmF5UHRyLmggaW5zdGVhZCBvZiBPd25BcnJh
eVB0ckNvbW1vbi5oOyByZW1vdmVkIExPT1NFX09XTl9BUlJBWV9QVFIKKyAgICAgICAgYW5kIE93
bkFycmF5UHRyPFQ+OjpzZXQuCisgICAgICAgICogd3RmL093bkFycmF5UHRyQ29tbW9uLmg6IFJl
bW92ZWQuCisgICAgICAgICogd3RmL1Bhc3NPd25BcnJheVB0ci5oOiBObyBsb25nZXIgaW5jbHVk
ZXMgT3duQXJyYXlQdHJDb21tb24uaAorICAgICAgICAoV1RGOjpkZWxldGVPd25lZEFycmF5UHRy
KTogTW92ZWQgZnJvbSBPd25BcnJheVB0ckNvbW1vbi5oLgorCiAyMDExLTAxLTIxICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVq
IFN0YWNob3dpYWsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiA3NjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkod29y
a2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw2IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT1NBbGxvY2F0b3IuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL093bkZhc3RNYWxsb2NQdHIuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25B
cnJheVB0ckNvbW1vbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093blB0ckNvbW1v
bi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093blB0ci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmggXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1N0cmluZ1JlZkNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU3RyaW5nUmVmQ0YuY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgSlNTdHJpbmdSZWYgSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQwog
ICAgIC8vIGl0IGNhbiBob2xkLiAgKDxyZGFyOi8vcHJvYmxlbS82ODA2NDc4PikKICAgICBzaXpl
X3QgbGVuZ3RoID0gQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKICAgICBpZiAobGVuZ3RoKSB7
Ci0gICAgICAgIE93bkFycmF5UHRyPFVuaUNoYXI+IGJ1ZmZlcihuZXcgVW5pQ2hhcltsZW5ndGhd
KTsKKyAgICAgICAgT3duQXJyYXlQdHI8VW5pQ2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihu
ZXcgVW5pQ2hhcltsZW5ndGhdKTsKICAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHN0cmlu
ZywgQ0ZSYW5nZU1ha2UoMCwgbGVuZ3RoKSwgYnVmZmVyLmdldCgpKTsKICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFVuaUNoYXIpID09IHNpemVvZihVQ2hhciksIHVuaWNoYXJfYW5kX3Vj
aGFyX211c3RfYmVfc2FtZV9zaXplKTsKICAgICAgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjpj
cmVhdGUocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGJ1ZmZlci5nZXQoKSksIGxlbmd0aCkubGVh
a1JlZigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA3NjM5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTc0OSwxMCArNzQ5LDYgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8
RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcT3duQXJyYXlQdHJDb21tb24uaCIKLQkJ
CT4KLQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcT3duRmFz
dE1hbGxvY1B0ci5oIgogCQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQ3
LDcgKzU0Nyw2IEBACiAJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERTNBQjAw
RTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi87IH07CiAJCUJDRjYwNTE0MEUyMDNF
RjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkJFNjk2MTIy
NTYwRTgwMDMwOUU5RCAvKiBQYXNzT3duQXJyYXlQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkJFNjk1MTIyNTYwRTgwMDMwOUU5RCAvKiBQYXNz
T3duQXJyYXlQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlCQ0ZCRTY5ODEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21tb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkJFNjk3MTIy
NTYxRDIwMDMwOUU5RCAvKiBPd25BcnJheVB0ckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAv
KiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi87IH07CiAJ
CUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAv
KiBKdW1wVGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMwRTUwQTA2MzAwRTk2RTE1IC8qIE5vdEZv
dW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMEEy
NzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE0Nyw3ICsxMTQ2LDYgQEAKIAkJQkNGNjA1
MTIwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXJnTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y2NTUz
QjBBMjA0OERFMDAzOEExOTQgLyogTWF0aEV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWF0aEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Q0ZCRTY5NTEyMjU2MEU4MDAzMDlFOUQgLyogUGFzc093bkFycmF5UHRyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3NPd25BcnJheVB0ci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCQ0ZCRTY5NzEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21t
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3duQXJyYXlQdHJDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4
IC8qIEp1bXBUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
dW1wVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZEOEM5MTBFRUIy
RUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEp1bXBUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMEEyNzIzRjBF
NTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTm90Rm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjMsNyAr
MTU2MSw2IEBACiAJCQkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmgg
Ki8sCiAJCQkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3Bw
ICovLAogCQkJCTkzMDNGNUE0MDk5MTFBNTgwMEFENzFCOCAvKiBPd25BcnJheVB0ci5oICovLAot
CQkJCUJDRkJFNjk3MTIyNTYxRDIwMDMwOUU5RCAvKiBPd25BcnJheVB0ckNvbW1vbi5oICovLAog
CQkJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi8sCiAJ
CQkJOTMwM0Y1NjcwOTkxMThGQTAwQUQ3MUI4IC8qIE93blB0ci5oICovLAogCQkJCTQ0MEI3QUVE
MEZBRjdGQ0IwMDczMzIzRSAvKiBPd25QdHJDb21tb24uaCAqLywKQEAgLTIyODYsNyArMjI4Myw2
IEBACiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDkwRTE2RjVDRDAwQjM0NDYwIC8qIE93bkFycmF5UHRy
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0ZCRTY5ODEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJy
YXlQdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVG
NCAvKiBPd25GYXN0TWFsbG9jUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0QTBFMTZG
NUNEMDBCMzQ0NjAgLyogT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDA5RDg0NzBGQUY4
MEEyMDA1MjNCODcgLyogT3duUHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkocmV2aXNpb24gNzYzOTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5
KEV4ZWNTdGF0ZQogewogICAgIGlmIChpIDwgZC0+bnVtQXJndW1lbnRzKSB7CiAgICAgICAgIGlm
ICghZC0+ZGVsZXRlZEFyZ3VtZW50cykgewotICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50
cy5zZXQobmV3IGJvb2xbZC0+bnVtQXJndW1lbnRzXSk7CisgICAgICAgICAgICBkLT5kZWxldGVk
QXJndW1lbnRzID0gYWRvcHRBcnJheVB0cihuZXcgYm9vbFtkLT5udW1Bcmd1bWVudHNdKTsKICAg
ICAgICAgICAgIG1lbXNldChkLT5kZWxldGVkQXJndW1lbnRzLmdldCgpLCAwLCBzaXplb2YoYm9v
bCkgKiBkLT5udW1Bcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgIGlmICghZC0+ZGVsZXRl
ZEFyZ3VtZW50c1tpXSkgewpAQCAtMzIxLDcgKzMyMSw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWxl
dGVQcm9wZXJ0eShFeGVjU3RhdGUKICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLnRvQXJy
YXlJbmRleChpc0FycmF5SW5kZXgpOwogICAgIGlmIChpc0FycmF5SW5kZXggJiYgaSA8IGQtPm51
bUFyZ3VtZW50cykgewogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHMpIHsKLSAgICAg
ICAgICAgIGQtPmRlbGV0ZWRBcmd1bWVudHMuc2V0KG5ldyBib29sW2QtPm51bUFyZ3VtZW50c10p
OworICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50cyA9IGFkb3B0QXJyYXlQdHIobmV3IGJv
b2xbZC0+bnVtQXJndW1lbnRzXSk7CiAgICAgICAgICAgICBtZW1zZXQoZC0+ZGVsZXRlZEFyZ3Vt
ZW50cy5nZXQoKSwgMCwgc2l6ZW9mKGJvb2wpICogZC0+bnVtQXJndW1lbnRzKTsKICAgICAgICAg
fQogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiA3NjM5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzAsNyArMjMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXIqIHJl
Z2lzdGVyQXJyYXkgPSBuZXcgUmVnaXN0ZXJbcmVnaXN0ZXJBcnJheVNpemVdOwogICAgICAgICBt
ZW1jcHkocmVnaXN0ZXJBcnJheSwgZC0+cmVnaXN0ZXJzIC0gcmVnaXN0ZXJPZmZzZXQsIHJlZ2lz
dGVyQXJyYXlTaXplICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGQtPnJlZ2lzdGVyQXJy
YXkuc2V0KHJlZ2lzdGVyQXJyYXkpOworICAgICAgICBkLT5yZWdpc3RlckFycmF5ID0gcmVnaXN0
ZXJBcnJheTsKICAgICAgICAgZC0+cmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVy
T2Zmc2V0OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDc2MzkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6OkpTUHJvcGVydAogICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmUoMCkKICAgICAsIG1f
bnVtQ2FjaGVhYmxlU2xvdHMobnVtQ2FjaGVhYmxlU2xvdHMpCiAgICAgLCBtX2pzU3RyaW5nc1Np
emUocHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCkpCi0g
ICAgLCBtX2pzU3RyaW5ncyhuZXcgSlNWYWx1ZVttX2pzU3RyaW5nc1NpemVdKQorICAgICwgbV9q
c1N0cmluZ3MoYWRvcHRBcnJheVB0cihuZXcgSlNWYWx1ZVttX2pzU3RyaW5nc1NpemVdKSkKIHsK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3RvciYgcHJvcGVydHlO
YW1lVmVjdG9yID0gcHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fanNTdHJpbmdzU2l6ZTsgKytpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAko
cmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zhcmlh
YmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBpbmxpbmUgdm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpzZXRSZWdpc3RlcnMoUmVn
aXN0ZXIqIHJlZ2lzdGVycywgUmVnaXN0ZXIqIHJlZ2lzdGVyQXJyYXkpCiAgICAgewogICAgICAg
ICBBU1NFUlQocmVnaXN0ZXJBcnJheSAhPSBkLT5yZWdpc3RlckFycmF5LmdldCgpKTsKLSAgICAg
ICAgZC0+cmVnaXN0ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSk7CisgICAgICAgIGQtPnJlZ2lz
dGVyQXJyYXkgPSByZWdpc3RlckFycmF5OwogICAgICAgICBkLT5yZWdpc3RlcnMgPSByZWdpc3Rl
cnM7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBTdHJ1Y3R1cmVDaGFpbjo6U3RydWN0dXJlQ2hhaW4oU3RydWN0dXJlCiAgICAgZm9y
IChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDogYXNPYmplY3QoY3VycmVudC0+c3RvcmVk
UHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKICAgICAgICAgKytzaXplOwogICAgIAotICAgIG1f
dmVjdG9yLnNldChuZXcgUmVmUHRyPFN0cnVjdHVyZT5bc2l6ZSArIDFdKTsKKyAgICBtX3ZlY3Rv
ciA9IGFkb3B0QXJyYXlQdHIobmV3IFJlZlB0cjxTdHJ1Y3R1cmU+W3NpemUgKyAxXSk7CiAKICAg
ICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJy
ZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDog
YXNPYmplY3QoY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzYzOTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw2IEBAIFNFVChXVEZfSEVBREVSUwogICAgIE51bGxQdHIuaAogICAg
IE9TQWxsb2NhdG9yLmgKICAgICBPd25BcnJheVB0ci5oCi0gICAgT3duQXJyYXlQdHJDb21tb24u
aAogICAgIE93bkZhc3RNYWxsb2NQdHIuaAogICAgIE93blB0ci5oCiAgICAgT3duUHRyQ29tbW9u
LmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmgJKHJldmlzaW9uIDc2Mzkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsNyArMTM1LDYgQEAgcHVibGljOgogICAgICAgICAsIHllYXIoMCkKICAgICAgICAg
LCBpc0RTVCgwKQogICAgICAgICAsIHV0Y09mZnNldCgwKQotICAgICAgICAsIHRpbWVab25lKDAp
CiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJh
eVB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQ
dHIuaAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFy
cmF5UHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCw5IEBACiAjaW5jbHVkZSAiQXNz
ZXJ0aW9ucy5oIgogI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCiAjaW5jbHVkZSAiTnVsbFB0ci5o
IgotI2luY2x1ZGUgIk93blB0ckNvbW1vbi5oIgotI2luY2x1ZGUgIk93bkFycmF5UHRyQ29tbW9u
LmgiCisjaW5jbHVkZSAiUGFzc093bkFycmF5UHRyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
Ci0vLyBSZW1vdmUgdGhpcyBvbmNlIHdlIG1ha2UgYWxsIFdlYktpdCBjb2RlIGNvbXBhdGlibGUg
d2l0aCBzdHJpY3RlciBydWxlcyBhYm91dCBPd25BcnJheVB0ci4KLSNkZWZpbmUgTE9PU0VfT1dO
X0FSUkFZX1BUUgotCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgUGFzc093bkFycmF5UHRyOwpAQCAtMTE1LDE2ICsxMTEsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgT3duCiAgICAgcmV0dXJuIHB0cjsKIH0KIAotI2lmZGVmIExP
T1NFX09XTl9BUlJBWV9QVFIKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIE93bkFy
cmF5UHRyPFQ+OjpzZXQoUHRyVHlwZSBwdHIpCi17Ci0gICAgQVNTRVJUKCFwdHIgfHwgbV9wdHIg
IT0gcHRyKTsKLSAgICBQdHJUeXBlIG9sZFB0ciA9IG1fcHRyOwotICAgIG1fcHRyID0gcHRyOwot
ICAgIGRlbGV0ZU93bmVkUHRyKG9sZFB0cik7Ci19Ci0jZW5kaWYKLQogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIE93bkFycmF5UHRyPFQ+JiBPd25BcnJheVB0cjxUPjo6b3BlcmF0b3I9KGNv
bnN0IFBhc3NPd25BcnJheVB0cjxUPiYgbykKIHsKICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQdHJDb21tb24uaAko
cmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5UHRy
Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgV1RGX093bkFycmF5UHRyQ29tbW9uX2gKLSNkZWZpbmUgV1RGX093bkFycmF5UHRyQ29t
bW9uX2gKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2
b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKQotewotICAgIHR5cGVkZWYgY2hhciBrbm93
bltzaXplb2YoVCkgPyAxIDogLTFdOwotICAgIGlmIChzaXplb2Yoa25vd24pKQotICAgICAgICBk
ZWxldGUgW10gcHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFdURl9P
d25BcnJheVB0ckNvbW1vbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NP
d25BcnJheVB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFz
c093bkFycmF5UHRyLmgJKHJldmlzaW9uIDc2MzkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QYXNzT3duQXJyYXlQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAog
CiAjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgogI2luY2x1ZGUgIk51bGxQdHIuaCIKLSNpbmNsdWRl
ICJPd25BcnJheVB0ckNvbW1vbi5oIgogI2luY2x1ZGUgIlR5cGVUcmFpdHMuaCIKIAogLy8gUmVt
b3ZlIHRoaXMgb25jZSB3ZSBtYWtlIGFsbCBXZWJLaXQgY29kZSBjb21wYXRpYmxlIHdpdGggc3Ry
aWN0ZXIgcnVsZXMgYWJvdXQgUGFzc093bkFycmF5UHRyLgpAQCAtMzksNiArMzgsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIE93bkFycmF5UHRyOwogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093bkFycmF5UHRyOwogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gUGFzc093bkFycmF5UHRyPFQ+IGFkb3B0QXJyYXlQdHIoVCopOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBkZWxldGVPd25lZEFycmF5UHRyKFQqIHB0cik7CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25BcnJheVB0ciB7CiBwdWJsaWM6CkBAIC0xOTQsNiArMTk0
LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzT3duQXJyYXkKICAgICByZXR1
cm4gUGFzc093bkFycmF5UHRyPFQ+KHB0cik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB2b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKQoreworICAgIHR5cGVkZWYgY2hh
ciBrbm93bltzaXplb2YoVCkgPyAxIDogLTFdOworICAgIGlmIChzaXplb2Yoa25vd24pKQorICAg
ICAgICBkZWxldGUgW10gcHRyOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgUGFzc093bkFycmF5UHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgUGFz
c093bkFycmF5UHRyPFU+JiBwKSAKIHsKICAgICByZXR1cm4gYWRvcHRBcnJheVB0cihzdGF0aWNf
Y2FzdDxUKj4ocC5sZWFrUHRyKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2NDMzKQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTEtMDEtMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmgg
dXNlcyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisK
KyAgICAgICAgUmVwbGFjZWQgYWxsIGNhbGxzIHRvIE93bkFycmF5UHRyOjpzZXQgYW5kIGxvb3Nl
IGluc3RhbnRpYXRpb24gb2YgT3duQXJyYXlQdHIgYnkKKyAgICAgICAgY2FsbHMgdG8gb3BlcmF0
b3I9IGFuZCBhZG9wdEFycmF5UHRyLgorCisgICAgICAgICogYmluZGluZ3MvdjgvTlBWOE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWYWx1ZUxpc3RGcm9tVmFyaWFudEFyZ3Mp
OgorICAgICAgICAoX05QTl9JbnZva2UpOgorICAgICAgICAoX05QTl9JbnZva2VEZWZhdWx0KToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEZ1bmN0aW9uQ2FsbDo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENh
bGxiYWNrOjpjYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZU5ld0NvbnRleHQp
OgorICAgICAgICAqIGh0bWwvSFRNTEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxBcmVhRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwv
SFRNTEZyYW1lU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVTZXRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6TFJVSW1hZ2VCdWZm
ZXJDYWNoZSk6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om5ld0Nvb3Jkc0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6Om5ld0xlbmd0aEFycmF5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9BTkdMRVdlYktpdEJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBTkdMRVdlYktpdEJy
aWRnZTo6dmFsaWRhdGVTaGFkZXJTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREaXJ0
eVJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4
dENvbnRyb2xsZXJMaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRy
b2xsZXI6OmdldE5vcm1hbGl6ZWRUZXh0UnVuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9IYXJmYnV6elNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2x5cGhzVG9B
ZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpjYW5SZW5kZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6
OnVwZGF0ZVN1YlJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZEJpdG1hcDo6dG8xNmJpdCk6CisgICAgICAgICogcGxhdGZvcm0vd2lu
L0NvbnRleHRNZW51V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpnZXRD
b250ZXh0TWVudUl0ZW1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplV2l0aFVzZXJEZWZhdWx0KToKKyAgICAgICAg
KiBwbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblBhY2thZ2U6OmZldGNoSW5mbyk6CisKIDIwMTEtMDEtMjIgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCShyZXZpc2lv
biA3NjM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OCwxNCArNzgsMTQgQEAgc3RhdGljIHZvaWQgZnJlZVY4TlBPYmpl
Y3QoTlBPYmplY3QqIG5wTwogICAgIGZyZWUodjhOcE9iamVjdCk7CiB9CiAKLXN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4qIGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyhjb25zdCBO
UFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBPYmplY3QqIG93
bmVyKQorc3RhdGljIFBhc3NPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qPiBjcmVh
dGVWYWx1ZUxpc3RGcm9tVmFyaWFudEFyZ3MoY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVp
bnQzMl90IGFyZ3VtZW50Q291bnQsIE5QT2JqZWN0KiBvd25lcikKIHsKLSAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4qIGFyZ3YgPSBuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+W2FyZ3VtZW50Q291
bnRdOworICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPio+IGFyZ3YgPSBhZG9w
dEFycmF5UHRyPG5ldyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT5bYXJndW1lbnRDb3VudF0+OwogICAg
IGZvciAodWludDMyX3QgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnQ7IGluZGV4Kysp
IHsKICAgICAgICAgY29uc3QgTlBWYXJpYW50KiBhcmcgPSAmYXJndW1lbnRzW2luZGV4XTsKICAg
ICAgICAgYXJndltpbmRleF0gPSBjb252ZXJ0TlBWYXJpYW50VG9WOE9iamVjdChhcmcsIG93bmVy
KTsKICAgICB9Ci0gICAgcmV0dXJuIGFyZ3Y7CisgICAgcmV0dXJuIGFyZ3YucmVsZWFzZSgpOwog
fQogCiAvLyBDcmVhdGUgYW4gaWRlbnRpZmllciAobnVsbCB0ZXJtaW5hdGVkIHV0ZjggY2hhciop
IGZyb20gdGhlIE5QSWRlbnRpZmllci4KQEAgLTE4OCw3ICsxODgsNyBAQCBib29sIF9OUE5fSW52
b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBucE9iCiAKICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBv
YmplY3QuCiAgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gdjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb24+OjpDYXN0KGZ1bmN0aW9uT2JqZWN0KTsKLSAgICBPd25BcnJheVB0cjx2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmd2KGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJn
cyhhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIG5wT2JqZWN0KSk7CisgICAgT3duQXJyYXlQdHI8
djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJndiA9IGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50
QXJncyhhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIG5wT2JqZWN0KTsKICAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiByZXN1bHRPYmplY3QgPSBwcm94eS0+Y2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCB2
OE5wT2JqZWN0LT52OE9iamVjdCwgYXJndW1lbnRDb3VudCwgYXJndi5nZXQoKSk7CiAKICAgICAv
LyBJZiB3ZSBoYWQgYW4gZXJyb3IsIHJldHVybiBmYWxzZS4gIFRoZSBzcGVjIGlzIGEgbGl0dGxl
IHVuY2xlYXIgaGVyZSwgYnV0IHNheXMgIlJldHVybnMgdHJ1ZSBpZiB0aGUgbWV0aG9kIHdhcwpA
QCAtMjM3LDcgKzIzNyw3IEBAIGJvb2wgX05QTl9JbnZva2VEZWZhdWx0KE5QUCBucHAsIE5QT2Jq
ZWMKICAgICAgICAgVjhQcm94eSogcHJveHkgPSB0b1Y4UHJveHkobnBPYmplY3QpOwogICAgICAg
ICBBU1NFUlQocHJveHkpOwogCi0gICAgICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZh
bHVlPiA+IGFyZ3YoY3JlYXRlVmFsdWVMaXN0RnJvbVZhcmlhbnRBcmdzKGFyZ3VtZW50cywgYXJn
dW1lbnRDb3VudCwgbnBPYmplY3QpKTsKKyAgICAgICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2
ODo6VmFsdWU+ID4gYXJndiA9IGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyhhcmd1bWVu
dHMsIGFyZ3VtZW50Q291bnQsIG5wT2JqZWN0KTsKICAgICAgICAgcmVzdWx0T2JqZWN0ID0gcHJv
eHktPmNhbGxGdW5jdGlvbihmdW5jdGlvbiwgZnVuY3Rpb25PYmplY3QsIGFyZ3VtZW50Q291bnQs
IGFyZ3YuZ2V0KCkpOwogICAgIH0KICAgICAvLyBJZiB3ZSBoYWQgYW4gZXJyb3IsIHJldHVybiBm
YWxzZS4gIFRoZSBzcGVjIGlzIGEgbGl0dGxlIHVuY2xlYXIgaGVyZSwgYnV0IHNheXMgIlJldHVy
bnMgdHJ1ZSBpZiB0aGUgbWV0aG9kIHdhcwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6
OmNhbGwoYm9vCiAgICAgQVNTRVJUKHZhbHVlLT5Jc0Z1bmN0aW9uKCkpOwogCiAgICAgdjg6Okxv
Y2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24odjg6OkZ1bmN0aW9uOjpDYXN0KCp2YWx1ZSkpOwot
ICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3MobmV3IHY4OjpIYW5k
bGU8djg6OlZhbHVlPlttX2FyZ3VtZW50cy5zaXplKCldKTsKKyAgICBPd25BcnJheVB0cjx2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdzID0gYWRvcHRBcnJheVB0cihuZXcgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+W21fYXJndW1lbnRzLnNpemUoKV0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGFyZ3NbaV0gPSBtX2FyZ3VtZW50
c1tpXS52OFZhbHVlKCk7CiAKQEAgLTE1OSw3ICsxNTksNyBAQCBTY3JpcHRPYmplY3QgU2NyaXB0
RnVuY3Rpb25DYWxsOjpjb25zdHJ1CiAgICAgQVNTRVJUKHZhbHVlLT5Jc0Z1bmN0aW9uKCkpOwog
CiAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gY29uc3RydWN0b3Iodjg6OkZ1bmN0aW9uOjpD
YXN0KCp2YWx1ZSkpOwotICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFy
Z3MobmV3IHY4OjpIYW5kbGU8djg6OlZhbHVlPlttX2FyZ3VtZW50cy5zaXplKCldKTsKKyAgICBP
d25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdzID0gYWRvcHRBcnJheVB0cihu
ZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+W21fYXJndW1lbnRzLnNpemUoKV0pOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGFyZ3Nb
aV0gPSBtX2FyZ3VtZW50c1tpXS52OFZhbHVlKCk7CiAKQEAgLTE5Myw3ICsxOTMsNyBAQCBTY3Jp
cHRWYWx1ZSBTY3JpcHRDYWxsYmFjazo6Y2FsbChib29sJiBoCiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBvYmplY3QgPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpLT5HbG9iYWwoKTsKICAg
ICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj46OkNhc3QobV9mdW5jdGlvbi52OFZhbHVlKCkpOwogCi0gICAgT3duQXJyYXlQdHI8djg6
OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJncyhuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+W21fYXJn
dW1lbnRzLnNpemUoKV0pOworICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+
IGFyZ3MgPSBhZG9wdEFycmF5UHRyKG5ldyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT5bbV9hcmd1bWVu
dHMuc2l6ZSgpXSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXpl
KCk7ICsraSkKICAgICAgICAgYXJnc1tpXSA9IG1fYXJndW1lbnRzW2ldLnY4VmFsdWUoKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5j
cHAJKHJldmlzaW9uIDc2MzkwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
aW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw3ICszNTgsNyBAQCB2ODo6UGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gVjhET01XaW5kb3dTCiAKICAgICAvLyBEeW5hbWljYWxseSB0
ZWxsIHY4IGFib3V0IG91ciBleHRlbnNpb25zIG5vdy4KICAgICBjb25zdCBWOEV4dGVuc2lvbnMm
IGV4dGVuc2lvbnMgPSBWOFByb3h5OjpleHRlbnNpb25zKCk7Ci0gICAgT3duQXJyYXlQdHI8Y29u
c3QgY2hhcio+IGV4dGVuc2lvbk5hbWVzKG5ldyBjb25zdCBjaGFyKltleHRlbnNpb25zLnNpemUo
KV0pOworICAgIE93bkFycmF5UHRyPGNvbnN0IGNoYXIqPiBleHRlbnNpb25OYW1lcyA9IGFkb3B0
QXJyYXlQdHIobmV3IGNvbnN0IGNoYXIqW2V4dGVuc2lvbnMuc2l6ZSgpXSk7CiAgICAgaW50IGlu
ZGV4ID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgLy8gRW5zdXJlIG91ciBkYXRlIGV4dGVuc2lvbiBpcyBhbHdheXMgYWxs
b3dlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHJldmlz
aW9uIDc2MzkwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgSFRNTEFyZWFFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnUKICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+
dmFsdWUoKSwgInJlY3QiKSkKICAgICAgICAgICAgIG1fc2hhcGUgPSBSZWN0OwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvb3Jkc0F0dHIpIHsKLSAgICAgICAgbV9jb29yZHMuc2V0
KG5ld0Nvb3Jkc0FycmF5KGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIG1fY29vcmRzTGVuKSk7Cisg
ICAgICAgIG1fY29vcmRzID0gbmV3Q29vcmRzQXJyYXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwg
bV9jb29yZHNMZW4pOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsdEF0dHIgfHwg
YXR0ci0+bmFtZSgpID09IGFjY2Vzc2tleUF0dHIpIHsKICAgICAgICAgLy8gRG8gbm90aGluZy4K
ICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVt
ZW50LmNwcAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZVNldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMiArNzUsMTIgQEAgdm9pZCBI
VE1MRnJhbWVTZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dAogewogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gcm93c0F0dHIpIHsKICAgICAgICAgaWYgKCFhdHRyLT5pc051bGwoKSkgewotICAgICAg
ICAgICAgbV9yb3dMZW5ndGhzLnNldChuZXdMZW5ndGhBcnJheShhdHRyLT52YWx1ZSgpLnN0cmlu
ZygpLCBtX3RvdGFsUm93cykpOworICAgICAgICAgICAgbV9yb3dMZW5ndGhzID0gbmV3TGVuZ3Ro
QXJyYXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgbV90b3RhbFJvd3MpOwogICAgICAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gY29sc0F0dHIpIHsKICAgICAgICAgaWYgKCFhdHRyLT5pc051bGwoKSkgewotICAg
ICAgICAgICAgbV9jb2xMZW5ndGhzLnNldChuZXdMZW5ndGhBcnJheShhdHRyLT52YWx1ZSgpLnN0
cmluZygpLCBtX3RvdGFsQ29scykpOworICAgICAgICAgICAgbV9jb2xMZW5ndGhzID0gbmV3TGVu
Z3RoQXJyYXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgbV90b3RhbENvbHMpOwogICAgICAgICAg
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gZnJhbWVib3JkZXJBdHRyKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDc2
MzkwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4OSw3ICsxNjg5LDcgQEAgYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkUwogICAgIEdDM0RpbnQgbnVtU2hhZGVycyA9IDA7CiAg
ICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGlj
c0NvbnRleHQzRDo6QVRUQUNIRURfU0hBREVSUywgJm51bVNoYWRlcnMpOwogICAgIGlmIChudW1T
aGFkZXJzKSB7Ci0gICAgICAgIE93bkFycmF5UHRyPFBsYXRmb3JtM0RPYmplY3Q+IHNoYWRlcnMo
bmV3IFBsYXRmb3JtM0RPYmplY3RbbnVtU2hhZGVyc10pOworICAgICAgICBPd25BcnJheVB0cjxQ
bGF0Zm9ybTNET2JqZWN0PiBzaGFkZXJzID0gYWRvcHRBcnJheVB0cihuZXcgUGxhdGZvcm0zRE9i
amVjdFtudW1TaGFkZXJzXSk7CiAgICAgICAgIEdDM0RzaXplaSBjb3VudCA9IDA7CiAgICAgICAg
IG1fY29udGV4dC0+Z2V0QXR0YWNoZWRTaGFkZXJzKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbnVt
U2hhZGVycywgJmNvdW50LCBzaGFkZXJzLmdldCgpKTsKICAgICAgICAgaWYgKGNvdW50ICE9IG51
bVNoYWRlcnMpCkBAIC00NTMzLDcgKzQ1MzMsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6c2ltdWxhdGVWZXJ0CiAgICAgICAgIHx8IHN0YXRlLnZhbHVlWzFdICE9IG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzFdCiAgICAgICAgIHx8IHN0YXRlLnZhbHVlWzJdICE9IG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzJdCiAgICAgICAgIHx8IHN0YXRlLnZhbHVlWzNdICE9IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdKSB7Ci0gICAgICAgIE93bkFycmF5UHRyPEdDM0RmbG9h
dD4gYnVmZmVyRGF0YShuZXcgR0MzRGZsb2F0WyhudW1WZXJ0ZXggKyAxKSAqIDRdKTsKKyAgICAg
ICAgT3duQXJyYXlQdHI8R0MzRGZsb2F0PiBidWZmZXJEYXRhID0gYWRvcHRBcnJheVB0cihuZXcg
R0MzRGZsb2F0WyhudW1WZXJ0ZXggKyAxKSAqIDRdKTsKICAgICAgICAgZm9yIChHQzNEc2l6ZWkg
aWkgPSAwOyBpaSA8IG51bVZlcnRleCArIDE7ICsraWkpIHsKICAgICAgICAgICAgIGJ1ZmZlckRh
dGFbaWkgKiA0XSA9IHN0YXRlLnZhbHVlWzBdOwogICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAq
IDQgKyAxXSA9IHN0YXRlLnZhbHVlWzFdOwpAQCAtNDU4OCw3ICs0NTg4LDcgQEAgV2ViR0xFeHRl
bnNpb24qIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZwogfQogCiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5
KQotICAgIDogbV9idWZmZXJzKG5ldyBPd25QdHI8SW1hZ2VCdWZmZXI+W2NhcGFjaXR5XSkKKyAg
ICA6IG1fYnVmZmVycyhhZG9wdEFycmF5UHRyKG5ldyBPd25QdHI8SW1hZ2VCdWZmZXI+W2NhcGFj
aXR5XSkpCiAgICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5KQogewogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9MZW5ndGguY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdURjsK
QEAgLTgzLDcgKzg0LDcgQEAgc3RhdGljIGludCBjb3VudENoYXJhY3Rlcihjb25zdCBVQ2hhciog
ZAogICAgIHJldHVybiBjb3VudDsKIH0KIAotTGVuZ3RoKiBuZXdDb29yZHNBcnJheShjb25zdCBT
dHJpbmcmIHN0cmluZywgaW50JiBsZW4pCitQYXNzT3duQXJyYXlQdHI8TGVuZ3RoPiBuZXdDb29y
ZHNBcnJheShjb25zdCBTdHJpbmcmIHN0cmluZywgaW50JiBsZW4pCiB7CiAgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogICAgIGNvbnN0IFVDaGFyKiBkYXRhID0gc3RyaW5n
LmNoYXJhY3RlcnMoKTsKQEAgLTEwMCw3ICsxMDEsNyBAQCBMZW5ndGgqIG5ld0Nvb3Jkc0FycmF5
KGNvbnN0IFN0cmluZyYgc3RyCiAgICAgc3RyID0gc3RyLT5zaW1wbGlmeVdoaXRlU3BhY2UoKTsK
IAogICAgIGxlbiA9IGNvdW50Q2hhcmFjdGVyKHN0ci0+Y2hhcmFjdGVycygpLCBzdHItPmxlbmd0
aCgpLCAnICcpICsgMTsKLSAgICBMZW5ndGgqIHIgPSBuZXcgTGVuZ3RoW2xlbl07CisgICAgT3du
QXJyYXlQdHI8TGVuZ3RoPiByID0gYWRvcHRBcnJheVB0cihuZXcgTGVuZ3RoW2xlbl0pOwogCiAg
ICAgaW50IGkgPSAwOwogICAgIHVuc2lnbmVkIHBvcyA9IDA7CkBAIC0xMTQsMTAgKzExNSwxMCBA
QCBMZW5ndGgqIG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYgc3RyCiAKICAgICBBU1NFUlQo
aSA9PSBsZW4gLSAxKTsKIAotICAgIHJldHVybiByOworICAgIHJldHVybiByLnJlbGVhc2UoKTsK
IH0KIAotTGVuZ3RoKiBuZXdMZW5ndGhBcnJheShjb25zdCBTdHJpbmcmIHN0cmluZywgaW50JiBs
ZW4pCitQYXNzT3duQXJyYXlQdHI8TGVuZ3RoPiBuZXdMZW5ndGhBcnJheShjb25zdCBTdHJpbmcm
IHN0cmluZywgaW50JiBsZW4pCiB7CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHN0ciA9IHN0cmlu
Zy5pbXBsKCktPnNpbXBsaWZ5V2hpdGVTcGFjZSgpOwogICAgIGlmICghc3RyLT5sZW5ndGgoKSkg
ewpAQCAtMTI2LDcgKzEyNyw3IEBAIExlbmd0aCogbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3RyaW5n
JiBzdHIKICAgICB9CiAKICAgICBsZW4gPSBjb3VudENoYXJhY3RlcihzdHItPmNoYXJhY3RlcnMo
KSwgc3RyLT5sZW5ndGgoKSwgJywnKSArIDE7Ci0gICAgTGVuZ3RoKiByID0gbmV3IExlbmd0aFts
ZW5dOworICAgIE93bkFycmF5UHRyPExlbmd0aD4gciA9IGFkb3B0QXJyYXlQdHIobmV3IExlbmd0
aFtsZW5dKTsKIAogICAgIGludCBpID0gMDsKICAgICB1bnNpZ25lZCBwb3MgPSAwOwpAQCAtMTQ1
LDcgKzE0Niw3IEBAIExlbmd0aCogbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3RyaW5nJiBzdHIKICAg
ICBlbHNlCiAgICAgICAgIGxlbi0tOwogCi0gICAgcmV0dXJuIHI7CisgICAgcmV0dXJuIHIucmVs
ZWFzZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9MZW5ndGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9MZW5ndGguaAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
ZW5ndGguaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPHd0Zi9G
YXN0QWxsb2NCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0xOTMsOCArMTk0LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV92
YWx1ZTsKIH07CiAKLUxlbmd0aCogbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiwgaW50JiBs
ZW4pOwotTGVuZ3RoKiBuZXdMZW5ndGhBcnJheShjb25zdCBTdHJpbmcmLCBpbnQmIGxlbik7CitQ
YXNzT3duQXJyYXlQdHI8TGVuZ3RoPiBuZXdDb29yZHNBcnJheShjb25zdCBTdHJpbmcmLCBpbnQm
IGxlbik7CitQYXNzT3duQXJyYXlQdHI8TGVuZ3RoPiBuZXdMZW5ndGhBcnJheShjb25zdCBTdHJp
bmcmLCBpbnQmIGxlbik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdl
LmNwcAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9BTkdMRVdlYktpdEJyaWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAg
Ym9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJTbwogICAgICAgICBpbnQgbG9n
U2l6ZSA9IDA7CiAgICAgICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RI
LCAmbG9nU2l6ZSk7CiAgICAgICAgIGlmIChsb2dTaXplID4gMSkgewotICAgICAgICAgICAgT3du
QXJyYXlQdHI8Y2hhcj4gbG9nQnVmZmVyKG5ldyBjaGFyW2xvZ1NpemVdKTsKKyAgICAgICAgICAg
IE93bkFycmF5UHRyPGNoYXI+IGxvZ0J1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbbG9n
U2l6ZV0pOwogICAgICAgICAgICAgaWYgKGxvZ0J1ZmZlcikgewogICAgICAgICAgICAgICAgIFNo
R2V0SW5mb0xvZyhjb21waWxlciwgbG9nQnVmZmVyLmdldCgpKTsKICAgICAgICAgICAgICAgICBz
aGFkZXJWYWxpZGF0aW9uTG9nID0gbG9nQnVmZmVyLmdldCgpOwpAQCAtMTA1LDcgKzEwNSw3IEBA
IGJvb2wgQU5HTEVXZWJLaXRCcmlkZ2U6OnZhbGlkYXRlU2hhZGVyU28KICAgICBpbnQgdHJhbnNs
YXRpb25MZW5ndGggPSAwOwogICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfT0JKRUNUX0NPREVf
TEVOR1RILCAmdHJhbnNsYXRpb25MZW5ndGgpOwogICAgIGlmICh0cmFuc2xhdGlvbkxlbmd0aCA+
IDEpIHsKLSAgICAgICAgT3duQXJyYXlQdHI8Y2hhcj4gdHJhbnNsYXRpb25CdWZmZXIobmV3IGNo
YXJbdHJhbnNsYXRpb25MZW5ndGhdKTsKKyAgICAgICAgT3duQXJyYXlQdHI8Y2hhcj4gdHJhbnNs
YXRpb25CdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW3RyYW5zbGF0aW9uTGVuZ3RoXSk7
CiAgICAgICAgIGlmICghdHJhbnNsYXRpb25CdWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIFNoR2V0T2JqZWN0Q29kZShjb21waWxlciwgdHJhbnNsYXRpb25CdWZmZXIu
Z2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NB
Q0ZMYXllclRyZWVIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCShyZXZpc2lvbiA3NjM5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVl
SG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgdm9pZCBn
ZXREaXJ0eVJlY3RzKEhXTkQgd2luZG93LCBWCiAgICAgfQogCiAgICAgRFdPUkQgZGF0YVNpemUg
PSBHZXRSZWdpb25EYXRhKHJlZ2lvbi5nZXQoKSwgMCwgMCk7Ci0gICAgT3duQXJyYXlQdHI8dW5z
aWduZWQgY2hhcj4gcmVnaW9uRGF0YUJ1ZmZlcihuZXcgdW5zaWduZWQgY2hhcltkYXRhU2l6ZV0p
OworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHJlZ2lvbkRhdGFCdWZmZXIgPSBhZG9w
dEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW2RhdGFTaXplXSk7CiAgICAgUkdOREFUQSogcmVn
aW9uRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UkdOREFUQSo+KHJlZ2lvbkRhdGFCdWZmZXIuZ2V0
KCkpOwogICAgIGlmICghR2V0UmVnaW9uRGF0YShyZWdpb24uZ2V0KCksIGRhdGFTaXplLCByZWdp
b25EYXRhKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckxpbnV4LmNwcAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw3ICszNjksNyBAQCBjb25zdCBUZXh0UnVuJiBDb21w
bGV4VGV4dENvbnRyb2xsZXI6OmdlCiAgICAgICAgIHNvdXJjZVRleHQgPSBub3JtYWxpemVkU3Ry
aW5nLmdldEJ1ZmZlcigpOwogICAgIH0KIAotICAgIG5vcm1hbGl6ZWRCdWZmZXIuc2V0KG5ldyBV
Q2hhcltub3JtYWxpemVkQnVmZmVyTGVuZ3RoICsgMV0pOworICAgIG5vcm1hbGl6ZWRCdWZmZXIg
PSBhZG9wdEFycmF5UHRyKG5ldyBVQ2hhcltub3JtYWxpemVkQnVmZmVyTGVuZ3RoICsgMV0pOwog
CiAgICAgbm9ybWFsaXplU3BhY2VzQW5kTWlycm9yQ2hhcnMoc291cmNlVGV4dCwgb3JpZ2luYWxS
dW4ucnRsKCksIG5vcm1hbGl6ZWRCdWZmZXIuZ2V0KCksIG5vcm1hbGl6ZWRCdWZmZXJMZW5ndGgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJm
YnV6elNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAJKHJldmlzaW9uIDc2MzkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBzdGF0aWMgdm9pZCBnbHlwaHNUb0FkdmFuY2Vz
KEhCX0ZvbnQgaGJGCiAgICAgZm9udC0+c2V0dXBQYWludCgmcGFpbnQpOwogICAgIHBhaW50LnNl
dFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwogCi0gICAgT3du
QXJyYXlQdHI8dWludDE2X3Q+IGdseXBoczE2KG5ldyB1aW50MTZfdFtudW1HbHlwaHNdKTsKKyAg
ICBPd25BcnJheVB0cjx1aW50MTZfdD4gZ2x5cGhzMTYgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50
MTZfdFtudW1HbHlwaHNdKTsKICAgICBpZiAoIWdseXBoczE2LmdldCgpKQogICAgICAgICByZXR1
cm47CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKQpAQCAtMTIw
LDcgKzEyMCw3IEBAIHN0YXRpYyBIQl9Cb29sIGNhblJlbmRlcihIQl9Gb250IGhiRm9udCwKICAg
ICBmb250LT5zZXR1cFBhaW50KCZwYWludCk7CiAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNr
UGFpbnQ6OmtVVEYxNl9UZXh0RW5jb2RpbmcpOwogCi0gICAgT3duQXJyYXlQdHI8dWludDE2X3Q+
IGdseXBoczE2KG5ldyB1aW50MTZfdFtsZW5ndGhdKTsKKyAgICBPd25BcnJheVB0cjx1aW50MTZf
dD4gZ2x5cGhzMTYgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50MTZfdFtsZW5ndGhdKTsKICAgICBp
ZiAoIWdseXBoczE2LmdldCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpbnQgbnVtR2x5cGhz
ID0gcGFpbnQudGV4dFRvR2x5cGhzKGNoYXJhY3RlcnMsIGxlbmd0aCAqIHNpemVvZih1aW50MTZf
dCksIGdseXBoczE2LmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAJKHJldmlzaW9uIDc2MzkwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjYsNyArMTY2LDcgQEAgdm9pZCBUZXh0dXJlOjp1cGRhdGVTdWJSZWN0KHZvaWQqIHBpeGVs
cwogICAgIGludCB0ZW1wQnVmZlNpemUgPSAvLyBUZW1wb3JhcnkgYnVmZmVyIHNpemUgaXMgdGhl
IHNtYWxsZXIgb2YgdGhlIG1heCB0ZXh0dXJlIHNpemUgb3IgdGhlIHVwZGF0ZVJlY3RTYW5pdGl6
ZWQKICAgICAgICAgbWluKG1fdGlsZXMubWF4VGV4dHVyZVNpemUoKSwgbV90aWxlcy5ib3JkZXJU
ZXhlbHMoKSArIHVwZGF0ZVJlY3RTYW5pdGl6ZWQud2lkdGgoKSkgKgogICAgICAgICBtaW4obV90
aWxlcy5tYXhUZXh0dXJlU2l6ZSgpLCBtX3RpbGVzLmJvcmRlclRleGVscygpICsgdXBkYXRlUmVj
dFNhbml0aXplZC5oZWlnaHQoKSk7Ci0gICAgT3duQXJyYXlQdHI8dWludDMyX3Q+IHRlbXBCdWZm
KG5ldyB1aW50MzJfdFt0ZW1wQnVmZlNpemVdKTsKKyAgICBPd25BcnJheVB0cjx1aW50MzJfdD4g
dGVtcEJ1ZmYgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50MzJfdFt0ZW1wQnVmZlNpemVdKTsKIAog
ICAgIGZvciAoaW50IHRpbGUgPSAwOyB0aWxlIDwgbV90aWxlcy5udW1UaWxlcygpOyB0aWxlKysp
IHsKICAgICAgICAgLy8gSW50ZXJzZWN0IHdpdGggdGlsZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwCShyZXZpc2lvbiA3NjM5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFp
bnRSZW5kZXJpbmdSZQogICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICogNDsKICAg
ICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0OwogCi0gICAgT3du
QXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzKG5ldyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0
ZXNdKTsKKyAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBwaXhlbHMgPSBhZG9wdEFycmF5
UHRyKG5ldyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0ZXNdKTsKICAgICBpZiAoIXBpeGVscykKICAg
ICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9u
IDc2MzkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9y
bUNvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODY1LDcgKzg2NSw3IEBAIHZvaWQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZGJhY2tIYXJkd2EKICAgICBjb25zdCBTa0JpdG1hcCYg
Yml0bWFwID0gbV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAodHJ1ZSk7CiAgICAg
U2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7CiAgICAgaW50IHdpZHRoID0gYml0bWFwLndp
ZHRoKCksIGhlaWdodCA9IGJpdG1hcC5oZWlnaHQoKTsKLSAgICBPd25BcnJheVB0cjx1aW50MzJf
dD4gYnVmKG5ldyB1aW50MzJfdFt3aWR0aF0pOworICAgIE93bkFycmF5UHRyPHVpbnQzMl90PiBi
dWYgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50MzJfdFt3aWR0aF0pOwogICAgIFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9ncHVDYW52YXMtPmNvbnRleHQoKTsKICAgICBtX2dw
dUNhbnZhcy0+YmluZEZyYW1lYnVmZmVyKCk7CiAgICAgLy8gRmxpcHMgdGhlIGltYWdlIHZlcnRp
Y2FsbHkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFy
ZWRCaXRtYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5jcHAJKHJldmlzaW9uIDc2MzkwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBAIGJvb2wgU2hhcmVkQml0bWFwOjp0bzE2Yml0KCkKICAg
ICBpbnQgd2lkdGggPSBuZXdCbXBJbmZvLndpZHRoKCk7CiAgICAgaW50IHBhZGRlZFdpZHRoID0g
bmV3Qm1wSW5mby5wYWRkZWRXaWR0aCgpOwogICAgIGludCBidWZmZXJTaXplID0gcGFkZGVkV2lk
dGggKiBuZXdCbXBJbmZvLmhlaWdodCgpOwotICAgIE93bkFycmF5UHRyPHVuc2lnbmVkPiBuZXdQ
aXhlbERhdGEobmV3IHVuc2lnbmVkW2J1ZmZlclNpemUgLyAyXSk7CisgICAgT3duQXJyYXlQdHI8
dW5zaWduZWQ+IG5ld1BpeGVsRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkW2J1ZmZl
clNpemUgLyAyXSk7CiAgICAgdm9pZCogbmV3UGl4ZWxzID0gbmV3UGl4ZWxEYXRhLmdldCgpOwog
CiAgICAgaWYgKCFuZXdQaXhlbHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q29udGV4dE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9Db250ZXh0TWVudVdpbi5jcHAJKHJldmlzaW9uIDc2MzkwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMs
NyArNzMsNyBAQCB2b2lkIENvbnRleHRNZW51OjpnZXRDb250ZXh0TWVudUl0ZW1zKEhNCiAgICAg
ICAgIH0KIAogICAgICAgICBpbnQgbWVudVN0cmluZ0xlbmd0aCA9IGluZm8uY2NoICsgMTsKLSAg
ICAgICAgT3duQXJyYXlQdHI8V0NIQVI+IG1lbnVTdHJpbmcobmV3IFdDSEFSW21lbnVTdHJpbmdM
ZW5ndGhdKTsKKyAgICAgICAgT3duQXJyYXlQdHI8V0NIQVI+IG1lbnVTdHJpbmcgPSBhZG9wdEFy
cmF5UHRyKG5ldyBXQ0hBUlttZW51U3RyaW5nTGVuZ3RoXSk7CiAgICAgICAgIGluZm8uZHdUeXBl
RGF0YSA9IG1lbnVTdHJpbmcuZ2V0KCk7CiAgICAgICAgIGluZm8uY2NoID0gbWVudVN0cmluZ0xl
bmd0aDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNw
cAkocmV2aXNpb24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vTG9nZ2lu
Z1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgc3RhdGljIGlubGluZSB2
b2lkIGluaXRpYWxpemVXaXRoVXNlckRlZgogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1
cm47CiAKLSAgICBPd25BcnJheVB0cjxjaGFyPiBidWZmZXIobmV3IGNoYXJbbGVuZ3RoXSk7Cisg
ICAgT3duQXJyYXlQdHI8Y2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltsZW5n
dGhdKTsKIAogICAgIGlmICghR2V0RW52aXJvbm1lbnRWYXJpYWJsZUEoY2hhbm5lbC5kZWZhdWx0
TmFtZSwgYnVmZmVyLmdldCgpLCBsZW5ndGgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAkocmV2aXNp
b24gNzYzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIGJvb2wgUGx1Z2luUGFja2Fn
ZTo6ZmV0Y2hJbmZvKCkKICAgICBpZiAodmVyc2lvbkluZm9TaXplID09IDApCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIE93bkFycmF5UHRyPGNoYXI+IHZlcnNpb25JbmZvRGF0YShuZXcg
Y2hhclt2ZXJzaW9uSW5mb1NpemVdKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiB2ZXJzaW9uSW5m
b0RhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW3ZlcnNpb25JbmZvU2l6ZV0pOwogCiAgICAg
aWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX3BhdGguY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSksCiAgICAgICAgICAgICAwLCB2ZXJzaW9uSW5mb1Np
emUsIHZlcnNpb25JbmZvRGF0YS5nZXQoKSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lv
biA3NjQzNikKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDExLTAxLTIyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE93
bkFycmFyeVB0ci5oIHVzZXMgZGVsZXRlT3duZWRQdHIgYnV0IGRvZXNu4oCZdCBpbmNsdWRlIE93
blB0ckNvbW1vbi5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01Mjg2NworCisgICAgICAgIFJlcGxhY2VkIGFsbCBjYWxscyB0byBPd25BcnJheVB0cjo6
c2V0IGFuZCBsb29zZSBpbnN0YW50aWF0aW9uIG9mIE93bkFycmF5UHRyIGJ5CisgICAgICAgIGNh
bGxzIHRvIG9wZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ci4KKworICAgICAgICAqIFdlYkhpc3Rv
cnkuY3BwOgorICAgICAgICAoV2ViSGlzdG9yeTo6b3JkZXJlZExhc3RWaXNpdGVkRGF5cyk6Cisg
ICAgICAgICogV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OmNv
cHlXZWJLaXRQcmVmZXJlbmNlc1RvQ0ZQcmVmZXJlbmNlcyk6CisKIDIwMTEtMDEtMjEgIENocmlz
IFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBGaXNoZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcAkocmV2aXNpb24gNzYzOTAp
CisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDc2LDcgKzQ3Niw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSGlzdG9yeTo6b3IK
IAogICAgICpjb3VudCA9IGRhdGVDb3VudDsKICAgICBpZiAoIW1fb3JkZXJlZExhc3RWaXNpdGVk
RGF5cykgewotICAgICAgICBtX29yZGVyZWRMYXN0VmlzaXRlZERheXMuc2V0KG5ldyBEQVRFW2Rh
dGVDb3VudF0pOworICAgICAgICBtX29yZGVyZWRMYXN0VmlzaXRlZERheXMgPSBhZG9wdEFycmF5
UHRyKG5ldyBEQVRFW2RhdGVDb3VudF0pOwogICAgICAgICBEYXRlVG9FbnRyaWVzTWFwOjpjb25z
dF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBtX2VudHJpZXNCeURhdGUuZW5kKCkua2V5cygpOwogICAg
ICAgICBpbnQgaSA9IDA7CiAgICAgICAgIGZvciAoRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRl
cmF0b3I6OktleXMgaXQgPSBtX2VudHJpZXNCeURhdGUuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVu
ZDsgKytpdCwgKytpKQpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViUHJlZmVyZW5jZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmNwcAkocmV2
aXNpb24gNzYzOTApCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2Myw4ICs0NjMsOCBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjpjb3B5
V2ViS2l0UHJlZmVyZW5jCiAgICAgQ0ZTdHJpbmdSZWYgZGlkUmVtb3ZlRGVmYXVsdHNLZXkgPSBD
RlNUUihXZWJLaXREaWRNaWdyYXRlRGVmYXVsdFNldHRpbmdzRnJvbVNhZmFyaTNCZXRhUHJlZmVy
ZW5jZUtleSk7CiAgICAgYm9vbCBvbWl0RGVmYXVsdHMgPSAhYm9vbGVhblZhbHVlRm9yUHJlZmVy
ZW5jZXNWYWx1ZShDRkRpY3Rpb25hcnlHZXRWYWx1ZShkaWN0LCBkaWRSZW1vdmVEZWZhdWx0c0tl
eSkpOwogCi0gICAgT3duQXJyYXlQdHI8Q0ZUeXBlUmVmPiBrZXlzKG5ldyBDRlR5cGVSZWZbY291
bnRdKTsKLSAgICBPd25BcnJheVB0cjxDRlR5cGVSZWY+IHZhbHVlcyhuZXcgQ0ZUeXBlUmVmW2Nv
dW50XSk7CisgICAgT3duQXJyYXlQdHI8Q0ZUeXBlUmVmPiBrZXlzID0gYWRvcHRBcnJheVB0cihu
ZXcgQ0ZUeXBlUmVmW2NvdW50XSk7CisgICAgT3duQXJyYXlQdHI8Q0ZUeXBlUmVmPiB2YWx1ZXMg
PSBhZG9wdEFycmF5UHRyKG5ldyBDRlR5cGVSZWZbY291bnRdKTsKICAgICBDRkRpY3Rpb25hcnlH
ZXRLZXlzQW5kVmFsdWVzKGRpY3QsIGtleXMuZ2V0KCksIHZhbHVlcy5nZXQoKSk7CiAKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79854</attachid>
            <date>2011-01-22 12:47:47 -0800</date>
            <delta_ts>2011-01-22 17:09:57 -0800</delta_ts>
            <desc>yet another attempt</desc>
            <filename>bug-52867-20110122124745.patch</filename>
            <type>text/plain</type>
            <size>46007</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAK
KzIwMTEtMDEtMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmggdXNl
cyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisKKyAg
ICAgICAgUmVtb3ZlZCBMT09TRV9PV05fQVJSQVlfUFRSIGFuZCBPd25BcnJheVB0cjxUPjo6c2V0
LgorCisgICAgICAgIFJlcGxhY2VkIGFsbCBjYWxscyB0byBPd25BcnJheVB0cjo6c2V0IGFuZCBs
b29zZSBpbnN0YW50aWF0aW9uIG9mIE93bkFycmF5UHRyIGJ5CisgICAgICAgIGNhbGxzIHRvIG9w
ZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ci4KKworICAgICAgICAqIEFQSS9KU1N0cmluZ1JlZkNG
LmNwcDoKKyAgICAgICAgKEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKTogQ2FsbHMgb3BlcmF0
b3I9IGFuZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOiBSZW1vdmVkIE93bkFycmF5UHRyQ29tbW9uLmgKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHd0Zi9DTWFr
ZUxpc3RzLnR4dDogRGl0dG8uCisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KTogQ2FsbHMgb3BlcmF0b3I9IGFu
ZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1l
bnRzLmg6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6Y29weVJlZ2lzdGVycyk6IENhbGxzIGFk
b3B0QXJyYXlQdHIuCisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcik6IENhbGxzIG9wZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ciBpbnN0ZWFkIG9mIHNl
dC4KKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNWYXJpYWJsZU9iamVjdDo6c2V0UmVnaXN0ZXJzKTogQ2FsbHMgb3BlcmF0b3I9LgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVD
aGFpbjo6U3RydWN0dXJlQ2hhaW4pOiBDYWxscyBvcGVyYXRvcj0gYW5kIGFkb3B0QXJyYXlQdHIg
aW5zdGVhZCBvZiBzZXQuCisgICAgICAgICogd3RmL0RhdGVNYXRoLmg6CisgICAgICAgIChKU0M6
OkdyZWdvcmlhbkRhdGVUaW1lOjpHcmVnb3JpYW5EYXRlVGltZSk6CisgICAgICAgICogd3RmL093
bkFycmF5UHRyLmg6IEluY2x1ZGUgUGFzc093bkFycmF5UHRyLmggaW5zdGVhZCBvZiBPd25BcnJh
eVB0ckNvbW1vbi5oOyByZW1vdmVkIExPT1NFX09XTl9BUlJBWV9QVFIKKyAgICAgICAgYW5kIE93
bkFycmF5UHRyPFQ+OjpzZXQuCisgICAgICAgICogd3RmL093bkFycmF5UHRyQ29tbW9uLmg6IFJl
bW92ZWQuCisgICAgICAgICogd3RmL1Bhc3NPd25BcnJheVB0ci5oOiBObyBsb25nZXIgaW5jbHVk
ZXMgT3duQXJyYXlQdHJDb21tb24uaAorICAgICAgICAoV1RGOjpkZWxldGVPd25lZEFycmF5UHRy
KTogTW92ZWQgZnJvbSBPd25BcnJheVB0ckNvbW1vbi5oLgorCiAyMDExLTAxLTIyICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZy
ZXkgR2FyZW4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lv
biA3NjQ1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDg2LDcgKzQ4Niw2IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT1NBbGxvY2F0b3IuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L093bkZhc3RNYWxsb2NQdHIuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJh
eVB0ckNvbW1vbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093blB0ckNvbW1vbi5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093blB0ci5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1N0cmluZ1JlZkNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTU3RyaW5nUmVmQ0YuY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAgSlNTdHJpbmdSZWYgSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQwogICAg
IC8vIGl0IGNhbiBob2xkLiAgKDxyZGFyOi8vcHJvYmxlbS82ODA2NDc4PikKICAgICBzaXplX3Qg
bGVuZ3RoID0gQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKICAgICBpZiAobGVuZ3RoKSB7Ci0g
ICAgICAgIE93bkFycmF5UHRyPFVuaUNoYXI+IGJ1ZmZlcihuZXcgVW5pQ2hhcltsZW5ndGhdKTsK
KyAgICAgICAgT3duQXJyYXlQdHI8VW5pQ2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcg
VW5pQ2hhcltsZW5ndGhdKTsKICAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHN0cmluZywg
Q0ZSYW5nZU1ha2UoMCwgbGVuZ3RoKSwgYnVmZmVyLmdldCgpKTsKICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFVuaUNoYXIpID09IHNpemVvZihVQ2hhciksIHVuaWNoYXJfYW5kX3VjaGFy
X211c3RfYmVfc2FtZV9zaXplKTsKICAgICAgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjpjcmVh
dGUocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGJ1ZmZlci5nZXQoKSksIGxlbmd0aCkubGVha1Jl
ZigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9X
VEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHdv
cmtpbmcgY29weSkKQEAgLTc0OSwxMCArNzQ5LDYgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8Rmls
ZQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcT3duQXJyYXlQdHJDb21tb24uaCIKLQkJCT4K
LQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcT3duRmFzdE1h
bGxvY1B0ci5oIgogCQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQ4LDcg
KzU0OCw2IEBACiAJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERTNBQjAwRTZD
ODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi87IH07CiAJCUJDRjYwNTE0MEUyMDNFRjgw
MEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkJFNjk2MTIyNTYw
RTgwMDMwOUU5RCAvKiBQYXNzT3duQXJyYXlQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkJFNjk1MTIyNTYwRTgwMDMwOUU5RCAvKiBQYXNzT3du
QXJyYXlQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlCQ0ZCRTY5ODEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21tb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkJFNjk3MTIyNTYx
RDIwMDMwOUU5RCAvKiBPd25BcnJheVB0ckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBK
dW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi87IH07CiAJCUJD
RkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBK
dW1wVGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMwRTUwQTA2MzAwRTk2RTE1IC8qIE5vdEZvdW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMEEyNzIz
RjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE1MCw3ICsxMTQ5LDYgQEAKIAkJQkNGNjA1MTIw
RTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQXJnTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y2NTUzQjBB
MjA0OERFMDAzOEExOTQgLyogTWF0aEV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWF0aEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZC
RTY5NTEyMjU2MEU4MDAzMDlFOUQgLyogUGFzc093bkFycmF5UHRyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3NPd25BcnJheVB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCQ0ZCRTY5NzEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21tb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3duQXJyYXlQdHJDb21tb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8q
IEp1bXBUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKdW1w
VGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZEOEM5MTBFRUIyRUU3
MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEp1bXBUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMEEyNzIzRjBFNTA5
RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTm90Rm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjYsNyArMTU2
NCw2IEBACiAJCQkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8s
CiAJCQkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICov
LAogCQkJCTkzMDNGNUE0MDk5MTFBNTgwMEFENzFCOCAvKiBPd25BcnJheVB0ci5oICovLAotCQkJ
CUJDRkJFNjk3MTIyNTYxRDIwMDMwOUU5RCAvKiBPd25BcnJheVB0ckNvbW1vbi5oICovLAogCQkJ
CTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi8sCiAJCQkJ
OTMwM0Y1NjcwOTkxMThGQTAwQUQ3MUI4IC8qIE93blB0ci5oICovLAogCQkJCTQ0MEI3QUVEMEZB
RjdGQ0IwMDczMzIzRSAvKiBPd25QdHJDb21tb24uaCAqLywKQEAgLTIyOTEsNyArMjI4OCw2IEBA
CiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NDkwRTE2RjVDRDAwQjM0NDYwIC8qIE93bkFycmF5UHRyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlCQ0ZCRTY5ODEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQ
dHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVGNCAv
KiBPd25GYXN0TWFsbG9jUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0QTBFMTZGNUNE
MDBCMzQ0NjAgLyogT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDA5RDg0NzBGQUY4MEEy
MDA1MjNCODcgLyogT3duUHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkocmV2aXNpb24gNzY0NTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0ZQogewogICAgIGlmIChpIDwgZC0+bnVtQXJndW1lbnRzKSB7CiAgICAgICAgIGlmICgh
ZC0+ZGVsZXRlZEFyZ3VtZW50cykgewotICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50cy5z
ZXQobmV3IGJvb2xbZC0+bnVtQXJndW1lbnRzXSk7CisgICAgICAgICAgICBkLT5kZWxldGVkQXJn
dW1lbnRzID0gYWRvcHRBcnJheVB0cihuZXcgYm9vbFtkLT5udW1Bcmd1bWVudHNdKTsKICAgICAg
ICAgICAgIG1lbXNldChkLT5kZWxldGVkQXJndW1lbnRzLmdldCgpLCAwLCBzaXplb2YoYm9vbCkg
KiBkLT5udW1Bcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgIGlmICghZC0+ZGVsZXRlZEFy
Z3VtZW50c1tpXSkgewpAQCAtMzIxLDcgKzMyMSw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWxldGVQ
cm9wZXJ0eShFeGVjU3RhdGUKICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLnRvQXJyYXlJ
bmRleChpc0FycmF5SW5kZXgpOwogICAgIGlmIChpc0FycmF5SW5kZXggJiYgaSA8IGQtPm51bUFy
Z3VtZW50cykgewogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHMpIHsKLSAgICAgICAg
ICAgIGQtPmRlbGV0ZWRBcmd1bWVudHMuc2V0KG5ldyBib29sW2QtPm51bUFyZ3VtZW50c10pOwor
ICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50cyA9IGFkb3B0QXJyYXlQdHIobmV3IGJvb2xb
ZC0+bnVtQXJndW1lbnRzXSk7CiAgICAgICAgICAgICBtZW1zZXQoZC0+ZGVsZXRlZEFyZ3VtZW50
cy5nZXQoKSwgMCwgc2l6ZW9mKGJvb2wpICogZC0+bnVtQXJndW1lbnRzKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzAsNyArMjMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXIqIHJlZ2lz
dGVyQXJyYXkgPSBuZXcgUmVnaXN0ZXJbcmVnaXN0ZXJBcnJheVNpemVdOwogICAgICAgICBtZW1j
cHkocmVnaXN0ZXJBcnJheSwgZC0+cmVnaXN0ZXJzIC0gcmVnaXN0ZXJPZmZzZXQsIHJlZ2lzdGVy
QXJyYXlTaXplICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGQtPnJlZ2lzdGVyQXJyYXku
c2V0KHJlZ2lzdGVyQXJyYXkpOworICAgICAgICBkLT5yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJB
cnJheTsKICAgICAgICAgZC0+cmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVyT2Zm
c2V0OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDc2NDU0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3I6OkpTUHJvcGVydAogICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmUoMCkKICAgICAsIG1fbnVt
Q2FjaGVhYmxlU2xvdHMobnVtQ2FjaGVhYmxlU2xvdHMpCiAgICAgLCBtX2pzU3RyaW5nc1NpemUo
cHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCkpCi0gICAg
LCBtX2pzU3RyaW5ncyhuZXcgSlNWYWx1ZVttX2pzU3RyaW5nc1NpemVdKQorICAgICwgbV9qc1N0
cmluZ3MoYWRvcHRBcnJheVB0cihuZXcgSlNWYWx1ZVttX2pzU3RyaW5nc1NpemVdKSkKIHsKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3RvciYgcHJvcGVydHlOYW1l
VmVjdG9yID0gcHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fanNTdHJpbmdzU2l6ZTsgKytpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAkocmV2
aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxl
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBpbmxpbmUgdm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpzZXRSZWdpc3RlcnMoUmVnaXN0
ZXIqIHJlZ2lzdGVycywgUmVnaXN0ZXIqIHJlZ2lzdGVyQXJyYXkpCiAgICAgewogICAgICAgICBB
U1NFUlQocmVnaXN0ZXJBcnJheSAhPSBkLT5yZWdpc3RlckFycmF5LmdldCgpKTsKLSAgICAgICAg
ZC0+cmVnaXN0ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSk7CisgICAgICAgIGQtPnJlZ2lzdGVy
QXJyYXkgPSByZWdpc3RlckFycmF5OwogICAgICAgICBkLT5yZWdpc3RlcnMgPSByZWdpc3RlcnM7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVD
aGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBTdHJ1Y3R1cmVDaGFpbjo6U3RydWN0dXJlQ2hhaW4oU3RydWN0dXJlCiAgICAgZm9yIChT
dHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3Rv
cmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDogYXNPYmplY3QoY3VycmVudC0+c3RvcmVkUHJv
dG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKICAgICAgICAgKytzaXplOwogICAgIAotICAgIG1fdmVj
dG9yLnNldChuZXcgUmVmUHRyPFN0cnVjdHVyZT5bc2l6ZSArIDFdKTsKKyAgICBtX3ZlY3RvciA9
IGFkb3B0QXJyYXlQdHIobmV3IFJlZlB0cjxTdHJ1Y3R1cmU+W3NpemUgKyAxXSk7CiAKICAgICBz
aXplX3QgaSA9IDA7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDogYXNP
YmplY3QoY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzY0NTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC00Miw3ICs0Miw2IEBAIFNFVChXVEZfSEVBREVSUwogICAgIE51bGxQdHIuaAogICAgIE9T
QWxsb2NhdG9yLmgKICAgICBPd25BcnJheVB0ci5oCi0gICAgT3duQXJyYXlQdHJDb21tb24uaAog
ICAgIE93bkZhc3RNYWxsb2NQdHIuaAogICAgIE93blB0ci5oCiAgICAgT3duUHRyQ29tbW9uLmgK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmgJKHJldmlzaW9uIDc2NDU0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzUsNyArMTM1LDYgQEAgcHVibGljOgogICAgICAgICAsIHllYXIoMCkKICAgICAgICAgLCBp
c0RTVCgwKQogICAgICAgICAsIHV0Y09mZnNldCgwKQotICAgICAgICAsIHRpbWVab25lKDApCiAg
ICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQdHIu
aAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5
UHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCw5IEBACiAjaW5jbHVkZSAiQXNzZXJ0
aW9ucy5oIgogI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCiAjaW5jbHVkZSAiTnVsbFB0ci5oIgot
I2luY2x1ZGUgIk93blB0ckNvbW1vbi5oIgotI2luY2x1ZGUgIk93bkFycmF5UHRyQ29tbW9uLmgi
CisjaW5jbHVkZSAiUGFzc093bkFycmF5UHRyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCi0v
LyBSZW1vdmUgdGhpcyBvbmNlIHdlIG1ha2UgYWxsIFdlYktpdCBjb2RlIGNvbXBhdGlibGUgd2l0
aCBzdHJpY3RlciBydWxlcyBhYm91dCBPd25BcnJheVB0ci4KLSNkZWZpbmUgTE9PU0VfT1dOX0FS
UkFZX1BUUgotCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3Mg
UGFzc093bkFycmF5UHRyOwpAQCAtMTE1LDE2ICsxMTEsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgT3duCiAgICAgcmV0dXJuIHB0cjsKIH0KIAotI2lmZGVmIExPT1NF
X09XTl9BUlJBWV9QVFIKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIE93bkFycmF5
UHRyPFQ+OjpzZXQoUHRyVHlwZSBwdHIpCi17Ci0gICAgQVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0g
cHRyKTsKLSAgICBQdHJUeXBlIG9sZFB0ciA9IG1fcHRyOwotICAgIG1fcHRyID0gcHRyOwotICAg
IGRlbGV0ZU93bmVkUHRyKG9sZFB0cik7Ci19Ci0jZW5kaWYKLQogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIE93bkFycmF5UHRyPFQ+JiBPd25BcnJheVB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0
IFBhc3NPd25BcnJheVB0cjxUPiYgbykKIHsKICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQdHJDb21tb24uaAkocmV2
aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5UHRyQ29t
bW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgV1RGX093bkFycmF5UHRyQ29tbW9uX2gKLSNkZWZpbmUgV1RGX093bkFycmF5UHRyQ29tbW9u
X2gKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lk
IGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKQotewotICAgIHR5cGVkZWYgY2hhciBrbm93bltz
aXplb2YoVCkgPyAxIDogLTFdOwotICAgIGlmIChzaXplb2Yoa25vd24pKQotICAgICAgICBkZWxl
dGUgW10gcHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFdURl9Pd25B
cnJheVB0ckNvbW1vbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NPd25B
cnJheVB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc093
bkFycmF5UHRyLmgJKHJldmlzaW9uIDc2NDU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QYXNzT3duQXJyYXlQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAj
aW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgogI2luY2x1ZGUgIk51bGxQdHIuaCIKLSNpbmNsdWRlICJP
d25BcnJheVB0ckNvbW1vbi5oIgogI2luY2x1ZGUgIlR5cGVUcmFpdHMuaCIKIAogLy8gUmVtb3Zl
IHRoaXMgb25jZSB3ZSBtYWtlIGFsbCBXZWJLaXQgY29kZSBjb21wYXRpYmxlIHdpdGggc3RyaWN0
ZXIgcnVsZXMgYWJvdXQgUGFzc093bkFycmF5UHRyLgpAQCAtMzksNiArMzgsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIE93bkFycmF5UHRyOwogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093bkFycmF5UHRyOwogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gUGFzc093bkFycmF5UHRyPFQ+IGFkb3B0QXJyYXlQdHIoVCopOwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gdm9pZCBkZWxldGVPd25lZEFycmF5UHRyKFQqIHB0cik7CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNsYXNzIFBhc3NPd25BcnJheVB0ciB7CiBwdWJsaWM6CkBAIC0xOTQsNiArMTk0LDEz
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzT3duQXJyYXkKICAgICByZXR1cm4g
UGFzc093bkFycmF5UHRyPFQ+KHB0cik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB2b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKQoreworICAgIHR5cGVkZWYgY2hhciBr
bm93bltzaXplb2YoVCkgPyAxIDogLTFdOworICAgIGlmIChzaXplb2Yoa25vd24pKQorICAgICAg
ICBkZWxldGUgW10gcHRyOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgUGFzc093bkFycmF5UHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgUGFzc093
bkFycmF5UHRyPFU+JiBwKSAKIHsKICAgICByZXR1cm4gYWRvcHRBcnJheVB0cihzdGF0aWNfY2Fz
dDxUKj4ocC5sZWFrUHRyKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2aXNp
b24gNzY0NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDEtMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgT3duQXJyYXJ5UHRyLmggdXNlcyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1
ZGUgT3duUHRyQ29tbW9uLmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUyODY3CisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvT3duQXJy
YXlQdHJDb21tb24uaDogUmVtb3ZlZC4KKwogMjAxMS0wMS0xNyAgRGFuIEJlcm5zdGVpbiAgPG1p
dHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IE1hcmsgUm93ZS4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvT3duQXJyYXlQ
dHJDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL093bkFycmF5UHRyQ29tbW9uLmgJKHJldmlzaW9uIDc2NDU0KQorKysgU291
cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25BcnJheVB0ckNvbW1v
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9Pd25BcnJheVB0ckNvbW1vbi5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzY0NTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NSBA
QAorMjAxMS0wMS0yMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPd25BcnJhcnlQdHIuaCB1
c2VzIGRlbGV0ZU93bmVkUHRyIGJ1dCBkb2VzbuKAmXQgaW5jbHVkZSBPd25QdHJDb21tb24uaAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI4NjcKKwor
ICAgICAgICBSZXBsYWNlZCBhbGwgY2FsbHMgdG8gT3duQXJyYXlQdHI6OnNldCBhbmQgbG9vc2Ug
aW5zdGFudGlhdGlvbiBvZiBPd25BcnJheVB0ciBieQorICAgICAgICBjYWxscyB0byBvcGVyYXRv
cj0gYW5kIGFkb3B0QXJyYXlQdHIuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYv
T3duQXJyYXlQdHJDb21tb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9OUFY4
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50
QXJncyk6CisgICAgICAgIChfTlBOX0ludm9rZSk6CisgICAgICAgIChfTlBOX0ludm9rZURlZmF1
bHQpOgorICAgICAgICAoX05QTl9Db25zdHJ1Y3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Nj
cmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNh
bGw6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XaW5kb3dTaGVsbDo6Y3JlYXRlTmV3Q29udGV4dCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhOUE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpucE9iamVjdEludm9rZUltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUpOgorICAgICAgICAq
IGh0bWwvSFRNTEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lU2V0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVTZXRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5ld0Nvb3Jk
c0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6Om5ld0xlbmd0aEFycmF5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9MZW5ndGguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktp
dEJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRh
dGVTaGFkZXJTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNG
TGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREaXJ0eVJlY3RzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJM
aW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmdldE5v
cm1hbGl6ZWRUZXh0UnVuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9I
YXJmYnV6elNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2x5cGhzVG9BZHZhbmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpjYW5SZW5kZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dwdS9UZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OnVwZGF0ZVN1YlJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNv
bnRleHRTa2lhOjpyZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEJpdG1hcDo6dG8xNmJpdCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpnZXRDb250ZXh0TWVudUl0
ZW1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjppbml0aWFsaXplV2l0aFVzZXJEZWZhdWx0KToKKyAgICAgICAgKiBwbHVnaW5zL3dp
bi9QbHVnaW5QYWNrYWdlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmZldGNoSW5mbyk6CisKIDIwMTEtMDEtMjIgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25BcnJheVB0
ckNvbW1vbi5oCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzAs
MCBAQAotI2lmbmRlZiBXZWJDb3JlX0ZXRF9Pd25BcnJheVB0ckNvbW1vbl9oCi0jZGVmaW5lIFdl
YkNvcmVfRldEX093bkFycmF5UHRyQ29tbW9uX2gKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9P
d25BcnJheVB0ckNvbW1vbi5oPgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9OUFY4T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9OUFY4T2JqZWN0LmNwcAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTQgKzc4LDE0
IEBAIHN0YXRpYyB2b2lkIGZyZWVWOE5QT2JqZWN0KE5QT2JqZWN0KiBucE8KICAgICBmcmVlKHY4
TnBPYmplY3QpOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiBjcmVhdGVWYWx1
ZUxpc3RGcm9tVmFyaWFudEFyZ3MoY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90
IGFyZ3VtZW50Q291bnQsIE5QT2JqZWN0KiBvd25lcikKK3N0YXRpYyBQYXNzT3duQXJyYXlQdHI8
djg6OkhhbmRsZTx2ODo6VmFsdWU+Kj4gY3JlYXRlVmFsdWVMaXN0RnJvbVZhcmlhbnRBcmdzKGNv
bnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUE9iamVj
dCogb3duZXIpCiB7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiBhcmd2ID0gbmV3IHY4OjpI
YW5kbGU8djg6OlZhbHVlPlthcmd1bWVudENvdW50XTsKKyAgICBPd25BcnJheVB0cjx2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4qPiBhcmd2ID0gYWRvcHRBcnJheVB0cihuZXcgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+W2FyZ3VtZW50Q291bnRdKTsKICAgICBmb3IgKHVpbnQzMl90IGluZGV4ID0gMDsgaW5k
ZXggPCBhcmd1bWVudENvdW50OyBpbmRleCsrKSB7CiAgICAgICAgIGNvbnN0IE5QVmFyaWFudCog
YXJnID0gJmFyZ3VtZW50c1tpbmRleF07CiAgICAgICAgIGFyZ3ZbaW5kZXhdID0gY29udmVydE5Q
VmFyaWFudFRvVjhPYmplY3QoYXJnLCBvd25lcik7CiAgICAgfQotICAgIHJldHVybiBhcmd2Owor
ICAgIHJldHVybiBhcmd2LnJlbGVhc2UoKTsKIH0KIAogLy8gQ3JlYXRlIGFuIGlkZW50aWZpZXIg
KG51bGwgdGVybWluYXRlZCB1dGY4IGNoYXIqKSBmcm9tIHRoZSBOUElkZW50aWZpZXIuCkBAIC0x
ODgsNyArMTg4LDcgQEAgYm9vbCBfTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCogbnBPYgog
CiAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uPiBmdW5jdGlvbiA9IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChmdW5jdGlv
bk9iamVjdCk7Ci0gICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJndihj
cmVhdGVWYWx1ZUxpc3RGcm9tVmFyaWFudEFyZ3MoYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCBu
cE9iamVjdCkpOworICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3Yg
PSBjcmVhdGVWYWx1ZUxpc3RGcm9tVmFyaWFudEFyZ3MoYXJndW1lbnRzLCBhcmd1bWVudENvdW50
LCBucE9iamVjdCk7CiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0T2JqZWN0ID0gcHJv
eHktPmNhbGxGdW5jdGlvbihmdW5jdGlvbiwgdjhOcE9iamVjdC0+djhPYmplY3QsIGFyZ3VtZW50
Q291bnQsIGFyZ3YuZ2V0KCkpOwogCiAgICAgLy8gSWYgd2UgaGFkIGFuIGVycm9yLCByZXR1cm4g
ZmFsc2UuICBUaGUgc3BlYyBpcyBhIGxpdHRsZSB1bmNsZWFyIGhlcmUsIGJ1dCBzYXlzICJSZXR1
cm5zIHRydWUgaWYgdGhlIG1ldGhvZCB3YXMKQEAgLTIzNyw3ICsyMzcsNyBAQCBib29sIF9OUE5f
SW52b2tlRGVmYXVsdChOUFAgbnBwLCBOUE9iamVjCiAgICAgICAgIFY4UHJveHkqIHByb3h5ID0g
dG9WOFByb3h5KG5wT2JqZWN0KTsKICAgICAgICAgQVNTRVJUKHByb3h5KTsKIAotICAgICAgICBP
d25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmd2KGNyZWF0ZVZhbHVlTGlzdEZy
b21WYXJpYW50QXJncyhhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIG5wT2JqZWN0KSk7CisgICAg
ICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3YgPSBjcmVhdGVWYWx1
ZUxpc3RGcm9tVmFyaWFudEFyZ3MoYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCBucE9iamVjdCk7
CiAgICAgICAgIHJlc3VsdE9iamVjdCA9IHByb3h5LT5jYWxsRnVuY3Rpb24oZnVuY3Rpb24sIGZ1
bmN0aW9uT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd2LmdldCgpKTsKICAgICB9CiAgICAgLy8g
SWYgd2UgaGFkIGFuIGVycm9yLCByZXR1cm4gZmFsc2UuICBUaGUgc3BlYyBpcyBhIGxpdHRsZSB1
bmNsZWFyIGhlcmUsIGJ1dCBzYXlzICJSZXR1cm5zIHRydWUgaWYgdGhlIG1ldGhvZCB3YXMKQEAg
LTUzMyw3ICs1MzMsNyBAQCBib29sIF9OUE5fQ29uc3RydWN0KE5QUCBucHAsIE5QT2JqZWN0KiBu
CiAgICAgICAgICAgICBWOFByb3h5KiBwcm94eSA9IHRvVjhQcm94eShucE9iamVjdCk7CiAgICAg
ICAgICAgICBBU1NFUlQocHJveHkpOwogCi0gICAgICAgICAgICBPd25BcnJheVB0cjx2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gPiBhcmd2KGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyhhcmd1
bWVudHMsIGFyZ3VtZW50Q291bnQsIG5wT2JqZWN0KSk7CisgICAgICAgICAgICBPd25BcnJheVB0
cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmd2ID0gY3JlYXRlVmFsdWVMaXN0RnJvbVZhcmlh
bnRBcmdzKGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgbnBPYmplY3QpOwogICAgICAgICAgICAg
cmVzdWx0T2JqZWN0ID0gcHJveHktPm5ld0luc3RhbmNlKGN0b3IsIGFyZ3VtZW50Q291bnQsIGFy
Z3YuZ2V0KCkpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpj
YWxsKGJvbwogICAgIEFTU0VSVCh2YWx1ZS0+SXNGdW5jdGlvbigpKTsKIAogICAgIHY4OjpMb2Nh
bDx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uKHY4OjpGdW5jdGlvbjo6Q2FzdCgqdmFsdWUpKTsKLSAg
ICBPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdzKG5ldyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT5bbV9hcmd1bWVudHMuc2l6ZSgpXSk7CisgICAgT3duQXJyYXlQdHI8djg6Okhh
bmRsZTx2ODo6VmFsdWU+ID4gYXJncyA9IGFkb3B0QXJyYXlQdHIobmV3IHY4OjpIYW5kbGU8djg6
OlZhbHVlPlttX2FyZ3VtZW50cy5zaXplKCldKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICBhcmdzW2ldID0gbV9hcmd1bWVudHNb
aV0udjhWYWx1ZSgpOwogCkBAIC0xNTksNyArMTU5LDcgQEAgU2NyaXB0T2JqZWN0IFNjcmlwdEZ1
bmN0aW9uQ2FsbDo6Y29uc3RydQogICAgIEFTU0VSVCh2YWx1ZS0+SXNGdW5jdGlvbigpKTsKIAog
ICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGNvbnN0cnVjdG9yKHY4OjpGdW5jdGlvbjo6Q2Fz
dCgqdmFsdWUpKTsKLSAgICBPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdz
KG5ldyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT5bbV9hcmd1bWVudHMuc2l6ZSgpXSk7CisgICAgT3du
QXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJncyA9IGFkb3B0QXJyYXlQdHIobmV3
IHY4OjpIYW5kbGU8djg6OlZhbHVlPlttX2FyZ3VtZW50cy5zaXplKCldKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICBhcmdzW2ld
ID0gbV9hcmd1bWVudHNbaV0udjhWYWx1ZSgpOwogCkBAIC0xOTMsNyArMTkzLDcgQEAgU2NyaXB0
VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoYm9vbCYgaAogICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gb2JqZWN0ID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCk7CiAgICAg
djg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b24+OjpDYXN0KG1fZnVuY3Rpb24udjhWYWx1ZSgpKTsKIAotICAgIE93bkFycmF5UHRyPHY4OjpI
YW5kbGU8djg6OlZhbHVlPiA+IGFyZ3MobmV3IHY4OjpIYW5kbGU8djg6OlZhbHVlPlttX2FyZ3Vt
ZW50cy5zaXplKCldKTsKKyAgICBPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBh
cmdzID0gYWRvcHRBcnJheVB0cihuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+W21fYXJndW1lbnRz
LnNpemUoKV0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgp
OyArK2kpCiAgICAgICAgIGFyZ3NbaV0gPSBtX2FyZ3VtZW50c1tpXS52OFZhbHVlKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3Bw
CShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2lu
ZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNyArMzU4LDcgQEAgdjg6OlBlcnNp
c3RlbnQ8djg6OkNvbnRleHQ+IFY4RE9NV2luZG93UwogCiAgICAgLy8gRHluYW1pY2FsbHkgdGVs
bCB2OCBhYm91dCBvdXIgZXh0ZW5zaW9ucyBub3cuCiAgICAgY29uc3QgVjhFeHRlbnNpb25zJiBl
eHRlbnNpb25zID0gVjhQcm94eTo6ZXh0ZW5zaW9ucygpOwotICAgIE93bkFycmF5UHRyPGNvbnN0
IGNoYXIqPiBleHRlbnNpb25OYW1lcyhuZXcgY29uc3QgY2hhcipbZXh0ZW5zaW9ucy5zaXplKCld
KTsKKyAgICBPd25BcnJheVB0cjxjb25zdCBjaGFyKj4gZXh0ZW5zaW9uTmFtZXMgPSBhZG9wdEFy
cmF5UHRyKG5ldyBjb25zdCBjaGFyKltleHRlbnNpb25zLnNpemUoKV0pOwogICAgIGludCBpbmRl
eCA9IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIC8vIEVuc3VyZSBvdXIgZGF0ZSBleHRlbnNpb24gaXMgYWx3YXlzIGFsbG93
ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcAkocmV2
aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gbnBPYmplY3RJbnYKIAogICAgIC8vIFdyYXAgdXAgcGFyYW1ldGVycy4KICAgICBp
bnQgbnVtQXJncyA9IGFyZ3MuTGVuZ3RoKCk7Ci0gICAgT3duQXJyYXlQdHI8TlBWYXJpYW50PiBu
cEFyZ3MobmV3IE5QVmFyaWFudFtudW1BcmdzXSk7CisgICAgT3duQXJyYXlQdHI8TlBWYXJpYW50
PiBucEFyZ3MgPSBhZG9wdEFycmF5UHRyKG5ldyBOUFZhcmlhbnRbbnVtQXJnc10pOwogCiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1BcmdzOyBpKyspCiAgICAgICAgIGNvbnZlcnRWOE9iamVj
dFRvTlBWYXJpYW50KGFyZ3NbaV0sIG5wT2JqZWN0LCAmbnBBcmdzW2ldKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOb2RlRmlsdGVyQ29uZGl0aW9uLmNw
cAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5vZGVG
aWx0ZXJDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHNob3J0
IFY4Tm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSgKICAgICB9CiAKICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCktPkdsb2Jh
bCgpOwotICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3MobmV3IHY4
OjpIYW5kbGU8djg6OlZhbHVlPlsxXSk7CisgICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6
VmFsdWU+ID4gYXJncyA9IGFkb3B0QXJyYXlQdHIobmV3IHY4OjpIYW5kbGU8djg6OlZhbHVlPlsx
XSk7CiAgICAgYXJnc1swXSA9IHRvVjgobm9kZSk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gcmVzdWx0ID0gVjhQcm94eTo6Y2FsbEZ1bmN0aW9uV2l0aG91dEZyYW1lKGNhbGxiYWNrLCBv
YmplY3QsIDEsIGFyZ3MuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFF
bGVtZW50LmNwcAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
cmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBIVE1M
QXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgICAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmVjdCIpKQogICAgICAgICAgICAgbV9zaGFwZSA9
IFJlY3Q7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY29vcmRzQXR0cikgewotICAg
ICAgICBtX2Nvb3Jkcy5zZXQobmV3Q29vcmRzQXJyYXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwg
bV9jb29yZHNMZW4pKTsKKyAgICAgICAgbV9jb29yZHMgPSBuZXdDb29yZHNBcnJheShhdHRyLT52
YWx1ZSgpLnN0cmluZygpLCBtX2Nvb3Jkc0xlbik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gYWx0QXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0cikgewogICAgICAg
ICAvLyBEbyBub3RoaW5nLgogICAgIH0gZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRnJhbWVTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDEy
ICs3NSwxMiBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0CiB7CiAg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSByb3dzQXR0cikgewogICAgICAgICBpZiAoIWF0dHItPmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBtX3Jvd0xlbmd0aHMuc2V0KG5ld0xlbmd0aEFycmF5KGF0
dHItPnZhbHVlKCkuc3RyaW5nKCksIG1fdG90YWxSb3dzKSk7CisgICAgICAgICAgICBtX3Jvd0xl
bmd0aHMgPSBuZXdMZW5ndGhBcnJheShhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBtX3RvdGFsUm93
cyk7CiAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjb2xzQXR0cikgewogICAgICAgICBpZiAoIWF0dHIt
PmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBtX2NvbExlbmd0aHMuc2V0KG5ld0xlbmd0aEFycmF5
KGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIG1fdG90YWxDb2xzKSk7CisgICAgICAgICAgICBtX2Nv
bExlbmd0aHMgPSBuZXdMZW5ndGhBcnJheShhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBtX3RvdGFs
Q29scyk7CiAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBmcmFtZWJvcmRlckF0dHIpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjg5LDcgKzE2ODksNyBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTCiAgICAgR0MzRGludCBu
dW1TaGFkZXJzID0gMDsKICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8o
cHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTLCAmbnVtU2hhZGVy
cyk7CiAgICAgaWYgKG51bVNoYWRlcnMpIHsKLSAgICAgICAgT3duQXJyYXlQdHI8UGxhdGZvcm0z
RE9iamVjdD4gc2hhZGVycyhuZXcgUGxhdGZvcm0zRE9iamVjdFtudW1TaGFkZXJzXSk7CisgICAg
ICAgIE93bkFycmF5UHRyPFBsYXRmb3JtM0RPYmplY3Q+IHNoYWRlcnMgPSBhZG9wdEFycmF5UHRy
KG5ldyBQbGF0Zm9ybTNET2JqZWN0W251bVNoYWRlcnNdKTsKICAgICAgICAgR0MzRHNpemVpIGNv
dW50ID0gMDsKICAgICAgICAgbV9jb250ZXh0LT5nZXRBdHRhY2hlZFNoYWRlcnMob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBudW1TaGFkZXJzLCAmY291bnQsIHNoYWRlcnMuZ2V0KCkpOwogICAgICAg
ICBpZiAoY291bnQgIT0gbnVtU2hhZGVycykKQEAgLTQ1MzMsNyArNDUzMyw3IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzaW11bGF0ZVZlcnQKICAgICAgICAgfHwgc3RhdGUudmFsdWVb
MV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0KICAgICAgICAgfHwgc3RhdGUudmFs
dWVbMl0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KICAgICAgICAgfHwgc3RhdGUu
dmFsdWVbM10gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10pIHsKLSAgICAgICAgT3du
QXJyYXlQdHI8R0MzRGZsb2F0PiBidWZmZXJEYXRhKG5ldyBHQzNEZmxvYXRbKG51bVZlcnRleCAr
IDEpICogNF0pOworICAgICAgICBPd25BcnJheVB0cjxHQzNEZmxvYXQ+IGJ1ZmZlckRhdGEgPSBh
ZG9wdEFycmF5UHRyKG5ldyBHQzNEZmxvYXRbKG51bVZlcnRleCArIDEpICogNF0pOwogICAgICAg
ICBmb3IgKEdDM0RzaXplaSBpaSA9IDA7IGlpIDwgbnVtVmVydGV4ICsgMTsgKytpaSkgewogICAg
ICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDRdID0gc3RhdGUudmFsdWVbMF07CiAgICAgICAgICAg
ICBidWZmZXJEYXRhW2lpICogNCArIDFdID0gc3RhdGUudmFsdWVbMV07CkBAIC00NTg4LDcgKzQ1
ODgsNyBAQCBXZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnCiB9CiAKIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6TFJVSW1hZ2VCdWZmZXJD
YWNoZShpbnQgY2FwYWNpdHkpCi0gICAgOiBtX2J1ZmZlcnMobmV3IE93blB0cjxJbWFnZUJ1ZmZl
cj5bY2FwYWNpdHldKQorICAgIDogbV9idWZmZXJzKGFkb3B0QXJyYXlQdHIobmV3IE93blB0cjxJ
bWFnZUJ1ZmZlcj5bY2FwYWNpdHldKSkKICAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCiB7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAJKHJldmlzaW9uIDc2NDU0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9P
d25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV1RGOwpAQCAtODMsNyArODQsNyBAQCBzdGF0aWMgaW50IGNvdW50Q2hhcmFj
dGVyKGNvbnN0IFVDaGFyKiBkCiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1MZW5ndGgqIG5ld0Nv
b3Jkc0FycmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikKK1Bhc3NPd25BcnJheVB0
cjxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikK
IHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgY29uc3QgVUNo
YXIqIGRhdGEgPSBzdHJpbmcuY2hhcmFjdGVycygpOwpAQCAtMTAwLDcgKzEwMSw3IEBAIExlbmd0
aCogbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiBzdHIKICAgICBzdHIgPSBzdHItPnNpbXBs
aWZ5V2hpdGVTcGFjZSgpOwogCiAgICAgbGVuID0gY291bnRDaGFyYWN0ZXIoc3RyLT5jaGFyYWN0
ZXJzKCksIHN0ci0+bGVuZ3RoKCksICcgJykgKyAxOwotICAgIExlbmd0aCogciA9IG5ldyBMZW5n
dGhbbGVuXTsKKyAgICBPd25BcnJheVB0cjxMZW5ndGg+IHIgPSBhZG9wdEFycmF5UHRyKG5ldyBM
ZW5ndGhbbGVuXSk7CiAKICAgICBpbnQgaSA9IDA7CiAgICAgdW5zaWduZWQgcG9zID0gMDsKQEAg
LTExNCwxMCArMTE1LDEwIEBAIExlbmd0aCogbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiBz
dHIKIAogICAgIEFTU0VSVChpID09IGxlbiAtIDEpOwogCi0gICAgcmV0dXJuIHI7CisgICAgcmV0
dXJuIHIucmVsZWFzZSgpOwogfQogCi1MZW5ndGgqIG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBpbnQmIGxlbikKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0xlbmd0aEFy
cmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikKIHsKICAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gc3RyID0gc3RyaW5nLmltcGwoKS0+c2ltcGxpZnlXaGl0ZVNwYWNlKCk7CiAgICAgaWYg
KCFzdHItPmxlbmd0aCgpKSB7CkBAIC0xMjYsNyArMTI3LDcgQEAgTGVuZ3RoKiBuZXdMZW5ndGhB
cnJheShjb25zdCBTdHJpbmcmIHN0cgogICAgIH0KIAogICAgIGxlbiA9IGNvdW50Q2hhcmFjdGVy
KHN0ci0+Y2hhcmFjdGVycygpLCBzdHItPmxlbmd0aCgpLCAnLCcpICsgMTsKLSAgICBMZW5ndGgq
IHIgPSBuZXcgTGVuZ3RoW2xlbl07CisgICAgT3duQXJyYXlQdHI8TGVuZ3RoPiByID0gYWRvcHRB
cnJheVB0cihuZXcgTGVuZ3RoW2xlbl0pOwogCiAgICAgaW50IGkgPSAwOwogICAgIHVuc2lnbmVk
IHBvcyA9IDA7CkBAIC0xNDUsNyArMTQ2LDcgQEAgTGVuZ3RoKiBuZXdMZW5ndGhBcnJheShjb25z
dCBTdHJpbmcmIHN0cgogICAgIGVsc2UKICAgICAgICAgbGVuLS07CiAKLSAgICByZXR1cm4gcjsK
KyAgICByZXR1cm4gci5yZWxlYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJh
eVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE5Myw4ICsxOTQsOCBAQCBwcml2
YXRlOgogICAgIGludCBtX3ZhbHVlOwogfTsKIAotTGVuZ3RoKiBuZXdDb29yZHNBcnJheShjb25z
dCBTdHJpbmcmLCBpbnQmIGxlbik7Ci1MZW5ndGgqIG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmlu
ZyYsIGludCYgbGVuKTsKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNv
bnN0IFN0cmluZyYsIGludCYgbGVuKTsKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0xlbmd0
aEFycmF5KGNvbnN0IFN0cmluZyYsIGludCYgbGVuKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJy
aWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QU5HTEVXZWJLaXRCcmlkZ2UuY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTMsNyArOTMsNyBAQCBib29sIEFOR0xFV2ViS2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNv
CiAgICAgICAgIGludCBsb2dTaXplID0gMDsKICAgICAgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBT
SF9JTkZPX0xPR19MRU5HVEgsICZsb2dTaXplKTsKICAgICAgICAgaWYgKGxvZ1NpemUgPiAxKSB7
Ci0gICAgICAgICAgICBPd25BcnJheVB0cjxjaGFyPiBsb2dCdWZmZXIobmV3IGNoYXJbbG9nU2l6
ZV0pOworICAgICAgICAgICAgT3duQXJyYXlQdHI8Y2hhcj4gbG9nQnVmZmVyID0gYWRvcHRBcnJh
eVB0cihuZXcgY2hhcltsb2dTaXplXSk7CiAgICAgICAgICAgICBpZiAobG9nQnVmZmVyKSB7CiAg
ICAgICAgICAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBsb2dCdWZmZXIuZ2V0KCkpOwog
ICAgICAgICAgICAgICAgIHNoYWRlclZhbGlkYXRpb25Mb2cgPSBsb2dCdWZmZXIuZ2V0KCk7CkBA
IC0xMDUsNyArMTA1LDcgQEAgYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJT
bwogICAgIGludCB0cmFuc2xhdGlvbkxlbmd0aCA9IDA7CiAgICAgU2hHZXRJbmZvKGNvbXBpbGVy
LCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEgsICZ0cmFuc2xhdGlvbkxlbmd0aCk7CiAgICAgaWYgKHRy
YW5zbGF0aW9uTGVuZ3RoID4gMSkgewotICAgICAgICBPd25BcnJheVB0cjxjaGFyPiB0cmFuc2xh
dGlvbkJ1ZmZlcihuZXcgY2hhclt0cmFuc2xhdGlvbkxlbmd0aF0pOworICAgICAgICBPd25BcnJh
eVB0cjxjaGFyPiB0cmFuc2xhdGlvbkJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbdHJh
bnNsYXRpb25MZW5ndGhdKTsKICAgICAgICAgaWYgKCF0cmFuc2xhdGlvbkJ1ZmZlcikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyLCB0
cmFuc2xhdGlvbkJ1ZmZlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAJ
KHJldmlzaW9uIDc2NDU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw3
IEBAIHN0YXRpYyB2b2lkIGdldERpcnR5UmVjdHMoSFdORCB3aW5kb3csIFYKICAgICB9CiAKICAg
ICBEV09SRCBkYXRhU2l6ZSA9IEdldFJlZ2lvbkRhdGEocmVnaW9uLmdldCgpLCAwLCAwKTsKLSAg
ICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiByZWdpb25EYXRhQnVmZmVyKG5ldyB1bnNpZ25l
ZCBjaGFyW2RhdGFTaXplXSk7CisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcmVnaW9u
RGF0YUJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbZGF0YVNpemVdKTsK
ICAgICBSR05EQVRBKiByZWdpb25EYXRhID0gcmVpbnRlcnByZXRfY2FzdDxSR05EQVRBKj4ocmVn
aW9uRGF0YUJ1ZmZlci5nZXQoKSk7CiAgICAgaWYgKCFHZXRSZWdpb25EYXRhKHJlZ2lvbi5nZXQo
KSwgZGF0YVNpemUsIHJlZ2lvbkRhdGEpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJM
aW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCShyZXZpc2lvbiA3NjQ1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0
Q29udHJvbGxlckxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDcgKzM2OSw3IEBAIGNv
bnN0IFRleHRSdW4mIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2UKICAgICAgICAgc291cmNlVGV4
dCA9IG5vcm1hbGl6ZWRTdHJpbmcuZ2V0QnVmZmVyKCk7CiAgICAgfQogCi0gICAgbm9ybWFsaXpl
ZEJ1ZmZlci5zZXQobmV3IFVDaGFyW25vcm1hbGl6ZWRCdWZmZXJMZW5ndGggKyAxXSk7CisgICAg
bm9ybWFsaXplZEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IFVDaGFyW25vcm1hbGl6ZWRCdWZm
ZXJMZW5ndGggKyAxXSk7CiAKICAgICBub3JtYWxpemVTcGFjZXNBbmRNaXJyb3JDaGFycyhzb3Vy
Y2VUZXh0LCBvcmlnaW5hbFJ1bi5ydGwoKSwgbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbm9ybWFs
aXplZEJ1ZmZlckxlbmd0aCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcAkocmV2aXNpb24g
NzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJm
YnV6elNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyB2b2lk
IGdseXBoc1RvQWR2YW5jZXMoSEJfRm9udCBoYkYKICAgICBmb250LT5zZXR1cFBhaW50KCZwYWlu
dCk7CiAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNv
ZGluZyk7CiAKLSAgICBPd25BcnJheVB0cjx1aW50MTZfdD4gZ2x5cGhzMTYobmV3IHVpbnQxNl90
W251bUdseXBoc10pOworICAgIE93bkFycmF5UHRyPHVpbnQxNl90PiBnbHlwaHMxNiA9IGFkb3B0
QXJyYXlQdHIobmV3IHVpbnQxNl90W251bUdseXBoc10pOwogICAgIGlmICghZ2x5cGhzMTYuZ2V0
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5
cGhzOyArK2kpCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RhdGljIEhCX0Jvb2wgY2FuUmVuZGVyKEhC
X0ZvbnQgaGJGb250LAogICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsKICAgICBwYWludC5z
ZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7CiAKLSAgICBPd25B
cnJheVB0cjx1aW50MTZfdD4gZ2x5cGhzMTYobmV3IHVpbnQxNl90W2xlbmd0aF0pOworICAgIE93
bkFycmF5UHRyPHVpbnQxNl90PiBnbHlwaHMxNiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQxNl90
W2xlbmd0aF0pOwogICAgIGlmICghZ2x5cGhzMTYuZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIGludCBudW1HbHlwaHMgPSBwYWludC50ZXh0VG9HbHlwaHMoY2hhcmFjdGVycywgbGVuZ3Ro
ICogc2l6ZW9mKHVpbnQxNl90KSwgZ2x5cGhzMTYuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAkocmV2aXNpb24gNzY0
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIFRleHR1cmU6OnVwZGF0ZVN1
YlJlY3Qodm9pZCogcGl4ZWxzCiAgICAgaW50IHRlbXBCdWZmU2l6ZSA9IC8vIFRlbXBvcmFyeSBi
dWZmZXIgc2l6ZSBpcyB0aGUgc21hbGxlciBvZiB0aGUgbWF4IHRleHR1cmUgc2l6ZSBvciB0aGUg
dXBkYXRlUmVjdFNhbml0aXplZAogICAgICAgICBtaW4obV90aWxlcy5tYXhUZXh0dXJlU2l6ZSgp
LCBtX3RpbGVzLmJvcmRlclRleGVscygpICsgdXBkYXRlUmVjdFNhbml0aXplZC53aWR0aCgpKSAq
CiAgICAgICAgIG1pbihtX3RpbGVzLm1heFRleHR1cmVTaXplKCksIG1fdGlsZXMuYm9yZGVyVGV4
ZWxzKCkgKyB1cGRhdGVSZWN0U2FuaXRpemVkLmhlaWdodCgpKTsKLSAgICBPd25BcnJheVB0cjx1
aW50MzJfdD4gdGVtcEJ1ZmYobmV3IHVpbnQzMl90W3RlbXBCdWZmU2l6ZV0pOworICAgIE93bkFy
cmF5UHRyPHVpbnQzMl90PiB0ZW1wQnVmZiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQzMl90W3Rl
bXBCdWZmU2l6ZV0pOwogCiAgICAgZm9yIChpbnQgdGlsZSA9IDA7IHRpbGUgPCBtX3RpbGVzLm51
bVRpbGVzKCk7IHRpbGUrKykgewogICAgICAgICAvLyBJbnRlcnNlY3Qgd2l0aCB0aWxlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHJldmlzaW9uIDc2NDU0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1JlCiAgICAgaW50IHJvd0J5dGVzID0gbV9jdXJy
ZW50V2lkdGggKiA0OwogICAgIGludCB0b3RhbEJ5dGVzID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRI
ZWlnaHQ7CiAKLSAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBwaXhlbHMobmV3IHVuc2ln
bmVkIGNoYXJbdG90YWxCeXRlc10pOworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBp
eGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc10pOwogICAg
IGlmICghcGl4ZWxzKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjUs
NyArODY1LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZWFkYmFja0hhcmR3YQogICAg
IGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0Jp
dG1hcCh0cnVlKTsKICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKICAgICBpbnQg
d2lkdGggPSBiaXRtYXAud2lkdGgoKSwgaGVpZ2h0ID0gYml0bWFwLmhlaWdodCgpOwotICAgIE93
bkFycmF5UHRyPHVpbnQzMl90PiBidWYobmV3IHVpbnQzMl90W3dpZHRoXSk7CisgICAgT3duQXJy
YXlQdHI8dWludDMyX3Q+IGJ1ZiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQzMl90W3dpZHRoXSk7
CiAgICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29u
dGV4dCgpOwogICAgIG1fZ3B1Q2FudmFzLT5iaW5kRnJhbWVidWZmZXIoKTsKICAgICAvLyBGbGlw
cyB0aGUgaW1hZ2UgdmVydGljYWxseS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcAkocmV2aXNpb24gNzY0
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRt
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAgYm9vbCBTaGFyZWRCaXRt
YXA6OnRvMTZiaXQoKQogICAgIGludCB3aWR0aCA9IG5ld0JtcEluZm8ud2lkdGgoKTsKICAgICBp
bnQgcGFkZGVkV2lkdGggPSBuZXdCbXBJbmZvLnBhZGRlZFdpZHRoKCk7CiAgICAgaW50IGJ1ZmZl
clNpemUgPSBwYWRkZWRXaWR0aCAqIG5ld0JtcEluZm8uaGVpZ2h0KCk7Ci0gICAgT3duQXJyYXlQ
dHI8dW5zaWduZWQ+IG5ld1BpeGVsRGF0YShuZXcgdW5zaWduZWRbYnVmZmVyU2l6ZSAvIDJdKTsK
KyAgICBPd25BcnJheVB0cjx1bnNpZ25lZD4gbmV3UGl4ZWxEYXRhID0gYWRvcHRBcnJheVB0cihu
ZXcgdW5zaWduZWRbYnVmZmVyU2l6ZSAvIDJdKTsKICAgICB2b2lkKiBuZXdQaXhlbHMgPSBuZXdQ
aXhlbERhdGEuZ2V0KCk7CiAKICAgICBpZiAoIW5ld1BpeGVscykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAkocmV2aXNpb24gNzY0NTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgQ29udGV4dE1lbnU6OmdldENvbnRleHRN
ZW51SXRlbXMoSE0KICAgICAgICAgfQogCiAgICAgICAgIGludCBtZW51U3RyaW5nTGVuZ3RoID0g
aW5mby5jY2ggKyAxOwotICAgICAgICBPd25BcnJheVB0cjxXQ0hBUj4gbWVudVN0cmluZyhuZXcg
V0NIQVJbbWVudVN0cmluZ0xlbmd0aF0pOworICAgICAgICBPd25BcnJheVB0cjxXQ0hBUj4gbWVu
dVN0cmluZyA9IGFkb3B0QXJyYXlQdHIobmV3IFdDSEFSW21lbnVTdHJpbmdMZW5ndGhdKTsKICAg
ICAgICAgaW5mby5kd1R5cGVEYXRhID0gbWVudVN0cmluZy5nZXQoKTsKICAgICAgICAgaW5mby5j
Y2ggPSBtZW51U3RyaW5nTGVuZ3RoOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vTG9nZ2luZ1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0xvZ2dpbmdXaW4uY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZVdpdGhVc2VyRGVmCiAgICAgaWYgKCFsZW5n
dGgpCiAgICAgICAgIHJldHVybjsKIAotICAgIE93bkFycmF5UHRyPGNoYXI+IGJ1ZmZlcihuZXcg
Y2hhcltsZW5ndGhdKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBidWZmZXIgPSBhZG9wdEFycmF5
UHRyKG5ldyBjaGFyW2xlbmd0aF0pOwogCiAgICAgaWYgKCFHZXRFbnZpcm9ubWVudFZhcmlhYmxl
QShjaGFubmVsLmRlZmF1bHROYW1lLCBidWZmZXIuZ2V0KCksIGxlbmd0aCkpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpblBhY2thZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAg
Ym9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQogICAgIGlmICh2ZXJzaW9uSW5mb1NpemUg
PT0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4gdmVy
c2lvbkluZm9EYXRhKG5ldyBjaGFyW3ZlcnNpb25JbmZvU2l6ZV0pOworICAgIE93bkFycmF5UHRy
PGNoYXI+IHZlcnNpb25JbmZvRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbdmVyc2lvbklu
Zm9TaXplXSk7CiAKICAgICBpZiAoIUdldEZpbGVWZXJzaW9uSW5mb1coY29uc3RfY2FzdDxVQ2hh
cio+KG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSwKICAgICAgICAgICAg
IDAsIHZlcnNpb25JbmZvU2l6ZSwgdmVyc2lvbkluZm9EYXRhLmdldCgpKSkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDc2NDU0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDEtMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgT3duQXJyYXJ5UHRyLmggdXNlcyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGlu
Y2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUyODY3CisKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS93
aW4vTmV0c2NhcGVQbHVnaW5Nb2R1bGVXaW4uY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2Fw
ZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2luSW5mbyk6CisKIDIwMTEtMDEtMjIgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2Vp
bmlnLgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvd2luL05l
dHNjYXBlUGx1Z2luTW9kdWxlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvUGx1Z2lucy9OZXRzY2FwZS93aW4vTmV0c2NhcGVQbHVnaW5Nb2R1bGVXaW4uY3BwCShy
ZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L3dpbi9OZXRzY2FwZVBsdWdpbk1vZHVsZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcg
KzU5LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2luSW5mbwogICAgIGlm
ICghdmVyc2lvbkluZm9TaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBPd25BcnJh
eVB0cjxjaGFyPiB2ZXJzaW9uSW5mb0RhdGEobmV3IGNoYXJbdmVyc2lvbkluZm9TaXplXSk7Cisg
ICAgT3duQXJyYXlQdHI8Y2hhcj4gdmVyc2lvbkluZm9EYXRhID0gYWRvcHRBcnJheVB0cihuZXcg
Y2hhclt2ZXJzaW9uSW5mb1NpemVdKTsKICAgICBpZiAoITo6R2V0RmlsZVZlcnNpb25JbmZvVyhw
YXRoQ29weS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2ZXJzaW9uSW5mb1Np
emUsIHZlcnNpb25JbmZvRGF0YS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRl
eDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wMS0yMiAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBPd25BcnJhcnlQdHIuaCB1c2VzIGRlbGV0ZU93bmVkUHRy
IGJ1dCBkb2VzbuKAmXQgaW5jbHVkZSBPd25QdHJDb21tb24uaAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI4NjcKKworICAgICAgICBSZXBsYWNlZCBh
bGwgY2FsbHMgdG8gT3duQXJyYXlQdHI6OnNldCBhbmQgbG9vc2UgaW5zdGFudGlhdGlvbiBvZiBP
d25BcnJheVB0ciBieQorICAgICAgICBjYWxscyB0byBvcGVyYXRvcj0gYW5kIGFkb3B0QXJyYXlQ
dHIuCisKKyAgICAgICAgKiBXZWJIaXN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkhpc3Rvcnk6Om9y
ZGVyZWRMYXN0VmlzaXRlZERheXMpOgorICAgICAgICAqIFdlYlByZWZlcmVuY2VzLmNwcDoKKyAg
ICAgICAgKFdlYlByZWZlcmVuY2VzOjpjb3B5V2ViS2l0UHJlZmVyZW5jZXNUb0NGUHJlZmVyZW5j
ZXMpOgorCiAyMDExLTAxLTIxICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0u
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkhpc3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkhpc3RvcnkuY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dl
Ykhpc3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzYsNyArNDc2LDcgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBXZWJIaXN0b3J5OjpvcgogCiAgICAgKmNvdW50ID0gZGF0ZUNvdW50
OwogICAgIGlmICghbV9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzKSB7Ci0gICAgICAgIG1fb3JkZXJl
ZExhc3RWaXNpdGVkRGF5cy5zZXQobmV3IERBVEVbZGF0ZUNvdW50XSk7CisgICAgICAgIG1fb3Jk
ZXJlZExhc3RWaXNpdGVkRGF5cyA9IGFkb3B0QXJyYXlQdHIobmV3IERBVEVbZGF0ZUNvdW50XSk7
CiAgICAgICAgIERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IG1f
ZW50cmllc0J5RGF0ZS5lbmQoKS5rZXlzKCk7CiAgICAgICAgIGludCBpID0gMDsKICAgICAgICAg
Zm9yIChEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IG1fZW50cmll
c0J5RGF0ZS5iZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0LCArK2kpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC93aW4vV2ViUHJlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9X
ZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYzLDggKzQ2
Myw4IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6OmNvcHlXZWJLaXRQcmVmZXJlbmMKICAgICBDRlN0
cmluZ1JlZiBkaWRSZW1vdmVEZWZhdWx0c0tleSA9IENGU1RSKFdlYktpdERpZE1pZ3JhdGVEZWZh
dWx0U2V0dGluZ3NGcm9tU2FmYXJpM0JldGFQcmVmZXJlbmNlS2V5KTsKICAgICBib29sIG9taXRE
ZWZhdWx0cyA9ICFib29sZWFuVmFsdWVGb3JQcmVmZXJlbmNlc1ZhbHVlKENGRGljdGlvbmFyeUdl
dFZhbHVlKGRpY3QsIGRpZFJlbW92ZURlZmF1bHRzS2V5KSk7CiAKLSAgICBPd25BcnJheVB0cjxD
RlR5cGVSZWY+IGtleXMobmV3IENGVHlwZVJlZltjb3VudF0pOwotICAgIE93bkFycmF5UHRyPENG
VHlwZVJlZj4gdmFsdWVzKG5ldyBDRlR5cGVSZWZbY291bnRdKTsKKyAgICBPd25BcnJheVB0cjxD
RlR5cGVSZWY+IGtleXMgPSBhZG9wdEFycmF5UHRyKG5ldyBDRlR5cGVSZWZbY291bnRdKTsKKyAg
ICBPd25BcnJheVB0cjxDRlR5cGVSZWY+IHZhbHVlcyA9IGFkb3B0QXJyYXlQdHIobmV3IENGVHlw
ZVJlZltjb3VudF0pOwogICAgIENGRGljdGlvbmFyeUdldEtleXNBbmRWYWx1ZXMoZGljdCwga2V5
cy5nZXQoKSwgdmFsdWVzLmdldCgpKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79861</attachid>
            <date>2011-01-22 17:10:01 -0800</date>
            <delta_ts>2011-02-06 18:06:44 -0800</delta_ts>
            <desc>fixed v8 binding</desc>
            <filename>bug-52867-20110122170959.patch</filename>
            <type>text/plain</type>
            <size>46007</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAK
KzIwMTEtMDEtMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmggdXNl
cyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisKKyAg
ICAgICAgUmVtb3ZlZCBMT09TRV9PV05fQVJSQVlfUFRSIGFuZCBPd25BcnJheVB0cjxUPjo6c2V0
LgorCisgICAgICAgIFJlcGxhY2VkIGFsbCBjYWxscyB0byBPd25BcnJheVB0cjo6c2V0IGFuZCBs
b29zZSBpbnN0YW50aWF0aW9uIG9mIE93bkFycmF5UHRyIGJ5CisgICAgICAgIGNhbGxzIHRvIG9w
ZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ci4KKworICAgICAgICAqIEFQSS9KU1N0cmluZ1JlZkNG
LmNwcDoKKyAgICAgICAgKEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKTogQ2FsbHMgb3BlcmF0
b3I9IGFuZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOiBSZW1vdmVkIE93bkFycmF5UHRyQ29tbW9uLmgKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHd0Zi9DTWFr
ZUxpc3RzLnR4dDogRGl0dG8uCisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KTogQ2FsbHMgb3BlcmF0b3I9IGFu
ZCBhZG9wdEFycmF5UHRyIGluc3RlYWQgb2Ygc2V0LgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1l
bnRzLmg6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6Y29weVJlZ2lzdGVycyk6IENhbGxzIGFk
b3B0QXJyYXlQdHIuCisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcik6IENhbGxzIG9wZXJhdG9yPSBhbmQgYWRvcHRBcnJheVB0ciBpbnN0ZWFkIG9mIHNl
dC4KKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNWYXJpYWJsZU9iamVjdDo6c2V0UmVnaXN0ZXJzKTogQ2FsbHMgb3BlcmF0b3I9LgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVD
aGFpbjo6U3RydWN0dXJlQ2hhaW4pOiBDYWxscyBvcGVyYXRvcj0gYW5kIGFkb3B0QXJyYXlQdHIg
aW5zdGVhZCBvZiBzZXQuCisgICAgICAgICogd3RmL0RhdGVNYXRoLmg6CisgICAgICAgIChKU0M6
OkdyZWdvcmlhbkRhdGVUaW1lOjpHcmVnb3JpYW5EYXRlVGltZSk6CisgICAgICAgICogd3RmL093
bkFycmF5UHRyLmg6IEluY2x1ZGUgUGFzc093bkFycmF5UHRyLmggaW5zdGVhZCBvZiBPd25BcnJh
eVB0ckNvbW1vbi5oOyByZW1vdmVkIExPT1NFX09XTl9BUlJBWV9QVFIKKyAgICAgICAgYW5kIE93
bkFycmF5UHRyPFQ+OjpzZXQuCisgICAgICAgICogd3RmL093bkFycmF5UHRyQ29tbW9uLmg6IFJl
bW92ZWQuCisgICAgICAgICogd3RmL1Bhc3NPd25BcnJheVB0ci5oOiBObyBsb25nZXIgaW5jbHVk
ZXMgT3duQXJyYXlQdHJDb21tb24uaAorICAgICAgICAoV1RGOjpkZWxldGVPd25lZEFycmF5UHRy
KTogTW92ZWQgZnJvbSBPd25BcnJheVB0ckNvbW1vbi5oLgorCiAyMDExLTAxLTIyICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZy
ZXkgR2FyZW4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lv
biA3NjQ1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDg2LDcgKzQ4Niw2IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT1NBbGxvY2F0b3IuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L093bkZhc3RNYWxsb2NQdHIuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJh
eVB0ckNvbW1vbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093blB0ckNvbW1vbi5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093blB0ci5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1N0cmluZ1JlZkNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTU3RyaW5nUmVmQ0YuY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAgSlNTdHJpbmdSZWYgSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQwogICAg
IC8vIGl0IGNhbiBob2xkLiAgKDxyZGFyOi8vcHJvYmxlbS82ODA2NDc4PikKICAgICBzaXplX3Qg
bGVuZ3RoID0gQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKICAgICBpZiAobGVuZ3RoKSB7Ci0g
ICAgICAgIE93bkFycmF5UHRyPFVuaUNoYXI+IGJ1ZmZlcihuZXcgVW5pQ2hhcltsZW5ndGhdKTsK
KyAgICAgICAgT3duQXJyYXlQdHI8VW5pQ2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcg
VW5pQ2hhcltsZW5ndGhdKTsKICAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHN0cmluZywg
Q0ZSYW5nZU1ha2UoMCwgbGVuZ3RoKSwgYnVmZmVyLmdldCgpKTsKICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFVuaUNoYXIpID09IHNpemVvZihVQ2hhciksIHVuaWNoYXJfYW5kX3VjaGFy
X211c3RfYmVfc2FtZV9zaXplKTsKICAgICAgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjpjcmVh
dGUocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGJ1ZmZlci5nZXQoKSksIGxlbmd0aCkubGVha1Jl
ZigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9X
VEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHdv
cmtpbmcgY29weSkKQEAgLTc0OSwxMCArNzQ5LDYgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8Rmls
ZQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcT3duQXJyYXlQdHJDb21tb24uaCIKLQkJCT4K
LQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcT3duRmFzdE1h
bGxvY1B0ci5oIgogCQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQ4LDcg
KzU0OCw2IEBACiAJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERTNBQjAwRTZD
ODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi87IH07CiAJCUJDRjYwNTE0MEUyMDNFRjgw
MEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkJFNjk2MTIyNTYw
RTgwMDMwOUU5RCAvKiBQYXNzT3duQXJyYXlQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkJFNjk1MTIyNTYwRTgwMDMwOUU5RCAvKiBQYXNzT3du
QXJyYXlQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlCQ0ZCRTY5ODEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21tb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkJFNjk3MTIyNTYx
RDIwMDMwOUU5RCAvKiBPd25BcnJheVB0ckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBK
dW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi87IH07CiAJCUJD
RkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBK
dW1wVGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMwRTUwQTA2MzAwRTk2RTE1IC8qIE5vdEZvdW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMEEyNzIz
RjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE1MCw3ICsxMTQ5LDYgQEAKIAkJQkNGNjA1MTIw
RTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQXJnTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y2NTUzQjBB
MjA0OERFMDAzOEExOTQgLyogTWF0aEV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWF0aEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZC
RTY5NTEyMjU2MEU4MDAzMDlFOUQgLyogUGFzc093bkFycmF5UHRyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3NPd25BcnJheVB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCQ0ZCRTY5NzEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21tb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3duQXJyYXlQdHJDb21tb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8q
IEp1bXBUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKdW1w
VGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZEOEM5MTBFRUIyRUU3
MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEp1bXBUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMEEyNzIzRjBFNTA5
RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTm90Rm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjYsNyArMTU2
NCw2IEBACiAJCQkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8s
CiAJCQkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICov
LAogCQkJCTkzMDNGNUE0MDk5MTFBNTgwMEFENzFCOCAvKiBPd25BcnJheVB0ci5oICovLAotCQkJ
CUJDRkJFNjk3MTIyNTYxRDIwMDMwOUU5RCAvKiBPd25BcnJheVB0ckNvbW1vbi5oICovLAogCQkJ
CTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi8sCiAJCQkJ
OTMwM0Y1NjcwOTkxMThGQTAwQUQ3MUI4IC8qIE93blB0ci5oICovLAogCQkJCTQ0MEI3QUVEMEZB
RjdGQ0IwMDczMzIzRSAvKiBPd25QdHJDb21tb24uaCAqLywKQEAgLTIyOTEsNyArMjI4OCw2IEBA
CiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NDkwRTE2RjVDRDAwQjM0NDYwIC8qIE93bkFycmF5UHRyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlCQ0ZCRTY5ODEyMjU2MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQ
dHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVGNCAv
KiBPd25GYXN0TWFsbG9jUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0QTBFMTZGNUNE
MDBCMzQ0NjAgLyogT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDA5RDg0NzBGQUY4MEEy
MDA1MjNCODcgLyogT3duUHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkocmV2aXNpb24gNzY0NTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0ZQogewogICAgIGlmIChpIDwgZC0+bnVtQXJndW1lbnRzKSB7CiAgICAgICAgIGlmICgh
ZC0+ZGVsZXRlZEFyZ3VtZW50cykgewotICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50cy5z
ZXQobmV3IGJvb2xbZC0+bnVtQXJndW1lbnRzXSk7CisgICAgICAgICAgICBkLT5kZWxldGVkQXJn
dW1lbnRzID0gYWRvcHRBcnJheVB0cihuZXcgYm9vbFtkLT5udW1Bcmd1bWVudHNdKTsKICAgICAg
ICAgICAgIG1lbXNldChkLT5kZWxldGVkQXJndW1lbnRzLmdldCgpLCAwLCBzaXplb2YoYm9vbCkg
KiBkLT5udW1Bcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgIGlmICghZC0+ZGVsZXRlZEFy
Z3VtZW50c1tpXSkgewpAQCAtMzIxLDcgKzMyMSw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWxldGVQ
cm9wZXJ0eShFeGVjU3RhdGUKICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLnRvQXJyYXlJ
bmRleChpc0FycmF5SW5kZXgpOwogICAgIGlmIChpc0FycmF5SW5kZXggJiYgaSA8IGQtPm51bUFy
Z3VtZW50cykgewogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHMpIHsKLSAgICAgICAg
ICAgIGQtPmRlbGV0ZWRBcmd1bWVudHMuc2V0KG5ldyBib29sW2QtPm51bUFyZ3VtZW50c10pOwor
ICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50cyA9IGFkb3B0QXJyYXlQdHIobmV3IGJvb2xb
ZC0+bnVtQXJndW1lbnRzXSk7CiAgICAgICAgICAgICBtZW1zZXQoZC0+ZGVsZXRlZEFyZ3VtZW50
cy5nZXQoKSwgMCwgc2l6ZW9mKGJvb2wpICogZC0+bnVtQXJndW1lbnRzKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzAsNyArMjMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXIqIHJlZ2lz
dGVyQXJyYXkgPSBuZXcgUmVnaXN0ZXJbcmVnaXN0ZXJBcnJheVNpemVdOwogICAgICAgICBtZW1j
cHkocmVnaXN0ZXJBcnJheSwgZC0+cmVnaXN0ZXJzIC0gcmVnaXN0ZXJPZmZzZXQsIHJlZ2lzdGVy
QXJyYXlTaXplICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGQtPnJlZ2lzdGVyQXJyYXku
c2V0KHJlZ2lzdGVyQXJyYXkpOworICAgICAgICBkLT5yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJB
cnJheTsKICAgICAgICAgZC0+cmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVyT2Zm
c2V0OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDc2NDU0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3I6OkpTUHJvcGVydAogICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmUoMCkKICAgICAsIG1fbnVt
Q2FjaGVhYmxlU2xvdHMobnVtQ2FjaGVhYmxlU2xvdHMpCiAgICAgLCBtX2pzU3RyaW5nc1NpemUo
cHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCkpCi0gICAg
LCBtX2pzU3RyaW5ncyhuZXcgSlNWYWx1ZVttX2pzU3RyaW5nc1NpemVdKQorICAgICwgbV9qc1N0
cmluZ3MoYWRvcHRBcnJheVB0cihuZXcgSlNWYWx1ZVttX2pzU3RyaW5nc1NpemVdKSkKIHsKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3RvciYgcHJvcGVydHlOYW1l
VmVjdG9yID0gcHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fanNTdHJpbmdzU2l6ZTsgKytpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAkocmV2
aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxl
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBpbmxpbmUgdm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpzZXRSZWdpc3RlcnMoUmVnaXN0
ZXIqIHJlZ2lzdGVycywgUmVnaXN0ZXIqIHJlZ2lzdGVyQXJyYXkpCiAgICAgewogICAgICAgICBB
U1NFUlQocmVnaXN0ZXJBcnJheSAhPSBkLT5yZWdpc3RlckFycmF5LmdldCgpKTsKLSAgICAgICAg
ZC0+cmVnaXN0ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSk7CisgICAgICAgIGQtPnJlZ2lzdGVy
QXJyYXkgPSByZWdpc3RlckFycmF5OwogICAgICAgICBkLT5yZWdpc3RlcnMgPSByZWdpc3RlcnM7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVD
aGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBTdHJ1Y3R1cmVDaGFpbjo6U3RydWN0dXJlQ2hhaW4oU3RydWN0dXJlCiAgICAgZm9yIChT
dHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3Rv
cmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDogYXNPYmplY3QoY3VycmVudC0+c3RvcmVkUHJv
dG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKICAgICAgICAgKytzaXplOwogICAgIAotICAgIG1fdmVj
dG9yLnNldChuZXcgUmVmUHRyPFN0cnVjdHVyZT5bc2l6ZSArIDFdKTsKKyAgICBtX3ZlY3RvciA9
IGFkb3B0QXJyYXlQdHIobmV3IFJlZlB0cjxTdHJ1Y3R1cmU+W3NpemUgKyAxXSk7CiAKICAgICBz
aXplX3QgaSA9IDA7CiAgICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDogYXNP
YmplY3QoY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzY0NTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC00Miw3ICs0Miw2IEBAIFNFVChXVEZfSEVBREVSUwogICAgIE51bGxQdHIuaAogICAgIE9T
QWxsb2NhdG9yLmgKICAgICBPd25BcnJheVB0ci5oCi0gICAgT3duQXJyYXlQdHJDb21tb24uaAog
ICAgIE93bkZhc3RNYWxsb2NQdHIuaAogICAgIE93blB0ci5oCiAgICAgT3duUHRyQ29tbW9uLmgK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmgJKHJldmlzaW9uIDc2NDU0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzUsNyArMTM1LDYgQEAgcHVibGljOgogICAgICAgICAsIHllYXIoMCkKICAgICAgICAgLCBp
c0RTVCgwKQogICAgICAgICAsIHV0Y09mZnNldCgwKQotICAgICAgICAsIHRpbWVab25lKDApCiAg
ICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQdHIu
aAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5
UHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCw5IEBACiAjaW5jbHVkZSAiQXNzZXJ0
aW9ucy5oIgogI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCiAjaW5jbHVkZSAiTnVsbFB0ci5oIgot
I2luY2x1ZGUgIk93blB0ckNvbW1vbi5oIgotI2luY2x1ZGUgIk93bkFycmF5UHRyQ29tbW9uLmgi
CisjaW5jbHVkZSAiUGFzc093bkFycmF5UHRyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCi0v
LyBSZW1vdmUgdGhpcyBvbmNlIHdlIG1ha2UgYWxsIFdlYktpdCBjb2RlIGNvbXBhdGlibGUgd2l0
aCBzdHJpY3RlciBydWxlcyBhYm91dCBPd25BcnJheVB0ci4KLSNkZWZpbmUgTE9PU0VfT1dOX0FS
UkFZX1BUUgotCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3Mg
UGFzc093bkFycmF5UHRyOwpAQCAtMTE1LDE2ICsxMTEsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgT3duCiAgICAgcmV0dXJuIHB0cjsKIH0KIAotI2lmZGVmIExPT1NF
X09XTl9BUlJBWV9QVFIKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIE93bkFycmF5
UHRyPFQ+OjpzZXQoUHRyVHlwZSBwdHIpCi17Ci0gICAgQVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0g
cHRyKTsKLSAgICBQdHJUeXBlIG9sZFB0ciA9IG1fcHRyOwotICAgIG1fcHRyID0gcHRyOwotICAg
IGRlbGV0ZU93bmVkUHRyKG9sZFB0cik7Ci19Ci0jZW5kaWYKLQogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIE93bkFycmF5UHRyPFQ+JiBPd25BcnJheVB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0
IFBhc3NPd25BcnJheVB0cjxUPiYgbykKIHsKICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQdHJDb21tb24uaAkocmV2
aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5UHRyQ29t
bW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgV1RGX093bkFycmF5UHRyQ29tbW9uX2gKLSNkZWZpbmUgV1RGX093bkFycmF5UHRyQ29tbW9u
X2gKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lk
IGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKQotewotICAgIHR5cGVkZWYgY2hhciBrbm93bltz
aXplb2YoVCkgPyAxIDogLTFdOwotICAgIGlmIChzaXplb2Yoa25vd24pKQotICAgICAgICBkZWxl
dGUgW10gcHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFdURl9Pd25B
cnJheVB0ckNvbW1vbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NPd25B
cnJheVB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc093
bkFycmF5UHRyLmgJKHJldmlzaW9uIDc2NDU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QYXNzT3duQXJyYXlQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAj
aW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgogI2luY2x1ZGUgIk51bGxQdHIuaCIKLSNpbmNsdWRlICJP
d25BcnJheVB0ckNvbW1vbi5oIgogI2luY2x1ZGUgIlR5cGVUcmFpdHMuaCIKIAogLy8gUmVtb3Zl
IHRoaXMgb25jZSB3ZSBtYWtlIGFsbCBXZWJLaXQgY29kZSBjb21wYXRpYmxlIHdpdGggc3RyaWN0
ZXIgcnVsZXMgYWJvdXQgUGFzc093bkFycmF5UHRyLgpAQCAtMzksNiArMzgsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIE93bkFycmF5UHRyOwogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093bkFycmF5UHRyOwogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gUGFzc093bkFycmF5UHRyPFQ+IGFkb3B0QXJyYXlQdHIoVCopOwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gdm9pZCBkZWxldGVPd25lZEFycmF5UHRyKFQqIHB0cik7CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNsYXNzIFBhc3NPd25BcnJheVB0ciB7CiBwdWJsaWM6CkBAIC0xOTQsNiArMTk0LDEz
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzT3duQXJyYXkKICAgICByZXR1cm4g
UGFzc093bkFycmF5UHRyPFQ+KHB0cik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB2b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKQoreworICAgIHR5cGVkZWYgY2hhciBr
bm93bltzaXplb2YoVCkgPyAxIDogLTFdOworICAgIGlmIChzaXplb2Yoa25vd24pKQorICAgICAg
ICBkZWxldGUgW10gcHRyOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgUGFzc093bkFycmF5UHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgUGFzc093
bkFycmF5UHRyPFU+JiBwKSAKIHsKICAgICByZXR1cm4gYWRvcHRBcnJheVB0cihzdGF0aWNfY2Fz
dDxUKj4ocC5sZWFrUHRyKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2aXNp
b24gNzY0NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDEtMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgT3duQXJyYXJ5UHRyLmggdXNlcyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1
ZGUgT3duUHRyQ29tbW9uLmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUyODY3CisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvT3duQXJy
YXlQdHJDb21tb24uaDogUmVtb3ZlZC4KKwogMjAxMS0wMS0xNyAgRGFuIEJlcm5zdGVpbiAgPG1p
dHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IE1hcmsgUm93ZS4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvT3duQXJyYXlQ
dHJDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL093bkFycmF5UHRyQ29tbW9uLmgJKHJldmlzaW9uIDc2NDU0KQorKysgU291
cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25BcnJheVB0ckNvbW1v
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9Pd25BcnJheVB0ckNvbW1vbi5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzY0NTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NSBA
QAorMjAxMS0wMS0yMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPd25BcnJhcnlQdHIuaCB1
c2VzIGRlbGV0ZU93bmVkUHRyIGJ1dCBkb2VzbuKAmXQgaW5jbHVkZSBPd25QdHJDb21tb24uaAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI4NjcKKwor
ICAgICAgICBSZXBsYWNlZCBhbGwgY2FsbHMgdG8gT3duQXJyYXlQdHI6OnNldCBhbmQgbG9vc2Ug
aW5zdGFudGlhdGlvbiBvZiBPd25BcnJheVB0ciBieQorICAgICAgICBjYWxscyB0byBvcGVyYXRv
cj0gYW5kIGFkb3B0QXJyYXlQdHIuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYv
T3duQXJyYXlQdHJDb21tb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9OUFY4
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50
QXJncyk6CisgICAgICAgIChfTlBOX0ludm9rZSk6CisgICAgICAgIChfTlBOX0ludm9rZURlZmF1
bHQpOgorICAgICAgICAoX05QTl9Db25zdHJ1Y3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Nj
cmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNh
bGw6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XaW5kb3dTaGVsbDo6Y3JlYXRlTmV3Q29udGV4dCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhOUE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpucE9iamVjdEludm9rZUltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUpOgorICAgICAgICAq
IGh0bWwvSFRNTEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lU2V0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVTZXRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5ld0Nvb3Jk
c0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6Om5ld0xlbmd0aEFycmF5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9MZW5ndGguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktp
dEJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRh
dGVTaGFkZXJTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNG
TGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREaXJ0eVJlY3RzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJM
aW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmdldE5v
cm1hbGl6ZWRUZXh0UnVuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9I
YXJmYnV6elNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2x5cGhzVG9BZHZhbmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpjYW5SZW5kZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dwdS9UZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OnVwZGF0ZVN1YlJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNv
bnRleHRTa2lhOjpyZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEJpdG1hcDo6dG8xNmJpdCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpnZXRDb250ZXh0TWVudUl0
ZW1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjppbml0aWFsaXplV2l0aFVzZXJEZWZhdWx0KToKKyAgICAgICAgKiBwbHVnaW5zL3dp
bi9QbHVnaW5QYWNrYWdlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmZldGNoSW5mbyk6CisKIDIwMTEtMDEtMjIgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25BcnJheVB0
ckNvbW1vbi5oCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzAs
MCBAQAotI2lmbmRlZiBXZWJDb3JlX0ZXRF9Pd25BcnJheVB0ckNvbW1vbl9oCi0jZGVmaW5lIFdl
YkNvcmVfRldEX093bkFycmF5UHRyQ29tbW9uX2gKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9P
d25BcnJheVB0ckNvbW1vbi5oPgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9OUFY4T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9OUFY4T2JqZWN0LmNwcAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTQgKzc4LDE0
IEBAIHN0YXRpYyB2b2lkIGZyZWVWOE5QT2JqZWN0KE5QT2JqZWN0KiBucE8KICAgICBmcmVlKHY4
TnBPYmplY3QpOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiBjcmVhdGVWYWx1
ZUxpc3RGcm9tVmFyaWFudEFyZ3MoY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90
IGFyZ3VtZW50Q291bnQsIE5QT2JqZWN0KiBvd25lcikKK3N0YXRpYyBQYXNzT3duQXJyYXlQdHI8
djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gY3JlYXRlVmFsdWVMaXN0RnJvbVZhcmlhbnRBcmdzKGNv
bnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUE9iamVj
dCogb3duZXIpCiB7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiBhcmd2ID0gbmV3IHY4OjpI
YW5kbGU8djg6OlZhbHVlPlthcmd1bWVudENvdW50XTsKKyAgICBPd25BcnJheVB0cjx2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gPiBhcmd2ID0gYWRvcHRBcnJheVB0cihuZXcgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+W2FyZ3VtZW50Q291bnRdKTsKICAgICBmb3IgKHVpbnQzMl90IGluZGV4ID0gMDsgaW5k
ZXggPCBhcmd1bWVudENvdW50OyBpbmRleCsrKSB7CiAgICAgICAgIGNvbnN0IE5QVmFyaWFudCog
YXJnID0gJmFyZ3VtZW50c1tpbmRleF07CiAgICAgICAgIGFyZ3ZbaW5kZXhdID0gY29udmVydE5Q
VmFyaWFudFRvVjhPYmplY3QoYXJnLCBvd25lcik7CiAgICAgfQotICAgIHJldHVybiBhcmd2Owor
ICAgIHJldHVybiBhcmd2LnJlbGVhc2UoKTsKIH0KIAogLy8gQ3JlYXRlIGFuIGlkZW50aWZpZXIg
KG51bGwgdGVybWluYXRlZCB1dGY4IGNoYXIqKSBmcm9tIHRoZSBOUElkZW50aWZpZXIuCkBAIC0x
ODgsNyArMTg4LDcgQEAgYm9vbCBfTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCogbnBPYgog
CiAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uPiBmdW5jdGlvbiA9IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChmdW5jdGlv
bk9iamVjdCk7Ci0gICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJndihj
cmVhdGVWYWx1ZUxpc3RGcm9tVmFyaWFudEFyZ3MoYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCBu
cE9iamVjdCkpOworICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3Yg
PSBjcmVhdGVWYWx1ZUxpc3RGcm9tVmFyaWFudEFyZ3MoYXJndW1lbnRzLCBhcmd1bWVudENvdW50
LCBucE9iamVjdCk7CiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0T2JqZWN0ID0gcHJv
eHktPmNhbGxGdW5jdGlvbihmdW5jdGlvbiwgdjhOcE9iamVjdC0+djhPYmplY3QsIGFyZ3VtZW50
Q291bnQsIGFyZ3YuZ2V0KCkpOwogCiAgICAgLy8gSWYgd2UgaGFkIGFuIGVycm9yLCByZXR1cm4g
ZmFsc2UuICBUaGUgc3BlYyBpcyBhIGxpdHRsZSB1bmNsZWFyIGhlcmUsIGJ1dCBzYXlzICJSZXR1
cm5zIHRydWUgaWYgdGhlIG1ldGhvZCB3YXMKQEAgLTIzNyw3ICsyMzcsNyBAQCBib29sIF9OUE5f
SW52b2tlRGVmYXVsdChOUFAgbnBwLCBOUE9iamVjCiAgICAgICAgIFY4UHJveHkqIHByb3h5ID0g
dG9WOFByb3h5KG5wT2JqZWN0KTsKICAgICAgICAgQVNTRVJUKHByb3h5KTsKIAotICAgICAgICBP
d25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmd2KGNyZWF0ZVZhbHVlTGlzdEZy
b21WYXJpYW50QXJncyhhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIG5wT2JqZWN0KSk7CisgICAg
ICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3YgPSBjcmVhdGVWYWx1
ZUxpc3RGcm9tVmFyaWFudEFyZ3MoYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCBucE9iamVjdCk7
CiAgICAgICAgIHJlc3VsdE9iamVjdCA9IHByb3h5LT5jYWxsRnVuY3Rpb24oZnVuY3Rpb24sIGZ1
bmN0aW9uT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd2LmdldCgpKTsKICAgICB9CiAgICAgLy8g
SWYgd2UgaGFkIGFuIGVycm9yLCByZXR1cm4gZmFsc2UuICBUaGUgc3BlYyBpcyBhIGxpdHRsZSB1
bmNsZWFyIGhlcmUsIGJ1dCBzYXlzICJSZXR1cm5zIHRydWUgaWYgdGhlIG1ldGhvZCB3YXMKQEAg
LTUzMyw3ICs1MzMsNyBAQCBib29sIF9OUE5fQ29uc3RydWN0KE5QUCBucHAsIE5QT2JqZWN0KiBu
CiAgICAgICAgICAgICBWOFByb3h5KiBwcm94eSA9IHRvVjhQcm94eShucE9iamVjdCk7CiAgICAg
ICAgICAgICBBU1NFUlQocHJveHkpOwogCi0gICAgICAgICAgICBPd25BcnJheVB0cjx2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gPiBhcmd2KGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyhhcmd1
bWVudHMsIGFyZ3VtZW50Q291bnQsIG5wT2JqZWN0KSk7CisgICAgICAgICAgICBPd25BcnJheVB0
cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmd2ID0gY3JlYXRlVmFsdWVMaXN0RnJvbVZhcmlh
bnRBcmdzKGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgbnBPYmplY3QpOwogICAgICAgICAgICAg
cmVzdWx0T2JqZWN0ID0gcHJveHktPm5ld0luc3RhbmNlKGN0b3IsIGFyZ3VtZW50Q291bnQsIGFy
Z3YuZ2V0KCkpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpj
YWxsKGJvbwogICAgIEFTU0VSVCh2YWx1ZS0+SXNGdW5jdGlvbigpKTsKIAogICAgIHY4OjpMb2Nh
bDx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uKHY4OjpGdW5jdGlvbjo6Q2FzdCgqdmFsdWUpKTsKLSAg
ICBPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdzKG5ldyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT5bbV9hcmd1bWVudHMuc2l6ZSgpXSk7CisgICAgT3duQXJyYXlQdHI8djg6Okhh
bmRsZTx2ODo6VmFsdWU+ID4gYXJncyA9IGFkb3B0QXJyYXlQdHIobmV3IHY4OjpIYW5kbGU8djg6
OlZhbHVlPlttX2FyZ3VtZW50cy5zaXplKCldKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICBhcmdzW2ldID0gbV9hcmd1bWVudHNb
aV0udjhWYWx1ZSgpOwogCkBAIC0xNTksNyArMTU5LDcgQEAgU2NyaXB0T2JqZWN0IFNjcmlwdEZ1
bmN0aW9uQ2FsbDo6Y29uc3RydQogICAgIEFTU0VSVCh2YWx1ZS0+SXNGdW5jdGlvbigpKTsKIAog
ICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGNvbnN0cnVjdG9yKHY4OjpGdW5jdGlvbjo6Q2Fz
dCgqdmFsdWUpKTsKLSAgICBPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdz
KG5ldyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT5bbV9hcmd1bWVudHMuc2l6ZSgpXSk7CisgICAgT3du
QXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJncyA9IGFkb3B0QXJyYXlQdHIobmV3
IHY4OjpIYW5kbGU8djg6OlZhbHVlPlttX2FyZ3VtZW50cy5zaXplKCldKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICBhcmdzW2ld
ID0gbV9hcmd1bWVudHNbaV0udjhWYWx1ZSgpOwogCkBAIC0xOTMsNyArMTkzLDcgQEAgU2NyaXB0
VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoYm9vbCYgaAogICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gb2JqZWN0ID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCk7CiAgICAg
djg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b24+OjpDYXN0KG1fZnVuY3Rpb24udjhWYWx1ZSgpKTsKIAotICAgIE93bkFycmF5UHRyPHY4OjpI
YW5kbGU8djg6OlZhbHVlPiA+IGFyZ3MobmV3IHY4OjpIYW5kbGU8djg6OlZhbHVlPlttX2FyZ3Vt
ZW50cy5zaXplKCldKTsKKyAgICBPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBh
cmdzID0gYWRvcHRBcnJheVB0cihuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+W21fYXJndW1lbnRz
LnNpemUoKV0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgp
OyArK2kpCiAgICAgICAgIGFyZ3NbaV0gPSBtX2FyZ3VtZW50c1tpXS52OFZhbHVlKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3Bw
CShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2lu
ZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNyArMzU4LDcgQEAgdjg6OlBlcnNp
c3RlbnQ8djg6OkNvbnRleHQ+IFY4RE9NV2luZG93UwogCiAgICAgLy8gRHluYW1pY2FsbHkgdGVs
bCB2OCBhYm91dCBvdXIgZXh0ZW5zaW9ucyBub3cuCiAgICAgY29uc3QgVjhFeHRlbnNpb25zJiBl
eHRlbnNpb25zID0gVjhQcm94eTo6ZXh0ZW5zaW9ucygpOwotICAgIE93bkFycmF5UHRyPGNvbnN0
IGNoYXIqPiBleHRlbnNpb25OYW1lcyhuZXcgY29uc3QgY2hhcipbZXh0ZW5zaW9ucy5zaXplKCld
KTsKKyAgICBPd25BcnJheVB0cjxjb25zdCBjaGFyKj4gZXh0ZW5zaW9uTmFtZXMgPSBhZG9wdEFy
cmF5UHRyKG5ldyBjb25zdCBjaGFyKltleHRlbnNpb25zLnNpemUoKV0pOwogICAgIGludCBpbmRl
eCA9IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIC8vIEVuc3VyZSBvdXIgZGF0ZSBleHRlbnNpb24gaXMgYWx3YXlzIGFsbG93
ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcAkocmV2
aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gbnBPYmplY3RJbnYKIAogICAgIC8vIFdyYXAgdXAgcGFyYW1ldGVycy4KICAgICBp
bnQgbnVtQXJncyA9IGFyZ3MuTGVuZ3RoKCk7Ci0gICAgT3duQXJyYXlQdHI8TlBWYXJpYW50PiBu
cEFyZ3MobmV3IE5QVmFyaWFudFtudW1BcmdzXSk7CisgICAgT3duQXJyYXlQdHI8TlBWYXJpYW50
PiBucEFyZ3MgPSBhZG9wdEFycmF5UHRyKG5ldyBOUFZhcmlhbnRbbnVtQXJnc10pOwogCiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1BcmdzOyBpKyspCiAgICAgICAgIGNvbnZlcnRWOE9iamVj
dFRvTlBWYXJpYW50KGFyZ3NbaV0sIG5wT2JqZWN0LCAmbnBBcmdzW2ldKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOb2RlRmlsdGVyQ29uZGl0aW9uLmNw
cAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5vZGVG
aWx0ZXJDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHNob3J0
IFY4Tm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSgKICAgICB9CiAKICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCktPkdsb2Jh
bCgpOwotICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3MobmV3IHY4
OjpIYW5kbGU8djg6OlZhbHVlPlsxXSk7CisgICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6
VmFsdWU+ID4gYXJncyA9IGFkb3B0QXJyYXlQdHIobmV3IHY4OjpIYW5kbGU8djg6OlZhbHVlPlsx
XSk7CiAgICAgYXJnc1swXSA9IHRvVjgobm9kZSk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gcmVzdWx0ID0gVjhQcm94eTo6Y2FsbEZ1bmN0aW9uV2l0aG91dEZyYW1lKGNhbGxiYWNrLCBv
YmplY3QsIDEsIGFyZ3MuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFF
bGVtZW50LmNwcAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
cmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBIVE1M
QXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgICAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmVjdCIpKQogICAgICAgICAgICAgbV9zaGFwZSA9
IFJlY3Q7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY29vcmRzQXR0cikgewotICAg
ICAgICBtX2Nvb3Jkcy5zZXQobmV3Q29vcmRzQXJyYXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwg
bV9jb29yZHNMZW4pKTsKKyAgICAgICAgbV9jb29yZHMgPSBuZXdDb29yZHNBcnJheShhdHRyLT52
YWx1ZSgpLnN0cmluZygpLCBtX2Nvb3Jkc0xlbik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gYWx0QXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0cikgewogICAgICAg
ICAvLyBEbyBub3RoaW5nLgogICAgIH0gZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRnJhbWVTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDEy
ICs3NSwxMiBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0CiB7CiAg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSByb3dzQXR0cikgewogICAgICAgICBpZiAoIWF0dHItPmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBtX3Jvd0xlbmd0aHMuc2V0KG5ld0xlbmd0aEFycmF5KGF0
dHItPnZhbHVlKCkuc3RyaW5nKCksIG1fdG90YWxSb3dzKSk7CisgICAgICAgICAgICBtX3Jvd0xl
bmd0aHMgPSBuZXdMZW5ndGhBcnJheShhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBtX3RvdGFsUm93
cyk7CiAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjb2xzQXR0cikgewogICAgICAgICBpZiAoIWF0dHIt
PmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBtX2NvbExlbmd0aHMuc2V0KG5ld0xlbmd0aEFycmF5
KGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIG1fdG90YWxDb2xzKSk7CisgICAgICAgICAgICBtX2Nv
bExlbmd0aHMgPSBuZXdMZW5ndGhBcnJheShhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBtX3RvdGFs
Q29scyk7CiAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBmcmFtZWJvcmRlckF0dHIpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjg5LDcgKzE2ODksNyBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTCiAgICAgR0MzRGludCBu
dW1TaGFkZXJzID0gMDsKICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8o
cHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTLCAmbnVtU2hhZGVy
cyk7CiAgICAgaWYgKG51bVNoYWRlcnMpIHsKLSAgICAgICAgT3duQXJyYXlQdHI8UGxhdGZvcm0z
RE9iamVjdD4gc2hhZGVycyhuZXcgUGxhdGZvcm0zRE9iamVjdFtudW1TaGFkZXJzXSk7CisgICAg
ICAgIE93bkFycmF5UHRyPFBsYXRmb3JtM0RPYmplY3Q+IHNoYWRlcnMgPSBhZG9wdEFycmF5UHRy
KG5ldyBQbGF0Zm9ybTNET2JqZWN0W251bVNoYWRlcnNdKTsKICAgICAgICAgR0MzRHNpemVpIGNv
dW50ID0gMDsKICAgICAgICAgbV9jb250ZXh0LT5nZXRBdHRhY2hlZFNoYWRlcnMob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBudW1TaGFkZXJzLCAmY291bnQsIHNoYWRlcnMuZ2V0KCkpOwogICAgICAg
ICBpZiAoY291bnQgIT0gbnVtU2hhZGVycykKQEAgLTQ1MzMsNyArNDUzMyw3IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzaW11bGF0ZVZlcnQKICAgICAgICAgfHwgc3RhdGUudmFsdWVb
MV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0KICAgICAgICAgfHwgc3RhdGUudmFs
dWVbMl0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KICAgICAgICAgfHwgc3RhdGUu
dmFsdWVbM10gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10pIHsKLSAgICAgICAgT3du
QXJyYXlQdHI8R0MzRGZsb2F0PiBidWZmZXJEYXRhKG5ldyBHQzNEZmxvYXRbKG51bVZlcnRleCAr
IDEpICogNF0pOworICAgICAgICBPd25BcnJheVB0cjxHQzNEZmxvYXQ+IGJ1ZmZlckRhdGEgPSBh
ZG9wdEFycmF5UHRyKG5ldyBHQzNEZmxvYXRbKG51bVZlcnRleCArIDEpICogNF0pOwogICAgICAg
ICBmb3IgKEdDM0RzaXplaSBpaSA9IDA7IGlpIDwgbnVtVmVydGV4ICsgMTsgKytpaSkgewogICAg
ICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDRdID0gc3RhdGUudmFsdWVbMF07CiAgICAgICAgICAg
ICBidWZmZXJEYXRhW2lpICogNCArIDFdID0gc3RhdGUudmFsdWVbMV07CkBAIC00NTg4LDcgKzQ1
ODgsNyBAQCBXZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnCiB9CiAKIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6TFJVSW1hZ2VCdWZmZXJD
YWNoZShpbnQgY2FwYWNpdHkpCi0gICAgOiBtX2J1ZmZlcnMobmV3IE93blB0cjxJbWFnZUJ1ZmZl
cj5bY2FwYWNpdHldKQorICAgIDogbV9idWZmZXJzKGFkb3B0QXJyYXlQdHIobmV3IE93blB0cjxJ
bWFnZUJ1ZmZlcj5bY2FwYWNpdHldKSkKICAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCiB7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAJKHJldmlzaW9uIDc2NDU0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9P
d25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV1RGOwpAQCAtODMsNyArODQsNyBAQCBzdGF0aWMgaW50IGNvdW50Q2hhcmFj
dGVyKGNvbnN0IFVDaGFyKiBkCiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1MZW5ndGgqIG5ld0Nv
b3Jkc0FycmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikKK1Bhc3NPd25BcnJheVB0
cjxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikK
IHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgY29uc3QgVUNo
YXIqIGRhdGEgPSBzdHJpbmcuY2hhcmFjdGVycygpOwpAQCAtMTAwLDcgKzEwMSw3IEBAIExlbmd0
aCogbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiBzdHIKICAgICBzdHIgPSBzdHItPnNpbXBs
aWZ5V2hpdGVTcGFjZSgpOwogCiAgICAgbGVuID0gY291bnRDaGFyYWN0ZXIoc3RyLT5jaGFyYWN0
ZXJzKCksIHN0ci0+bGVuZ3RoKCksICcgJykgKyAxOwotICAgIExlbmd0aCogciA9IG5ldyBMZW5n
dGhbbGVuXTsKKyAgICBPd25BcnJheVB0cjxMZW5ndGg+IHIgPSBhZG9wdEFycmF5UHRyKG5ldyBM
ZW5ndGhbbGVuXSk7CiAKICAgICBpbnQgaSA9IDA7CiAgICAgdW5zaWduZWQgcG9zID0gMDsKQEAg
LTExNCwxMCArMTE1LDEwIEBAIExlbmd0aCogbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiBz
dHIKIAogICAgIEFTU0VSVChpID09IGxlbiAtIDEpOwogCi0gICAgcmV0dXJuIHI7CisgICAgcmV0
dXJuIHIucmVsZWFzZSgpOwogfQogCi1MZW5ndGgqIG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBpbnQmIGxlbikKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0xlbmd0aEFy
cmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikKIHsKICAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gc3RyID0gc3RyaW5nLmltcGwoKS0+c2ltcGxpZnlXaGl0ZVNwYWNlKCk7CiAgICAgaWYg
KCFzdHItPmxlbmd0aCgpKSB7CkBAIC0xMjYsNyArMTI3LDcgQEAgTGVuZ3RoKiBuZXdMZW5ndGhB
cnJheShjb25zdCBTdHJpbmcmIHN0cgogICAgIH0KIAogICAgIGxlbiA9IGNvdW50Q2hhcmFjdGVy
KHN0ci0+Y2hhcmFjdGVycygpLCBzdHItPmxlbmd0aCgpLCAnLCcpICsgMTsKLSAgICBMZW5ndGgq
IHIgPSBuZXcgTGVuZ3RoW2xlbl07CisgICAgT3duQXJyYXlQdHI8TGVuZ3RoPiByID0gYWRvcHRB
cnJheVB0cihuZXcgTGVuZ3RoW2xlbl0pOwogCiAgICAgaW50IGkgPSAwOwogICAgIHVuc2lnbmVk
IHBvcyA9IDA7CkBAIC0xNDUsNyArMTQ2LDcgQEAgTGVuZ3RoKiBuZXdMZW5ndGhBcnJheShjb25z
dCBTdHJpbmcmIHN0cgogICAgIGVsc2UKICAgICAgICAgbGVuLS07CiAKLSAgICByZXR1cm4gcjsK
KyAgICByZXR1cm4gci5yZWxlYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJh
eVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE5Myw4ICsxOTQsOCBAQCBwcml2
YXRlOgogICAgIGludCBtX3ZhbHVlOwogfTsKIAotTGVuZ3RoKiBuZXdDb29yZHNBcnJheShjb25z
dCBTdHJpbmcmLCBpbnQmIGxlbik7Ci1MZW5ndGgqIG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmlu
ZyYsIGludCYgbGVuKTsKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNv
bnN0IFN0cmluZyYsIGludCYgbGVuKTsKK1Bhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0xlbmd0
aEFycmF5KGNvbnN0IFN0cmluZyYsIGludCYgbGVuKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJy
aWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QU5HTEVXZWJLaXRCcmlkZ2UuY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTMsNyArOTMsNyBAQCBib29sIEFOR0xFV2ViS2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNv
CiAgICAgICAgIGludCBsb2dTaXplID0gMDsKICAgICAgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBT
SF9JTkZPX0xPR19MRU5HVEgsICZsb2dTaXplKTsKICAgICAgICAgaWYgKGxvZ1NpemUgPiAxKSB7
Ci0gICAgICAgICAgICBPd25BcnJheVB0cjxjaGFyPiBsb2dCdWZmZXIobmV3IGNoYXJbbG9nU2l6
ZV0pOworICAgICAgICAgICAgT3duQXJyYXlQdHI8Y2hhcj4gbG9nQnVmZmVyID0gYWRvcHRBcnJh
eVB0cihuZXcgY2hhcltsb2dTaXplXSk7CiAgICAgICAgICAgICBpZiAobG9nQnVmZmVyKSB7CiAg
ICAgICAgICAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBsb2dCdWZmZXIuZ2V0KCkpOwog
ICAgICAgICAgICAgICAgIHNoYWRlclZhbGlkYXRpb25Mb2cgPSBsb2dCdWZmZXIuZ2V0KCk7CkBA
IC0xMDUsNyArMTA1LDcgQEAgYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJT
bwogICAgIGludCB0cmFuc2xhdGlvbkxlbmd0aCA9IDA7CiAgICAgU2hHZXRJbmZvKGNvbXBpbGVy
LCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEgsICZ0cmFuc2xhdGlvbkxlbmd0aCk7CiAgICAgaWYgKHRy
YW5zbGF0aW9uTGVuZ3RoID4gMSkgewotICAgICAgICBPd25BcnJheVB0cjxjaGFyPiB0cmFuc2xh
dGlvbkJ1ZmZlcihuZXcgY2hhclt0cmFuc2xhdGlvbkxlbmd0aF0pOworICAgICAgICBPd25BcnJh
eVB0cjxjaGFyPiB0cmFuc2xhdGlvbkJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbdHJh
bnNsYXRpb25MZW5ndGhdKTsKICAgICAgICAgaWYgKCF0cmFuc2xhdGlvbkJ1ZmZlcikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyLCB0
cmFuc2xhdGlvbkJ1ZmZlci5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAJ
KHJldmlzaW9uIDc2NDU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw3
IEBAIHN0YXRpYyB2b2lkIGdldERpcnR5UmVjdHMoSFdORCB3aW5kb3csIFYKICAgICB9CiAKICAg
ICBEV09SRCBkYXRhU2l6ZSA9IEdldFJlZ2lvbkRhdGEocmVnaW9uLmdldCgpLCAwLCAwKTsKLSAg
ICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiByZWdpb25EYXRhQnVmZmVyKG5ldyB1bnNpZ25l
ZCBjaGFyW2RhdGFTaXplXSk7CisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcmVnaW9u
RGF0YUJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbZGF0YVNpemVdKTsK
ICAgICBSR05EQVRBKiByZWdpb25EYXRhID0gcmVpbnRlcnByZXRfY2FzdDxSR05EQVRBKj4ocmVn
aW9uRGF0YUJ1ZmZlci5nZXQoKSk7CiAgICAgaWYgKCFHZXRSZWdpb25EYXRhKHJlZ2lvbi5nZXQo
KSwgZGF0YVNpemUsIHJlZ2lvbkRhdGEpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJM
aW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCShyZXZpc2lvbiA3NjQ1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0
Q29udHJvbGxlckxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDcgKzM2OSw3IEBAIGNv
bnN0IFRleHRSdW4mIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2UKICAgICAgICAgc291cmNlVGV4
dCA9IG5vcm1hbGl6ZWRTdHJpbmcuZ2V0QnVmZmVyKCk7CiAgICAgfQogCi0gICAgbm9ybWFsaXpl
ZEJ1ZmZlci5zZXQobmV3IFVDaGFyW25vcm1hbGl6ZWRCdWZmZXJMZW5ndGggKyAxXSk7CisgICAg
bm9ybWFsaXplZEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IFVDaGFyW25vcm1hbGl6ZWRCdWZm
ZXJMZW5ndGggKyAxXSk7CiAKICAgICBub3JtYWxpemVTcGFjZXNBbmRNaXJyb3JDaGFycyhzb3Vy
Y2VUZXh0LCBvcmlnaW5hbFJ1bi5ydGwoKSwgbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbm9ybWFs
aXplZEJ1ZmZlckxlbmd0aCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcAkocmV2aXNpb24g
NzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJm
YnV6elNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyB2b2lk
IGdseXBoc1RvQWR2YW5jZXMoSEJfRm9udCBoYkYKICAgICBmb250LT5zZXR1cFBhaW50KCZwYWlu
dCk7CiAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNv
ZGluZyk7CiAKLSAgICBPd25BcnJheVB0cjx1aW50MTZfdD4gZ2x5cGhzMTYobmV3IHVpbnQxNl90
W251bUdseXBoc10pOworICAgIE93bkFycmF5UHRyPHVpbnQxNl90PiBnbHlwaHMxNiA9IGFkb3B0
QXJyYXlQdHIobmV3IHVpbnQxNl90W251bUdseXBoc10pOwogICAgIGlmICghZ2x5cGhzMTYuZ2V0
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5
cGhzOyArK2kpCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RhdGljIEhCX0Jvb2wgY2FuUmVuZGVyKEhC
X0ZvbnQgaGJGb250LAogICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsKICAgICBwYWludC5z
ZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7CiAKLSAgICBPd25B
cnJheVB0cjx1aW50MTZfdD4gZ2x5cGhzMTYobmV3IHVpbnQxNl90W2xlbmd0aF0pOworICAgIE93
bkFycmF5UHRyPHVpbnQxNl90PiBnbHlwaHMxNiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQxNl90
W2xlbmd0aF0pOwogICAgIGlmICghZ2x5cGhzMTYuZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIGludCBudW1HbHlwaHMgPSBwYWludC50ZXh0VG9HbHlwaHMoY2hhcmFjdGVycywgbGVuZ3Ro
ICogc2l6ZW9mKHVpbnQxNl90KSwgZ2x5cGhzMTYuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAkocmV2aXNpb24gNzY0
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIFRleHR1cmU6OnVwZGF0ZVN1
YlJlY3Qodm9pZCogcGl4ZWxzCiAgICAgaW50IHRlbXBCdWZmU2l6ZSA9IC8vIFRlbXBvcmFyeSBi
dWZmZXIgc2l6ZSBpcyB0aGUgc21hbGxlciBvZiB0aGUgbWF4IHRleHR1cmUgc2l6ZSBvciB0aGUg
dXBkYXRlUmVjdFNhbml0aXplZAogICAgICAgICBtaW4obV90aWxlcy5tYXhUZXh0dXJlU2l6ZSgp
LCBtX3RpbGVzLmJvcmRlclRleGVscygpICsgdXBkYXRlUmVjdFNhbml0aXplZC53aWR0aCgpKSAq
CiAgICAgICAgIG1pbihtX3RpbGVzLm1heFRleHR1cmVTaXplKCksIG1fdGlsZXMuYm9yZGVyVGV4
ZWxzKCkgKyB1cGRhdGVSZWN0U2FuaXRpemVkLmhlaWdodCgpKTsKLSAgICBPd25BcnJheVB0cjx1
aW50MzJfdD4gdGVtcEJ1ZmYobmV3IHVpbnQzMl90W3RlbXBCdWZmU2l6ZV0pOworICAgIE93bkFy
cmF5UHRyPHVpbnQzMl90PiB0ZW1wQnVmZiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQzMl90W3Rl
bXBCdWZmU2l6ZV0pOwogCiAgICAgZm9yIChpbnQgdGlsZSA9IDA7IHRpbGUgPCBtX3RpbGVzLm51
bVRpbGVzKCk7IHRpbGUrKykgewogICAgICAgICAvLyBJbnRlcnNlY3Qgd2l0aCB0aWxlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHJldmlzaW9uIDc2NDU0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1JlCiAgICAgaW50IHJvd0J5dGVzID0gbV9jdXJy
ZW50V2lkdGggKiA0OwogICAgIGludCB0b3RhbEJ5dGVzID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRI
ZWlnaHQ7CiAKLSAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBwaXhlbHMobmV3IHVuc2ln
bmVkIGNoYXJbdG90YWxCeXRlc10pOworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBp
eGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc10pOwogICAg
IGlmICghcGl4ZWxzKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcAkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjUs
NyArODY1LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZWFkYmFja0hhcmR3YQogICAg
IGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0Jp
dG1hcCh0cnVlKTsKICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKICAgICBpbnQg
d2lkdGggPSBiaXRtYXAud2lkdGgoKSwgaGVpZ2h0ID0gYml0bWFwLmhlaWdodCgpOwotICAgIE93
bkFycmF5UHRyPHVpbnQzMl90PiBidWYobmV3IHVpbnQzMl90W3dpZHRoXSk7CisgICAgT3duQXJy
YXlQdHI8dWludDMyX3Q+IGJ1ZiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQzMl90W3dpZHRoXSk7
CiAgICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29u
dGV4dCgpOwogICAgIG1fZ3B1Q2FudmFzLT5iaW5kRnJhbWVidWZmZXIoKTsKICAgICAvLyBGbGlw
cyB0aGUgaW1hZ2UgdmVydGljYWxseS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcAkocmV2aXNpb24gNzY0
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRt
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAgYm9vbCBTaGFyZWRCaXRt
YXA6OnRvMTZiaXQoKQogICAgIGludCB3aWR0aCA9IG5ld0JtcEluZm8ud2lkdGgoKTsKICAgICBp
bnQgcGFkZGVkV2lkdGggPSBuZXdCbXBJbmZvLnBhZGRlZFdpZHRoKCk7CiAgICAgaW50IGJ1ZmZl
clNpemUgPSBwYWRkZWRXaWR0aCAqIG5ld0JtcEluZm8uaGVpZ2h0KCk7Ci0gICAgT3duQXJyYXlQ
dHI8dW5zaWduZWQ+IG5ld1BpeGVsRGF0YShuZXcgdW5zaWduZWRbYnVmZmVyU2l6ZSAvIDJdKTsK
KyAgICBPd25BcnJheVB0cjx1bnNpZ25lZD4gbmV3UGl4ZWxEYXRhID0gYWRvcHRBcnJheVB0cihu
ZXcgdW5zaWduZWRbYnVmZmVyU2l6ZSAvIDJdKTsKICAgICB2b2lkKiBuZXdQaXhlbHMgPSBuZXdQ
aXhlbERhdGEuZ2V0KCk7CiAKICAgICBpZiAoIW5ld1BpeGVscykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAkocmV2aXNpb24gNzY0NTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgQ29udGV4dE1lbnU6OmdldENvbnRleHRN
ZW51SXRlbXMoSE0KICAgICAgICAgfQogCiAgICAgICAgIGludCBtZW51U3RyaW5nTGVuZ3RoID0g
aW5mby5jY2ggKyAxOwotICAgICAgICBPd25BcnJheVB0cjxXQ0hBUj4gbWVudVN0cmluZyhuZXcg
V0NIQVJbbWVudVN0cmluZ0xlbmd0aF0pOworICAgICAgICBPd25BcnJheVB0cjxXQ0hBUj4gbWVu
dVN0cmluZyA9IGFkb3B0QXJyYXlQdHIobmV3IFdDSEFSW21lbnVTdHJpbmdMZW5ndGhdKTsKICAg
ICAgICAgaW5mby5kd1R5cGVEYXRhID0gbWVudVN0cmluZy5nZXQoKTsKICAgICAgICAgaW5mby5j
Y2ggPSBtZW51U3RyaW5nTGVuZ3RoOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vTG9nZ2luZ1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0xvZ2dpbmdXaW4uY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZVdpdGhVc2VyRGVmCiAgICAgaWYgKCFsZW5n
dGgpCiAgICAgICAgIHJldHVybjsKIAotICAgIE93bkFycmF5UHRyPGNoYXI+IGJ1ZmZlcihuZXcg
Y2hhcltsZW5ndGhdKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBidWZmZXIgPSBhZG9wdEFycmF5
UHRyKG5ldyBjaGFyW2xlbmd0aF0pOwogCiAgICAgaWYgKCFHZXRFbnZpcm9ubWVudFZhcmlhYmxl
QShjaGFubmVsLmRlZmF1bHROYW1lLCBidWZmZXIuZ2V0KCksIGxlbmd0aCkpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpblBhY2thZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAg
Ym9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQogICAgIGlmICh2ZXJzaW9uSW5mb1NpemUg
PT0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4gdmVy
c2lvbkluZm9EYXRhKG5ldyBjaGFyW3ZlcnNpb25JbmZvU2l6ZV0pOworICAgIE93bkFycmF5UHRy
PGNoYXI+IHZlcnNpb25JbmZvRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbdmVyc2lvbklu
Zm9TaXplXSk7CiAKICAgICBpZiAoIUdldEZpbGVWZXJzaW9uSW5mb1coY29uc3RfY2FzdDxVQ2hh
cio+KG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSwKICAgICAgICAgICAg
IDAsIHZlcnNpb25JbmZvU2l6ZSwgdmVyc2lvbkluZm9EYXRhLmdldCgpKSkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDc2NDU0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDEtMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgT3duQXJyYXJ5UHRyLmggdXNlcyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGlu
Y2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUyODY3CisKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS93
aW4vTmV0c2NhcGVQbHVnaW5Nb2R1bGVXaW4uY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2Fw
ZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2luSW5mbyk6CisKIDIwMTEtMDEtMjIgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2Vp
bmlnLgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvd2luL05l
dHNjYXBlUGx1Z2luTW9kdWxlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvUGx1Z2lucy9OZXRzY2FwZS93aW4vTmV0c2NhcGVQbHVnaW5Nb2R1bGVXaW4uY3BwCShy
ZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L3dpbi9OZXRzY2FwZVBsdWdpbk1vZHVsZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcg
KzU5LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2luSW5mbwogICAgIGlm
ICghdmVyc2lvbkluZm9TaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBPd25BcnJh
eVB0cjxjaGFyPiB2ZXJzaW9uSW5mb0RhdGEobmV3IGNoYXJbdmVyc2lvbkluZm9TaXplXSk7Cisg
ICAgT3duQXJyYXlQdHI8Y2hhcj4gdmVyc2lvbkluZm9EYXRhID0gYWRvcHRBcnJheVB0cihuZXcg
Y2hhclt2ZXJzaW9uSW5mb1NpemVdKTsKICAgICBpZiAoITo6R2V0RmlsZVZlcnNpb25JbmZvVyhw
YXRoQ29weS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2ZXJzaW9uSW5mb1Np
emUsIHZlcnNpb25JbmZvRGF0YS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRl
eDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNzY0NTQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wMS0yMiAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBPd25BcnJhcnlQdHIuaCB1c2VzIGRlbGV0ZU93bmVkUHRy
IGJ1dCBkb2VzbuKAmXQgaW5jbHVkZSBPd25QdHJDb21tb24uaAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI4NjcKKworICAgICAgICBSZXBsYWNlZCBh
bGwgY2FsbHMgdG8gT3duQXJyYXlQdHI6OnNldCBhbmQgbG9vc2UgaW5zdGFudGlhdGlvbiBvZiBP
d25BcnJheVB0ciBieQorICAgICAgICBjYWxscyB0byBvcGVyYXRvcj0gYW5kIGFkb3B0QXJyYXlQ
dHIuCisKKyAgICAgICAgKiBXZWJIaXN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkhpc3Rvcnk6Om9y
ZGVyZWRMYXN0VmlzaXRlZERheXMpOgorICAgICAgICAqIFdlYlByZWZlcmVuY2VzLmNwcDoKKyAg
ICAgICAgKFdlYlByZWZlcmVuY2VzOjpjb3B5V2ViS2l0UHJlZmVyZW5jZXNUb0NGUHJlZmVyZW5j
ZXMpOgorCiAyMDExLTAxLTIxICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0u
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkhpc3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkhpc3RvcnkuY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dl
Ykhpc3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzYsNyArNDc2LDcgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBXZWJIaXN0b3J5OjpvcgogCiAgICAgKmNvdW50ID0gZGF0ZUNvdW50
OwogICAgIGlmICghbV9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzKSB7Ci0gICAgICAgIG1fb3JkZXJl
ZExhc3RWaXNpdGVkRGF5cy5zZXQobmV3IERBVEVbZGF0ZUNvdW50XSk7CisgICAgICAgIG1fb3Jk
ZXJlZExhc3RWaXNpdGVkRGF5cyA9IGFkb3B0QXJyYXlQdHIobmV3IERBVEVbZGF0ZUNvdW50XSk7
CiAgICAgICAgIERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IG1f
ZW50cmllc0J5RGF0ZS5lbmQoKS5rZXlzKCk7CiAgICAgICAgIGludCBpID0gMDsKICAgICAgICAg
Zm9yIChEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IG1fZW50cmll
c0J5RGF0ZS5iZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0LCArK2kpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC93aW4vV2ViUHJlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiA3NjQ1NCkKKysrIFNvdXJjZS9X
ZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYzLDggKzQ2
Myw4IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6OmNvcHlXZWJLaXRQcmVmZXJlbmMKICAgICBDRlN0
cmluZ1JlZiBkaWRSZW1vdmVEZWZhdWx0c0tleSA9IENGU1RSKFdlYktpdERpZE1pZ3JhdGVEZWZh
dWx0U2V0dGluZ3NGcm9tU2FmYXJpM0JldGFQcmVmZXJlbmNlS2V5KTsKICAgICBib29sIG9taXRE
ZWZhdWx0cyA9ICFib29sZWFuVmFsdWVGb3JQcmVmZXJlbmNlc1ZhbHVlKENGRGljdGlvbmFyeUdl
dFZhbHVlKGRpY3QsIGRpZFJlbW92ZURlZmF1bHRzS2V5KSk7CiAKLSAgICBPd25BcnJheVB0cjxD
RlR5cGVSZWY+IGtleXMobmV3IENGVHlwZVJlZltjb3VudF0pOwotICAgIE93bkFycmF5UHRyPENG
VHlwZVJlZj4gdmFsdWVzKG5ldyBDRlR5cGVSZWZbY291bnRdKTsKKyAgICBPd25BcnJheVB0cjxD
RlR5cGVSZWY+IGtleXMgPSBhZG9wdEFycmF5UHRyKG5ldyBDRlR5cGVSZWZbY291bnRdKTsKKyAg
ICBPd25BcnJheVB0cjxDRlR5cGVSZWY+IHZhbHVlcyA9IGFkb3B0QXJyYXlQdHIobmV3IENGVHlw
ZVJlZltjb3VudF0pOwogICAgIENGRGljdGlvbmFyeUdldEtleXNBbmRWYWx1ZXMoZGljdCwga2V5
cy5nZXQoKSwgdmFsdWVzLmdldCgpKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81438</attachid>
            <date>2011-02-06 18:06:47 -0800</date>
            <delta_ts>2011-02-06 20:35:14 -0800</delta_ts>
            <desc>fixed cr-mac build</desc>
            <filename>bug-52867-20110206180646.patch</filename>
            <type>text/plain</type>
            <size>47807</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAK
KzIwMTEtMDItMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmggdXNl
cyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisKKyAg
ICAgICAgUmVtb3ZlZCBMT09TRV9PV05fQVJSQVlfUFRSIGFuZCBPd25BcnJheVB0cjxUPjo6c2V0
LiBSZXBsYWNlZCBhbGwgY2FsbHMgdG8gT3duQXJyYXlQdHI6OnNldAorICAgICAgICBhbmQgbG9v
c2UgaW5zdGFudGlhdGlvbiBvZiBPd25BcnJheVB0ciBieSBjYWxscyB0byBvcGVyYXRvcj0gYW5k
IGFkb3B0QXJyYXlQdHIuIEFsc28gcmVtb3ZlZAorICAgICAgICBPd25BcnJheVB0ckNvbW1vbi5o
IHNpbmNlIFBhc3NPd25BcnJheVB0ci5oIG5lZWRzIHRvIGluY2x1ZGUgT3duQXJyYXlQdHIuaCBh
bmQgdGhlcmUgaXMKKyAgICAgICAgbm8gcG9pbnQgaW4gcHV0dGluZyBkZWxldGVPd25lZEFycmF5
UHRyIGludG8gYSBzZXBhcmF0ZSBoZWFkZXIuCisgICAgICAgIAorICAgICAgICBOb3RlOiBpZiB0
aGlzIHBhdGNoIGJyZWFrcyBidWlsZCwgdGhlIGNvZGUgaXMgZWl0aGVyIGluc3RpYW50aWF0aW5n
IE93bkFycmF5UHRyCisgICAgICAgIHdpdGhvdXQgY2FsbGluZyBhZG9wdEFycmF5UHRyIG9yIGNh
bGxpbmcgc2V0IG9uIEFycmF5T3duUHRyIGluc3RlYWQgb2Ygb3BlcmF0b3I9LgorCisgICAgICAg
IE5vIHRlc3RzIGFyZSBhZGRlZCBzaW5jZSB0aGlzIGlzIGEgcmVmYWN0b3JpbmcuCisKKyAgICAg
ICAgKiBBUEkvSlNTdHJpbmdSZWZDRi5jcHA6CisgICAgICAgIChKU1N0cmluZ0NyZWF0ZVdpdGhD
RlN0cmluZyk6IENhbGxzIGFkb3B0QXJyYXlQdHIuCisgICAgICAgICogR05VbWFrZWZpbGUuYW06
IFJlbW92ZWQgT3duQXJyYXlQdHJDb21tb24uaAorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
cHJvai9XVEYvV1RGLnZjcHJvajogRGl0dG8uCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogcnVudGltZS9Bcmd1bWVu
dHMuY3BwOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KTogQ2FsbHMg
YWRvcHRBcnJheVB0ci4KKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAo
SlNDOjpBcmd1bWVudHM6OmNvcHlSZWdpc3RlcnMpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKTogRGl0dG8uCisgICAgICAgICogcnVu
dGltZS9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTVmFyaWFibGVPYmplY3Q6
OnNldFJlZ2lzdGVycyk6IENhbGxzIG9wZXJhdG9yPSBpbnN0ZWFkIG9mIHNldC4KKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlQ2hh
aW46OlN0cnVjdHVyZUNoYWluKTogRGl0dG8uCisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIHd0Zi9EYXRlTWF0aC5oOgorICAgICAgICAoSlNDOjpHcmVnb3JpYW5EYXRl
VGltZTo6R3JlZ29yaWFuRGF0ZVRpbWUpOiBObyBsb25nZXIgaW5zdG5hdGlhdGVzIE93bkFycmF5
UHRyCisgICAgICAgIHdpdGggYSBudWxsIHBvaW50ZXIuCisgICAgICAgICogd3RmL093bkFycmF5
UHRyLmg6CisgICAgICAgICogd3RmL093bkFycmF5UHRyQ29tbW9uLmg6IFJlbW92ZWQuCisgICAg
ICAgICogd3RmL1Bhc3NPd25BcnJheVB0ci5oOiBObyBsb25nZXIgaW5jbHVkZXMgT3duQXJyYXlD
b21tb24uaAorICAgICAgICAoV1RGOjpkZWxldGVPd25lZEFycmF5UHRyKTogTW92ZWQgZnJvbSBP
d25BcnJheVB0ckNvbW1vbi5oCisKIDIwMTEtMDItMDYgIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNzc3ODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5
Myw3ICs0OTMsNiBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL09TQWxsb2NhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
T3duQXJyYXlQdHIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25GYXN0TWFsbG9j
UHRyLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQdHJDb21tb24uaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25QdHJDb21tb24uaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9Pd25QdHIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
YWdlQWxsb2NhdGlvbi5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJp
bmdSZWZDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0
cmluZ1JlZkNGLmNwcAkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU3RyaW5nUmVmQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIEpT
U3RyaW5nUmVmIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKEMKICAgICAvLyBpdCBjYW4gaG9s
ZC4gICg8cmRhcjovL3Byb2JsZW0vNjgwNjQ3OD4pCiAgICAgc2l6ZV90IGxlbmd0aCA9IENGU3Ry
aW5nR2V0TGVuZ3RoKHN0cmluZyk7CiAgICAgaWYgKGxlbmd0aCkgewotICAgICAgICBPd25BcnJh
eVB0cjxVbmlDaGFyPiBidWZmZXIobmV3IFVuaUNoYXJbbGVuZ3RoXSk7CisgICAgICAgIE93bkFy
cmF5UHRyPFVuaUNoYXI+IGJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IFVuaUNoYXJbbGVuZ3Ro
XSk7CiAgICAgICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhzdHJpbmcsIENGUmFuZ2VNYWtlKDAs
IGxlbmd0aCksIGJ1ZmZlci5nZXQoKSk7CiAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihV
bmlDaGFyKSA9PSBzaXplb2YoVUNoYXIpLCB1bmljaGFyX2FuZF91Y2hhcl9tdXN0X2JlX3NhbWVf
c2l6ZSk7CiAgICAgICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8VUNoYXIqPihidWZmZXIuZ2V0KCkpLCBsZW5ndGgpLmxlYWtSZWYoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9XVEYvV1RGLnZjcHJvagkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC03NTcsMTAgKzc1Nyw2IEBACiAJCQk+CiAJCTwvRmlsZT4KIAkJPEZpbGUKLQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5cd3RmXE93bkFycmF5UHRyQ29tbW9uLmgiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJ
PEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXE93bkZhc3RNYWxsb2NQdHIuaCIKIAkJ
CT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDc3NzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw3ICs1NTIsNiBAQAogCQlC
Q0RFM0I0MzBFNkM4MzJEMDAxNDUzQTcgLyogU3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDREUzQUIwMEU2QzgyQ0YwMDE0NTNBNyAv
KiBTdHJ1Y3R1cmUuY3BwICovOyB9OwogCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJn
TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNG
NjA1MTIwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0ZCRTY5NjEyMjU2MEU4MDAzMDlFOUQgLyog
UGFzc093bkFycmF5UHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0ZCRTY5NTEyMjU2MEU4MDAzMDlFOUQgLyogUGFzc093bkFycmF5UHRyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkNGQkU2OTgx
MjI1NjFEMjAwMzA5RTlEIC8qIE93bkFycmF5UHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZCRTY5NzEyMjU2MUQyMDAzMDlFOUQgLyog
T3duQXJyYXlQdHJDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkwMEVF
QjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovOyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3
MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87
IH07CiAJCUMwQTI3MjYzMEU1MEEwNjMwMEU5NkUxNSAvKiBOb3RGb3VuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBBMjcyM0YwRTUwOUYxRTAwRTk2
RTE1IC8qIE5vdEZvdW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTExNjIsNyArMTE2MSw2IEBACiAJCUJDRjYwNTEyMEUyMDNFRjgwMEI5QTY0
RCAvKiBBcmdMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyZ0xpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGNjU1M0IwQTIwNDhERTAwMzhBMTk0
IC8qIE1hdGhFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGhF
eHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGQkU2OTUxMjI1NjBFODAw
MzA5RTlEIC8qIFBhc3NPd25BcnJheVB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQYXNzT3duQXJyYXlQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNG
QkU2OTcxMjI1NjFEMjAwMzA5RTlEIC8qIE93bkFycmF5UHRyQ29tbW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93bkFycmF5UHRyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1
bXBUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKdW1wVGFibGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBBMjcyM0YwRTUwOUYxRTAwRTk2RTE1IC8q
IE5vdEZvdW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vdEZvdW5kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTgyLDcgKzE1ODAsNiBAQAogCQkJCTE0
MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovLAogCQkJCTE0MDAwNjky
MTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLywKIAkJCQk5MzAzRjVB
NDA5OTExQTU4MDBBRDcxQjggLyogT3duQXJyYXlQdHIuaCAqLywKLQkJCQlCQ0ZCRTY5NzEyMjU2
MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21tb24uaCAqLywKIAkJCQkwQkRGRkFEMTBGQzYx
NkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovLAogCQkJCTkzMDNGNTY3MDk5MTE4
RkEwMEFENzFCOCAvKiBPd25QdHIuaCAqLywKIAkJCQk0NDBCN0FFRDBGQUY3RkNCMDA3MzMyM0Ug
LyogT3duUHRyQ29tbW9uLmggKi8sCkBAIC0yMzE2LDcgKzIzMTMsNiBAQAogCQkJCUJDMThDNDQ4
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAw
MDY3NzEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDQ5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPd25BcnJheVB0ci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQkNGQkU2OTgxMjI1NjFEMjAwMzA5RTlEIC8qIE93bkFycmF5UHRyQ29tbW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3duRmFzdE1hbGxv
Y1B0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NEEwRTE2RjVDRDAwQjM0NDYwIC8qIE93
blB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDQwOUQ4NDcwRkFGODBBMjAwNTIzQjg3IC8qIE93
blB0ckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcg
KzMwMyw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUKIHsKICAg
ICBpZiAoaSA8IGQtPm51bUFyZ3VtZW50cykgewogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1
bWVudHMpIHsKLSAgICAgICAgICAgIGQtPmRlbGV0ZWRBcmd1bWVudHMuc2V0KG5ldyBib29sW2Qt
Pm51bUFyZ3VtZW50c10pOworICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50cyA9IGFkb3B0
QXJyYXlQdHIobmV3IGJvb2xbZC0+bnVtQXJndW1lbnRzXSk7CiAgICAgICAgICAgICBtZW1zZXQo
ZC0+ZGVsZXRlZEFyZ3VtZW50cy5nZXQoKSwgMCwgc2l6ZW9mKGJvb2wpICogZC0+bnVtQXJndW1l
bnRzKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pIHsK
QEAgLTMyMSw3ICszMjEsNyBAQCBib29sIEFyZ3VtZW50czo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0
YXRlCiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoaXNBcnJheUlu
ZGV4KTsKICAgICBpZiAoaXNBcnJheUluZGV4ICYmIGkgPCBkLT5udW1Bcmd1bWVudHMpIHsKICAg
ICAgICAgaWYgKCFkLT5kZWxldGVkQXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBkLT5kZWxldGVk
QXJndW1lbnRzLnNldChuZXcgYm9vbFtkLT5udW1Bcmd1bWVudHNdKTsKKyAgICAgICAgICAgIGQt
PmRlbGV0ZWRBcmd1bWVudHMgPSBhZG9wdEFycmF5UHRyKG5ldyBib29sW2QtPm51bUFyZ3VtZW50
c10pOwogICAgICAgICAgICAgbWVtc2V0KGQtPmRlbGV0ZWRBcmd1bWVudHMuZ2V0KCksIDAsIHNp
emVvZihib29sKSAqIGQtPm51bUFyZ3VtZW50cyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFk
LT5kZWxldGVkQXJndW1lbnRzW2ldKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcmd1bWVudHMuaAkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDcgKzIyOCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlZ2lzdGVyKiByZWdpc3RlckFycmF5ID0gbmV3
IFJlZ2lzdGVyW3JlZ2lzdGVyQXJyYXlTaXplXTsKICAgICAgICAgbWVtY3B5KHJlZ2lzdGVyQXJy
YXksIGQtPnJlZ2lzdGVycyAtIHJlZ2lzdGVyT2Zmc2V0LCByZWdpc3RlckFycmF5U2l6ZSAqIHNp
emVvZihSZWdpc3RlcikpOwotICAgICAgICBkLT5yZWdpc3RlckFycmF5LnNldChyZWdpc3RlckFy
cmF5KTsKKyAgICAgICAgZC0+cmVnaXN0ZXJBcnJheSA9IHJlZ2lzdGVyQXJyYXk7CiAgICAgICAg
IGQtPnJlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkgKyByZWdpc3Rlck9mZnNldDsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw3IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3Bl
cnQKICAgICAsIG1fY2FjaGVkU3RydWN0dXJlKDApCiAgICAgLCBtX251bUNhY2hlYWJsZVNsb3Rz
KG51bUNhY2hlYWJsZVNsb3RzKQogICAgICwgbV9qc1N0cmluZ3NTaXplKHByb3BlcnR5TmFtZUFy
cmF5RGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuc2l6ZSgpKQotICAgICwgbV9qc1N0cmluZ3Mo
bmV3IFdyaXRlQmFycmllcjxVbmtub3duPlttX2pzU3RyaW5nc1NpemVdKQorICAgICwgbV9qc1N0
cmluZ3MoYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W21fanNTdHJpbmdz
U2l6ZV0pKQogewogICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9y
JiBwcm9wZXJ0eU5hbWVWZWN0b3IgPSBwcm9wZXJ0eU5hbWVBcnJheURhdGEtPnByb3BlcnR5TmFt
ZVZlY3RvcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9qc1N0cmluZ3NTaXplOyAr
K2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJs
ZU9iamVjdC5oCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDcgKzE2MCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGlubGluZSB2b2lkIEpTVmFyaWFibGVPYmplY3Q6OnNldFJl
Z2lzdGVycyhSZWdpc3RlciogcmVnaXN0ZXJzLCBSZWdpc3RlciogcmVnaXN0ZXJBcnJheSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChyZWdpc3RlckFycmF5ICE9IGQtPnJlZ2lzdGVyQXJyYXkuZ2V0
KCkpOwotICAgICAgICBkLT5yZWdpc3RlckFycmF5LnNldChyZWdpc3RlckFycmF5KTsKKyAgICAg
ICAgZC0+cmVnaXN0ZXJBcnJheSA9IHJlZ2lzdGVyQXJyYXk7CiAgICAgICAgIGQtPnJlZ2lzdGVy
cyA9IHJlZ2lzdGVyczsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw3ICszOCw3IEBAIFN0cnVjdHVyZUNoYWluOjpTdHJ1Y3R1cmVDaGFpbihTdHJ1Y3R1
cmUKICAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9IGhlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQg
PSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSA/IDAgOiBhc09iamVjdChjdXJy
ZW50LT5zdG9yZWRQcm90b3R5cGUoKSktPnN0cnVjdHVyZSgpKQogICAgICAgICArK3NpemU7CiAg
ICAgCi0gICAgbV92ZWN0b3Iuc2V0KG5ldyBSZWZQdHI8U3RydWN0dXJlPltzaXplICsgMV0pOwor
ICAgIG1fdmVjdG9yID0gYWRvcHRBcnJheVB0cihuZXcgUmVmUHRyPFN0cnVjdHVyZT5bc2l6ZSAr
IDFdKTsKIAogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9
IGhlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGUoKS5pc051
bGwoKSA/IDAgOiBhc09iamVjdChjdXJyZW50LT5zdG9yZWRQcm90b3R5cGUoKSktPnN0cnVjdHVy
ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAgU0VUKFdURl9IRUFERVJTCiAgICAgTnVs
bFB0ci5oCiAgICAgT1NBbGxvY2F0b3IuaAogICAgIE93bkFycmF5UHRyLmgKLSAgICBPd25BcnJh
eVB0ckNvbW1vbi5oCiAgICAgT3duRmFzdE1hbGxvY1B0ci5oCiAgICAgT3duUHRyLmgKICAgICBP
d25QdHJDb21tb24uaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAkocmV2
aXNpb24gNzc3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNiBAQCBwdWJsaWM6CiAgICAgICAgICwgeWVhcigw
KQogICAgICAgICAsIGlzRFNUKDApCiAgICAgICAgICwgdXRjT2Zmc2V0KDApCi0gICAgICAgICwg
dGltZVpvbmUoMCkKICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL093bkFycmF5UHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9Pd25BcnJheVB0ci5oCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvT3duQXJyYXlQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTMgKzI0LDkgQEAKICNp
bmNsdWRlICJBc3NlcnRpb25zLmgiCiAjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKICNpbmNsdWRl
ICJOdWxsUHRyLmgiCi0jaW5jbHVkZSAiT3duUHRyQ29tbW9uLmgiCi0jaW5jbHVkZSAiT3duQXJy
YXlQdHJDb21tb24uaCIKKyNpbmNsdWRlICJQYXNzT3duQXJyYXlQdHIuaCIKICNpbmNsdWRlIDxh
bGdvcml0aG0+CiAKLS8vIFJlbW92ZSB0aGlzIG9uY2Ugd2UgbWFrZSBhbGwgV2ViS2l0IGNvZGUg
Y29tcGF0aWJsZSB3aXRoIHN0cmljdGVyIHJ1bGVzIGFib3V0IE93bkFycmF5UHRyLgotI2RlZmlu
ZSBMT09TRV9PV05fQVJSQVlfUFRSCi0KIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjbGFzcyBQYXNzT3duQXJyYXlQdHI7CkBAIC0xMTUsMTYgKzExMSw2IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBPd24KICAgICByZXR1cm4gcHRyOwogfQog
Ci0jaWZkZWYgTE9PU0VfT1dOX0FSUkFZX1BUUgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IHZvaWQgT3duQXJyYXlQdHI8VD46OnNldChQdHJUeXBlIHB0cikKLXsKLSAgICBBU1NFUlQoIXB0
ciB8fCBtX3B0ciAhPSBwdHIpOwotICAgIFB0clR5cGUgb2xkUHRyID0gbV9wdHI7Ci0gICAgbV9w
dHIgPSBwdHI7Ci0gICAgZGVsZXRlT3duZWRQdHIob2xkUHRyKTsKLX0KLSNlbmRpZgotCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgT3duQXJyYXlQdHI8VD4mIE93bkFycmF5UHRyPFQ+Ojpv
cGVyYXRvcj0oY29uc3QgUGFzc093bkFycmF5UHRyPFQ+JiBvKQogewogICAgIFB0clR5cGUgcHRy
ID0gbV9wdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5UHRyQ29t
bW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0
ckNvbW1vbi5oCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
T3duQXJyYXlQdHJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBXVEZfT3duQXJyYXlQdHJDb21tb25faAotI2RlZmluZSBXVEZfT3du
QXJyYXlQdHJDb21tb25faAotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHZvaWQgZGVsZXRlT3duZWRBcnJheVB0cihUKiBwdHIpCi17Ci0gICAgdHlwZWRl
ZiBjaGFyIGtub3duW3NpemVvZihUKSA/IDEgOiAtMV07Ci0gICAgaWYgKHNpemVvZihrbm93bikp
Ci0gICAgICAgIGRlbGV0ZSBbXSBwdHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5k
aWYgLy8gV1RGX093bkFycmF5UHRyQ29tbW9uX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGFzc093bkFycmF5UHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9QYXNzT3duQXJyYXlQdHIuaAkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1Bhc3NPd25BcnJheVB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw2IEBACiAKICNpbmNsdWRlICJBc3NlcnRpb25zLmgiCiAjaW5jbHVkZSAiTnVsbFB0ci5o
IgotI2luY2x1ZGUgIk93bkFycmF5UHRyQ29tbW9uLmgiCiAjaW5jbHVkZSAiVHlwZVRyYWl0cy5o
IgogCiAvLyBSZW1vdmUgdGhpcyBvbmNlIHdlIG1ha2UgYWxsIFdlYktpdCBjb2RlIGNvbXBhdGli
bGUgd2l0aCBzdHJpY3RlciBydWxlcyBhYm91dCBQYXNzT3duQXJyYXlQdHIuCkBAIC0zOSw2ICsz
OCw3IEBAIG5hbWVzcGFjZSBXVEYgewogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgT3duQXJy
YXlQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzT3duQXJyYXlQdHI7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBQYXNzT3duQXJyYXlQdHI8VD4gYWRvcHRBcnJheVB0cihUKik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKTsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093bkFycmF5UHRyIHsKIHB1YmxpYzoKQEAg
LTE5NCw2ICsxOTQsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NPd25BcnJh
eQogICAgIHJldHVybiBQYXNzT3duQXJyYXlQdHI8VD4ocHRyKTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIHZvaWQgZGVsZXRlT3duZWRBcnJheVB0cihUKiBwdHIpCit7CisgICAg
dHlwZWRlZiBjaGFyIGtub3duW3NpemVvZihUKSA/IDEgOiAtMV07CisgICAgaWYgKHNpemVvZihr
bm93bikpCisgICAgICAgIGRlbGV0ZSBbXSBwdHI7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBQYXNzT3duQXJyYXlQdHI8VD4gc3RhdGljX3BvaW50ZXJfY2Fz
dChjb25zdCBQYXNzT3duQXJyYXlQdHI8VT4mIHApIAogewogICAgIHJldHVybiBhZG9wdEFycmF5
UHRyKHN0YXRpY19jYXN0PFQqPihwLmxlYWtQdHIoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hh
bmdlTG9nCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0wMi0wNiAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBPd25BcnJhcnlQdHIuaCB1c2VzIGRlbGV0ZU93bmVkUHRyIGJ1dCBk
b2VzbuKAmXQgaW5jbHVkZSBPd25QdHJDb21tb24uaAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI4NjcKKworICAgICAgICAqIEZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5oOiBSZW1vdmVkLgorCiAyMDExLTAxLTMxICBPbGl2
ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ29udmVydCBtYXJrc3RhY2sg
dG8gYSBzbG90IHZpc2l0b3IgQVBJCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvRm9yd2Fy
ZGluZ0hlYWRlcnMvd3RmL093bkFycmF5UHRyQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5o
CShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVh
ZGVycy93dGYvT3duQXJyYXlQdHJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSArMCwwIEBA
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT3duQXJyYXlQdHJDb21tb24uaD4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMDItMDYgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgT3duQXJyYXJ5UHRyLmggdXNlcyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0
IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUyODY3CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvT3duQXJyYXlQdHJDb21tb24uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyk6IFJldHVybnMgUGFzc093bkFy
cmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPj4gaW5zdGVhZCBvZgorICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4qLgorICAgICAgICAoX05QTl9JbnZva2UpOiBDYWxscyBjcmVhdGVWYWx1
ZUxpc3RGcm9tVmFyaWFudEFyZ3MuCisgICAgICAgIChfTlBOX0ludm9rZURlZmF1bHQpOiBjcmVh
dGVWYWx1ZUxpc3RGcm9tVmFyaWFudEFyZ3MuCisgICAgICAgIChfTlBOX0NvbnN0cnVjdCk6IGNy
ZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3Jp
cHRGdW5jdGlvbkNhbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxs
OjpjYWxsKTogQ2FsbHMgYWRvcHRBcnJheVB0ci4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEZ1
bmN0aW9uQ2FsbDo6Y29uc3RydWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
YWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVOZXdDb250ZXh0
KTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpucE9iamVjdEludm9rZUltcGwpOiBEaXR0bworICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOE5vZGVG
aWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUpOiBEaXR0bywKKyAgICAgICAgKiBodG1sL0hUTUxB
cmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKTogQ2FsbHMgbmV3Q29vcmRzQXJyYXkuCisgICAgICAgICogaHRtbC9I
VE1MRnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogQ2FsbHMgbmV3TGVuZ3RoQXJyYXkuCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogQ2FsbHMg
YWRvcHRBcnJhWXB0ci4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUp
OiBEaXRvLgorICAgICAgICAqIHBsYXRmb3JtL0xlbmd0aC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpuZXdDb29yZHNBcnJheSk6IFJldHVybnMgUGFzc093bkFycmF5UHRyPExlbmd0aD4gaW5zdGVh
ZCBvZiBMZW5ndGgqLgorICAgICAgICAoV2ViQ29yZTo6bmV3TGVuZ3RoQXJyYXkpOiBSZXR1cm5z
IFBhc3NPd25BcnJheVB0cjxMZW5ndGg+IGluc3RlYWQgb2YgTGVuZ3RoKi4KKyAgICAgICAgKiBw
bGF0Zm9ybS9MZW5ndGguaDogUHJvdG90eXBlIGNoYW5nZXMuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QU5HTEVX
ZWJLaXRCcmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNlKTogQ2FsbHMgYWRvcHRBcnJheVB0ci4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGlydHlSZWN0cyk6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2V0Tm9ybWFsaXplZFRl
eHRSdW4pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJm
YnV6elNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2x5cGhzVG9BZHZhbmNlcyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Y2FuUmVuZGVyKTogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZTo6
dXBkYXRlU3ViUmVjdCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZGJhY2tIYXJkd2FyZVRvU29m
dHdhcmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRC
aXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQml0bWFwOjp0bzE2Yml0KTogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51OjpnZXRDb250ZXh0TWVudUl0ZW1zKTogRGl0dG8uCisgICAg
ICAgICogcGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5p
dGlhbGl6ZVdpdGhVc2VyRGVmYXVsdCk6IERpdHRvLgorICAgICAgICAqIHBsdWdpbnMvd2luL1Bs
dWdpblBhY2thZ2VXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0
Y2hJbmZvKTogRGl0dG8uCisKIDIwMTEtMDItMDYgIEJlbmphbWluIFBvdWxhaW4gIDxpa2lwb3VA
Z21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFu
c2VuLgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL093bkFycmF5
UHRyQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvd3RmL093bkFycmF5UHRyQ29tbW9uLmgJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL093bkFycmF5UHRyQ29tbW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNCArMCwwIEBACi0jaWZuZGVmIFdlYkNvcmVfRldEX093bkFycmF5UHRyQ29t
bW9uX2gKLSNkZWZpbmUgV2ViQ29yZV9GV0RfT3duQXJyYXlQdHJDb21tb25faAotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL093bkFycmF5UHRyQ29tbW9uLmg+Ci0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03OCwxNCArNzgsMTQgQEAgc3RhdGljIHZvaWQgZnJlZVY4TlBPYmplY3QoTlBPYmplY3Qq
IG5wTwogICAgIGZyZWUodjhOcE9iamVjdCk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4qIGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyhjb25zdCBOUFZhcmlhbnQqIGFy
Z3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBPYmplY3QqIG93bmVyKQorc3RhdGlj
IFBhc3NPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBjcmVhdGVWYWx1ZUxpc3RG
cm9tVmFyaWFudEFyZ3MoY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3Vt
ZW50Q291bnQsIE5QT2JqZWN0KiBvd25lcikKIHsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4q
IGFyZ3YgPSBuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+W2FyZ3VtZW50Q291bnRdOworICAgIE93
bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3YgPSBhZG9wdEFycmF5UHRyKG5l
dyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT5bYXJndW1lbnRDb3VudF0pOwogICAgIGZvciAodWludDMy
X3QgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnQ7IGluZGV4KyspIHsKICAgICAgICAg
Y29uc3QgTlBWYXJpYW50KiBhcmcgPSAmYXJndW1lbnRzW2luZGV4XTsKICAgICAgICAgYXJndltp
bmRleF0gPSBjb252ZXJ0TlBWYXJpYW50VG9WOE9iamVjdChhcmcsIG93bmVyKTsKICAgICB9Ci0g
ICAgcmV0dXJuIGFyZ3Y7CisgICAgcmV0dXJuIGFyZ3YucmVsZWFzZSgpOwogfQogCiAvLyBDcmVh
dGUgYW4gaWRlbnRpZmllciAobnVsbCB0ZXJtaW5hdGVkIHV0ZjggY2hhciopIGZyb20gdGhlIE5Q
SWRlbnRpZmllci4KQEAgLTE4OCw3ICsxODgsNyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAs
IE5QT2JqZWN0KiBucE9iCiAKICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBvYmplY3QuCiAgICAg
djg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b24+OjpDYXN0KGZ1bmN0aW9uT2JqZWN0KTsKLSAgICBPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gPiBhcmd2KGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyhhcmd1bWVudHMs
IGFyZ3VtZW50Q291bnQsIG5wT2JqZWN0KSk7CisgICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2
ODo6VmFsdWU+ID4gYXJndiA9IGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyhhcmd1bWVu
dHMsIGFyZ3VtZW50Q291bnQsIG5wT2JqZWN0KTsKICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBy
ZXN1bHRPYmplY3QgPSBwcm94eS0+Y2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCB2OE5wT2JqZWN0LT52
OE9iamVjdCwgYXJndW1lbnRDb3VudCwgYXJndi5nZXQoKSk7CiAKICAgICAvLyBJZiB3ZSBoYWQg
YW4gZXJyb3IsIHJldHVybiBmYWxzZS4gIFRoZSBzcGVjIGlzIGEgbGl0dGxlIHVuY2xlYXIgaGVy
ZSwgYnV0IHNheXMgIlJldHVybnMgdHJ1ZSBpZiB0aGUgbWV0aG9kIHdhcwpAQCAtMjM3LDcgKzIz
Nyw3IEBAIGJvb2wgX05QTl9JbnZva2VEZWZhdWx0KE5QUCBucHAsIE5QT2JqZWMKICAgICAgICAg
VjhQcm94eSogcHJveHkgPSB0b1Y4UHJveHkobnBPYmplY3QpOwogICAgICAgICBBU1NFUlQocHJv
eHkpOwogCi0gICAgICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3Yo
Y3JlYXRlVmFsdWVMaXN0RnJvbVZhcmlhbnRBcmdzKGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwg
bnBPYmplY3QpKTsKKyAgICAgICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4g
YXJndiA9IGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyhhcmd1bWVudHMsIGFyZ3VtZW50
Q291bnQsIG5wT2JqZWN0KTsKICAgICAgICAgcmVzdWx0T2JqZWN0ID0gcHJveHktPmNhbGxGdW5j
dGlvbihmdW5jdGlvbiwgZnVuY3Rpb25PYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3YuZ2V0KCkp
OwogICAgIH0KICAgICAvLyBJZiB3ZSBoYWQgYW4gZXJyb3IsIHJldHVybiBmYWxzZS4gIFRoZSBz
cGVjIGlzIGEgbGl0dGxlIHVuY2xlYXIgaGVyZSwgYnV0IHNheXMgIlJldHVybnMgdHJ1ZSBpZiB0
aGUgbWV0aG9kIHdhcwpAQCAtNTMzLDcgKzUzMyw3IEBAIGJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQ
IG5wcCwgTlBPYmplY3QqIG4KICAgICAgICAgICAgIFY4UHJveHkqIHByb3h5ID0gdG9WOFByb3h5
KG5wT2JqZWN0KTsKICAgICAgICAgICAgIEFTU0VSVChwcm94eSk7CiAKLSAgICAgICAgICAgIE93
bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3YoY3JlYXRlVmFsdWVMaXN0RnJv
bVZhcmlhbnRBcmdzKGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgbnBPYmplY3QpKTsKKyAgICAg
ICAgICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3YgPSBjcmVhdGVW
YWx1ZUxpc3RGcm9tVmFyaWFudEFyZ3MoYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCBucE9iamVj
dCk7CiAgICAgICAgICAgICByZXN1bHRPYmplY3QgPSBwcm94eS0+bmV3SW5zdGFuY2UoY3Rvciwg
YXJndW1lbnRDb3VudCwgYXJndi5nZXQoKSk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCShyZXZpc2lv
biA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBTY3JpcHRWYWx1ZSBTY3Jp
cHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9vCiAgICAgQVNTRVJUKHZhbHVlLT5Jc0Z1bmN0aW9uKCkp
OwogCiAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24odjg6OkZ1bmN0aW9uOjpD
YXN0KCp2YWx1ZSkpOwotICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFy
Z3MobmV3IHY4OjpIYW5kbGU8djg6OlZhbHVlPlttX2FyZ3VtZW50cy5zaXplKCldKTsKKyAgICBP
d25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdzID0gYWRvcHRBcnJheVB0cihu
ZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+W21fYXJndW1lbnRzLnNpemUoKV0pOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGFyZ3Nb
aV0gPSBtX2FyZ3VtZW50c1tpXS52OFZhbHVlKCk7CiAKQEAgLTE1OSw3ICsxNTksNyBAQCBTY3Jp
cHRPYmplY3QgU2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1CiAgICAgQVNTRVJUKHZhbHVlLT5J
c0Z1bmN0aW9uKCkpOwogCiAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gY29uc3RydWN0b3Io
djg6OkZ1bmN0aW9uOjpDYXN0KCp2YWx1ZSkpOwotICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8
djg6OlZhbHVlPiA+IGFyZ3MobmV3IHY4OjpIYW5kbGU8djg6OlZhbHVlPlttX2FyZ3VtZW50cy5z
aXplKCldKTsKKyAgICBPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdzID0g
YWRvcHRBcnJheVB0cihuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+W21fYXJndW1lbnRzLnNpemUo
KV0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kp
CiAgICAgICAgIGFyZ3NbaV0gPSBtX2FyZ3VtZW50c1tpXS52OFZhbHVlKCk7CiAKQEAgLTE5Myw3
ICsxOTMsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFjazo6Y2FsbChib29sJiBoCiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgp
LT5HbG9iYWwoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSB2ODo6
SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QobV9mdW5jdGlvbi52OFZhbHVlKCkpOwogCi0gICAg
T3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJncyhuZXcgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+W21fYXJndW1lbnRzLnNpemUoKV0pOworICAgIE93bkFycmF5UHRyPHY4OjpIYW5k
bGU8djg6OlZhbHVlPiA+IGFyZ3MgPSBhZG9wdEFycmF5UHRyKG5ldyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT5bbV9hcmd1bWVudHMuc2l6ZSgpXSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2FyZ3VtZW50cy5zaXplKCk7ICsraSkKICAgICAgICAgYXJnc1tpXSA9IG1fYXJndW1lbnRzW2ld
LnY4VmFsdWUoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5k
b3dTaGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01XaW5kb3dTaGVsbC5jcHAJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw3ICsz
NTgsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gVjhET01XaW5kb3dTCiAKICAgICAv
LyBEeW5hbWljYWxseSB0ZWxsIHY4IGFib3V0IG91ciBleHRlbnNpb25zIG5vdy4KICAgICBjb25z
dCBWOEV4dGVuc2lvbnMmIGV4dGVuc2lvbnMgPSBWOFByb3h5OjpleHRlbnNpb25zKCk7Ci0gICAg
T3duQXJyYXlQdHI8Y29uc3QgY2hhcio+IGV4dGVuc2lvbk5hbWVzKG5ldyBjb25zdCBjaGFyKltl
eHRlbnNpb25zLnNpemUoKV0pOworICAgIE93bkFycmF5UHRyPGNvbnN0IGNoYXIqPiBleHRlbnNp
b25OYW1lcyA9IGFkb3B0QXJyYXlQdHIobmV3IGNvbnN0IGNoYXIqW2V4dGVuc2lvbnMuc2l6ZSgp
XSk7CiAgICAgaW50IGluZGV4ID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4dGVu
c2lvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgLy8gRW5zdXJlIG91ciBkYXRlIGV4dGVuc2lv
biBpcyBhbHdheXMgYWxsb3dlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
TlBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
TlBPYmplY3QuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4TlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdEludgogCiAgICAgLy8gV3JhcCB1cCBw
YXJhbWV0ZXJzLgogICAgIGludCBudW1BcmdzID0gYXJncy5MZW5ndGgoKTsKLSAgICBPd25BcnJh
eVB0cjxOUFZhcmlhbnQ+IG5wQXJncyhuZXcgTlBWYXJpYW50W251bUFyZ3NdKTsKKyAgICBPd25B
cnJheVB0cjxOUFZhcmlhbnQ+IG5wQXJncyA9IGFkb3B0QXJyYXlQdHIobmV3IE5QVmFyaWFudFtu
dW1BcmdzXSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFyZ3M7IGkrKykKICAgICAg
ICAgY29udmVydFY4T2JqZWN0VG9OUFZhcmlhbnQoYXJnc1tpXSwgbnBPYmplY3QsICZucEFyZ3Nb
aV0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOb2RlRmlsdGVyQ29uZGl0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5vZGVG
aWx0ZXJDb25kaXRpb24uY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgw
LDcgKzgwLDcgQEAgc2hvcnQgVjhOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKAogICAg
IH0KIAogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0ID0gdjg6OkNvbnRleHQ6Okdl
dEN1cnJlbnQoKS0+R2xvYmFsKCk7Ci0gICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFs
dWU+ID4gYXJncyhuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+WzFdKTsKKyAgICBPd25BcnJheVB0
cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdzID0gYWRvcHRBcnJheVB0cihuZXcgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+WzFdKTsKICAgICBhcmdzWzBdID0gdG9WOChub2RlKTsKIAogICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBWOFByb3h5OjpjYWxsRnVuY3Rpb25XaXRob3V0
RnJhbWUoY2FsbGJhY2ssIG9iamVjdCwgMSwgYXJncy5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyAr
NjQsNyBAQCB2b2lkIEhUTUxBcmVhRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAgICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyZWN0IikpCiAgICAg
ICAgICAgICBtX3NoYXBlID0gUmVjdDsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBj
b29yZHNBdHRyKSB7Ci0gICAgICAgIG1fY29vcmRzLnNldChuZXdDb29yZHNBcnJheShhdHRyLT52
YWx1ZSgpLnN0cmluZygpLCBtX2Nvb3Jkc0xlbikpOworICAgICAgICBtX2Nvb3JkcyA9IG5ld0Nv
b3Jkc0FycmF5KGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIG1fY29vcmRzTGVuKTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhbHRBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBhY2Nlc3Nr
ZXlBdHRyKSB7CiAgICAgICAgIC8vIERvIG5vdGhpbmcuCiAgICAgfSBlbHNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDc3Nzgw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsMTIgKzc1LDEyIEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6cGFy
c2VNYXBwZWRBdHQKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHJvd3NBdHRyKSB7CiAgICAg
ICAgIGlmICghYXR0ci0+aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fcm93TGVuZ3Rocy5zZXQo
bmV3TGVuZ3RoQXJyYXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgbV90b3RhbFJvd3MpKTsKKyAg
ICAgICAgICAgIG1fcm93TGVuZ3RocyA9IG5ld0xlbmd0aEFycmF5KGF0dHItPnZhbHVlKCkuc3Ry
aW5nKCksIG1fdG90YWxSb3dzKTsKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvbHNBdHRyKSB7CiAg
ICAgICAgIGlmICghYXR0ci0+aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fY29sTGVuZ3Rocy5z
ZXQobmV3TGVuZ3RoQXJyYXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgbV90b3RhbENvbHMpKTsK
KyAgICAgICAgICAgIG1fY29sTGVuZ3RocyA9IG5ld0xlbmd0aEFycmF5KGF0dHItPnZhbHVlKCku
c3RyaW5nKCksIG1fdG90YWxDb2xzKTsKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGZyYW1lYm9yZGVy
QXR0cikgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3MzUsNyArMTczNSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hl
ZFMKICAgICBHQzNEaW50IG51bVNoYWRlcnMgPSAwOwogICAgIG1fY29udGV4dC0+Z2V0UHJvZ3Jh
bWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFUVEFDSEVEX1NI
QURFUlMsICZudW1TaGFkZXJzKTsKICAgICBpZiAobnVtU2hhZGVycykgewotICAgICAgICBPd25B
cnJheVB0cjxQbGF0Zm9ybTNET2JqZWN0PiBzaGFkZXJzKG5ldyBQbGF0Zm9ybTNET2JqZWN0W251
bVNoYWRlcnNdKTsKKyAgICAgICAgT3duQXJyYXlQdHI8UGxhdGZvcm0zRE9iamVjdD4gc2hhZGVy
cyA9IGFkb3B0QXJyYXlQdHIobmV3IFBsYXRmb3JtM0RPYmplY3RbbnVtU2hhZGVyc10pOwogICAg
ICAgICBHQzNEc2l6ZWkgY291bnQgPSAwOwogICAgICAgICBtX2NvbnRleHQtPmdldEF0dGFjaGVk
U2hhZGVycyhvYmplY3RPclplcm8ocHJvZ3JhbSksIG51bVNoYWRlcnMsICZjb3VudCwgc2hhZGVy
cy5nZXQoKSk7CiAgICAgICAgIGlmIChjb3VudCAhPSBudW1TaGFkZXJzKQpAQCAtNDU3Nyw3ICs0
NTc3LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVydAogICAgICAg
ICB8fCBzdGF0ZS52YWx1ZVsxXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXQogICAg
ICAgICB8fCBzdGF0ZS52YWx1ZVsyXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXQog
ICAgICAgICB8fCBzdGF0ZS52YWx1ZVszXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsz
XSkgewotICAgICAgICBPd25BcnJheVB0cjxHQzNEZmxvYXQ+IGJ1ZmZlckRhdGEobmV3IEdDM0Rm
bG9hdFsobnVtVmVydGV4ICsgMSkgKiA0XSk7CisgICAgICAgIE93bkFycmF5UHRyPEdDM0RmbG9h
dD4gYnVmZmVyRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IEdDM0RmbG9hdFsobnVtVmVydGV4ICsg
MSkgKiA0XSk7CiAgICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXgg
KyAxOyArK2lpKSB7CiAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBzdGF0ZS52YWx1
ZVswXTsKICAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBzdGF0ZS52YWx1ZVsx
XTsKQEAgLTQ2MzIsNyArNDYzMiw3IEBAIFdlYkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmcKIH0KIAogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hl
OjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKLSAgICA6IG1fYnVmZmVycyhuZXcg
T3duUHRyPEltYWdlQnVmZmVyPltjYXBhY2l0eV0pCisgICAgOiBtX2J1ZmZlcnMoYWRvcHRBcnJh
eVB0cihuZXcgT3duUHRyPEltYWdlQnVmZmVyPltjYXBhY2l0eV0pKQogICAgICwgbV9jYXBhY2l0
eShjYXBhY2l0eSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkocmV2
aXNpb24gNzc3ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVmZmVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC04Myw3ICs4NCw3IEBAIHN0YXRp
YyBpbnQgY291bnRDaGFyYWN0ZXIoY29uc3QgVUNoYXIqIGQKICAgICByZXR1cm4gY291bnQ7CiB9
CiAKLUxlbmd0aCogbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbGVu
KQorUGFzc093bkFycmF5UHRyPExlbmd0aD4gbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGludCYgbGVuKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgo
KTsKICAgICBjb25zdCBVQ2hhciogZGF0YSA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7CkBAIC0xMDAs
NyArMTAxLDcgQEAgTGVuZ3RoKiBuZXdDb29yZHNBcnJheShjb25zdCBTdHJpbmcmIHN0cgogICAg
IHN0ciA9IHN0ci0+c2ltcGxpZnlXaGl0ZVNwYWNlKCk7CiAKICAgICBsZW4gPSBjb3VudENoYXJh
Y3RlcihzdHItPmNoYXJhY3RlcnMoKSwgc3RyLT5sZW5ndGgoKSwgJyAnKSArIDE7Ci0gICAgTGVu
Z3RoKiByID0gbmV3IExlbmd0aFtsZW5dOworICAgIE93bkFycmF5UHRyPExlbmd0aD4gciA9IGFk
b3B0QXJyYXlQdHIobmV3IExlbmd0aFtsZW5dKTsKIAogICAgIGludCBpID0gMDsKICAgICB1bnNp
Z25lZCBwb3MgPSAwOwpAQCAtMTE0LDEwICsxMTUsMTAgQEAgTGVuZ3RoKiBuZXdDb29yZHNBcnJh
eShjb25zdCBTdHJpbmcmIHN0cgogCiAgICAgQVNTRVJUKGkgPT0gbGVuIC0gMSk7CiAKLSAgICBy
ZXR1cm4gcjsKKyAgICByZXR1cm4gci5yZWxlYXNlKCk7CiB9CiAKLUxlbmd0aCogbmV3TGVuZ3Ro
QXJyYXkoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbGVuKQorUGFzc093bkFycmF5UHRyPExl
bmd0aD4gbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbGVuKQogewog
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBzdHIgPSBzdHJpbmcuaW1wbCgpLT5zaW1wbGlmeVdoaXRl
U3BhY2UoKTsKICAgICBpZiAoIXN0ci0+bGVuZ3RoKCkpIHsKQEAgLTEyNiw3ICsxMjcsNyBAQCBM
ZW5ndGgqIG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmluZyYgc3RyCiAgICAgfQogCiAgICAgbGVu
ID0gY291bnRDaGFyYWN0ZXIoc3RyLT5jaGFyYWN0ZXJzKCksIHN0ci0+bGVuZ3RoKCksICcsJykg
KyAxOwotICAgIExlbmd0aCogciA9IG5ldyBMZW5ndGhbbGVuXTsKKyAgICBPd25BcnJheVB0cjxM
ZW5ndGg+IHIgPSBhZG9wdEFycmF5UHRyKG5ldyBMZW5ndGhbbGVuXSk7CiAKICAgICBpbnQgaSA9
IDA7CiAgICAgdW5zaWduZWQgcG9zID0gMDsKQEAgLTE0NSw3ICsxNDYsNyBAQCBMZW5ndGgqIG5l
d0xlbmd0aEFycmF5KGNvbnN0IFN0cmluZyYgc3RyCiAgICAgZWxzZQogICAgICAgICBsZW4tLTsK
IAotICAgIHJldHVybiByOworICAgIHJldHVybiByLnJlbGVhc2UoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgJKHJldmlzaW9uIDc3
NzgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093bkFycmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTkz
LDggKzE5NCw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fdmFsdWU7CiB9OwogCi1MZW5ndGgqIG5l
d0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYsIGludCYgbGVuKTsKLUxlbmd0aCogbmV3TGVuZ3Ro
QXJyYXkoY29uc3QgU3RyaW5nJiwgaW50JiBsZW4pOworUGFzc093bkFycmF5UHRyPExlbmd0aD4g
bmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiwgaW50JiBsZW4pOworUGFzc093bkFycmF5UHRy
PExlbmd0aD4gbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3RyaW5nJiwgaW50JiBsZW4pOwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAJKHJldmlzaW9uIDc3NzgwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIGJvb2wgQU5HTEVXZWJLaXRCcmlkZ2U6
OnZhbGlkYXRlU2hhZGVyU28KICAgICAgICAgaW50IGxvZ1NpemUgPSAwOwogICAgICAgICBTaEdl
dEluZm8oY29tcGlsZXIsIFNIX0lORk9fTE9HX0xFTkdUSCwgJmxvZ1NpemUpOwogICAgICAgICBp
ZiAobG9nU2l6ZSA+IDEpIHsKLSAgICAgICAgICAgIE93bkFycmF5UHRyPGNoYXI+IGxvZ0J1ZmZl
cihuZXcgY2hhcltsb2dTaXplXSk7CisgICAgICAgICAgICBPd25BcnJheVB0cjxjaGFyPiBsb2dC
dWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2xvZ1NpemVdKTsKICAgICAgICAgICAgIGlm
IChsb2dCdWZmZXIpIHsKICAgICAgICAgICAgICAgICBTaEdldEluZm9Mb2coY29tcGlsZXIsIGxv
Z0J1ZmZlci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgc2hhZGVyVmFsaWRhdGlvbkxvZyA9IGxv
Z0J1ZmZlci5nZXQoKTsKQEAgLTEwNSw3ICsxMDUsNyBAQCBib29sIEFOR0xFV2ViS2l0QnJpZGdl
Ojp2YWxpZGF0ZVNoYWRlclNvCiAgICAgaW50IHRyYW5zbGF0aW9uTGVuZ3RoID0gMDsKICAgICBT
aEdldEluZm8oY29tcGlsZXIsIFNIX09CSkVDVF9DT0RFX0xFTkdUSCwgJnRyYW5zbGF0aW9uTGVu
Z3RoKTsKICAgICBpZiAodHJhbnNsYXRpb25MZW5ndGggPiAxKSB7Ci0gICAgICAgIE93bkFycmF5
UHRyPGNoYXI+IHRyYW5zbGF0aW9uQnVmZmVyKG5ldyBjaGFyW3RyYW5zbGF0aW9uTGVuZ3RoXSk7
CisgICAgICAgIE93bkFycmF5UHRyPGNoYXI+IHRyYW5zbGF0aW9uQnVmZmVyID0gYWRvcHRBcnJh
eVB0cihuZXcgY2hhclt0cmFuc2xhdGlvbkxlbmd0aF0pOwogICAgICAgICBpZiAoIXRyYW5zbGF0
aW9uQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBTaEdldE9iamVj
dENvZGUoY29tcGlsZXIsIHRyYW5zbGF0aW9uQnVmZmVyLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZM
YXllclRyZWVIb3N0LmNwcAkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTMsNyArMjUzLDcgQEAgc3RhdGljIHZvaWQgZ2V0RGlydHlSZWN0cyhIV05EIHdpbmRv
dywgVgogICAgIH0KIAogICAgIERXT1JEIGRhdGFTaXplID0gR2V0UmVnaW9uRGF0YShyZWdpb24u
Z2V0KCksIDAsIDApOwotICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHJlZ2lvbkRhdGFC
dWZmZXIobmV3IHVuc2lnbmVkIGNoYXJbZGF0YVNpemVdKTsKKyAgICBPd25BcnJheVB0cjx1bnNp
Z25lZCBjaGFyPiByZWdpb25EYXRhQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQg
Y2hhcltkYXRhU2l6ZV0pOwogICAgIFJHTkRBVEEqIHJlZ2lvbkRhdGEgPSByZWludGVycHJldF9j
YXN0PFJHTkRBVEEqPihyZWdpb25EYXRhQnVmZmVyLmdldCgpKTsKICAgICBpZiAoIUdldFJlZ2lv
bkRhdGEocmVnaW9uLmdldCgpLCBkYXRhU2l6ZSwgcmVnaW9uRGF0YSkpCiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBs
ZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAJ
KHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODcsNyArMzg3LDcgQEAgY29uc3QgVGV4dFJ1biYgQ29tcGxleFRleHRDb250cm9sbGVyOjpnZQog
ICAgICAgICBzb3VyY2VUZXh0ID0gbm9ybWFsaXplZFN0cmluZy5nZXRCdWZmZXIoKTsKICAgICB9
CiAKLSAgICBub3JtYWxpemVkQnVmZmVyLnNldChuZXcgVUNoYXJbbm9ybWFsaXplZEJ1ZmZlckxl
bmd0aCArIDFdKTsKKyAgICBub3JtYWxpemVkQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgVUNo
YXJbbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCArIDFdKTsKIAogICAgIG5vcm1hbGl6ZVNwYWNlc0Fu
ZE1pcnJvckNoYXJzKHNvdXJjZVRleHQsIG9yaWdpbmFsUnVuLnJ0bCgpLCBub3JtYWxpemVkQnVm
ZmVyLmdldCgpLCBub3JtYWxpemVkQnVmZmVyTGVuZ3RoKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNr
aWEuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0
LDcgQEAgc3RhdGljIHZvaWQgZ2x5cGhzVG9BZHZhbmNlcyhIQl9Gb250IGhiRgogICAgIGZvbnQt
PnNldHVwUGFpbnQoJnBhaW50KTsKICAgICBwYWludC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6
a0dseXBoSURfVGV4dEVuY29kaW5nKTsKIAotICAgIE93bkFycmF5UHRyPHVpbnQxNl90PiBnbHlw
aHMxNihuZXcgdWludDE2X3RbbnVtR2x5cGhzXSk7CisgICAgT3duQXJyYXlQdHI8dWludDE2X3Q+
IGdseXBoczE2ID0gYWRvcHRBcnJheVB0cihuZXcgdWludDE2X3RbbnVtR2x5cGhzXSk7CiAgICAg
aWYgKCFnbHlwaHMxNi5nZXQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMgSEJf
Qm9vbCBjYW5SZW5kZXIoSEJfRm9udCBoYkZvbnQsCiAgICAgZm9udC0+c2V0dXBQYWludCgmcGFp
bnQpOwogICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMTZfVGV4dEVuY29k
aW5nKTsKIAotICAgIE93bkFycmF5UHRyPHVpbnQxNl90PiBnbHlwaHMxNihuZXcgdWludDE2X3Rb
bGVuZ3RoXSk7CisgICAgT3duQXJyYXlQdHI8dWludDE2X3Q+IGdseXBoczE2ID0gYWRvcHRBcnJh
eVB0cihuZXcgdWludDE2X3RbbGVuZ3RoXSk7CiAgICAgaWYgKCFnbHlwaHMxNi5nZXQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgaW50IG51bUdseXBocyA9IHBhaW50LnRleHRUb0dseXBocyhj
aGFyYWN0ZXJzLCBsZW5ndGggKiBzaXplb2YodWludDE2X3QpLCBnbHlwaHMxNi5nZXQoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUu
Y3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQg
VGV4dHVyZTo6dXBkYXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMKICAgICBpbnQgdGVtcEJ1ZmZTaXpl
ID0gLy8gVGVtcG9yYXJ5IGJ1ZmZlciBzaXplIGlzIHRoZSBzbWFsbGVyIG9mIHRoZSBtYXggdGV4
dHVyZSBzaXplIG9yIHRoZSB1cGRhdGVSZWN0U2FuaXRpemVkCiAgICAgICAgIG1pbihtX3RpbGVz
Lm1heFRleHR1cmVTaXplKCksIG1fdGlsZXMuYm9yZGVyVGV4ZWxzKCkgKyB1cGRhdGVSZWN0U2Fu
aXRpemVkLndpZHRoKCkpICoKICAgICAgICAgbWluKG1fdGlsZXMubWF4VGV4dHVyZVNpemUoKSwg
bV90aWxlcy5ib3JkZXJUZXhlbHMoKSArIHVwZGF0ZVJlY3RTYW5pdGl6ZWQuaGVpZ2h0KCkpOwot
ICAgIE93bkFycmF5UHRyPHVpbnQzMl90PiB0ZW1wQnVmZihuZXcgdWludDMyX3RbdGVtcEJ1ZmZT
aXplXSk7CisgICAgT3duQXJyYXlQdHI8dWludDMyX3Q+IHRlbXBCdWZmID0gYWRvcHRBcnJheVB0
cihuZXcgdWludDMyX3RbdGVtcEJ1ZmZTaXplXSk7CiAKICAgICBmb3IgKGludCB0aWxlID0gMDsg
dGlsZSA8IG1fdGlsZXMubnVtVGlsZXMoKTsgdGlsZSsrKSB7CiAgICAgICAgIC8vIEludGVyc2Vj
dCB3aXRoIHRpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAko
cmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmUKICAgICBpbnQg
cm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIDQ7CiAgICAgaW50IHRvdGFsQnl0ZXMgPSByb3dC
eXRlcyAqIG1fY3VycmVudEhlaWdodDsKIAotICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+
IHBpeGVscyhuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7CisgICAgT3duQXJyYXlQdHI8
dW5zaWduZWQgY2hhcj4gcGl4ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhclt0
b3RhbEJ5dGVzXSk7CiAgICAgaWYgKCFwaXhlbHMpCiAgICAgICAgIHJldHVybjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgzOSw3ICs4MzksNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJl
YWRiYWNrSGFyZHdhCiAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fY2FudmFzLT5nZXRE
ZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpOwogICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhi
aXRtYXApOwogICAgIGludCB3aWR0aCA9IGJpdG1hcC53aWR0aCgpLCBoZWlnaHQgPSBiaXRtYXAu
aGVpZ2h0KCk7Ci0gICAgT3duQXJyYXlQdHI8dWludDMyX3Q+IGJ1ZihuZXcgdWludDMyX3Rbd2lk
dGhdKTsKKyAgICBPd25BcnJheVB0cjx1aW50MzJfdD4gYnVmID0gYWRvcHRBcnJheVB0cihuZXcg
dWludDMyX3Rbd2lkdGhdKTsKICAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7CiAgICAgbV9ncHVDYW52YXMtPmJpbmRGcmFtZWJ1ZmZl
cigpOwogICAgIC8vIEZsaXBzIHRoZSBpbWFnZSB2ZXJ0aWNhbGx5LgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAu
Y3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL1NoYXJlZEJpdG1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBA
QCBib29sIFNoYXJlZEJpdG1hcDo6dG8xNmJpdCgpCiAgICAgaW50IHdpZHRoID0gbmV3Qm1wSW5m
by53aWR0aCgpOwogICAgIGludCBwYWRkZWRXaWR0aCA9IG5ld0JtcEluZm8ucGFkZGVkV2lkdGgo
KTsKICAgICBpbnQgYnVmZmVyU2l6ZSA9IHBhZGRlZFdpZHRoICogbmV3Qm1wSW5mby5oZWlnaHQo
KTsKLSAgICBPd25BcnJheVB0cjx1bnNpZ25lZD4gbmV3UGl4ZWxEYXRhKG5ldyB1bnNpZ25lZFti
dWZmZXJTaXplIC8gMl0pOworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkPiBuZXdQaXhlbERhdGEg
PSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZFtidWZmZXJTaXplIC8gMl0pOwogICAgIHZvaWQq
IG5ld1BpeGVscyA9IG5ld1BpeGVsRGF0YS5nZXQoKTsKIAogICAgIGlmICghbmV3UGl4ZWxzKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3Bw
CShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0
TWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBDb250ZXh0
TWVudTo6Z2V0Q29udGV4dE1lbnVJdGVtcyhITQogICAgICAgICB9CiAKICAgICAgICAgaW50IG1l
bnVTdHJpbmdMZW5ndGggPSBpbmZvLmNjaCArIDE7Ci0gICAgICAgIE93bkFycmF5UHRyPFdDSEFS
PiBtZW51U3RyaW5nKG5ldyBXQ0hBUlttZW51U3RyaW5nTGVuZ3RoXSk7CisgICAgICAgIE93bkFy
cmF5UHRyPFdDSEFSPiBtZW51U3RyaW5nID0gYWRvcHRBcnJheVB0cihuZXcgV0NIQVJbbWVudVN0
cmluZ0xlbmd0aF0pOwogICAgICAgICBpbmZvLmR3VHlwZURhdGEgPSBtZW51U3RyaW5nLmdldCgp
OwogICAgICAgICBpbmZvLmNjaCA9IG1lbnVTdHJpbmdMZW5ndGg7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5jcHAJKHJldmlzaW9uIDc3NzgwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0aWFsaXplV2l0aFVzZXJE
ZWYKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3duQXJyYXlQdHI8
Y2hhcj4gYnVmZmVyKG5ldyBjaGFyW2xlbmd0aF0pOworICAgIE93bkFycmF5UHRyPGNoYXI+IGJ1
ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbbGVuZ3RoXSk7CiAKICAgICBpZiAoIUdldEVu
dmlyb25tZW50VmFyaWFibGVBKGNoYW5uZWwuZGVmYXVsdE5hbWUsIGJ1ZmZlci5nZXQoKSwgbGVu
Z3RoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luUGFja2FnZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2OCw3ICsxNjgsNyBAQCBib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCiAgICAgaWYg
KHZlcnNpb25JbmZvU2l6ZSA9PSAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBPd25B
cnJheVB0cjxjaGFyPiB2ZXJzaW9uSW5mb0RhdGEobmV3IGNoYXJbdmVyc2lvbkluZm9TaXplXSk7
CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gdmVyc2lvbkluZm9EYXRhID0gYWRvcHRBcnJheVB0cihu
ZXcgY2hhclt2ZXJzaW9uSW5mb1NpemVdKTsKIAogICAgIGlmICghR2V0RmlsZVZlcnNpb25JbmZv
Vyhjb25zdF9jYXN0PFVDaGFyKj4obV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkpLAogICAgICAgICAgICAgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJzaW9uSW5mb0RhdGEuZ2V0
KCkpKQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wMi0wNiAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBPd25BcnJhcnlQdHIuaCB1c2VzIGRlbGV0ZU93bmVkUHRy
IGJ1dCBkb2VzbuKAmXQgaW5jbHVkZSBPd25QdHJDb21tb24uaAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI4NjcKKworICAgICAgICAqIFNoYXJlZC9Q
bHVnaW5zL05ldHNjYXBlL3dpbi9OZXRzY2FwZVBsdWdpbk1vZHVsZVdpbi5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luTW9kdWxlOjpnZXRQbHVnaW5JbmZvKTogQ2FsbHMgYWRv
cHRBcnJheVB0ci4KKwogMjAxMS0wMi0wNiAgQmVuamFtaW4gUG91bGFpbiAgPGlraXBvdUBnbWFp
bC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3dpbi9OZXRzY2FwZVBsdWdpbk1vZHVs
ZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0
c2NhcGUvd2luL05ldHNjYXBlUGx1Z2luTW9kdWxlV2luLmNwcAkocmV2aXNpb24gNzc3ODApCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS93aW4vTmV0c2NhcGVQbHVn
aW5Nb2R1bGVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBsdWdpbkluZm8KICAgICBpZiAoIXZlcnNpb25JbmZvU2l6
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4gdmVyc2lv
bkluZm9EYXRhKG5ldyBjaGFyW3ZlcnNpb25JbmZvU2l6ZV0pOworICAgIE93bkFycmF5UHRyPGNo
YXI+IHZlcnNpb25JbmZvRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbdmVyc2lvbkluZm9T
aXplXSk7CiAgICAgaWYgKCE6OkdldEZpbGVWZXJzaW9uSW5mb1cocGF0aENvcHkuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJzaW9uSW5mb0Rh
dGEuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDItMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgT3duQXJyYXJ5UHRyLmggdXNlcyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGlu
Y2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUyODY3CisKKyAgICAgICAgKiBXZWJIaXN0b3J5LmNwcDoKKyAgICAgICAg
KFdlYkhpc3Rvcnk6Om9yZGVyZWRMYXN0VmlzaXRlZERheXMpOiBDYWxscyBhZG9wdEFycmF5UHRy
LgorICAgICAgICAqIFdlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2Vz
Ojpjb3B5V2ViS2l0UHJlZmVyZW5jZXNUb0NGUHJlZmVyZW5jZXMpOiBEaXR0by4KKwogMjAxMS0w
Mi0wMyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViSGlz
dG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAJ
KHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3Niw3ICs0NzYsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYkhpc3Rvcnk6Om9yCiAKICAgICAqY291bnQgPSBkYXRlQ291bnQ7CiAgICAgaWYgKCFtX29y
ZGVyZWRMYXN0VmlzaXRlZERheXMpIHsKLSAgICAgICAgbV9vcmRlcmVkTGFzdFZpc2l0ZWREYXlz
LnNldChuZXcgREFURVtkYXRlQ291bnRdKTsKKyAgICAgICAgbV9vcmRlcmVkTGFzdFZpc2l0ZWRE
YXlzID0gYWRvcHRBcnJheVB0cihuZXcgREFURVtkYXRlQ291bnRdKTsKICAgICAgICAgRGF0ZVRv
RW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5kID0gbV9lbnRyaWVzQnlEYXRlLmVu
ZCgpLmtleXMoKTsKICAgICAgICAgaW50IGkgPSAwOwogICAgICAgICBmb3IgKERhdGVUb0VudHJp
ZXNNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9lbnRyaWVzQnlEYXRlLmJlZ2luKCku
a2V5cygpOyBpdCAhPSBlbmQ7ICsraXQsICsraSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dl
YlByZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJQcmVm
ZXJlbmNlcy5jcHAJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViUHJl
ZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjMsOCArNDYzLDggQEAgdm9pZCBXZWJQ
cmVmZXJlbmNlczo6Y29weVdlYktpdFByZWZlcmVuYwogICAgIENGU3RyaW5nUmVmIGRpZFJlbW92
ZURlZmF1bHRzS2V5ID0gQ0ZTVFIoV2ViS2l0RGlkTWlncmF0ZURlZmF1bHRTZXR0aW5nc0Zyb21T
YWZhcmkzQmV0YVByZWZlcmVuY2VLZXkpOwogICAgIGJvb2wgb21pdERlZmF1bHRzID0gIWJvb2xl
YW5WYWx1ZUZvclByZWZlcmVuY2VzVmFsdWUoQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdCwgZGlk
UmVtb3ZlRGVmYXVsdHNLZXkpKTsKIAotICAgIE93bkFycmF5UHRyPENGVHlwZVJlZj4ga2V5cyhu
ZXcgQ0ZUeXBlUmVmW2NvdW50XSk7Ci0gICAgT3duQXJyYXlQdHI8Q0ZUeXBlUmVmPiB2YWx1ZXMo
bmV3IENGVHlwZVJlZltjb3VudF0pOworICAgIE93bkFycmF5UHRyPENGVHlwZVJlZj4ga2V5cyA9
IGFkb3B0QXJyYXlQdHIobmV3IENGVHlwZVJlZltjb3VudF0pOworICAgIE93bkFycmF5UHRyPENG
VHlwZVJlZj4gdmFsdWVzID0gYWRvcHRBcnJheVB0cihuZXcgQ0ZUeXBlUmVmW2NvdW50XSk7CiAg
ICAgQ0ZEaWN0aW9uYXJ5R2V0S2V5c0FuZFZhbHVlcyhkaWN0LCBrZXlzLmdldCgpLCB2YWx1ZXMu
Z2V0KCkpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CkluZGV4OiBU
b29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3
Nzc4MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDExLTAyLTA2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE93bkFycmFyeVB0ci5oIHVz
ZXMgZGVsZXRlT3duZWRQdHIgYnV0IGRvZXNu4oCZdCBpbmNsdWRlIE93blB0ckNvbW1vbi5oCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjg2NworCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vSW1hZ2VEaWZmLmNwcDoKKyAgICAgICAg
KEltYWdlOjpjcmFldGVGcm9tU3RkaW4pOiBDYWxsIGFkb3B0QXJyYXlQdHIuCisKIDIwMTEtMDIt
MDYgIEphbWVzIEtvemlhbnNraSAgPGtvekBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgT2phbiBWYWZhaS4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0lt
YWdlRGlmZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
SW1hZ2VEaWZmLmNwcAkocmV2aXNpb24gNzc3ODApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9JbWFnZURpZmYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKCFieXRlTGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHNvdXJjZShuZXcgdW5zaWdu
ZWQgY2hhcltieXRlTGVuZ3RoXSk7CisgICAgICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+
IHNvdXJjZSA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbYnl0ZUxlbmd0aF0pOwog
ICAgICAgICBpZiAoZnJlYWQoc291cmNlLmdldCgpLCAxLCBieXRlTGVuZ3RoLCBzdGRpbikgIT0g
Ynl0ZUxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81445</attachid>
            <date>2011-02-06 20:35:18 -0800</date>
            <delta_ts>2011-02-06 20:40:31 -0800</delta_ts>
            <desc>fixed per Darin&apos;s comment</desc>
            <filename>bug-52867-20110206203517.patch</filename>
            <type>text/plain</type>
            <size>48329</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAK
KzIwMTEtMDItMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmggdXNl
cyBkZWxldGVPd25lZFB0ciBidXQgZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisKKyAg
ICAgICAgUmVtb3ZlZCBMT09TRV9PV05fQVJSQVlfUFRSIGFuZCBPd25BcnJheVB0cjxUPjo6c2V0
LiBSZXBsYWNlZCBhbGwgY2FsbHMgdG8gT3duQXJyYXlQdHI6OnNldAorICAgICAgICBhbmQgbG9v
c2UgaW5zdGFudGlhdGlvbiBvZiBPd25BcnJheVB0ciBieSBjYWxscyB0byBvcGVyYXRvcj0gYW5k
IGFkb3B0QXJyYXlQdHIuIEFsc28gcmVtb3ZlZAorICAgICAgICBPd25BcnJheVB0ckNvbW1vbi5o
IHNpbmNlIFBhc3NPd25BcnJheVB0ci5oIG5lZWRzIHRvIGluY2x1ZGUgT3duQXJyYXlQdHIuaCBh
bmQgdGhlcmUgaXMKKyAgICAgICAgbm8gcG9pbnQgaW4gcHV0dGluZyBkZWxldGVPd25lZEFycmF5
UHRyIGludG8gYSBzZXBhcmF0ZSBoZWFkZXIuCisgICAgICAgIAorICAgICAgICBOb3RlOiBpZiB0
aGlzIHBhdGNoIGJyZWFrcyBidWlsZCwgdGhlIGNvZGUgaXMgZWl0aGVyIGluc3RpYW50aWF0aW5n
IE93bkFycmF5UHRyCisgICAgICAgIHdpdGhvdXQgY2FsbGluZyBhZG9wdEFycmF5UHRyIG9yIGNh
bGxpbmcgc2V0IG9uIEFycmF5T3duUHRyIGluc3RlYWQgb2Ygb3BlcmF0b3I9LgorCisgICAgICAg
IE5vIHRlc3RzIGFyZSBhZGRlZCBzaW5jZSB0aGlzIGlzIGEgcmVmYWN0b3JpbmcuCisKKyAgICAg
ICAgKiBBUEkvSlNTdHJpbmdSZWZDRi5jcHA6CisgICAgICAgIChKU1N0cmluZ0NyZWF0ZVdpdGhD
RlN0cmluZyk6IENhbGxzIGFkb3B0QXJyYXlQdHIuCisgICAgICAgICogR05VbWFrZWZpbGUuYW06
IFJlbW92ZWQgT3duQXJyYXlQdHJDb21tb24uaAorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
cHJvai9XVEYvV1RGLnZjcHJvajogRGl0dG8uCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogcnVudGltZS9Bcmd1bWVu
dHMuY3BwOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KTogQ2FsbHMg
YWRvcHRBcnJheVB0ci4KKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAo
SlNDOjpBcmd1bWVudHM6OmNvcHlSZWdpc3RlcnMpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKTogRGl0dG8uCisgICAgICAgICogcnVu
dGltZS9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTVmFyaWFibGVPYmplY3Q6
OnNldFJlZ2lzdGVycyk6IENhbGxzIG9wZXJhdG9yPSBpbnN0ZWFkIG9mIHNldC4KKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlQ2hh
aW46OlN0cnVjdHVyZUNoYWluKTogRGl0dG8uCisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIHd0Zi9EYXRlTWF0aC5oOgorICAgICAgICAoSlNDOjpHcmVnb3JpYW5EYXRl
VGltZTo6R3JlZ29yaWFuRGF0ZVRpbWUpOiBObyBsb25nZXIgaW5zdG5hdGlhdGVzIE93bkFycmF5
UHRyCisgICAgICAgIHdpdGggYSBudWxsIHBvaW50ZXIuCisgICAgICAgICogd3RmL093bkFycmF5
UHRyLmg6CisgICAgICAgICogd3RmL093bkFycmF5UHRyQ29tbW9uLmg6IFJlbW92ZWQuCisgICAg
ICAgICogd3RmL1Bhc3NPd25BcnJheVB0ci5oOiBObyBsb25nZXIgaW5jbHVkZXMgT3duQXJyYXlD
b21tb24uaAorICAgICAgICAoV1RGOjpkZWxldGVPd25lZEFycmF5UHRyKTogTW92ZWQgZnJvbSBP
d25BcnJheVB0ckNvbW1vbi5oCisKIDIwMTEtMDItMDYgIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNzc3ODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5
Myw3ICs0OTMsNiBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL09TQWxsb2NhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
T3duQXJyYXlQdHIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25GYXN0TWFsbG9j
UHRyLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT3duQXJyYXlQdHJDb21tb24uaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25QdHJDb21tb24uaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9Pd25QdHIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
YWdlQWxsb2NhdGlvbi5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJp
bmdSZWZDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0
cmluZ1JlZkNGLmNwcAkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU3RyaW5nUmVmQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIEpT
U3RyaW5nUmVmIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKEMKICAgICAvLyBpdCBjYW4gaG9s
ZC4gICg8cmRhcjovL3Byb2JsZW0vNjgwNjQ3OD4pCiAgICAgc2l6ZV90IGxlbmd0aCA9IENGU3Ry
aW5nR2V0TGVuZ3RoKHN0cmluZyk7CiAgICAgaWYgKGxlbmd0aCkgewotICAgICAgICBPd25BcnJh
eVB0cjxVbmlDaGFyPiBidWZmZXIobmV3IFVuaUNoYXJbbGVuZ3RoXSk7CisgICAgICAgIE93bkFy
cmF5UHRyPFVuaUNoYXI+IGJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IFVuaUNoYXJbbGVuZ3Ro
XSk7CiAgICAgICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhzdHJpbmcsIENGUmFuZ2VNYWtlKDAs
IGxlbmd0aCksIGJ1ZmZlci5nZXQoKSk7CiAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihV
bmlDaGFyKSA9PSBzaXplb2YoVUNoYXIpLCB1bmljaGFyX2FuZF91Y2hhcl9tdXN0X2JlX3NhbWVf
c2l6ZSk7CiAgICAgICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8VUNoYXIqPihidWZmZXIuZ2V0KCkpLCBsZW5ndGgpLmxlYWtSZWYoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9XVEYvV1RGLnZjcHJvagkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC03NTcsMTAgKzc1Nyw2IEBACiAJCQk+CiAJCTwvRmlsZT4KIAkJPEZpbGUKLQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5cd3RmXE93bkFycmF5UHRyQ29tbW9uLmgiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJ
PEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXE93bkZhc3RNYWxsb2NQdHIuaCIKIAkJ
CT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDc3NzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw3ICs1NTIsNiBAQAogCQlC
Q0RFM0I0MzBFNkM4MzJEMDAxNDUzQTcgLyogU3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDREUzQUIwMEU2QzgyQ0YwMDE0NTNBNyAv
KiBTdHJ1Y3R1cmUuY3BwICovOyB9OwogCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJn
TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNG
NjA1MTIwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0ZCRTY5NjEyMjU2MEU4MDAzMDlFOUQgLyog
UGFzc093bkFycmF5UHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0ZCRTY5NTEyMjU2MEU4MDAzMDlFOUQgLyogUGFzc093bkFycmF5UHRyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkNGQkU2OTgx
MjI1NjFEMjAwMzA5RTlEIC8qIE93bkFycmF5UHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZCRTY5NzEyMjU2MUQyMDAzMDlFOUQgLyog
T3duQXJyYXlQdHJDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkwMEVF
QjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovOyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3
MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87
IH07CiAJCUMwQTI3MjYzMEU1MEEwNjMwMEU5NkUxNSAvKiBOb3RGb3VuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBBMjcyM0YwRTUwOUYxRTAwRTk2
RTE1IC8qIE5vdEZvdW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTExNjIsNyArMTE2MSw2IEBACiAJCUJDRjYwNTEyMEUyMDNFRjgwMEI5QTY0
RCAvKiBBcmdMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyZ0xpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGNjU1M0IwQTIwNDhERTAwMzhBMTk0
IC8qIE1hdGhFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGhF
eHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGQkU2OTUxMjI1NjBFODAw
MzA5RTlEIC8qIFBhc3NPd25BcnJheVB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQYXNzT3duQXJyYXlQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNG
QkU2OTcxMjI1NjFEMjAwMzA5RTlEIC8qIE93bkFycmF5UHRyQ29tbW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93bkFycmF5UHRyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1
bXBUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKdW1wVGFibGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBBMjcyM0YwRTUwOUYxRTAwRTk2RTE1IC8q
IE5vdEZvdW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vdEZvdW5kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTgyLDcgKzE1ODAsNiBAQAogCQkJCTE0
MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovLAogCQkJCTE0MDAwNjky
MTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLywKIAkJCQk5MzAzRjVB
NDA5OTExQTU4MDBBRDcxQjggLyogT3duQXJyYXlQdHIuaCAqLywKLQkJCQlCQ0ZCRTY5NzEyMjU2
MUQyMDAzMDlFOUQgLyogT3duQXJyYXlQdHJDb21tb24uaCAqLywKIAkJCQkwQkRGRkFEMTBGQzYx
NkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovLAogCQkJCTkzMDNGNTY3MDk5MTE4
RkEwMEFENzFCOCAvKiBPd25QdHIuaCAqLywKIAkJCQk0NDBCN0FFRDBGQUY3RkNCMDA3MzMyM0Ug
LyogT3duUHRyQ29tbW9uLmggKi8sCkBAIC0yMzE2LDcgKzIzMTMsNiBAQAogCQkJCUJDMThDNDQ4
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAw
MDY3NzEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDQ5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPd25BcnJheVB0ci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQkNGQkU2OTgxMjI1NjFEMjAwMzA5RTlEIC8qIE93bkFycmF5UHRyQ29tbW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3duRmFzdE1hbGxv
Y1B0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NEEwRTE2RjVDRDAwQjM0NDYwIC8qIE93
blB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDQwOUQ4NDcwRkFGODBBMjAwNTIzQjg3IC8qIE93
blB0ckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcg
KzMwMyw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUKIHsKICAg
ICBpZiAoaSA8IGQtPm51bUFyZ3VtZW50cykgewogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1
bWVudHMpIHsKLSAgICAgICAgICAgIGQtPmRlbGV0ZWRBcmd1bWVudHMuc2V0KG5ldyBib29sW2Qt
Pm51bUFyZ3VtZW50c10pOworICAgICAgICAgICAgZC0+ZGVsZXRlZEFyZ3VtZW50cyA9IGFkb3B0
QXJyYXlQdHIobmV3IGJvb2xbZC0+bnVtQXJndW1lbnRzXSk7CiAgICAgICAgICAgICBtZW1zZXQo
ZC0+ZGVsZXRlZEFyZ3VtZW50cy5nZXQoKSwgMCwgc2l6ZW9mKGJvb2wpICogZC0+bnVtQXJndW1l
bnRzKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pIHsK
QEAgLTMyMSw3ICszMjEsNyBAQCBib29sIEFyZ3VtZW50czo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0
YXRlCiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoaXNBcnJheUlu
ZGV4KTsKICAgICBpZiAoaXNBcnJheUluZGV4ICYmIGkgPCBkLT5udW1Bcmd1bWVudHMpIHsKICAg
ICAgICAgaWYgKCFkLT5kZWxldGVkQXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBkLT5kZWxldGVk
QXJndW1lbnRzLnNldChuZXcgYm9vbFtkLT5udW1Bcmd1bWVudHNdKTsKKyAgICAgICAgICAgIGQt
PmRlbGV0ZWRBcmd1bWVudHMgPSBhZG9wdEFycmF5UHRyKG5ldyBib29sW2QtPm51bUFyZ3VtZW50
c10pOwogICAgICAgICAgICAgbWVtc2V0KGQtPmRlbGV0ZWRBcmd1bWVudHMuZ2V0KCksIDAsIHNp
emVvZihib29sKSAqIGQtPm51bUFyZ3VtZW50cyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFk
LT5kZWxldGVkQXJndW1lbnRzW2ldKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcmd1bWVudHMuaAkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDEwICsyMjYsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGQtPm51bVBh
cmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIHNp
emVfdCByZWdpc3RlckFycmF5U2l6ZSA9IGQtPm51bVBhcmFtZXRlcnM7CiAKLSAgICAgICAgUmVn
aXN0ZXIqIHJlZ2lzdGVyQXJyYXkgPSBuZXcgUmVnaXN0ZXJbcmVnaXN0ZXJBcnJheVNpemVdOwot
ICAgICAgICBtZW1jcHkocmVnaXN0ZXJBcnJheSwgZC0+cmVnaXN0ZXJzIC0gcmVnaXN0ZXJPZmZz
ZXQsIHJlZ2lzdGVyQXJyYXlTaXplICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGQtPnJl
Z2lzdGVyQXJyYXkuc2V0KHJlZ2lzdGVyQXJyYXkpOwotICAgICAgICBkLT5yZWdpc3RlcnMgPSBy
ZWdpc3RlckFycmF5ICsgcmVnaXN0ZXJPZmZzZXQ7CisgICAgICAgIE93bkFycmF5UHRyPFJlZ2lz
dGVyPiByZWdpc3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgUmVnaXN0ZXJbcmVnaXN0ZXJB
cnJheVNpemVdKTsKKyAgICAgICAgbWVtY3B5KHJlZ2lzdGVyQXJyYXkuZ2V0KCksIGQtPnJlZ2lz
dGVycyAtIHJlZ2lzdGVyT2Zmc2V0LCByZWdpc3RlckFycmF5U2l6ZSAqIHNpemVvZihSZWdpc3Rl
cikpOworICAgICAgICBkLT5yZWdpc3RlcnMgPSByZWdpc3RlckFycmF5LmdldCgpICsgcmVnaXN0
ZXJPZmZzZXQ7CisgICAgICAgIGQtPnJlZ2lzdGVyQXJyYXkgPSByZWdpc3RlckFycmF5LnJlbGVh
c2UoKTsKICAgICB9CiAKICAgICAvLyBUaGlzIEpTQWN0aXZhdGlvbiBmdW5jdGlvbiBpcyBkZWZp
bmVkIGhlcmUgc28gaXQgY2FuIGdldCBhdCBBcmd1bWVudHM6OnNldFJlZ2lzdGVycy4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw3ICs0MCw3IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3BlcnQKICAg
ICAsIG1fY2FjaGVkU3RydWN0dXJlKDApCiAgICAgLCBtX251bUNhY2hlYWJsZVNsb3RzKG51bUNh
Y2hlYWJsZVNsb3RzKQogICAgICwgbV9qc1N0cmluZ3NTaXplKHByb3BlcnR5TmFtZUFycmF5RGF0
YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuc2l6ZSgpKQotICAgICwgbV9qc1N0cmluZ3MobmV3IFdy
aXRlQmFycmllcjxVbmtub3duPlttX2pzU3RyaW5nc1NpemVdKQorICAgICwgbV9qc1N0cmluZ3Mo
YWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W21fanNTdHJpbmdzU2l6ZV0p
KQogewogICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yJiBwcm9w
ZXJ0eU5hbWVWZWN0b3IgPSBwcm9wZXJ0eU5hbWVBcnJheURhdGEtPnByb3BlcnR5TmFtZVZlY3Rv
cigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9qc1N0cmluZ3NTaXplOyArK2kpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVj
dC5oCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDcgKzE2MCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGlubGluZSB2b2lkIEpTVmFyaWFibGVPYmplY3Q6OnNldFJlZ2lzdGVy
cyhSZWdpc3RlciogcmVnaXN0ZXJzLCBSZWdpc3RlciogcmVnaXN0ZXJBcnJheSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChyZWdpc3RlckFycmF5ICE9IGQtPnJlZ2lzdGVyQXJyYXkuZ2V0KCkpOwot
ICAgICAgICBkLT5yZWdpc3RlckFycmF5LnNldChyZWdpc3RlckFycmF5KTsKKyAgICAgICAgZC0+
cmVnaXN0ZXJBcnJheSA9IGFkb3B0QXJyYXlQdHIocmVnaXN0ZXJBcnJheSk7CiAgICAgICAgIGQt
PnJlZ2lzdGVycyA9IHJlZ2lzdGVyczsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDc3NzgwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIFN0cnVjdHVyZUNoYWluOjpTdHJ1Y3R1cmVDaGFp
bihTdHJ1Y3R1cmUKICAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9IGhlYWQ7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSA/IDAgOiBhc09i
amVjdChjdXJyZW50LT5zdG9yZWRQcm90b3R5cGUoKSktPnN0cnVjdHVyZSgpKQogICAgICAgICAr
K3NpemU7CiAgICAgCi0gICAgbV92ZWN0b3Iuc2V0KG5ldyBSZWZQdHI8U3RydWN0dXJlPltzaXpl
ICsgMV0pOworICAgIG1fdmVjdG9yID0gYWRvcHRBcnJheVB0cihuZXcgUmVmUHRyPFN0cnVjdHVy
ZT5bc2l6ZSArIDFdKTsKIAogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKFN0cnVjdHVyZSog
Y3VycmVudCA9IGhlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5
cGUoKS5pc051bGwoKSA/IDAgOiBhc09iamVjdChjdXJyZW50LT5zdG9yZWRQcm90b3R5cGUoKSkt
PnN0cnVjdHVyZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAgU0VUKFdURl9IRUFERVJT
CiAgICAgTnVsbFB0ci5oCiAgICAgT1NBbGxvY2F0b3IuaAogICAgIE93bkFycmF5UHRyLmgKLSAg
ICBPd25BcnJheVB0ckNvbW1vbi5oCiAgICAgT3duRmFzdE1hbGxvY1B0ci5oCiAgICAgT3duUHRy
LmgKICAgICBPd25QdHJDb21tb24uaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9E
YXRlTWF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1h
dGguaAkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVN
YXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICwgeWVhcigwKQogICAgICAgICAsIGlzRFNUKDApCiAgICAgICAgICwgdXRjT2Zmc2V0KDApCi0g
ICAgICAgICwgdGltZVpvbmUoMCkKICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL093bkFycmF5UHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9Pd25BcnJheVB0ci5oCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvT3duQXJyYXlQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTMgKzI0
LDkgQEAKICNpbmNsdWRlICJBc3NlcnRpb25zLmgiCiAjaW5jbHVkZSAiTm9uY29weWFibGUuaCIK
ICNpbmNsdWRlICJOdWxsUHRyLmgiCi0jaW5jbHVkZSAiT3duUHRyQ29tbW9uLmgiCi0jaW5jbHVk
ZSAiT3duQXJyYXlQdHJDb21tb24uaCIKKyNpbmNsdWRlICJQYXNzT3duQXJyYXlQdHIuaCIKICNp
bmNsdWRlIDxhbGdvcml0aG0+CiAKLS8vIFJlbW92ZSB0aGlzIG9uY2Ugd2UgbWFrZSBhbGwgV2Vi
S2l0IGNvZGUgY29tcGF0aWJsZSB3aXRoIHN0cmljdGVyIHJ1bGVzIGFib3V0IE93bkFycmF5UHRy
LgotI2RlZmluZSBMT09TRV9PV05fQVJSQVlfUFRSCi0KIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzT3duQXJyYXlQdHI7CkBAIC0xMTUsMTYgKzExMSw2
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBPd24KICAgICByZXR1cm4g
cHRyOwogfQogCi0jaWZkZWYgTE9PU0VfT1dOX0FSUkFZX1BUUgotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHZvaWQgT3duQXJyYXlQdHI8VD46OnNldChQdHJUeXBlIHB0cikKLXsKLSAgICBB
U1NFUlQoIXB0ciB8fCBtX3B0ciAhPSBwdHIpOwotICAgIFB0clR5cGUgb2xkUHRyID0gbV9wdHI7
Ci0gICAgbV9wdHIgPSBwdHI7Ci0gICAgZGVsZXRlT3duZWRQdHIob2xkUHRyKTsKLX0KLSNlbmRp
ZgotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgT3duQXJyYXlQdHI8VD4mIE93bkFycmF5
UHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUGFzc093bkFycmF5UHRyPFQ+JiBvKQogewogICAgIFB0
clR5cGUgcHRyID0gbV9wdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL093bkFy
cmF5UHRyQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9P
d25BcnJheVB0ckNvbW1vbi5oCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvT3duQXJyYXlQdHJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXVEZfT3duQXJyYXlQdHJDb21tb25faAotI2RlZmlu
ZSBXVEZfT3duQXJyYXlQdHJDb21tb25faAotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgZGVsZXRlT3duZWRBcnJheVB0cihUKiBwdHIpCi17Ci0g
ICAgdHlwZWRlZiBjaGFyIGtub3duW3NpemVvZihUKSA/IDEgOiAtMV07Ci0gICAgaWYgKHNpemVv
Zihrbm93bikpCi0gICAgICAgIGRlbGV0ZSBbXSBwdHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdU
RgotCi0jZW5kaWYgLy8gV1RGX093bkFycmF5UHRyQ29tbW9uX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGFzc093bkFycmF5UHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duQXJyYXlQdHIuaAkocmV2aXNpb24gNzc3ODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NPd25BcnJheVB0ci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJBc3NlcnRpb25zLmgiCiAjaW5jbHVkZSAi
TnVsbFB0ci5oIgotI2luY2x1ZGUgIk93bkFycmF5UHRyQ29tbW9uLmgiCiAjaW5jbHVkZSAiVHlw
ZVRyYWl0cy5oIgogCiAvLyBSZW1vdmUgdGhpcyBvbmNlIHdlIG1ha2UgYWxsIFdlYktpdCBjb2Rl
IGNvbXBhdGlibGUgd2l0aCBzdHJpY3RlciBydWxlcyBhYm91dCBQYXNzT3duQXJyYXlQdHIuCkBA
IC0zOSw2ICszOCw3IEBAIG5hbWVzcGFjZSBXVEYgewogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgT3duQXJyYXlQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzT3duQXJyYXlQ
dHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNzT3duQXJyYXlQdHI8VD4gYWRvcHRBcnJheVB0
cihUKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCog
cHRyKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093bkFycmF5UHRyIHsKIHB1
YmxpYzoKQEAgLTE5NCw2ICsxOTQsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBh
c3NPd25BcnJheQogICAgIHJldHVybiBQYXNzT3duQXJyYXlQdHI8VD4ocHRyKTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgZGVsZXRlT3duZWRBcnJheVB0cihUKiBwdHIp
Cit7CisgICAgdHlwZWRlZiBjaGFyIGtub3duW3NpemVvZihUKSA/IDEgOiAtMV07CisgICAgaWYg
KHNpemVvZihrbm93bikpCisgICAgICAgIGRlbGV0ZSBbXSBwdHI7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBQYXNzT3duQXJyYXlQdHI8VD4gc3RhdGljX3Bv
aW50ZXJfY2FzdChjb25zdCBQYXNzT3duQXJyYXlQdHI8VT4mIHApIAogewogICAgIHJldHVybiBh
ZG9wdEFycmF5UHRyKHN0YXRpY19jYXN0PFQqPihwLmxlYWtQdHIoKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dEdsdWUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0wMi0wNiAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPd25BcnJhcnlQdHIuaCB1c2VzIGRlbGV0ZU93bmVk
UHRyIGJ1dCBkb2VzbuKAmXQgaW5jbHVkZSBPd25QdHJDb21tb24uaAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI4NjcKKworICAgICAgICAqIEZvcndh
cmRpbmdIZWFkZXJzL3d0Zi9Pd25BcnJheVB0ckNvbW1vbi5oOiBSZW1vdmVkLgorCiAyMDExLTAx
LTMxICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ29udmVydCBt
YXJrc3RhY2sgdG8gYSBzbG90IHZpc2l0b3IgQVBJCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEds
dWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL093bkFycmF5UHRyQ29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25BcnJheVB0
ckNvbW1vbi5oCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvT3duQXJyYXlQdHJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MSArMCwwIEBACi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT3duQXJyYXlQdHJDb21tb24uaD4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMDItMDYgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmggdXNlcyBkZWxldGVPd25lZFB0ciBidXQg
ZG9lc27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAo
T09QUyEpCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvT3duQXJyYXlQdHJDb21t
b24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyk6IFJldHVybnMg
UGFzc093bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPj4gaW5zdGVhZCBvZgorICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qLgorICAgICAgICAoX05QTl9JbnZva2UpOiBDYWxscyBj
cmVhdGVWYWx1ZUxpc3RGcm9tVmFyaWFudEFyZ3MuCisgICAgICAgIChfTlBOX0ludm9rZURlZmF1
bHQpOiBjcmVhdGVWYWx1ZUxpc3RGcm9tVmFyaWFudEFyZ3MuCisgICAgICAgIChfTlBOX0NvbnN0
cnVjdCk6IGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncy4KKyAgICAgICAgKiBiaW5kaW5n
cy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVu
Y3Rpb25DYWxsOjpjYWxsKTogQ2FsbHMgYWRvcHRBcnJheVB0ci4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y29uc3RydWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5k
b3dTaGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVO
ZXdDb250ZXh0KTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpucE9iamVjdEludm9rZUltcGwpOiBEaXR0bworICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUpOiBEaXR0bywKKyAgICAgICAgKiBo
dG1sL0hUTUxBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJlYUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogQ2FsbHMgbmV3Q29vcmRzQXJyYXkuCisgICAgICAg
ICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxG
cmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogQ2FsbHMgbmV3TGVuZ3RoQXJy
YXkuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJz
KTogQ2FsbHMgYWRvcHRBcnJhWXB0ci4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVm
ZmVyQ2FjaGUpOiBEaXRvLgorICAgICAgICAqIHBsYXRmb3JtL0xlbmd0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpuZXdDb29yZHNBcnJheSk6IFJldHVybnMgUGFzc093bkFycmF5UHRyPExlbmd0
aD4gaW5zdGVhZCBvZiBMZW5ndGgqLgorICAgICAgICAoV2ViQ29yZTo6bmV3TGVuZ3RoQXJyYXkp
OiBSZXR1cm5zIFBhc3NPd25BcnJheVB0cjxMZW5ndGg+IGluc3RlYWQgb2YgTGVuZ3RoKi4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9MZW5ndGguaDogUHJvdG90eXBlIGNoYW5nZXMuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QU5HTEVXZWJLaXRCcmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNlKTogQ2FsbHMgYWRvcHRB
cnJheVB0ci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJl
ZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGlydHlSZWN0cyk6IERpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxp
bnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2V0Tm9y
bWFsaXplZFRleHRSdW4pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9IYXJmYnV6elNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2x5cGhzVG9BZHZhbmNl
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y2FuUmVuZGVyKTogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZTo6dXBkYXRlU3ViUmVjdCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOiBEaXR0
by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZGJhY2tIYXJk
d2FyZVRvU29mdHdhcmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9TaGFyZWRCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQml0bWFwOjp0bzE2
Yml0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpnZXRDb250ZXh0TWVudUl0ZW1zKTogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6aW5pdGlhbGl6ZVdpdGhVc2VyRGVmYXVsdCk6IERpdHRvLgorICAgICAgICAqIHBsdWdp
bnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFj
a2FnZTo6ZmV0Y2hJbmZvKTogRGl0dG8uCisKIDIwMTEtMDItMDYgIEJlbmphbWluIFBvdWxhaW4g
IDxpa2lwb3VAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUg
Q2hyaXN0aWFuc2VuLgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3Rm
L093bkFycmF5UHRyQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvd3RmL093bkFycmF5UHRyQ29tbW9uLmgJKHJldmlzaW9uIDc3NzgwKQorKysg
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL093bkFycmF5UHRyQ29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMCwwIEBACi0jaWZuZGVmIFdlYkNvcmVfRldEX093bkFy
cmF5UHRyQ29tbW9uX2gKLSNkZWZpbmUgV2ViQ29yZV9GV0RfT3duQXJyYXlQdHJDb21tb25faAot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL093bkFycmF5UHRyQ29tbW9uLmg+Ci0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCShyZXZpc2lvbiA3
Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCwxNCArNzgsMTQgQEAgc3RhdGljIHZvaWQgZnJlZVY4TlBPYmplY3Qo
TlBPYmplY3QqIG5wTwogICAgIGZyZWUodjhOcE9iamVjdCk7CiB9CiAKLXN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4qIGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyhjb25zdCBOUFZh
cmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBPYmplY3QqIG93bmVy
KQorc3RhdGljIFBhc3NPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBjcmVhdGVW
YWx1ZUxpc3RGcm9tVmFyaWFudEFyZ3MoY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQz
Ml90IGFyZ3VtZW50Q291bnQsIE5QT2JqZWN0KiBvd25lcikKIHsKLSAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4qIGFyZ3YgPSBuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+W2FyZ3VtZW50Q291bnRd
OworICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3YgPSBhZG9wdEFy
cmF5UHRyKG5ldyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT5bYXJndW1lbnRDb3VudF0pOwogICAgIGZv
ciAodWludDMyX3QgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnQ7IGluZGV4KyspIHsK
ICAgICAgICAgY29uc3QgTlBWYXJpYW50KiBhcmcgPSAmYXJndW1lbnRzW2luZGV4XTsKICAgICAg
ICAgYXJndltpbmRleF0gPSBjb252ZXJ0TlBWYXJpYW50VG9WOE9iamVjdChhcmcsIG93bmVyKTsK
ICAgICB9Ci0gICAgcmV0dXJuIGFyZ3Y7CisgICAgcmV0dXJuIGFyZ3YucmVsZWFzZSgpOwogfQog
CiAvLyBDcmVhdGUgYW4gaWRlbnRpZmllciAobnVsbCB0ZXJtaW5hdGVkIHV0ZjggY2hhciopIGZy
b20gdGhlIE5QSWRlbnRpZmllci4KQEAgLTE4OCw3ICsxODgsNyBAQCBib29sIF9OUE5fSW52b2tl
KE5QUCBucHAsIE5QT2JqZWN0KiBucE9iCiAKICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBvYmpl
Y3QuCiAgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+OjpDYXN0KGZ1bmN0aW9uT2JqZWN0KTsKLSAgICBPd25BcnJheVB0cjx2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmd2KGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyhh
cmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIG5wT2JqZWN0KSk7CisgICAgT3duQXJyYXlQdHI8djg6
OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJndiA9IGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJn
cyhhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIG5wT2JqZWN0KTsKICAgICB2ODo6TG9jYWw8djg6
OlZhbHVlPiByZXN1bHRPYmplY3QgPSBwcm94eS0+Y2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCB2OE5w
T2JqZWN0LT52OE9iamVjdCwgYXJndW1lbnRDb3VudCwgYXJndi5nZXQoKSk7CiAKICAgICAvLyBJ
ZiB3ZSBoYWQgYW4gZXJyb3IsIHJldHVybiBmYWxzZS4gIFRoZSBzcGVjIGlzIGEgbGl0dGxlIHVu
Y2xlYXIgaGVyZSwgYnV0IHNheXMgIlJldHVybnMgdHJ1ZSBpZiB0aGUgbWV0aG9kIHdhcwpAQCAt
MjM3LDcgKzIzNyw3IEBAIGJvb2wgX05QTl9JbnZva2VEZWZhdWx0KE5QUCBucHAsIE5QT2JqZWMK
ICAgICAgICAgVjhQcm94eSogcHJveHkgPSB0b1Y4UHJveHkobnBPYmplY3QpOwogICAgICAgICBB
U1NFUlQocHJveHkpOwogCi0gICAgICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVl
PiA+IGFyZ3YoY3JlYXRlVmFsdWVMaXN0RnJvbVZhcmlhbnRBcmdzKGFyZ3VtZW50cywgYXJndW1l
bnRDb3VudCwgbnBPYmplY3QpKTsKKyAgICAgICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6
VmFsdWU+ID4gYXJndiA9IGNyZWF0ZVZhbHVlTGlzdEZyb21WYXJpYW50QXJncyhhcmd1bWVudHMs
IGFyZ3VtZW50Q291bnQsIG5wT2JqZWN0KTsKICAgICAgICAgcmVzdWx0T2JqZWN0ID0gcHJveHkt
PmNhbGxGdW5jdGlvbihmdW5jdGlvbiwgZnVuY3Rpb25PYmplY3QsIGFyZ3VtZW50Q291bnQsIGFy
Z3YuZ2V0KCkpOwogICAgIH0KICAgICAvLyBJZiB3ZSBoYWQgYW4gZXJyb3IsIHJldHVybiBmYWxz
ZS4gIFRoZSBzcGVjIGlzIGEgbGl0dGxlIHVuY2xlYXIgaGVyZSwgYnV0IHNheXMgIlJldHVybnMg
dHJ1ZSBpZiB0aGUgbWV0aG9kIHdhcwpAQCAtNTMzLDcgKzUzMyw3IEBAIGJvb2wgX05QTl9Db25z
dHJ1Y3QoTlBQIG5wcCwgTlBPYmplY3QqIG4KICAgICAgICAgICAgIFY4UHJveHkqIHByb3h5ID0g
dG9WOFByb3h5KG5wT2JqZWN0KTsKICAgICAgICAgICAgIEFTU0VSVChwcm94eSk7CiAKLSAgICAg
ICAgICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3YoY3JlYXRlVmFs
dWVMaXN0RnJvbVZhcmlhbnRBcmdzKGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgbnBPYmplY3Qp
KTsKKyAgICAgICAgICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3Yg
PSBjcmVhdGVWYWx1ZUxpc3RGcm9tVmFyaWFudEFyZ3MoYXJndW1lbnRzLCBhcmd1bWVudENvdW50
LCBucE9iamVjdCk7CiAgICAgICAgICAgICByZXN1bHRPYmplY3QgPSBwcm94eS0+bmV3SW5zdGFu
Y2UoY3RvciwgYXJndW1lbnRDb3VudCwgYXJndi5nZXQoKSk7CiAgICAgICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3Bw
CShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1
bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBTY3JpcHRW
YWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9vCiAgICAgQVNTRVJUKHZhbHVlLT5Jc0Z1
bmN0aW9uKCkpOwogCiAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24odjg6OkZ1
bmN0aW9uOjpDYXN0KCp2YWx1ZSkpOwotICAgIE93bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZh
bHVlPiA+IGFyZ3MobmV3IHY4OjpIYW5kbGU8djg6OlZhbHVlPlttX2FyZ3VtZW50cy5zaXplKCld
KTsKKyAgICBPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdzID0gYWRvcHRB
cnJheVB0cihuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+W21fYXJndW1lbnRzLnNpemUoKV0pOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCiAgICAg
ICAgIGFyZ3NbaV0gPSBtX2FyZ3VtZW50c1tpXS52OFZhbHVlKCk7CiAKQEAgLTE1OSw3ICsxNTks
NyBAQCBTY3JpcHRPYmplY3QgU2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1CiAgICAgQVNTRVJU
KHZhbHVlLT5Jc0Z1bmN0aW9uKCkpOwogCiAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gY29u
c3RydWN0b3Iodjg6OkZ1bmN0aW9uOjpDYXN0KCp2YWx1ZSkpOwotICAgIE93bkFycmF5UHRyPHY4
OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3MobmV3IHY4OjpIYW5kbGU8djg6OlZhbHVlPlttX2Fy
Z3VtZW50cy5zaXplKCldKTsKKyAgICBPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
PiBhcmdzID0gYWRvcHRBcnJheVB0cihuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+W21fYXJndW1l
bnRzLnNpemUoKV0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6
ZSgpOyArK2kpCiAgICAgICAgIGFyZ3NbaV0gPSBtX2FyZ3VtZW50c1tpXS52OFZhbHVlKCk7CiAK
QEAgLTE5Myw3ICsxOTMsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFjazo6Y2FsbChib29s
JiBoCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6Q29udGV4dDo6R2V0
Q3VycmVudCgpLT5HbG9iYWwoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuY3Rp
b24gPSB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QobV9mdW5jdGlvbi52OFZhbHVlKCkp
OwogCi0gICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJncyhuZXcgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+W21fYXJndW1lbnRzLnNpemUoKV0pOworICAgIE93bkFycmF5UHRy
PHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3MgPSBhZG9wdEFycmF5UHRyKG5ldyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT5bbV9hcmd1bWVudHMuc2l6ZSgpXSk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKICAgICAgICAgYXJnc1tpXSA9IG1fYXJn
dW1lbnRzW2ldLnY4VmFsdWUoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01XaW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1OCw3ICszNTgsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gVjhET01XaW5kb3dT
CiAKICAgICAvLyBEeW5hbWljYWxseSB0ZWxsIHY4IGFib3V0IG91ciBleHRlbnNpb25zIG5vdy4K
ICAgICBjb25zdCBWOEV4dGVuc2lvbnMmIGV4dGVuc2lvbnMgPSBWOFByb3h5OjpleHRlbnNpb25z
KCk7Ci0gICAgT3duQXJyYXlQdHI8Y29uc3QgY2hhcio+IGV4dGVuc2lvbk5hbWVzKG5ldyBjb25z
dCBjaGFyKltleHRlbnNpb25zLnNpemUoKV0pOworICAgIE93bkFycmF5UHRyPGNvbnN0IGNoYXIq
PiBleHRlbnNpb25OYW1lcyA9IGFkb3B0QXJyYXlQdHIobmV3IGNvbnN0IGNoYXIqW2V4dGVuc2lv
bnMuc2l6ZSgpXSk7CiAgICAgaW50IGluZGV4ID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgLy8gRW5zdXJlIG91ciBkYXRl
IGV4dGVuc2lvbiBpcyBhbHdheXMgYWxsb3dlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4TlBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4TlBPYmplY3QuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAx
LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdEludgogCiAgICAgLy8g
V3JhcCB1cCBwYXJhbWV0ZXJzLgogICAgIGludCBudW1BcmdzID0gYXJncy5MZW5ndGgoKTsKLSAg
ICBPd25BcnJheVB0cjxOUFZhcmlhbnQ+IG5wQXJncyhuZXcgTlBWYXJpYW50W251bUFyZ3NdKTsK
KyAgICBPd25BcnJheVB0cjxOUFZhcmlhbnQ+IG5wQXJncyA9IGFkb3B0QXJyYXlQdHIobmV3IE5Q
VmFyaWFudFtudW1BcmdzXSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFyZ3M7IGkr
KykKICAgICAgICAgY29udmVydFY4T2JqZWN0VG9OUFZhcmlhbnQoYXJnc1tpXSwgbnBPYmplY3Qs
ICZucEFyZ3NbaV0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOb2RlRmls
dGVyQ29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgwLDcgKzgwLDcgQEAgc2hvcnQgVjhOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHRO
b2RlKAogICAgIH0KIAogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0ID0gdjg6OkNv
bnRleHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCk7Ci0gICAgT3duQXJyYXlQdHI8djg6OkhhbmRs
ZTx2ODo6VmFsdWU+ID4gYXJncyhuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+WzFdKTsKKyAgICBP
d25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdzID0gYWRvcHRBcnJheVB0cihu
ZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+WzFdKTsKICAgICBhcmdzWzBdID0gdG9WOChub2RlKTsK
IAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBWOFByb3h5OjpjYWxsRnVuY3Rp
b25XaXRob3V0RnJhbWUoY2FsbGJhY2ssIG9iamVjdCwgMSwgYXJncy5nZXQoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNyArNjQsNyBAQCB2b2lkIEhUTUxBcmVhRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
CiAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyZWN0
IikpCiAgICAgICAgICAgICBtX3NoYXBlID0gUmVjdDsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBjb29yZHNBdHRyKSB7Ci0gICAgICAgIG1fY29vcmRzLnNldChuZXdDb29yZHNBcnJh
eShhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBtX2Nvb3Jkc0xlbikpOworICAgICAgICBtX2Nvb3Jk
cyA9IG5ld0Nvb3Jkc0FycmF5KGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIG1fY29vcmRzTGVuKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhbHRBdHRyIHx8IGF0dHItPm5hbWUoKSA9
PSBhY2Nlc3NrZXlBdHRyKSB7CiAgICAgICAgIC8vIERvIG5vdGhpbmcuCiAgICAgfSBlbHNlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHJldmlz
aW9uIDc3NzgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTIgKzc1LDEyIEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHQKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHJvd3NBdHRy
KSB7CiAgICAgICAgIGlmICghYXR0ci0+aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fcm93TGVu
Z3Rocy5zZXQobmV3TGVuZ3RoQXJyYXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgbV90b3RhbFJv
d3MpKTsKKyAgICAgICAgICAgIG1fcm93TGVuZ3RocyA9IG5ld0xlbmd0aEFycmF5KGF0dHItPnZh
bHVlKCkuc3RyaW5nKCksIG1fdG90YWxSb3dzKTsKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVS
ZWNhbGMoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvbHNB
dHRyKSB7CiAgICAgICAgIGlmICghYXR0ci0+aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fY29s
TGVuZ3Rocy5zZXQobmV3TGVuZ3RoQXJyYXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgbV90b3Rh
bENvbHMpKTsKKyAgICAgICAgICAgIG1fY29sTGVuZ3RocyA9IG5ld0xlbmd0aEFycmF5KGF0dHIt
PnZhbHVlKCkuc3RyaW5nKCksIG1fdG90YWxDb2xzKTsKICAgICAgICAgICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGZy
YW1lYm9yZGVyQXR0cikgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MzUsNyArMTczNSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRBdHRhY2hlZFMKICAgICBHQzNEaW50IG51bVNoYWRlcnMgPSAwOwogICAgIG1fY29udGV4dC0+
Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFU
VEFDSEVEX1NIQURFUlMsICZudW1TaGFkZXJzKTsKICAgICBpZiAobnVtU2hhZGVycykgewotICAg
ICAgICBPd25BcnJheVB0cjxQbGF0Zm9ybTNET2JqZWN0PiBzaGFkZXJzKG5ldyBQbGF0Zm9ybTNE
T2JqZWN0W251bVNoYWRlcnNdKTsKKyAgICAgICAgT3duQXJyYXlQdHI8UGxhdGZvcm0zRE9iamVj
dD4gc2hhZGVycyA9IGFkb3B0QXJyYXlQdHIobmV3IFBsYXRmb3JtM0RPYmplY3RbbnVtU2hhZGVy
c10pOwogICAgICAgICBHQzNEc2l6ZWkgY291bnQgPSAwOwogICAgICAgICBtX2NvbnRleHQtPmdl
dEF0dGFjaGVkU2hhZGVycyhvYmplY3RPclplcm8ocHJvZ3JhbSksIG51bVNoYWRlcnMsICZjb3Vu
dCwgc2hhZGVycy5nZXQoKSk7CiAgICAgICAgIGlmIChjb3VudCAhPSBudW1TaGFkZXJzKQpAQCAt
NDU3Nyw3ICs0NTc3LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVy
dAogICAgICAgICB8fCBzdGF0ZS52YWx1ZVsxXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVsxXQogICAgICAgICB8fCBzdGF0ZS52YWx1ZVsyXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVsyXQogICAgICAgICB8fCBzdGF0ZS52YWx1ZVszXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVszXSkgewotICAgICAgICBPd25BcnJheVB0cjxHQzNEZmxvYXQ+IGJ1ZmZlckRhdGEo
bmV3IEdDM0RmbG9hdFsobnVtVmVydGV4ICsgMSkgKiA0XSk7CisgICAgICAgIE93bkFycmF5UHRy
PEdDM0RmbG9hdD4gYnVmZmVyRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IEdDM0RmbG9hdFsobnVt
VmVydGV4ICsgMSkgKiA0XSk7CiAgICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBu
dW1WZXJ0ZXggKyAxOyArK2lpKSB7CiAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBz
dGF0ZS52YWx1ZVswXTsKICAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBzdGF0
ZS52YWx1ZVsxXTsKQEAgLTQ2MzIsNyArNDYzMiw3IEBAIFdlYkdMRXh0ZW5zaW9uKiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmcKIH0KIAogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1
ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKLSAgICA6IG1fYnVm
ZmVycyhuZXcgT3duUHRyPEltYWdlQnVmZmVyPltjYXBhY2l0eV0pCisgICAgOiBtX2J1ZmZlcnMo
YWRvcHRBcnJheVB0cihuZXcgT3duUHRyPEltYWdlQnVmZmVyPltjYXBhY2l0eV0pKQogICAgICwg
bV9jYXBhY2l0eShjYXBhY2l0eSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3Ro
LmNwcAkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVmZmVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC04Myw3ICs4NCw3
IEBAIHN0YXRpYyBpbnQgY291bnRDaGFyYWN0ZXIoY29uc3QgVUNoYXIqIGQKICAgICByZXR1cm4g
Y291bnQ7CiB9CiAKLUxlbmd0aCogbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGludCYgbGVuKQorUGFzc093bkFycmF5UHRyPExlbmd0aD4gbmV3Q29vcmRzQXJyYXkoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGludCYgbGVuKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKICAgICBjb25zdCBVQ2hhciogZGF0YSA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7
CkBAIC0xMDAsNyArMTAxLDcgQEAgTGVuZ3RoKiBuZXdDb29yZHNBcnJheShjb25zdCBTdHJpbmcm
IHN0cgogICAgIHN0ciA9IHN0ci0+c2ltcGxpZnlXaGl0ZVNwYWNlKCk7CiAKICAgICBsZW4gPSBj
b3VudENoYXJhY3RlcihzdHItPmNoYXJhY3RlcnMoKSwgc3RyLT5sZW5ndGgoKSwgJyAnKSArIDE7
Ci0gICAgTGVuZ3RoKiByID0gbmV3IExlbmd0aFtsZW5dOworICAgIE93bkFycmF5UHRyPExlbmd0
aD4gciA9IGFkb3B0QXJyYXlQdHIobmV3IExlbmd0aFtsZW5dKTsKIAogICAgIGludCBpID0gMDsK
ICAgICB1bnNpZ25lZCBwb3MgPSAwOwpAQCAtMTE0LDEwICsxMTUsMTAgQEAgTGVuZ3RoKiBuZXdD
b29yZHNBcnJheShjb25zdCBTdHJpbmcmIHN0cgogCiAgICAgQVNTRVJUKGkgPT0gbGVuIC0gMSk7
CiAKLSAgICByZXR1cm4gcjsKKyAgICByZXR1cm4gci5yZWxlYXNlKCk7CiB9CiAKLUxlbmd0aCog
bmV3TGVuZ3RoQXJyYXkoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbGVuKQorUGFzc093bkFy
cmF5UHRyPExlbmd0aD4gbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCYg
bGVuKQogewogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBzdHIgPSBzdHJpbmcuaW1wbCgpLT5zaW1w
bGlmeVdoaXRlU3BhY2UoKTsKICAgICBpZiAoIXN0ci0+bGVuZ3RoKCkpIHsKQEAgLTEyNiw3ICsx
MjcsNyBAQCBMZW5ndGgqIG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmluZyYgc3RyCiAgICAgfQog
CiAgICAgbGVuID0gY291bnRDaGFyYWN0ZXIoc3RyLT5jaGFyYWN0ZXJzKCksIHN0ci0+bGVuZ3Ro
KCksICcsJykgKyAxOwotICAgIExlbmd0aCogciA9IG5ldyBMZW5ndGhbbGVuXTsKKyAgICBPd25B
cnJheVB0cjxMZW5ndGg+IHIgPSBhZG9wdEFycmF5UHRyKG5ldyBMZW5ndGhbbGVuXSk7CiAKICAg
ICBpbnQgaSA9IDA7CiAgICAgdW5zaWduZWQgcG9zID0gMDsKQEAgLTE0NSw3ICsxNDYsNyBAQCBM
ZW5ndGgqIG5ld0xlbmd0aEFycmF5KGNvbnN0IFN0cmluZyYgc3RyCiAgICAgZWxzZQogICAgICAg
ICBsZW4tLTsKIAotICAgIHJldHVybiByOworICAgIHJldHVybiByLnJlbGVhc2UoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVu
Z3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgJKHJl
dmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5o
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMTkzLDggKzE5NCw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fdmFsdWU7CiB9OwogCi1M
ZW5ndGgqIG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYsIGludCYgbGVuKTsKLUxlbmd0aCog
bmV3TGVuZ3RoQXJyYXkoY29uc3QgU3RyaW5nJiwgaW50JiBsZW4pOworUGFzc093bkFycmF5UHRy
PExlbmd0aD4gbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiwgaW50JiBsZW4pOworUGFzc093
bkFycmF5UHRyPExlbmd0aD4gbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3RyaW5nJiwgaW50JiBsZW4p
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAJKHJldmlzaW9u
IDc3NzgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRC
cmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIGJvb2wgQU5HTEVXZWJL
aXRCcmlkZ2U6OnZhbGlkYXRlU2hhZGVyU28KICAgICAgICAgaW50IGxvZ1NpemUgPSAwOwogICAg
ICAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX0lORk9fTE9HX0xFTkdUSCwgJmxvZ1NpemUpOwog
ICAgICAgICBpZiAobG9nU2l6ZSA+IDEpIHsKLSAgICAgICAgICAgIE93bkFycmF5UHRyPGNoYXI+
IGxvZ0J1ZmZlcihuZXcgY2hhcltsb2dTaXplXSk7CisgICAgICAgICAgICBPd25BcnJheVB0cjxj
aGFyPiBsb2dCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2xvZ1NpemVdKTsKICAgICAg
ICAgICAgIGlmIChsb2dCdWZmZXIpIHsKICAgICAgICAgICAgICAgICBTaEdldEluZm9Mb2coY29t
cGlsZXIsIGxvZ0J1ZmZlci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgc2hhZGVyVmFsaWRhdGlv
bkxvZyA9IGxvZ0J1ZmZlci5nZXQoKTsKQEAgLTEwNSw3ICsxMDUsNyBAQCBib29sIEFOR0xFV2Vi
S2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNvCiAgICAgaW50IHRyYW5zbGF0aW9uTGVuZ3RoID0g
MDsKICAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX09CSkVDVF9DT0RFX0xFTkdUSCwgJnRyYW5z
bGF0aW9uTGVuZ3RoKTsKICAgICBpZiAodHJhbnNsYXRpb25MZW5ndGggPiAxKSB7Ci0gICAgICAg
IE93bkFycmF5UHRyPGNoYXI+IHRyYW5zbGF0aW9uQnVmZmVyKG5ldyBjaGFyW3RyYW5zbGF0aW9u
TGVuZ3RoXSk7CisgICAgICAgIE93bkFycmF5UHRyPGNoYXI+IHRyYW5zbGF0aW9uQnVmZmVyID0g
YWRvcHRBcnJheVB0cihuZXcgY2hhclt0cmFuc2xhdGlvbkxlbmd0aF0pOwogICAgICAgICBpZiAo
IXRyYW5zbGF0aW9uQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBT
aEdldE9iamVjdENvZGUoY29tcGlsZXIsIHRyYW5zbGF0aW9uQnVmZmVyLmdldCgpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9z
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTMsNyArMjUzLDcgQEAgc3RhdGljIHZvaWQgZ2V0RGlydHlSZWN0cyhI
V05EIHdpbmRvdywgVgogICAgIH0KIAogICAgIERXT1JEIGRhdGFTaXplID0gR2V0UmVnaW9uRGF0
YShyZWdpb24uZ2V0KCksIDAsIDApOwotICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHJl
Z2lvbkRhdGFCdWZmZXIobmV3IHVuc2lnbmVkIGNoYXJbZGF0YVNpemVdKTsKKyAgICBPd25BcnJh
eVB0cjx1bnNpZ25lZCBjaGFyPiByZWdpb25EYXRhQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcg
dW5zaWduZWQgY2hhcltkYXRhU2l6ZV0pOwogICAgIFJHTkRBVEEqIHJlZ2lvbkRhdGEgPSByZWlu
dGVycHJldF9jYXN0PFJHTkRBVEEqPihyZWdpb25EYXRhQnVmZmVyLmdldCgpKTsKICAgICBpZiAo
IUdldFJlZ2lvbkRhdGEocmVnaW9uLmdldCgpLCBkYXRhU2l6ZSwgcmVnaW9uRGF0YSkpCiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJM
aW51eC5jcHAJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zODcsNyArMzg3LDcgQEAgY29uc3QgVGV4dFJ1biYgQ29tcGxleFRleHRDb250cm9s
bGVyOjpnZQogICAgICAgICBzb3VyY2VUZXh0ID0gbm9ybWFsaXplZFN0cmluZy5nZXRCdWZmZXIo
KTsKICAgICB9CiAKLSAgICBub3JtYWxpemVkQnVmZmVyLnNldChuZXcgVUNoYXJbbm9ybWFsaXpl
ZEJ1ZmZlckxlbmd0aCArIDFdKTsKKyAgICBub3JtYWxpemVkQnVmZmVyID0gYWRvcHRBcnJheVB0
cihuZXcgVUNoYXJbbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCArIDFdKTsKIAogICAgIG5vcm1hbGl6
ZVNwYWNlc0FuZE1pcnJvckNoYXJzKHNvdXJjZVRleHQsIG9yaWdpbmFsUnVuLnJ0bCgpLCBub3Jt
YWxpemVkQnVmZmVyLmdldCgpLCBub3JtYWxpemVkQnVmZmVyTGVuZ3RoKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9I
YXJmYnV6elNraWEuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk0LDcgKzk0LDcgQEAgc3RhdGljIHZvaWQgZ2x5cGhzVG9BZHZhbmNlcyhIQl9Gb250IGhiRgog
ICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsKICAgICBwYWludC5zZXRUZXh0RW5jb2Rpbmco
U2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKIAotICAgIE93bkFycmF5UHRyPHVpbnQx
Nl90PiBnbHlwaHMxNihuZXcgdWludDE2X3RbbnVtR2x5cGhzXSk7CisgICAgT3duQXJyYXlQdHI8
dWludDE2X3Q+IGdseXBoczE2ID0gYWRvcHRBcnJheVB0cihuZXcgdWludDE2X3RbbnVtR2x5cGhz
XSk7CiAgICAgaWYgKCFnbHlwaHMxNi5nZXQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBz
dGF0aWMgSEJfQm9vbCBjYW5SZW5kZXIoSEJfRm9udCBoYkZvbnQsCiAgICAgZm9udC0+c2V0dXBQ
YWludCgmcGFpbnQpOwogICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMTZf
VGV4dEVuY29kaW5nKTsKIAotICAgIE93bkFycmF5UHRyPHVpbnQxNl90PiBnbHlwaHMxNihuZXcg
dWludDE2X3RbbGVuZ3RoXSk7CisgICAgT3duQXJyYXlQdHI8dWludDE2X3Q+IGdseXBoczE2ID0g
YWRvcHRBcnJheVB0cihuZXcgdWludDE2X3RbbGVuZ3RoXSk7CiAgICAgaWYgKCFnbHlwaHMxNi5n
ZXQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaW50IG51bUdseXBocyA9IHBhaW50LnRleHRU
b0dseXBocyhjaGFyYWN0ZXJzLCBsZW5ndGggKiBzaXplb2YodWludDE2X3QpLCBnbHlwaHMxNi5n
ZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L1RleHR1cmUuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3
IEBAIHZvaWQgVGV4dHVyZTo6dXBkYXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMKICAgICBpbnQgdGVt
cEJ1ZmZTaXplID0gLy8gVGVtcG9yYXJ5IGJ1ZmZlciBzaXplIGlzIHRoZSBzbWFsbGVyIG9mIHRo
ZSBtYXggdGV4dHVyZSBzaXplIG9yIHRoZSB1cGRhdGVSZWN0U2FuaXRpemVkCiAgICAgICAgIG1p
bihtX3RpbGVzLm1heFRleHR1cmVTaXplKCksIG1fdGlsZXMuYm9yZGVyVGV4ZWxzKCkgKyB1cGRh
dGVSZWN0U2FuaXRpemVkLndpZHRoKCkpICoKICAgICAgICAgbWluKG1fdGlsZXMubWF4VGV4dHVy
ZVNpemUoKSwgbV90aWxlcy5ib3JkZXJUZXhlbHMoKSArIHVwZGF0ZVJlY3RTYW5pdGl6ZWQuaGVp
Z2h0KCkpOwotICAgIE93bkFycmF5UHRyPHVpbnQzMl90PiB0ZW1wQnVmZihuZXcgdWludDMyX3Rb
dGVtcEJ1ZmZTaXplXSk7CisgICAgT3duQXJyYXlQdHI8dWludDMyX3Q+IHRlbXBCdWZmID0gYWRv
cHRBcnJheVB0cihuZXcgdWludDMyX3RbdGVtcEJ1ZmZTaXplXSk7CiAKICAgICBmb3IgKGludCB0
aWxlID0gMDsgdGlsZSA8IG1fdGlsZXMubnVtVGlsZXMoKTsgdGlsZSsrKSB7CiAgICAgICAgIC8v
IEludGVyc2VjdCB3aXRoIHRpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMLmNwcAkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Myw3ICs4Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmUK
ICAgICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIDQ7CiAgICAgaW50IHRvdGFsQnl0
ZXMgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsKIAotICAgIE93bkFycmF5UHRyPHVuc2ln
bmVkIGNoYXI+IHBpeGVscyhuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7CisgICAgT3du
QXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWdu
ZWQgY2hhclt0b3RhbEJ5dGVzXSk7CiAgICAgaWYgKCFwaXhlbHMpCiAgICAgICAgIHJldHVybjsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgzOSw3ICs4MzksNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OnJlYWRiYWNrSGFyZHdhCiAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fY2Fu
dmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpOwogICAgIFNrQXV0b0xvY2tQaXhl
bHMgbG9jayhiaXRtYXApOwogICAgIGludCB3aWR0aCA9IGJpdG1hcC53aWR0aCgpLCBoZWlnaHQg
PSBiaXRtYXAuaGVpZ2h0KCk7Ci0gICAgT3duQXJyYXlQdHI8dWludDMyX3Q+IGJ1ZihuZXcgdWlu
dDMyX3Rbd2lkdGhdKTsKKyAgICBPd25BcnJheVB0cjx1aW50MzJfdD4gYnVmID0gYWRvcHRBcnJh
eVB0cihuZXcgdWludDMyX3Rbd2lkdGhdKTsKICAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCA9IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7CiAgICAgbV9ncHVDYW52YXMtPmJpbmRG
cmFtZWJ1ZmZlcigpOwogICAgIC8vIEZsaXBzIHRoZSBpbWFnZSB2ZXJ0aWNhbGx5LgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFy
ZWRCaXRtYXAuY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3
ICsxMzUsNyBAQCBib29sIFNoYXJlZEJpdG1hcDo6dG8xNmJpdCgpCiAgICAgaW50IHdpZHRoID0g
bmV3Qm1wSW5mby53aWR0aCgpOwogICAgIGludCBwYWRkZWRXaWR0aCA9IG5ld0JtcEluZm8ucGFk
ZGVkV2lkdGgoKTsKICAgICBpbnQgYnVmZmVyU2l6ZSA9IHBhZGRlZFdpZHRoICogbmV3Qm1wSW5m
by5oZWlnaHQoKTsKLSAgICBPd25BcnJheVB0cjx1bnNpZ25lZD4gbmV3UGl4ZWxEYXRhKG5ldyB1
bnNpZ25lZFtidWZmZXJTaXplIC8gMl0pOworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkPiBuZXdQ
aXhlbERhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZFtidWZmZXJTaXplIC8gMl0pOwog
ICAgIHZvaWQqIG5ld1BpeGVscyA9IG5ld1BpeGVsRGF0YS5nZXQoKTsKIAogICAgIGlmICghbmV3
UGl4ZWxzKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1l
bnVXaW4uY3BwCShyZXZpc2lvbiA3Nzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9Db250ZXh0TWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgdm9p
ZCBDb250ZXh0TWVudTo6Z2V0Q29udGV4dE1lbnVJdGVtcyhITQogICAgICAgICB9CiAKICAgICAg
ICAgaW50IG1lbnVTdHJpbmdMZW5ndGggPSBpbmZvLmNjaCArIDE7Ci0gICAgICAgIE93bkFycmF5
UHRyPFdDSEFSPiBtZW51U3RyaW5nKG5ldyBXQ0hBUlttZW51U3RyaW5nTGVuZ3RoXSk7CisgICAg
ICAgIE93bkFycmF5UHRyPFdDSEFSPiBtZW51U3RyaW5nID0gYWRvcHRBcnJheVB0cihuZXcgV0NI
QVJbbWVudVN0cmluZ0xlbmd0aF0pOwogICAgICAgICBpbmZvLmR3VHlwZURhdGEgPSBtZW51U3Ry
aW5nLmdldCgpOwogICAgICAgICBpbmZvLmNjaCA9IG1lbnVTdHJpbmdMZW5ndGg7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5jcHAJKHJldmlzaW9uIDc3
NzgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0aWFsaXpl
V2l0aFVzZXJEZWYKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3du
QXJyYXlQdHI8Y2hhcj4gYnVmZmVyKG5ldyBjaGFyW2xlbmd0aF0pOworICAgIE93bkFycmF5UHRy
PGNoYXI+IGJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbbGVuZ3RoXSk7CiAKICAgICBp
ZiAoIUdldEVudmlyb25tZW50VmFyaWFibGVBKGNoYW5uZWwuZGVmYXVsdE5hbWUsIGJ1ZmZlci5n
ZXQoKSwgbGVuZ3RoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHJldmlzaW9uIDc3NzgwKQorKysg
U291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygp
CiAgICAgaWYgKHZlcnNpb25JbmZvU2l6ZSA9PSAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBPd25BcnJheVB0cjxjaGFyPiB2ZXJzaW9uSW5mb0RhdGEobmV3IGNoYXJbdmVyc2lvbklu
Zm9TaXplXSk7CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gdmVyc2lvbkluZm9EYXRhID0gYWRvcHRB
cnJheVB0cihuZXcgY2hhclt2ZXJzaW9uSW5mb1NpemVdKTsKIAogICAgIGlmICghR2V0RmlsZVZl
cnNpb25JbmZvVyhjb25zdF9jYXN0PFVDaGFyKj4obV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkpLAogICAgICAgICAgICAgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJzaW9uSW5m
b0RhdGEuZ2V0KCkpKQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNzc3ODApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0w
Mi0wNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPd25BcnJhcnlQdHIuaCB1c2VzIGRlbGV0
ZU93bmVkUHRyIGJ1dCBkb2VzbuKAmXQgaW5jbHVkZSBPd25QdHJDb21tb24uaAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI4NjcKKworICAgICAgICAq
IFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3dpbi9OZXRzY2FwZVBsdWdpbk1vZHVsZVdpbi5jcHA6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luTW9kdWxlOjpnZXRQbHVnaW5JbmZvKTog
Q2FsbHMgYWRvcHRBcnJheVB0ci4KKwogMjAxMS0wMi0wNiAgQmVuamFtaW4gUG91bGFpbiAgPGlr
aXBvdUBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3dpbi9OZXRzY2FwZVBs
dWdpbk1vZHVsZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1Bs
dWdpbnMvTmV0c2NhcGUvd2luL05ldHNjYXBlUGx1Z2luTW9kdWxlV2luLmNwcAkocmV2aXNpb24g
Nzc3ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS93aW4vTmV0
c2NhcGVQbHVnaW5Nb2R1bGVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBA
IGJvb2wgTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBsdWdpbkluZm8KICAgICBpZiAoIXZlcnNp
b25JbmZvU2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgT3duQXJyYXlQdHI8Y2hh
cj4gdmVyc2lvbkluZm9EYXRhKG5ldyBjaGFyW3ZlcnNpb25JbmZvU2l6ZV0pOworICAgIE93bkFy
cmF5UHRyPGNoYXI+IHZlcnNpb25JbmZvRGF0YSA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbdmVy
c2lvbkluZm9TaXplXSk7CiAgICAgaWYgKCE6OkdldEZpbGVWZXJzaW9uSW5mb1cocGF0aENvcHku
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJz
aW9uSW5mb0RhdGEuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDItMDYgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgT3duQXJyYXJ5UHRyLmggdXNlcyBkZWxldGVPd25lZFB0ciBidXQgZG9l
c27igJl0IGluY2x1ZGUgT3duUHRyQ29tbW9uLmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODY3CisKKyAgICAgICAgKiBXZWJIaXN0b3J5LmNwcDoK
KyAgICAgICAgKFdlYkhpc3Rvcnk6Om9yZGVyZWRMYXN0VmlzaXRlZERheXMpOiBDYWxscyBhZG9w
dEFycmF5UHRyLgorICAgICAgICAqIFdlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlBy
ZWZlcmVuY2VzOjpjb3B5V2ViS2l0UHJlZmVyZW5jZXNUb0NGUHJlZmVyZW5jZXMpOiBEaXR0by4K
KwogMjAxMS0wMi0wMyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNlL1dlYktpdC93
aW4vV2ViSGlzdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViSGlz
dG9yeS5jcHAJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9y
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Niw3ICs0NzYsNyBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYkhpc3Rvcnk6Om9yCiAKICAgICAqY291bnQgPSBkYXRlQ291bnQ7CiAgICAg
aWYgKCFtX29yZGVyZWRMYXN0VmlzaXRlZERheXMpIHsKLSAgICAgICAgbV9vcmRlcmVkTGFzdFZp
c2l0ZWREYXlzLnNldChuZXcgREFURVtkYXRlQ291bnRdKTsKKyAgICAgICAgbV9vcmRlcmVkTGFz
dFZpc2l0ZWREYXlzID0gYWRvcHRBcnJheVB0cihuZXcgREFURVtkYXRlQ291bnRdKTsKICAgICAg
ICAgRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5kID0gbV9lbnRyaWVz
QnlEYXRlLmVuZCgpLmtleXMoKTsKICAgICAgICAgaW50IGkgPSAwOwogICAgICAgICBmb3IgKERh
dGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9lbnRyaWVzQnlEYXRl
LmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQsICsraSkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luL1dlYlByZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJQcmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDc3NzgwKQorKysgU291cmNlL1dlYktpdC93
aW4vV2ViUHJlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjMsOCArNDYzLDggQEAg
dm9pZCBXZWJQcmVmZXJlbmNlczo6Y29weVdlYktpdFByZWZlcmVuYwogICAgIENGU3RyaW5nUmVm
IGRpZFJlbW92ZURlZmF1bHRzS2V5ID0gQ0ZTVFIoV2ViS2l0RGlkTWlncmF0ZURlZmF1bHRTZXR0
aW5nc0Zyb21TYWZhcmkzQmV0YVByZWZlcmVuY2VLZXkpOwogICAgIGJvb2wgb21pdERlZmF1bHRz
ID0gIWJvb2xlYW5WYWx1ZUZvclByZWZlcmVuY2VzVmFsdWUoQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
ZGljdCwgZGlkUmVtb3ZlRGVmYXVsdHNLZXkpKTsKIAotICAgIE93bkFycmF5UHRyPENGVHlwZVJl
Zj4ga2V5cyhuZXcgQ0ZUeXBlUmVmW2NvdW50XSk7Ci0gICAgT3duQXJyYXlQdHI8Q0ZUeXBlUmVm
PiB2YWx1ZXMobmV3IENGVHlwZVJlZltjb3VudF0pOworICAgIE93bkFycmF5UHRyPENGVHlwZVJl
Zj4ga2V5cyA9IGFkb3B0QXJyYXlQdHIobmV3IENGVHlwZVJlZltjb3VudF0pOworICAgIE93bkFy
cmF5UHRyPENGVHlwZVJlZj4gdmFsdWVzID0gYWRvcHRBcnJheVB0cihuZXcgQ0ZUeXBlUmVmW2Nv
dW50XSk7CiAgICAgQ0ZEaWN0aW9uYXJ5R2V0S2V5c0FuZFZhbHVlcyhkaWN0LCBrZXlzLmdldCgp
LCB2YWx1ZXMuZ2V0KCkpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA3Nzc4MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzIEBACisyMDExLTAyLTA2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE93bkFycmFy
eVB0ci5oIHVzZXMgZGVsZXRlT3duZWRQdHIgYnV0IGRvZXNu4oCZdCBpbmNsdWRlIE93blB0ckNv
bW1vbi5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
Mjg2NworCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vSW1hZ2VEaWZmLmNwcDoK
KyAgICAgICAgKEltYWdlOjpjcmFldGVGcm9tU3RkaW4pOiBDYWxsIGFkb3B0QXJyYXlQdHIuCisK
IDIwMTEtMDItMDYgIEphbWVzIEtvemlhbnNraSAgPGtvekBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0ltYWdlRGlmZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vSW1hZ2VEaWZmLmNwcAkocmV2aXNpb24gNzc3ODApCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9JbWFnZURpZmYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFieXRlTGVuZ3RoKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHNvdXJjZShu
ZXcgdW5zaWduZWQgY2hhcltieXRlTGVuZ3RoXSk7CisgICAgICAgIE93bkFycmF5UHRyPHVuc2ln
bmVkIGNoYXI+IHNvdXJjZSA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbYnl0ZUxl
bmd0aF0pOwogICAgICAgICBpZiAoZnJlYWQoc291cmNlLmdldCgpLCAxLCBieXRlTGVuZ3RoLCBz
dGRpbikgIT0gYnl0ZUxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAo=
</data>
<flag name="review"
          id="73027"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>