<?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>128624</bug_id>
          
          <creation_ts>2014-02-11 13:53:49 -0800</creation_ts>
          <short_desc>Merge AtomicString, Identifier</short_desc>
          <delta_ts>2022-07-21 17:04:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>979592</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-02-11 13:53:49 -0800</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979594</commentid>
    <comment_count>1</comment_count>
      <attachid>223898</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-02-11 13:55:28 -0800</bug_when>
    <thetext>Created attachment 223898
Rage hacked, builds, fixed ASSERTions &amp; infinite loops, but almost all tests still failing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991471</commentid>
    <comment_count>2</comment_count>
      <attachid>226987</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-03-17 17:15:06 -0700</bug_when>
    <thetext>Created attachment 226987
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991472</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-03-17 17:15:30 -0700</bug_when>
    <thetext>JS Perf looks fine.

All benchmarks:
   &lt;arithmetic&gt;                                     149.9601+-1.3387          148.4964+-0.8381          might be 1.0099x faster
   &lt;geometric&gt;                                       19.2674+-0.0367     ^     19.1212+-0.0932        ^ definitely 1.0076x faster
   &lt;harmonic&gt;                                         4.2925+-0.0201            4.2662+-0.0586          might be 1.0062x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991473</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-03-17 17:16:43 -0700</bug_when>
    <thetext>Oh, patch needs Changelogs &amp; some of those inlines could do with their own header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991474</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-17 17:17:30 -0700</bug_when>
    <thetext>Attachment 226987 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/Identifier.h:113:  The parameter name &quot;r&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Identifier.h:114:  The parameter name &quot;r&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991504</commentid>
    <comment_count>6</comment_count>
      <attachid>226997</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-03-17 18:48:48 -0700</bug_when>
    <thetext>Created attachment 226997
New fix

Still needs changelog, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991516</commentid>
    <comment_count>7</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-17 20:00:23 -0700</bug_when>
    <thetext>Freakin&apos; awesome!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991518</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-03-17 20:09:09 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Freakin&apos; awesome!

+1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991525</commentid>
    <comment_count>9</comment_count>
      <attachid>226997</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-03-17 20:18:52 -0700</bug_when>
    <thetext>Comment on attachment 226997
New fix

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

&gt; Source/JavaScriptCore/runtime/SmallStrings.cpp:62
&gt;          m_reps[i] = StringImpl::createSubstringSharingImpl(baseString, i, 1);
&gt; +        m_reps[i] = AtomicString::add(m_reps[i].get());

Why use m_reps[i] for the intermediate value? Why not do this all on one line.

&gt; Source/JavaScriptCore/runtime/VM.cpp:198
&gt; +    , propertyNames(0)

nullptr?

&gt; Source/WTF/wtf/text/AtomicStringTable.cpp:56
&gt; +    for (auto iter : m_table)

Should name this &quot;string&quot;, not &quot;iter&quot;.

I prefer &quot;auto*&quot; or &quot;auto&amp;&quot; here to make it clear we don’t have any bad copying going on.

&gt; Source/WTF/wtf/text/AtomicStringTable.cpp:60
&gt;  void AtomicStringTable::destroy(AtomicStringTable* table)

Do we even need this function any more since we have a public destructor now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991536</commentid>
    <comment_count>10</comment_count>
      <attachid>226997</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-03-17 20:43:58 -0700</bug_when>
    <thetext>Comment on attachment 226997
New fix

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

Any of these functions that should take or return references rather than pointers?

&gt; Source/JavaScriptCore/runtime/VM.h:296
&gt; +        IdentifierTable* atomicStringTable() const { return identifierTable; }

Consider returning a reference instead of a pointer? Why do we need this function? Just to rename the identifierTable data member?

&gt; Source/WTF/wtf/WTFThreadData.h:55
&gt; +typedef AtomicStringTable IdentifierTable;

Long term would we just get rid of this typedef?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992257</commentid>
    <comment_count>11</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-03-19 14:28:52 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Why use m_reps[i] for the intermediate value? Why not do this all on one line.
&gt; 
&gt; nullptr?
&gt; 
&gt; I prefer &quot;auto*&quot; or &quot;auto&amp;&quot; here to make it clear we don’t have any bad copying going on.

done, done, done.

&gt; &gt; Source/WTF/wtf/text/AtomicStringTable.cpp:60
&gt; &gt;  void AtomicStringTable::destroy(AtomicStringTable* table)
&gt; 
&gt; Do we even need this function any more since we have a public destructor now?

Short answer, yes. Long answer, no.

We still need this because it&apos;s used as a part of the mechanism for the main thread / web thread to decide who gets to delete their shared string table. But it&apos;s probably an over engineered solution – we probably just an if statement in WTFThreadData&apos;s destructor. Let me revise in a follow-on patch.

(In reply to comment #10)
&gt;
&gt; &gt; Source/JavaScriptCore/runtime/VM.h:296
&gt; &gt; +        IdentifierTable* atomicStringTable() const { return identifierTable; }
&gt; 
&gt; Consider returning a reference instead of a pointer?

done,

&gt; Why do we need this function? Just to rename the identifierTable data member?

We use this method so you can call AtomicString::add(VM&amp;, StringImpl*), or AtomicString::add(ExecState&amp;, StringImpl*), template on the first argument type to avoid a layering violation. Hopefully we may be ablate make this go away in a followup patch, if WTFThreadData access is now fast enough we make be able to always look up the string table from the thread data, rather than reading it off the VM in JSC.

&gt; &gt; Source/WTF/wtf/WTFThreadData.h:55
&gt; &gt; +typedef AtomicStringTable IdentifierTable;
&gt; 
&gt; Long term would we just get rid of this typedef?

Yep, definitely. I&apos;ll do a followup purge of WTF for use of the work &apos;Identifier&apos; (e.g. we should probably also remove isIdentifier, all uses -&gt; isAtomic).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992279</commentid>
    <comment_count>12</comment_count>
      <attachid>227221</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-03-19 14:58:55 -0700</bug_when>
    <thetext>Created attachment 227221
review fixes, windows build fix, separate out new file.

Still missing ChangeLogs, and 2 JSC tests are failing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992421</commentid>
    <comment_count>13</comment_count>
      <attachid>227265</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-03-20 00:18:05 -0700</bug_when>
    <thetext>Created attachment 227265
Tests pass, think the JSC/WTF changes are probably complete.

Should probably take another look at that WebCore change, and the Windows build is probably still broke (related). I&apos;ve added JSC/WTF Changelogs, but still needs some description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992634</commentid>
    <comment_count>14</comment_count>
      <attachid>227312</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-03-20 12:00:47 -0700</bug_when>
    <thetext>Created attachment 227312
Patch, with speculative Windows build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992636</commentid>
    <comment_count>15</comment_count>
      <attachid>227312</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-03-20 12:03:37 -0700</bug_when>
    <thetext>Comment on attachment 227312
Patch, with speculative Windows build fix

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

r=me if it blends

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        WTF::StringImpl currently supports two uniquing mechanism - AtomicString and
&gt; +        Identifer - that is one too many.

So, you&apos;re saying we should unique our uniquing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992652</commentid>
    <comment_count>16</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-03-20 12:27:02 -0700</bug_when>
    <thetext>Transmitting file data ............................
Committed revision 165982.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992675</commentid>
    <comment_count>17</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-03-20 13:04:29 -0700</bug_when>
    <thetext>Build fix in revision 165990.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992815</commentid>
    <comment_count>18</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-20 17:27:54 -0700</bug_when>
    <thetext>w00t!

https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mavericks%22%2C%22Bindings%2Fcreate-element%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22Bindings%2Fget-attribute%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22Bindings%2Fget-element-by-id%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22Bindings%2Fget-elements-by-tag-name%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22Bindings%2Fid-setter%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22Bindings%2Fset-attribute%3ARuns%22%5D%5D&amp;days=30</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1885878</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-07-21 17:04:29 -0700</bug_when>
    <thetext>*** Bug 38015 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223898</attachid>
            <date>2014-02-11 13:55:28 -0800</date>
            <delta_ts>2014-03-17 17:15:06 -0700</delta_ts>
            <desc>Rage hacked, builds, fixed ASSERTions &amp; infinite loops, but almost all tests still failing!</desc>
            <filename>128624.1.patch</filename>
            <type>text/plain</type>
            <size>130226</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzczLDcgKzM3Myw3IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGds
b2JhbEV4ZWMoKSwgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRz
LnNpemUoKTsgKytpKQogICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbEV4
ZWMoKSwgaSwganNTdHJpbmcoZ2xvYmFsRXhlYygpLCBhcmd1bWVudHNbaV0pKTsKLSAgICAgICAg
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImFyZ3VtZW50cyIpLCBhcnJh
eSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgTWFrZUlkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAi
YXJndW1lbnRzIiksIGFycmF5KTsKICAgICB9CiAKICAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiB2
bSwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFy
Z3VtZW50cykKQEAgLTU2OCw3ICs1NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUnVuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsgKytpKQogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIGkgLSAxLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSk7CiAgICAg
Z2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoCi0gICAgICAgIGV4ZWMtPnZtKCksIElkZW50aWZpZXIo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJhcmd1bWVudHMiKSwgYXJyYXkpOworICAgICAg
ICBleGVjLT52bSgpLCBNYWtlSWRlbnRpZmllcihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
ImFyZ3VtZW50cyIpLCBhcnJheSk7CiAKICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKICAgICBTdG9w
V2F0Y2ggc3RvcFdhdGNoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDcgQEAgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmdldE93blBybwogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIGJvb2wgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7Ci0gICAgcmV0dXJuIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlT
bG90KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBz
bG90KTsKKyAgICByZXR1cm4gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNs
b3Qob2JqZWN0LCBleGVjLCBJZGVudGlmaWVyRnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90
KTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lk
IEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0QnlJbmRlCiAgICAgSlNPYmplY3RSZWYgdGhp
c1JlZiA9IHRvUmVmKHRoaXNPYmplY3QpOwogICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gcHJv
cGVydHlOYW1lUmVmOwogICAgIEpTVmFsdWVSZWYgdmFsdWVSZWYgPSB0b1JlZihleGVjLCB2YWx1
ZSk7Ci0gICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IHByb3BlcnR5SW5kZXgpOworICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
ckZyb20oZXhlYywgcHJvcGVydHlJbmRleCk7CiAKICAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFz
cyA9IHRoaXNPYmplY3QtPmNsYXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5w
YXJlbnRDbGFzcykgewogICAgICAgICBpZiAoSlNPYmplY3RTZXRQcm9wZXJ0eUNhbGxiYWNrIHNl
dFByb3BlcnR5ID0ganNDbGFzcy0+c2V0UHJvcGVydHkpIHsKQEAgLTM4NSw3ICszODUsNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lKQogewogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyRnJv
bShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KQEAg
LTUxOCw3ICs1MTgsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9u
CiAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7CiAgICAg
ICAgICAgICAgICAgU3RhdGljVmFsdWVFbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAg
ICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5nZXRQcm9wZXJ0eSAmJiAoIShlbnRyeS0+YXR0cmli
dXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMpKSkKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKE1ha2VJZGVudGlmaWVyKGV4ZWMsIG5hbWUpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICAKQEAgLTUyOSw3ICs1MjksNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6Z2V0T3duTm9uCiAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9
IGl0LT5rZXkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50
cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCEoZW50cnktPmF0dHJp
YnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKE1ha2VJZGVudGlmaWVyKGV4ZWMsIG5hbWUpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RS
ZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RS
ZWYuY3BwCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
T2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIEpTT2JqZWN0
UmVmIEpTT2JqZWN0TWFrZUZ1bmN0aW9uKEpTQ29udGUKICAgICBBUElFbnRyeVNoaW0gZW50cnlT
aGltKGV4ZWMpOwogCiAgICAgc3RhcnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgoMSwgc3RhcnRp
bmdMaW5lTnVtYmVyKTsKLSAgICBJZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVu
dGlmaWVyKCZleGVjLT52bSgpKSA6IElkZW50aWZpZXIoZXhlYywgImFub255bW91cyIpOworICAg
IElkZW50aWZpZXIgbmFtZUlEID0gbmFtZSA/IG5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkp
IDogTWFrZUlkZW50aWZpZXIoZXhlYywgImFub255bW91cyIpOwogICAgIAogICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRl
ckNvdW50OyBpKyspCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVm
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVm
LmNwcAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Nj
cmlwdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKIAog
c3RhdGljIGJvb2wgcGFyc2VTY3JpcHQoVk0qIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IFBhcnNlckVycm9yJiBlcnJvcikKIHsKLSAgICByZXR1cm4gSlNDOjpwYXJzZTxKU0M6OlByb2dy
YW1Ob2RlPih2bSwgc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIEpTUGFy
c2VQcm9ncmFtQ29kZSwgZXJyb3IpOworICAgIHJldHVybiBKU0M6OnBhcnNlPEpTQzo6UHJvZ3Jh
bU5vZGU+KHZtLCBzb3VyY2UsIDAsIE1ha2VJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIEpT
UGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOwogfQogCiBleHRlcm4gIkMiIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAxNjM4
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjUsMTUgKzY1LDE1IEBAIFN0cmluZyBPcGFxdWVKU1N0cmluZzo6c3Ry
aW5nKCkgY29uc3QKIElkZW50aWZpZXIgT3BhcXVlSlNTdHJpbmc6OmlkZW50aWZpZXIoVk0qIHZt
KSBjb25zdAogewogICAgIGlmICghdGhpcyB8fCBtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuIElkZW50aWZpZXIoKTsKKyAgICAgICAgcmV0dXJuIE1ha2VJZGVudGlmaWVyKCk7CiAK
ICAgICBpZiAobV9zdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcihJ
ZGVudGlmaWVyOjpFbXB0eUlkZW50aWZpZXIpOworICAgICAgICByZXR1cm4gTWFrZUlkZW50aWZp
ZXIoRW1wdHlJZGVudGlmaWVyKTsKIAogICAgIGlmIChtX3N0cmluZy5pczhCaXQoKSkKLSAgICAg
ICAgcmV0dXJuIElkZW50aWZpZXIodm0sIG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG1fc3RyaW5n
Lmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIE1ha2VJZGVudGlmaWVyKHZtLCBtX3N0cmluZy5j
aGFyYWN0ZXJzOCgpLCBtX3N0cmluZy5sZW5ndGgoKSk7CiAKLSAgICByZXR1cm4gSWRlbnRpZmll
cih2bSwgbV9zdHJpbmcuY2hhcmFjdGVyczE2KCksIG1fc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBy
ZXR1cm4gTWFrZUlkZW50aWZpZXIodm0sIG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBtX3N0cmlu
Zy5sZW5ndGgoKSk7CiB9CiAKIGNvbnN0IFVDaGFyKiBPcGFxdWVKU1N0cmluZzo6Y2hhcmFjdGVy
cygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5oCShy
ZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3Ry
aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3MgSWRlbnRpZmllcjsK
ICAgICBjbGFzcyBWTTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODY5LDcgKzI4Njks
NyBAQAogCQlGNjkyQTg1RTAyNTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Z1bmN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNjky
QTg1RjAyNTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJRjY5MkE4NjIwMjU1NTk3RDAxRkY2MEY3
IC8qIEpTU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgfTsKLQkJRjY5MkE4NjUwMjU1NTk3RDAxRkY2MEY3IC8qIExleGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OworCQlGNjkyQTg2NTAyNTU1
OTdEMDFGRjYwRjcgLyogTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklk
ZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKIAkJRjY5MkE4NjYwMjU1NTk3RDAxRkY2MEY3
IC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsK
IAkJRjY5MkE4NjgwMjU1NTk3RDAxRkY2MEY3IC8qIExvb2t1cC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb29rdXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY2OTJBODY5MDI1NTU5N0Qw
MUZGNjBGNyAvKiBMb29rdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTG9va3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5j
dGlvbkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIwLDcgKzEyMCw3IEBAIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0
aW9uQ2EKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAKLSAgICBKU1ZhbHVlIGZ1
bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIG1fbmFt
ZSkpOworICAgIEpTVmFsdWUgZnVuY3Rpb24gPSB0aGlzT2JqZWN0LT5nZXQobV9leGVjLCBNYWtl
SWRlbnRpZmllcihtX2V4ZWMsIG1fbmFtZSkpOwogICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7CiAgICAgICAgIGhhZEV4Y2VwdGlvbiA9IHRydWU7CiAgICAgICAgIHJldHVybiBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE2
MzgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBCeXRlY29k
ZUdlbmVyYXRvcjo6YWRkVmFyKAogICAgIAogICAgIGlmICh3YXRjaE1vZGUgPT0gSXNXYXRjaGFi
bGUpIHsKICAgICAgICAgd2hpbGUgKG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSA8IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9jb2RlQmxvY2stPm1fbnVtVmFycykpCi0gICAgICAgICAgICBtX3dh
dGNoYWJsZVZhcmlhYmxlcy5hcHBlbmQoSWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIG1fd2F0
Y2hhYmxlVmFyaWFibGVzLmFwcGVuZChNYWtlSWRlbnRpZmllcigpKTsKICAgICAgICAgbV93YXRj
aGFibGVWYXJpYWJsZXMuYXBwZW5kKGlkZW50KTsKICAgICB9CiAgICAgCkBAIC0yMjQ4LDcgKzIy
NDgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kCiB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCiB7CiAgICAgZW1pdE9wY29kZShvcF90aHJvd19zdGF0aWNfZXJyb3IpOwotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudFZhbHVlKGFkZFN0cmluZ0NvbnN0YW50KElk
ZW50aWZpZXIobV92bSwgbWVzc2FnZSkpKS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGFkZENvbnN0YW50VmFsdWUoYWRkU3RyaW5nQ29uc3RhbnQoTWFrZUlkZW50aWZpZXIo
bV92bSwgbWVzc2FnZSkpKS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRy
dWUpOwogfQogCkBAIC0yNDE1LDcgKzI0MTUsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0UmVhZE9ubHlFeGNlCiAgICAgaWYgKCFpc1N0cmljdE1vZGUoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGVtaXRPcGNvZGUob3BfdGhyb3dfc3RhdGljX2Vycm9yKTsKLSAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRWYWx1ZShhZGRTdHJpbmdDb25zdGFudChJZGVudGlmaWVy
KG1fdm0sIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpKS0+aW5kZXgoKSk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50VmFsdWUoYWRkU3RyaW5nQ29u
c3RhbnQoTWFrZUlkZW50aWZpZXIobV92bSwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKSkpLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOwog
fQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgSWRl
bnRpZmllcjsKICAgICBjbGFzcyBMYWJlbDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlvbiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsU2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsU2Nv
cGUuaAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9MYWJlbFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDYgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBJZGVudGlmaWVyOwotCiAgICAgY2xhc3MgTGFiZWxT
Y29wZSB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFR5cGUgeyBMb29wLCBTd2l0Y2gsIE5h
bWVkTGFiZWwgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5oCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIENvZGVCbG9jazsKLWNsYXNzIElkZW50aWZpZXI7CiAKIG5hbWVzcGFjZSBE
RkcgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlm
aWVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkSWRlbnRpZmllcnMuY3BwCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDcgKzY5LDcgQEAgdm9pZCBEZXNpcmVkSWRlbnRpZmllcnM6OnJlYWxseUFkZChWTSYgdgogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FkZGVkSWRlbnRpZmllcnMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgU3RyaW5nSW1wbCogcmVwID0gbV9hZGRlZElkZW50aWZpZXJzW2ldOwogICAg
ICAgICBBU1NFUlQocmVwLT5oYXNBdExlYXN0T25lUmVmKCkpOwotICAgICAgICBjb21tb25EYXRh
LT5kZmdJZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcigmdm0sIHJlcCkpOworICAgICAgICBj
b21tb25EYXRhLT5kZmdJZGVudGlmaWVycy5hcHBlbmQoTWFrZUlkZW50aWZpZXIoJnZtLCByZXAp
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQxLDcgKzM0MSw3IEBAIEFM
V0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWxDZWwKICAgICAKICAgICBpZiAoaW5k
ZXggPCAwKSB7CiAgICAgICAgIC8vIEdvIHRoZSBzbG93ZXN0IHdheSBwb3NzaWJsZSBiZWNhc2Ug
bmVnYXRpdmUgaW5kaWNlcyBkb24ndCB1c2UgaW5kZXhlZCBzdG9yYWdlLgotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZy
b20oZXhlYywgaW5kZXgpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZShiYXNlKS5nZXQoZXhlYywgSWRlbnRpZmllckZyb20oZXhlYywgaW5kZXgpKSk7CiAgICAgfQog
CiAgICAgLy8gVXNlIHRoaXMgc2luY2Ugd2Uga25vdyB0aGF0IHRoZSB2YWx1ZSBpcyBvdXQgb2Yg
Ym91bmRzLgpAQCAtNDAyLDcgKzQwMiw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbEJleW8KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChhcnJheSwgdHJ1ZSk7
CiAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dCgKLSAgICAgICAgYXJyYXksIGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSwgc2xvdCk7CisgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVyRnJvbShleGVjLCBpbmRl
eCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKQEAgLTQxNyw3ICs0MTcsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYXJy
YXksIGZhbHNlKTsKICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+cHV0KAotICAgICAgICBhcnJh
eSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXJGcm9t
KGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQog
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJv
dW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRl
eCwgZG91YmxlIHZhbHVlKQpAQCAtNDM0LDcgKzQzNCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXREb3VibGVCeVYKICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChhcnJh
eSwgdHJ1ZSk7CiAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dCgKLSAgICAgICAgYXJyYXks
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBqc1ZhbHVlLCBzbG90KTsKKyAg
ICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXJGcm9tKGV4ZWMsIGluZGV4KSwganNWYWx1ZSwg
c2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJl
eW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5
LCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpCkBAIC00NTEsNyArNDUxLDcgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogICAgIAogICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGFycmF5LCBmYWxzZSk7CiAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dCgK
LSAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBqc1Zh
bHVlLCBzbG90KTsKKyAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXJGcm9tKGV4ZWMsIGlu
ZGV4KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbERpcmVjdFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKQEAgLTQ5Niw3ICs0OTYsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxEaXJlCiAgICAgfQogICAgIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGFy
cmF5LCB0cnVlKTsKLSAgICBhcnJheS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6
OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7
CisgICAgYXJyYXktPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyRnJvbShleGVjLCBp
bmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNOb25T
dHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTUxMCw3ICs1MTAsNyBAQCB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlCiAgICAgfQogICAgIAogICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KGFycmF5LCBmYWxzZSk7Ci0gICAgYXJyYXktPnB1dERpcmVjdChleGVjLT52
bSgpLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHNsb3QpOworICAgIGFycmF5LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRp
ZmllckZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xv
dCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNo
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KiBh
cnJheSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNj
cmlwdEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU3LDE5ICsxNTcsMTkgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9z
dDo6ZnVuY3Rpb25EZQogCiAgICAgU3RyaW5nIHNjcmlwdElEID0gU3RyaW5nOjpudW1iZXIoc291
cmNlQ29kZS0+cHJvdmlkZXIoKS0+YXNJRCgpKTsKICAgICBKU09iamVjdCogbG9jYXRpb24gPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIElkZW50aWZpZXIoZXhlYywgImxpbmVOdW1iZXIiKSwganNOdW1iZXIobGluZU51bWJl
cikpOwotICAgIGxvY2F0aW9uLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVj
LCAic2NyaXB0SWQiKSwganNTdHJpbmcoZXhlYywgc2NyaXB0SUQpKTsKKyAgICBsb2NhdGlvbi0+
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIE1ha2VJZGVudGlmaWVyKGV4ZWMsICJsaW5lTnVtYmVyIiks
IGpzTnVtYmVyKGxpbmVOdW1iZXIpKTsKKyAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZt
KCksIE1ha2VJZGVudGlmaWVyKGV4ZWMsICJzY3JpcHRJZCIpLCBqc1N0cmluZyhleGVjLCBzY3Jp
cHRJRCkpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4
ZWMpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywg
ImxvY2F0aW9uIiksIGxvY2F0aW9uKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgp
LCBNYWtlSWRlbnRpZmllcihleGVjLCAibG9jYXRpb24iKSwgbG9jYXRpb24pOwogCiAgICAgU3Ry
aW5nIG5hbWUgPSBmdW5jdGlvbi0+bmFtZShleGVjKTsKICAgICBpZiAoIW5hbWUuaXNFbXB0eSgp
KQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJuYW1lIiksIGpzU3RyaW5nKGV4ZWMsIG5hbWUpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJl
Y3QoZXhlYy0+dm0oKSwgTWFrZUlkZW50aWZpZXIoZXhlYywgIm5hbWUiKSwganNTdHJpbmcoZXhl
YywgbmFtZSkpOwogCiAgICAgU3RyaW5nIGRpc3BsYXlOYW1lID0gZnVuY3Rpb24tPmRpc3BsYXlO
YW1lKGV4ZWMpOwogICAgIGlmICghZGlzcGxheU5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXN1
bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJkaXNwbGF5TmFtZSIp
LCBqc1N0cmluZyhleGVjLCBkaXNwbGF5TmFtZSkpOworICAgICAgICByZXN1bHQtPnB1dERpcmVj
dChleGVjLT52bSgpLCBNYWtlSWRlbnRpZmllcihleGVjLCAiZGlzcGxheU5hbWUiKSwganNTdHJp
bmcoZXhlYywgZGlzcGxheU5hbWUpKTsKIAogICAgIC8vIEZJWE1FOiBwcm92aWRlIGZ1bmN0aW9u
IHNjb3BlIGRhdGEgaW4gInNjb3Blc1JhdyIgcHJvcGVydHkgd2hlbiBKU0Mgc3VwcG9ydHMgaXQu
CiAgICAgLy8gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzg3MTkyPiBbSlNDXSBleHBvc2UgZnVuY3Rp
b24gKGNsb3N1cmUpIGlubmVyIGNvbnRleHQgdG8gZGVidWdnZXIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0
b3J5LmNwcAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDEx
ICsxNDksMTEgQEAgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdAogICAg
ICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGZpcnN0Q2FsbEZyYW1lID0gZnJhbWVzLmZpcnN0
KCk7CiAgICAgICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24udG9PYmpl
Y3QoZXhlYyk7CiAgICAgICAgIGlmIChleGNlcHRpb24uaXNPYmplY3QoKSAmJiBmaXJzdENhbGxG
cmFtZS5zb3VyY2VVUkwoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgbGluZVZh
bHVlID0gZXhjZXB0aW9uT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihl
eGVjLCAibGluZSIpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgbGluZVZhbHVlID0gZXhjZXB0aW9u
T2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgTWFrZUlkZW50aWZpZXIoZXhlYywgImxpbmUi
KSk7CiAgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IGxpbmVWYWx1ZSAmJiBsaW5lVmFsdWUu
aXNOdW1iZXIoKSA/IGludChsaW5lVmFsdWUudG9OdW1iZXIoZXhlYykpIDogMDsKLSAgICAgICAg
ICAgIEpTVmFsdWUgY29sdW1uVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdldERpcmVjdChleGVj
LT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJjb2x1bW4iKSk7CisgICAgICAgICAgICBKU1ZhbHVl
IGNvbHVtblZhbHVlID0gZXhjZXB0aW9uT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgTWFr
ZUlkZW50aWZpZXIoZXhlYywgImNvbHVtbiIpKTsKICAgICAgICAgICAgIGludCBjb2x1bW5OdW1i
ZXIgPSBjb2x1bW5WYWx1ZSAmJiBjb2x1bW5WYWx1ZS5pc051bWJlcigpID8gaW50KGNvbHVtblZh
bHVlLnRvTnVtYmVyKGV4ZWMpKSA6IDA7Ci0gICAgICAgICAgICBKU1ZhbHVlIHNvdXJjZVVSTFZh
bHVlID0gZXhjZXB0aW9uT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihl
eGVjLCAic291cmNlVVJMIikpOworICAgICAgICAgICAgSlNWYWx1ZSBzb3VyY2VVUkxWYWx1ZSA9
IGV4Y2VwdGlvbk9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIE1ha2VJZGVudGlmaWVyKGV4
ZWMsICJzb3VyY2VVUkwiKSk7CiAgICAgICAgICAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJM
ID0gc291cmNlVVJMVmFsdWUgJiYgc291cmNlVVJMVmFsdWUuaXNTdHJpbmcoKSA/IHNvdXJjZVVS
TFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSA6IEFTQ0lJTGl0ZXJhbCgidW5kZWZp
bmVkIik7CiAgICAgICAgICAgICBmcmFtZXNbMF0gPSBTY3JpcHRDYWxsRnJhbWUoZmlyc3RDYWxs
RnJhbWUuZnVuY3Rpb25OYW1lKCksIGV4Y2VwdGlvblNvdXJjZVVSTCwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZp
c2lvbiAxNjM4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw3ICs1Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZ1bmN0
aW9uRXhlY3V0YWJsZTsKICAgICBjbGFzcyBKSVQ7CiAgICAgY2xhc3MgSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcjsKLSAgICBjbGFzcyBJZGVudGlmaWVyOwogICAgIGNsYXNzIEludGVycHJldGVyOwog
ICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgY2xhc3MgSlNTdGFjazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTYzODIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2UKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gdWlkLT5pc0Vt
cHR5VW5pcXVlKCkgPyBJZGVudGlmaWVyOjpmcm9tKFByaXZhdGVOYW1lKHVpZCkpIDogSWRlbnRp
Zmllcih2bSwgdWlkKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gdWlkLT5pc0VtcHR5VW5pcXVl
KCkgPyBJZGVudGlmaWVyRnJvbShQcml2YXRlTmFtZSh1aWQpKSA6IE1ha2VJZGVudGlmaWVyKHZt
LCB1aWQpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGJhc2UpOwpAQCAtOTE5LDcgKzkxOSw3IEBAIHNpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVTdHIKIAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SGFzUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgSlNTdHJpbmcqIHBy
b3BlcnR5KQogewotICAgIGludCByZXN1bHQgPSBiYXNlLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIHByb3BlcnR5LT52YWx1ZShleGVjKSkpOworICAgIGludCByZXN1bHQgPSBi
YXNlLT5oYXNQcm9wZXJ0eShleGVjLCBNYWtlSWRlbnRpZmllcihleGVjLCBwcm9wZXJ0eS0+dmFs
dWUoZXhlYykpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNjM4
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MjMsNiArNzIzLDcgQEAgaW5saW5lIEpTVmFsdWUgZ2V0QnlWYWwo
RXhlY1N0YXRlKiBleGVjLAogICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmdldChleGVjLCBqc0Nh
c3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7CiAg
ICAgCiAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShleGVjLCBzdWJzY3JpcHQudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKTsKKy8vICAgIGZwcmludGYoc3RkZXJyLCAiZ2V0QnlWYWw6ICVkXG4i
LCBwcm9wZXJ0eS5pbXBsKCktPmlzSWRlbnRpZmllcigpKTsKICAgICByZXR1cm4gYmFzZVZhbHVl
LmdldChleGVjLCBwcm9wZXJ0eSk7CiB9CiAKQEAgLTEyNjgsNyArMTI2OSw3IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXh0X3BuYW0KICAgICBMTElOVF9CRUdJTigpOwogICAg
IEpTT2JqZWN0KiBiYXNlID0gYXNPYmplY3QoTExJTlRfT1AoMikuanNWYWx1ZSgpKTsKICAgICBK
U1N0cmluZyogcHJvcGVydHkgPSBhc1N0cmluZyhMTElOVF9PUCgxKS5qc1ZhbHVlKCkpOwotICAg
IGlmIChiYXNlLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHByb3BlcnR5LT52
YWx1ZShleGVjKSkpKSB7CisgICAgaWYgKGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIE1ha2VJZGVu
dGlmaWVyKGV4ZWMsIHByb3BlcnR5LT52YWx1ZShleGVjKSkpKSB7CiAgICAgICAgIC8vIEdvIHRv
IHRhcmdldC4KICAgICAgICAgcGMgKz0gcGNbNl0udS5vcGVyYW5kOwogICAgIH0gLy8gRWxzZSwg
ZG9uJ3QgY2hhbmdlIHRoZSBQQywgc28gdGhlIGludGVycHJldGVyIHdpbGwgcmVsb29wLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHJldmlzaW9uIDE2MzgyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NDEsNyArODQxLDcgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmll
cj4gQQogICAgIGlmIChzaG91bGRDcmVhdGVJZGVudGlmaWVyKSB7CiAgICAgICAgIGludCBpZGVu
dGlmaWVyTGVuZ3RoID0gY3VycmVudFNvdXJjZVB0cigpIC0gaWRlbnRpZmllclN0YXJ0OwogICAg
ICAgICBpZiAoaXNBbGw4Qml0KQotICAgICAgICAgICAgaWRlbnQgPSBtYWtlSWRlbnRpZmllckxD
aGFyRnJvbVVDaGFyKGlkZW50aWZpZXJTdGFydCwgaWRlbnRpZmllckxlbmd0aCk7CisgICAgICAg
ICAgICBpZGVudCA9IElkZW50aWZpZXJDcmVhdGVMQ2hhckZyb21VQ2hhcihpZGVudGlmaWVyU3Rh
cnQsIGlkZW50aWZpZXJMZW5ndGgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBpZGVudCA9
IG1ha2VJZGVudGlmaWVyKGlkZW50aWZpZXJTdGFydCwgaWRlbnRpZmllckxlbmd0aCk7CiAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAkocmV2aXNpb24gMTYz
ODIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xODcsNyArMTg3LDcgQEAgcHJpdmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0
IElkZW50aWZpZXIqIG1ha2VMQ2hhcklkZW50aWZpZXIoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpOwogICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogbWFr
ZUxDaGFySWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7
CiAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBtYWtlUmlnaHRTaXplZElkZW50
aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVDaGFyIG9yQWxs
Q2hhcnMpOwotICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogbWFrZUlkZW50aWZp
ZXJMQ2hhckZyb21VQ2hhcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7
CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBJZGVudGlmaWVyQ3JlYXRlTENo
YXJGcm9tVUNoYXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOwogCiAg
ICAgQUxXQVlTX0lOTElORSBib29sIGxhc3RUb2tlbldhc1Jlc3RyS2V5d29yZCgpIGNvbnN0Owog
CkBAIC0yOTEsMTQgKzI5MSwxNCBAQCBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExl
eGVyPFQ+CiB0ZW1wbGF0ZSA8PgogQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBMZXhl
cjxMQ2hhcj46Om1ha2VSaWdodFNpemVkSWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCwgVUNoYXIpCiB7Ci0gICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRl
bnRpZmllckxDaGFyRnJvbVVDaGFyKG1fdm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgcmV0
dXJuICZtX2FyZW5hLT5JZGVudGlmaWVyQ3JlYXRlTENoYXJGcm9tVUNoYXIobV92bSwgY2hhcmFj
dGVycywgbGVuZ3RoKTsKIH0KIAogdGVtcGxhdGUgPD4KIEFMV0FZU19JTkxJTkUgY29uc3QgSWRl
bnRpZmllciogTGV4ZXI8VUNoYXI+OjptYWtlUmlnaHRTaXplZElkZW50aWZpZXIoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVDaGFyIG9yQWxsQ2hhcnMpCiB7CiAgICAg
aWYgKCEob3JBbGxDaGFycyAmIH4weGZmKSkKLSAgICAgICAgcmV0dXJuICZtX2FyZW5hLT5tYWtl
SWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKG1fdm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAg
ICAgIHJldHVybiAmbV9hcmVuYS0+SWRlbnRpZmllckNyZWF0ZUxDaGFyRnJvbVVDaGFyKG1fdm0s
IGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAKICAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlm
aWVyKG1fdm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CkBAIC0zMTgsOSArMzE4LDkgQEAgQUxX
QVlTX0lOTElORSB2b2lkIExleGVyPFVDaGFyPjo6c2V0Q29kZQogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VJ
ZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgpCitBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPFQ+OjpJZGVudGlm
aWVyQ3JlYXRlTENoYXJGcm9tVUNoYXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllckxDaGFyRnJvbVVD
aGFyKG1fdm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgcmV0dXJuICZtX2FyZW5hLT5JZGVu
dGlmaWVyQ3JlYXRlTENoYXJGcm9tVUNoYXIobV92bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkBAIC0zMzIsNyArMzMyLDcgQEAgQUxXQVlTX0lOTElO
RSBjb25zdCBJZGVudGlmaWVyKiBMZXhlcjxUPgogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBBTFdB
WVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPFQ+OjptYWtlTENoYXJJZGVudGlmaWVy
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewotICAgIHJldHVybiAm
bV9hcmVuYS0+bWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihtX3ZtLCBjaGFyYWN0ZXJzLCBs
ZW5ndGgpOworICAgIHJldHVybiAmbV9hcmVuYS0+SWRlbnRpZmllckNyZWF0ZUxDaGFyRnJvbVVD
aGFyKG1fdm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24g
MTYzODIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MDEsNyArNjAxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRGVjb25zdAogICAgICAgICAgICAgICAgIEpTVG9rZW5UeXBlIHRva2VuVHlwZSA9IG1f
dG9rZW4ubV90eXBlOwogICAgICAgICAgICAgICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsK
ICAgICAgICAgICAgICAgICBjYXNlIE5VTUJFUjoKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShtX3ZtLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXJGcm9tKG1f
dm0sIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTVFJJTkc6CiAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZSA9ICptX3Rva2VuLm1fZGF0YS5pZGVudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGU7
CiBjbGFzcyBGdW5jdGlvblBhcmFtZXRlcnM7Ci1jbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgVk07
CiBjbGFzcyBQcm9ncmFtTm9kZTsKIGNsYXNzIFNvdXJjZUNvZGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCShyZXZpc2lvbiAxNjM4MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CiAgICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgbWFrZUlk
ZW50aWZpZXIoVk0qLCBjb25zdCBUKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsKLSAgICAg
ICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllckxDaGFyRnJv
bVVDaGFyKFZNKiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOworICAg
ICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJDcmVhdGVMQ2hh
ckZyb21VQ2hhcihWTSosIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsK
IAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtYWtlTnVtZXJpY0lkZW50aWZpZXIoVk0qLCBk
b3VibGUgbnVtYmVyKTsKIApAQCAtNzMsNDggKzczLDQ4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtlSWRl
bnRpZmllcihWTSogdm0sIGNvbnN0IFQqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiAgICAg
ewogICAgICAgICBpZiAoY2hhcmFjdGVyc1swXSA+PSBNYXhpbXVtQ2FjaGFibGVDaGFyYWN0ZXIp
IHsKLSAgICAgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXIodm0sIGNoYXJh
Y3RlcnMsIGxlbmd0aCkpOworICAgICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoTWFrZUlk
ZW50aWZpZXIodm0sIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuIG1f
aWRlbnRpZmllcnMubGFzdCgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChsZW5ndGggPT0gMSkg
ewogICAgICAgICAgICAgaWYgKElkZW50aWZpZXIqIGlkZW50ID0gbV9zaG9ydElkZW50aWZpZXJz
W2NoYXJhY3RlcnNbMF1dKQogICAgICAgICAgICAgICAgIHJldHVybiAqaWRlbnQ7Ci0gICAgICAg
ICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyKHZtLCBjaGFyYWN0ZXJzLCBsZW5n
dGgpKTsKKyAgICAgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKE1ha2VJZGVudGlmaWVyKHZt
LCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKICAgICAgICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tj
aGFyYWN0ZXJzWzBdXSA9ICZtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICAgICAgICAgIHJldHVy
biBtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICAgICAgfQogICAgICAgICBJZGVudGlmaWVyKiBp
ZGVudCA9IG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07Ci0gICAgICAgIGlmIChp
ZGVudCAmJiBJZGVudGlmaWVyOjplcXVhbChpZGVudC0+aW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5n
dGgpKQorICAgICAgICBpZiAoaWRlbnQgJiYgSWRlbnRpZmllckVxdWFsKGlkZW50LT5pbXBsKCks
IGNoYXJhY3RlcnMsIGxlbmd0aCkpCiAgICAgICAgICAgICByZXR1cm4gKmlkZW50OwotICAgICAg
ICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyKHZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgp
KTsKKyAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoTWFrZUlkZW50aWZpZXIodm0sIGNoYXJh
Y3RlcnMsIGxlbmd0aCkpOwogICAgICAgICBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNb
MF1dID0gJm1faWRlbnRpZmllcnMubGFzdCgpOwogICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVy
cy5sYXN0KCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBJ
ZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoVk0qIHZtLCBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKKyAgICBBTFdBWVNfSU5MSU5FIGNv
bnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6SWRlbnRpZmllckNyZWF0ZUxDaGFyRnJv
bVVDaGFyKFZNKiB2bSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiAg
ICAgewogICAgICAgICBpZiAoY2hhcmFjdGVyc1swXSA+PSBNYXhpbXVtQ2FjaGFibGVDaGFyYWN0
ZXIpIHsKLSAgICAgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXI6OmNyZWF0
ZUxDaGFyRnJvbVVDaGFyKHZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAgICAgICAgICAgIG1f
aWRlbnRpZmllcnMuYXBwZW5kKE1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIodm0sIGNoYXJh
Y3RlcnMsIGxlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcnMubGFzdCgp
OwogICAgICAgICB9CiAgICAgICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICAgICAgaWYg
KElkZW50aWZpZXIqIGlkZW50ID0gbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dKQog
ICAgICAgICAgICAgICAgIHJldHVybiAqaWRlbnQ7Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXJz
LmFwcGVuZChJZGVudGlmaWVyKHZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAgICAgICAgICAg
IG1faWRlbnRpZmllcnMuYXBwZW5kKE1ha2VJZGVudGlmaWVyKHZtLCBjaGFyYWN0ZXJzLCBsZW5n
dGgpKTsKICAgICAgICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9ICZt
X2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICAgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJzLmxh
c3QoKTsKICAgICAgICAgfQogICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9IG1fcmVjZW50SWRl
bnRpZmllcnNbY2hhcmFjdGVyc1swXV07Ci0gICAgICAgIGlmIChpZGVudCAmJiBJZGVudGlmaWVy
OjplcXVhbChpZGVudC0+aW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICBpZiAo
aWRlbnQgJiYgSWRlbnRpZmllckVxdWFsKGlkZW50LT5pbXBsKCksIGNoYXJhY3RlcnMsIGxlbmd0
aCkpCiAgICAgICAgICAgICByZXR1cm4gKmlkZW50OwotICAgICAgICBtX2lkZW50aWZpZXJzLmFw
cGVuZChJZGVudGlmaWVyOjpjcmVhdGVMQ2hhckZyb21VQ2hhcih2bSwgY2hhcmFjdGVycywgbGVu
Z3RoKSk7CisgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKE1ha2VJZGVudGlmaWVyTENoYXJG
cm9tVUNoYXIodm0sIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgICAgICBtX3JlY2VudElkZW50
aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gJm1faWRlbnRpZmllcnMubGFzdCgpOwogICAgICAgICBy
ZXR1cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgfQogICAgIAogICAgIGlubGluZSBjb25z
dCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VOdW1lcmljSWRlbnRpZmllcihWTSog
dm0sIGRvdWJsZSBudW1iZXIpCiAgICAgewotICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJ
ZGVudGlmaWVyKHZtLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChudW1iZXIpKSk7
CisgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKE1ha2VJZGVudGlmaWVyKHZtLCBTdHJpbmc6
Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChudW1iZXIpKSk7CiAgICAgICAgIHJldHVybiBtX2lk
ZW50aWZpZXJzLmxhc3QoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyVG9rZW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXJUb2tlbnMuaAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCAr
MzIsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSWRlbnRpZmllcjsKLQogZW51bSB7
CiAgICAgVW5hcnlPcFRva2VuRmxhZyA9IDY0LAogICAgIEtleXdvcmRUb2tlbkZsYWcgPSAxMjgs
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBib29sIEFyZ3VtZW50czo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRlCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMs
IElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOworICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXJGcm9tKGV4ZWMs
IGkpLCBzbG90KTsKIH0KICAgICAKIHZvaWQgQXJndW1lbnRzOjpjcmVhdGVTdHJpY3RNb2RlQ2Fs
bGVySWZOZWNlc3NhcnkoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQg
QXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2IKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGhpc09iamVjdC0+bV9udW1Bcmd1bWVudHM7ICsraSkgewogICAgICAgICBpZiAo
IXRoaXNPYmplY3QtPmlzQXJndW1lbnQoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXJGcm9tKGV4ZWMsIGkpKTsKICAgICB9CiAgICAg
aWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgewogICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlKTsKQEAgLTE4Nyw3ICsxODcs
NyBAQCB2b2lkIEFyZ3VtZW50czo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIHNob3VsZFRocm93
KTsKLSAgICBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaSksIHZhbHVlLCBzbG90KTsKKyAgICBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGV4
ZWMsIElkZW50aWZpZXJGcm9tKGV4ZWMsIGkpLCB2YWx1ZSwgc2xvdCk7CiB9CiAKIHZvaWQgQXJn
dW1lbnRzOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw4IEBAIHZvaWQgQXJy
YXlQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiAKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHZtLnByb3RvdHlwZU1h
cC5hZGRQcm90b3R5cGUodGhpcyk7CisKKy8vICAgIGZwcmludGYoc3RkZXJyLCAiQVAgJXAgJWRc
biIsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUuaW1wbCgpLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLmltcGwoKS0+aXNFbXB0eVVuaXF1ZSgpKTsK
ICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0
ZU5hbWUsIGFycmF5UHJvdG9GdW5jVmFsdWVzLCBEb250RW51bSwgMCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMTYz
ODIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVD
YWNoZTo6Z2V0R2xvCiAgICAgfQogCiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDYWNoZVR5cGVzPFVu
bGlua2VkQ29kZUJsb2NrVHlwZT46OlJvb3ROb2RlIFJvb3ROb2RlOwotICAgIFJlZlB0cjxSb290
Tm9kZT4gcm9vdE5vZGUgPSBwYXJzZTxSb290Tm9kZT4oJnZtLCBzb3VyY2UsIDAsIElkZW50aWZp
ZXIoKSwgc3RyaWN0bmVzcywgSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CisgICAgUmVmUHRy
PFJvb3ROb2RlPiByb290Tm9kZSA9IHBhcnNlPFJvb3ROb2RlPigmdm0sIHNvdXJjZSwgMCwgTWFr
ZUlkZW50aWZpZXIoKSwgc3RyaWN0bmVzcywgSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CiAg
ICAgaWYgKCFyb290Tm9kZSkgewogICAgICAgICBtX3NvdXJjZUNvZGUucmVtb3ZlKGFkZFJlc3Vs
dC5pdGVyYXRvcik7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQyLDcgKzE0Miw3IEBAIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmcKICAgICAgICAgcmV0dXJuIGpzQ2Fz
dDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
Y2VsbC5nZXQoKSk7CiAKICAgICBKU1RleHRQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZUxhc3ROZXds
aW5lOwotICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbSA9IHBhcnNlPFByb2dyYW1Ob2Rl
Pigmdm0sIHNvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBKU1BhcnNlTm9ybWFsLCBKU1BhcnNlUHJv
Z3JhbUNvZGUsIGVycm9yLCAmcG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSk7CisgICAgUmVmUHRy
PFByb2dyYW1Ob2RlPiBwcm9ncmFtID0gcGFyc2U8UHJvZ3JhbU5vZGU+KCZ2bSwgc291cmNlLCAw
LCBNYWtlSWRlbnRpZmllcigpLCBKU1BhcnNlTm9ybWFsLCBKU1BhcnNlUHJvZ3JhbUNvZGUsIGVy
cm9yLCAmcG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSk7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAg
ICAgICAgIEFTU0VSVChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSk7CiAg
ICAgICAgIG1fc291cmNlQ29kZS5yZW1vdmUoYWRkUmVzdWx0Lml0ZXJhdG9yKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCShyZXZpc2lvbiAxNjM4MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXZhbEV4ZWN1
dGFibGU7CiBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlOwotY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNz
IEpTU2NvcGU7CiBjbGFzcyBQcm9ncmFtRXhlY3V0YWJsZTsKIGNsYXNzIFVubGlua2VkQ29kZUJs
b2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmll
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmNwcAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
MSArMjcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgSU5JVElBTElaRV9QUk9QRVJU
WV9OQU1FKG5hbWUpICwgbmFtZSh2bSwgI25hbWUpCiAjZGVmaW5lIElOSVRJQUxJWkVfS0VZV09S
RChuYW1lKSAsIG5hbWUjI0tleXdvcmQodm0sICNuYW1lKQotI2RlZmluZSBJTklUSUFMSVpFX1BS
SVZBVEVfTkFNRShuYW1lKSAsIG5hbWUjI1ByaXZhdGVOYW1lKElkZW50aWZpZXI6OmZyb20oUHJp
dmF0ZU5hbWUoKSkpCisjZGVmaW5lIElOSVRJQUxJWkVfUFJJVkFURV9OQU1FKG5hbWUpICwgbmFt
ZSMjUHJpdmF0ZU5hbWUoSWRlbnRpZmllckZyb20oUHJpdmF0ZU5hbWUoKSkpCiAKIENvbW1vbklk
ZW50aWZpZXJzOjpDb21tb25JZGVudGlmaWVycyhWTSogdm0pCiAgICAgOiBudWxsSWRlbnRpZmll
cigpCi0gICAgLCBlbXB0eUlkZW50aWZpZXIoSWRlbnRpZmllcjo6RW1wdHlJZGVudGlmaWVyKQor
ICAgICwgZW1wdHlJZGVudGlmaWVyKE1ha2VJZGVudGlmaWVyKEVtcHR5SWRlbnRpZmllcikpCiAg
ICAgLCB1bmRlcnNjb3JlUHJvdG8odm0sICJfX3Byb3RvX18iKQogICAgICwgdGhpc0lkZW50aWZp
ZXIodm0sICJ0aGlzIikKICAgICAsIHVzZVN0cmljdElkZW50aWZpZXIodm0sICJ1c2Ugc3RyaWN0
IikKQEAgLTQwLDYgKzQwLDcgQEAgQ29tbW9uSWRlbnRpZmllcnM6OkNvbW1vbklkZW50aWZpZXJz
KFZNKgogICAgIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJ
QUxJWkVfUFJPUEVSVFlfTkFNRSkKICAgICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNf
RUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfUFJJVkFURV9OQU1FKQogeworLy8gICAgZnBy
aW50ZihzdGRlcnIsICJDSSAlcCAlZFxuIiwgaXRlcmF0b3JQcml2YXRlTmFtZS5pbXBsKCksIGl0
ZXJhdG9yUHJpdmF0ZU5hbWUuaW1wbCgpLT5pc0VtcHR5VW5pcXVlKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBs
ZXRpb24uY3BwCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBib29s
IGNoZWNrU3ludGF4KFZNJiB2bSwgY29uc3QgU291cmNlQ29kCiB7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZU
aHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKLSAgICBSZWZQdHI8UHJvZ3Jh
bU5vZGU+IHByb2dyYW1Ob2RlID0gcGFyc2U8UHJvZ3JhbU5vZGU+KCZ2bSwgc291cmNlLCAwLCBJ
ZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOwor
ICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQcm9ncmFtTm9kZT4o
JnZtLCBzb3VyY2UsIDAsIE1ha2VJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VQ
cm9ncmFtQ29kZSwgZXJyb3IpOwogICAgIHJldHVybiBwcm9ncmFtTm9kZTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkocmV2aXNpb24gMTYzODIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcsMTcgKzEzNywxNyBAQCBKU09iamVjdCogYWRkRXJyb3JJbmZvKENhbGxGcmFtZSog
Y2FsbEZyCiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwgPSBzb3VyY2UucHJvdmlkZXIoKS0+
dXJsKCk7CiAKICAgICBpZiAobGluZSAhPSAtMSkKLSAgICAgICAgZXJyb3ItPnB1dERpcmVjdCgq
dm0sIElkZW50aWZpZXIodm0sIGxpbmVQcm9wZXJ0eU5hbWUpLCBqc051bWJlcihsaW5lKSwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgZXJyb3ItPnB1dERpcmVjdCgqdm0sIE1ha2VJ
ZGVudGlmaWVyKHZtLCBsaW5lUHJvcGVydHlOYW1lKSwganNOdW1iZXIobGluZSksIFJlYWRPbmx5
IHwgRG9udERlbGV0ZSk7CiAgICAgaWYgKCFzb3VyY2VVUkwuaXNOdWxsKCkpCi0gICAgICAgIGVy
cm9yLT5wdXREaXJlY3QoKnZtLCBJZGVudGlmaWVyKHZtLCBzb3VyY2VVUkxQcm9wZXJ0eU5hbWUp
LCBqc1N0cmluZyh2bSwgc291cmNlVVJMKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAg
ICAgZXJyb3ItPnB1dERpcmVjdCgqdm0sIE1ha2VJZGVudGlmaWVyKHZtLCBzb3VyY2VVUkxQcm9w
ZXJ0eU5hbWUpLCBqc1N0cmluZyh2bSwgc291cmNlVVJMKSwgUmVhZE9ubHkgfCBEb250RGVsZXRl
KTsKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKIAogYm9vbCBoYXNFcnJvckluZm8oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogZXJyb3IpCiB7Ci0gICAgcmV0dXJuIGVycm9yLT5oYXNQcm9wZXJ0
eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGxpbmVQcm9wZXJ0eU5hbWUpKQotICAgICAgICB8fCBl
cnJvci0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcihleGVjLCBzb3VyY2VVUkxQcm9wZXJ0
eU5hbWUpKTsKKyAgICByZXR1cm4gZXJyb3ItPmhhc1Byb3BlcnR5KGV4ZWMsIE1ha2VJZGVudGlm
aWVyKGV4ZWMsIGxpbmVQcm9wZXJ0eU5hbWUpKQorICAgICAgICB8fCBlcnJvci0+aGFzUHJvcGVy
dHkoZXhlYywgTWFrZUlkZW50aWZpZXIoZXhlYywgc291cmNlVVJMUHJvcGVydHlOYW1lKSk7CiB9
CiAKIEpTT2JqZWN0KiB0aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTYz
ODIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1NSw3ICs0NTUsNyBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFi
bGU6OmNoZWNrU3ludGF4CiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFt
Tm9kZSA9IHBhcnNlPFByb2dyYW1Ob2RlPih2bSwgbV9zb3VyY2UsIDAsIElkZW50aWZpZXIoKSwg
SlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0
aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOworICAgIFJlZlB0cjxQcm9ncmFt
Tm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQcm9ncmFtTm9kZT4odm0sIG1fc291cmNlLCAwLCBN
YWtlSWRlbnRpZmllcigpLCBKU1BhcnNlTm9ybWFsLCBQcm9ncmFtTm9kZTo6aXNGdW5jdGlvbk5v
ZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CiAg
ICAgaWYgKHByb2dyYW1Ob2RlKQogICAgICAgICByZXR1cm4gMDsKICAgICBBU1NFUlQoZXJyb3Iu
bV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw4IEBAIHVzaW5nIFdURjo6VGhyZWFkU3BlY2lmaWM7CiAKIG5hbWVzcGFj
ZSBKU0MgewogCisvKgorCiBJZGVudGlmaWVyVGFibGUqIGNyZWF0ZUlkZW50aWZpZXJUYWJsZSgp
CiB7CiAgICAgcmV0dXJuIG5ldyBJZGVudGlmaWVyVGFibGU7CkBAIC01Niw3ICs1OCw3IEBAIHN0
cnVjdCBJZGVudGlmaWVyQVNDSUlTdHJpbmdUcmFuc2xhdG9yIHsKIAogICAgIHN0YXRpYyBib29s
IGVxdWFsKFN0cmluZ0ltcGwqIHIsIGNvbnN0IExDaGFyKiBzKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIElkZW50aWZpZXI6OmVxdWFsKHIsIHMpOworICAgICAgICByZXR1cm4gSWRlbnRpZmllckVx
dWFsKHIsIHMpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBs
KiYgbG9jYXRpb24sIGNvbnN0IExDaGFyKiBjLCB1bnNpZ25lZCBoYXNoKQpAQCAtNzUsNyArNzcs
NyBAQCBzdHJ1Y3QgSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyVHJhbnNsYXRvCiAgICAgCiAgICAg
c3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogc3RyLCBjb25zdCBDaGFyQnVmZmVyPFVDaGFy
PiYgYnVmKQogICAgIHsKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKHN0ciwgYnVm
LnMsIGJ1Zi5sZW5ndGgpOworICAgICAgICByZXR1cm4gSWRlbnRpZmllckVxdWFsKHN0ciwgYnVm
LnMsIGJ1Zi5sZW5ndGgpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUo
U3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBDaGFyQnVmZmVyPFVDaGFyPiYgYnVmLCB1bnNp
Z25lZCBoYXNoKQpAQCAtMTU1LDMyICsxNTcsMzIgQEAgUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVu
dGlmaWVyOjphZGRTbG93QwogICAgIHJldHVybiBhZGRTbG93Q2FzZSgmZXhlYy0+dm0oKSwgcik7
CiB9CiAKLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHZhbHVlKQorSWRlbnRpZmllciBJZGVudGlmaWVyRnJvbShFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHZhbHVlKQogewogICAgIHJldHVybiBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPnZtKCku
bnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7CiB9CiAKLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6
ZnJvbShFeGVjU3RhdGUqIGV4ZWMsIGludCB2YWx1ZSkKK0lkZW50aWZpZXIgSWRlbnRpZmllckZy
b20oRXhlY1N0YXRlKiBleGVjLCBpbnQgdmFsdWUpCiB7CiAgICAgcmV0dXJuIElkZW50aWZpZXIo
ZXhlYywgZXhlYy0+dm0oKS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKIH0KIAotSWRlbnRp
ZmllciBJZGVudGlmaWVyOjpmcm9tKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQorSWRl
bnRpZmllciBJZGVudGlmaWVyRnJvbShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSkKIHsK
ICAgICByZXR1cm4gSWRlbnRpZmllcihleGVjLCBleGVjLT52bSgpLm51bWVyaWNTdHJpbmdzLmFk
ZCh2YWx1ZSkpOwogfQogCi1JZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oVk0qIHZtLCB1bnNp
Z25lZCB2YWx1ZSkKK0lkZW50aWZpZXIgSWRlbnRpZmllckZyb20oVk0qIHZtLCB1bnNpZ25lZCB2
YWx1ZSkKIHsKICAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgdm0tPm51bWVyaWNTdHJpbmdzLmFk
ZCh2YWx1ZSkpOwogfQogCi1JZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oVk0qIHZtLCBpbnQg
dmFsdWUpCitJZGVudGlmaWVyIElkZW50aWZpZXJGcm9tKFZNKiB2bSwgaW50IHZhbHVlKQogewog
ICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS0+bnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7
CiB9CiAKLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShWTSogdm0sIGRvdWJsZSB2YWx1ZSkK
K0lkZW50aWZpZXIgSWRlbnRpZmllckZyb20oVk0qIHZtLCBkb3VibGUgdmFsdWUpCiB7CiAgICAg
cmV0dXJuIElkZW50aWZpZXIodm0sIHZtLT5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKIH0K
QEAgLTIwOCw0ICsyMTAsNDUgQEAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIElkZW50aWZp
ZXI6OgogCiAjZW5kaWYKIAorKi8KKworQXRvbWljU3RyaW5nIElkZW50aWZpZXJGcm9tKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgdmFsdWUpCit7CisgICAgcmV0dXJuIEF0b21pY1N0cmluZyhl
eGVjLT52bSgpLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOworfQorCitBdG9taWNTdHJpbmcg
SWRlbnRpZmllckZyb20oRXhlY1N0YXRlKiBleGVjLCBpbnQgdmFsdWUpCit7CisgICAgcmV0dXJu
IEF0b21pY1N0cmluZyhleGVjLT52bSgpLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOworfQor
CitBdG9taWNTdHJpbmcgSWRlbnRpZmllckZyb20oRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFs
dWUpCit7CisgICAgcmV0dXJuIEF0b21pY1N0cmluZyhleGVjLT52bSgpLm51bWVyaWNTdHJpbmdz
LmFkZCh2YWx1ZSkpOworfQorCitBdG9taWNTdHJpbmcgSWRlbnRpZmllckZyb20oVk0qIHZtLCB1
bnNpZ25lZCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gQXRvbWljU3RyaW5nKHZtLT5udW1lcmljU3Ry
aW5ncy5hZGQodmFsdWUpKTsKK30KKworQXRvbWljU3RyaW5nIElkZW50aWZpZXJGcm9tKFZNKiB2
bSwgaW50IHZhbHVlKQoreworICAgIHJldHVybiBBdG9taWNTdHJpbmcodm0tPm51bWVyaWNTdHJp
bmdzLmFkZCh2YWx1ZSkpOworfQorCitBdG9taWNTdHJpbmcgSWRlbnRpZmllckZyb20oVk0qIHZt
LCBkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIEF0b21pY1N0cmluZyh2bS0+bnVtZXJpY1N0
cmluZ3MuYWRkKHZhbHVlKSk7Cit9CisKKy8vIEZJWE1FOiBtYWtlIG5vdCBzdWNrCitBdG9taWNT
dHJpbmcgTWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihWTSosIGNvbnN0IFVDaGFyKiBzLCBp
bnQgbGVuZ3RoKQoreworICAgIExDaGFyKiBkOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByID0g
U3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGQpOworICAgIFdURjo6Y29w
eUxDaGFyc0Zyb21VQ2hhclNvdXJjZShkLCBzLCBsZW5ndGgpOworICAgIHJldHVybiBBdG9taWNT
dHJpbmcoci5nZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAkocmV2aXNpb24gMTYzODIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSwyMjEgKzI5LDIyMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIEV4
ZWNTdGF0ZTsKLQotICAgIGNsYXNzIElkZW50aWZpZXIgewotICAgICAgICBmcmllbmQgY2xhc3Mg
U3RydWN0dXJlOwotICAgIHB1YmxpYzoKLSAgICAgICAgSWRlbnRpZmllcigpIHsgfQotICAgICAg
ICBlbnVtIEVtcHR5SWRlbnRpZmllckZsYWcgeyBFbXB0eUlkZW50aWZpZXIgfTsKLSAgICAgICAg
SWRlbnRpZmllcihFbXB0eUlkZW50aWZpZXJGbGFnKSA6IG1fc3RyaW5nKFN0cmluZ0ltcGw6OmVt
cHR5KCkpIHsgfQotCi0gICAgICAgIC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmluZyBsaXRl
cmFscy4KLSAgICAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgotICAgICAg
ICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2No
YXJhY3RlcnNDb3VudF0pIDogbV9zdHJpbmcoYWRkKGV4ZWMsIGNoYXJhY3RlcnMpKSB7IH0KLSAg
ICAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgotICAgICAgICBJZGVudGlm
aWVyKFZNKiB2bSwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIDog
bV9zdHJpbmcoYWRkKHZtLCBjaGFyYWN0ZXJzKSkgeyB9Ci0KLSAgICAgICAgSWRlbnRpZmllcihF
eGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmluZyhhZGQoZXhlYywgcmVw
KSkgeyB9Ci0gICAgICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcm
IHMpIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHMuaW1wbCgpKSkgeyB9Ci0KLSAgICAgICAgSWRlbnRp
ZmllcihWTSogdm0sIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6IG1fc3RyaW5nKGFkZCh2
bSwgcywgbGVuZ3RoKSkgeyB9Ci0gICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBVQ2hh
ciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgfQotICAg
ICAgICBJZGVudGlmaWVyKFZNKiB2bSwgU3RyaW5nSW1wbCogcmVwKSA6IG1fc3RyaW5nKGFkZCh2
bSwgcmVwKSkgeyB9IAotICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBz
KSA6IG1fc3RyaW5nKGFkZCh2bSwgcy5pbXBsKCkpKSB7IH0KLQotICAgICAgICBjb25zdCBTdHJp
bmcmIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9Ci0gICAgICAgIFN0cmluZ0lt
cGwqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pbXBsKCk7IH0KLSAgICAgICAgCi0g
ICAgICAgIGNvbnN0IFVDaGFyKiBkZXByZWNhdGVkQ2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyaW5nLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCk7IH0KLSAgICAgICAgaW50IGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0aCgpOyB9Ci0gICAgICAgIAotICAgICAgICBD
U3RyaW5nIGFzY2lpKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuYXNjaWkoKTsgfQotICAgICAg
ICBDU3RyaW5nIHV0ZjgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy51dGY4KCk7IH0KLSAgICAg
ICAgCi0gICAgICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oY29uc3QgUHJpdmF0ZU5hbWUmIG5h
bWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcmVzdWx0OwotICAgICAgICAg
ICAgcmVzdWx0Lm1fc3RyaW5nID0gbmFtZS51aWQoKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBjcmVhdGVMQ2hhckZy
b21VQ2hhcihWTSogdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSB7IHJldHVybiBJZGVu
dGlmaWVyKHZtLCBhZGQ4KHZtLCBzLCBsZW5ndGgpKTsgfQotCi0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCB5
KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIElkZW50aWZpZXIgZnJvbShFeGVj
U3RhdGUqIGV4ZWMsIGludCB5KTsKLSAgICAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShFeGVj
U3RhdGUqIGV4ZWMsIGRvdWJsZSB5KTsKLSAgICAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShW
TSosIHVuc2lnbmVkIHkpOwotICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNKiwgaW50
IHkpOwotICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNKiwgZG91YmxlIHkpOwotCi0g
ICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCk7IH0K
LSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgp
OyB9Ci0gICAgICAgIAotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
IT0oY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IElkZW50aWZpZXImKTsKLQotICAgICAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBMQ2hhciopOwotICAg
ICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBjaGFy
Kik7Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IExDaGFyKik7Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IGNoYXIqKTsKLSAgICAKLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgU3RyaW5nSW1wbCosIGNvbnN0IExDaGFyKik7Ci0gICAgICAgIHN0YXRpYyBpbmxpbmUgYm9v
bCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKmEsIGNvbnN0IGNoYXIqYikgeyByZXR1cm4gSWRlbnRp
Zmllcjo6ZXF1YWwoYSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIpKTsgfTsKLSAg
ICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IExDaGFyKiwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5n
SW1wbCosIGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3RyaW5nSW1wbCogYikgeyByZXR1
cm4gOjplcXVhbChhLCBiKTsgfQotCi0gICAgICAgIC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0
cmluZyBsaXRlcmFscy4KLSAgICAgICAgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkKFZN
KiwgY29uc3QgY2hhciopOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1Jl
ZjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiwgY29uc3QgY2hhciopOwotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgU3RyaW5nIG1fc3RyaW5nOwotCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyVHlwZT4KLSAgICAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgdWludDMyX3QgdG9VSW50
MzJGcm9tQ2hhcmFjdGVycyhjb25zdCBDaGFyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoLCBib29sJiBvayk7Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSWRlbnRp
ZmllciYgYSwgY29uc3QgSWRlbnRpZmllciYgYikgeyByZXR1cm4gYS5tX3N0cmluZy5pbXBsKCkg
PT0gYi5tX3N0cmluZy5pbXBsKCk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
SWRlbnRpZmllciYgYSwgY29uc3QgTENoYXIqIGIpIHsgcmV0dXJuIGVxdWFsKGEubV9zdHJpbmcu
aW1wbCgpLCBiKTsgfQotCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgUGFz
c1JlZjxTdHJpbmdJbXBsPiBhZGQoVk0qLCBjb25zdCBUKiwgaW50IGxlbmd0aCk7Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGFkZDgoVk0qLCBjb25zdCBVQ2hhciosIGludCBs
ZW5ndGgpOwotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gQUxXQVlTX0lOTElORSBzdGF0
aWMgYm9vbCBjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVCk7Ci0KLSAgICAgICAgc3RhdGlj
IFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogcikK
LSAgICAgICAgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIGNoZWNrQ3VycmVudElkZW50
aWZpZXJUYWJsZShleGVjKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHItPmlzSWRlbnRpZmll
cigpKQotICAgICAgICAgICAgICAgIHJldHVybiAqcjsKLSAgICAgICAgICAgIHJldHVybiBhZGRT
bG93Q2FzZShleGVjLCByKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZjxTdHJp
bmdJbXBsPiBhZGQoVk0qIHZtLCBTdHJpbmdJbXBsKiByKQotICAgICAgICB7Ci0jaWZuZGVmIE5E
RUJVRwotICAgICAgICAgICAgY2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKHZtKTsKLSNlbmRp
ZgotICAgICAgICAgICAgaWYgKHItPmlzSWRlbnRpZmllcigpKQotICAgICAgICAgICAgICAgIHJl
dHVybiAqcjsKLSAgICAgICAgICAgIHJldHVybiBhZGRTbG93Q2FzZSh2bSwgcik7Ci0gICAgICAg
IH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBs
PiBhZGRTbG93Q2FzZShFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKiByKTsKLSAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkU2xvd0Nhc2UoVk0qLCBT
dHJpbmdJbXBsKiByKTsKLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBj
aGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoRXhlY1N0YXRlKik7Ci0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShWTSopOwot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZSA8PiBBTFdBWVNfSU5MSU5FIGJvb2wgSWRlbnRpZmllcjo6
Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKExDaGFyKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1heFNpbmdsZUNoYXJhY3RlclN0cmluZyA9PSAweGZmKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPD4gQUxXQVlTX0lOTElORSBib29sIElkZW50aWZpZXI6
OmNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhVQ2hhciBjKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZyk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IENoYXJCdWZmZXIgewotICAgICAgICBjb25zdCBU
KiBzOwotICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOwotICAgIH07Ci0gICAgCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IElkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNs
YXRvciB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENoYXJCdWZmZXI8VD4m
IGJ1ZikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0
ZUhhc2hBbmRNYXNrVG9wOEJpdHMoYnVmLnMsIGJ1Zi5sZW5ndGgpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBzdHIsIGNvbnN0IENo
YXJCdWZmZXI8VD4mIGJ1ZikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIElkZW50aWZp
ZXI6OmVxdWFsKHN0ciwgYnVmLnMsIGJ1Zi5sZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
c3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwgY29uc3QgQ2hhckJ1
ZmZlcjxUPiYgYnVmLCB1bnNpZ25lZCBoYXNoKQotICAgICAgICB7Ci0gICAgICAgICAgICBUKiBk
OwotICAgICAgICAgICAgU3RyaW5nSW1wbCYgciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQoYnVmLmxlbmd0aCwgZCkubGVha1JlZigpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSAhPSBidWYubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgZFtpXSA9IGJ1
Zi5zW2ldOwotICAgICAgICAgICAgci5zZXRIYXNoKGhhc2gpOwotICAgICAgICAgICAgbG9jYXRp
b24gPSAmcjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LSAgICBQYXNzUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSogdm0sIGNvbnN0IFQq
IHMsIGludCBsZW5ndGgpCi0gICAgewotICAgICAgICBpZiAobGVuZ3RoID09IDEpIHsKLSAgICAg
ICAgICAgIFQgYyA9IHNbMF07Ci0gICAgICAgICAgICBpZiAoY2FuVXNlU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKGMpKQotICAgICAgICAgICAgICAgIHJldHVybiBhZGQodm0sIHZtLT5zbWFsbFN0cmlu
Z3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGMpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gKlN0cmluZ0ltcGw6OmVtcHR5
KCk7Ci0gICAgICAgIENoYXJCdWZmZXI8VD4gYnVmID0geyBzLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obGVuZ3RoKSB9OwotICAgICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IGFk
ZFJlc3VsdCA9IHZtLT5pZGVudGlmaWVyVGFibGUtPmFkZDxDaGFyQnVmZmVyPFQ+LCBJZGVudGlm
aWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I8VD4+KGJ1Zik7Ci0gICAgICAgIAotICAgICAgICAvLyBJ
ZiB0aGUgc3RyaW5nIGlzIG5ld2x5LXRyYW5zbGF0ZWQsIHRoZW4gd2UgbmVlZCB0byBhZG9wdCBp
dC4KLSAgICAgICAgLy8gVGhlIGJvb2xlYW4gaW4gdGhlIHBhaXIgdGVsbHMgdXMgaWYgdGhhdCBp
cyBzby4KLSAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5pc05ld0VudHJ5ID8gYWRvcHRSZWYoKiph
ZGRSZXN1bHQuaXRlcmF0b3IpIDogKiphZGRSZXN1bHQuaXRlcmF0b3I7Ci0gICAgfQotCi0gICAg
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBJZGVudGlm
aWVyJiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKGEsIGIpOwot
ICAgIH0KLQotICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSWRlbnRpZmllciYgYSwg
Y29uc3QgSWRlbnRpZmllciYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiAhSWRlbnRpZmllcjo6
ZXF1YWwoYSwgYik7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJ
ZGVudGlmaWVyJiBhLCBjb25zdCBMQ2hhciogYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBJZGVu
dGlmaWVyOjplcXVhbChhLCBiKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IGNoYXIqIGIpCi0gICAgewotICAgICAgICByZXR1
cm4gSWRlbnRpZmllcjo6ZXF1YWwoYSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIp
KTsKLSAgICB9Ci0gICAgCi0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJZGVudGlm
aWVyJiBhLCBjb25zdCBMQ2hhciogYikKLSAgICB7Ci0gICAgICAgIHJldHVybiAhSWRlbnRpZmll
cjo6ZXF1YWwoYSwgYik7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBJZGVudGlmaWVyJiBhLCBjb25zdCBjaGFyKiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFJ
ZGVudGlmaWVyOjplcXVhbChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOwot
ICAgIH0KLSAgICAKLSAgICBpbmxpbmUgYm9vbCBJZGVudGlmaWVyOjplcXVhbChjb25zdCBTdHJp
bmdJbXBsKiByLCBjb25zdCBMQ2hhciogcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmVx
dWFsKHIsIHMpOwotICAgIH0KLQotICAgIGlubGluZSBib29sIElkZW50aWZpZXI6OmVxdWFsKGNv
bnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0IExDaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAg
ewotICAgICAgICByZXR1cm4gV1RGOjplcXVhbChyLCBzLCBsZW5ndGgpOwotICAgIH0KLQotICAg
IGlubGluZSBib29sIElkZW50aWZpZXI6OmVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0
IFVDaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICByZXR1cm4gV1RGOjpl
cXVhbChyLCBzLCBsZW5ndGgpOwotICAgIH0KLSAgICAKLSAgICBJZGVudGlmaWVyVGFibGUqIGNy
ZWF0ZUlkZW50aWZpZXJUYWJsZSgpOwotICAgIHZvaWQgZGVsZXRlSWRlbnRpZmllclRhYmxlKElk
ZW50aWZpZXJUYWJsZSopOwotCisvLyAgICBjbGFzcyBFeGVjU3RhdGU7CisvLworLy8gICAgY2xh
c3MgSWRlbnRpZmllciB7CisvLyAgICAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKKy8vICAg
IHB1YmxpYzoKKy8vICAgICAgICBJZGVudGlmaWVyKCkgeyB9CisvLyAgICAgICAgZW51bSBFbXB0
eUlkZW50aWZpZXJGbGFnIHsgRW1wdHlJZGVudGlmaWVyIH07CisvLyAgICAgICAgSWRlbnRpZmll
cihFbXB0eUlkZW50aWZpZXJGbGFnKSA6IG1fc3RyaW5nKFN0cmluZ0ltcGw6OmVtcHR5KCkpIHsg
fQorLy8KKy8vICAgICAgICAvLyBPbmx5IHRvIGJlIHVzZWQgd2l0aCBzdHJpbmcgbGl0ZXJhbHMu
CisvLyAgICAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgorLy8gICAgICAg
IElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hh
cmFjdGVyc0NvdW50XSkgOiBtX3N0cmluZyhhZGQoZXhlYywgY2hhcmFjdGVycykpIHsgfQorLy8g
ICAgICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KKy8vICAgICAgICBJZGVu
dGlmaWVyKFZNKiB2bSwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0p
IDogbV9zdHJpbmcoYWRkKHZtLCBjaGFyYWN0ZXJzKSkgeyB9CisvLworLy8gICAgICAgIElkZW50
aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmcoYWRkKGV4
ZWMsIHJlcCkpIHsgfQorLy8gICAgICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIHMpIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHMuaW1wbCgpKSkgeyB9CisvLworLy8g
ICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkgOiBt
X3N0cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgfQorLy8gICAgICAgIElkZW50aWZpZXIoVk0q
IHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxl
bmd0aCkpIHsgfQorLy8gICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBTdHJpbmdJbXBsKiByZXAp
IDogbV9zdHJpbmcoYWRkKHZtLCByZXApKSB7IH0gCisvLyAgICAgICAgSWRlbnRpZmllcihWTSog
dm0sIGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQodm0sIHMuaW1wbCgpKSkgeyB9Cisv
LworLy8gICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJp
bmc7IH0KKy8vICAgICAgICBTdHJpbmdJbXBsKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJp
bmcuaW1wbCgpOyB9CisvLyAgICAgICAgCisvLyAgICAgICAgY29uc3QgVUNoYXIqIGRlcHJlY2F0
ZWRDaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuZGVwcmVjYXRlZENoYXJhY3Rl
cnMoKTsgfQorLy8gICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5s
ZW5ndGgoKTsgfQorLy8gICAgICAgIAorLy8gICAgICAgIENTdHJpbmcgYXNjaWkoKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZy5hc2NpaSgpOyB9CisvLyAgICAgICAgQ1N0cmluZyB1dGY4KCkgY29u
c3QgeyByZXR1cm4gbV9zdHJpbmcudXRmOCgpOyB9CisvLyAgICAgICAgCisvLyAgICAgICAgc3Rh
dGljIElkZW50aWZpZXIgZnJvbShjb25zdCBQcml2YXRlTmFtZSYgbmFtZSkKKy8vICAgICAgICB7
CisvLyAgICAgICAgICAgIElkZW50aWZpZXIgcmVzdWx0OworLy8gICAgICAgICAgICByZXN1bHQu
bV9zdHJpbmcgPSBuYW1lLnVpZCgpOworLy8gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworLy8g
ICAgICAgIH0KKy8vCisvLyAgICAgICAgc3RhdGljIElkZW50aWZpZXIgY3JlYXRlTENoYXJGcm9t
VUNoYXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgeyByZXR1cm4gSWRlbnRp
Zmllcih2bSwgYWRkOCh2bSwgcywgbGVuZ3RoKSk7IH0KKy8vCisvLyAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIElkZW50aWZpZXIgZnJvbShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHkpOworLy8gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20o
RXhlY1N0YXRlKiBleGVjLCBpbnQgeSk7CisvLyAgICAgICAgc3RhdGljIElkZW50aWZpZXIgZnJv
bShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB5KTsKKy8vICAgICAgICBzdGF0aWMgSWRlbnRpZmll
ciBmcm9tKFZNKiwgdW5zaWduZWQgeSk7CisvLyAgICAgICAgc3RhdGljIElkZW50aWZpZXIgZnJv
bShWTSosIGludCB5KTsKKy8vICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNKiwgZG91
YmxlIHkpOworLy8KKy8vICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
aW5nLmlzTnVsbCgpOyB9CisvLyAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmcuaXNFbXB0eSgpOyB9CisvLyAgICAgICAgCisvLyAgICAgICAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgSWRlbnRpZmllciYpOworLy8gICAg
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IElkZW50
aWZpZXImKTsKKy8vCisvLyAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgTENoYXIqKTsKKy8vICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBjaGFyKik7CisvLyAgICAgICAgZnJpZW5kIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgTENoYXIqKTsKKy8vICAgICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBjaGFyKik7Cisv
LyAgICAKKy8vICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29u
c3QgTENoYXIqKTsKKy8vICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgU3Ry
aW5nSW1wbCphLCBjb25zdCBjaGFyKmIpIHsgcmV0dXJuIElkZW50aWZpZXJFcXVhbChhLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9OworLy8gICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7
CisvLyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IFVD
aGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKy8vICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiA6OmVxdWFsKGEs
IGIpOyB9CisvLworLy8gICAgICAgIC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmluZyBsaXRl
cmFscy4KKy8vICAgICAgICBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBhZGQoVk0qLCBjb25z
dCBjaGFyKik7CisvLyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWY8U3Ry
aW5nSW1wbD4gYWRkKEV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIqKTsKKy8vCisvLyAgICBwcml2YXRl
OgorLy8gICAgICAgIFN0cmluZyBtX3N0cmluZzsKKy8vCisvLyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJUeXBlPgorLy8gICAgICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIHVpbnQzMl90
IHRvVUludDMyRnJvbUNoYXJhY3RlcnMoY29uc3QgQ2hhclR5cGUqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCwgYm9vbCYgb2spOworLy8KKy8vICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBJZGVudGlmaWVyJiBiKSB7IHJldHVybiBhLm1fc3Ry
aW5nLmltcGwoKSA9PSBiLm1fc3RyaW5nLmltcGwoKTsgfQorLy8gICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiBlcXVh
bChhLm1fc3RyaW5nLmltcGwoKSwgYik7IH0KKy8vCisvLyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGFkZChWTSosIGNvbnN0IFQqLCBpbnQg
bGVuZ3RoKTsKKy8vICAgICAgICBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBhZGQ4KFZNKiwg
Y29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKKy8vICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmco
VCk7CisvLworLy8gICAgICAgIHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGFkZChFeGVjU3Rh
dGUqIGV4ZWMsIFN0cmluZ0ltcGwqIHIpCisvLyAgICAgICAgeworLy8jaWZuZGVmIE5ERUJVRwor
Ly8gICAgICAgICAgICBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoZXhlYyk7CisvLyNlbmRp
ZgorLy8gICAgICAgICAgICBpZiAoci0+aXNJZGVudGlmaWVyKCkpCisvLyAgICAgICAgICAgICAg
ICByZXR1cm4gKnI7CisvLyAgICAgICAgICAgIHJldHVybiBhZGRTbG93Q2FzZShleGVjLCByKTsK
Ky8vICAgICAgICB9CisvLyAgICAgICAgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkKFZN
KiB2bSwgU3RyaW5nSW1wbCogcikKKy8vICAgICAgICB7CisvLyNpZm5kZWYgTkRFQlVHCisvLyAg
ICAgICAgICAgIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZSh2bSk7CisvLyNlbmRpZgorLy8g
ICAgICAgICAgICBpZiAoci0+aXNJZGVudGlmaWVyKCkpCisvLyAgICAgICAgICAgICAgICByZXR1
cm4gKnI7CisvLyAgICAgICAgICAgIHJldHVybiBhZGRTbG93Q2FzZSh2bSwgcik7CisvLyAgICAg
ICAgfQorLy8KKy8vICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZjxTdHJp
bmdJbXBsPiBhZGRTbG93Q2FzZShFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKiByKTsKKy8vICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBhZGRTbG93Q2Fz
ZShWTSosIFN0cmluZ0ltcGwqIHIpOworLy8KKy8vICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoRXhlY1N0YXRlKik7CisvLyAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2hlY2tDdXJyZW50SWRlbnRpZmll
clRhYmxlKFZNKik7CisvLyAgICB9OworLy8KKy8vICAgIHRlbXBsYXRlIDw+IEFMV0FZU19JTkxJ
TkUgYm9vbCBJZGVudGlmaWVyOjpjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoTENoYXIpCisv
LyAgICB7CisvLyAgICAgICAgQVNTRVJUKG1heFNpbmdsZUNoYXJhY3RlclN0cmluZyA9PSAweGZm
KTsKKy8vICAgICAgICByZXR1cm4gdHJ1ZTsKKy8vICAgIH0KKy8vCisvLyAgICB0ZW1wbGF0ZSA8
PiBBTFdBWVNfSU5MSU5FIGJvb2wgSWRlbnRpZmllcjo6Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKFVDaGFyIGMpCisvLyAgICB7CisvLyAgICAgICAgcmV0dXJuIChjIDw9IG1heFNpbmdsZUNo
YXJhY3RlclN0cmluZyk7CisvLyAgICB9CisvLworLy8gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CisvLyAgICBzdHJ1Y3QgQ2hhckJ1ZmZlciB7CisvLyAgICAgICAgY29uc3QgVCogczsKKy8vICAg
ICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOworLy8gICAgfTsKKy8vICAgIAorLy8gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CisvLyAgICBzdHJ1Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xh
dG9yIHsKKy8vICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFyQnVmZmVyPFQ+
JiBidWYpCisvLyAgICAgICAgeworLy8gICAgICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpj
b21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhidWYucywgYnVmLmxlbmd0aCk7CisvLyAgICAgICAg
fQorLy8gICAgICAgIAorLy8gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwqIHN0
ciwgY29uc3QgQ2hhckJ1ZmZlcjxUPiYgYnVmKQorLy8gICAgICAgIHsKKy8vICAgICAgICAgICAg
cmV0dXJuIElkZW50aWZpZXJFcXVhbChzdHIsIGJ1Zi5zLCBidWYubGVuZ3RoKTsKKy8vICAgICAg
ICB9CisvLworLy8gICAgICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9j
YXRpb24sIGNvbnN0IENoYXJCdWZmZXI8VD4mIGJ1ZiwgdW5zaWduZWQgaGFzaCkKKy8vICAgICAg
ICB7CisvLyAgICAgICAgICAgIFQqIGQ7CisvLyAgICAgICAgICAgIFN0cmluZ0ltcGwmIHIgPSBT
dHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGJ1Zi5sZW5ndGgsIGQpLmxlYWtSZWYoKTsK
Ky8vICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBidWYubGVuZ3RoOyBpKysp
CisvLyAgICAgICAgICAgICAgICBkW2ldID0gYnVmLnNbaV07CisvLyAgICAgICAgICAgIHIuc2V0
SGFzaChoYXNoKTsKKy8vICAgICAgICAgICAgbG9jYXRpb24gPSAmcjsKKy8vICAgICAgICB9Cisv
LyAgICB9OworLy8KKy8vICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLy8gICAgUGFzc1JlZjxT
dHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoVk0qIHZtLCBjb25zdCBUKiBzLCBpbnQgbGVuZ3Ro
KQorLy8gICAgeworLy8gICAgICAgIGlmIChsZW5ndGggPT0gMSkgeworLy8gICAgICAgICAgICBU
IGMgPSBzWzBdOworLy8gICAgICAgICAgICBpZiAoY2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KGMpKQorLy8gICAgICAgICAgICAgICAgcmV0dXJuIGFkZCh2bSwgdm0tPnNtYWxsU3RyaW5ncy5z
aW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYykpOworLy8gICAgICAgIH0KKy8vICAgICAgICAKKy8v
ICAgICAgICBpZiAoIWxlbmd0aCkKKy8vICAgICAgICAgICAgcmV0dXJuICpTdHJpbmdJbXBsOjpl
bXB0eSgpOworLy8gICAgICAgIENoYXJCdWZmZXI8VD4gYnVmID0geyBzLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obGVuZ3RoKSB9OworLy8gICAgICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRS
ZXN1bHQgYWRkUmVzdWx0ID0gdm0tPmlkZW50aWZpZXJUYWJsZS0+YWRkPENoYXJCdWZmZXI8VD4s
IElkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxUPj4oYnVmKTsKKy8vICAgICAgICAKKy8v
ICAgICAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIG5ld2x5LXRyYW5zbGF0ZWQsIHRoZW4gd2UgbmVl
ZCB0byBhZG9wdCBpdC4KKy8vICAgICAgICAvLyBUaGUgYm9vbGVhbiBpbiB0aGUgcGFpciB0ZWxs
cyB1cyBpZiB0aGF0IGlzIHNvLgorLy8gICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXNOZXdFbnRy
eSA/IGFkb3B0UmVmKCoqYWRkUmVzdWx0Lml0ZXJhdG9yKSA6ICoqYWRkUmVzdWx0Lml0ZXJhdG9y
OworLy8gICAgfQorLy8KKy8vICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSWRlbnRp
ZmllciYgYSwgY29uc3QgSWRlbnRpZmllciYgYikKKy8vICAgIHsKKy8vICAgICAgICByZXR1cm4g
SWRlbnRpZmllckVxdWFsKGEsIGIpOworLy8gICAgfQorLy8KKy8vICAgIGlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgSWRlbnRpZmllciYgYikKKy8vICAg
IHsKKy8vICAgICAgICByZXR1cm4gIUlkZW50aWZpZXJFcXVhbChhLCBiKTsKKy8vICAgIH0KKy8v
CisvLyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0
IExDaGFyKiBiKQorLy8gICAgeworLy8gICAgICAgIHJldHVybiBJZGVudGlmaWVyRXF1YWwoYSwg
Yik7CisvLyAgICB9CisvLworLy8gICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVu
dGlmaWVyJiBhLCBjb25zdCBjaGFyKiBiKQorLy8gICAgeworLy8gICAgICAgIHJldHVybiBJZGVu
dGlmaWVyRXF1YWwoYSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIpKTsKKy8vICAg
IH0KKy8vICAgIAorLy8gICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJZGVudGlmaWVy
JiBhLCBjb25zdCBMQ2hhciogYikKKy8vICAgIHsKKy8vICAgICAgICByZXR1cm4gIUlkZW50aWZp
ZXJFcXVhbChhLCBiKTsKKy8vICAgIH0KKy8vCisvLyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IGNoYXIqIGIpCisvLyAgICB7CisvLyAgICAgICAg
cmV0dXJuICFJZGVudGlmaWVyRXF1YWwoYSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KGIpKTsKKy8vICAgIH0KKy8vICAgIAorLy8gICAgaW5saW5lIGJvb2wgSWRlbnRpZmllckVxdWFs
KGNvbnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0IExDaGFyKiBzKQorLy8gICAgeworLy8gICAgICAg
IHJldHVybiBXVEY6OmVxdWFsKHIsIHMpOworLy8gICAgfQorLy8KKy8vICAgIGlubGluZSBib29s
IElkZW50aWZpZXJFcXVhbChjb25zdCBTdHJpbmdJbXBsKiByLCBjb25zdCBMQ2hhciogcywgdW5z
aWduZWQgbGVuZ3RoKQorLy8gICAgeworLy8gICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHIsIHMs
IGxlbmd0aCk7CisvLyAgICB9CisvLworLy8gICAgaW5saW5lIGJvb2wgSWRlbnRpZmllckVxdWFs
KGNvbnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0IFVDaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgpCisv
LyAgICB7CisvLyAgICAgICAgcmV0dXJuIFdURjo6ZXF1YWwociwgcywgbGVuZ3RoKTsKKy8vICAg
IH0KKy8vICAgIAorLy8gICAgSWRlbnRpZmllclRhYmxlKiBjcmVhdGVJZGVudGlmaWVyVGFibGUo
KTsKKy8vICAgIHZvaWQgZGVsZXRlSWRlbnRpZmllclRhYmxlKElkZW50aWZpZXJUYWJsZSopOwor
Ly8KICAgICBzdHJ1Y3QgSWRlbnRpZmllclJlcEhhc2ggOiBQdHJIYXNoPFJlZlB0cjxTdHJpbmdJ
bXBsPj4gewogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8U3RyaW5n
SW1wbD4mIGtleSkgeyByZXR1cm4ga2V5LT5leGlzdGluZ0hhc2goKTsgfQogICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIGtleS0+ZXhpc3RpbmdI
YXNoKCk7IH0KQEAgLTI1NywxOSArMjU3LDU3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHR5cGVk
ZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIGludCwgSWRlbnRpZmllclJlcEhhc2gsIEhh
c2hUcmFpdHM8UmVmUHRyPFN0cmluZ0ltcGw+PiwgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0
cz4gSWRlbnRpZmllck1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCosIGludCwg
SWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8U3RyaW5nSW1wbCo+LCBJZGVudGlmaWVyTWFw
SW5kZXhIYXNoVHJhaXRzPiBCb3Jyb3dlZElkZW50aWZpZXJNYXA7CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1
bHQgSWRlbnRpZmllclRhYmxlOjphZGQoVSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEhhc2hTZXQ8
U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV90YWJsZS5hZGQ8Vj4odmFsdWUpOwot
ICAgICAgICAoKnJlc3VsdC5pdGVyYXRvciktPnNldElzSWRlbnRpZmllcih0cnVlKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisvLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPgorLy8gICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBJZGVudGlmaWVy
VGFibGU6OmFkZChVIHZhbHVlKQorLy8gICAgeworLy8gICAgICAgIEhhc2hTZXQ8U3RyaW5nSW1w
bCo+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV90YWJsZS5hZGQ8Vj4odmFsdWUpOworLy8gICAgICAg
ICgqcmVzdWx0Lml0ZXJhdG9yKS0+c2V0SXNJZGVudGlmaWVyKHRydWUpOworLy8gICAgICAgIHJl
dHVybiByZXN1bHQ7CisvLyAgICB9CisKKyAgICAgICAgaW5saW5lIEF0b21pY1N0cmluZyBNYWtl
SWRlbnRpZmllcigpIHsgcmV0dXJuIEF0b21pY1N0cmluZygpOyB9CisgICAgICAgIGVudW0gRW1w
dHlJZGVudGlmaWVyRmxhZyB7IEVtcHR5SWRlbnRpZmllciB9OworICAgICAgICBpbmxpbmUgQXRv
bWljU3RyaW5nIE1ha2VJZGVudGlmaWVyKEVtcHR5SWRlbnRpZmllckZsYWcpIHsgcmV0dXJuIEF0
b21pY1N0cmluZyhTdHJpbmdJbXBsOjplbXB0eSgpKTsgfQorCisgICAgICAgIC8vIE9ubHkgdG8g
YmUgdXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4KKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCBh
ZGQgY29uc3QgY2hhciBhcnJheSBjb25zdHJ1Y3RvcnMgdG8gQXRvbWljU3RyaW5nPworICAgICAg
ICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CisgICAgICAgIGlubGluZSBBdG9t
aWNTdHJpbmcgTWFrZUlkZW50aWZpZXIoRXhlY1N0YXRlKiwgY29uc3QgY2hhciAoJmNoYXJhY3Rl
cnMpW2NoYXJhY3RlcnNDb3VudF0pIHsgcmV0dXJuIEF0b21pY1N0cmluZygoY29uc3QgTENoYXIq
KWNoYXJhY3RlcnMsIGNoYXJhY3RlcnNDb3VudCk7IH0KKyAgICAgICAgdGVtcGxhdGU8dW5zaWdu
ZWQgY2hhcmFjdGVyc0NvdW50PgorICAgICAgICBpbmxpbmUgQXRvbWljU3RyaW5nIE1ha2VJZGVu
dGlmaWVyKFZNKiwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIHsg
cmV0dXJuIEF0b21pY1N0cmluZygoY29uc3QgTENoYXIqKWNoYXJhY3RlcnMsIGNoYXJhY3RlcnND
b3VudCk7IH0KKworICAgICAgICBpbmxpbmUgQXRvbWljU3RyaW5nIE1ha2VJZGVudGlmaWVyKEV4
ZWNTdGF0ZSosIFN0cmluZ0ltcGwqIHJlcCkgeyByZXR1cm4gQXRvbWljU3RyaW5nKHJlcCk7IH0K
KyAgICAgICAgaW5saW5lIEF0b21pY1N0cmluZyBNYWtlSWRlbnRpZmllcihFeGVjU3RhdGUqLCBj
b25zdCBTdHJpbmcmIHMpIHsgcmV0dXJuIEF0b21pY1N0cmluZyhzLmltcGwoKSk7IH0KKworICAg
ICAgICBpbmxpbmUgQXRvbWljU3RyaW5nIE1ha2VJZGVudGlmaWVyKFZNKiwgY29uc3QgTENoYXIq
IHMsIGludCBsZW5ndGgpIHsgcmV0dXJuIEF0b21pY1N0cmluZyhzLCBsZW5ndGgpOyB9CisgICAg
ICAgIGlubGluZSBBdG9taWNTdHJpbmcgTWFrZUlkZW50aWZpZXIoVk0qLCBjb25zdCBVQ2hhciog
cywgaW50IGxlbmd0aCkgeyByZXR1cm4gQXRvbWljU3RyaW5nKHMsIGxlbmd0aCk7IH0KKyAgICAg
ICAgaW5saW5lIEF0b21pY1N0cmluZyBNYWtlSWRlbnRpZmllcihWTSosIFN0cmluZ0ltcGwqIHJl
cCkgeyByZXR1cm4gQXRvbWljU3RyaW5nKHJlcCk7IH0KKyAgICAgICAgaW5saW5lIEF0b21pY1N0
cmluZyBNYWtlSWRlbnRpZmllcihWTSosIGNvbnN0IFN0cmluZyYgcykgeyByZXR1cm4gQXRvbWlj
U3RyaW5nKHMuaW1wbCgpKTsgfQorCisgICAgICAgIEF0b21pY1N0cmluZyBNYWtlSWRlbnRpZmll
ckxDaGFyRnJvbVVDaGFyKFZNKiwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpOworLy8gICAg
ICAgIC8vIEZJWE1FOiB0aGluayB0aGlzIGRvZXMgYWJvdXQgdGhlIHJpZ2h0IHRoaW5nIQorLy8g
ICAgICAgIGlubGluZSBBdG9taWNTdHJpbmcgTWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihW
TSosIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSB7IHJldHVybiBBdG9taWNTdHJpbmcoU3Ry
aW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUocywgbGVuZ3RoKSk7IH0KKworICAgICAgICBp
bmxpbmUgQXRvbWljU3RyaW5nIElkZW50aWZpZXJGcm9tKGNvbnN0IFByaXZhdGVOYW1lJiBuYW1l
KSB7IHJldHVybiBBdG9taWNTdHJpbmcobmFtZS51aWQoKSk7IH0KKyAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgQXRvbWljU3RyaW5nIElkZW50aWZpZXJGcm9tKEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgeSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEF0b21pY1N0cmluZyBJZGVudGlm
aWVyRnJvbShFeGVjU3RhdGUqIGV4ZWMsIGludCB5KTsKKyAgICAgICAgQXRvbWljU3RyaW5nIElk
ZW50aWZpZXJGcm9tKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHkpOworICAgICAgICBBdG9taWNT
dHJpbmcgSWRlbnRpZmllckZyb20oVk0qLCB1bnNpZ25lZCB5KTsKKyAgICAgICAgQXRvbWljU3Ry
aW5nIElkZW50aWZpZXJGcm9tKFZNKiwgaW50IHkpOworICAgICAgICBBdG9taWNTdHJpbmcgSWRl
bnRpZmllckZyb20oVk0qLCBkb3VibGUgeSk7CisKKyAgICAgICAgaW5saW5lIGJvb2wgSWRlbnRp
ZmllckVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiA6
OmVxdWFsKGEsIGIpOyB9CisgICAgICAgIGlubGluZSBib29sIElkZW50aWZpZXJFcXVhbChjb25z
dCBTdHJpbmdJbXBsKiBhLCBjb25zdCBMQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVy
biA6OmVxdWFsKGEsIGIsIGxlbmd0aCk7IH0KKyAgICAgICAgaW5saW5lIGJvb2wgSWRlbnRpZmll
ckVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFVDaGFyKiBiLCB1bnNpZ25lZCBsZW5n
dGgpIHsgcmV0dXJuIDo6ZXF1YWwoYSwgYiwgbGVuZ3RoKTsgfQorICAgICAgICBpbmxpbmUgYm9v
bCBJZGVudGlmaWVyRXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3RyaW5nSW1wbCog
YikgeyByZXR1cm4gOjplcXVhbChhLCBiKTsgfQorCisgICAgICAgIGlubGluZSBib29sIElkZW50
aWZpZXJFcXVhbChjb25zdCBTdHJpbmdJbXBsKmEsIGNvbnN0IGNoYXIqYikgeyByZXR1cm4gSWRl
bnRpZmllckVxdWFsKGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSk7IH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKIAotdGVtcGxhdGUgPD4gc3Ry
dWN0IFZlY3RvclRyYWl0czxKU0M6OklkZW50aWZpZXI+IDogU2ltcGxlQ2xhc3NWZWN0b3JUcmFp
dHMgeyB9OworLy90ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPEpTQzo6SWRlbnRpZmll
cj4gOiBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5j
cHAJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIEpT
QWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlzVmFsaWQoaXQtPnZhbHVlKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXIoZXhlYywgaXQtPmtleS5nZXQoKSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoTWFrZUlkZW50aWZpZXIoZXhlYywgaXQtPmtleS5nZXQoKSkpOwogICAgICAgICB9CiAg
ICAgfQogICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2Yg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
Myw3ICsxNzMsNyBAQCB2b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVjCiB7
CiAgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdCgqdGhpcywgc2hvdWxkVGhyb3cpOwotICAgICAgICBwdXRUb1ByaW1p
dGl2ZShleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBz
bG90KTsKKyAgICAgICAgcHV0VG9QcmltaXRpdmUoZXhlYywgSWRlbnRpZmllckZyb20oZXhlYywg
cHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lv
biAxNjM4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgSlNDZWxsOjpwdXRCeUluZGV4KEpT
Q2VsbCogY2VsbCwgRXgKIHsKICAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkgewogICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChjZWxsLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEpTVmFsdWUo
Y2VsbCkucHV0VG9QcmltaXRpdmUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpZGVudGlm
aWVyKSwgdmFsdWUsIHNsb3QpOworICAgICAgICBKU1ZhbHVlKGNlbGwpLnB1dFRvUHJpbWl0aXZl
KGV4ZWMsIElkZW50aWZpZXJGcm9tKGV4ZWMsIGlkZW50aWZpZXIpLCB2YWx1ZSwgc2xvdCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBjZWxsLT50
b09iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMTYz
ODIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpT
Q2VsbDo6ZmFzdEdldE93bgogewogICAgIGlmICghc3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzKCkpIHsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmFtZS5p
bXBsKCktPmhhc0hhc2goKQotICAgICAgICAgICAgPyBzdHJ1Y3R1cmUoKS0+Z2V0KHZtLCBJZGVu
dGlmaWVyKCZ2bSwgbmFtZSkpCisgICAgICAgICAgICA/IHN0cnVjdHVyZSgpLT5nZXQodm0sIE1h
a2VJZGVudGlmaWVyKCZ2bSwgbmFtZSkpCiAgICAgICAgICAgICA6IHN0cnVjdHVyZSgpLT5nZXQo
dm0sIG5hbWUpOwogICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpCiAgICAgICAg
ICAgICByZXR1cm4gYXNPYmplY3QodGhpcyktPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPmdl
dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDE2MzgyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYsNyArMzY2LDcgQEAgYm9vbCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZwogICAgIAogICAgIGlmIChwcm9wZXJ0eU5hbWUg
PiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldE93blByb3BlcnR5U2xvdCgKLSAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMs
IElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgICAgICAg
ICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyRnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBz
bG90KTsKICAgICB9CiAgICAgCiAgICAgaWYgKCF0aGlzT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNr
bHkocHJvcGVydHlOYW1lKSkKQEAgLTM4NSw3ICszODUsNyBAQCB2b2lkIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpwCiAgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9J
TkRFWCkgewogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChKU1ZhbHVlKHRoaXNPYmplY3Qp
LCBzaG91bGRUaHJvdyk7CiAgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCgK
LSAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJv
cGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAgICAgICAgdGhpc09iamVjdCwgZXhlYywg
SWRlbnRpZmllckZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNDA0LDcgKzQwNCw3IEBAIGJvb2wgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmQKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID4gTUFY
X0FSUkFZX0lOREVYKSB7CiAgICAgICAgIHJldHVybiBjZWxsLT5tZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eSgKLSAgICAgICAgICAgIGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICBjZWxsLCBleGVjLCBJZGVudGlmaWVyRnJv
bShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNDI5LDcgKzQyOSw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmcKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbGVuZ3RoOyArK2kpCi0gICAgICAgIGFycmF5LmFkZChJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXJG
cm9tKGV4ZWMsIGkpKTsKICAgICAKICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE2MzgyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMzLDcgKzQzMyw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0
KEpTVmFsdWUgcHJvdG8KIAogICAgIGZvciAodW5zaWduZWQgdHlwZWRBcnJheUluZGV4ID0gTlVN
QkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTOyB0eXBlZEFycmF5SW5kZXgtLTspIHsKICAgICAgICAg
bV90eXBlZEFycmF5c1t0eXBlZEFycmF5SW5kZXhdLnByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCB0eXBlZEFycmF5
Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0sIERvbnRFbnVtKTsKLSAgICAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXIoZXhlYywgdHlwZWRBcnJheUNvbnN0
cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLT5uYW1lKGV4ZWMpKSwgdHlwZWRBcnJheUNvbnN0cnVj
dG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250RW51bSk7CisgICAgICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCBNYWtlSWRlbnRpZmllcihleGVjLCB0eXBlZEFycmF5Q29uc3RydWN0
b3JzW3R5cGVkQXJyYXlJbmRleF0tPm5hbWUoZXhlYykpLCB0eXBlZEFycmF5Q29uc3RydWN0b3Jz
W3R5cGVkQXJyYXlJbmRleF0sIERvbnRFbnVtKTsKICAgICB9CiAKICAgICBHbG9iYWxQcm9wZXJ0
eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KIAogICAgICAgICBKU0NlbGwqIHByaXZhdGVO
YW1lQ29uc3RydWN0b3IgPSBOYW1lQ29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgTmFtZUNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
LCBwcml2YXRlTmFtZVByb3RvdHlwZSk7CiAgICAgICAgIHByaXZhdGVOYW1lUHJvdG90eXBlLT5w
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0
b3IsIHByaXZhdGVOYW1lQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICAgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXIoZXhlYywgIk5hbWUiKSwgcHJpdmF0ZU5h
bWVDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgTWFrZUlkZW50aWZpZXIoZXhlYywgIk5hbWUiKSwgcHJpdmF0ZU5hbWVDb25zdHJ1
Y3RvciwgRG9udEVudW0pOwogICAgIH0KIAogICAgIHJlc2V0UHJvdG90eXBlKHZtLCBwcm90b3R5
cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5j
cHAJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNyArMjI4LDcgQEAgU3RyaW5naWZp
ZXI6OlN0cmluZ2lmaWVyKEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSkpOworICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5hZGQoTWFr
ZUlkZW50aWZpZXIoZXhlYywgbmFtZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQs
NyArMjc0LDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAg
IC8vIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoKS4KICAgICAKICAgICBpZiAoaSA+IE1BWF9B
UlJBWV9JTkRFWCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGkpLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyRnJvbShleGVjLCBp
KSwgc2xvdCk7CiAgICAgCiAgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKQEAgLTQx
OCw3ICs0MTgsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAg
ICAgCiAgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChjZWxsLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9t
KGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXJGcm9tKGV4ZWMs
IHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKQEAgLTEyOTIsNyArMTI5Miw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0MKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNl
bGwpOwogICAgIAogICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAgICByZXR1cm4g
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlm
aWVyRnJvbShleGVjLCBpKSk7CiAgICAgCiAgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzoKQEAgLTE0OTAsNyArMTQ5MCw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmoKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMZW5ndGg7ICsr
aSkgewogICAgICAgICAgICAgaWYgKCFidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllckZyb20oZXhlYywgaSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTE1MDIsNyArMTUwMiw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmoKICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldOwogICAgICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpKSk7CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
RnJvbShleGVjLCBpKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTUx
Myw3ICsxNTEzLDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagog
ICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVu
Z3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldKQotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXJGcm9tKGV4ZWMsIGkpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
aWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgp
KSB7CkBAIC0xNTI4LDcgKzE1MjgsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0ZDo6c29ydChrZXlzLmJlZ2lu
KCksIGtleXMuZW5kKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllckZyb20oZXhlYywga2V5c1tpXSkpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTE2MTksNyArMTYxOSw3IEBAIHZvaWQgSlNPYmplY3Q6OnJlaWZ5
U3RhdGljRnVuY3Rpb25zRm9yRGUKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CiAg
ICAgICAgIGZvciAoSGFzaFRhYmxlOjpDb25zdEl0ZXJhdG9yIGl0ZXIgPSBoYXNoVGFibGUtPmJl
Z2luKHZtKTsgaXRlciAhPSBoYXNoVGFibGUtPmVuZCh2bSk7ICsraXRlcikgewogICAgICAgICAg
ICAgaWYgKGl0ZXItPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKQotICAgICAgICAgICAgICAgIHNl
dFVwU3RhdGljRnVuY3Rpb25TbG90KGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksICppdGVy
LCB0aGlzLCBJZGVudGlmaWVyKCZ2bSwgaXRlci0+a2V5KCkpLCBzbG90KTsKKyAgICAgICAgICAg
ICAgICBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
LCAqaXRlciwgdGhpcywgTWFrZUlkZW50aWZpZXIoJnZtLCBpdGVyLT5rZXkoKSksIHNsb3QpOwog
ICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MTYsNyArMTUxNiw3IEBAIENPTVBJ
TEVfQVNTRVJUKCEoc2l6ZW9mKEpTT2JqZWN0KSAlIHNpemUKIAogQUxXQVlTX0lOTElORSBJZGVu
dGlmaWVyIG1ha2VJZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBy
ZXR1cm4gSWRlbnRpZmllcigmdm0sIG5hbWUpOworICAgIHJldHVybiBNYWtlSWRlbnRpZmllcigm
dm0sIG5hbWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIElkZW50aWZpZXIgbWFrZUlkZW50aWZpZXIo
Vk0mLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQpAQCAtMTU1Nyw3ICsxNTU3LDcgQEAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Z2V0VgogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZGVjb2RlKG1fZGF0YS5jdXN0b21JbmRleC5nZXRJbmRleFZhbHVlKGV4ZWMsIHNsb3RCYXNl
KCksIEpTVmFsdWU6OmVuY29kZShtX3RoaXNWYWx1ZSksIG1fZGF0YS5jdXN0b21JbmRleC5pbmRl
eCkpOwogICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBUeXBlR2V0dGVyKQogICAgICAgICByZXR1
cm4gZnVuY3Rpb25HZXR0ZXIoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShtX2Rh
dGEuY3VzdG9tLmdldFZhbHVlKGV4ZWMsIHNsb3RCYXNlKCksIEpTVmFsdWU6OmVuY29kZShtX3Ro
aXNWYWx1ZSksIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjpkZWNvZGUobV9kYXRhLmN1c3RvbS5nZXRWYWx1ZShleGVjLCBzbG90QmFz
ZSgpLCBKU1ZhbHVlOjplbmNvZGUobV90aGlzVmFsdWUpLCBJZGVudGlmaWVyRnJvbShleGVjLCBw
cm9wZXJ0eU5hbWUpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3
IEBAIEpTVmFsdWUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Z2V0KEV4ZWMKICAgICBpZiAobV9j
YWNoZWRTdHJ1Y3R1cmUuZ2V0KCkgPT0gYmFzZS0+c3RydWN0dXJlKCkgJiYgbV9jYWNoZWRQcm90
b3R5cGVDaGFpbi5nZXQoKSA9PSBiYXNlLT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW4oZXhl
YykpCiAgICAgICAgIHJldHVybiBpZGVudGlmaWVyOwogCi0gICAgaWYgKCFiYXNlLT5oYXNQcm9w
ZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGFzU3RyaW5nKGlkZW50aWZpZXIpLT52YWx1ZShl
eGVjKSkpKQorICAgIGlmICghYmFzZS0+aGFzUHJvcGVydHkoZXhlYywgTWFrZUlkZW50aWZpZXIo
ZXhlYywgYXNTdHJpbmcoaWRlbnRpZmllciktPnZhbHVlKGV4ZWMpKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5o
CShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBJZGVudGlmaWVyOwogICAgIGNsYXNzIEpTT2Jq
ZWN0OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQg
SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXgKICAgICAgICAgU3ltYm9sVGFibGU6
Ok1hcDo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKGxvY2tl
cik7CiAgICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0aGlzT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgICAgIGlmICghKGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwg
KG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpCi0gICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5LmdldCgpKSk7CisgICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoTWFrZUlkZW50aWZpZXIoZXhlYywgaXQtPmtleS5n
ZXQoKSkpOwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHJldmlzaW9uIDE2MzgyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NywxNyArNTcsMTcgQEAgYm9vbCBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6
dHJ5SlNPTlBQYQogICAgIGRvIHsKICAgICAgICAgVmVjdG9yPEpTT05QUGF0aEVudHJ5PiBwYXRo
OwogICAgICAgICAvLyBVbmd1YXJkZWQgbmV4dCB0byBzdGFydCBvZmYgdGhlIGxleGVyCi0gICAg
ICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50aWZpZXIoJm1fZXhlYy0+dm0oKSwgbV9sZXhlci5j
dXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKKyAgICAgICAgSWRlbnRpZmllciBuYW1lID0gTWFrZUlk
ZW50aWZpZXIoJm1fZXhlYy0+dm0oKSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCwgbV9s
ZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsK
ICAgICAgICAgSlNPTlBQYXRoRW50cnkgZW50cnk7CiAgICAgICAgIGlmIChuYW1lID09IG1fZXhl
Yy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT52YXJLZXl3b3JkKSB7CiAgICAgICAgICAgICBpZiAobV9s
ZXhlci5uZXh0KCkgIT0gVG9rSWRlbnRpZmllcikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICBlbnRyeS5tX3R5cGUgPSBKU09OUFBhdGhFbnRyeVR5cGVEZWNsYXJl
OwotICAgICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcigmbV9leGVj
LT52bSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tl
bigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOworICAgICAgICAgICAgZW50
cnkubV9wYXRoRW50cnlOYW1lID0gTWFrZUlkZW50aWZpZXIoJm1fZXhlYy0+dm0oKSwgbV9sZXhl
ci5jdXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xl
eGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKICAgICAgICAgICAgIHBhdGguYXBwZW5kKGVudHJ5
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVudHJ5Lm1fdHlwZSA9IEpTT05QUGF0
aEVudHJ5VHlwZURvdDsKLSAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50
aWZpZXIoJm1fZXhlYy0+dm0oKSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhl
ci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKKyAg
ICAgICAgICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IE1ha2VJZGVudGlmaWVyKCZtX2V4ZWMt
PnZtKCksIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2Vu
KCkuZW5kIC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCk7CiAgICAgICAgICAgICBwYXRo
LmFwcGVuZChlbnRyeSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZXhlYy0+dm0oKS5rZXl3
b3Jkcy0+aXNLZXl3b3JkKGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSkpCkBAIC05NCw3ICs5NCw3IEBA
IGJvb2wgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnRyeUpTT05QUGEKICAgICAgICAgICAgICAg
ICBlbnRyeS5tX3R5cGUgPSBKU09OUFBhdGhFbnRyeVR5cGVEb3Q7CiAgICAgICAgICAgICAgICAg
aWYgKG1fbGV4ZXIubmV4dCgpICE9IFRva0lkZW50aWZpZXIpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUgPSBJ
ZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCksIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQsIG1f
bGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCk7
CisgICAgICAgICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gTWFrZUlkZW50aWZpZXIo
Jm1fZXhlYy0+dm0oKSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5jdXJy
ZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgVG9rTFBhcmVu
OiB7CkBAIC0xMzUsMTcgKzEzNSwxNyBAQCBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIg
TGl0ZXJhbFBhCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBtX2V4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyOwogICAgIGlmIChjaGFyYWN0ZXJzWzBdID49
IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlcikKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXIoJm1f
ZXhlYy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIE1ha2VJZGVu
dGlmaWVyKCZtX2V4ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAKICAgICBpZiAobGVu
Z3RoID09IDEpIHsKICAgICAgICAgaWYgKCFtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1sw
XV0uaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gbV9zaG9ydElkZW50aWZpZXJzW2NoYXJh
Y3RlcnNbMF1dOwotICAgICAgICBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJ
ZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIG1f
c2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IE1ha2VJZGVudGlmaWVyKCZtX2V4ZWMt
PnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRp
ZmllcnNbY2hhcmFjdGVyc1swXV07CiAgICAgfQotICAgIGlmICghbV9yZWNlbnRJZGVudGlmaWVy
c1tjaGFyYWN0ZXJzWzBdXS5pc051bGwoKSAmJiBJZGVudGlmaWVyOjplcXVhbChtX3JlY2VudElk
ZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dLmltcGwoKSwgY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAg
ICBpZiAoIW1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaXNOdWxsKCkgJiYgSWRl
bnRpZmllckVxdWFsKG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaW1wbCgpLCBj
aGFyYWN0ZXJzLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tj
aGFyYWN0ZXJzWzBdXTsKLSAgICBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0g
SWRlbnRpZmllcigmbV9leGVjLT52bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIG1fcmVj
ZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBNYWtlSWRlbnRpZmllcigmbV9leGVjLT52
bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgIHJldHVybiBtX3JlY2VudElkZW50aWZpZXJz
W2NoYXJhY3RlcnNbMF1dOwogfQogCkBAIC0xNTUsMTcgKzE1NSwxNyBAQCBBTFdBWVNfSU5MSU5F
IGNvbnN0IElkZW50aWZpZXIgTGl0ZXJhbFBhCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJl
dHVybiBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyOwogICAgIGlm
IChjaGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlcikKLSAgICAgICAgcmV0
dXJuIElkZW50aWZpZXIoJm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAg
ICAgcmV0dXJuIE1ha2VJZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0
aCk7CiAKICAgICBpZiAobGVuZ3RoID09IDEpIHsKICAgICAgICAgaWYgKCFtX3Nob3J0SWRlbnRp
ZmllcnNbY2hhcmFjdGVyc1swXV0uaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gbV9zaG9y
dElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwotICAgICAgICBtX3Nob3J0SWRlbnRpZmllcnNb
Y2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxl
bmd0aCk7CisgICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IE1ha2VJ
ZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgICAgIHJl
dHVybiBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07CiAgICAgfQotICAgIGlmICgh
bV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXS5pc051bGwoKSAmJiBJZGVudGlmaWVy
OjplcXVhbChtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dLmltcGwoKSwgY2hhcmFj
dGVycywgbGVuZ3RoKSkKKyAgICBpZiAoIW1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1sw
XV0uaXNOdWxsKCkgJiYgSWRlbnRpZmllckVxdWFsKG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFj
dGVyc1swXV0uaW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gbV9y
ZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKLSAgICBtX3JlY2VudElkZW50aWZpZXJz
W2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcigmbV9leGVjLT52bSgpLCBjaGFyYWN0ZXJzLCBs
ZW5ndGgpOworICAgIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBNYWtlSWRl
bnRpZmllcigmbV9leGVjLT52bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgIHJldHVybiBt
X3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDggKzM0LDkgQEAgdm9pZCBIYXNoVGFibGU6OmNyZWF0ZVRhYmxlKFZNJiB2bSkgY29ucwogICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY29tcGFjdFNpemU7ICsraSkKICAgICAgICAgZW50cmllc1tp
XS5zZXRLZXkoMCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IHZhbHVlc1tpXS5rZXk7ICsraSkgewot
ICAgICAgICBTdHJpbmdJbXBsJiBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6YWRkKCZ2bSwgdmFs
dWVzW2ldLmtleSkubGVha1JlZigpOwotICAgICAgICBpbnQgaGFzaEluZGV4ID0gaWRlbnRpZmll
ci5leGlzdGluZ0hhc2goKSAmIGNvbXBhY3RIYXNoU2l6ZU1hc2s7CisgICAgICAgIElkZW50aWZp
ZXIgaWRlbnRpZmllcigmdm0sIHZhbHVlc1tpXS5rZXkpOworCisgICAgICAgIGludCBoYXNoSW5k
ZXggPSBpZGVudGlmaWVyLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgJiBjb21wYWN0SGFzaFNpemVN
YXNrOwogICAgICAgICBIYXNoRW50cnkqIGVudHJ5ID0gJmVudHJpZXNbaGFzaEluZGV4XTsKIAog
ICAgICAgICBpZiAoZW50cnktPmtleSgpKSB7CkBAIC00Nyw3ICs0OCw4IEBAIHZvaWQgSGFzaFRh
YmxlOjpjcmVhdGVUYWJsZShWTSYgdm0pIGNvbnMKICAgICAgICAgICAgIGVudHJ5ID0gZW50cnkt
Pm5leHQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGVudHJ5LT5pbml0aWFsaXplKCZpZGVudGlm
aWVyLCB2YWx1ZXNbaV0uYXR0cmlidXRlcywgdmFsdWVzW2ldLnZhbHVlMSwgdmFsdWVzW2ldLnZh
bHVlMiwgdmFsdWVzW2ldLmludHJpbnNpYyk7CisgICAgICAgIGlkZW50aWZpZXIuaW1wbCgpLT5y
ZWYoKTsKKyAgICAgICAgZW50cnktPmluaXRpYWxpemUoaWRlbnRpZmllci5pbXBsKCksIHZhbHVl
c1tpXS5hdHRyaWJ1dGVzLCB2YWx1ZXNbaV0udmFsdWUxLCB2YWx1ZXNbaV0udmFsdWUyLCB2YWx1
ZXNbaV0uaW50cmluc2ljKTsKICAgICB9CiAgICAgdGFibGUgPSBlbnRyaWVzOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHJldmlzaW9u
IDE2MzgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Myw0NyArODMsNDcgQEAgdm9pZCBNYXRoT2JqZWN0OjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIAogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBB
U1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgSWRlbnRpZmllcigmdm0sICJFIiksIGpzTnVtYmVyKGV4cCgxLjApKSwgRG9udERlbGV0
ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCBJZGVudGlmaWVyKCZ2bSwgIkxOMiIpLCBqc051bWJlcihsb2coMi4wKSksIERvbnREZWxl
dGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgSWRlbnRpZmllcigmdm0sICJMTjEwIiksIGpzTnVtYmVyKGxvZygxMC4wKSksIERvbnRE
ZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgSWRlbnRpZmllcigmdm0sICJMT0cyRSIpLCBqc051bWJlcigxLjAgLyBsb2coMi4w
KSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcigmdm0sICJMT0cxMEUiKSwganNOdW1iZXIoMC40
MzQyOTQ0ODE5MDMyNTE4KSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwotICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyKCZ2bSwgIlBJIiksIGpz
TnVtYmVyKHBpRG91YmxlKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwotICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyKCZ2bSwgIlNRUlQxXzIi
KSwganNOdW1iZXIoc3FydCgwLjUpKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkp
OwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyKCZ2bSwgIlNR
UlQyIiksIGpzTnVtYmVyKHNxcnQoMi4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRP
bmx5KTsKLQotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0s
IGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcigmdm0sICJhYnMiKSwgMSwgbWF0aFByb3RvRnVuY0Fi
cywgQWJzSW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKLSAgICBwdXREaXJlY3ROYXRp
dmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXIo
JnZtLCAiYWNvcyIpLCAxLCBtYXRoUHJvdG9GdW5jQUNvcywgTm9JbnRyaW5zaWMsIERvbnRFbnVt
IHwgRnVuY3Rpb24pOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcigmdm0sICJhc2luIiksIDEsIG1hdGhQcm90
b0Z1bmNBU2luLCBOb0ludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7Ci0gICAgcHV0RGly
ZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVu
dGlmaWVyKCZ2bSwgImF0YW4iKSwgMSwgbWF0aFByb3RvRnVuY0FUYW4sIE5vSW50cmluc2ljLCBE
b250RW51bSB8IEZ1bmN0aW9uKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXIoJnZtLCAiYWNvc2giKSwgMSwg
bWF0aFByb3RvRnVuY0FDb3NoLCBOb0ludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7Ci0g
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyKCZ2bSwgImFzaW5oIiksIDEsIG1hdGhQcm90b0Z1bmNBU2luaCwgTm9J
bnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rpb24pOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcigmdm0sICJh
dGFuaCIpLCAxLCBtYXRoUHJvdG9GdW5jQVRhbmgsIE5vSW50cmluc2ljLCBEb250RW51bSB8IEZ1
bmN0aW9uKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXIoJnZtLCAiYXRhbjIiKSwgMiwgbWF0aFByb3RvRnVu
Y0FUYW4yLCBOb0ludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7Ci0gICAgcHV0RGlyZWN0
TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlm
aWVyKCZ2bSwgImNicnQiKSwgMSwgbWF0aFByb3RvRnVuY0NicnQsIE5vSW50cmluc2ljLCBEb250
RW51bSB8IEZ1bmN0aW9uKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFu
c2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXIoJnZtLCAiY2VpbCIpLCAxLCBtYXRo
UHJvdG9GdW5jQ2VpbCwgQ2VpbEludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7Ci0gICAg
cHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0
LCBJZGVudGlmaWVyKCZ2bSwgImNvcyIpLCAxLCBtYXRoUHJvdG9GdW5jQ29zLCBDb3NJbnRyaW5z
aWMsIERvbnRFbnVtIHwgRnVuY3Rpb24pOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0
aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcigmdm0sICJjb3NoIiks
IDEsIG1hdGhQcm90b0Z1bmNDb3NoLCBOb0ludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7
Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyKCZ2bSwgImV4cCIpLCAxLCBtYXRoUHJvdG9GdW5jRXhwLCBFeHBJ
bnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rpb24pOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcigmdm0sICJl
eHBtMSIpLCAxLCBtYXRoUHJvdG9GdW5jRXhwbTEsIE5vSW50cmluc2ljLCBEb250RW51bSB8IEZ1
bmN0aW9uKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXIoJnZtLCAiZmxvb3IiKSwgMSwgbWF0aFByb3RvRnVu
Y0Zsb29yLCBGbG9vckludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7Ci0gICAgcHV0RGly
ZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVu
dGlmaWVyKCZ2bSwgImZyb3VuZCIpLCAxLCBtYXRoUHJvdG9GdW5jRnJvdW5kLCBOb0ludHJpbnNp
YywgRG9udEVudW0gfCBGdW5jdGlvbik7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRo
b3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyKCZ2bSwgImxvZyIpLCAx
LCBtYXRoUHJvdG9GdW5jTG9nLCBMb2dJbnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rpb24pOwot
ICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcigmdm0sICJsb2cxMCIpLCAxLCBtYXRoUHJvdG9GdW5jTG9nMTAsIE5v
SW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5j
dGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXIoJnZtLCAi
bG9nMXAiKSwgMSwgbWF0aFByb3RvRnVuY0xvZzFwLCBOb0ludHJpbnNpYywgRG9udEVudW0gfCBG
dW5jdGlvbik7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyKCZ2bSwgImxvZzIiKSwgMSwgbWF0aFByb3RvRnVu
Y0xvZzIsIE5vSW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKLSAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZp
ZXIoJnZtLCAibWF4IiksIDIsIG1hdGhQcm90b0Z1bmNNYXgsIE1heEludHJpbnNpYywgRG9udEVu
dW0gfCBGdW5jdGlvbik7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNp
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyKCZ2bSwgIm1pbiIpLCAyLCBtYXRoUHJv
dG9GdW5jTWluLCBNaW5JbnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rpb24pOwotICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcigmdm0sICJwb3ciKSwgMiwgbWF0aFByb3RvRnVuY1BvdywgUG93SW50cmluc2ljLCBE
b250RW51bSB8IEZ1bmN0aW9uKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXIoJnZtLCAicmFuZG9tIiksIDAs
IG1hdGhQcm90b0Z1bmNSYW5kb20sIE5vSW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsK
LSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIElkZW50aWZpZXIoJnZtLCAicm91bmQiKSwgMSwgbWF0aFByb3RvRnVuY1JvdW5kLCBS
b3VuZEludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7Ci0gICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyKCZ2
bSwgInNpbiIpLCAxLCBtYXRoUHJvdG9GdW5jU2luLCBTaW5JbnRyaW5zaWMsIERvbnRFbnVtIHwg
RnVuY3Rpb24pOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24o
dm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcigmdm0sICJzaW5oIiksIDEsIG1hdGhQcm90b0Z1
bmNTaW5oLCBOb0ludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7Ci0gICAgcHV0RGlyZWN0
TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlm
aWVyKCZ2bSwgInNxcnQiKSwgMSwgbWF0aFByb3RvRnVuY1NxcnQsIFNxcnRJbnRyaW5zaWMsIERv
bnRFbnVtIHwgRnVuY3Rpb24pOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRy
YW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcigmdm0sICJ0YW4iKSwgMSwgbWF0
aFByb3RvRnVuY1RhbiwgTm9JbnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rpb24pOwotICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcigmdm0sICJ0YW5oIiksIDEsIG1hdGhQcm90b0Z1bmNUYW5oLCBOb0ludHJpbnNp
YywgRG9udEVudW0gfCBGdW5jdGlvbik7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRo
b3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyKCZ2bSwgInRydW5jIiks
IDEsIG1hdGhQcm90b0Z1bmNUcnVuYywgTm9JbnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rpb24p
OwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2Jh
bE9iamVjdCwgSWRlbnRpZmllcigmdm0sICJpbXVsIiksIDEsIG1hdGhQcm90b0Z1bmNJTXVsLCBJ
TXVsSW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgTWFrZUlkZW50aWZpZXIoJnZtLCAiRSIpLCBqc051bWJlcihleHAoMS4w
KSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgTWFrZUlkZW50aWZpZXIoJnZtLCAiTE4yIiksIGpzTnVtYmVyKGxv
ZygyLjApKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBNYWtlSWRlbnRpZmllcigmdm0sICJMTjEwIiksIGpzTnVt
YmVyKGxvZygxMC4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgTWFrZUlkZW50aWZpZXIoJnZtLCAiTE9HMkUi
KSwganNOdW1iZXIoMS4wIC8gbG9nKDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFk
T25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIE1ha2VJZGVudGlmaWVy
KCZ2bSwgIkxPRzEwRSIpLCBqc051bWJlcigwLjQzNDI5NDQ4MTkwMzI1MTgpLCBEb250RGVsZXRl
IHwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIE1ha2VJZGVudGlmaWVyKCZ2bSwgIlBJIiksIGpzTnVtYmVyKHBpRG91YmxlKSwgRG9udERl
bGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCBNYWtlSWRlbnRpZmllcigmdm0sICJTUVJUMV8yIiksIGpzTnVtYmVyKHNxcnQoMC41
KSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgTWFrZUlkZW50aWZpZXIoJnZtLCAiU1FSVDIiKSwganNOdW1iZXIo
c3FydCgyLjApKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOworCisgICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBN
YWtlSWRlbnRpZmllcigmdm0sICJhYnMiKSwgMSwgbWF0aFByb3RvRnVuY0FicywgQWJzSW50cmlu
c2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldp
dGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIE1ha2VJZGVudGlmaWVyKCZ2bSwgImFj
b3MiKSwgMSwgbWF0aFByb3RvRnVuY0FDb3MsIE5vSW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0
aW9uKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIE1ha2VJZGVudGlmaWVyKCZ2bSwgImFzaW4iKSwgMSwgbWF0aFByb3RvRnVu
Y0FTaW4sIE5vSW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIE1ha2VJZGVu
dGlmaWVyKCZ2bSwgImF0YW4iKSwgMSwgbWF0aFByb3RvRnVuY0FUYW4sIE5vSW50cmluc2ljLCBE
b250RW51bSB8IEZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIE1ha2VJZGVudGlmaWVyKCZ2bSwgImFjb3NoIiks
IDEsIG1hdGhQcm90b0Z1bmNBQ29zaCwgTm9JbnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rpb24p
OworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2Jh
bE9iamVjdCwgTWFrZUlkZW50aWZpZXIoJnZtLCAiYXNpbmgiKSwgMSwgbWF0aFByb3RvRnVuY0FT
aW5oLCBOb0ludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7CisgICAgcHV0RGlyZWN0TmF0
aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBNYWtlSWRlbnRp
Zmllcigmdm0sICJhdGFuaCIpLCAxLCBtYXRoUHJvdG9GdW5jQVRhbmgsIE5vSW50cmluc2ljLCBE
b250RW51bSB8IEZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIE1ha2VJZGVudGlmaWVyKCZ2bSwgImF0YW4yIiks
IDIsIG1hdGhQcm90b0Z1bmNBVGFuMiwgTm9JbnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rpb24p
OworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2Jh
bE9iamVjdCwgTWFrZUlkZW50aWZpZXIoJnZtLCAiY2JydCIpLCAxLCBtYXRoUHJvdG9GdW5jQ2Jy
dCwgTm9JbnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rpb24pOworICAgIHB1dERpcmVjdE5hdGl2
ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgTWFrZUlkZW50aWZp
ZXIoJnZtLCAiY2VpbCIpLCAxLCBtYXRoUHJvdG9GdW5jQ2VpbCwgQ2VpbEludHJpbnNpYywgRG9u
dEVudW0gfCBGdW5jdGlvbik7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJh
bnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBNYWtlSWRlbnRpZmllcigmdm0sICJjb3MiKSwgMSwg
bWF0aFByb3RvRnVuY0NvcywgQ29zSW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKKyAg
ICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QsIE1ha2VJZGVudGlmaWVyKCZ2bSwgImNvc2giKSwgMSwgbWF0aFByb3RvRnVuY0Nvc2gsIE5v
SW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5j
dGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIE1ha2VJZGVudGlmaWVyKCZ2
bSwgImV4cCIpLCAxLCBtYXRoUHJvdG9GdW5jRXhwLCBFeHBJbnRyaW5zaWMsIERvbnRFbnVtIHwg
RnVuY3Rpb24pOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24o
dm0sIGdsb2JhbE9iamVjdCwgTWFrZUlkZW50aWZpZXIoJnZtLCAiZXhwbTEiKSwgMSwgbWF0aFBy
b3RvRnVuY0V4cG0xLCBOb0ludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7CisgICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBN
YWtlSWRlbnRpZmllcigmdm0sICJmbG9vciIpLCAxLCBtYXRoUHJvdG9GdW5jRmxvb3IsIEZsb29y
SW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5j
dGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIE1ha2VJZGVudGlmaWVyKCZ2
bSwgImZyb3VuZCIpLCAxLCBtYXRoUHJvdG9GdW5jRnJvdW5kLCBOb0ludHJpbnNpYywgRG9udEVu
dW0gfCBGdW5jdGlvbik7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNp
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBNYWtlSWRlbnRpZmllcigmdm0sICJsb2ciKSwgMSwgbWF0
aFByb3RvRnVuY0xvZywgTG9nSW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKKyAgICBw
dXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IE1ha2VJZGVudGlmaWVyKCZ2bSwgImxvZzEwIiksIDEsIG1hdGhQcm90b0Z1bmNMb2cxMCwgTm9J
bnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rpb24pOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgTWFrZUlkZW50aWZpZXIoJnZt
LCAibG9nMXAiKSwgMSwgbWF0aFByb3RvRnVuY0xvZzFwLCBOb0ludHJpbnNpYywgRG9udEVudW0g
fCBGdW5jdGlvbik7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBNYWtlSWRlbnRpZmllcigmdm0sICJsb2cyIiksIDEsIG1hdGhQ
cm90b0Z1bmNMb2cyLCBOb0ludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7CisgICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBN
YWtlSWRlbnRpZmllcigmdm0sICJtYXgiKSwgMiwgbWF0aFByb3RvRnVuY01heCwgTWF4SW50cmlu
c2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldp
dGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIE1ha2VJZGVudGlmaWVyKCZ2bSwgIm1p
biIpLCAyLCBtYXRoUHJvdG9GdW5jTWluLCBNaW5JbnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rp
b24pOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGds
b2JhbE9iamVjdCwgTWFrZUlkZW50aWZpZXIoJnZtLCAicG93IiksIDIsIG1hdGhQcm90b0Z1bmNQ
b3csIFBvd0ludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7CisgICAgcHV0RGlyZWN0TmF0
aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBNYWtlSWRlbnRp
Zmllcigmdm0sICJyYW5kb20iKSwgMCwgbWF0aFByb3RvRnVuY1JhbmRvbSwgTm9JbnRyaW5zaWMs
IERvbnRFbnVtIHwgRnVuY3Rpb24pOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91
dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgTWFrZUlkZW50aWZpZXIoJnZtLCAicm91bmQi
KSwgMSwgbWF0aFByb3RvRnVuY1JvdW5kLCBSb3VuZEludHJpbnNpYywgRG9udEVudW0gfCBGdW5j
dGlvbik7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBNYWtlSWRlbnRpZmllcigmdm0sICJzaW4iKSwgMSwgbWF0aFByb3RvRnVu
Y1NpbiwgU2luSW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIE1ha2VJZGVu
dGlmaWVyKCZ2bSwgInNpbmgiKSwgMSwgbWF0aFByb3RvRnVuY1NpbmgsIE5vSW50cmluc2ljLCBE
b250RW51bSB8IEZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIE1ha2VJZGVudGlmaWVyKCZ2bSwgInNxcnQiKSwg
MSwgbWF0aFByb3RvRnVuY1NxcnQsIFNxcnRJbnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rpb24p
OworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2Jh
bE9iamVjdCwgTWFrZUlkZW50aWZpZXIoJnZtLCAidGFuIiksIDEsIG1hdGhQcm90b0Z1bmNUYW4s
IE5vSW50cmluc2ljLCBEb250RW51bSB8IEZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3ROYXRpdmVG
dW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIE1ha2VJZGVudGlmaWVy
KCZ2bSwgInRhbmgiKSwgMSwgbWF0aFByb3RvRnVuY1RhbmgsIE5vSW50cmluc2ljLCBEb250RW51
bSB8IEZ1bmN0aW9uKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIE1ha2VJZGVudGlmaWVyKCZ2bSwgInRydW5jIiksIDEsIG1h
dGhQcm90b0Z1bmNUcnVuYywgTm9JbnRyaW5zaWMsIERvbnRFbnVtIHwgRnVuY3Rpb24pOworICAg
IHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVj
dCwgTWFrZUlkZW50aWZpZXIoJnZtLCAiaW11bCIpLCAxLCBtYXRoUHJvdG9GdW5jSU11bCwgSU11
bEludHJpbnNpYywgRG9udEVudW0gfCBGdW5jdGlvbik7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyAr
ODYsNyBAQCBPYmplY3RDb25zdHJ1Y3Rvcjo6T2JqZWN0Q29uc3RydWN0b3IoVk0mCiAKIHZvaWQg
T2JqZWN0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgT2JqZWN0UHJvdG90eXBl
KiBvYmplY3RQcm90b3R5cGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIElkZW50
aWZpZXIoJnZtLCAiT2JqZWN0Iikuc3RyaW5nKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtLCBNYWtlSWRlbnRpZmllcigmdm0sICJPYmplY3QiKS5zdHJpbmcoKSk7CiAgICAgLy8gRUNN
QSAxNS4yLjMuMQogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5wcm90b3R5cGUsIG9iamVjdFByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOwogICAgIC8vIG5vLiBvZiBhcmd1bWVudHMgZm9yIGNvbnN0cnVjdG9yCkBA
IC0xNzgsNyArMTc4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25z
dAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBKU09iamVj
dCogb2JqZWN0ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIFByb3BlcnR5RGVz
Y3JpcHRvciBkZXNjcmlwdG9yOwotICAgIGlmICghb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZXhlYywgSWRlbnRpZmllcihleGVjLCBwcm9wZXJ0eU5hbWUpLCBkZXNjcmlwdG9yKSkK
KyAgICBpZiAoIW9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIE1ha2VJZGVu
dGlmaWVyKGV4ZWMsIHByb3BlcnR5TmFtZSksIGRlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTMyNCw3ICszMjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIEFTU0VSVCgo
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiBBY2Nlc3NvcikgfHwgKCFkZXNjcmlwdG9yLmlzQWNj
ZXNzb3JEZXNjcmlwdG9yKCkpKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
LSAgICBPLT5tZXRob2RUYWJsZSgpLT5kZWZpbmVPd25Qcm9wZXJ0eShPLCBleGVjLCBJZGVudGlm
aWVyKGV4ZWMsIHByb3BlcnR5TmFtZSksIGRlc2NyaXB0b3IsIHRydWUpOworICAgIE8tPm1ldGhv
ZFRhYmxlKCktPmRlZmluZU93blByb3BlcnR5KE8sIGV4ZWMsIE1ha2VJZGVudGlmaWVyKGV4ZWMs
IHByb3BlcnR5TmFtZSksIGRlc2NyaXB0b3IsIHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoTyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVj
dFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODYsNyArODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpLT5oYXNPd25Qcm9wZXJ0
eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpLT5oYXNPd25Qcm9wZXJ0eShleGVjLCBNYWtlSWRlbnRp
ZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
KSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0lz
UHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTIzLDcgKzEyMyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBkZXNjcmlwdG9yLnNldEdldHRl
cihnZXQpOwogICAgIGRlc2NyaXB0b3Iuc2V0RW51bWVyYWJsZSh0cnVlKTsKICAgICBkZXNjcmlw
dG9yLnNldENvbmZpZ3VyYWJsZSh0cnVlKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIGRlc2NyaXB0b3Is
IGZhbHNlKTsKKyAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWZpbmVPd25Qcm9wZXJ0
eSh0aGlzT2JqZWN0LCBleGVjLCBNYWtlSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBkZXNjcmlwdG9yLCBmYWxzZSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTQzLDcgKzE0
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBkZXNj
cmlwdG9yLnNldFNldHRlcihzZXQpOwogICAgIGRlc2NyaXB0b3Iuc2V0RW51bWVyYWJsZSh0cnVl
KTsKICAgICBkZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZSh0cnVlKTsKLSAgICB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSksIGRlc2NyaXB0b3IsIGZhbHNlKTsKKyAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBNYWtlSWRlbnRpZmllcihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBkZXNjcmlwdG9y
LCBmYWxzZSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQpAQCAtMTU1LDcgKzE1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QpOwotICAgIGlmICh0aGlzT2JqZWN0LT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBzbG90KQorICAgIGlmICh0aGlzT2JqZWN0LT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgTWFrZUlkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSwgc2xvdCkKICAgICAgICAgJiYgc2xvdC5p
c0FjY2Vzc29yKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2xvdC5nZXR0ZXJT
ZXR0ZXIoKS0+Z2V0dGVyKCkpOwogCkBAIC0xNjksNyArMTY5LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCk7Ci0g
ICAgaWYgKHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIHNsb3QpCisg
ICAgaWYgKHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBNYWtlSWRlbnRpZmllcihl
eGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBzbG90
KQogICAgICAgICAmJiBzbG90LmlzQWNjZXNzb3IoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShzbG90LmdldHRlclNldHRlcigpLT5zZXR0ZXIoKSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAkocmV2aXNp
b24gMTYzODIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1l
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICB2b2lkIGFkZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKSB7IGFkZChp
ZGVudGlmaWVyLmltcGwoKSk7IH0KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGQo
U3RyaW5nSW1wbCopOwotICAgICAgICB2b2lkIGFkZEtub3duVW5pcXVlKFN0cmluZ0ltcGwqIGlk
ZW50aWZpZXIpIHsgbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5hcHBlbmQoSWRlbnRpZmll
cihtX3ZtLCBpZGVudGlmaWVyKSk7IH0KKyAgICAgICAgdm9pZCBhZGRLbm93blVuaXF1ZShTdHJp
bmdJbXBsKiBpZGVudGlmaWVyKSB7IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuYXBwZW5k
KE1ha2VJZGVudGlmaWVyKG1fdm0sIGlkZW50aWZpZXIpKTsgfQogCiAgICAgICAgIElkZW50aWZp
ZXImIG9wZXJhdG9yW10odW5zaWduZWQgaSkgeyByZXR1cm4gbV9kYXRhLT5wcm9wZXJ0eU5hbWVW
ZWN0b3IoKVtpXTsgfQogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBvcGVyYXRvcltdKHVuc2ln
bmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKClbaV07IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEs
NyBAQCBSZWdFeHBDb25zdHJ1Y3Rvcjo6UmVnRXhwQ29uc3RydWN0b3IoVk0mCiAKIHZvaWQgUmVn
RXhwQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUmVnRXhwUHJvdG90eXBlKiBy
ZWdFeHBQcm90b3R5cGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIElkZW50aWZp
ZXIoJnZtLCAiUmVnRXhwIikuc3RyaW5nKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
LCBNYWtlSWRlbnRpZmllcigmdm0sICJSZWdFeHAiKS5zdHJpbmcoKSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwogCiAgICAgLy8gRUNNQSAxNS4xMC41LjEgUmVnRXhwLnByb3RvdHlw
ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIGJvb2wgU3Ry
aW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUkKICAgICBTdHJpbmdPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBpZiAodGhpc09iamVj
dC0+aW50ZXJuYWxWYWx1ZSgpLT5nZXRTdHJpbmdQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7ICAgIAotICAgIHJldHVybiBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllckZyb20oZXhlYywgcHJvcGVy
dHlOYW1lKSwgc2xvdCk7CiB9CiAKIHZvaWQgU3RyaW5nT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIFN0cmlu
Z09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKCiAgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KG9iamVjdCk7CiAgICAgaW50IHNpemUgPSB0aGlz
T2JqZWN0LT5pbnRlcm5hbFZhbHVlKCktPmxlbmd0aCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9t
KGV4ZWMsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllckZyb20oZXhl
YywgaSkpOwogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAg
IHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDYgKzI1MCw3IEBAIHB1
YmxpYzoKICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QpOwogCiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVy
dHlOYW1lKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mIHZtLCBjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYgbmFtZSkgeyByZXR1cm4gZ2V0KHZtLCBQcm9wZXJ0eU5hbWUobmFtZSkpOyB9CiAg
ICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYg
KzgxLDcgQEAKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJsZS5oPgogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAj
aW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKQEAgLTE4NCwxMyArMTg1LDEzIEBAIFZNOjpW
TShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIHByaXZhdGVOYW1lUHJv
dG90eXBlVGFibGUoYWRvcHRQdHIobmV3IEhhc2hUYWJsZShKU0M6OnByaXZhdGVOYW1lUHJvdG90
eXBlVGFibGUpKSkKICAgICAsIHJlZ0V4cFRhYmxlKGFkb3B0UHRyKG5ldyBIYXNoVGFibGUoSlND
OjpyZWdFeHBUYWJsZSkpKQogICAgICwgcmVnRXhwQ29uc3RydWN0b3JUYWJsZShhZG9wdFB0cihu
ZXcgSGFzaFRhYmxlKEpTQzo6cmVnRXhwQ29uc3RydWN0b3JUYWJsZSkpKQotICAgICwgcmVnRXhw
UHJvdG90eXBlVGFibGUoYWRvcHRQdHIobmV3IEhhc2hUYWJsZShKU0M6OnJlZ0V4cFByb3RvdHlw
ZVRhYmxlKSkpCisgICAgLCByZWdFeHBQcm90b3R5cGVUYWJsZShhZG9wdFB0cihuZXcgSGFzaFRh
YmxlKEpTQzo6IHJlZ0V4cFByb3RvdHlwZVRhYmxlKSkpCiAgICAgLCBzdHJpbmdDb25zdHJ1Y3Rv
clRhYmxlKGFkb3B0UHRyKG5ldyBIYXNoVGFibGUoSlNDOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxl
KSkpCiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAgICwgcHJvbWlzZVByb3RvdHlwZVRhYmxlKGFk
b3B0UHRyKG5ldyBIYXNoVGFibGUoSlNDOjpwcm9taXNlUHJvdG90eXBlVGFibGUpKSkKICAgICAs
IHByb21pc2VDb25zdHJ1Y3RvclRhYmxlKGFkb3B0UHRyKG5ldyBIYXNoVGFibGUoSlNDOjpwcm9t
aXNlQ29uc3RydWN0b3JUYWJsZSkpKQogI2VuZGlmCi0gICAgLCBpZGVudGlmaWVyVGFibGUodm1U
eXBlID09IERlZmF1bHQgPyB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgp
IDogY3JlYXRlSWRlbnRpZmllclRhYmxlKCkpCisgICAgLCBpZGVudGlmaWVyVGFibGUodm1UeXBl
ID09IERlZmF1bHQgPyB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpIDog
bmV3IEF0b21pY1N0cmluZ1RhYmxlKQogICAgICwgcHJvcGVydHlOYW1lcyhuZXcgQ29tbW9uSWRl
bnRpZmllcnModGhpcykpCiAgICAgLCBlbXB0eUxpc3QobmV3IE1hcmtlZEFyZ3VtZW50QnVmZmVy
KQogICAgICwgcGFyc2VyQXJlbmEoYWRvcHRQdHIobmV3IFBhcnNlckFyZW5hKSkKQEAgLTM2OCw4
ICszNjksOSBAQCBWTTo6flZNKCkKICAgICBkZWxldGUgZW1wdHlMaXN0OwogCiAgICAgZGVsZXRl
IHByb3BlcnR5TmFtZXM7CisKICAgICBpZiAodm1UeXBlICE9IERlZmF1bHQpCi0gICAgICAgIGRl
bGV0ZUlkZW50aWZpZXJUYWJsZShpZGVudGlmaWVyVGFibGUpOworICAgICAgICBBdG9taWNTdHJp
bmdUYWJsZTo6ZGVzdHJveShpZGVudGlmaWVyVGFibGUpOwogCiAgICAgZGVsZXRlIGNsaWVudERh
dGE7CiAgICAgZGVsZXRlIG1fcmVnRXhwQ2FjaGU7CkBAIC02NzIsMTAgKzY3NCwxMCBAQCBKU1Zh
bHVlIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4CiAgICAgICAgIHVuc2lnbmVkIGxp
bmU7CiAgICAgICAgIHVuc2lnbmVkIGNvbHVtbjsKICAgICAgICAgc3RhY2tGcmFtZS5jb21wdXRl
TGluZUFuZENvbHVtbihsaW5lLCBjb2x1bW4pOwotICAgICAgICBleGNlcHRpb24tPnB1dERpcmVj
dCgqdGhpcywgSWRlbnRpZmllcih0aGlzLCAibGluZSIpLCBqc051bWJlcihsaW5lKSwgUmVhZE9u
bHkgfCBEb250RGVsZXRlKTsKLSAgICAgICAgZXhjZXB0aW9uLT5wdXREaXJlY3QoKnRoaXMsIElk
ZW50aWZpZXIodGhpcywgImNvbHVtbiIpLCBqc051bWJlcihjb2x1bW4pLCBSZWFkT25seSB8IERv
bnREZWxldGUpOworICAgICAgICBleGNlcHRpb24tPnB1dERpcmVjdCgqdGhpcywgTWFrZUlkZW50
aWZpZXIodGhpcywgImxpbmUiKSwganNOdW1iZXIobGluZSksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSk7CisgICAgICAgIGV4Y2VwdGlvbi0+cHV0RGlyZWN0KCp0aGlzLCBNYWtlSWRlbnRpZmllcih0
aGlzLCAiY29sdW1uIiksIGpzTnVtYmVyKGNvbHVtbiksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7
CiAgICAgICAgIGlmICghc3RhY2tGcmFtZS5zb3VyY2VVUkwuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgZXhjZXB0aW9uLT5wdXREaXJlY3QoKnRoaXMsIElkZW50aWZpZXIodGhpcywgInNvdXJjZVVS
TCIpLCBqc1N0cmluZyh0aGlzLCBzdGFja0ZyYW1lLnNvdXJjZVVSTCksIFJlYWRPbmx5IHwgRG9u
dERlbGV0ZSk7CisgICAgICAgICAgICBleGNlcHRpb24tPnB1dERpcmVjdCgqdGhpcywgTWFrZUlk
ZW50aWZpZXIodGhpcywgInNvdXJjZVVSTCIpLCBqc1N0cmluZyh0aGlzLCBzdGFja0ZyYW1lLnNv
dXJjZVVSTCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgfQogICAgIGlmIChleGNlcHRp
b24tPmlzRXJyb3JJbnN0YW5jZSgpICYmIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNl
cHRpb24pLT5hcHBlbmRTb3VyY2VUb01lc3NhZ2UoKSkgewogICAgICAgICB1bnNpZ25lZCBzdGFj
a0luZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24g
MTYzODIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBj
b3B5KQpAQCAtNzQsOCArNzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBDb21tb25J
ZGVudGlmaWVyczsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgSGFuZGxlU3RhY2s7
Ci0gICAgY2xhc3MgSWRlbnRpZmllcjsKLSAgICBjbGFzcyBJZGVudGlmaWVyVGFibGU7CiAgICAg
Y2xhc3MgSW50ZXJwcmV0ZXI7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3Mg
SlNPYmplY3Q7CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsyMjUsNyBAQAogCQlBOEE0NzQzMzE1MUE4
MjVCMDA0MTIzRkYgLyogVGVtcG9yYXJ5Q2hhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMxQTE1MUE4MjVCMDA0MTIzRkYgLyogVGVtcG9y
YXJ5Q2hhbmdlLmggKi87IH07CiAJCUE4QTQ3NDM0MTUxQTgyNUIwMDQxMjNGRiAvKiBBU0NJSUZh
c3RQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEE0NzMxQzE1MUE4MjVCMDA0MTIzRkYgLyogQVNDSUlGYXN0UGF0aC5oICovOyB9OwogCQlBOEE0
NzQzNTE1MUE4MjVCMDA0MTIzRkYgLyogQXRvbWljU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzFEMTUxQTgyNUIwMDQxMjNGRiAv
KiBBdG9taWNTdHJpbmcuY3BwICovOyB9OwotCQlBOEE0NzQzNjE1MUE4MjVCMDA0MTIzRkYgLyog
QXRvbWljU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOEE0NzMxRTE1MUE4MjVCMDA0MTIzRkYgLyogQXRvbWljU3RyaW5nLmggKi87IH07CisJ
CUE4QTQ3NDM2MTUxQTgyNUIwMDQxMjNGRiAvKiBBdG9taWNTdHJpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzFFMTUxQTgyNUIwMDQxMjNG
RiAvKiBBdG9taWNTdHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBOEE0NzQzNzE1MUE4MjVCMDA0MTIzRkYgLyogQXRvbWljU3RyaW5nSGFz
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcz
MUYxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21pY1N0cmluZ0hhc2guaCAqLzsgfTsKIAkJQThBNDc0
MzgxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21pY1N0cmluZ0ltcGwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzIwMTUxQTgyNUIwMDQxMjNGRiAv
KiBBdG9taWNTdHJpbmdJbXBsLmggKi87IH07CiAJCUE4QTQ3NDM5MTUxQTgyNUIwMDQxMjNGRiAv
KiBDU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4QTQ3MzIxMTUxQTgyNUIwMDQxMjNGRiAvKiBDU3RyaW5nLmNwcCAqLzsgfTsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvUHJpbnRTdHJlYW0uaAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL1dURi93dGYvUHJp
bnRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9SYXdQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiBu
YW1lc3BhY2UgV1RGIHsKIApAQCAtMjU2LDYgKzI1Nyw5IEBAIGlubGluZSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG8KIGlubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQ1N0cmluZyYgdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsIHN0YXRpY19jYXN0
PGNvbnN0IENTdHJpbmcmPih2YWx1ZSkpOyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIFN0cmluZyYgdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsIHN0YXRp
Y19jYXN0PGNvbnN0IFN0cmluZyY+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChv
dXQsIHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0ltcGwqPih2YWx1ZSkpOyB9CitpbmxpbmUgdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVl
KSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmdJbXBsKj4odmFs
dWUpKTsgfQoraW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25z
dCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nh
c3Q8Y29uc3QgU3RyaW5nSW1wbCo+KHZhbHVlKSk7IH0KK2lubGluZSB2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyBwcmludElu
dGVybmFsKG91dCwgdmFsdWUuaW1wbCgpKTsgfQogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGJvb2wpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIHNpZ25lZCBjaGFyKTsgLy8gTk9URTogdGhpcyBw
cmludHMgYXMgYSBudW1iZXIsIG5vdCBhcyBhIGNoYXJhY3RlcjsgdXNlIENoYXJhY3RlckR1bXAg
aWYgeW91IHdhbnQgdGhlIGNoYXJhY3RlcgogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOyAvLyBOT1RFOiBzZWUgYWJvdmUu
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAkocmV2aXNpb24gMTYzODIwKQorKysgU291
cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0
MSw2IEBAIFdURlRocmVhZERhdGE6OldURlRocmVhZERhdGEoKQogICAgIDogbV9hcGlEYXRhKDAp
CiAgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlKDApCiAgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxl
RGVzdHJ1Y3RvcigwKQotI2lmICFVU0UoV0VCX1RIUkVBRCkKLSAgICAsIG1fZGVmYXVsdElkZW50
aWZpZXJUYWJsZShuZXcgSlNDOjpJZGVudGlmaWVyVGFibGUoKSkKLSAgICAsIG1fY3VycmVudElk
ZW50aWZpZXJUYWJsZShtX2RlZmF1bHRJZGVudGlmaWVyVGFibGUpCi0jZW5kaWYKICAgICAsIG1f
c3RhY2tCb3VuZHMoU3RhY2tCb3VuZHM6OmN1cnJlbnRUaHJlYWRTdGFja0JvdW5kcygpKQogI2lm
IEVOQUJMRShTVEFDS19TVEFUUykKICAgICAsIG1fc3RhY2tTdGF0cygpCkBAIC01MywxNiArNDks
OSBAQCBXVEZUaHJlYWREYXRhOjpXVEZUaHJlYWREYXRhKCkKICAgICAsIG1fc2F2ZWRMYXN0U3Rh
Y2tUb3Aoc3RhY2soKS5vcmlnaW4oKSkKICAgICAsIG1fc2F2ZWRSZXNlcnZlZFpvbmVTaXplKDAp
CiB7Ci0jaWYgVVNFKFdFQl9USFJFQUQpCi0gICAgc3RhdGljIEpTQzo6SWRlbnRpZmllclRhYmxl
KiBzaGFyZWRJZGVudGlmaWVyVGFibGUgPSBuZXcgSlNDOjpJZGVudGlmaWVyVGFibGUoKTsKLSAg
ICBpZiAocHRocmVhZF9tYWluX25wKCkgfHwgaXNXZWJUaHJlYWQoKSkKLSAgICAgICAgbV9kZWZh
dWx0SWRlbnRpZmllclRhYmxlID0gc2hhcmVkSWRlbnRpZmllclRhYmxlOwotICAgIGVsc2UKLSAg
ICAgICAgbV9kZWZhdWx0SWRlbnRpZmllclRhYmxlID0gbmV3IEpTQzo6SWRlbnRpZmllclRhYmxl
KCk7Ci0KLSAgICBtX2N1cnJlbnRJZGVudGlmaWVyVGFibGUgPSBtX2RlZmF1bHRJZGVudGlmaWVy
VGFibGU7Ci0jZW5kaWYKICAgICBBdG9taWNTdHJpbmdUYWJsZTo6Y3JlYXRlKCp0aGlzKTsKKyAg
ICBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGUgPSBtX2F0b21pY1N0cmluZ1RhYmxlOworICAgIG1f
Y3VycmVudElkZW50aWZpZXJUYWJsZSA9IG1fYXRvbWljU3RyaW5nVGFibGU7CiB9CiAKIFdURlRo
cmVhZERhdGE6On5XVEZUaHJlYWREYXRhKCkKQEAgLTc0LDIwICs2MywzIEBAIFdURlRocmVhZERh
dGE6On5XVEZUaHJlYWREYXRhKCkKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLW5hbWVzcGFjZSBK
U0MgewotCi1JZGVudGlmaWVyVGFibGU6On5JZGVudGlmaWVyVGFibGUoKQotewotICAgIEhhc2hT
ZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciBlbmQgPSBtX3RhYmxlLmVuZCgpOwotICAgIGZvciAo
SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPnNldElzSWRlbnRpZmllcihmYWxz
ZSk7Ci19Ci0KLUhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgSWRlbnRpZmllclRhYmxl
OjphZGQoU3RyaW5nSW1wbCogdmFsdWUpCi17Ci0gICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFk
ZFJlc3VsdCByZXN1bHQgPSBtX3RhYmxlLmFkZCh2YWx1ZSk7Ci0gICAgKCpyZXN1bHQuaXRlcmF0
b3IpLT5zZXRJc0lkZW50aWZpZXIodHJ1ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCShyZXZpc2lvbiAxNjM4
MjApCisrKyBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDI1ICszNiw2IEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogCi0vLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBsYXll
cmluZyB2aW9sYXRpb24gdW50aWwgd2UgbW92ZSBtb3JlIG9mIHRoZSBzdHJpbmcgY29kZSBmcm9t
IEphdmFTY3JpcHRDb3JlIHRvIFdURi4KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBJZGVudGlm
aWVyVGFibGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB+SWRlbnRpZmllclRhYmxlKCk7Ci0KLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGQoU3RyaW5nSW1wbCopOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IEhhc2hTZXQ8U3RyaW5nSW1wbCo+
OjpBZGRSZXN1bHQgYWRkKFUpOwotCi0gICAgYm9vbCByZW1vdmUoU3RyaW5nSW1wbCogaWRlbnRp
ZmllcikgeyByZXR1cm4gbV90YWJsZS5yZW1vdmUoaWRlbnRpZmllcik7IH0KLQotcHJpdmF0ZToK
LSAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPiBtX3RhYmxlOwotfTsKLQotfQotCiBuYW1lc3BhY2Ug
V1RGIHsKIAogY2xhc3MgQXRvbWljU3RyaW5nVGFibGU7CkBAIC03MiwxNCArNTMsMTQgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9hdG9taWNTdHJpbmdUYWJsZTsKICAgICB9CiAKLSAgICBK
U0M6OklkZW50aWZpZXJUYWJsZSogY3VycmVudElkZW50aWZpZXJUYWJsZSgpCisgICAgQXRvbWlj
U3RyaW5nVGFibGUqIGN1cnJlbnRJZGVudGlmaWVyVGFibGUoKQogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fY3VycmVudElkZW50aWZpZXJUYWJsZTsKICAgICB9CiAKLSAgICBKU0M6OklkZW50aWZp
ZXJUYWJsZSogc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShKU0M6OklkZW50aWZpZXJUYWJsZSog
aWRlbnRpZmllclRhYmxlKQorICAgIEF0b21pY1N0cmluZ1RhYmxlKiBzZXRDdXJyZW50SWRlbnRp
ZmllclRhYmxlKEF0b21pY1N0cmluZ1RhYmxlKiBpZGVudGlmaWVyVGFibGUpCiAgICAgewotICAg
ICAgICBKU0M6OklkZW50aWZpZXJUYWJsZSogb2xkSWRlbnRpZmllclRhYmxlID0gbV9jdXJyZW50
SWRlbnRpZmllclRhYmxlOworICAgICAgICBBdG9taWNTdHJpbmdUYWJsZSogb2xkSWRlbnRpZmll
clRhYmxlID0gbV9jdXJyZW50SWRlbnRpZmllclRhYmxlOwogICAgICAgICBtX2N1cnJlbnRJZGVu
dGlmaWVyVGFibGUgPSBpZGVudGlmaWVyVGFibGU7CiAgICAgICAgIHJldHVybiBvbGRJZGVudGlm
aWVyVGFibGU7CiAgICAgfQpAQCAtMTQyLDggKzEyMyw4IEBAIHByaXZhdGU6CiAgICAgQXRvbWlj
U3RyaW5nVGFibGUqIG1fYXRvbWljU3RyaW5nVGFibGU7CiAgICAgQXRvbWljU3RyaW5nVGFibGVE
ZXN0cnVjdG9yIG1fYXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yOwogCi0gICAgSlNDOjpJZGVu
dGlmaWVyVGFibGUqIG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZTsKLSAgICBKU0M6OklkZW50aWZp
ZXJUYWJsZSogbV9jdXJyZW50SWRlbnRpZmllclRhYmxlOworICAgIEF0b21pY1N0cmluZ1RhYmxl
KiBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGU7CisgICAgQXRvbWljU3RyaW5nVGFibGUqIG1fY3Vy
cmVudElkZW50aWZpZXJUYWJsZTsKICAgICBTdGFja0JvdW5kcyBtX3N0YWNrQm91bmRzOwogI2lm
IEVOQUJMRShTVEFDS19TVEFUUykKICAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyBtX3N0
YWNrU3RhdHM7CkBAIC0xNzUsNCArMTU2LDggQEAgaW5saW5lIFdURlRocmVhZERhdGEmIHd0ZlRo
cmVhZERhdGEoKQogdXNpbmcgV1RGOjpXVEZUaHJlYWREYXRhOwogdXNpbmcgV1RGOjp3dGZUaHJl
YWREYXRhOwogCituYW1lc3BhY2UgSlNDIHsKKyAgICB0eXBlZGVmIFdURjo6QXRvbWljU3RyaW5n
VGFibGUgSWRlbnRpZmllclRhYmxlOworfTsKKwogI2VuZGlmIC8vIFdURlRocmVhZERhdGFfaApJ
bmRleDogU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAkocmV2aXNpb24gMTYzODIwKQor
KysgU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zODEsOCArMzgxLDkgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFk
ZAogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRkU2xvd0Nhc2UoU3Ry
aW5nSW1wbCogc3RyaW5nKQogewotICAgIGlmICghc3RyaW5nLT5sZW5ndGgoKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CisvLyBGSVhNRTogZW1wdHkgc2hvdWxkIGhhdmUg
YXRvbWljIGJpdCBzZXQuLi4gc2VlIGNvbW1lbnQgaW4gZGVzdHJveSByZSBzdGF0aWMgc3RyaW5n
cy4gOi0vCisvLyAgICBpZiAoIXN0cmluZy0+bGVuZ3RoKCkpCisvLyAgICAgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OmVtcHR5KCk7CiAKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzdHJpbmctPmlz
QXRvbWljKCksICJBdG9taWNTdHJpbmcgc2hvdWxkIG5vdCBoaXQgdGhlIHNsb3cgY2FzZSBpZiB0
aGUgc3RyaW5nIGlzIGFscmVhZHkgYXRvbWljLiIpOwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90
ZXh0L0F0b21pY1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bWljU3RyaW5nLmgJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bWljU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUg
PHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogLy8gRGVmaW5lICdOT19JTVBMSUNJVF9BVE9NSUNTVFJJTkcnIGJlZm9yZSBpbmNsdWRpbmcg
dGhpcyBoZWFkZXIsCkBAIC0zMyw2ICszNCwxMSBAQAogI2RlZmluZSBBVE9NSUNTVFJJTkdfQ09O
VkVSU0lPTgogI2VuZGlmCiAKK25hbWVzcGFjZSBKU0MgeworICAgIGNsYXNzIEV4ZWNTdGF0ZTsK
KyAgICBjbGFzcyBWTTsKK307CisKIG5hbWVzcGFjZSBXVEYgewogCiBzdHJ1Y3QgQXRvbWljU3Ry
aW5nSGFzaDsKQEAgLTQ5LDYgKzU1LDMwIEBAIHB1YmxpYzoKICAgICBBdG9taWNTdHJpbmcoY29u
c3QgVUNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgZXhpc3RpbmdIYXNoKSA6IG1f
c3RyaW5nKGFkZChzLCBsZW5ndGgsIGV4aXN0aW5nSGFzaCkpIHsgfQogICAgIEF0b21pY1N0cmlu
Zyhjb25zdCBVQ2hhciogcykgOiBtX3N0cmluZyhhZGQocykpIHsgfQogCisgICAgQXRvbWljU3Ry
aW5nKEpTQzo6RXhlY1N0YXRlKikgeyB9CisgICAgQXRvbWljU3RyaW5nKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgTENoYXIqIHMpIDogbV9zdHJpbmcoYWRkKHMpKSB7IH0KKyAgICBBdG9taWNTdHJp
bmcoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBzKSA6IG1fc3RyaW5nKGFkZChzKSkgeyB9
CisgICAgQXRvbWljU3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgTENoYXIqIHMsIHVuc2ln
bmVkIGxlbmd0aCkgOiBtX3N0cmluZyhhZGQocywgbGVuZ3RoKSkgeyB9CisgICAgQXRvbWljU3Ry
aW5nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVUNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkgOiBt
X3N0cmluZyhhZGQocywgbGVuZ3RoKSkgeyB9CisgICAgQXRvbWljU3RyaW5nKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgVUNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgZXhpc3RpbmdI
YXNoKSA6IG1fc3RyaW5nKGFkZChzLCBsZW5ndGgsIGV4aXN0aW5nSGFzaCkpIHsgfQorICAgIEF0
b21pY1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVDaGFyKiBzKSA6IG1fc3RyaW5nKGFk
ZChzKSkgeyB9CisgICAgQXRvbWljU3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgU3RyaW5nSW1wbCog
aW1wKSA6IG1fc3RyaW5nKGFkZChpbXApKSB7IH0KKyAgICBBdG9taWNTdHJpbmcoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBTdHJpbmcmIHMpIDogbV9zdHJpbmcoYWRkKHMuaW1wbCgpKSkgeyB9CisK
KyAgICBBdG9taWNTdHJpbmcoSlNDOjpWTSopIHsgfQorICAgIEF0b21pY1N0cmluZyhKU0M6OlZN
KiwgY29uc3QgTENoYXIqIHMpIDogbV9zdHJpbmcoYWRkKHMpKSB7IH0KKyAgICBBdG9taWNTdHJp
bmcoSlNDOjpWTSosIGNvbnN0IGNoYXIqIHMpIDogbV9zdHJpbmcoYWRkKHMpKSB7IH0KKyAgICBB
dG9taWNTdHJpbmcoSlNDOjpWTSosIGNvbnN0IExDaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgpIDog
bV9zdHJpbmcoYWRkKHMsIGxlbmd0aCkpIHsgfQorICAgIEF0b21pY1N0cmluZyhKU0M6OlZNKiwg
Y29uc3QgVUNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkgOiBtX3N0cmluZyhhZGQocywgbGVuZ3Ro
KSkgeyB9CisgICAgQXRvbWljU3RyaW5nKEpTQzo6Vk0qLCBjb25zdCBVQ2hhciogcywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBleGlzdGluZ0hhc2gpIDogbV9zdHJpbmcoYWRkKHMsIGxlbmd0
aCwgZXhpc3RpbmdIYXNoKSkgeyB9CisgICAgQXRvbWljU3RyaW5nKEpTQzo6Vk0qLCBjb25zdCBV
Q2hhciogcykgOiBtX3N0cmluZyhhZGQocykpIHsgfQorICAgIEF0b21pY1N0cmluZyhKU0M6OlZN
KiwgU3RyaW5nSW1wbCogaW1wKSA6IG1fc3RyaW5nKGFkZChpbXApKSB7IH0KKyAgICBBdG9taWNT
dHJpbmcoSlNDOjpWTSosIGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQocy5pbXBsKCkp
KSB7IH0KKworICAgIENTdHJpbmcgYXNjaWkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5hc2Np
aSgpOyB9CisgICAgQ1N0cmluZyB1dGY4KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudXRmOCgp
OyB9CisgICAgY29uc3QgVUNoYXIqIGRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnMoKTsgfQorCiAgICAgdGVtcGxhdGU8c2l6
ZV90IGlubGluZUNhcGFjaXR5PgogICAgIGV4cGxpY2l0IEF0b21pY1N0cmluZyhjb25zdCBWZWN0
b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5PiYgY2hhcmFjdGVycykKICAgICAgICAgOiBtX3N0cmlu
ZyhhZGQoY2hhcmFjdGVycy5kYXRhKCksIGNoYXJhY3RlcnMuc2l6ZSgpKSkKQEAgLTE3OCw2ICsy
MDgsMTAgQEAgcHJpdmF0ZToKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gYWRkKFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7CiAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBhZGQoU3RyaW5nSW1wbCogc3RyaW5nKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHdv
dWxkIGJlIG5pY2UgdG8gcmVtb3ZlLiA6LS8KKyAgICAgICAgaWYgKHN0cmluZy0+aXNFbXB0eVVu
aXF1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKwogICAgICAgICBpZiAoIXN0cmlu
ZyB8fCBzdHJpbmctPmlzQXRvbWljKCkpIHsKICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoIXN0cmluZyB8fCBpc0luQXRvbWljU3RyaW5nVGFibGUoc3RyaW5nKSwgIlRoZSBhdG9taWMg
c3RyaW5nIGNvbWVzIGZyb20gYW4gb3RoZXIgdGhyZWFkISIpOwogICAgICAgICAgICAgcmV0dXJu
IHN0cmluZzsKQEAgLTI3NCw1ICszMDgsOSBAQCB1c2luZyBXVEY6OnhtbG5zQXRvbTsKIHVzaW5n
IFdURjo6eGxpbmtBdG9tOwogI2VuZGlmCiAKK25hbWVzcGFjZSBKU0MgeworICAgIHR5cGVkZWYg
QXRvbWljU3RyaW5nIElkZW50aWZpZXI7Cit9CisKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZS5oPgogI2VuZGlmIC8vIEF0b21pY1N0cmluZ19oCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmNwcAkocmV2aXNpb24gMTYzODIwKQorKysgU291
cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDYgKzUzLDkgQEAgdm9pZCBBdG9taWNTdHJpbmdUYWJsZTo6Y3JlYXRlKFdURlRocmVhZAog
CiB2b2lkIEF0b21pY1N0cmluZ1RhYmxlOjpkZXN0cm95KEF0b21pY1N0cmluZ1RhYmxlKiB0YWJs
ZSkKIHsKKyAgICAvLyBGSVhNRTogdGhlcmUgaXMgYSBwcm9ibGVtIGhlcmUgaWYgd2UgY2xlYXIg
dGhlIGF0b21pYyBiaXQgZm9yIG5vbi1tYWluIHRhYmxlIHN0cmluZ3Mg4oCTCisgICAgLy8gc3Rh
dGljIHN0cmluZ3MgbmVlZCB0byBiZSBhdG9taWMgaW4gYWxsLCBub25lLCBvciBvbmx5IHRoZSBt
YWluIHRhYmxlPworCiAgICAgSGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGVuZCA9IHRh
YmxlLT5tX3RhYmxlLmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJh
dG9yIGl0ZXIgPSB0YWJsZS0+bV90YWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQog
ICAgICAgICAoKml0ZXIpLT5zZXRJc0F0b21pYyhmYWxzZSk7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
dGV4dC9BdG9taWNTdHJpbmdUYWJsZS5oCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3
LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZShXVEZUaHJlYWREYXRhJik7CiAg
ICAgSGFzaFNldDxTdHJpbmdJbXBsKj4mIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQogCi1w
cml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koQXRvbWljU3RyaW5nVGFibGUqKTsKIAor
cHJpdmF0ZToKICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPiBtX3RhYmxlOwogfTsKIApJbmRleDog
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTAgKzEx
NSw2IEBAIFN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKCkKIAogICAgIGlmIChpc0F0b21pYygpKQog
ICAgICAgICBBdG9taWNTdHJpbmc6OnJlbW92ZSh0aGlzKTsKLSAgICBpZiAoaXNJZGVudGlmaWVy
KCkpIHsKLSAgICAgICAgaWYgKCF3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJs
ZSgpLT5yZW1vdmUodGhpcykpCi0gICAgICAgICAgICBDUkFTSCgpOwotICAgIH0KIAogICAgIEJ1
ZmZlck93bmVyc2hpcCBvd25lcnNoaXAgPSBidWZmZXJPd25lcnNoaXAoKTsKIApJbmRleDogU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcp
CiAgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICAgICAsIG1fZGF0YTE2KGNoYXJhY3Rl
cnMpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNoRmxhZ0lzSWRlbnRpZmllciB8IEJ1
ZmZlck93bmVkKQorICAgICAgICAsIG1faGFzaEFuZEZsYWdzKEJ1ZmZlck93bmVkKQogICAgIHsK
ICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhc2ggaXMgY29tcHV0ZWQgc28gdGhhdCBBdG9t
aWNTdHJpbmdIYXNoIGNhbiBjYWxsIGV4aXN0aW5nSGFzaCgpCiAgICAgICAgIC8vIHdpdGggaW1w
dW5pdHkuIFRoZSBlbXB0eSBzdHJpbmcgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGlzIG5ldmVyIGVu
dGVyZWQgaW50bwpAQCAtMTc5LDcgKzE3OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIDogbV9yZWZD
b3VudChzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nKQogICAgICAgICAsIG1fbGVuZ3RoKGxl
bmd0aCkKICAgICAgICAgLCBtX2RhdGE4KGNoYXJhY3RlcnMpCi0gICAgICAgICwgbV9oYXNoQW5k
RmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBzX2hhc2hGbGFnSXNJZGVudGlmaWVyIHwgQnVm
ZmVyT3duZWQpCisgICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZmZXIg
fCBCdWZmZXJPd25lZCkKICAgICB7CiAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXNoIGlz
IGNvbXB1dGVkIHNvIHRoYXQgQXRvbWljU3RyaW5nSGFzaCBjYW4gY2FsbCBleGlzdGluZ0hhc2go
KQogICAgICAgICAvLyB3aXRoIGltcHVuaXR5LiBUaGUgZW1wdHkgc3RyaW5nIGlzIHNwZWNpYWwg
YmVjYXVzZSBpdCBpcyBuZXZlciBlbnRlcmVkIGludG8KQEAgLTQyOSw3ICs0MjksNyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ3NPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9oYXNoQW5kRmxhZ3MpOyB9CiAgICAgc3RhdGljIHVuc2ln
bmVkIGZsYWdJczhCaXQoKSB7IHJldHVybiBzX2hhc2hGbGFnOEJpdEJ1ZmZlcjsgfQotICAgIHN0
YXRpYyB1bnNpZ25lZCBmbGFnSXNJZGVudGlmaWVyKCkgeyByZXR1cm4gc19oYXNoRmxhZ0lzSWRl
bnRpZmllcjsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnSXNJZGVudGlmaWVyKCkgeyByZXR1
cm4gc19oYXNoRmxhZ0lzQXRvbWljOyB9CiAgICAgc3RhdGljIHVuc2lnbmVkIGRhdGFPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9kYXRhOCk7IH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4KQEAgLTQ5NywxNyArNDk3LDggQEAgcHVibGljOgogCiAgICAg
Ym9vbCBoYXMxNkJpdFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEFuZEZsYWdzICYgc19o
YXNoRmxhZ0hhczE2Qml0U2hhZG93OyB9CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQg
dXBjb252ZXJ0Q2hhcmFjdGVycyh1bnNpZ25lZCwgdW5zaWduZWQpIGNvbnN0OwotICAgIGJvb2wg
aXNJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hGbGFn
SXNJZGVudGlmaWVyOyB9CisgICAgYm9vbCBpc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdJc0F0b21pYzsgfQogICAgIGJvb2wgaXNJZGVudGlm
aWVyT3JVbmlxdWUoKSBjb25zdCB7IHJldHVybiBpc0lkZW50aWZpZXIoKSB8fCBpc0VtcHR5VW5p
cXVlKCk7IH0KLSAgICB2b2lkIHNldElzSWRlbnRpZmllcihib29sIGlzSWRlbnRpZmllcikKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCghaXNTdGF0aWMoKSk7Ci0gICAgICAgIEFTU0VSVCghaXNFbXB0
eVVuaXF1ZSgpKTsKLSAgICAgICAgaWYgKGlzSWRlbnRpZmllcikKLSAgICAgICAgICAgIG1faGFz
aEFuZEZsYWdzIHw9IHNfaGFzaEZsYWdJc0lkZW50aWZpZXI7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1faGFzaEFuZEZsYWdzICY9IH5zX2hhc2hGbGFnSXNJZGVudGlmaWVyOwotICAgIH0K
IAogICAgIGJvb2wgaXNFbXB0eVVuaXF1ZSgpIGNvbnN0CiAgICAgewpAQCAtNTE3LDcgKzUwOCw4
IEBAIHB1YmxpYzoKICAgICBib29sIGlzQXRvbWljKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoQW5k
RmxhZ3MgJiBzX2hhc2hGbGFnSXNBdG9taWM7IH0KICAgICB2b2lkIHNldElzQXRvbWljKGJvb2wg
aXNBdG9taWMpCiAgICAgewotICAgICAgICBBU1NFUlQoIWlzU3RhdGljKCkpOworICAgICAgICAv
LyBGSVhNRTogbWFrZSB0aGlzIHJpZ2h0LiA6LS8KKy8vICAgICAgICBBU1NFUlQoIWlzU3RhdGlj
KCkpOwogICAgICAgICBBU1NFUlQoIWlzRW1wdHlVbmlxdWUoKSk7CiAgICAgICAgIGlmIChpc0F0
b21pYykKICAgICAgICAgICAgIG1faGFzaEFuZEZsYWdzIHw9IHNfaGFzaEZsYWdJc0F0b21pYzsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NT
dHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpn
ZXRPd25Qcm9wZXIKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3QtPmltcGwoKS5s
ZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyRnJvbShleGVjLCBpKSk7CiAKICAgICBzdGF0
aWMgSWRlbnRpZmllciogcHJvcGVydHlJZGVudGlmaWVycyA9IDA7CiAgICAgaWYgKCFwcm9wZXJ0
eUlkZW50aWZpZXJzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0
cmluZ01hcEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcyLDcgKzcyLDcgQEAgYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJvcGVydHko
SlNDZQogCiBib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KQogewotICAgIHJldHVybiBk
ZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSk7
CisgICAgcmV0dXJuIGRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIElkZW50aWZpZXJGcm9tKGV4
ZWMsIGluZGV4KSk7CiB9CiAKIGJvb2wgSlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3
LDcgKzI3Nyw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW4KICAg
ICBpZiAoYWxsb3dzQWNjZXNzICYmIEpTR2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4LCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgCi0gICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b20oZXhlYywgaW5kZXgpOworICAgIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyRnJvbShleGVjLCBpbmRleCk7CiAgICAgCiAgICAgLy8gQ2hlY2sgZm9yIGNoaWxkIGZyYW1l
cyBieSBuYW1lIGJlZm9yZSBidWlsdC1pbiBwcm9wZXJ0aWVzIHRvCiAgICAgLy8gbWF0Y2ggTW96
aWxsYS4gVGhpcyBkb2VzIG5vdCBtYXRjaCBJRSwgYnV0IHNvbWUgc2l0ZXMgZW5kIHVwCkBAIC0z
NTcsNyArMzU3LDcgQEAgdm9pZCBKU0RPTVdpbmRvdzo6cHV0QnlJbmRleChKU0NlbGwqIGNlbAog
ICAgIGlmICghdGhpc09iamVjdC0+aW1wbCgpLmZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBpbmRleCk7CisgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXJGcm9t
KGV4ZWMsIGluZGV4KTsKIAogICAgIC8vIE9wdGltaXphdGlvbjogYWNjZXNzIEphdmFTY3JpcHQg
Z2xvYmFsIHZhcmlhYmxlcyBkaXJlY3RseSBiZWZvcmUgaW52b2x2aW5nIHRoZSBET00uCiAgICAg
aWYgKHRoaXNPYmplY3QtPkpTR2xvYmFsT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eUZvcldyaXRlKGV4
ZWMsIHByb3BlcnR5TmFtZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U3RvcmFnZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBib29sIEpTU3RvcmFnZTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjCiAKIGJv
b2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gZGVsZXRlUHJv
cGVydHkoY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsK
KyAgICByZXR1cm4gZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgSWRlbnRpZmllckZyb20oZXhl
YywgcHJvcGVydHlOYW1lKSk7CiB9CiAKIHZvaWQgSlNTdG9yYWdlOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9u
IDE2MzgyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDU0LDcgKzIwNTQsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIGlmICgkZ2VuZXJhdGVkUHJvcGVydHlOYW1l
KSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpO1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXJGcm9tKGV4ZWMsIGluZGV4KTtcbiIpOwogICAgICAgICAgICAgICAgICRnZW5lcmF0
ZWRQcm9wZXJ0eU5hbWUgPSAxOwogICAgICAgICAgICAgfTsKIApAQCAtMjM5Nyw3ICsyMzk3LDcg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5h
bWVkU2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5k
ZXgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyRnJvbShleGVjLCBpbmRleCk7XG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3QodGhpc09iamVjdCwgc2hvdWxkVGhyb3cpO1xuIik7CiAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5wdXREZWxlZ2F0
ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSlcbiIpOwogICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuO1xuIik7CkBAIC0yNTkxLDcg
KzI1OTEsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05h
bWV9Kj4ob2JqZWN0KTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlz
T2JqZWN0LT5pbXBsKCkubGVuZ3RoKCk7IGkgPCBjb3VudDsgKytpKVxuIik7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGkpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllckZyb20oZXhlYywgaSkpO1xuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpO1xuIik7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAxNjM4MjApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdm9p
ZCBSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoSgogICAgIFJ1bnRpbWVBcnJheSog
dGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRoaXNPYmplY3QtPmdldExlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXJG
cm9tKGV4ZWMsIGkpKTsKIAogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHJldmlzaW9u
IDE2MzgyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTcsNyArMzU3LDcgQEAgdm9pZCBDSW5zdGFuY2U6OmdldFByb3BlcnR5
TmFtZXMoRXhlY1N0YQogICAgICAgICBpZiAoaWRlbnRpZmllci0+aXNTdHJpbmcoKSkKICAgICAg
ICAgICAgIG5hbWVBcnJheS5hZGQoaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaWRl
bnRpZmllci0+c3RyaW5nKCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbmFtZUFycmF5
LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGlkZW50aWZpZXItPm51bWJlcigpKSk7CisgICAg
ICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXJGcm9tKGV4ZWMsIGlkZW50aWZpZXItPm51
bWJlcigpKSk7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBjYWxs
IE5QTl9NZW1GcmVlIGJ1dCB0aGF0J3MgaW4gV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvYy9jX3V0aWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
Yy9jX3V0aWxpdHkuaAkocmV2aXNpb24gMTYzODIwKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L2MvY191dGlsaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBJZGVudGlmaWVyOwogCiBuYW1lc3Bh
Y2UgQmluZGluZ3MgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpT
Qy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qc2MvQnJpZGdlSlNDLmgJ
KHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qc2MvQnJpZGdlSlND
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKIG5hbWVzcGFjZSBKU0MgIHsKIAog
Y2xhc3MgQXJnTGlzdDsKLWNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsK
IGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogY2xhc3MgUnVudGltZU1ldGhvZDsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
SlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDA5LDcgKzQwOSw3IEBAIHZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWRlbnRpZmllciA9IElkZW50aWZpZXIoZXhlYywg
U3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHJpbmcsIGxlbmd0aCkuaW1wbCgp
KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7CisgICAgICAgICAgICBpZGVudGlm
aWVyID0gSWRlbnRpZmllckZyb20oZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwogCiAg
ICAgICAgIHByb3BlcnR5TmFtZUFycmF5LmFkZChpZGVudGlmaWVyKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0J
KHJldmlzaW9uIDE2MzgyMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1By
b3h5SW5zdGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNyBAQCB2b2lkIFBy
b3h5SW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhlCiAgICAgICAgICAgICBjb25zdCBjaGFy
KiBzdHIgPSBpZGVudGlmaWVyLT5zdHJpbmcoKTsKICAgICAgICAgICAgIG5hbWVBcnJheS5hZGQo
SWRlbnRpZmllcihKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhM
YXRpbjFGYWxsYmFjayhzdHIsIHN0cmxlbihzdHIpKSkpOwogICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG5hbWVBcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpZGVudGlmaWVyLT5u
dW1iZXIoKSkpOworICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlmaWVyRnJvbShleGVj
LCBpZGVudGlmaWVyLT5udW1iZXIoKSkpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226987</attachid>
            <date>2014-03-17 17:15:06 -0700</date>
            <delta_ts>2014-03-17 18:48:48 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>128624.6.patch</filename>
            <type>text/plain</type>
            <size>33234</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0
Lm1tCShyZXZpc2lvbiAxNjU3MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJ
V3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogCiAjaW5jbHVkZSAiRGVsYXllZFJlbGVhc2VTY29w
ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxp
bmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gMTY1NzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MzAsNyArNDYzMCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ0lkZW4KICAgICAgICAgQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoc3RyaW5nKSwgZWRnZSwgbV9qaXQuYnJh
bmNoVGVzdDMyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNl
dCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nSW1w
bDo6ZmxhZ0lzSWRlbnRpZmllcigpKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXNBdG9taWMoKSkpKTsKICAgICAKICAgICBtX2lu
dGVycHJldGVyLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nSWRlbnQpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVj
dGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE2NTczOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVy
LmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9z
dC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0luamVjdGVkU2NyaXB0
SG9zdC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3Jp
cHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMTY1NzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3Jp
cHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRl
ICJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTSmF2
YVNjcmlwdENhbGxGcmFtZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTY1NzM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4
MSw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24oKSBjb25z
dCB7IHJldHVybiB2bSgpLmV4Y2VwdGlvbigpOyB9CiAgICAgICAgIGJvb2wgaGFkRXhjZXB0aW9u
KCkgY29uc3QgeyByZXR1cm4gIXZtKCkuZXhjZXB0aW9uKCkuaXNFbXB0eSgpOyB9CiAKKyAgICAg
ICAgSWRlbnRpZmllclRhYmxlKiBhdG9taWNTdHJpbmdUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHZt
KCkuYXRvbWljU3RyaW5nVGFibGUoKTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVy
cyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICp2bSgpLnByb3BlcnR5TmFtZXM7IH0K
ICAgICAgICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXImIGVtcHR5TGlzdCgpIGNvbnN0IHsg
cmV0dXJuICp2bSgpLmVtcHR5TGlzdDsgfQogICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0
ZXIoKSB7IHJldHVybiB2bSgpLmludGVycHJldGVyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgJKHJldmlzaW9u
IDE2NTczOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNh
bGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIklkZW50aWZpZXIu
aCIKIAogbmFtZXNwYWNlIEpTQyAgewogCkBAIC0xNDcsNiArMTQ4LDIxIEBAIGlubGluZSBKU1Zh
bHVlIENhbGxGcmFtZTo6dW5jaGVja2VkQWN0aXYKICAgICByZXR1cm4gcmVnaXN0ZXJzKClbYWN0
aXZhdGlvblJlZ2lzdGVyLm9mZnNldCgpXS5qc1ZhbHVlKCk7CiB9CiAKK2lubGluZSBQYXNzUmVm
PFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwq
IHIpCit7CisjaWZuZGVmIE5ERUJVRworICAgIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShl
eGVjKTsKKyNlbmRpZgorICAgIHJldHVybiAqQXRvbWljU3RyaW5nOjphZGRXaXRoU3RyaW5nVGFi
bGVQcm92aWRlcigqZXhlYywgcik7Cit9CitpbmxpbmUgUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVu
dGlmaWVyOjphZGQoVk0qIHZtLCBTdHJpbmdJbXBsKiByKQoreworI2lmbmRlZiBOREVCVUcKKyAg
ICBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUodm0pOworI2VuZGlmCisgICAgcmV0dXJuICpB
dG9taWNTdHJpbmc6OmFkZFdpdGhTdHJpbmdUYWJsZVByb3ZpZGVyKCp2bSwgcik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQ2FsbEZyYW1lSW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlUHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMTY1NzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29u
c29sZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNs
dWRlICJDb25zb2xlQ2xpZW50LmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25IZWxwZXJzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDb25zb2xlLmgiCiAjaW5jbHVkZSAiU2NyaXB0
QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlzaW9u
IDE2NTczOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0FTQ0lJ
RmFzdFBhdGguaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJsZS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogdXNpbmcgV1RGOjpUaHJlYWRTcGVjaWZp
YzsKQEAgLTQ4LDYyICs0OSwxNCBAQCB2b2lkIGRlbGV0ZUlkZW50aWZpZXJUYWJsZShJZGVudGlm
aWVyVGFiCiAgICAgZGVsZXRlIHRhYmxlOwogfQogCi1zdHJ1Y3QgSWRlbnRpZmllckFTQ0lJU3Ry
aW5nVHJhbnNsYXRvciB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgTENoYXIqIGMp
Ci0gICAgewotICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tU
b3A4Qml0cyhjKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBy
LCBjb25zdCBMQ2hhciogcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBJZGVudGlmaWVyOjplcXVh
bChyLCBzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbCom
IGxvY2F0aW9uLCBjb25zdCBMQ2hhciogYywgdW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAg
IHNpemVfdCBsZW5ndGggPSBzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYykp
OwotICAgICAgICBsb2NhdGlvbiA9ICZTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjKSwgbGVuZ3RoKS5sZWFrUmVmKCk7Ci0gICAgICAg
IGxvY2F0aW9uLT5zZXRIYXNoKGhhc2gpOwotICAgIH0KLX07Ci0KLXN0cnVjdCBJZGVudGlmaWVy
TENoYXJGcm9tVUNoYXJUcmFuc2xhdG9yIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBDaGFyQnVmZmVyPFVDaGFyPiYgYnVmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hh
c2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoYnVmLnMsIGJ1Zi5sZW5ndGgpOwotICAg
IH0KLSAgICAKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBzdHIsIGNvbnN0IENo
YXJCdWZmZXI8VUNoYXI+JiBidWYpCi0gICAgewotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6
ZXF1YWwoc3RyLCBidWYucywgYnVmLmxlbmd0aCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2
b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0IENoYXJCdWZmZXI8VUNo
YXI+JiBidWYsIHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICBMQ2hhciogZDsKLSAgICAg
ICAgU3RyaW5nSW1wbCYgciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmLmxl
bmd0aCwgZCkubGVha1JlZigpOwotICAgICAgICBXVEY6OmNvcHlMQ2hhcnNGcm9tVUNoYXJTb3Vy
Y2UoZCwgYnVmLnMsIGJ1Zi5sZW5ndGgpOwotICAgICAgICByLnNldEhhc2goaGFzaCk7Ci0gICAg
ICAgIGxvY2F0aW9uID0gJnI7Ci0gICAgfQotfTsKLQogUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVu
dGlmaWVyOjphZGQoVk0qIHZtLCBjb25zdCBjaGFyKiBjKQogewogICAgIEFTU0VSVChjKTsKICAg
ICBBU1NFUlQoY1swXSk7CiAgICAgaWYgKCFjWzFdKQotICAgICAgICByZXR1cm4gYWRkKHZtLCB2
bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjWzBdKSk7Ci0KLSAgICBJ
ZGVudGlmaWVyVGFibGUmIGlkZW50aWZpZXJUYWJsZSA9ICp2bS0+aWRlbnRpZmllclRhYmxlOwot
Ci0gICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBpZGVudGlm
aWVyVGFibGUuYWRkPGNvbnN0IExDaGFyKiwgSWRlbnRpZmllckFTQ0lJU3RyaW5nVHJhbnNsYXRv
cj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGMpKTsKLQotICAgIC8vIElmIHRoZSBz
dHJpbmcgaXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgotICAg
IC8vIFRoZSBib29sZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCi0gICAg
UmVmUHRyPFN0cmluZ0ltcGw+IGFkZGVkU3RyaW5nID0gYWRkUmVzdWx0LmlzTmV3RW50cnkgPyBh
ZG9wdFJlZigqYWRkUmVzdWx0Lml0ZXJhdG9yKSA6ICphZGRSZXN1bHQuaXRlcmF0b3I7CisgICAg
ICAgIHJldHVybiAqdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoY1sw
XSk7CiAKLSAgICByZXR1cm4gYWRkZWRTdHJpbmcucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1
cm4gKkF0b21pY1N0cmluZzo6YWRkKGMpOwogfQogCiBQYXNzUmVmPFN0cmluZ0ltcGw+IElkZW50
aWZpZXI6OmFkZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGMpCkBAIC0xMTcsNDIgKzcw
LDEyIEBAIFBhc3NSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkOChWTSoKICAgICAgICAg
VUNoYXIgYyA9IHNbMF07CiAgICAgICAgIEFTU0VSVChjIDw9IDB4ZmYpOwogICAgICAgICBpZiAo
Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpKQotICAgICAgICAgICAgcmV0dXJuIGFkZCh2
bSwgdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYykpOworICAgICAg
ICAgICAgcmV0dXJuICp2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChj
KTsKICAgICB9Ci0gICAgCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiAqU3RyaW5n
SW1wbDo6ZW1wdHkoKTsKLSAgICBDaGFyQnVmZmVyPFVDaGFyPiBidWYgPSB7IHMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsZW5ndGgpIH07Ci0gICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJl
c3VsdCBhZGRSZXN1bHQgPSB2bS0+aWRlbnRpZmllclRhYmxlLT5hZGQ8Q2hhckJ1ZmZlcjxVQ2hh
cj4sIElkZW50aWZpZXJMQ2hhckZyb21VQ2hhclRyYW5zbGF0b3IgPihidWYpOwotICAgIAotICAg
IC8vIElmIHRoZSBzdHJpbmcgaXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFk
b3B0IGl0LgotICAgIC8vIFRoZSBib29sZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQg
aXMgc28uCi0gICAgcmV0dXJuIGFkZFJlc3VsdC5pc05ld0VudHJ5ID8gYWRvcHRSZWYoKiphZGRS
ZXN1bHQuaXRlcmF0b3IpIDogKiphZGRSZXN1bHQuaXRlcmF0b3I7Ci19Ci0KLVBhc3NSZWY8U3Ry
aW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkU2xvd0Nhc2UoVk0qIHZtLCBTdHJpbmdJbXBsKiByKQot
ewotICAgIGlmIChyLT5pc0VtcHR5VW5pcXVlKCkpCi0gICAgICAgIHJldHVybiAqcjsKLSAgICBB
U1NFUlQoIXItPmlzSWRlbnRpZmllcigpKTsKLSAgICAvLyBUaGUgZW1wdHkgJiBudWxsIHN0cmlu
Z3MgYXJlIHN0YXRpYyBzaW5nbGV0b25zLCBhbmQgc3RhdGljIHN0cmluZ3MgYXJlIGhhbmRsZWQK
LSAgICAvLyBpbiA6OmFkZCgpIGluIHRoZSBoZWFkZXIsIHNvIHdlIHNob3VsZCBuZXZlciBnZXQg
aGVyZSB3aXRoIGEgemVybyBsZW5ndGggc3RyaW5nLgotICAgIEFTU0VSVChyLT5sZW5ndGgoKSk7
Ci0KLSAgICBpZiAoci0+bGVuZ3RoKCkgPT0gMSkgewotICAgICAgICBVQ2hhciBjID0gKCpyKVsw
XTsKLSAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQotICAgICAgICAg
ICAgciA9IHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGMpOwotICAg
ICAgICAgICAgaWYgKHItPmlzSWRlbnRpZmllcigpKQotICAgICAgICAgICAgICAgIHJldHVybiAq
cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gKip2bS0+aWRlbnRpZmllclRhYmxlLT5hZGQocikuaXRl
cmF0b3I7Ci19CiAKLVBhc3NSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkU2xvd0Nhc2Uo
RXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBsKiByKQotewotICAgIHJldHVybiBhZGRTbG93Q2Fz
ZSgmZXhlYy0+dm0oKSwgcik7CisgICAgcmV0dXJuICpBdG9taWNTdHJpbmc6OmFkZChzLCBsZW5n
dGgpOwogfQogCiBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50
aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVu
dGlmaWVyLmgJKHJldmlzaW9uIDE2NTczOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjEgKzM2LDIxIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgSWRlbnRpZmllcigpIHsgfQogICAgICAg
ICBlbnVtIEVtcHR5SWRlbnRpZmllckZsYWcgeyBFbXB0eUlkZW50aWZpZXIgfTsKLSAgICAgICAg
SWRlbnRpZmllcihFbXB0eUlkZW50aWZpZXJGbGFnKSA6IG1fc3RyaW5nKFN0cmluZ0ltcGw6OmVt
cHR5KCkpIHsgfQorICAgICAgICBJZGVudGlmaWVyKEVtcHR5SWRlbnRpZmllckZsYWcpIDogbV9z
dHJpbmcoU3RyaW5nSW1wbDo6ZW1wdHkoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0lk
ZW50aWZpZXIoKSk7IH0KIAogICAgICAgICAvLyBPbmx5IHRvIGJlIHVzZWQgd2l0aCBzdHJpbmcg
bGl0ZXJhbHMuCiAgICAgICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLSAg
ICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJz
KVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5nKGFkZChleGVjLCBjaGFyYWN0ZXJzKSkgeyB9
CisgICAgICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyICgmY2hhcmFj
dGVycylbY2hhcmFjdGVyc0NvdW50XSkgOiBtX3N0cmluZyhhZGQoZXhlYywgY2hhcmFjdGVycykp
IHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJZGVudGlmaWVyKCkpOyB9CiAgICAgICAgIHRl
bXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLSAgICAgICAgSWRlbnRpZmllcihWTSog
dm0sIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5n
KGFkZCh2bSwgY2hhcmFjdGVycykpIHsgfQorICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29u
c3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIDogbV9zdHJpbmcoYWRkKHZt
LCBjaGFyYWN0ZXJzKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0lkZW50aWZpZXIoKSk7
IH0KIAotICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogcmVw
KSA6IG1fc3RyaW5nKGFkZChleGVjLCByZXApKSB7IH0KLSAgICAgICAgSWRlbnRpZmllcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQoZXhlYywgcy5pbXBs
KCkpKSB7IH0KKyAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwq
IHJlcCkgOiBtX3N0cmluZyhhZGQoZXhlYywgcmVwKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgp
LT5pc0lkZW50aWZpZXIoKSk7IH0KKyAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQoZXhlYywgcy5pbXBsKCkpKSB7IEFTU0VS
VChtX3N0cmluZy5pbXBsKCktPmlzSWRlbnRpZmllcigpKTsgfQogCi0gICAgICAgIElkZW50aWZp
ZXIoVk0qIHZtLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0s
IHMsIGxlbmd0aCkpIHsgfQotICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgVUNoYXIq
IHMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgpKSB7IH0KLSAgICAg
ICAgSWRlbnRpZmllcihWTSogdm0sIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmluZyhhZGQodm0s
IHJlcCkpIHsgfSAKLSAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFN0cmluZyYgcykg
OiBtX3N0cmluZyhhZGQodm0sIHMuaW1wbCgpKSkgeyB9CisgICAgICAgIElkZW50aWZpZXIoVk0q
IHZtLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxl
bmd0aCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJZGVudGlmaWVyKCkpOyB9CisgICAg
ICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0
cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJZGVu
dGlmaWVyKCkpOyB9CisgICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBTdHJpbmdJbXBsKiByZXAp
IDogbV9zdHJpbmcoYWRkKHZtLCByZXApKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzSWRl
bnRpZmllcigpKTsgfQorICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBz
KSA6IG1fc3RyaW5nKGFkZCh2bSwgcy5pbXBsKCkpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCkt
PmlzSWRlbnRpZmllcigpKTsgfQogCiAgICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICAgICAgICAgU3RyaW5nSW1wbCogaW1wbCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLmltcGwoKTsgfQpAQCAtMTEwLDI3ICsxMTAsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkOChWTSosIGNv
bnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhUKTsK
IAotICAgICAgICBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiBleGVj
LCBTdHJpbmdJbXBsKiByKQotICAgICAgICB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAg
Y2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKGV4ZWMpOwotI2VuZGlmCi0gICAgICAgICAgICBp
ZiAoci0+aXNJZGVudGlmaWVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICpyOwotICAgICAg
ICAgICAgcmV0dXJuIGFkZFNsb3dDYXNlKGV4ZWMsIHIpOwotICAgICAgICB9Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGFkZChWTSogdm0sIFN0cmluZ0ltcGwqIHIpCi0gICAg
ICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBjaGVja0N1cnJlbnRJZGVudGlmaWVy
VGFibGUodm0pOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoci0+aXNJZGVudGlmaWVyKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuICpyOwotICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3dDYXNl
KHZtLCByKTsKLSAgICAgICAgfQotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQ
YXNzUmVmPFN0cmluZ0ltcGw+IGFkZFNsb3dDYXNlKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqIHIp
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBh
ZGRTbG93Q2FzZShWTSosIFN0cmluZ0ltcGwqIHIpOworICAgICAgICBzdGF0aWMgUGFzc1JlZjxT
dHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCogcik7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmPFN0cmluZ0ltcGw+IGFkZChWTSosIFN0cmluZ0ltcGwqIHIpOwogCiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJs
ZShFeGVjU3RhdGUqKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2hl
Y2tDdXJyZW50SWRlbnRpZmllclRhYmxlKFZNKik7CkBAIC0xNDgsNTEgKzEyOSwxNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdHJ1
Y3QgQ2hhckJ1ZmZlciB7Ci0gICAgICAgIGNvbnN0IFQqIHM7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBsZW5ndGg7Ci0gICAgfTsKLSAgICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBz
dHJ1Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yIHsKLSAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ2hhckJ1ZmZlcjxUPiYgYnVmKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhidWYu
cywgYnVmLmxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKFN0cmluZ0ltcGwqIHN0ciwgY29uc3QgQ2hhckJ1ZmZlcjxUPiYgYnVmKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoc3RyLCBidWYucywgYnVm
Lmxlbmd0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3Ry
aW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBDaGFyQnVmZmVyPFQ+JiBidWYsIHVuc2lnbmVkIGhh
c2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFQqIGQ7Ci0gICAgICAgICAgICBTdHJpbmdJbXBs
JiByID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChidWYubGVuZ3RoLCBkKS5sZWFr
UmVmKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGJ1Zi5sZW5ndGg7
IGkrKykKLSAgICAgICAgICAgICAgICBkW2ldID0gYnVmLnNbaV07Ci0gICAgICAgICAgICByLnNl
dEhhc2goaGFzaCk7Ci0gICAgICAgICAgICBsb2NhdGlvbiA9ICZyOwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIFBhc3NSZWY8U3RyaW5nSW1wbD4g
SWRlbnRpZmllcjo6YWRkKFZNKiB2bSwgY29uc3QgVCogcywgaW50IGxlbmd0aCkKICAgICB7CiAg
ICAgICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICAgICAgVCBjID0gc1swXTsKICAgICAg
ICAgICAgIGlmIChjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYykpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGFkZCh2bSwgdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdS
ZXAoYykpOworICAgICAgICAgICAgICAgIHJldHVybiAqdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdSZXAoYyk7CiAgICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIGlmICgh
bGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuICpTdHJpbmdJbXBsOjplbXB0eSgpOwotICAgICAg
ICBDaGFyQnVmZmVyPFQ+IGJ1ZiA9IHsgcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkg
fTsKLSAgICAgICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSB2
bS0+aWRlbnRpZmllclRhYmxlLT5hZGQ8Q2hhckJ1ZmZlcjxUPiwgSWRlbnRpZmllckNoYXJCdWZm
ZXJUcmFuc2xhdG9yPFQ+PihidWYpOwogICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIHN0cmlu
ZyBpcyBuZXdseS10cmFuc2xhdGVkLCB0aGVuIHdlIG5lZWQgdG8gYWRvcHQgaXQuCi0gICAgICAg
IC8vIFRoZSBib29sZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCi0gICAg
ICAgIHJldHVybiBhZGRSZXN1bHQuaXNOZXdFbnRyeSA/IGFkb3B0UmVmKCoqYWRkUmVzdWx0Lml0
ZXJhdG9yKSA6ICoqYWRkUmVzdWx0Lml0ZXJhdG9yOworICAgICAgICByZXR1cm4gKkF0b21pY1N0
cmluZzo6YWRkKHMsIGxlbmd0aCk7CiAgICAgfQogCiAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBJZGVudGlmaWVyJiBiKQpAQCAtMjU2LDE0ICsy
MDMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmlu
Z0ltcGw+LCBpbnQsIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxTdHJpbmdJ
bXBsPj4sIElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM+IElkZW50aWZpZXJNYXA7CiAgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZ0ltcGwqLCBpbnQsIElkZW50aWZpZXJSZXBIYXNoLCBIYXNo
VHJhaXRzPFN0cmluZ0ltcGwqPiwgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cz4gQm9ycm93
ZWRJZGVudGlmaWVyTWFwOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4K
LSAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IElkZW50aWZpZXJUYWJsZTo6YWRk
KFUgdmFsdWUpCi0gICAgewotICAgICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1fdGFibGUuYWRkPFY+KHZhbHVlKTsKLSAgICAgICAgKCpyZXN1bHQuaXRlcmF0
b3IpLT5zZXRJc0lkZW50aWZpZXIodHJ1ZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkocmV2aXNpb24gMTY1NzM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1dURlRocmVhZERhdGEuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ5LDcgKzUwLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gRHJvcEFsbExvY2tzIG9iamVjdCB0YWtlcyBjYXJl
IHRvIHJlbGVhc2UgdGhlIEpTTG9jayBvbmx5IGlmIHlvdXIKICAgICAvLyB0aHJlYWQgYWNxdWly
ZWQgaXQgdG8gYmVnaW4gd2l0aC4KIAotICAgIGNsYXNzIElkZW50aWZpZXJUYWJsZTsKICAgICBj
bGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgVk07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAJKHJldmlzaW9uIDE2
NTczOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLQogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkocmV2aXNpb24gMTY1NzM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTksNiArNTksNyBAQCBTbWFsbFN0cmluZ3NTdG9yYWdlOjpTbWFsbFN0cmluZ3NTdG9yYWdl
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpbmdsZUNoYXJhY3RlclN0cmluZ0NvdW50
OyArK2kpIHsKICAgICAgICAgY2hhcmFjdGVyQnVmZmVyW2ldID0gaTsKICAgICAgICAgbV9yZXBz
W2ldID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoYmFzZVN0cmluZywg
aSwgMSk7CisgICAgICAgIG1fcmVwc1tpXSA9IEF0b21pY1N0cmluZzo6YWRkKG1fcmVwc1tpXS5n
ZXQoKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CShyZXZpc2lvbiAxNjU3MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlw
ZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBwcm9taXNlQ29uc3RydWN0b3JUYWJsZShhZG9w
dFB0cihuZXcgSGFzaFRhYmxlKEpTQzo6cHJvbWlzZUNvbnN0cnVjdG9yVGFibGUpKSkKICNlbmRp
ZgogICAgICwgaWRlbnRpZmllclRhYmxlKHZtVHlwZSA9PSBEZWZhdWx0ID8gd3RmVGhyZWFkRGF0
YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSA6IGNyZWF0ZUlkZW50aWZpZXJUYWJsZSgpKQot
ICAgICwgcHJvcGVydHlOYW1lcyhuZXcgQ29tbW9uSWRlbnRpZmllcnModGhpcykpCisgICAgLCBw
cm9wZXJ0eU5hbWVzKDApCiAgICAgLCBlbXB0eUxpc3QobmV3IE1hcmtlZEFyZ3VtZW50QnVmZmVy
KQogICAgICwgcGFyc2VyQXJlbmEoYWRvcHRQdHIobmV3IFBhcnNlckFyZW5hKSkKICAgICAsIGtl
eXdvcmRzKGFkb3B0UHRyKG5ldyBLZXl3b3JkcygqdGhpcykpKQpAQCAtMjQ2LDYgKzI0Niw3IEBA
IFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAvLyBOZWVkIHRv
IGJlIGNhcmVmdWwgdG8ga2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQgaGVyZQogICAgIEpTTG9j
a0hvbGRlciBsb2NrKHRoaXMpOwogICAgIElkZW50aWZpZXJUYWJsZSogZXhpc3RpbmdFbnRyeUlk
ZW50aWZpZXJUYWJsZSA9IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxl
KGlkZW50aWZpZXJUYWJsZSk7CisgICAgcHJvcGVydHlOYW1lcyA9IG5ldyBDb21tb25JZGVudGlm
aWVycyh0aGlzKTsKICAgICBzdHJ1Y3R1cmVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmU6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcykpOwogICAgIHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJl
LnNldCgqdGhpcywgU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBE
ZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTY1NzM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNzcs
NyArNzcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xh
c3MgSGFuZGxlU3RhY2s7CiAgICAgY2xhc3MgSWRlbnRpZmllcjsKLSAgICBjbGFzcyBJZGVudGlm
aWVyVGFibGU7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmpl
Y3Q7CiAgICAgY2xhc3MgSlNPYmplY3Q7CkBAIC0yOTQsNiArMjkzLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIERhdGVJbnN0YW5jZUNhY2hlIGRhdGVJbnN0YW5jZUNhY2hlOwogICAgICAg
ICBXVEY6OlNpbXBsZVN0YXRzIG1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNl
bGluZUpJVDsKIAorICAgICAgICBJZGVudGlmaWVyVGFibGUqIGF0b21pY1N0cmluZ1RhYmxlKCkg
Y29uc3QgeyByZXR1cm4gaWRlbnRpZmllclRhYmxlOyB9CisKICAgICAgICAgdm9pZCBzZXRJbkRl
ZmluZU93blByb3BlcnR5KGJvb2wgaW5EZWZpbmVPd25Qcm9wZXJ0eSkKICAgICAgICAgewogICAg
ICAgICAgICAgbV9pbkRlZmluZU93blByb3BlcnR5ID0gaW5EZWZpbmVPd25Qcm9wZXJ0eTsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1dURlRocmVhZERhdGEuY3BwCShyZXZpc2lvbiAxNjU3MzkpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTAgKzQzLDcg
QEAgV1RGVGhyZWFkRGF0YTo6V1RGVGhyZWFkRGF0YSgpCiAgICAgOiBtX2FwaURhdGEoMCkKICAg
ICAsIG1fYXRvbWljU3RyaW5nVGFibGUoMCkKICAgICAsIG1fYXRvbWljU3RyaW5nVGFibGVEZXN0
cnVjdG9yKDApCi0jaWYgIVVTRShXRUJfVEhSRUFEKQotICAgICwgbV9kZWZhdWx0SWRlbnRpZmll
clRhYmxlKG5ldyBKU0M6OklkZW50aWZpZXJUYWJsZSgpKQotICAgICwgbV9jdXJyZW50SWRlbnRp
ZmllclRhYmxlKG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZSkKLSNlbmRpZgorICAgICwgbV9jdXJy
ZW50SWRlbnRpZmllclRhYmxlKDApCiAgICAgLCBtX3N0YWNrQm91bmRzKFN0YWNrQm91bmRzOjpj
dXJyZW50VGhyZWFkU3RhY2tCb3VuZHMoKSkKICNpZiBFTkFCTEUoU1RBQ0tfU1RBVFMpCiAgICAg
LCBtX3N0YWNrU3RhdHMoKQpAQCAtNTQsMjMgKzUxLDE0IEBAIFdURlRocmVhZERhdGE6OldURlRo
cmVhZERhdGEoKQogICAgICwgbV9zYXZlZFN0YWNrUG9pbnRlckF0Vk1FbnRyeSgwKQogICAgICwg
bV9zYXZlZExhc3RTdGFja1RvcChzdGFjaygpLm9yaWdpbigpKQogewotI2lmIFVTRShXRUJfVEhS
RUFEKQotICAgIHN0YXRpYyBKU0M6OklkZW50aWZpZXJUYWJsZSogc2hhcmVkSWRlbnRpZmllclRh
YmxlID0gbmV3IEpTQzo6SWRlbnRpZmllclRhYmxlKCk7Ci0gICAgaWYgKHB0aHJlYWRfbWFpbl9u
cCgpIHx8IGlzV2ViVGhyZWFkKCkpCi0gICAgICAgIG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZSA9
IHNoYXJlZElkZW50aWZpZXJUYWJsZTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGVmYXVsdElkZW50
aWZpZXJUYWJsZSA9IG5ldyBKU0M6OklkZW50aWZpZXJUYWJsZSgpOwotCi0gICAgbV9jdXJyZW50
SWRlbnRpZmllclRhYmxlID0gbV9kZWZhdWx0SWRlbnRpZmllclRhYmxlOwotI2VuZGlmCiAgICAg
QXRvbWljU3RyaW5nVGFibGU6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV9jdXJyZW50SWRlbnRpZmll
clRhYmxlID0gbV9hdG9taWNTdHJpbmdUYWJsZTsKIH0KIAogV1RGVGhyZWFkRGF0YTo6fldURlRo
cmVhZERhdGEoKQogewogICAgIGlmIChtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcikKICAg
ICAgICAgbV9hdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3IobV9hdG9taWNTdHJpbmdUYWJsZSk7
Ci0gICAgZGVsZXRlIG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZTsKIH0KIAogI2lmIFVTRShQVEhS
RUFEX0dFVFNQRUNJRklDX0RJUkVDVCkKQEAgLTg2LDIxICs3NCwzIEBAIFdURlRocmVhZERhdGEm
IFdURlRocmVhZERhdGE6OmNyZWF0ZUFuZFIKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLUlkZW50aWZpZXJUYWJsZTo6fklkZW50aWZpZXJUYWJsZSgp
Ci17Ci0gICAgSGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGVuZCA9IG1fdGFibGUuZW5k
KCk7Ci0gICAgZm9yIChIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXRlciA9IG1fdGFi
bGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+c2V0SXNJ
ZGVudGlmaWVyKGZhbHNlKTsKLX0KLQotSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBJ
ZGVudGlmaWVyVGFibGU6OmFkZChTdHJpbmdJbXBsKiB2YWx1ZSkKLXsKLSAgICBIYXNoU2V0PFN0
cmluZ0ltcGwqPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fdGFibGUuYWRkKHZhbHVlKTsKLSAgICAo
KnJlc3VsdC5pdGVyYXRvciktPnNldElzSWRlbnRpZmllcih0cnVlKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1dURlRo
cmVhZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgJ
KHJldmlzaW9uIDE2NTczOSkKKysrIFNvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksMjggKzQ5LDEwIEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgogI2VuZGlmCiAKLS8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGxheWVyaW5nIHZpb2xh
dGlvbiB1bnRpbCB3ZSBtb3ZlIG1vcmUgb2YgdGhlIHN0cmluZyBjb2RlIGZyb20gSmF2YVNjcmlw
dENvcmUgdG8gV1RGLgotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIElkZW50aWZpZXJUYWJsZSB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIH5JZGVudGlmaWVyVGFibGUoKTsKLQotICAgIFdURl9FWFBPUlRfUFJJVkFURSBIYXNo
U2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IGFkZChTdHJpbmdJbXBsKik7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3Vs
dCBhZGQoVSk7Ci0KLSAgICBib29sIHJlbW92ZShTdHJpbmdJbXBsKiBpZGVudGlmaWVyKSB7IHJl
dHVybiBtX3RhYmxlLnJlbW92ZShpZGVudGlmaWVyKTsgfQotCi1wcml2YXRlOgotICAgIEhhc2hT
ZXQ8U3RyaW5nSW1wbCo+IG1fdGFibGU7Ci19OwotCi19Ci0KIG5hbWVzcGFjZSBXVEYgewogCiBj
bGFzcyBBdG9taWNTdHJpbmdUYWJsZTsKK3R5cGVkZWYgQXRvbWljU3RyaW5nVGFibGUgSWRlbnRp
ZmllclRhYmxlOwogCiB0eXBlZGVmIHZvaWQgKCpBdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3Ip
KEF0b21pY1N0cmluZ1RhYmxlKik7CiAKQEAgLTgyLDI0ICs2NCwyNCBAQCBwdWJsaWM6CiAKICAg
ICBBdG9taWNTdHJpbmdUYWJsZSogYXRvbWljU3RyaW5nVGFibGUoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fYXRvbWljU3RyaW5nVGFibGU7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRJZGVu
dGlmaWVyVGFibGU7CiAgICAgfQogCi0gICAgSlNDOjpJZGVudGlmaWVyVGFibGUqIGN1cnJlbnRJ
ZGVudGlmaWVyVGFibGUoKQorICAgIElkZW50aWZpZXJUYWJsZSogY3VycmVudElkZW50aWZpZXJU
YWJsZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9jdXJyZW50SWRlbnRpZmllclRhYmxlOwog
ICAgIH0KIAotICAgIEpTQzo6SWRlbnRpZmllclRhYmxlKiBzZXRDdXJyZW50SWRlbnRpZmllclRh
YmxlKEpTQzo6SWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGUpCisgICAgSWRlbnRpZmll
clRhYmxlKiBzZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKElkZW50aWZpZXJUYWJsZSogaWRlbnRp
ZmllclRhYmxlKQogICAgIHsKLSAgICAgICAgSlNDOjpJZGVudGlmaWVyVGFibGUqIG9sZElkZW50
aWZpZXJUYWJsZSA9IG1fY3VycmVudElkZW50aWZpZXJUYWJsZTsKKyAgICAgICAgSWRlbnRpZmll
clRhYmxlKiBvbGRJZGVudGlmaWVyVGFibGUgPSBtX2N1cnJlbnRJZGVudGlmaWVyVGFibGU7CiAg
ICAgICAgIG1fY3VycmVudElkZW50aWZpZXJUYWJsZSA9IGlkZW50aWZpZXJUYWJsZTsKICAgICAg
ICAgcmV0dXJuIG9sZElkZW50aWZpZXJUYWJsZTsKICAgICB9CiAKICAgICB2b2lkIHJlc2V0Q3Vy
cmVudElkZW50aWZpZXJUYWJsZSgpCiAgICAgewotICAgICAgICBtX2N1cnJlbnRJZGVudGlmaWVy
VGFibGUgPSBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGU7CisgICAgICAgIG1fY3VycmVudElkZW50
aWZpZXJUYWJsZSA9IG1fYXRvbWljU3RyaW5nVGFibGU7CiAgICAgfQogCiAgICAgY29uc3QgU3Rh
Y2tCb3VuZHMmIHN0YWNrKCkKQEAgLTE0NSw4ICsxMjcsNyBAQCBwcml2YXRlOgogICAgIEF0b21p
Y1N0cmluZ1RhYmxlKiBtX2F0b21pY1N0cmluZ1RhYmxlOwogICAgIEF0b21pY1N0cmluZ1RhYmxl
RGVzdHJ1Y3RvciBtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcjsKIAotICAgIEpTQzo6SWRl
bnRpZmllclRhYmxlKiBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGU7Ci0gICAgSlNDOjpJZGVudGlm
aWVyVGFibGUqIG1fY3VycmVudElkZW50aWZpZXJUYWJsZTsKKyAgICBJZGVudGlmaWVyVGFibGUq
IG1fY3VycmVudElkZW50aWZpZXJUYWJsZTsKICAgICBTdGFja0JvdW5kcyBtX3N0YWNrQm91bmRz
OwogI2lmIEVOQUJMRShTVEFDS19TVEFUUykKICAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0
cyBtX3N0YWNrU3RhdHM7CkBAIC0xODgsNSArMTY5LDYgQEAgaW5saW5lIFdURlRocmVhZERhdGEm
IHd0ZlRocmVhZERhdGEoKQogCiB1c2luZyBXVEY6OldURlRocmVhZERhdGE7CiB1c2luZyBXVEY6
Ond0ZlRocmVhZERhdGE7Cit1c2luZyBXVEY6OklkZW50aWZpZXJUYWJsZTsKIAogI2VuZGlmIC8v
IFdURlRocmVhZERhdGFfaApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAko
cmV2aXNpb24gMTY1NzM5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNiArNDE0LDI0IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gQXRvbWljU3RyaW5nOjphZGQKICAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvcjsKIH0K
IAorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFkZFNsb3dDYXNlKEF0b21p
Y1N0cmluZ1RhYmxlKiBzdHJpbmdUYWJsZSwgU3RyaW5nSW1wbCogc3RyaW5nKQoreworICAgIGlm
ICghc3RyaW5nLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7
CisKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzdHJpbmctPmlzQXRvbWljKCksICJBdG9taWNT
dHJpbmcgc2hvdWxkIG5vdCBoaXQgdGhlIHNsb3cgY2FzZSBpZiB0aGUgc3RyaW5nIGlzIGFscmVh
ZHkgYXRvbWljLiIpOworCisgICAgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOworICAg
IEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gc3RyaW5nVGFibGUt
PnRhYmxlKCkuYWRkKHN0cmluZyk7CisKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsK
KyAgICAgICAgQVNTRVJUKCphZGRSZXN1bHQuaXRlcmF0b3IgPT0gc3RyaW5nKTsKKyAgICAgICAg
c3RyaW5nLT5zZXRJc0F0b21pYyh0cnVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gKmFkZFJlc3Vs
dC5pdGVyYXRvcjsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHN0YXRp
YyBpbmxpbmUgSGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGZpbmRTdHJpbmcoY29uc3Qg
U3RyaW5nSW1wbCogc3RyaW5nSW1wbCkKIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bWljU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJp
bmcuaAkocmV2aXNpb24gMTY1NzM5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV1RGIHsK
IAorY2xhc3MgQXRvbWljU3RyaW5nVGFibGU7CiBzdHJ1Y3QgQXRvbWljU3RyaW5nSGFzaDsKIAog
Y2xhc3MgQXRvbWljU3RyaW5nIHsKQEAgLTE2OCwxMiArMTY5LDYgQEAgcHVibGljOgogICAgIHZv
aWQgc2hvdygpIGNvbnN0OwogI2VuZGlmCiAKLXByaXZhdGU6Ci0gICAgLy8gVGhlIGV4cGxpY2l0
IGNvbnN0cnVjdG9ycyB3aXRoIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwgbXVz
dCBiZSB1c2VkIGZvciBsaXRlcmFscy4KLSAgICBBdG9taWNTdHJpbmcoQVNDSUlMaXRlcmFsKTsK
LQotICAgIFN0cmluZyBtX3N0cmluZzsKLSAgICAKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
c3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKGNvbnN0IExDaGFyKik7CiAgICAgQUxX
QVlTX0lOTElORSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgY2hhciog
cykgeyByZXR1cm4gYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSk7IH07CiAg
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFk
ZChjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CkBAIC0xODUsMTcgKzE4MCwzNSBAQCBw
cml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
YWRkKFN0cmluZ0ltcGwqIHN0cmluZykKICAgICB7CiAgICAgICAgIGlmICghc3RyaW5nIHx8IHN0
cmluZy0+aXNBdG9taWMoKSkgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc3Ry
aW5nIHx8IGlzSW5BdG9taWNTdHJpbmdUYWJsZShzdHJpbmcpLCAiVGhlIGF0b21pYyBzdHJpbmcg
Y29tZXMgZnJvbSBhbiBvdGhlciB0aHJlYWQhIik7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKCFzdHJpbmcgfHwgc3RyaW5nID09IFN0cmluZ0ltcGw6OmVtcHR5KCkgfHwgaXNJbkF0
b21pY1N0cmluZ1RhYmxlKHN0cmluZyksICJUaGUgYXRvbWljIHN0cmluZyBjb21lcyBmcm9tIGFu
IG90aGVyIHRocmVhZCEiKTsKICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIGFkZFNsb3dDYXNlKHN0cmluZyk7CiAgICAgfQogICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGRGcm9tTGl0ZXJh
bERhdGEoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkU2xvd0Nh
c2UoU3RyaW5nSW1wbCopOwogI2lmIFVTRShDRikKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
c3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKENGU3RyaW5nUmVmKTsKICNlbmRpZgog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVGFibGVQcm92aWRlcj4KKyAgICBBTFdBWVNf
SU5MSU5FIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZFdpdGhTdHJpbmdUYWJsZVBy
b3ZpZGVyKFN0cmluZ1RhYmxlUHJvdmlkZXImIHN0cmluZ1RhYmxlUHJvdmlkZXIsIFN0cmluZ0lt
cGwqIHN0cmluZykKKyAgICB7CisgICAgICAgIGlmICghc3RyaW5nIHx8IHN0cmluZy0+aXNBdG9t
aWMoKSkgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc3RyaW5nIHx8IHN0cmlu
ZyA9PSBTdHJpbmdJbXBsOjplbXB0eSgpIHx8IGlzSW5BdG9taWNTdHJpbmdUYWJsZShzdHJpbmcp
LCAiVGhlIGF0b21pYyBzdHJpbmcgY29tZXMgZnJvbSBhbiBvdGhlciB0aHJlYWQhIik7CisgICAg
ICAgICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhZGRTbG93
Q2FzZShzdHJpbmdUYWJsZVByb3ZpZGVyLmF0b21pY1N0cmluZ1RhYmxlKCksIHN0cmluZyk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIC8vIFRoZSBleHBsaWNpdCBjb25zdHJ1Y3RvcnMgd2l0aCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsIG11c3QgYmUgdXNlZCBmb3IgbGl0ZXJh
bHMuCisgICAgQXRvbWljU3RyaW5nKEFTQ0lJTGl0ZXJhbCk7CisKKyAgICBTdHJpbmcgbV9zdHJp
bmc7CisgICAgCisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IGFkZFNsb3dDYXNlKFN0cmluZ0ltcGwqKTsKKyAgICBXVEZfRVhQT1JUX1NUUklO
R19BUEkgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkU2xvd0Nhc2UoQXRvbWljU3Ry
aW5nVGFibGUqLCBTdHJpbmdJbXBsKik7CisKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3Rh
dGljIEF0b21pY1N0cmluZ0ltcGwqIGZpbmRTbG93Q2FzZShTdHJpbmdJbXBsJik7CiAgICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBBdG9taWNTdHJpbmcgZnJvbVVURjhJbnRlcm5hbChj
b25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21pY1N0cmluZ1RhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21pY1N0cmluZ1RhYmxlLmNwcAkocmV2aXNpb24gMTY1NzM5KQorKysgU291cmNlL1dURi93dGYv
dGV4dC9BdG9taWNTdHJpbmdUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDExICs1MSwx
NCBAQCB2b2lkIEF0b21pY1N0cmluZ1RhYmxlOjpjcmVhdGUoV1RGVGhyZWFkCiAjZW5kaWYgLy8g
VVNFKFdFQl9USFJFQUQpCiB9CiAKK0F0b21pY1N0cmluZ1RhYmxlOjp+QXRvbWljU3RyaW5nVGFi
bGUoKQoreworICAgIGZvciAoYXV0byBpdGVyIDogbV90YWJsZSkKKyAgICAgICAgaXRlci0+c2V0
SXNBdG9taWMoZmFsc2UpOworfQorCiB2b2lkIEF0b21pY1N0cmluZ1RhYmxlOjpkZXN0cm95KEF0
b21pY1N0cmluZ1RhYmxlKiB0YWJsZSkKIHsKLSAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRl
cmF0b3IgZW5kID0gdGFibGUtPm1fdGFibGUuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFN0cmlu
Z0ltcGwqPjo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5tX3RhYmxlLmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPnNldElzQXRvbWljKGZhbHNlKTsKICAgICBk
ZWxldGUgdGFibGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5n
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ1Rh
YmxlLmgJKHJldmlzaW9uIDE2NTczOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3Ry
aW5nVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQCBjbGFzcyBTdHJpbmdJ
bXBsOwogY2xhc3MgQXRvbWljU3RyaW5nVGFibGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgorICAgIH5BdG9taWNTdHJpbmdUYWJsZSgpOwogCiAgICAgc3RhdGljIHZv
aWQgY3JlYXRlKFdURlRocmVhZERhdGEmKTsKICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPiYgdGFi
bGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5j
cHAJKHJldmlzaW9uIDE2NTczOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwxMCArMTE1LDYgQEAgU3RyaW5nSW1wbDo6flN0cmlu
Z0ltcGwoKQogCiAgICAgaWYgKGlzQXRvbWljKCkpCiAgICAgICAgIEF0b21pY1N0cmluZzo6cmVt
b3ZlKHRoaXMpOwotICAgIGlmIChpc0lkZW50aWZpZXIoKSkgewotICAgICAgICBpZiAoIXd0ZlRo
cmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCktPnJlbW92ZSh0aGlzKSkKLSAgICAg
ICAgICAgIENSQVNIKCk7Ci0gICAgfQogCiAgICAgQnVmZmVyT3duZXJzaGlwIG93bmVyc2hpcCA9
IGJ1ZmZlck93bmVyc2hpcCgpOwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2
aXNpb24gMTY1NzM5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDE0ICs0NCw5IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZTdHJp
bmcgKiBDRlN0cmkKIEBjbGFzcyBOU1N0cmluZzsKICNlbmRpZgogCi0vLyBGSVhNRTogVGhpcyBp
cyBhIHRlbXBvcmFyeSBsYXllcmluZyB2aW9sYXRpb24gd2hpbGUgd2UgbW92ZSBzdHJpbmcgY29k
ZSB0byBXVEYuCi0vLyBMYW5kaW5nIHRoZSBmaWxlIG1vdmVzIGluIG9uZSBwYXRjaCwgd2lsbCBm
b2xsb3cgb24gd2l0aCBwYXRjaGVzIHRvIGNoYW5nZSB0aGUgbmFtZXNwYWNlcy4KIG5hbWVzcGFj
ZSBKU0Mgewotc3RydWN0IElkZW50aWZpZXJBU0NJSVN0cmluZ1RyYW5zbGF0b3I7CiBuYW1lc3Bh
Y2UgTExJbnQgeyBjbGFzcyBEYXRhOyB9CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IElkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRv
cjsKLXN0cnVjdCBJZGVudGlmaWVyTENoYXJGcm9tVUNoYXJUcmFuc2xhdG9yOwogfQogCiBuYW1l
c3BhY2UgV1RGIHsKQEAgLTEzMiwxMCArMTI3LDYgQEAgc3RydWN0IFN0cmluZ1N0YXRzIHsKIAog
Y2xhc3MgU3RyaW5nSW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nSW1wbCk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlm
aWVyQVNDSUlTdHJpbmdUcmFuc2xhdG9yOwotICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlm
aWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I8TENoYXI+OwotICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJ
ZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I8VUNoYXI+OwotICAgIGZyaWVuZCBzdHJ1Y3Qg
SlNDOjpJZGVudGlmaWVyTENoYXJGcm9tVUNoYXJUcmFuc2xhdG9yOwogICAgIGZyaWVuZCBzdHJ1
Y3QgV1RGOjpDU3RyaW5nVHJhbnNsYXRvcjsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBmcmllbmQgc3RydWN0IFdURjo6SGFzaEFuZENoYXJhY3RlcnNUcmFuc2xhdG9yOwog
ICAgIGZyaWVuZCBzdHJ1Y3QgV1RGOjpIYXNoQW5kVVRGOENoYXJhY3RlcnNUcmFuc2xhdG9yOwpA
QCAtMTYyLDggKzE1MywxMCBAQCBwcml2YXRlOgogICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZD
b3VudEZsYWdJc1N0YXRpY1N0cmluZykKICAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAg
ICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykKLSAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhzX2hh
c2hGbGFnSXNJZGVudGlmaWVyIHwgQnVmZmVyT3duZWQpCisgICAgICAgICwgbV9oYXNoQW5kRmxh
Z3Moc19oYXNoRmxhZ0lzQXRvbWljIHwgQnVmZmVyT3duZWQpCiAgICAgeworICAgICAgICBBU1NF
UlQoIWxlbmd0aCk7CisKICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhc2ggaXMgY29tcHV0
ZWQgc28gdGhhdCBBdG9taWNTdHJpbmdIYXNoIGNhbiBjYWxsIGV4aXN0aW5nSGFzaCgpCiAgICAg
ICAgIC8vIHdpdGggaW1wdW5pdHkuIFRoZSBlbXB0eSBzdHJpbmcgaXMgc3BlY2lhbCBiZWNhdXNl
IGl0IGlzIG5ldmVyIGVudGVyZWQgaW50bwogICAgICAgICAvLyBBdG9taWNTdHJpbmcncyBIYXNo
S2V5LCBidXQgc3RpbGwgbmVlZHMgdG8gY29tcGFyZSBjb3JyZWN0bHkuCkBAIC0xNzksOCArMTcy
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50RmxhZ0lzU3Rh
dGljU3RyaW5nKQogICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAgICAgLCBtX2RhdGE4
KGNoYXJhY3RlcnMpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZm
ZXIgfCBzX2hhc2hGbGFnSXNJZGVudGlmaWVyIHwgQnVmZmVyT3duZWQpCisgICAgICAgICwgbV9o
YXNoQW5kRmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBzX2hhc2hGbGFnSXNBdG9taWMgfCBC
dWZmZXJPd25lZCkKICAgICB7CisgICAgICAgIEFTU0VSVCghbGVuZ3RoKTsKKwogICAgICAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgaGFzaCBpcyBjb21wdXRlZCBzbyB0aGF0IEF0b21pY1N0cmluZ0hh
c2ggY2FuIGNhbGwgZXhpc3RpbmdIYXNoKCkKICAgICAgICAgLy8gd2l0aCBpbXB1bml0eS4gVGhl
IGVtcHR5IHN0cmluZyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgaXMgbmV2ZXIgZW50ZXJlZCBpbnRv
CiAgICAgICAgIC8vIEF0b21pY1N0cmluZydzIEhhc2hLZXksIGJ1dCBzdGlsbCBuZWVkcyB0byBj
b21wYXJlIGNvcnJlY3RseS4KQEAgLTQyOSw3ICs0MjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgdW5zaWduZWQgZmxhZ3NPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RyaW5n
SW1wbCwgbV9oYXNoQW5kRmxhZ3MpOyB9CiAgICAgc3RhdGljIHVuc2lnbmVkIGZsYWdJczhCaXQo
KSB7IHJldHVybiBzX2hhc2hGbGFnOEJpdEJ1ZmZlcjsgfQotICAgIHN0YXRpYyB1bnNpZ25lZCBm
bGFnSXNJZGVudGlmaWVyKCkgeyByZXR1cm4gc19oYXNoRmxhZ0lzSWRlbnRpZmllcjsgfQorICAg
IHN0YXRpYyB1bnNpZ25lZCBmbGFnSXNBdG9taWMoKSB7IHJldHVybiBzX2hhc2hGbGFnSXNBdG9t
aWM7IH0KICAgICBzdGF0aWMgdW5zaWduZWQgZGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTdHJpbmdJbXBsLCBtX2RhdGE4KTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhclR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
PgpAQCAtNDk3LDE4ICs0OTIsMTIgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXMxNkJpdFNoYWRv
dygpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEFuZEZsYWdzICYgc19oYXNoRmxhZ0hhczE2Qml0U2hh
ZG93OyB9CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgdXBjb252ZXJ0Q2hhcmFjdGVy
cyh1bnNpZ25lZCwgdW5zaWduZWQpIGNvbnN0OwotICAgIGJvb2wgaXNJZGVudGlmaWVyKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hGbGFnSXNJZGVudGlmaWVyOyB9Ci0g
ICAgYm9vbCBpc0lkZW50aWZpZXJPclVuaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzSWRlbnRpZmll
cigpIHx8IGlzRW1wdHlVbmlxdWUoKTsgfQotICAgIHZvaWQgc2V0SXNJZGVudGlmaWVyKGJvb2wg
aXNJZGVudGlmaWVyKQorICAgIGJvb2wgaXNJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gaXNB
dG9taWMoKTsgfQorICAgIGJvb2wgaXNJZGVudGlmaWVyT3JVbmlxdWUoKSBjb25zdAogICAgIHsK
LSAgICAgICAgQVNTRVJUKCFpc1N0YXRpYygpKTsKLSAgICAgICAgQVNTRVJUKCFpc0VtcHR5VW5p
cXVlKCkpOwotICAgICAgICBpZiAoaXNJZGVudGlmaWVyKQotICAgICAgICAgICAgbV9oYXNoQW5k
RmxhZ3MgfD0gc19oYXNoRmxhZ0lzSWRlbnRpZmllcjsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9oYXNoQW5kRmxhZ3MgJj0gfnNfaGFzaEZsYWdJc0lkZW50aWZpZXI7CisgICAgICAgIEFT
U0VSVCgoaXNJZGVudGlmaWVyKCkgfHwgaXNFbXB0eVVuaXF1ZSgpKSA9PSAoaXNJZGVudGlmaWVy
KCkgfHwgIW1fbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiBpc0lkZW50aWZpZXIoKSB8fCAhbV9s
ZW5ndGg7CiAgICAgfQotCiAgICAgYm9vbCBpc0VtcHR5VW5pcXVlKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiAhbGVuZ3RoKCkgJiYgIWlzU3RhdGljKCk7CkBAIC04MzgsNyArODI3LDYg
QEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZzhCaXRCdWZm
ZXIgPSAxdSA8PCA1OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnSXNBdG9t
aWMgPSAxdSA8PCA0OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnRGlkUmVw
b3J0Q29zdCA9IDF1IDw8IDM7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdJ
c0lkZW50aWZpZXIgPSAxdSA8PCAyOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hN
YXNrQnVmZmVyT3duZXJzaGlwID0gMXUgfCAoMXUgPDwgMSk7CiAKICNpZmRlZiBTVFJJTkdfU1RB
VFMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226997</attachid>
            <date>2014-03-17 18:48:48 -0700</date>
            <delta_ts>2014-03-19 14:58:55 -0700</delta_ts>
            <desc>New fix</desc>
            <filename>128624.7.patch</filename>
            <type>text/plain</type>
            <size>33652</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0
Lm1tCShyZXZpc2lvbiAxNjU3MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJ
V3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogCiAjaW5jbHVkZSAiRGVsYXllZFJlbGVhc2VTY29w
ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxp
bmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gMTY1NzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MzAsNyArNDYzMCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ0lkZW4KICAgICAgICAgQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoc3RyaW5nKSwgZWRnZSwgbV9qaXQuYnJh
bmNoVGVzdDMyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNl
dCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nSW1w
bDo6ZmxhZ0lzSWRlbnRpZmllcigpKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXNBdG9taWMoKSkpKTsKICAgICAKICAgICBtX2lu
dGVycHJldGVyLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nSWRlbnQpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVj
dGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE2NTczOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVy
LmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9z
dC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0luamVjdGVkU2NyaXB0
SG9zdC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3Jp
cHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMTY1NzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3Jp
cHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRl
ICJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTSmF2
YVNjcmlwdENhbGxGcmFtZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTY1NzM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4
MSw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24oKSBjb25z
dCB7IHJldHVybiB2bSgpLmV4Y2VwdGlvbigpOyB9CiAgICAgICAgIGJvb2wgaGFkRXhjZXB0aW9u
KCkgY29uc3QgeyByZXR1cm4gIXZtKCkuZXhjZXB0aW9uKCkuaXNFbXB0eSgpOyB9CiAKKyAgICAg
ICAgSWRlbnRpZmllclRhYmxlKiBhdG9taWNTdHJpbmdUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHZt
KCkuYXRvbWljU3RyaW5nVGFibGUoKTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVy
cyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICp2bSgpLnByb3BlcnR5TmFtZXM7IH0K
ICAgICAgICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXImIGVtcHR5TGlzdCgpIGNvbnN0IHsg
cmV0dXJuICp2bSgpLmVtcHR5TGlzdDsgfQogICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0
ZXIoKSB7IHJldHVybiB2bSgpLmludGVycHJldGVyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgJKHJldmlzaW9u
IDE2NTczOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNh
bGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIklkZW50aWZpZXIu
aCIKIAogbmFtZXNwYWNlIEpTQyAgewogCkBAIC0xNDcsNiArMTQ4LDIxIEBAIGlubGluZSBKU1Zh
bHVlIENhbGxGcmFtZTo6dW5jaGVja2VkQWN0aXYKICAgICByZXR1cm4gcmVnaXN0ZXJzKClbYWN0
aXZhdGlvblJlZ2lzdGVyLm9mZnNldCgpXS5qc1ZhbHVlKCk7CiB9CiAKK2lubGluZSBQYXNzUmVm
PFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwq
IHIpCit7CisjaWZuZGVmIE5ERUJVRworICAgIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShl
eGVjKTsKKyNlbmRpZgorICAgIHJldHVybiAqQXRvbWljU3RyaW5nOjphZGRXaXRoU3RyaW5nVGFi
bGVQcm92aWRlcigqZXhlYywgcik7Cit9CitpbmxpbmUgUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVu
dGlmaWVyOjphZGQoVk0qIHZtLCBTdHJpbmdJbXBsKiByKQoreworI2lmbmRlZiBOREVCVUcKKyAg
ICBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUodm0pOworI2VuZGlmCisgICAgcmV0dXJuICpB
dG9taWNTdHJpbmc6OmFkZFdpdGhTdHJpbmdUYWJsZVByb3ZpZGVyKCp2bSwgcik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQ2FsbEZyYW1lSW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlUHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMTY1NzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29u
c29sZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNs
dWRlICJDb25zb2xlQ2xpZW50LmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25IZWxwZXJzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDb25zb2xlLmgiCiAjaW5jbHVkZSAiU2NyaXB0
QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlzaW9u
IDE2NTczOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0FTQ0lJ
RmFzdFBhdGguaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJsZS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogdXNpbmcgV1RGOjpUaHJlYWRTcGVjaWZp
YzsKQEAgLTQ4LDYyICs0OSwxNCBAQCB2b2lkIGRlbGV0ZUlkZW50aWZpZXJUYWJsZShJZGVudGlm
aWVyVGFiCiAgICAgZGVsZXRlIHRhYmxlOwogfQogCi1zdHJ1Y3QgSWRlbnRpZmllckFTQ0lJU3Ry
aW5nVHJhbnNsYXRvciB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgTENoYXIqIGMp
Ci0gICAgewotICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tU
b3A4Qml0cyhjKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBy
LCBjb25zdCBMQ2hhciogcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBJZGVudGlmaWVyOjplcXVh
bChyLCBzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbCom
IGxvY2F0aW9uLCBjb25zdCBMQ2hhciogYywgdW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAg
IHNpemVfdCBsZW5ndGggPSBzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYykp
OwotICAgICAgICBsb2NhdGlvbiA9ICZTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjKSwgbGVuZ3RoKS5sZWFrUmVmKCk7Ci0gICAgICAg
IGxvY2F0aW9uLT5zZXRIYXNoKGhhc2gpOwotICAgIH0KLX07Ci0KLXN0cnVjdCBJZGVudGlmaWVy
TENoYXJGcm9tVUNoYXJUcmFuc2xhdG9yIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBDaGFyQnVmZmVyPFVDaGFyPiYgYnVmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hh
c2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoYnVmLnMsIGJ1Zi5sZW5ndGgpOwotICAg
IH0KLSAgICAKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBzdHIsIGNvbnN0IENo
YXJCdWZmZXI8VUNoYXI+JiBidWYpCi0gICAgewotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6
ZXF1YWwoc3RyLCBidWYucywgYnVmLmxlbmd0aCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2
b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0IENoYXJCdWZmZXI8VUNo
YXI+JiBidWYsIHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICBMQ2hhciogZDsKLSAgICAg
ICAgU3RyaW5nSW1wbCYgciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmLmxl
bmd0aCwgZCkubGVha1JlZigpOwotICAgICAgICBXVEY6OmNvcHlMQ2hhcnNGcm9tVUNoYXJTb3Vy
Y2UoZCwgYnVmLnMsIGJ1Zi5sZW5ndGgpOwotICAgICAgICByLnNldEhhc2goaGFzaCk7Ci0gICAg
ICAgIGxvY2F0aW9uID0gJnI7Ci0gICAgfQotfTsKLQogUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVu
dGlmaWVyOjphZGQoVk0qIHZtLCBjb25zdCBjaGFyKiBjKQogewogICAgIEFTU0VSVChjKTsKICAg
ICBBU1NFUlQoY1swXSk7CiAgICAgaWYgKCFjWzFdKQotICAgICAgICByZXR1cm4gYWRkKHZtLCB2
bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjWzBdKSk7Ci0KLSAgICBJ
ZGVudGlmaWVyVGFibGUmIGlkZW50aWZpZXJUYWJsZSA9ICp2bS0+aWRlbnRpZmllclRhYmxlOwot
Ci0gICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBpZGVudGlm
aWVyVGFibGUuYWRkPGNvbnN0IExDaGFyKiwgSWRlbnRpZmllckFTQ0lJU3RyaW5nVHJhbnNsYXRv
cj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGMpKTsKLQotICAgIC8vIElmIHRoZSBz
dHJpbmcgaXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgotICAg
IC8vIFRoZSBib29sZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCi0gICAg
UmVmUHRyPFN0cmluZ0ltcGw+IGFkZGVkU3RyaW5nID0gYWRkUmVzdWx0LmlzTmV3RW50cnkgPyBh
ZG9wdFJlZigqYWRkUmVzdWx0Lml0ZXJhdG9yKSA6ICphZGRSZXN1bHQuaXRlcmF0b3I7CisgICAg
ICAgIHJldHVybiAqdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoY1sw
XSk7CiAKLSAgICByZXR1cm4gYWRkZWRTdHJpbmcucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1
cm4gKkF0b21pY1N0cmluZzo6YWRkKGMpOwogfQogCiBQYXNzUmVmPFN0cmluZ0ltcGw+IElkZW50
aWZpZXI6OmFkZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGMpCkBAIC0xMTcsNDIgKzcw
LDEyIEBAIFBhc3NSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkOChWTSoKICAgICAgICAg
VUNoYXIgYyA9IHNbMF07CiAgICAgICAgIEFTU0VSVChjIDw9IDB4ZmYpOwogICAgICAgICBpZiAo
Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpKQotICAgICAgICAgICAgcmV0dXJuIGFkZCh2
bSwgdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYykpOworICAgICAg
ICAgICAgcmV0dXJuICp2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChj
KTsKICAgICB9Ci0gICAgCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiAqU3RyaW5n
SW1wbDo6ZW1wdHkoKTsKLSAgICBDaGFyQnVmZmVyPFVDaGFyPiBidWYgPSB7IHMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsZW5ndGgpIH07Ci0gICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJl
c3VsdCBhZGRSZXN1bHQgPSB2bS0+aWRlbnRpZmllclRhYmxlLT5hZGQ8Q2hhckJ1ZmZlcjxVQ2hh
cj4sIElkZW50aWZpZXJMQ2hhckZyb21VQ2hhclRyYW5zbGF0b3IgPihidWYpOwotICAgIAotICAg
IC8vIElmIHRoZSBzdHJpbmcgaXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFk
b3B0IGl0LgotICAgIC8vIFRoZSBib29sZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQg
aXMgc28uCi0gICAgcmV0dXJuIGFkZFJlc3VsdC5pc05ld0VudHJ5ID8gYWRvcHRSZWYoKiphZGRS
ZXN1bHQuaXRlcmF0b3IpIDogKiphZGRSZXN1bHQuaXRlcmF0b3I7Ci19Ci0KLVBhc3NSZWY8U3Ry
aW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkU2xvd0Nhc2UoVk0qIHZtLCBTdHJpbmdJbXBsKiByKQot
ewotICAgIGlmIChyLT5pc0VtcHR5VW5pcXVlKCkpCi0gICAgICAgIHJldHVybiAqcjsKLSAgICBB
U1NFUlQoIXItPmlzSWRlbnRpZmllcigpKTsKLSAgICAvLyBUaGUgZW1wdHkgJiBudWxsIHN0cmlu
Z3MgYXJlIHN0YXRpYyBzaW5nbGV0b25zLCBhbmQgc3RhdGljIHN0cmluZ3MgYXJlIGhhbmRsZWQK
LSAgICAvLyBpbiA6OmFkZCgpIGluIHRoZSBoZWFkZXIsIHNvIHdlIHNob3VsZCBuZXZlciBnZXQg
aGVyZSB3aXRoIGEgemVybyBsZW5ndGggc3RyaW5nLgotICAgIEFTU0VSVChyLT5sZW5ndGgoKSk7
Ci0KLSAgICBpZiAoci0+bGVuZ3RoKCkgPT0gMSkgewotICAgICAgICBVQ2hhciBjID0gKCpyKVsw
XTsKLSAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQotICAgICAgICAg
ICAgciA9IHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGMpOwotICAg
ICAgICAgICAgaWYgKHItPmlzSWRlbnRpZmllcigpKQotICAgICAgICAgICAgICAgIHJldHVybiAq
cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gKip2bS0+aWRlbnRpZmllclRhYmxlLT5hZGQocikuaXRl
cmF0b3I7Ci19CiAKLVBhc3NSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkU2xvd0Nhc2Uo
RXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBsKiByKQotewotICAgIHJldHVybiBhZGRTbG93Q2Fz
ZSgmZXhlYy0+dm0oKSwgcik7CisgICAgcmV0dXJuICpBdG9taWNTdHJpbmc6OmFkZChzLCBsZW5n
dGgpOwogfQogCiBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50
aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVu
dGlmaWVyLmgJKHJldmlzaW9uIDE2NTczOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjEgKzM2LDIxIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgSWRlbnRpZmllcigpIHsgfQogICAgICAg
ICBlbnVtIEVtcHR5SWRlbnRpZmllckZsYWcgeyBFbXB0eUlkZW50aWZpZXIgfTsKLSAgICAgICAg
SWRlbnRpZmllcihFbXB0eUlkZW50aWZpZXJGbGFnKSA6IG1fc3RyaW5nKFN0cmluZ0ltcGw6OmVt
cHR5KCkpIHsgfQorICAgICAgICBJZGVudGlmaWVyKEVtcHR5SWRlbnRpZmllckZsYWcpIDogbV9z
dHJpbmcoU3RyaW5nSW1wbDo6ZW1wdHkoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0lk
ZW50aWZpZXIoKSk7IH0KIAogICAgICAgICAvLyBPbmx5IHRvIGJlIHVzZWQgd2l0aCBzdHJpbmcg
bGl0ZXJhbHMuCiAgICAgICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLSAg
ICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJz
KVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5nKGFkZChleGVjLCBjaGFyYWN0ZXJzKSkgeyB9
CisgICAgICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyICgmY2hhcmFj
dGVycylbY2hhcmFjdGVyc0NvdW50XSkgOiBtX3N0cmluZyhhZGQoZXhlYywgY2hhcmFjdGVycykp
IHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJZGVudGlmaWVyKCkpOyB9CiAgICAgICAgIHRl
bXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLSAgICAgICAgSWRlbnRpZmllcihWTSog
dm0sIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5n
KGFkZCh2bSwgY2hhcmFjdGVycykpIHsgfQorICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29u
c3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIDogbV9zdHJpbmcoYWRkKHZt
LCBjaGFyYWN0ZXJzKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0lkZW50aWZpZXIoKSk7
IH0KIAotICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogcmVw
KSA6IG1fc3RyaW5nKGFkZChleGVjLCByZXApKSB7IH0KLSAgICAgICAgSWRlbnRpZmllcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQoZXhlYywgcy5pbXBs
KCkpKSB7IH0KKyAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwq
IHJlcCkgOiBtX3N0cmluZyhhZGQoZXhlYywgcmVwKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgp
LT5pc0lkZW50aWZpZXIoKSk7IH0KKyAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQoZXhlYywgcy5pbXBsKCkpKSB7IEFTU0VS
VChtX3N0cmluZy5pbXBsKCktPmlzSWRlbnRpZmllcigpKTsgfQogCi0gICAgICAgIElkZW50aWZp
ZXIoVk0qIHZtLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0s
IHMsIGxlbmd0aCkpIHsgfQotICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgVUNoYXIq
IHMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgpKSB7IH0KLSAgICAg
ICAgSWRlbnRpZmllcihWTSogdm0sIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmluZyhhZGQodm0s
IHJlcCkpIHsgfSAKLSAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFN0cmluZyYgcykg
OiBtX3N0cmluZyhhZGQodm0sIHMuaW1wbCgpKSkgeyB9CisgICAgICAgIElkZW50aWZpZXIoVk0q
IHZtLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxl
bmd0aCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJZGVudGlmaWVyKCkpOyB9CisgICAg
ICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0
cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJZGVu
dGlmaWVyKCkpOyB9CisgICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBTdHJpbmdJbXBsKiByZXAp
IDogbV9zdHJpbmcoYWRkKHZtLCByZXApKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzSWRl
bnRpZmllcigpKTsgfQorICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBz
KSA6IG1fc3RyaW5nKGFkZCh2bSwgcy5pbXBsKCkpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCkt
PmlzSWRlbnRpZmllcigpKTsgfQogCiAgICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICAgICAgICAgU3RyaW5nSW1wbCogaW1wbCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLmltcGwoKTsgfQpAQCAtMTEwLDI3ICsxMTAsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkOChWTSosIGNv
bnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhUKTsK
IAotICAgICAgICBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiBleGVj
LCBTdHJpbmdJbXBsKiByKQotICAgICAgICB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAg
Y2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKGV4ZWMpOwotI2VuZGlmCi0gICAgICAgICAgICBp
ZiAoci0+aXNJZGVudGlmaWVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICpyOwotICAgICAg
ICAgICAgcmV0dXJuIGFkZFNsb3dDYXNlKGV4ZWMsIHIpOwotICAgICAgICB9Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGFkZChWTSogdm0sIFN0cmluZ0ltcGwqIHIpCi0gICAg
ICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBjaGVja0N1cnJlbnRJZGVudGlmaWVy
VGFibGUodm0pOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoci0+aXNJZGVudGlmaWVyKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuICpyOwotICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3dDYXNl
KHZtLCByKTsKLSAgICAgICAgfQotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQ
YXNzUmVmPFN0cmluZ0ltcGw+IGFkZFNsb3dDYXNlKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqIHIp
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBh
ZGRTbG93Q2FzZShWTSosIFN0cmluZ0ltcGwqIHIpOworICAgICAgICBzdGF0aWMgUGFzc1JlZjxT
dHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCopOworICAgICAgICBzdGF0aWMg
UGFzc1JlZjxTdHJpbmdJbXBsPiBhZGQoVk0qLCBTdHJpbmdJbXBsKik7CiAKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKEV4
ZWNTdGF0ZSopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjaGVja0N1
cnJlbnRJZGVudGlmaWVyVGFibGUoVk0qKTsKQEAgLTE0OCw1MSArMTI5LDE3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBD
aGFyQnVmZmVyIHsKLSAgICAgICAgY29uc3QgVCogczsKLSAgICAgICAgdW5zaWduZWQgaW50IGxl
bmd0aDsKLSAgICB9OwotICAgIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0cnVj
dCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3IgewotICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBDaGFyQnVmZmVyPFQ+JiBidWYpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGJ1Zi5zLCBi
dWYubGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIGJvb2wgZXF1
YWwoU3RyaW5nSW1wbCogc3RyLCBjb25zdCBDaGFyQnVmZmVyPFQ+JiBidWYpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjplcXVhbChzdHIsIGJ1Zi5zLCBidWYubGVu
Z3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJ
bXBsKiYgbG9jYXRpb24sIGNvbnN0IENoYXJCdWZmZXI8VD4mIGJ1ZiwgdW5zaWduZWQgaGFzaCkK
LSAgICAgICAgewotICAgICAgICAgICAgVCogZDsKLSAgICAgICAgICAgIFN0cmluZ0ltcGwmIHIg
PSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGJ1Zi5sZW5ndGgsIGQpLmxlYWtSZWYo
KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gYnVmLmxlbmd0aDsgaSsr
KQotICAgICAgICAgICAgICAgIGRbaV0gPSBidWYuc1tpXTsKLSAgICAgICAgICAgIHIuc2V0SGFz
aChoYXNoKTsKLSAgICAgICAgICAgIGxvY2F0aW9uID0gJnI7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVu
dGlmaWVyOjphZGQoVk0qIHZtLCBjb25zdCBUKiBzLCBpbnQgbGVuZ3RoKQogICAgIHsKICAgICAg
ICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICBUIGMgPSBzWzBdOwogICAgICAgICAg
ICAgaWYgKGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhjKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYWRkKHZtLCB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChj
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJh
Y3RlclN0cmluZ1JlcChjKTsKICAgICAgICAgfQotICAgICAgICAKICAgICAgICAgaWYgKCFsZW5n
dGgpCiAgICAgICAgICAgICByZXR1cm4gKlN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgICAgIENo
YXJCdWZmZXI8VD4gYnVmID0geyBzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSB9Owot
ICAgICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IHZtLT5p
ZGVudGlmaWVyVGFibGUtPmFkZDxDaGFyQnVmZmVyPFQ+LCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRy
YW5zbGF0b3I8VD4+KGJ1Zik7CiAgICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgc3RyaW5nIGlz
IG5ld2x5LXRyYW5zbGF0ZWQsIHRoZW4gd2UgbmVlZCB0byBhZG9wdCBpdC4KLSAgICAgICAgLy8g
VGhlIGJvb2xlYW4gaW4gdGhlIHBhaXIgdGVsbHMgdXMgaWYgdGhhdCBpcyBzby4KLSAgICAgICAg
cmV0dXJuIGFkZFJlc3VsdC5pc05ld0VudHJ5ID8gYWRvcHRSZWYoKiphZGRSZXN1bHQuaXRlcmF0
b3IpIDogKiphZGRSZXN1bHQuaXRlcmF0b3I7CisgICAgICAgIHJldHVybiAqQXRvbWljU3RyaW5n
OjphZGQocywgbGVuZ3RoKTsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IElkZW50aWZpZXImIGEsIGNvbnN0IElkZW50aWZpZXImIGIpCkBAIC0yNTYsMTQgKzIwMyw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1w
bD4sIGludCwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFN0cmluZ0ltcGw+
PiwgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cz4gSWRlbnRpZmllck1hcDsKICAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCosIGludCwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFp
dHM8U3RyaW5nSW1wbCo+LCBJZGVudGlmaWVyTWFwSW5kZXhIYXNoVHJhaXRzPiBCb3Jyb3dlZElk
ZW50aWZpZXJNYXA7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAg
IEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgSWRlbnRpZmllclRhYmxlOjphZGQoVSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV90YWJsZS5hZGQ8Vj4odmFsdWUpOwotICAgICAgICAoKnJlc3VsdC5pdGVyYXRvcikt
PnNldElzSWRlbnRpZmllcih0cnVlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0K
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCShyZXZpc2lvbiAxNjU3MzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
V1RGVGhyZWFkRGF0YS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDksNyArNTAsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAvLyBEcm9wQWxsTG9ja3Mgb2JqZWN0IHRha2VzIGNhcmUgdG8g
cmVsZWFzZSB0aGUgSlNMb2NrIG9ubHkgaWYgeW91cgogICAgIC8vIHRocmVhZCBhY3F1aXJlZCBp
dCB0byBiZWdpbiB3aXRoLgogCi0gICAgY2xhc3MgSWRlbnRpZmllclRhYmxlOwogICAgIGNsYXNz
IEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBWTTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAkocmV2aXNpb24gMTY1NzM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKIAorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgotCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlQ2hhaW4uaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZpc2lvbiAxNjU3MzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw2ICs1OSw3IEBAIFNtYWxsU3RyaW5nc1N0b3JhZ2U6OlNtYWxsU3RyaW5nc1N0b3JhZ2UKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2luZ2xlQ2hhcmFjdGVyU3RyaW5nQ291bnQ7ICsr
aSkgewogICAgICAgICBjaGFyYWN0ZXJCdWZmZXJbaV0gPSBpOwogICAgICAgICBtX3JlcHNbaV0g
PSBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChiYXNlU3RyaW5nLCBpLCAx
KTsKKyAgICAgICAgbV9yZXBzW2ldID0gQXRvbWljU3RyaW5nOjphZGQobV9yZXBzW2ldLmdldCgp
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDE2NTczOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBI
ZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIHByb21pc2VDb25zdHJ1Y3RvclRhYmxlKGFkb3B0UHRy
KG5ldyBIYXNoVGFibGUoSlNDOjpwcm9taXNlQ29uc3RydWN0b3JUYWJsZSkpKQogI2VuZGlmCiAg
ICAgLCBpZGVudGlmaWVyVGFibGUodm1UeXBlID09IERlZmF1bHQgPyB3dGZUaHJlYWREYXRhKCku
Y3VycmVudElkZW50aWZpZXJUYWJsZSgpIDogY3JlYXRlSWRlbnRpZmllclRhYmxlKCkpCi0gICAg
LCBwcm9wZXJ0eU5hbWVzKG5ldyBDb21tb25JZGVudGlmaWVycyh0aGlzKSkKKyAgICAsIHByb3Bl
cnR5TmFtZXMoMCkKICAgICAsIGVtcHR5TGlzdChuZXcgTWFya2VkQXJndW1lbnRCdWZmZXIpCiAg
ICAgLCBwYXJzZXJBcmVuYShhZG9wdFB0cihuZXcgUGFyc2VyQXJlbmEpKQogICAgICwga2V5d29y
ZHMoYWRvcHRQdHIobmV3IEtleXdvcmRzKCp0aGlzKSkpCkBAIC0yNDYsNiArMjQ2LDcgQEAgVk06
OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIC8vIE5lZWQgdG8gYmUg
Y2FyZWZ1bCB0byBrZWVwIGV2ZXJ5dGhpbmcgY29uc2lzdGVudCBoZXJlCiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodGhpcyk7CiAgICAgSWRlbnRpZmllclRhYmxlKiBleGlzdGluZ0VudHJ5SWRlbnRp
ZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoaWRl
bnRpZmllclRhYmxlKTsKKyAgICBwcm9wZXJ0eU5hbWVzID0gbmV3IENvbW1vbklkZW50aWZpZXJz
KHRoaXMpOwogICAgIHN0cnVjdHVyZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZTo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzKSk7CiAgICAgc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIGRlYnVnZ2VyQWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIERlYnVn
Z2VyQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNjU3MzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3
Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBI
YW5kbGVTdGFjazsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAgIGNsYXNzIElkZW50aWZpZXJU
YWJsZTsKICAgICBjbGFzcyBJbnRlcnByZXRlcjsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsK
ICAgICBjbGFzcyBKU09iamVjdDsKQEAgLTI5NCw2ICsyOTMsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgRGF0ZUluc3RhbmNlQ2FjaGUgZGF0ZUluc3RhbmNlQ2FjaGU7CiAgICAgICAgIFdU
Rjo6U2ltcGxlU3RhdHMgbWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5l
SklUOwogCisgICAgICAgIElkZW50aWZpZXJUYWJsZSogYXRvbWljU3RyaW5nVGFibGUoKSBjb25z
dCB7IHJldHVybiBpZGVudGlmaWVyVGFibGU7IH0KKwogICAgICAgICB2b2lkIHNldEluRGVmaW5l
T3duUHJvcGVydHkoYm9vbCBpbkRlZmluZU93blByb3BlcnR5KQogICAgICAgICB7CiAgICAgICAg
ICAgICBtX2luRGVmaW5lT3duUHJvcGVydHkgPSBpbkRlZmluZU93blByb3BlcnR5OwpJbmRleDog
U291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvV1RGVGhyZWFkRGF0YS5jcHAJKHJldmlzaW9uIDE2NTczOSkKKysrIFNvdXJjZS9XVEYv
d3RmL1dURlRocmVhZERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMCArNDMsNyBAQCBX
VEZUaHJlYWREYXRhOjpXVEZUaHJlYWREYXRhKCkKICAgICA6IG1fYXBpRGF0YSgwKQogICAgICwg
bV9hdG9taWNTdHJpbmdUYWJsZSgwKQogICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZURlc3RydWN0
b3IoMCkKLSNpZiAhVVNFKFdFQl9USFJFQUQpCi0gICAgLCBtX2RlZmF1bHRJZGVudGlmaWVyVGFi
bGUobmV3IEpTQzo6SWRlbnRpZmllclRhYmxlKCkpCi0gICAgLCBtX2N1cnJlbnRJZGVudGlmaWVy
VGFibGUobV9kZWZhdWx0SWRlbnRpZmllclRhYmxlKQotI2VuZGlmCisgICAgLCBtX2N1cnJlbnRJ
ZGVudGlmaWVyVGFibGUoMCkKICAgICAsIG1fc3RhY2tCb3VuZHMoU3RhY2tCb3VuZHM6OmN1cnJl
bnRUaHJlYWRTdGFja0JvdW5kcygpKQogI2lmIEVOQUJMRShTVEFDS19TVEFUUykKICAgICAsIG1f
c3RhY2tTdGF0cygpCkBAIC01NCwyMyArNTEsMTQgQEAgV1RGVGhyZWFkRGF0YTo6V1RGVGhyZWFk
RGF0YSgpCiAgICAgLCBtX3NhdmVkU3RhY2tQb2ludGVyQXRWTUVudHJ5KDApCiAgICAgLCBtX3Nh
dmVkTGFzdFN0YWNrVG9wKHN0YWNrKCkub3JpZ2luKCkpCiB7Ci0jaWYgVVNFKFdFQl9USFJFQUQp
Ci0gICAgc3RhdGljIEpTQzo6SWRlbnRpZmllclRhYmxlKiBzaGFyZWRJZGVudGlmaWVyVGFibGUg
PSBuZXcgSlNDOjpJZGVudGlmaWVyVGFibGUoKTsKLSAgICBpZiAocHRocmVhZF9tYWluX25wKCkg
fHwgaXNXZWJUaHJlYWQoKSkKLSAgICAgICAgbV9kZWZhdWx0SWRlbnRpZmllclRhYmxlID0gc2hh
cmVkSWRlbnRpZmllclRhYmxlOwotICAgIGVsc2UKLSAgICAgICAgbV9kZWZhdWx0SWRlbnRpZmll
clRhYmxlID0gbmV3IEpTQzo6SWRlbnRpZmllclRhYmxlKCk7Ci0KLSAgICBtX2N1cnJlbnRJZGVu
dGlmaWVyVGFibGUgPSBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGU7Ci0jZW5kaWYKICAgICBBdG9t
aWNTdHJpbmdUYWJsZTo6Y3JlYXRlKCp0aGlzKTsKKyAgICBtX2N1cnJlbnRJZGVudGlmaWVyVGFi
bGUgPSBtX2F0b21pY1N0cmluZ1RhYmxlOwogfQogCiBXVEZUaHJlYWREYXRhOjp+V1RGVGhyZWFk
RGF0YSgpCiB7CiAgICAgaWYgKG1fYXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yKQogICAgICAg
ICBtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcihtX2F0b21pY1N0cmluZ1RhYmxlKTsKLSAg
ICBkZWxldGUgbV9kZWZhdWx0SWRlbnRpZmllclRhYmxlOwogfQogCiAjaWYgVVNFKFBUSFJFQURf
R0VUU1BFQ0lGSUNfRElSRUNUKQpAQCAtODYsMjEgKzc0LDMgQEAgV1RGVGhyZWFkRGF0YSYgV1RG
VGhyZWFkRGF0YTo6Y3JlYXRlQW5kUgogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdURgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotSWRlbnRpZmllclRhYmxlOjp+SWRlbnRpZmllclRhYmxlKCkKLXsK
LSAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IgZW5kID0gbV90YWJsZS5lbmQoKTsK
LSAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT5zZXRJc0lkZW50
aWZpZXIoZmFsc2UpOwotfQotCi1IYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IElkZW50
aWZpZXJUYWJsZTo6YWRkKFN0cmluZ0ltcGwqIHZhbHVlKQotewotICAgIEhhc2hTZXQ8U3RyaW5n
SW1wbCo+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV90YWJsZS5hZGQodmFsdWUpOwotICAgICgqcmVz
dWx0Lml0ZXJhdG9yKS0+c2V0SXNJZGVudGlmaWVyKHRydWUpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL1dURi93dGYvV1RGVGhyZWFk
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuaAkocmV2
aXNpb24gMTY1NzM5KQorKysgU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OSwyOCArNDksMTAgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAj
ZW5kaWYKIAotLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgbGF5ZXJpbmcgdmlvbGF0aW9u
IHVudGlsIHdlIG1vdmUgbW9yZSBvZiB0aGUgc3RyaW5nIGNvZGUgZnJvbSBKYXZhU2NyaXB0Q29y
ZSB0byBXVEYuCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSWRlbnRpZmllclRhYmxlIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgfklkZW50aWZpZXJUYWJsZSgpOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIEhhc2hTZXQ8
U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkKFN0cmluZ0ltcGwqKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IGFk
ZChVKTsKLQotICAgIGJvb2wgcmVtb3ZlKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpIHsgcmV0dXJu
IG1fdGFibGUucmVtb3ZlKGlkZW50aWZpZXIpOyB9Ci0KLXByaXZhdGU6Ci0gICAgSGFzaFNldDxT
dHJpbmdJbXBsKj4gbV90YWJsZTsKLX07Ci0KLX0KLQogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNz
IEF0b21pY1N0cmluZ1RhYmxlOwordHlwZWRlZiBBdG9taWNTdHJpbmdUYWJsZSBJZGVudGlmaWVy
VGFibGU7CiAKIHR5cGVkZWYgdm9pZCAoKkF0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcikoQXRv
bWljU3RyaW5nVGFibGUqKTsKIApAQCAtODIsMjQgKzY0LDI0IEBAIHB1YmxpYzoKIAogICAgIEF0
b21pY1N0cmluZ1RhYmxlKiBhdG9taWNTdHJpbmdUYWJsZSgpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9hdG9taWNTdHJpbmdUYWJsZTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudElkZW50aWZp
ZXJUYWJsZTsKICAgICB9CiAKLSAgICBKU0M6OklkZW50aWZpZXJUYWJsZSogY3VycmVudElkZW50
aWZpZXJUYWJsZSgpCisgICAgSWRlbnRpZmllclRhYmxlKiBjdXJyZW50SWRlbnRpZmllclRhYmxl
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRJZGVudGlmaWVyVGFibGU7CiAgICAg
fQogCi0gICAgSlNDOjpJZGVudGlmaWVyVGFibGUqIHNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUo
SlNDOjpJZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJUYWJsZSkKKyAgICBJZGVudGlmaWVyVGFi
bGUqIHNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVy
VGFibGUpCiAgICAgewotICAgICAgICBKU0M6OklkZW50aWZpZXJUYWJsZSogb2xkSWRlbnRpZmll
clRhYmxlID0gbV9jdXJyZW50SWRlbnRpZmllclRhYmxlOworICAgICAgICBJZGVudGlmaWVyVGFi
bGUqIG9sZElkZW50aWZpZXJUYWJsZSA9IG1fY3VycmVudElkZW50aWZpZXJUYWJsZTsKICAgICAg
ICAgbV9jdXJyZW50SWRlbnRpZmllclRhYmxlID0gaWRlbnRpZmllclRhYmxlOwogICAgICAgICBy
ZXR1cm4gb2xkSWRlbnRpZmllclRhYmxlOwogICAgIH0KIAogICAgIHZvaWQgcmVzZXRDdXJyZW50
SWRlbnRpZmllclRhYmxlKCkKICAgICB7Ci0gICAgICAgIG1fY3VycmVudElkZW50aWZpZXJUYWJs
ZSA9IG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZTsKKyAgICAgICAgbV9jdXJyZW50SWRlbnRpZmll
clRhYmxlID0gbV9hdG9taWNTdHJpbmdUYWJsZTsKICAgICB9CiAKICAgICBjb25zdCBTdGFja0Jv
dW5kcyYgc3RhY2soKQpAQCAtMTQ1LDggKzEyNyw3IEBAIHByaXZhdGU6CiAgICAgQXRvbWljU3Ry
aW5nVGFibGUqIG1fYXRvbWljU3RyaW5nVGFibGU7CiAgICAgQXRvbWljU3RyaW5nVGFibGVEZXN0
cnVjdG9yIG1fYXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yOwogCi0gICAgSlNDOjpJZGVudGlm
aWVyVGFibGUqIG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZTsKLSAgICBKU0M6OklkZW50aWZpZXJU
YWJsZSogbV9jdXJyZW50SWRlbnRpZmllclRhYmxlOworICAgIElkZW50aWZpZXJUYWJsZSogbV9j
dXJyZW50SWRlbnRpZmllclRhYmxlOwogICAgIFN0YWNrQm91bmRzIG1fc3RhY2tCb3VuZHM7CiAj
aWYgRU5BQkxFKFNUQUNLX1NUQVRTKQogICAgIFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzIG1f
c3RhY2tTdGF0czsKQEAgLTE4OCw1ICsxNjksNiBAQCBpbmxpbmUgV1RGVGhyZWFkRGF0YSYgd3Rm
VGhyZWFkRGF0YSgpCiAKIHVzaW5nIFdURjo6V1RGVGhyZWFkRGF0YTsKIHVzaW5nIFdURjo6d3Rm
VGhyZWFkRGF0YTsKK3VzaW5nIFdURjo6SWRlbnRpZmllclRhYmxlOwogCiAjZW5kaWYgLy8gV1RG
VGhyZWFkRGF0YV9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCShyZXZp
c2lvbiAxNjU3MzkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxNCw2ICs0MTQsMjQgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBB
dG9taWNTdHJpbmc6OmFkZAogICAgIHJldHVybiAqYWRkUmVzdWx0Lml0ZXJhdG9yOwogfQogCitQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRkU2xvd0Nhc2UoQXRvbWljU3Ry
aW5nVGFibGUqIHN0cmluZ1RhYmxlLCBTdHJpbmdJbXBsKiBzdHJpbmcpCit7CisgICAgaWYgKCFz
dHJpbmctPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKwor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXN0cmluZy0+aXNBdG9taWMoKSwgIkF0b21pY1N0cmlu
ZyBzaG91bGQgbm90IGhpdCB0aGUgc2xvdyBjYXNlIGlmIHRoZSBzdHJpbmcgaXMgYWxyZWFkeSBh
dG9taWMuIik7CisKKyAgICBBdG9taWNTdHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7CisgICAgSGFz
aFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZS0+dGFi
bGUoKS5hZGQoc3RyaW5nKTsKKworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAg
ICAgICBBU1NFUlQoKmFkZFJlc3VsdC5pdGVyYXRvciA9PSBzdHJpbmcpOworICAgICAgICBzdHJp
bmctPnNldElzQXRvbWljKHRydWUpOworICAgIH0KKworICAgIHJldHVybiAqYWRkUmVzdWx0Lml0
ZXJhdG9yOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGljIGlu
bGluZSBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IgZmluZFN0cmluZyhjb25zdCBTdHJp
bmdJbXBsKiBzdHJpbmdJbXBsKQogewpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNT
dHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5o
CShyZXZpc2lvbiAxNjU3MzkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitj
bGFzcyBBdG9taWNTdHJpbmdUYWJsZTsKIHN0cnVjdCBBdG9taWNTdHJpbmdIYXNoOwogCiBjbGFz
cyBBdG9taWNTdHJpbmcgewpAQCAtMTY4LDEyICsxNjksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
aG93KCkgY29uc3Q7CiAjZW5kaWYKIAotcHJpdmF0ZToKLSAgICAvLyBUaGUgZXhwbGljaXQgY29u
c3RydWN0b3JzIHdpdGggQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCBtdXN0IGJl
IHVzZWQgZm9yIGxpdGVyYWxzLgotICAgIEF0b21pY1N0cmluZyhBU0NJSUxpdGVyYWwpOwotCi0g
ICAgU3RyaW5nIG1fc3RyaW5nOwotICAgIAogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgTENoYXIqKTsKICAgICBBTFdBWVNf
SU5MSU5FIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChjb25zdCBjaGFyKiBzKSB7
IHJldHVybiBhZGQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHMpKTsgfTsKICAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKGNv
bnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKQEAgLTE4NSwxNyArMTgwLDM1IEBAIHByaXZh
dGU6CiAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQo
U3RyaW5nSW1wbCogc3RyaW5nKQogICAgIHsKICAgICAgICAgaWYgKCFzdHJpbmcgfHwgc3RyaW5n
LT5pc0F0b21pYygpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzdHJpbmcg
fHwgaXNJbkF0b21pY1N0cmluZ1RhYmxlKHN0cmluZyksICJUaGUgYXRvbWljIHN0cmluZyBjb21l
cyBmcm9tIGFuIG90aGVyIHRocmVhZCEiKTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoIXN0cmluZyB8fCBzdHJpbmcgPT0gU3RyaW5nSW1wbDo6ZW1wdHkoKSB8fCBpc0luQXRvbWlj
U3RyaW5nVGFibGUoc3RyaW5nKSwgIlRoZSBhdG9taWMgc3RyaW5nIGNvbWVzIGZyb20gYW4gb3Ro
ZXIgdGhyZWFkISIpOwogICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gYWRkU2xvd0Nhc2Uoc3RyaW5nKTsKICAgICB9CiAgICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZEZyb21MaXRlcmFsRGF0
YShjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGRTbG93Q2FzZShT
dHJpbmdJbXBsKik7CiAjaWYgVVNFKENGKQogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoQ0ZTdHJpbmdSZWYpOwogI2VuZGlmCiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUYWJsZVByb3ZpZGVyPgorICAgIEFMV0FZU19JTkxJ
TkUgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkV2l0aFN0cmluZ1RhYmxlUHJvdmlk
ZXIoU3RyaW5nVGFibGVQcm92aWRlciYgc3RyaW5nVGFibGVQcm92aWRlciwgU3RyaW5nSW1wbCog
c3RyaW5nKQorICAgIHsKKyAgICAgICAgaWYgKCFzdHJpbmcgfHwgc3RyaW5nLT5pc0F0b21pYygp
KSB7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzdHJpbmcgfHwgc3RyaW5nID09
IFN0cmluZ0ltcGw6OmVtcHR5KCkgfHwgaXNJbkF0b21pY1N0cmluZ1RhYmxlKHN0cmluZyksICJU
aGUgYXRvbWljIHN0cmluZyBjb21lcyBmcm9tIGFuIG90aGVyIHRocmVhZCEiKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFkZFNsb3dDYXNl
KHN0cmluZ1RhYmxlUHJvdmlkZXIuYXRvbWljU3RyaW5nVGFibGUoKSwgc3RyaW5nKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgLy8gVGhlIGV4cGxpY2l0IGNvbnN0cnVjdG9ycyB3aXRoIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwgbXVzdCBiZSB1c2VkIGZvciBsaXRlcmFscy4K
KyAgICBBdG9taWNTdHJpbmcoQVNDSUlMaXRlcmFsKTsKKworICAgIFN0cmluZyBtX3N0cmluZzsK
KyAgICAKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gYWRkU2xvd0Nhc2UoU3RyaW5nSW1wbCopOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGRTbG93Q2FzZShBdG9taWNTdHJpbmdU
YWJsZSosIFN0cmluZ0ltcGwqKTsKKwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMg
QXRvbWljU3RyaW5nSW1wbCogZmluZFNsb3dDYXNlKFN0cmluZ0ltcGwmKTsKICAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgc3RhdGljIEF0b21pY1N0cmluZyBmcm9tVVRGOEludGVybmFsKGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKik7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWlj
U3RyaW5nVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWlj
U3RyaW5nVGFibGUuY3BwCShyZXZpc2lvbiAxNjU3MzkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0F0b21pY1N0cmluZ1RhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDE0IEBA
IHZvaWQgQXRvbWljU3RyaW5nVGFibGU6OmNyZWF0ZShXVEZUaHJlYWQKICNlbmRpZiAvLyBVU0Uo
V0VCX1RIUkVBRCkKIH0KIAorQXRvbWljU3RyaW5nVGFibGU6On5BdG9taWNTdHJpbmdUYWJsZSgp
Cit7CisgICAgZm9yIChhdXRvIGl0ZXIgOiBtX3RhYmxlKQorICAgICAgICBpdGVyLT5zZXRJc0F0
b21pYyhmYWxzZSk7Cit9CisKIHZvaWQgQXRvbWljU3RyaW5nVGFibGU6OmRlc3Ryb3koQXRvbWlj
U3RyaW5nVGFibGUqIHRhYmxlKQogewotICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRv
ciBlbmQgPSB0YWJsZS0+bV90YWJsZS5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nSW1w
bCo+OjppdGVyYXRvciBpdGVyID0gdGFibGUtPm1fdGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+c2V0SXNBdG9taWMoZmFsc2UpOwogICAgIGRlbGV0
ZSB0YWJsZTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nVGFibGUu
aAkocmV2aXNpb24gMTY1NzM5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIFN0cmluZ0ltcGw7
CiBjbGFzcyBBdG9taWNTdHJpbmdUYWJsZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CisgICAgfkF0b21pY1N0cmluZ1RhYmxlKCk7CiAKICAgICBzdGF0aWMgdm9pZCBj
cmVhdGUoV1RGVGhyZWFkRGF0YSYpOwogICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+JiB0YWJsZSgp
IHsgcmV0dXJuIG1fdGFibGU7IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAko
cmV2aXNpb24gMTY1NzM5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE1LDEwICsxMTUsNiBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1w
bCgpCiAKICAgICBpZiAoaXNBdG9taWMoKSkKICAgICAgICAgQXRvbWljU3RyaW5nOjpyZW1vdmUo
dGhpcyk7Ci0gICAgaWYgKGlzSWRlbnRpZmllcigpKSB7Ci0gICAgICAgIGlmICghd3RmVGhyZWFk
RGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKS0+cmVtb3ZlKHRoaXMpKQotICAgICAgICAg
ICAgQ1JBU0goKTsKLSAgICB9CiAKICAgICBCdWZmZXJPd25lcnNoaXAgb3duZXJzaGlwID0gYnVm
ZmVyT3duZXJzaGlwKCk7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCShyZXZpc2lv
biAxNjU3MzkpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsMTQgKzQ0LDkgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlN0cmluZyAq
IENGU3RyaQogQGNsYXNzIE5TU3RyaW5nOwogI2VuZGlmCiAKLS8vIEZJWE1FOiBUaGlzIGlzIGEg
dGVtcG9yYXJ5IGxheWVyaW5nIHZpb2xhdGlvbiB3aGlsZSB3ZSBtb3ZlIHN0cmluZyBjb2RlIHRv
IFdURi4KLS8vIExhbmRpbmcgdGhlIGZpbGUgbW92ZXMgaW4gb25lIHBhdGNoLCB3aWxsIGZvbGxv
dyBvbiB3aXRoIHBhdGNoZXMgdG8gY2hhbmdlIHRoZSBuYW1lc3BhY2VzLgogbmFtZXNwYWNlIEpT
QyB7Ci1zdHJ1Y3QgSWRlbnRpZmllckFTQ0lJU3RyaW5nVHJhbnNsYXRvcjsKIG5hbWVzcGFjZSBM
TEludCB7IGNsYXNzIERhdGE7IH0KIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOwot
c3RydWN0IElkZW50aWZpZXJMQ2hhckZyb21VQ2hhclRyYW5zbGF0b3I7CiB9CiAKIG5hbWVzcGFj
ZSBXVEYgewpAQCAtMTMyLDEwICsxMjcsNiBAQCBzdHJ1Y3QgU3RyaW5nU3RhdHMgewogCiBjbGFz
cyBTdHJpbmdJbXBsIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJpbmdJbXBsKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJB
U0NJSVN0cmluZ1RyYW5zbGF0b3I7Ci0gICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJD
aGFyQnVmZmVyVHJhbnNsYXRvcjxMQ2hhcj47Ci0gICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50
aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxVQ2hhcj47Ci0gICAgZnJpZW5kIHN0cnVjdCBKU0M6
OklkZW50aWZpZXJMQ2hhckZyb21VQ2hhclRyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBX
VEY6OkNTdHJpbmdUcmFuc2xhdG9yOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGZyaWVuZCBzdHJ1Y3QgV1RGOjpIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I7CiAgICAg
ZnJpZW5kIHN0cnVjdCBXVEY6Okhhc2hBbmRVVEY4Q2hhcmFjdGVyc1RyYW5zbGF0b3I7CkBAIC0x
NjIsOCArMTUzLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50
RmxhZ0lzU3RhdGljU3RyaW5nKQogICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAgICAg
LCBtX2RhdGExNihjaGFyYWN0ZXJzKQotICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZs
YWdJc0lkZW50aWZpZXIgfCBCdWZmZXJPd25lZCkKKyAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhz
X2hhc2hGbGFnSXNBdG9taWMgfCBCdWZmZXJPd25lZCkKICAgICB7CisgICAgICAgIEFTU0VSVCgh
bGVuZ3RoKTsKKwogICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFzaCBpcyBjb21wdXRlZCBz
byB0aGF0IEF0b21pY1N0cmluZ0hhc2ggY2FuIGNhbGwgZXhpc3RpbmdIYXNoKCkKICAgICAgICAg
Ly8gd2l0aCBpbXB1bml0eS4gVGhlIGVtcHR5IHN0cmluZyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQg
aXMgbmV2ZXIgZW50ZXJlZCBpbnRvCiAgICAgICAgIC8vIEF0b21pY1N0cmluZydzIEhhc2hLZXks
IGJ1dCBzdGlsbCBuZWVkcyB0byBjb21wYXJlIGNvcnJlY3RseS4KQEAgLTE3OSw4ICsxNzIsMTAg
QEAgcHJpdmF0ZToKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNT
dHJpbmcpCiAgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICAgICAsIG1fZGF0YTgoY2hh
cmFjdGVycykKLSAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8
IHNfaGFzaEZsYWdJc0lkZW50aWZpZXIgfCBCdWZmZXJPd25lZCkKKyAgICAgICAgLCBtX2hhc2hB
bmRGbGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IHNfaGFzaEZsYWdJc0F0b21pYyB8IEJ1ZmZl
ck93bmVkKQogICAgIHsKKyAgICAgICAgQVNTRVJUKCFsZW5ndGgpOworCiAgICAgICAgIC8vIEVu
c3VyZSB0aGF0IHRoZSBoYXNoIGlzIGNvbXB1dGVkIHNvIHRoYXQgQXRvbWljU3RyaW5nSGFzaCBj
YW4gY2FsbCBleGlzdGluZ0hhc2goKQogICAgICAgICAvLyB3aXRoIGltcHVuaXR5LiBUaGUgZW1w
dHkgc3RyaW5nIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBpcyBuZXZlciBlbnRlcmVkIGludG8KICAg
ICAgICAgLy8gQXRvbWljU3RyaW5nJ3MgSGFzaEtleSwgYnV0IHN0aWxsIG5lZWRzIHRvIGNvbXBh
cmUgY29ycmVjdGx5LgpAQCAtNDI5LDcgKzQyNCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB1
bnNpZ25lZCBmbGFnc09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJpbmdJbXBs
LCBtX2hhc2hBbmRGbGFncyk7IH0KICAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ0lzOEJpdCgpIHsg
cmV0dXJuIHNfaGFzaEZsYWc4Qml0QnVmZmVyOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIGZsYWdJ
c0lkZW50aWZpZXIoKSB7IHJldHVybiBzX2hhc2hGbGFnSXNJZGVudGlmaWVyOyB9CisgICAgc3Rh
dGljIHVuc2lnbmVkIGZsYWdJc0F0b21pYygpIHsgcmV0dXJuIHNfaGFzaEZsYWdJc0F0b21pYzsg
fQogICAgIHN0YXRpYyB1bnNpZ25lZCBkYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cmluZ0ltcGwsIG1fZGF0YTgpOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
VHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CkBA
IC00OTcsMTggKzQ5MiwxMiBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhczE2Qml0U2hhZG93KCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hGbGFnSGFzMTZCaXRTaGFkb3c7
IH0KICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCB1cGNvbnZlcnRDaGFyYWN0ZXJzKHVu
c2lnbmVkLCB1bnNpZ25lZCkgY29uc3Q7Ci0gICAgYm9vbCBpc0lkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdJc0lkZW50aWZpZXI7IH0KLSAgICBi
b29sIGlzSWRlbnRpZmllck9yVW5pcXVlKCkgY29uc3QgeyByZXR1cm4gaXNJZGVudGlmaWVyKCkg
fHwgaXNFbXB0eVVuaXF1ZSgpOyB9Ci0gICAgdm9pZCBzZXRJc0lkZW50aWZpZXIoYm9vbCBpc0lk
ZW50aWZpZXIpCisgICAgYm9vbCBpc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBpc0F0b21p
YygpOyB9CisgICAgYm9vbCBpc0lkZW50aWZpZXJPclVuaXF1ZSgpIGNvbnN0CiAgICAgewotICAg
ICAgICBBU1NFUlQoIWlzU3RhdGljKCkpOwotICAgICAgICBBU1NFUlQoIWlzRW1wdHlVbmlxdWUo
KSk7Ci0gICAgICAgIGlmIChpc0lkZW50aWZpZXIpCi0gICAgICAgICAgICBtX2hhc2hBbmRGbGFn
cyB8PSBzX2hhc2hGbGFnSXNJZGVudGlmaWVyOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X2hhc2hBbmRGbGFncyAmPSB+c19oYXNoRmxhZ0lzSWRlbnRpZmllcjsKKyAgICAgICAgQVNTRVJU
KChpc0lkZW50aWZpZXIoKSB8fCBpc0VtcHR5VW5pcXVlKCkpID09IChpc0lkZW50aWZpZXIoKSB8
fCAhbV9sZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIGlzSWRlbnRpZmllcigpIHx8ICFtX2xlbmd0
aDsKICAgICB9Ci0KICAgICBib29sIGlzRW1wdHlVbmlxdWUoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuICFsZW5ndGgoKSAmJiAhaXNTdGF0aWMoKTsKQEAgLTgzOCw3ICs4MjcsNiBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciA9
IDF1IDw8IDU7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdJc0F0b21pYyA9
IDF1IDw8IDQ7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdEaWRSZXBvcnRD
b3N0ID0gMXUgPDwgMzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ0lzSWRl
bnRpZmllciA9IDF1IDw8IDI7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaE1hc2tC
dWZmZXJPd25lcnNoaXAgPSAxdSB8ICgxdSA8PCAxKTsKIAogI2lmZGVmIFNUUklOR19TVEFUUwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5oCShyZXZpc2lvbiAxNjU3Mzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIElkZW50aWZpZXJSZXBfaAogI2RlZmluZSBJZGVu
dGlmaWVyUmVwX2gKIAorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRl
IDx3dGYvU3RyaW5nRXh0cmFzLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227221</attachid>
            <date>2014-03-19 14:58:55 -0700</date>
            <delta_ts>2014-03-20 00:18:05 -0700</delta_ts>
            <desc>review fixes, windows build fix, separate out new file.</desc>
            <filename>128624.10.patch</filename>
            <type>text/plain</type>
            <size>37693</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0
Lm1tCShyZXZpc2lvbiAxNjU5MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJ
V3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogCiAjaW5jbHVkZSAiRGVsYXllZFJlbGVhc2VTY29w
ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxp
bmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTY1OTA2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw2ICs4NDAsNyBAQAogCQk4NjAxNjFF
NDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDE2MUUwMEYzQTgzQzEwMEY4NDcxMCAv
KiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxl
clg4Nl82NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODYwMTYxRTYwRjNB
ODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjAxNjFFMjBGM0E4M0MxMDBGODQ3MTAg
LyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk4NjA2RERFQTE4REE0NEFCMDBBMzgzRDAgLyogSWRlbnRp
ZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2MDZEREU5MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2MEJEODAxMTQ4
RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2QkY2NDJBMTQ4REIyQjUwMDRERTM2QSAvKiBJbnRyaW5zaWMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjEy
RTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MTJFNENCMTUyMjkxODQwMEM4MzZCRSAvKiBN
YXRjaFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTg2MTU4QUIzMTU1QzhCNDAwMEI0NUM5QyAvKiBQcm9wZXJ0eU5hbWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MTU4QUIyMTU1QzhCM0Yw
MEI0NUM5QyAvKiBQcm9wZXJ0eU5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMjM1NSw2ICsyMzU2LDcgQEAKIAkJODYwM0NFRjIxNEM3NTQ2
NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZVByb2ZpbGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2MDNDRUYzMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODYwNEY0RjIxNDNBNkM0NDAwQjI5NUY1IC8qIENoYW5nZUxvZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBDaGFuZ2VMb2c7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2MDZEREU5MThEQTQ0
QUIwMEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJZGVudGlmaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NjEyRTRDQjE1MjI5MTg0MDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0Y2hSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODYxNThBQjIxNTVDOEIzRjAwQjQ1QzlDIC8qIFByb3BlcnR5TmFtZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eU5hbWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYyNTUzQ0UxNjEzNkFBNTAwOUYxN0QwIC8qIEpTUHJveHku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQcm94eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zOTM4LDYgKzM5NDAsNyBAQAogCQkJCUJDMzM3
QkRFMEUxQUYwQjgwMDc2OTE4QSAvKiBHZXR0ZXJTZXR0ZXIuaCAqLywKIAkJCQk5MzNBMzQ5RDAz
OEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdD
NjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywKKwkJCQk4NjA2RERFOTE4REE0NEFCMDBBMzgz
RDAgLyogSWRlbnRpZmllcklubGluZXMuaCAqLywKIAkJCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3
QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLywKIAkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIg
LyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8sCiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4
REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCkBAIC01Mjk1LDYgKzUyOTgsNyBAQAogCQkJCUE1
MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBJbnNwZWN0b3JKUy5qc29uIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTUzMjQzODgxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckpTQmFja2VuZERpc3Bh
dGNoZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM4QTE4NTY4MzM1MDAyRUQ2OTIgLyog
SW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NjA2
RERFQTE4REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1MzI0MzhDMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVy
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwRTRCNjIxODgwOURENTAwNjhBNDZEIC8qIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1RDkzQUMxODUxNEY3OTAw
NDAwREVEIC8qIEluc3BlY3RvclR5cGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJ
bmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNjU5MDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdldHRlclNl
dHRlci5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlw
dEhvc3QuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNJbmplY3RlZFNj
cmlwdEhvc3QuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZh
U2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDE2NTkwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZh
U2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5j
bHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U0phdmFTY3JpcHRDYWxsRnJhbWUuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE2NTkwNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtODEs
NiArODEsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uKCkg
Y29uc3QgeyByZXR1cm4gdm0oKS5leGNlcHRpb24oKTsgfQogICAgICAgICBib29sIGhhZEV4Y2Vw
dGlvbigpIGNvbnN0IHsgcmV0dXJuICF2bSgpLmV4Y2VwdGlvbigpLmlzRW1wdHkoKTsgfQogCisg
ICAgICAgIElkZW50aWZpZXJUYWJsZSYgYXRvbWljU3RyaW5nVGFibGUoKSBjb25zdCB7IHJldHVy
biB2bSgpLmF0b21pY1N0cmluZ1RhYmxlKCk7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRp
ZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqdm0oKS5wcm9wZXJ0eU5hbWVz
OyB9CiAgICAgICAgIGNvbnN0IE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBlbXB0eUxpc3QoKSBjb25z
dCB7IHJldHVybiAqdm0oKS5lbXB0eUxpc3Q7IH0KICAgICAgICAgSW50ZXJwcmV0ZXIqIGludGVy
cHJldGVyKCkgeyByZXR1cm4gdm0oKS5pbnRlcnByZXRlcjsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZVByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDE2NTkwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQ29uc29s
ZUNsaWVudC5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVy
cy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTQ29uc29sZS5oIgogI2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5o
IgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAxNjU5MDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BU0NJSUZhc3RQYXRoLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nVGFibGUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CiAKIHVzaW5nIFdURjo6VGhyZWFkU3BlY2lmaWM7CkBAIC00OCw2
MiArNDksMTQgQEAgdm9pZCBkZWxldGVJZGVudGlmaWVyVGFibGUoSWRlbnRpZmllclRhYgogICAg
IGRlbGV0ZSB0YWJsZTsKIH0KIAotc3RydWN0IElkZW50aWZpZXJBU0NJSVN0cmluZ1RyYW5zbGF0
b3IgewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IExDaGFyKiBjKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoYyk7
Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogciwgY29uc3QgTENo
YXIqIHMpCi0gICAgewotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwociwgcyk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwg
Y29uc3QgTENoYXIqIGMsIHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICBzaXplX3QgbGVu
Z3RoID0gc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGMpKTsKLSAgICAgICAg
bG9jYXRpb24gPSAmU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oYyksIGxlbmd0aCkubGVha1JlZigpOwotICAgICAgICBsb2NhdGlvbi0+
c2V0SGFzaChoYXNoKTsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgSWRlbnRpZmllckxDaGFyRnJvbVVD
aGFyVHJhbnNsYXRvciB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2hhckJ1ZmZl
cjxVQ2hhcj4mIGJ1ZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1
dGVIYXNoQW5kTWFza1RvcDhCaXRzKGJ1Zi5zLCBidWYubGVuZ3RoKTsKLSAgICB9Ci0gICAgCi0g
ICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogc3RyLCBjb25zdCBDaGFyQnVmZmVyPFVD
aGFyPiYgYnVmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKHN0ciwg
YnVmLnMsIGJ1Zi5sZW5ndGgpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xh
dGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBDaGFyQnVmZmVyPFVDaGFyPiYgYnVmLCB1
bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAgICAgTENoYXIqIGQ7Ci0gICAgICAgIFN0cmluZ0lt
cGwmIHIgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGJ1Zi5sZW5ndGgsIGQpLmxl
YWtSZWYoKTsKLSAgICAgICAgV1RGOjpjb3B5TENoYXJzRnJvbVVDaGFyU291cmNlKGQsIGJ1Zi5z
LCBidWYubGVuZ3RoKTsKLSAgICAgICAgci5zZXRIYXNoKGhhc2gpOwotICAgICAgICBsb2NhdGlv
biA9ICZyOwotICAgIH0KLX07Ci0KIFBhc3NSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRk
KFZNKiB2bSwgY29uc3QgY2hhciogYykKIHsKICAgICBBU1NFUlQoYyk7CiAgICAgQVNTRVJUKGNb
MF0pOwogICAgIGlmICghY1sxXSkKLSAgICAgICAgcmV0dXJuIGFkZCh2bSwgdm0tPnNtYWxsU3Ry
aW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoY1swXSkpOwotCi0gICAgSWRlbnRpZmllclRh
YmxlJiBpZGVudGlmaWVyVGFibGUgPSAqdm0tPmlkZW50aWZpZXJUYWJsZTsKLQotICAgIEhhc2hT
ZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gaWRlbnRpZmllclRhYmxlLmFk
ZDxjb25zdCBMQ2hhciosIElkZW50aWZpZXJBU0NJSVN0cmluZ1RyYW5zbGF0b3I+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjKSk7Ci0KLSAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIG5l
d2x5LXRyYW5zbGF0ZWQsIHRoZW4gd2UgbmVlZCB0byBhZG9wdCBpdC4KLSAgICAvLyBUaGUgYm9v
bGVhbiBpbiB0aGUgcGFpciB0ZWxscyB1cyBpZiB0aGF0IGlzIHNvLgotICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiBhZGRlZFN0cmluZyA9IGFkZFJlc3VsdC5pc05ld0VudHJ5ID8gYWRvcHRSZWYoKmFk
ZFJlc3VsdC5pdGVyYXRvcikgOiAqYWRkUmVzdWx0Lml0ZXJhdG9yOworICAgICAgICByZXR1cm4g
KnZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGNbMF0pOwogCi0gICAg
cmV0dXJuIGFkZGVkU3RyaW5nLnJlbGVhc2VOb25OdWxsKCk7CisgICAgcmV0dXJuICpBdG9taWNT
dHJpbmc6OmFkZChjKTsKIH0KIAogUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBjKQpAQCAtMTE3LDQyICs3MCwxMiBAQCBQYXNz
UmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZDgoVk0qCiAgICAgICAgIFVDaGFyIGMgPSBz
WzBdOwogICAgICAgICBBU1NFUlQoYyA8PSAweGZmKTsKICAgICAgICAgaWYgKGNhblVzZVNpbmds
ZUNoYXJhY3RlclN0cmluZyhjKSkKLSAgICAgICAgICAgIHJldHVybiBhZGQodm0sIHZtLT5zbWFs
bFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGMpKTsKKyAgICAgICAgICAgIHJldHVy
biAqdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYyk7CiAgICAgfQot
ICAgIAogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gKlN0cmluZ0ltcGw6OmVtcHR5
KCk7Ci0gICAgQ2hhckJ1ZmZlcjxVQ2hhcj4gYnVmID0geyBzLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obGVuZ3RoKSB9OwotICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVz
dWx0ID0gdm0tPmlkZW50aWZpZXJUYWJsZS0+YWRkPENoYXJCdWZmZXI8VUNoYXI+LCBJZGVudGlm
aWVyTENoYXJGcm9tVUNoYXJUcmFuc2xhdG9yID4oYnVmKTsKLSAgICAKLSAgICAvLyBJZiB0aGUg
c3RyaW5nIGlzIG5ld2x5LXRyYW5zbGF0ZWQsIHRoZW4gd2UgbmVlZCB0byBhZG9wdCBpdC4KLSAg
ICAvLyBUaGUgYm9vbGVhbiBpbiB0aGUgcGFpciB0ZWxscyB1cyBpZiB0aGF0IGlzIHNvLgotICAg
IHJldHVybiBhZGRSZXN1bHQuaXNOZXdFbnRyeSA/IGFkb3B0UmVmKCoqYWRkUmVzdWx0Lml0ZXJh
dG9yKSA6ICoqYWRkUmVzdWx0Lml0ZXJhdG9yOwotfQotCi1QYXNzUmVmPFN0cmluZ0ltcGw+IElk
ZW50aWZpZXI6OmFkZFNsb3dDYXNlKFZNKiB2bSwgU3RyaW5nSW1wbCogcikKLXsKLSAgICBpZiAo
ci0+aXNFbXB0eVVuaXF1ZSgpKQotICAgICAgICByZXR1cm4gKnI7Ci0gICAgQVNTRVJUKCFyLT5p
c0lkZW50aWZpZXIoKSk7Ci0gICAgLy8gVGhlIGVtcHR5ICYgbnVsbCBzdHJpbmdzIGFyZSBzdGF0
aWMgc2luZ2xldG9ucywgYW5kIHN0YXRpYyBzdHJpbmdzIGFyZSBoYW5kbGVkCi0gICAgLy8gaW4g
OjphZGQoKSBpbiB0aGUgaGVhZGVyLCBzbyB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgd2l0aCBh
IHplcm8gbGVuZ3RoIHN0cmluZy4KLSAgICBBU1NFUlQoci0+bGVuZ3RoKCkpOwotCi0gICAgaWYg
KHItPmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAgVUNoYXIgYyA9ICgqcilbMF07Ci0gICAgICAg
IGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAgICAgIHIgPSB2bS0+
c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKTsKLSAgICAgICAgICAgIGlm
IChyLT5pc0lkZW50aWZpZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKnI7Ci0gICAgfQot
Ci0gICAgcmV0dXJuICoqdm0tPmlkZW50aWZpZXJUYWJsZS0+YWRkKHIpLml0ZXJhdG9yOwotfQog
Ci1QYXNzUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZFNsb3dDYXNlKEV4ZWNTdGF0ZSog
ZXhlYywgU3RyaW5nSW1wbCogcikKLXsKLSAgICByZXR1cm4gYWRkU2xvd0Nhc2UoJmV4ZWMtPnZt
KCksIHIpOworICAgIHJldHVybiAqQXRvbWljU3RyaW5nOjphZGQocywgbGVuZ3RoKTsKIH0KIAog
SWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgdmFs
dWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCShy
ZXZpc2lvbiAxNjU5MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlm
aWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDIxICszNiwyMSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIElkZW50aWZpZXIoKSB7IH0KICAgICAgICAgZW51bSBFbXB0
eUlkZW50aWZpZXJGbGFnIHsgRW1wdHlJZGVudGlmaWVyIH07Ci0gICAgICAgIElkZW50aWZpZXIo
RW1wdHlJZGVudGlmaWVyRmxhZykgOiBtX3N0cmluZyhTdHJpbmdJbXBsOjplbXB0eSgpKSB7IH0K
KyAgICAgICAgSWRlbnRpZmllcihFbXB0eUlkZW50aWZpZXJGbGFnKSA6IG1fc3RyaW5nKFN0cmlu
Z0ltcGw6OmVtcHR5KCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJZGVudGlmaWVyKCkp
OyB9CiAKICAgICAgICAgLy8gT25seSB0byBiZSB1c2VkIHdpdGggc3RyaW5nIGxpdGVyYWxzLgog
ICAgICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+Ci0gICAgICAgIElkZW50
aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVy
c0NvdW50XSkgOiBtX3N0cmluZyhhZGQoZXhlYywgY2hhcmFjdGVycykpIHsgfQorICAgICAgICBJ
ZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJh
Y3RlcnNDb3VudF0pIDogbV9zdHJpbmcoYWRkKGV4ZWMsIGNoYXJhY3RlcnMpKSB7IEFTU0VSVCht
X3N0cmluZy5pbXBsKCktPmlzSWRlbnRpZmllcigpKTsgfQogICAgICAgICB0ZW1wbGF0ZTx1bnNp
Z25lZCBjaGFyYWN0ZXJzQ291bnQ+Ci0gICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBj
aGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSkgOiBtX3N0cmluZyhhZGQodm0sIGNo
YXJhY3RlcnMpKSB7IH0KKyAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IGNoYXIgKCZj
aGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5nKGFkZCh2bSwgY2hhcmFjdGVy
cykpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJZGVudGlmaWVyKCkpOyB9CiAKLSAgICAg
ICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmlu
ZyhhZGQoZXhlYywgcmVwKSkgeyB9Ci0gICAgICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBTdHJpbmcmIHMpIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHMuaW1wbCgpKSkgeyB9Cisg
ICAgICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBsKiByZXApIDogbV9z
dHJpbmcoYWRkKGV4ZWMsIHJlcCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJZGVudGlm
aWVyKCkpOyB9CisgICAgICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJp
bmcmIHMpIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHMuaW1wbCgpKSkgeyBBU1NFUlQobV9zdHJpbmcu
aW1wbCgpLT5pc0lkZW50aWZpZXIoKSk7IH0KIAotICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwg
Y29uc3QgTENoYXIqIHMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgp
KSB7IH0KLSAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVu
Z3RoKSA6IG1fc3RyaW5nKGFkZCh2bSwgcywgbGVuZ3RoKSkgeyB9Ci0gICAgICAgIElkZW50aWZp
ZXIoVk0qIHZtLCBTdHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmcoYWRkKHZtLCByZXApKSB7IH0g
Ci0gICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpIDogbV9zdHJpbmco
YWRkKHZtLCBzLmltcGwoKSkpIHsgfQorICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3Qg
TENoYXIqIHMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgpKSB7IEFT
U0VSVChtX3N0cmluZy5pbXBsKCktPmlzSWRlbnRpZmllcigpKTsgfQorICAgICAgICBJZGVudGlm
aWVyKFZNKiB2bSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKHZt
LCBzLCBsZW5ndGgpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzSWRlbnRpZmllcigpKTsg
fQorICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgU3RyaW5nSW1wbCogcmVwKSA6IG1fc3RyaW5n
KGFkZCh2bSwgcmVwKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0lkZW50aWZpZXIoKSk7
IH0KKyAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmlu
ZyhhZGQodm0sIHMuaW1wbCgpKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0lkZW50aWZp
ZXIoKSk7IH0KIAogICAgICAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyaW5nOyB9CiAgICAgICAgIFN0cmluZ0ltcGwqIGltcGwoKSBjb25zdCB7IHJldHVybiBt
X3N0cmluZy5pbXBsKCk7IH0KQEAgLTExMCwyNyArMTEwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGFkZDgoVk0qLCBjb25zdCBVQ2hhcios
IGludCBsZW5ndGgpOwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gQUxXQVlTX0lOTElO
RSBzdGF0aWMgYm9vbCBjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVCk7CiAKLSAgICAgICAg
c3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1w
bCogcikKLSAgICAgICAgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIGNoZWNrQ3VycmVu
dElkZW50aWZpZXJUYWJsZShleGVjKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHItPmlzSWRl
bnRpZmllcigpKQotICAgICAgICAgICAgICAgIHJldHVybiAqcjsKLSAgICAgICAgICAgIHJldHVy
biBhZGRTbG93Q2FzZShleGVjLCByKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZjxTdHJpbmdJbXBsPiBhZGQoVk0qIHZtLCBTdHJpbmdJbXBsKiByKQotICAgICAgICB7Ci0jaWZu
ZGVmIE5ERUJVRwotICAgICAgICAgICAgY2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKHZtKTsK
LSNlbmRpZgotICAgICAgICAgICAgaWYgKHItPmlzSWRlbnRpZmllcigpKQotICAgICAgICAgICAg
ICAgIHJldHVybiAqcjsKLSAgICAgICAgICAgIHJldHVybiBhZGRTbG93Q2FzZSh2bSwgcik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZjxTdHJp
bmdJbXBsPiBhZGRTbG93Q2FzZShFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKiByKTsKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkU2xvd0Nhc2Uo
Vk0qLCBTdHJpbmdJbXBsKiByKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4g
YWRkKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWY8U3Ry
aW5nSW1wbD4gYWRkKFZNKiwgU3RyaW5nSW1wbCopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShFeGVjU3RhdGUqKTsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2hlY2tDdXJyZW50SWRlbnRp
ZmllclRhYmxlKFZNKik7CkBAIC0xNDgsNTEgKzEyOSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgQ2hhckJ1ZmZlciB7
Ci0gICAgICAgIGNvbnN0IFQqIHM7Ci0gICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGg7Ci0gICAg
fTsKLSAgICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgSWRlbnRpZmll
ckNoYXJCdWZmZXJUcmFuc2xhdG9yIHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgQ2hhckJ1ZmZlcjxUPiYgYnVmKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3Ry
aW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhidWYucywgYnVmLmxlbmd0aCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0lt
cGwqIHN0ciwgY29uc3QgQ2hhckJ1ZmZlcjxUPiYgYnVmKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoc3RyLCBidWYucywgYnVmLmxlbmd0aCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0
aW9uLCBjb25zdCBDaGFyQnVmZmVyPFQ+JiBidWYsIHVuc2lnbmVkIGhhc2gpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIFQqIGQ7Ci0gICAgICAgICAgICBTdHJpbmdJbXBsJiByID0gU3RyaW5nSW1w
bDo6Y3JlYXRlVW5pbml0aWFsaXplZChidWYubGVuZ3RoLCBkKS5sZWFrUmVmKCk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGJ1Zi5sZW5ndGg7IGkrKykKLSAgICAgICAg
ICAgICAgICBkW2ldID0gYnVmLnNbaV07Ci0gICAgICAgICAgICByLnNldEhhc2goaGFzaCk7Ci0g
ICAgICAgICAgICBsb2NhdGlvbiA9ICZyOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgogICAgIFBhc3NSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRk
KFZNKiB2bSwgY29uc3QgVCogcywgaW50IGxlbmd0aCkKICAgICB7CiAgICAgICAgIGlmIChsZW5n
dGggPT0gMSkgewogICAgICAgICAgICAgVCBjID0gc1swXTsKICAgICAgICAgICAgIGlmIChjYW5V
c2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFkZCh2
bSwgdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYykpOworICAgICAg
ICAgICAgICAgIHJldHVybiAqdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdS
ZXAoYyk7CiAgICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIGlmICghbGVuZ3RoKQogICAgICAg
ICAgICAgcmV0dXJuICpTdHJpbmdJbXBsOjplbXB0eSgpOwotICAgICAgICBDaGFyQnVmZmVyPFQ+
IGJ1ZiA9IHsgcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkgfTsKLSAgICAgICAgSGFz
aFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSB2bS0+aWRlbnRpZmllclRh
YmxlLT5hZGQ8Q2hhckJ1ZmZlcjxUPiwgSWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yPFQ+
PihidWYpOwogICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBuZXdseS10cmFu
c2xhdGVkLCB0aGVuIHdlIG5lZWQgdG8gYWRvcHQgaXQuCi0gICAgICAgIC8vIFRoZSBib29sZWFu
IGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCi0gICAgICAgIHJldHVybiBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSA/IGFkb3B0UmVmKCoqYWRkUmVzdWx0Lml0ZXJhdG9yKSA6ICoqYWRk
UmVzdWx0Lml0ZXJhdG9yOworICAgICAgICByZXR1cm4gKkF0b21pY1N0cmluZzo6YWRkKHMsIGxl
bmd0aCk7CiAgICAgfQogCiAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVudGlm
aWVyJiBhLCBjb25zdCBJZGVudGlmaWVyJiBiKQpAQCAtMjU2LDE0ICsyMDMsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBpbnQsIElk
ZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxTdHJpbmdJbXBsPj4sIElkZW50aWZp
ZXJNYXBJbmRleEhhc2hUcmFpdHM+IElkZW50aWZpZXJNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZ0ltcGwqLCBpbnQsIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFN0cmluZ0lt
cGwqPiwgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cz4gQm9ycm93ZWRJZGVudGlmaWVyTWFw
OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICBIYXNoU2V0PFN0
cmluZ0ltcGwqPjo6QWRkUmVzdWx0IElkZW50aWZpZXJUYWJsZTo6YWRkKFUgdmFsdWUpCi0gICAg
ewotICAgICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fdGFi
bGUuYWRkPFY+KHZhbHVlKTsKLSAgICAgICAgKCpyZXN1bHQuaXRlcmF0b3IpLT5zZXRJc0lkZW50
aWZpZXIodHJ1ZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBJZGVudGlmaWVySW5saW5lc19oCisjZGVmaW5lIElkZW50aWZp
ZXJJbmxpbmVzX2gKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIklkZW50aWZp
ZXIuaCIKKworbmFtZXNwYWNlIEpTQyAgeworCitpbmxpbmUgUGFzc1JlZjxTdHJpbmdJbXBsPiBJ
ZGVudGlmaWVyOjphZGQoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBsKiByKQoreworI2lmbmRl
ZiBOREVCVUcKKyAgICBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoZXhlYyk7CisjZW5kaWYK
KyAgICByZXR1cm4gKkF0b21pY1N0cmluZzo6YWRkV2l0aFN0cmluZ1RhYmxlUHJvdmlkZXIoKmV4
ZWMsIHIpOworfQoraW5saW5lIFBhc3NSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKFZN
KiB2bSwgU3RyaW5nSW1wbCogcikKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgY2hlY2tDdXJyZW50
SWRlbnRpZmllclRhYmxlKHZtKTsKKyNlbmRpZgorICAgIHJldHVybiAqQXRvbWljU3RyaW5nOjph
ZGRXaXRoU3RyaW5nVGFibGVQcm92aWRlcigqdm0sIHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIElkZW50aWZpZXJJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHJldmlzaW9uIDE2NTkwNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
Q0pTVmFsdWVJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xv
Y2suaAkocmV2aXNpb24gMTY1OTA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ5LDcgKzUwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Ly8gRHJvcEFsbExvY2tzIG9iamVjdCB0YWtlcyBjYXJlIHRvIHJlbGVhc2UgdGhlIEpTTG9jayBv
bmx5IGlmIHlvdXIKICAgICAvLyB0aHJlYWQgYWNxdWlyZWQgaXQgdG8gYmVnaW4gd2l0aC4KIAot
ICAgIGNsYXNzIElkZW50aWZpZXJUYWJsZTsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xh
c3MgVk07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFt
ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU5hbWVBcnJheS5jcHAJKHJldmlzaW9uIDE2NTkwNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEsOCArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFt
ZUFycmF5LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKLQogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgi
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdz
LmNwcAkocmV2aXNpb24gMTY1OTA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U21hbGxTdHJpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBTbWFsbFN0
cmluZ3NTdG9yYWdlOjpTbWFsbFN0cmluZ3NTdG9yYWdlCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+
IGJhc2VTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHNpbmdsZUNoYXJh
Y3RlclN0cmluZ0NvdW50LCBjaGFyYWN0ZXJCdWZmZXIpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdDb3VudDsgKytpKSB7CiAgICAgICAgIGNoYXJh
Y3RlckJ1ZmZlcltpXSA9IGk7Ci0gICAgICAgIG1fcmVwc1tpXSA9IFN0cmluZ0ltcGw6OmNyZWF0
ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKGJhc2VTdHJpbmcsIGksIDEpOworICAgICAgICBtX3JlcHNb
aV0gPSBBdG9taWNTdHJpbmc6OmFkZChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KFN0cmluZ0ltcGw6
OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKGJhc2VTdHJpbmcsIGksIDEpKS5nZXQoKSk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lv
biAxNjU5MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUpCiAgICAgLCBwcm9taXNlQ29uc3RydWN0b3JUYWJsZShhZG9wdFB0cihuZXcg
SGFzaFRhYmxlKEpTQzo6cHJvbWlzZUNvbnN0cnVjdG9yVGFibGUpKSkKICNlbmRpZgogICAgICwg
aWRlbnRpZmllclRhYmxlKHZtVHlwZSA9PSBEZWZhdWx0ID8gd3RmVGhyZWFkRGF0YSgpLmN1cnJl
bnRJZGVudGlmaWVyVGFibGUoKSA6IGNyZWF0ZUlkZW50aWZpZXJUYWJsZSgpKQotICAgICwgcHJv
cGVydHlOYW1lcyhuZXcgQ29tbW9uSWRlbnRpZmllcnModGhpcykpCisgICAgLCBwcm9wZXJ0eU5h
bWVzKG51bGxwdHIpCiAgICAgLCBlbXB0eUxpc3QobmV3IE1hcmtlZEFyZ3VtZW50QnVmZmVyKQog
ICAgICwgcGFyc2VyQXJlbmEoYWRvcHRQdHIobmV3IFBhcnNlckFyZW5hKSkKICAgICAsIGtleXdv
cmRzKGFkb3B0UHRyKG5ldyBLZXl3b3JkcygqdGhpcykpKQpAQCAtMjQ2LDYgKzI0Niw3IEBAIFZN
OjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAvLyBOZWVkIHRvIGJl
IGNhcmVmdWwgdG8ga2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQgaGVyZQogICAgIEpTTG9ja0hv
bGRlciBsb2NrKHRoaXMpOwogICAgIElkZW50aWZpZXJUYWJsZSogZXhpc3RpbmdFbnRyeUlkZW50
aWZpZXJUYWJsZSA9IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGlk
ZW50aWZpZXJUYWJsZSk7CisgICAgcHJvcGVydHlOYW1lcyA9IG5ldyBDb21tb25JZGVudGlmaWVy
cyh0aGlzKTsKICAgICBzdHJ1Y3R1cmVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmU6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcykpOwogICAgIHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLnNl
dCgqdGhpcywgU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBEZWJ1
Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTY1OTA2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyAr
NzcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3Mg
SGFuZGxlU3RhY2s7CiAgICAgY2xhc3MgSWRlbnRpZmllcjsKLSAgICBjbGFzcyBJZGVudGlmaWVy
VGFibGU7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7
CiAgICAgY2xhc3MgSlNPYmplY3Q7CkBAIC0yOTYsNiArMjk1LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIERhdGVJbnN0YW5jZUNhY2hlIGRhdGVJbnN0YW5jZUNhY2hlOwogICAgICAgICBX
VEY6OlNpbXBsZVN0YXRzIG1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGlu
ZUpJVDsKIAorICAgICAgICBJZGVudGlmaWVyVGFibGUmIGF0b21pY1N0cmluZ1RhYmxlKCkgY29u
c3QgeyByZXR1cm4gKmlkZW50aWZpZXJUYWJsZTsgfQorCiAgICAgICAgIHZvaWQgc2V0SW5EZWZp
bmVPd25Qcm9wZXJ0eShib29sIGluRGVmaW5lT3duUHJvcGVydHkpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG1faW5EZWZpbmVPd25Qcm9wZXJ0eSA9IGluRGVmaW5lT3duUHJvcGVydHk7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAkocmV2aXNpb24gMTY1OTA2KQorKysgU291cmNlL1dU
Ri93dGYvV1RGVGhyZWFkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEwICs0Myw3IEBA
IFdURlRocmVhZERhdGE6OldURlRocmVhZERhdGEoKQogICAgIDogbV9hcGlEYXRhKDApCiAgICAg
LCBtX2F0b21pY1N0cmluZ1RhYmxlKDApCiAgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1
Y3RvcigwKQotI2lmICFVU0UoV0VCX1RIUkVBRCkKLSAgICAsIG1fZGVmYXVsdElkZW50aWZpZXJU
YWJsZShuZXcgSlNDOjpJZGVudGlmaWVyVGFibGUoKSkKLSAgICAsIG1fY3VycmVudElkZW50aWZp
ZXJUYWJsZShtX2RlZmF1bHRJZGVudGlmaWVyVGFibGUpCi0jZW5kaWYKKyAgICAsIG1fY3VycmVu
dElkZW50aWZpZXJUYWJsZSgwKQogICAgICwgbV9zdGFja0JvdW5kcyhTdGFja0JvdW5kczo6Y3Vy
cmVudFRocmVhZFN0YWNrQm91bmRzKCkpCiAjaWYgRU5BQkxFKFNUQUNLX1NUQVRTKQogICAgICwg
bV9zdGFja1N0YXRzKCkKQEAgLTU0LDIzICs1MSwxNCBAQCBXVEZUaHJlYWREYXRhOjpXVEZUaHJl
YWREYXRhKCkKICAgICAsIG1fc2F2ZWRTdGFja1BvaW50ZXJBdFZNRW50cnkoMCkKICAgICAsIG1f
c2F2ZWRMYXN0U3RhY2tUb3Aoc3RhY2soKS5vcmlnaW4oKSkKIHsKLSNpZiBVU0UoV0VCX1RIUkVB
RCkKLSAgICBzdGF0aWMgSlNDOjpJZGVudGlmaWVyVGFibGUqIHNoYXJlZElkZW50aWZpZXJUYWJs
ZSA9IG5ldyBKU0M6OklkZW50aWZpZXJUYWJsZSgpOwotICAgIGlmIChwdGhyZWFkX21haW5fbnAo
KSB8fCBpc1dlYlRocmVhZCgpKQotICAgICAgICBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGUgPSBz
aGFyZWRJZGVudGlmaWVyVGFibGU7Ci0gICAgZWxzZQotICAgICAgICBtX2RlZmF1bHRJZGVudGlm
aWVyVGFibGUgPSBuZXcgSlNDOjpJZGVudGlmaWVyVGFibGUoKTsKLQotICAgIG1fY3VycmVudElk
ZW50aWZpZXJUYWJsZSA9IG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZTsKLSNlbmRpZgogICAgIEF0
b21pY1N0cmluZ1RhYmxlOjpjcmVhdGUoKnRoaXMpOworICAgIG1fY3VycmVudElkZW50aWZpZXJU
YWJsZSA9IG1fYXRvbWljU3RyaW5nVGFibGU7CiB9CiAKIFdURlRocmVhZERhdGE6On5XVEZUaHJl
YWREYXRhKCkKIHsKICAgICBpZiAobV9hdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3IpCiAgICAg
ICAgIG1fYXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yKG1fYXRvbWljU3RyaW5nVGFibGUpOwot
ICAgIGRlbGV0ZSBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGU7CiB9CiAKICNpZiBVU0UoUFRIUkVB
RF9HRVRTUEVDSUZJQ19ESVJFQ1QpCkBAIC04NiwyMSArNzQsMyBAQCBXVEZUaHJlYWREYXRhJiBX
VEZUaHJlYWREYXRhOjpjcmVhdGVBbmRSCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1JZGVudGlmaWVyVGFibGU6On5JZGVudGlmaWVyVGFibGUoKQot
ewotICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciBlbmQgPSBtX3RhYmxlLmVuZCgp
OwotICAgIGZvciAoSGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxl
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPnNldElzSWRl
bnRpZmllcihmYWxzZSk7Ci19Ci0KLUhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgSWRl
bnRpZmllclRhYmxlOjphZGQoU3RyaW5nSW1wbCogdmFsdWUpCi17Ci0gICAgSGFzaFNldDxTdHJp
bmdJbXBsKj46OkFkZFJlc3VsdCByZXN1bHQgPSBtX3RhYmxlLmFkZCh2YWx1ZSk7Ci0gICAgKCpy
ZXN1bHQuaXRlcmF0b3IpLT5zZXRJc0lkZW50aWZpZXIodHJ1ZSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJl
YWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCShy
ZXZpc2lvbiAxNjU5MDYpCisrKyBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDI4ICs0OSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
ICNlbmRpZgogCi0vLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBsYXllcmluZyB2aW9sYXRp
b24gdW50aWwgd2UgbW92ZSBtb3JlIG9mIHRoZSBzdHJpbmcgY29kZSBmcm9tIEphdmFTY3JpcHRD
b3JlIHRvIFdURi4KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBJZGVudGlmaWVyVGFibGUgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB+SWRlbnRpZmllclRhYmxlKCk7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgSGFzaFNl
dDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGQoU3RyaW5nSW1wbCopOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQg
YWRkKFUpOwotCi0gICAgYm9vbCByZW1vdmUoU3RyaW5nSW1wbCogaWRlbnRpZmllcikgeyByZXR1
cm4gbV90YWJsZS5yZW1vdmUoaWRlbnRpZmllcik7IH0KLQotcHJpdmF0ZToKLSAgICBIYXNoU2V0
PFN0cmluZ0ltcGwqPiBtX3RhYmxlOwotfTsKLQotfQotCiBuYW1lc3BhY2UgV1RGIHsKIAogY2xh
c3MgQXRvbWljU3RyaW5nVGFibGU7Cit0eXBlZGVmIEF0b21pY1N0cmluZ1RhYmxlIElkZW50aWZp
ZXJUYWJsZTsKIAogdHlwZWRlZiB2b2lkICgqQXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yKShB
dG9taWNTdHJpbmdUYWJsZSopOwogCkBAIC04MiwyNCArNjQsMjQgQEAgcHVibGljOgogCiAgICAg
QXRvbWljU3RyaW5nVGFibGUqIGF0b21pY1N0cmluZ1RhYmxlKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2F0b21pY1N0cmluZ1RhYmxlOworICAgICAgICByZXR1cm4gbV9jdXJyZW50SWRlbnRp
ZmllclRhYmxlOwogICAgIH0KIAotICAgIEpTQzo6SWRlbnRpZmllclRhYmxlKiBjdXJyZW50SWRl
bnRpZmllclRhYmxlKCkKKyAgICBJZGVudGlmaWVyVGFibGUqIGN1cnJlbnRJZGVudGlmaWVyVGFi
bGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY3VycmVudElkZW50aWZpZXJUYWJsZTsKICAg
ICB9CiAKLSAgICBKU0M6OklkZW50aWZpZXJUYWJsZSogc2V0Q3VycmVudElkZW50aWZpZXJUYWJs
ZShKU0M6OklkZW50aWZpZXJUYWJsZSogaWRlbnRpZmllclRhYmxlKQorICAgIElkZW50aWZpZXJU
YWJsZSogc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShJZGVudGlmaWVyVGFibGUqIGlkZW50aWZp
ZXJUYWJsZSkKICAgICB7Ci0gICAgICAgIEpTQzo6SWRlbnRpZmllclRhYmxlKiBvbGRJZGVudGlm
aWVyVGFibGUgPSBtX2N1cnJlbnRJZGVudGlmaWVyVGFibGU7CisgICAgICAgIElkZW50aWZpZXJU
YWJsZSogb2xkSWRlbnRpZmllclRhYmxlID0gbV9jdXJyZW50SWRlbnRpZmllclRhYmxlOwogICAg
ICAgICBtX2N1cnJlbnRJZGVudGlmaWVyVGFibGUgPSBpZGVudGlmaWVyVGFibGU7CiAgICAgICAg
IHJldHVybiBvbGRJZGVudGlmaWVyVGFibGU7CiAgICAgfQogCiAgICAgdm9pZCByZXNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUoKQogICAgIHsKLSAgICAgICAgbV9jdXJyZW50SWRlbnRpZmllclRh
YmxlID0gbV9kZWZhdWx0SWRlbnRpZmllclRhYmxlOworICAgICAgICBtX2N1cnJlbnRJZGVudGlm
aWVyVGFibGUgPSBtX2F0b21pY1N0cmluZ1RhYmxlOwogICAgIH0KIAogICAgIGNvbnN0IFN0YWNr
Qm91bmRzJiBzdGFjaygpCkBAIC0xNDUsOCArMTI3LDcgQEAgcHJpdmF0ZToKICAgICBBdG9taWNT
dHJpbmdUYWJsZSogbV9hdG9taWNTdHJpbmdUYWJsZTsKICAgICBBdG9taWNTdHJpbmdUYWJsZURl
c3RydWN0b3IgbV9hdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3I7CiAKLSAgICBKU0M6OklkZW50
aWZpZXJUYWJsZSogbV9kZWZhdWx0SWRlbnRpZmllclRhYmxlOwotICAgIEpTQzo6SWRlbnRpZmll
clRhYmxlKiBtX2N1cnJlbnRJZGVudGlmaWVyVGFibGU7CisgICAgSWRlbnRpZmllclRhYmxlKiBt
X2N1cnJlbnRJZGVudGlmaWVyVGFibGU7CiAgICAgU3RhY2tCb3VuZHMgbV9zdGFja0JvdW5kczsK
ICNpZiBFTkFCTEUoU1RBQ0tfU1RBVFMpCiAgICAgU3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHMg
bV9zdGFja1N0YXRzOwpAQCAtMTg4LDUgKzE2OSw2IEBAIGlubGluZSBXVEZUaHJlYWREYXRhJiB3
dGZUaHJlYWREYXRhKCkKIAogdXNpbmcgV1RGOjpXVEZUaHJlYWREYXRhOwogdXNpbmcgV1RGOjp3
dGZUaHJlYWREYXRhOwordXNpbmcgV1RGOjpJZGVudGlmaWVyVGFibGU7CiAKICNlbmRpZiAvLyBX
VEZUaHJlYWREYXRhX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHJl
dmlzaW9uIDE2NTkwNikKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDE0LDYgKzQxNCwyNCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IEF0b21pY1N0cmluZzo6YWRkCiAgICAgcmV0dXJuICphZGRSZXN1bHQuaXRlcmF0b3I7CiB9CiAK
K1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGRTbG93Q2FzZShBdG9taWNT
dHJpbmdUYWJsZSYgc3RyaW5nVGFibGUsIFN0cmluZ0ltcGwqIHN0cmluZykKK3sKKyAgICBpZiAo
IXN0cmluZy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwor
CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc3RyaW5nLT5pc0F0b21pYygpLCAiQXRvbWljU3Ry
aW5nIHNob3VsZCBub3QgaGl0IHRoZSBzbG93IGNhc2UgaWYgdGhlIHN0cmluZyBpcyBhbHJlYWR5
IGF0b21pYy4iKTsKKworICAgIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKKyAgICBI
YXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlLnRh
YmxlKCkuYWRkKHN0cmluZyk7CisKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAg
ICAgICAgQVNTRVJUKCphZGRSZXN1bHQuaXRlcmF0b3IgPT0gc3RyaW5nKTsKKyAgICAgICAgc3Ry
aW5nLT5zZXRJc0F0b21pYyh0cnVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gKmFkZFJlc3VsdC5p
dGVyYXRvcjsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHN0YXRpYyBp
bmxpbmUgSGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGZpbmRTdHJpbmcoY29uc3QgU3Ry
aW5nSW1wbCogc3RyaW5nSW1wbCkKIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWlj
U3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcu
aAkocmV2aXNpb24gMTY1OTA2KQorKysgU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAor
Y2xhc3MgQXRvbWljU3RyaW5nVGFibGU7CiBzdHJ1Y3QgQXRvbWljU3RyaW5nSGFzaDsKIAogY2xh
c3MgQXRvbWljU3RyaW5nIHsKQEAgLTE2OCwxMiArMTY5LDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2hvdygpIGNvbnN0OwogI2VuZGlmCiAKLXByaXZhdGU6Ci0gICAgLy8gVGhlIGV4cGxpY2l0IGNv
bnN0cnVjdG9ycyB3aXRoIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwgbXVzdCBi
ZSB1c2VkIGZvciBsaXRlcmFscy4KLSAgICBBdG9taWNTdHJpbmcoQVNDSUlMaXRlcmFsKTsKLQot
ICAgIFN0cmluZyBtX3N0cmluZzsKLSAgICAKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3Rh
dGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKGNvbnN0IExDaGFyKik7CiAgICAgQUxXQVlT
X0lOTElORSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgY2hhciogcykg
eyByZXR1cm4gYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSk7IH07CiAgICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChj
b25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CkBAIC0xOTEsMTEgKzE4NiwyOSBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gYWRkU2xvd0Nhc2Uoc3RyaW5nKTsKICAgICB9CiAgICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZEZyb21M
aXRlcmFsRGF0YShjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwotICAg
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGRT
bG93Q2FzZShTdHJpbmdJbXBsKik7CiAjaWYgVVNFKENGKQogICAgIFdURl9FWFBPUlRfU1RSSU5H
X0FQSSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoQ0ZTdHJpbmdSZWYpOwogI2Vu
ZGlmCiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUYWJsZVByb3ZpZGVyPgorICAgIEFM
V0FZU19JTkxJTkUgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkV2l0aFN0cmluZ1Rh
YmxlUHJvdmlkZXIoU3RyaW5nVGFibGVQcm92aWRlciYgc3RyaW5nVGFibGVQcm92aWRlciwgU3Ry
aW5nSW1wbCogc3RyaW5nKQorICAgIHsKKyAgICAgICAgaWYgKCFzdHJpbmcgfHwgc3RyaW5nLT5p
c0F0b21pYygpKSB7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzdHJpbmcgfHwg
c3RyaW5nID09IFN0cmluZ0ltcGw6OmVtcHR5KCkgfHwgaXNJbkF0b21pY1N0cmluZ1RhYmxlKHN0
cmluZyksICJUaGUgYXRvbWljIHN0cmluZyBjb21lcyBmcm9tIGFuIG90aGVyIHRocmVhZCEiKTsK
KyAgICAgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFk
ZFNsb3dDYXNlKHN0cmluZ1RhYmxlUHJvdmlkZXIuYXRvbWljU3RyaW5nVGFibGUoKSwgc3RyaW5n
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgLy8gVGhlIGV4cGxpY2l0IGNvbnN0cnVjdG9ycyB3
aXRoIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwgbXVzdCBiZSB1c2VkIGZvciBs
aXRlcmFscy4KKyAgICBBdG9taWNTdHJpbmcoQVNDSUlMaXRlcmFsKTsKKworICAgIFN0cmluZyBt
X3N0cmluZzsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gYWRkU2xvd0Nhc2UoU3RyaW5nSW1wbCopOworICAgIFdURl9FWFBPUlRf
U1RSSU5HX0FQSSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGRTbG93Q2FzZShBdG9t
aWNTdHJpbmdUYWJsZSYsIFN0cmluZ0ltcGwqKTsKKwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBzdGF0aWMgQXRvbWljU3RyaW5nSW1wbCogZmluZFNsb3dDYXNlKFN0cmluZ0ltcGwmKTsKICAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIEF0b21pY1N0cmluZyBmcm9tVVRGOEludGVy
bmFsKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbWljU3RyaW5nVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbWljU3RyaW5nVGFibGUuY3BwCShyZXZpc2lvbiAxNjU5MDYpCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEg
KzUxLDE0IEBAIHZvaWQgQXRvbWljU3RyaW5nVGFibGU6OmNyZWF0ZShXVEZUaHJlYWQKICNlbmRp
ZiAvLyBVU0UoV0VCX1RIUkVBRCkKIH0KIAorQXRvbWljU3RyaW5nVGFibGU6On5BdG9taWNTdHJp
bmdUYWJsZSgpCit7CisgICAgZm9yIChhdXRvKiBzdHJpbmcgOiBtX3RhYmxlKQorICAgICAgICBz
dHJpbmctPnNldElzQXRvbWljKGZhbHNlKTsKK30KKwogdm9pZCBBdG9taWNTdHJpbmdUYWJsZTo6
ZGVzdHJveShBdG9taWNTdHJpbmdUYWJsZSogdGFibGUpCiB7Ci0gICAgSGFzaFNldDxTdHJpbmdJ
bXBsKj46Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5tX3RhYmxlLmVuZCgpOwotICAgIGZvciAoSGFz
aFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+bV90YWJsZS5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT5zZXRJc0F0b21pYyhmYWxz
ZSk7CiAgICAgZGVsZXRlIHRhYmxlOwogfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21pY1N0cmluZ1RhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9BdG9t
aWNTdHJpbmdUYWJsZS5oCShyZXZpc2lvbiAxNjU5MDYpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0F0b21pY1N0cmluZ1RhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgY2xh
c3MgU3RyaW5nSW1wbDsKIGNsYXNzIEF0b21pY1N0cmluZ1RhYmxlIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkF0b21pY1N0
cmluZ1RhYmxlKCk7CiAKICAgICBzdGF0aWMgdm9pZCBjcmVhdGUoV1RGVGhyZWFkRGF0YSYpOwog
ICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+JiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7IH0KSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMTY1OTA2KQorKysgU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDEw
ICsxMTUsNiBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiAKICAgICBpZiAoaXNBdG9taWMo
KSkKICAgICAgICAgQXRvbWljU3RyaW5nOjpyZW1vdmUodGhpcyk7Ci0gICAgaWYgKGlzSWRlbnRp
ZmllcigpKSB7Ci0gICAgICAgIGlmICghd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVy
VGFibGUoKS0+cmVtb3ZlKHRoaXMpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICB9CiAKICAg
ICBCdWZmZXJPd25lcnNoaXAgb3duZXJzaGlwID0gYnVmZmVyT3duZXJzaGlwKCk7CiAKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCShyZXZpc2lvbiAxNjU5MDYpCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTQgKzQ0LDkgQEAg
dHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlN0cmluZyAqIENGU3RyaQogQGNsYXNzIE5TU3RyaW5n
OwogI2VuZGlmCiAKLS8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGxheWVyaW5nIHZpb2xh
dGlvbiB3aGlsZSB3ZSBtb3ZlIHN0cmluZyBjb2RlIHRvIFdURi4KLS8vIExhbmRpbmcgdGhlIGZp
bGUgbW92ZXMgaW4gb25lIHBhdGNoLCB3aWxsIGZvbGxvdyBvbiB3aXRoIHBhdGNoZXMgdG8gY2hh
bmdlIHRoZSBuYW1lc3BhY2VzLgogbmFtZXNwYWNlIEpTQyB7Ci1zdHJ1Y3QgSWRlbnRpZmllckFT
Q0lJU3RyaW5nVHJhbnNsYXRvcjsKIG5hbWVzcGFjZSBMTEludCB7IGNsYXNzIERhdGE7IH0KIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOwotc3RydWN0IElkZW50aWZpZXJMQ2hhckZy
b21VQ2hhclRyYW5zbGF0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMTMyLDEwICsxMjcs
NiBAQCBzdHJ1Y3QgU3RyaW5nU3RhdHMgewogCiBjbGFzcyBTdHJpbmdJbXBsIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTdHJpbmdJbXBsKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0g
ICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJBU0NJSVN0cmluZ1RyYW5zbGF0b3I7Ci0g
ICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxMQ2hh
cj47Ci0gICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRv
cjxVQ2hhcj47Ci0gICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJMQ2hhckZyb21VQ2hh
clRyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6OkNTdHJpbmdUcmFuc2xhdG9yOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGZyaWVuZCBzdHJ1Y3QgV1RGOjpI
YXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6Okhhc2hB
bmRVVEY4Q2hhcmFjdGVyc1RyYW5zbGF0b3I7CkBAIC0xNjMsNyArMTU0LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcpCiAgICAg
ICAgICwgbV9sZW5ndGgoMCkKICAgICAgICAgLCBtX2RhdGE4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigmbV9sZW5ndGgpKQotICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZs
YWc4Qml0QnVmZmVyIHwgc19oYXNoRmxhZ0lzSWRlbnRpZmllciB8IHNfaGFzaEZsYWdJc0F0b21p
YyB8IEJ1ZmZlck93bmVkKQorICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0
QnVmZmVyIHwgc19oYXNoRmxhZ0lzQXRvbWljIHwgQnVmZmVyT3duZWQpCiAgICAgewogICAgICAg
ICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFzaCBpcyBjb21wdXRlZCBzbyB0aGF0IEF0b21pY1N0cmlu
Z0hhc2ggY2FuIGNhbGwgZXhpc3RpbmdIYXNoKCkKICAgICAgICAgLy8gd2l0aCBpbXB1bml0eS4g
VGhlIGVtcHR5IHN0cmluZyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgaXMgbmV2ZXIgZW50ZXJlZCBp
bnRvCkBAIC00MTMsNyArNDA0LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHVuc2lnbmVkIGZs
YWdzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmluZ0ltcGwsIG1faGFzaEFu
ZEZsYWdzKTsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnSXM4Qml0KCkgeyByZXR1cm4gc19o
YXNoRmxhZzhCaXRCdWZmZXI7IH0KLSAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ0lzSWRlbnRpZmll
cigpIHsgcmV0dXJuIHNfaGFzaEZsYWdJc0lkZW50aWZpZXI7IH0KKyAgICBzdGF0aWMgdW5zaWdu
ZWQgZmxhZ0lzSWRlbnRpZmllcigpIHsgcmV0dXJuIHNfaGFzaEZsYWdJc0F0b21pYzsgfQogICAg
IHN0YXRpYyB1bnNpZ25lZCBkYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cmluZ0ltcGwsIG1fZGF0YTgpOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CkBAIC00ODEs
MTggKzQ3MiwxMiBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhczE2Qml0U2hhZG93KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hGbGFnSGFzMTZCaXRTaGFkb3c7IH0KICAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCB1cGNvbnZlcnRDaGFyYWN0ZXJzKHVuc2lnbmVk
LCB1bnNpZ25lZCkgY29uc3Q7Ci0gICAgYm9vbCBpc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVy
biBtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdJc0lkZW50aWZpZXI7IH0KLSAgICBib29sIGlz
SWRlbnRpZmllck9yVW5pcXVlKCkgY29uc3QgeyByZXR1cm4gaXNJZGVudGlmaWVyKCkgfHwgaXNF
bXB0eVVuaXF1ZSgpOyB9Ci0gICAgdm9pZCBzZXRJc0lkZW50aWZpZXIoYm9vbCBpc0lkZW50aWZp
ZXIpCisgICAgYm9vbCBpc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBpc0F0b21pYygpOyB9
CisgICAgYm9vbCBpc0lkZW50aWZpZXJPclVuaXF1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICBB
U1NFUlQoIWlzU3RhdGljKCkpOwotICAgICAgICBBU1NFUlQoIWlzRW1wdHlVbmlxdWUoKSk7Ci0g
ICAgICAgIGlmIChpc0lkZW50aWZpZXIpCi0gICAgICAgICAgICBtX2hhc2hBbmRGbGFncyB8PSBz
X2hhc2hGbGFnSXNJZGVudGlmaWVyOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2hhc2hB
bmRGbGFncyAmPSB+c19oYXNoRmxhZ0lzSWRlbnRpZmllcjsKKyAgICAgICAgQVNTRVJUKChpc0lk
ZW50aWZpZXIoKSB8fCBpc0VtcHR5VW5pcXVlKCkpID09IChpc0lkZW50aWZpZXIoKSB8fCAhbV9s
ZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIGlzSWRlbnRpZmllcigpIHx8ICFtX2xlbmd0aDsKICAg
ICB9Ci0KICAgICBib29sIGlzRW1wdHlVbmlxdWUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuICFsZW5ndGgoKSAmJiAhaXNTdGF0aWMoKTsKQEAgLTgyMiw3ICs4MDcsNiBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciA9IDF1IDw8
IDU7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdJc0F0b21pYyA9IDF1IDw8
IDQ7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdEaWRSZXBvcnRDb3N0ID0g
MXUgPDwgMzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ0lzSWRlbnRpZmll
ciA9IDF1IDw8IDI7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaE1hc2tCdWZmZXJP
d25lcnNoaXAgPSAxdSB8ICgxdSA8PCAxKTsKIAogI2lmZGVmIFNUUklOR19TVEFUUwpJbmRleDog
U291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5oCShyZXZpc2lvbiAxNjU5MDYpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiw3IEBACiAjaWZuZGVmIElkZW50aWZpZXJSZXBfaAogI2RlZmluZSBJZGVudGlmaWVy
UmVwX2gKIAorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYv
U3RyaW5nRXh0cmFzLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227265</attachid>
            <date>2014-03-20 00:18:05 -0700</date>
            <delta_ts>2014-03-20 12:00:47 -0700</delta_ts>
            <desc>Tests pass, think the JSC/WTF changes are probably complete.</desc>
            <filename>128624.11.patch</filename>
            <type>text/plain</type>
            <size>44644</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY1OTQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE0LTAzLTE5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBNZXJnZSBBdG9taWNTdHJpbmcsIElkZW50aWZpZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODYyNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVj
dC5tbToKKyAgICAgICAgICAgIC0gdXBkYXRlZCBpbmNsdWRlcy4KKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAgICAgLSBhZGRlZCBJ
ZGVudGlmaWVySW5saW5lcy5oLgorICAgICAgICAqIGluc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0
SG9zdFByb3RvdHlwZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxG
cmFtZVByb3RvdHlwZS5jcHA6CisgICAgICAgICAgICAtIHVwZGF0ZWQgaW5jbHVkZXMuCisgICAg
ICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
YXRvbWljU3RyaW5nVGFibGUpOgorICAgICAgICAgICAgLSBhZGRlZCwgdXNlZCB2aWEgQXRvbWlj
U3RyaW5nOjphZGQgdG8gYXZvaWQgdGhyZWFkLXNwZWNpZmljIGFjY2Vzcy4KKyAgICAgICAgKiBy
dW50aW1lL0NvbnNvbGVQcm90b3R5cGUuY3BwOgorICAgICAgICAgICAgLSB1cGRhdGVkIGluY2x1
ZGVzLgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6Oklk
ZW50aWZpZXI6OmFkZCk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZDgpOgorICAgICAg
ICAgICAgLSB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcCBub3cgcmV0
dXJucyBBdG9taWMgc3RyaW5ncywgdXNlIEF0b21pY1N0cmluZzo6YWRkLgorICAgICAgICAqIHJ1
bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpJZGVudGlmaWVy
KToKKyAgICAgICAgICAgIC0gYWRkZWQgQVNTRVJUUy4KKyAgICAgICAgKEpTQzo6SWRlbnRpZmll
cjo6YWRkKToKKyAgICAgICAgICAgIC0gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJT
dHJpbmdSZXAgbm93IHJldHVybnMgQXRvbWljIHN0cmluZ3MsIHVzZSBBdG9taWNTdHJpbmc6OmFk
ZC4KKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpJZGVudGlmaWVyOjphZGQpOgorICAgICAgICAgICAgLSBtb3ZlZCBmcm9tIElkZW50
aWZpZXIuaCwgdXNlIEF0b21pY1N0cmluZzo6YWRkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDSW5s
aW5lcy5oOgorICAgICAgICAgICAgLSBhZGRlZCBJZGVudGlmaWVySW5saW5lcy5oLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgICAgICAtIHJlbW92ZWQgSWRlbnRpZmllclRh
YmxlLgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwOgorICAgICAgICAg
ICAgLSB1cGRhdGVkIGluY2x1ZGVzLgorICAgICAgICAqIHJ1bnRpbWUvU21hbGxTdHJpbmdzLmNw
cDoKKyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzU3RvcmFnZTo6U21hbGxTdHJpbmdzU3RvcmFn
ZSk6CisgICAgICAgICAgICAtIGVuc3VyZSBhbGwgc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzIGFy
ZSBBdG9taWMuCisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisgICAgICAgICAgICAtIGluc3RhbnRpYXRlIENvbW1vbklkZW50aWZpZXJzIHdpdGggdGhl
IGNvcnJlY3QgQXRvbWljU3RyaW5nVGFibGUgc2V0IG9uIHRocmVhZCBkYXRhLgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmF0b21pY1N0cmluZ1RhYmxlKToKKyAg
ICAgICAgICAgIC0gYWRkZWQsIHVzZWQgdmlhIEF0b21pY1N0cmluZzo6YWRkIHRvIGF2b2lkIHRo
cmVhZC1zcGVjaWZpYyBhY2Nlc3MuCisKIDIwMTQtMDMtMTkgIEdhdmluIEJhcnJhY2xvdWdoICA8
YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzA0OTQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAxNjU5NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTMgKzI3LDEwIEBACiAjaW5jbHVkZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCiAKICNp
bmNsdWRlICJEZWxheWVkUmVsZWFzZVNjb3BlLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVj
dC5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNo
aW5lSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKICNpZiBKU0Nf
T0JKQ19BUElfRU5BQkxFRAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTY1OTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg0NCw2ICs4NDQsNyBA
QAogCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDE2MUUwMEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBN
YWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2
XzY0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
ODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjAxNjFFMjBGM0E4
M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NjA2RERFQTE4REE0NEFCMDBBMzgz
RDAgLyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2MDZEREU5MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlmaWVySW5s
aW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QkY2NDJBMTQ4REIyQjUwMDRERTM2QSAv
KiBJbnRyaW5zaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MTJFNENCMTUyMjkxODQw
MEM4MzZCRSAvKiBNYXRjaFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTg2MTU4QUIzMTU1QzhCNDAwMEI0NUM5QyAvKiBQcm9wZXJ0eU5h
bWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MTU4
QUIyMTU1QzhCM0YwMEI0NUM5QyAvKiBQcm9wZXJ0eU5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM2Myw2ICsyMzY0LDcgQEAKIAkJODYw
M0NFRjIxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZVByb2ZpbGluZy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2MDNDRUYzMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5n
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxpbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwNEY0RjIxNDNBNkM0NDAwQjI5NUY1IC8qIENo
YW5nZUxvZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBDaGFuZ2VMb2c7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2
MDZEREU5MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJZGVudGlmaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NjEyRTRDQjE1MjI5MTg0MDBDODM2QkUgLyogTWF0Y2hSZXN1bHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0Y2hSZXN1bHQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYxNThBQjIxNTVDOEIzRjAwQjQ1QzlDIC8qIFByb3Bl
cnR5TmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eU5hbWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYyNTUzQ0UxNjEzNkFBNTAwOUYxN0Qw
IC8qIEpTUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQ
cm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zOTUwLDYgKzM5NTIsNyBA
QAogCQkJCUJDMzM3QkRFMEUxQUYwQjgwMDc2OTE4QSAvKiBHZXR0ZXJTZXR0ZXIuaCAqLywKIAkJ
CQk5MzNBMzQ5RDAzOEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8sCiAJCQkJOTMz
QTM0OUEwMzhBRTdDNjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywKKwkJCQk4NjA2RERFOTE4
REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCAqLywKIAkJCQkwRkI3RjM4RDE1
RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLywKIAkJCQkwRkI3RjM4RTE1RUQ4
RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8sCiAJCQkJMEYxM0UwNEMx
NjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCkBAIC01MzA5LDYgKzUzMTIs
NyBAQAogCQkJCUE1MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBJbnNwZWN0b3JKUy5qc29uIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzODgxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckpT
QmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM4QTE4NTY4MzM1
MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAq
LywKKwkJCQk4NjA2RERFQTE4REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1MzI0MzhDMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JK
U1R5cGVCdWlsZGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwRTRCNjIxODgwOURENTAwNjhB
NDZEIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1RDkz
QUMxODUxNEY3OTAwNDAwREVEIC8qIEluc3BlY3RvclR5cGVCdWlsZGVyLmggaW4gSGVhZGVycyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlw
dEhvc3RQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNjU5
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1
ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJ
bmplY3RlZFNjcmlwdEhvc3QuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNJbmplY3RlZFNjcmlwdEhvc3QuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMTY1OTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJHZXR0ZXJT
ZXR0ZXIuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5o
IgogI2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNjU5NDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgxLDYgKzgxLDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBKU1Zh
bHVlIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIHZtKCkuZXhjZXB0aW9uKCk7IH0KICAgICAg
ICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiAhdm0oKS5leGNlcHRpb24oKS5p
c0VtcHR5KCk7IH0KIAorICAgICAgICBJZGVudGlmaWVyVGFibGUmIGF0b21pY1N0cmluZ1RhYmxl
KCkgY29uc3QgeyByZXR1cm4gdm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpOyB9CiAgICAgICAgIGNv
bnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKnZt
KCkucHJvcGVydHlOYW1lczsgfQogICAgICAgICBjb25zdCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYg
ZW1wdHlMaXN0KCkgY29uc3QgeyByZXR1cm4gKnZtKCkuZW1wdHlMaXN0OyB9CiAgICAgICAgIElu
dGVycHJldGVyKiBpbnRlcnByZXRlcigpIHsgcmV0dXJuIHZtKCkuaW50ZXJwcmV0ZXI7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVQcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAxNjU5NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db25zb2xlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDEwIEBA
CiAjaW5jbHVkZSAiQ29uc29sZUNsaWVudC5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uSGVscGVycy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ29uc29sZS5oIgogI2luY2x1ZGUg
IlNjcmlwdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIK
LSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAkocmV2aXNp
b24gMTY1OTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVND
SUlGYXN0UGF0aC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiB1c2luZyBXVEY6OlRocmVhZFNwZWNp
ZmljOwpAQCAtNDgsNjIgKzQ5LDE0IEBAIHZvaWQgZGVsZXRlSWRlbnRpZmllclRhYmxlKElkZW50
aWZpZXJUYWIKICAgICBkZWxldGUgdGFibGU7CiB9CiAKLXN0cnVjdCBJZGVudGlmaWVyQVNDSUlT
dHJpbmdUcmFuc2xhdG9yIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBMQ2hhciog
YykKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFz
a1RvcDhCaXRzKGMpOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwq
IHIsIGNvbnN0IExDaGFyKiBzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVx
dWFsKHIsIHMpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBs
KiYgbG9jYXRpb24sIGNvbnN0IExDaGFyKiBjLCB1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAg
ICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihj
KSk7Ci0gICAgICAgIGxvY2F0aW9uID0gJlN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGMpLCBsZW5ndGgpLmxlYWtSZWYoKTsKLSAgICAg
ICAgbG9jYXRpb24tPnNldEhhc2goaGFzaCk7Ci0gICAgfQotfTsKLQotc3RydWN0IElkZW50aWZp
ZXJMQ2hhckZyb21VQ2hhclRyYW5zbGF0b3IgewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IENoYXJCdWZmZXI8VUNoYXI+JiBidWYpCi0gICAgewotICAgICAgICByZXR1cm4gU3RyaW5n
SGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhidWYucywgYnVmLmxlbmd0aCk7Ci0g
ICAgfQotICAgIAotICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwqIHN0ciwgY29uc3Qg
Q2hhckJ1ZmZlcjxVQ2hhcj4mIGJ1ZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBJZGVudGlmaWVy
OjplcXVhbChzdHIsIGJ1Zi5zLCBidWYubGVuZ3RoKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGlj
IHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwgY29uc3QgQ2hhckJ1ZmZlcjxV
Q2hhcj4mIGJ1ZiwgdW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIExDaGFyKiBkOwotICAg
ICAgICBTdHJpbmdJbXBsJiByID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChidWYu
bGVuZ3RoLCBkKS5sZWFrUmVmKCk7Ci0gICAgICAgIFdURjo6Y29weUxDaGFyc0Zyb21VQ2hhclNv
dXJjZShkLCBidWYucywgYnVmLmxlbmd0aCk7Ci0gICAgICAgIHIuc2V0SGFzaChoYXNoKTsKLSAg
ICAgICAgbG9jYXRpb24gPSAmcjsKLSAgICB9Ci19OwotCiBQYXNzUmVmPFN0cmluZ0ltcGw+IElk
ZW50aWZpZXI6OmFkZChWTSogdm0sIGNvbnN0IGNoYXIqIGMpCiB7CiAgICAgQVNTRVJUKGMpOwog
ICAgIEFTU0VSVChjWzBdKTsKICAgICBpZiAoIWNbMV0pCi0gICAgICAgIHJldHVybiBhZGQodm0s
IHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGNbMF0pKTsKLQotICAg
IElkZW50aWZpZXJUYWJsZSYgaWRlbnRpZmllclRhYmxlID0gKnZtLT5pZGVudGlmaWVyVGFibGU7
Ci0KLSAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGlkZW50
aWZpZXJUYWJsZS5hZGQ8Y29uc3QgTENoYXIqLCBJZGVudGlmaWVyQVNDSUlTdHJpbmdUcmFuc2xh
dG9yPihyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYykpOwotCi0gICAgLy8gSWYgdGhl
IHN0cmluZyBpcyBuZXdseS10cmFuc2xhdGVkLCB0aGVuIHdlIG5lZWQgdG8gYWRvcHQgaXQuCi0g
ICAgLy8gVGhlIGJvb2xlYW4gaW4gdGhlIHBhaXIgdGVsbHMgdXMgaWYgdGhhdCBpcyBzby4KLSAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gYWRkZWRTdHJpbmcgPSBhZGRSZXN1bHQuaXNOZXdFbnRyeSA/
IGFkb3B0UmVmKCphZGRSZXN1bHQuaXRlcmF0b3IpIDogKmFkZFJlc3VsdC5pdGVyYXRvcjsKKyAg
ICAgICAgcmV0dXJuICp2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChj
WzBdKTsKIAotICAgIHJldHVybiBhZGRlZFN0cmluZy5yZWxlYXNlTm9uTnVsbCgpOworICAgIHJl
dHVybiAqQXRvbWljU3RyaW5nOjphZGQoYyk7CiB9CiAKIFBhc3NSZWY8U3RyaW5nSW1wbD4gSWRl
bnRpZmllcjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogYykKQEAgLTExNyw0MiAr
NzAsMTIgQEAgUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQ4KFZNKgogICAgICAg
ICBVQ2hhciBjID0gc1swXTsKICAgICAgICAgQVNTRVJUKGMgPD0gMHhmZik7CiAgICAgICAgIGlm
IChjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYykpCi0gICAgICAgICAgICByZXR1cm4gYWRk
KHZtLCB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKSk7CisgICAg
ICAgICAgICByZXR1cm4gKnZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVw
KGMpOwogICAgIH0KLSAgICAKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuICpTdHJp
bmdJbXBsOjplbXB0eSgpOwotICAgIENoYXJCdWZmZXI8VUNoYXI+IGJ1ZiA9IHsgcywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkgfTsKLSAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRk
UmVzdWx0IGFkZFJlc3VsdCA9IHZtLT5pZGVudGlmaWVyVGFibGUtPmFkZDxDaGFyQnVmZmVyPFVD
aGFyPiwgSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyVHJhbnNsYXRvciA+KGJ1Zik7Ci0gICAgCi0g
ICAgLy8gSWYgdGhlIHN0cmluZyBpcyBuZXdseS10cmFuc2xhdGVkLCB0aGVuIHdlIG5lZWQgdG8g
YWRvcHQgaXQuCi0gICAgLy8gVGhlIGJvb2xlYW4gaW4gdGhlIHBhaXIgdGVsbHMgdXMgaWYgdGhh
dCBpcyBzby4KLSAgICByZXR1cm4gYWRkUmVzdWx0LmlzTmV3RW50cnkgPyBhZG9wdFJlZigqKmFk
ZFJlc3VsdC5pdGVyYXRvcikgOiAqKmFkZFJlc3VsdC5pdGVyYXRvcjsKLX0KLQotUGFzc1JlZjxT
dHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGRTbG93Q2FzZShWTSogdm0sIFN0cmluZ0ltcGwqIHIp
Ci17Ci0gICAgaWYgKHItPmlzRW1wdHlVbmlxdWUoKSkKLSAgICAgICAgcmV0dXJuICpyOwotICAg
IEFTU0VSVCghci0+aXNJZGVudGlmaWVyKCkpOwotICAgIC8vIFRoZSBlbXB0eSAmIG51bGwgc3Ry
aW5ncyBhcmUgc3RhdGljIHNpbmdsZXRvbnMsIGFuZCBzdGF0aWMgc3RyaW5ncyBhcmUgaGFuZGxl
ZAotICAgIC8vIGluIDo6YWRkKCkgaW4gdGhlIGhlYWRlciwgc28gd2Ugc2hvdWxkIG5ldmVyIGdl
dCBoZXJlIHdpdGggYSB6ZXJvIGxlbmd0aCBzdHJpbmcuCi0gICAgQVNTRVJUKHItPmxlbmd0aCgp
KTsKLQotICAgIGlmIChyLT5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgIFVDaGFyIGMgPSAoKnIp
WzBdOwotICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAg
ICAgICByID0gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYyk7Ci0g
ICAgICAgICAgICBpZiAoci0+aXNJZGVudGlmaWVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
ICpyOwotICAgIH0KLQotICAgIHJldHVybiAqKnZtLT5pZGVudGlmaWVyVGFibGUtPmFkZChyKS5p
dGVyYXRvcjsKLX0KIAotUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGRTbG93Q2Fz
ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwqIHIpCi17Ci0gICAgcmV0dXJuIGFkZFNsb3dD
YXNlKCZleGVjLT52bSgpLCByKTsKKyAgICByZXR1cm4gKkF0b21pY1N0cmluZzo6YWRkKHMsIGxl
bmd0aCk7CiB9CiAKIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRl
bnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lk
ZW50aWZpZXIuaAkocmV2aXNpb24gMTY1OTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyMSArMzYsMjEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBJZGVudGlmaWVyKCkgeyB9CiAgICAg
ICAgIGVudW0gRW1wdHlJZGVudGlmaWVyRmxhZyB7IEVtcHR5SWRlbnRpZmllciB9OwotICAgICAg
ICBJZGVudGlmaWVyKEVtcHR5SWRlbnRpZmllckZsYWcpIDogbV9zdHJpbmcoU3RyaW5nSW1wbDo6
ZW1wdHkoKSkgeyB9CisgICAgICAgIElkZW50aWZpZXIoRW1wdHlJZGVudGlmaWVyRmxhZykgOiBt
X3N0cmluZyhTdHJpbmdJbXBsOjplbXB0eSgpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlz
SWRlbnRpZmllcigpKTsgfQogCiAgICAgICAgIC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmlu
ZyBsaXRlcmFscy4KICAgICAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50Pgot
ICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciAoJmNoYXJhY3Rl
cnMpW2NoYXJhY3RlcnNDb3VudF0pIDogbV9zdHJpbmcoYWRkKGV4ZWMsIGNoYXJhY3RlcnMpKSB7
IH0KKyAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIgKCZjaGFy
YWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5nKGFkZChleGVjLCBjaGFyYWN0ZXJz
KSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0lkZW50aWZpZXIoKSk7IH0KICAgICAgICAg
dGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgotICAgICAgICBJZGVudGlmaWVyKFZN
KiB2bSwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIDogbV9zdHJp
bmcoYWRkKHZtLCBjaGFyYWN0ZXJzKSkgeyB9CisgICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBj
b25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSkgOiBtX3N0cmluZyhhZGQo
dm0sIGNoYXJhY3RlcnMpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzSWRlbnRpZmllcigp
KTsgfQogCi0gICAgICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBsKiBy
ZXApIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHJlcCkpIHsgfQotICAgICAgICBJZGVudGlmaWVyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKSA6IG1fc3RyaW5nKGFkZChleGVjLCBzLmlt
cGwoKSkpIHsgfQorICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1w
bCogcmVwKSA6IG1fc3RyaW5nKGFkZChleGVjLCByZXApKSB7IEFTU0VSVChtX3N0cmluZy5pbXBs
KCktPmlzSWRlbnRpZmllcigpKTsgfQorICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU3RyaW5nJiBzKSA6IG1fc3RyaW5nKGFkZChleGVjLCBzLmltcGwoKSkpIHsgQVNT
RVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJZGVudGlmaWVyKCkpOyB9CiAKLSAgICAgICAgSWRlbnRp
ZmllcihWTSogdm0sIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6IG1fc3RyaW5nKGFkZCh2
bSwgcywgbGVuZ3RoKSkgeyB9Ci0gICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBVQ2hh
ciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgfQotICAg
ICAgICBJZGVudGlmaWVyKFZNKiB2bSwgU3RyaW5nSW1wbCogcmVwKSA6IG1fc3RyaW5nKGFkZCh2
bSwgcmVwKSkgeyB9IAotICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBz
KSA6IG1fc3RyaW5nKGFkZCh2bSwgcy5pbXBsKCkpKSB7IH0KKyAgICAgICAgSWRlbnRpZmllcihW
TSogdm0sIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6IG1fc3RyaW5nKGFkZCh2bSwgcywg
bGVuZ3RoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0lkZW50aWZpZXIoKSk7IH0KKyAg
ICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6IG1f
c3RyaW5nKGFkZCh2bSwgcywgbGVuZ3RoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0lk
ZW50aWZpZXIoKSk7IH0KKyAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIFN0cmluZ0ltcGwqIHJl
cCkgOiBtX3N0cmluZyhhZGQodm0sIHJlcCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJ
ZGVudGlmaWVyKCkpOyB9CisgICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBTdHJpbmcm
IHMpIDogbV9zdHJpbmcoYWRkKHZtLCBzLmltcGwoKSkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwo
KS0+aXNJZGVudGlmaWVyKCkpOyB9CiAKICAgICAgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBj
b25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogICAgICAgICBTdHJpbmdJbXBsKiBpbXBsKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJpbmcuaW1wbCgpOyB9CkBAIC0xMTAsMjcgKzExMCw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBhZGQ4KFZNKiwg
Y29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgY2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFQp
OwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqIGV4
ZWMsIFN0cmluZ0ltcGwqIHIpCi0gICAgICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAg
ICBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoZXhlYyk7Ci0jZW5kaWYKLSAgICAgICAgICAg
IGlmIChyLT5pc0lkZW50aWZpZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKnI7Ci0gICAg
ICAgICAgICByZXR1cm4gYWRkU2xvd0Nhc2UoZXhlYywgcik7Ci0gICAgICAgIH0KLSAgICAgICAg
c3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkKFZNKiB2bSwgU3RyaW5nSW1wbCogcikKLSAg
ICAgICAgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIGNoZWNrQ3VycmVudElkZW50aWZp
ZXJUYWJsZSh2bSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChyLT5pc0lkZW50aWZpZXIoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gKnI7Ci0gICAgICAgICAgICByZXR1cm4gYWRkU2xvd0Nh
c2Uodm0sIHIpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkU2xvd0Nhc2UoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCog
cik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+
IGFkZFNsb3dDYXNlKFZNKiwgU3RyaW5nSW1wbCogcik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
PFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKik7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmPFN0cmluZ0ltcGw+IGFkZChWTSosIFN0cmluZ0ltcGwqKTsKIAogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUo
RXhlY1N0YXRlKik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNoZWNr
Q3VycmVudElkZW50aWZpZXJUYWJsZShWTSopOwpAQCAtMTQ4LDUxICsxMjksMTcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0
IENoYXJCdWZmZXIgewotICAgICAgICBjb25zdCBUKiBzOwotICAgICAgICB1bnNpZ25lZCBpbnQg
bGVuZ3RoOwotICAgIH07Ci0gICAgCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3Ry
dWN0IElkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvciB7Ci0gICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IENoYXJCdWZmZXI8VD4mIGJ1ZikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoYnVmLnMs
IGJ1Zi5sZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChTdHJpbmdJbXBsKiBzdHIsIGNvbnN0IENoYXJCdWZmZXI8VD4mIGJ1ZikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKHN0ciwgYnVmLnMsIGJ1Zi5s
ZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmlu
Z0ltcGwqJiBsb2NhdGlvbiwgY29uc3QgQ2hhckJ1ZmZlcjxUPiYgYnVmLCB1bnNpZ25lZCBoYXNo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBUKiBkOwotICAgICAgICAgICAgU3RyaW5nSW1wbCYg
ciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmLmxlbmd0aCwgZCkubGVha1Jl
ZigpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBidWYubGVuZ3RoOyBp
KyspCi0gICAgICAgICAgICAgICAgZFtpXSA9IGJ1Zi5zW2ldOwotICAgICAgICAgICAgci5zZXRI
YXNoKGhhc2gpOwotICAgICAgICAgICAgbG9jYXRpb24gPSAmcjsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBQYXNzUmVmPFN0cmluZ0ltcGw+IElk
ZW50aWZpZXI6OmFkZChWTSogdm0sIGNvbnN0IFQqIHMsIGludCBsZW5ndGgpCiAgICAgewogICAg
ICAgICBpZiAobGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgIFQgYyA9IHNbMF07CiAgICAgICAg
ICAgICBpZiAoY2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpKQotICAgICAgICAgICAgICAg
IHJldHVybiBhZGQodm0sIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVw
KGMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hh
cmFjdGVyU3RyaW5nUmVwKGMpOwogICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBpZiAoIWxl
bmd0aCkKICAgICAgICAgICAgIHJldHVybiAqU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICAgICAg
Q2hhckJ1ZmZlcjxUPiBidWYgPSB7IHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpIH07
Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gdm0t
PmlkZW50aWZpZXJUYWJsZS0+YWRkPENoYXJCdWZmZXI8VD4sIElkZW50aWZpZXJDaGFyQnVmZmVy
VHJhbnNsYXRvcjxUPj4oYnVmKTsKICAgICAgICAgCi0gICAgICAgIC8vIElmIHRoZSBzdHJpbmcg
aXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgotICAgICAgICAv
LyBUaGUgYm9vbGVhbiBpbiB0aGUgcGFpciB0ZWxscyB1cyBpZiB0aGF0IGlzIHNvLgotICAgICAg
ICByZXR1cm4gYWRkUmVzdWx0LmlzTmV3RW50cnkgPyBhZG9wdFJlZigqKmFkZFJlc3VsdC5pdGVy
YXRvcikgOiAqKmFkZFJlc3VsdC5pdGVyYXRvcjsKKyAgICAgICAgcmV0dXJuICpBdG9taWNTdHJp
bmc6OmFkZChzLCBsZW5ndGgpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgSWRlbnRpZmllciYgYikKQEAgLTI1NiwxNCArMjAz
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJ
bXBsPiwgaW50LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8U3RyaW5nSW1w
bD4+LCBJZGVudGlmaWVyTWFwSW5kZXhIYXNoVHJhaXRzPiBJZGVudGlmaWVyTWFwOwogICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgaW50LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRy
YWl0czxTdHJpbmdJbXBsKj4sIElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM+IEJvcnJvd2Vk
SWRlbnRpZmllck1hcDsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0g
ICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBJZGVudGlmaWVyVGFibGU6OmFkZChV
IHZhbHVlKQotICAgIHsKLSAgICAgICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX3RhYmxlLmFkZDxWPih2YWx1ZSk7Ci0gICAgICAgICgqcmVzdWx0Lml0ZXJhdG9y
KS0+c2V0SXNJZGVudGlmaWVyKHRydWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllcklubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSWRlbnRpZmllcklubGluZXNfaAorI2Rl
ZmluZSBJZGVudGlmaWVySW5saW5lc19oCisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNs
dWRlICJJZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgIHsKKworaW5saW5lIFBhc3NSZWY8
U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCog
cikKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgY2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKGV4
ZWMpOworI2VuZGlmCisgICAgcmV0dXJuICpBdG9taWNTdHJpbmc6OmFkZFdpdGhTdHJpbmdUYWJs
ZVByb3ZpZGVyKCpleGVjLCByKTsKK30KK2lubGluZSBQYXNzUmVmPFN0cmluZ0ltcGw+IElkZW50
aWZpZXI6OmFkZChWTSogdm0sIFN0cmluZ0ltcGwqIHIpCit7CisjaWZuZGVmIE5ERUJVRworICAg
IGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZSh2bSk7CisjZW5kaWYKKyAgICByZXR1cm4gKkF0
b21pY1N0cmluZzo6YWRkV2l0aFN0cmluZ1RhYmxlUHJvdmlkZXIoKnZtLCByKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJZGVudGlmaWVySW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCShyZXZpc2lvbiAxNjU5
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oIgorI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNMb2NrLmgJKHJldmlzaW9uIDE2NTk0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9XVEZUaHJl
YWREYXRhLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00OSw3ICs1MCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIC8vIERyb3BBbGxMb2NrcyBvYmplY3QgdGFrZXMgY2FyZSB0byByZWxlYXNl
IHRoZSBKU0xvY2sgb25seSBpZiB5b3VyCiAgICAgLy8gdGhyZWFkIGFjcXVpcmVkIGl0IHRvIGJl
Z2luIHdpdGguCiAKLSAgICBjbGFzcyBJZGVudGlmaWVyVGFibGU7CiAgICAgY2xhc3MgRXhlY1N0
YXRlOwogICAgIGNsYXNzIFZNOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCShyZXZpc2lvbiAxNjU5NDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJQcm9wZXJ0eU5hbWVBcnJheS5oIgogCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCi0KICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVDaGFpbi5oIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFs
bFN0cmluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NtYWxsU3RyaW5ncy5jcHAJKHJldmlzaW9uIDE2NTk0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4
LDcgQEAgU21hbGxTdHJpbmdzU3RvcmFnZTo6U21hbGxTdHJpbmdzU3RvcmFnZQogICAgIFJlZlB0
cjxTdHJpbmdJbXBsPiBiYXNlU3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXpl
ZChzaW5nbGVDaGFyYWN0ZXJTdHJpbmdDb3VudCwgY2hhcmFjdGVyQnVmZmVyKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2luZ2xlQ2hhcmFjdGVyU3RyaW5nQ291bnQ7ICsraSkgewog
ICAgICAgICBjaGFyYWN0ZXJCdWZmZXJbaV0gPSBpOwotICAgICAgICBtX3JlcHNbaV0gPSBTdHJp
bmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChiYXNlU3RyaW5nLCBpLCAxKTsKKyAg
ICAgICAgbV9yZXBzW2ldID0gQXRvbWljU3RyaW5nOjphZGQoUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PihTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChiYXNlU3RyaW5nLCBpLCAx
KSkuZ2V0KCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkocmV2aXNpb24gMTY1OTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgVk06OlZNKFZNVHlwZSB2
bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgcHJvbWlzZUNvbnN0cnVjdG9yVGFibGUo
YWRvcHRQdHIobmV3IEhhc2hUYWJsZShKU0M6OnByb21pc2VDb25zdHJ1Y3RvclRhYmxlKSkpCiAj
ZW5kaWYKICAgICAsIGlkZW50aWZpZXJUYWJsZSh2bVR5cGUgPT0gRGVmYXVsdCA/IHd0ZlRocmVh
ZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkgOiBjcmVhdGVJZGVudGlmaWVyVGFibGUo
KSkKLSAgICAsIHByb3BlcnR5TmFtZXMobmV3IENvbW1vbklkZW50aWZpZXJzKHRoaXMpKQorICAg
ICwgcHJvcGVydHlOYW1lcyhudWxscHRyKQogICAgICwgZW1wdHlMaXN0KG5ldyBNYXJrZWRBcmd1
bWVudEJ1ZmZlcikKICAgICAsIHBhcnNlckFyZW5hKGFkb3B0UHRyKG5ldyBQYXJzZXJBcmVuYSkp
CiAgICAgLCBrZXl3b3JkcyhhZG9wdFB0cihuZXcgS2V5d29yZHMoKnRoaXMpKSkKQEAgLTI0Niw2
ICsyNDYsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAg
Ly8gTmVlZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBjb25zaXN0ZW50IGhlcmUK
ICAgICBKU0xvY2tIb2xkZXIgbG9jayh0aGlzKTsKICAgICBJZGVudGlmaWVyVGFibGUqIGV4aXN0
aW5nRW50cnlJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50
aWZpZXJUYWJsZShpZGVudGlmaWVyVGFibGUpOworICAgIHByb3BlcnR5TmFtZXMgPSBuZXcgQ29t
bW9uSWRlbnRpZmllcnModGhpcyk7CiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywg
U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBzdHJ1Y3R1cmVSYXJlRGF0
YVN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZGVidWdnZXJBY3RpdmF0aW9uU3RydWN0dXJlLnNl
dCgqdGhpcywgRGVidWdnZXJBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE2
NTk0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDcgKzc3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhlY1N0YXRl
OwogICAgIGNsYXNzIEhhbmRsZVN0YWNrOwogICAgIGNsYXNzIElkZW50aWZpZXI7Ci0gICAgY2xh
c3MgSWRlbnRpZmllclRhYmxlOwogICAgIGNsYXNzIEludGVycHJldGVyOwogICAgIGNsYXNzIEpT
R2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIEpTT2JqZWN0OwpAQCAtMjk2LDYgKzI5NSw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBEYXRlSW5zdGFuY2VDYWNoZSBkYXRlSW5zdGFuY2VDYWNo
ZTsKICAgICAgICAgV1RGOjpTaW1wbGVTdGF0cyBtYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVX
b3JkRm9yQmFzZWxpbmVKSVQ7CiAKKyAgICAgICAgSWRlbnRpZmllclRhYmxlJiBhdG9taWNTdHJp
bmdUYWJsZSgpIGNvbnN0IHsgcmV0dXJuICppZGVudGlmaWVyVGFibGU7IH0KKwogICAgICAgICB2
b2lkIHNldEluRGVmaW5lT3duUHJvcGVydHkoYm9vbCBpbkRlZmluZU93blByb3BlcnR5KQogICAg
ICAgICB7CiAgICAgICAgICAgICBtX2luRGVmaW5lT3duUHJvcGVydHkgPSBpbkRlZmluZU93blBy
b3BlcnR5OwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTk0OSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTQtMDMtMTkgIEdhdmluIEJhcnJh
Y2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIEF0b21pY1N0
cmluZywgSWRlbnRpZmllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTI4NjI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvV1RGVGhyZWFkRGF0YS5jcHA6CisgICAgICAgIChXVEY6OldURlRocmVh
ZERhdGE6OldURlRocmVhZERhdGEpOgorICAgICAgICAgICAgLSByZW1vdmUgYWxsb2NhdGlvbiBv
ZiBJZGVudGlmaWVyVGFibGUuCisgICAgICAgIChXVEY6OldURlRocmVhZERhdGE6On5XVEZUaHJl
YWREYXRhKToKKyAgICAgICAgICAgIC0gcmVtb3ZlIGRlbGV0aW9uIG9mIElkZW50aWZpZXJUYWJs
ZS4KKyAgICAgICAgKiB3dGYvV1RGVGhyZWFkRGF0YS5oOgorICAgICAgICAoV1RGOjpXVEZUaHJl
YWREYXRhOjphdG9taWNTdHJpbmdUYWJsZSk6CisgICAgICAgICAgICAtIHRhYmxlIGlzIG5vdyBz
d2l0Y2hlZCBieSBKU0MgQVBJLCByZXR1cm4gdGhlIGN1cnJlbnQgdGFibGUuCisgICAgICAgIChX
VEY6OldURlRocmVhZERhdGE6OmN1cnJlbnRJZGVudGlmaWVyVGFibGUpOgorICAgICAgICAgICAg
LSBub3cgcmV0dXJucyB0aGUgY3VycmVudCBBdG9taWNTdHJpbmdUYWJsZS4KKyAgICAgICAgKFdU
Rjo6V1RGVGhyZWFkRGF0YTo6c2V0Q3VycmVudElkZW50aWZpZXJUYWJsZSk6CisgICAgICAgICAg
ICAtIG5vdyBzZXRzIHRoZSBjdXJyZW50IEF0b21pY1N0cmluZ1RhYmxlLgorICAgICAgICAoV1RG
OjpXVEZUaHJlYWREYXRhOjpyZXNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUpOgorICAgICAgICAg
ICAgLSBub3cgcmVzZXRzIHRoZSBBdG9taWNTdHJpbmdUYWJsZS4KKyAgICAgICAgKiB3dGYvdGV4
dC9BdG9taWNTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmFkZFNsb3dD
YXNlKToKKyAgICAgICAgICAgIC0gYWRkIHdpdGhvdXQgdGhyZWFkLXNwZWNpZmljIGFjY2VzcyB0
byBhY2Nlc3Mgc3RyaW5nIHRhYmxlLgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZy5o
OgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmFkZFdpdGhTdHJpbmdUYWJsZVByb3ZpZGVy
KToKKyAgICAgICAgICAgIC0gYWRkIHdpdGhvdXQgdGhyZWFkLXNwZWNpZmljIGFjY2VzcyAodXNl
ZCBieSBKU0MsIHN0cmluZyB0YWJsZSBwcm92aWRlZCBieSBWTSBvciBFeGVjU3RhdGUpLgorICAg
ICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmNwcDoKKyAgICAgICAgKFdURjo6QXRv
bWljU3RyaW5nVGFibGU6OmNyZWF0ZSk6CisgICAgICAgICAgICAtIHJlbmFtZWQgbV9hdG9taWNT
dHJpbmdUYWJsZSAtPiBtX2RlZmF1bHRBdG9taWNTdHJpbmdUYWJsZS4KKyAgICAgICAgKFdURjo6
QXRvbWljU3RyaW5nVGFibGU6On5BdG9taWNTdHJpbmdUYWJsZSk6CisgICAgICAgIChXVEY6OkF0
b21pY1N0cmluZ1RhYmxlOjpkZXN0cm95KToKKyAgICAgICAgICAgIC0gY2xlYXJpbmcgb2YgdGFi
bGUgbW92ZWQgZnJvbSBBdG9taWNTdHJpbmdUYWJsZTo6ZGVzdHJveSB0byBkZXN0cnVjdG9yLgor
ICAgICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmg6CisgICAgICAgICAgICAtIGFk
ZGVkIGRlc3RydWN0b3IuCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKToKKyAgICAgICAgICAgIC0gSWRlbnRp
ZmVycyBubyBsb25nZXIgZXhpc3Q7IG5vIG5lZWQgdG8gcmVtb3ZlIHRoZW0gZnJvbSBJZGVudGlm
aWVyVGFibGUuCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKToKKyAgICAgICAgICAgIC0gcmVtb3ZlZCBzX2hhc2hG
bGFnSXNJZGVudGlmaWVyLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpmbGFnSXNJZGVudGlm
aWVyKToKKyAgICAgICAgICAgIC0gc19oYXNoRmxhZ0lzSWRlbnRpZmllciAtPiBzX2hhc2hGbGFn
SXNBdG9taWMuCisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmlzSWRlbnRpZmllcik6CisgICAg
ICAgICAgICAtIG5vdyBzeW5vbnltb3VzIHRvIGlzQXRvbWljKCkuCisgICAgICAgICogd3RmL3Rl
eHQvU3RyaW5nU3RhdGljcy5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6Omhhc2hBbmRG
bGFnc0ZvckVtcHR5VW5pcXVlKToKKyAgICAgICAgICAgIC0gcmVtb3ZlZCBzX2hhc2hGbGFnSXNJ
ZGVudGlmaWVyLgorCiAyMDE0LTAzLTE5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdo
QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMwNDk0CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAkocmV2aXNpb24gMTY1
OTQ2KQorKysgU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDEyICs0MSw5IEBAIFRocmVhZFNwZWNpZmljPFdURlRocmVhZERhdGE+KiBXVEZUaHJl
YWQKIAogV1RGVGhyZWFkRGF0YTo6V1RGVGhyZWFkRGF0YSgpCiAgICAgOiBtX2FwaURhdGEoMCkK
LSAgICAsIG1fYXRvbWljU3RyaW5nVGFibGUoMCkKKyAgICAsIG1fY3VycmVudEF0b21pY1N0cmlu
Z1RhYmxlKDApCisgICAgLCBtX2RlZmF1bHRBdG9taWNTdHJpbmdUYWJsZSgwKQogICAgICwgbV9h
dG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3IoMCkKLSNpZiAhVVNFKFdFQl9USFJFQUQpCi0gICAg
LCBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGUobmV3IEpTQzo6SWRlbnRpZmllclRhYmxlKCkpCi0g
ICAgLCBtX2N1cnJlbnRJZGVudGlmaWVyVGFibGUobV9kZWZhdWx0SWRlbnRpZmllclRhYmxlKQot
I2VuZGlmCiAgICAgLCBtX3N0YWNrQm91bmRzKFN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3Rh
Y2tCb3VuZHMoKSkKICNpZiBFTkFCTEUoU1RBQ0tfU1RBVFMpCiAgICAgLCBtX3N0YWNrU3RhdHMo
KQpAQCAtNTQsMjMgKzUxLDE0IEBAIFdURlRocmVhZERhdGE6OldURlRocmVhZERhdGEoKQogICAg
ICwgbV9zYXZlZFN0YWNrUG9pbnRlckF0Vk1FbnRyeSgwKQogICAgICwgbV9zYXZlZExhc3RTdGFj
a1RvcChzdGFjaygpLm9yaWdpbigpKQogewotI2lmIFVTRShXRUJfVEhSRUFEKQotICAgIHN0YXRp
YyBKU0M6OklkZW50aWZpZXJUYWJsZSogc2hhcmVkSWRlbnRpZmllclRhYmxlID0gbmV3IEpTQzo6
SWRlbnRpZmllclRhYmxlKCk7Ci0gICAgaWYgKHB0aHJlYWRfbWFpbl9ucCgpIHx8IGlzV2ViVGhy
ZWFkKCkpCi0gICAgICAgIG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZSA9IHNoYXJlZElkZW50aWZp
ZXJUYWJsZTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZSA9IG5l
dyBKU0M6OklkZW50aWZpZXJUYWJsZSgpOwotCi0gICAgbV9jdXJyZW50SWRlbnRpZmllclRhYmxl
ID0gbV9kZWZhdWx0SWRlbnRpZmllclRhYmxlOwotI2VuZGlmCiAgICAgQXRvbWljU3RyaW5nVGFi
bGU6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV9jdXJyZW50QXRvbWljU3RyaW5nVGFibGUgPSBtX2Rl
ZmF1bHRBdG9taWNTdHJpbmdUYWJsZTsKIH0KIAogV1RGVGhyZWFkRGF0YTo6fldURlRocmVhZERh
dGEoKQogewogICAgIGlmIChtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcikKLSAgICAgICAg
bV9hdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3IobV9hdG9taWNTdHJpbmdUYWJsZSk7Ci0gICAg
ZGVsZXRlIG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZTsKKyAgICAgICAgbV9hdG9taWNTdHJpbmdU
YWJsZURlc3RydWN0b3IobV9kZWZhdWx0QXRvbWljU3RyaW5nVGFibGUpOwogfQogCiAjaWYgVVNF
KFBUSFJFQURfR0VUU1BFQ0lGSUNfRElSRUNUKQpAQCAtODYsMjEgKzc0LDMgQEAgV1RGVGhyZWFk
RGF0YSYgV1RGVGhyZWFkRGF0YTo6Y3JlYXRlQW5kUgogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNl
IFdURgotCi1uYW1lc3BhY2UgSlNDIHsKLQotSWRlbnRpZmllclRhYmxlOjp+SWRlbnRpZmllclRh
YmxlKCkKLXsKLSAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IgZW5kID0gbV90YWJs
ZS5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdGVyID0g
bV90YWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT5z
ZXRJc0lkZW50aWZpZXIoZmFsc2UpOwotfQotCi1IYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVz
dWx0IElkZW50aWZpZXJUYWJsZTo6YWRkKFN0cmluZ0ltcGwqIHZhbHVlKQotewotICAgIEhhc2hT
ZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV90YWJsZS5hZGQodmFsdWUpOwot
ICAgICgqcmVzdWx0Lml0ZXJhdG9yKS0+c2V0SXNJZGVudGlmaWVyKHRydWUpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL1dURi93dGYv
V1RGVGhyZWFkRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dURlRocmVhZERh
dGEuaAkocmV2aXNpb24gMTY1OTQ2KQorKysgU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSwyOCArNDksMTAgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAjZW5kaWYKIAotLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgbGF5ZXJpbmcg
dmlvbGF0aW9uIHVudGlsIHdlIG1vdmUgbW9yZSBvZiB0aGUgc3RyaW5nIGNvZGUgZnJvbSBKYXZh
U2NyaXB0Q29yZSB0byBXVEYuCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSWRlbnRpZmllclRh
YmxlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgfklkZW50aWZpZXJUYWJsZSgpOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkKFN0cmluZ0ltcGwqKTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRk
UmVzdWx0IGFkZChVKTsKLQotICAgIGJvb2wgcmVtb3ZlKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIp
IHsgcmV0dXJuIG1fdGFibGUucmVtb3ZlKGlkZW50aWZpZXIpOyB9Ci0KLXByaXZhdGU6Ci0gICAg
SGFzaFNldDxTdHJpbmdJbXBsKj4gbV90YWJsZTsKLX07Ci0KLX0KLQogbmFtZXNwYWNlIFdURiB7
CiAKIGNsYXNzIEF0b21pY1N0cmluZ1RhYmxlOwordHlwZWRlZiBBdG9taWNTdHJpbmdUYWJsZSBJ
ZGVudGlmaWVyVGFibGU7CiAKIHR5cGVkZWYgdm9pZCAoKkF0b21pY1N0cmluZ1RhYmxlRGVzdHJ1
Y3RvcikoQXRvbWljU3RyaW5nVGFibGUqKTsKIApAQCAtODIsMjQgKzY0LDI0IEBAIHB1YmxpYzoK
IAogICAgIEF0b21pY1N0cmluZ1RhYmxlKiBhdG9taWNTdHJpbmdUYWJsZSgpCiAgICAgewotICAg
ICAgICByZXR1cm4gbV9hdG9taWNTdHJpbmdUYWJsZTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVu
dEF0b21pY1N0cmluZ1RhYmxlOwogICAgIH0KIAotICAgIEpTQzo6SWRlbnRpZmllclRhYmxlKiBj
dXJyZW50SWRlbnRpZmllclRhYmxlKCkKKyAgICBJZGVudGlmaWVyVGFibGUqIGN1cnJlbnRJZGVu
dGlmaWVyVGFibGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudElkZW50aWZpZXJU
YWJsZTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEF0b21pY1N0cmluZ1RhYmxlOwogICAgIH0K
IAotICAgIEpTQzo6SWRlbnRpZmllclRhYmxlKiBzZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKEpT
Qzo6SWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGUpCisgICAgSWRlbnRpZmllclRhYmxl
KiBzZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKElkZW50aWZpZXJUYWJsZSogaWRlbnRpZmllclRh
YmxlKQogICAgIHsKLSAgICAgICAgSlNDOjpJZGVudGlmaWVyVGFibGUqIG9sZElkZW50aWZpZXJU
YWJsZSA9IG1fY3VycmVudElkZW50aWZpZXJUYWJsZTsKLSAgICAgICAgbV9jdXJyZW50SWRlbnRp
ZmllclRhYmxlID0gaWRlbnRpZmllclRhYmxlOworICAgICAgICBJZGVudGlmaWVyVGFibGUqIG9s
ZElkZW50aWZpZXJUYWJsZSA9IG1fY3VycmVudEF0b21pY1N0cmluZ1RhYmxlOworICAgICAgICBt
X2N1cnJlbnRBdG9taWNTdHJpbmdUYWJsZSA9IGlkZW50aWZpZXJUYWJsZTsKICAgICAgICAgcmV0
dXJuIG9sZElkZW50aWZpZXJUYWJsZTsKICAgICB9CiAKICAgICB2b2lkIHJlc2V0Q3VycmVudElk
ZW50aWZpZXJUYWJsZSgpCiAgICAgewotICAgICAgICBtX2N1cnJlbnRJZGVudGlmaWVyVGFibGUg
PSBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGU7CisgICAgICAgIG1fY3VycmVudEF0b21pY1N0cmlu
Z1RhYmxlID0gbV9kZWZhdWx0QXRvbWljU3RyaW5nVGFibGU7CiAgICAgfQogCiAgICAgY29uc3Qg
U3RhY2tCb3VuZHMmIHN0YWNrKCkKQEAgLTE0MiwxMSArMTI0LDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkKiBtX2FwaURhdGE7CiAKIHByaXZhdGU6Ci0gICAgQXRvbWljU3RyaW5nVGFibGUqIG1fYXRv
bWljU3RyaW5nVGFibGU7CisgICAgQXRvbWljU3RyaW5nVGFibGUqIG1fY3VycmVudEF0b21pY1N0
cmluZ1RhYmxlOworICAgIEF0b21pY1N0cmluZ1RhYmxlKiBtX2RlZmF1bHRBdG9taWNTdHJpbmdU
YWJsZTsKICAgICBBdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3IgbV9hdG9taWNTdHJpbmdUYWJs
ZURlc3RydWN0b3I7CiAKLSAgICBKU0M6OklkZW50aWZpZXJUYWJsZSogbV9kZWZhdWx0SWRlbnRp
ZmllclRhYmxlOwotICAgIEpTQzo6SWRlbnRpZmllclRhYmxlKiBtX2N1cnJlbnRJZGVudGlmaWVy
VGFibGU7CiAgICAgU3RhY2tCb3VuZHMgbV9zdGFja0JvdW5kczsKICNpZiBFTkFCTEUoU1RBQ0tf
U1RBVFMpCiAgICAgU3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHMgbV9zdGFja1N0YXRzOwpAQCAt
MTg4LDUgKzE2OSw2IEBAIGlubGluZSBXVEZUaHJlYWREYXRhJiB3dGZUaHJlYWREYXRhKCkKIAog
dXNpbmcgV1RGOjpXVEZUaHJlYWREYXRhOwogdXNpbmcgV1RGOjp3dGZUaHJlYWREYXRhOwordXNp
bmcgV1RGOjpJZGVudGlmaWVyVGFibGU7CiAKICNlbmRpZiAvLyBXVEZUaHJlYWREYXRhX2gKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHJldmlzaW9uIDE2NTk0NikKKysr
IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDE0LDYgKzQxNCwyNCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRk
CiAgICAgcmV0dXJuICphZGRSZXN1bHQuaXRlcmF0b3I7CiB9CiAKK1Bhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gQXRvbWljU3RyaW5nOjphZGRTbG93Q2FzZShBdG9taWNTdHJpbmdUYWJsZSYgc3RyaW5n
VGFibGUsIFN0cmluZ0ltcGwqIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy0+bGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOworCisgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSghc3RyaW5nLT5pc0F0b21pYygpLCAiQXRvbWljU3RyaW5nIHNob3VsZCBub3QgaGl0
IHRoZSBzbG93IGNhc2UgaWYgdGhlIHN0cmluZyBpcyBhbHJlYWR5IGF0b21pYy4iKTsKKworICAg
IEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKKyAgICBIYXNoU2V0PFN0cmluZ0ltcGwq
Pjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlLnRhYmxlKCkuYWRkKHN0cmluZyk7
CisKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgQVNTRVJUKCphZGRS
ZXN1bHQuaXRlcmF0b3IgPT0gc3RyaW5nKTsKKyAgICAgICAgc3RyaW5nLT5zZXRJc0F0b21pYyh0
cnVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvcjsKK30KKwogdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHN0YXRpYyBpbmxpbmUgSGFzaFNldDxTdHJp
bmdJbXBsKj46Oml0ZXJhdG9yIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nSW1w
bCkKIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAkocmV2aXNpb24gMTY1OTQ2
KQorKysgU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAorY2xhc3MgQXRvbWljU3RyaW5n
VGFibGU7CiBzdHJ1Y3QgQXRvbWljU3RyaW5nSGFzaDsKIAogY2xhc3MgQXRvbWljU3RyaW5nIHsK
QEAgLTE2OCwxMiArMTY5LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2hvdygpIGNvbnN0OwogI2Vu
ZGlmCiAKLXByaXZhdGU6Ci0gICAgLy8gVGhlIGV4cGxpY2l0IGNvbnN0cnVjdG9ycyB3aXRoIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwgbXVzdCBiZSB1c2VkIGZvciBsaXRlcmFs
cy4KLSAgICBBdG9taWNTdHJpbmcoQVNDSUlMaXRlcmFsKTsKLQotICAgIFN0cmluZyBtX3N0cmlu
ZzsKLSAgICAKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gYWRkKGNvbnN0IExDaGFyKik7CiAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgY2hhciogcykgeyByZXR1cm4gYWRkKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSk7IH07CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChjb25zdCBMQ2hhciosIHVuc2ln
bmVkIGxlbmd0aCk7CkBAIC0xOTEsMTEgKzE4NiwyOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gYWRkU2xvd0Nhc2Uoc3RyaW5nKTsKICAgICB9CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZEZyb21MaXRlcmFsRGF0YShjb25zdCBj
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5H
X0FQSSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGRTbG93Q2FzZShTdHJpbmdJbXBs
Kik7CiAjaWYgVVNFKENGKQogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBhZGQoQ0ZTdHJpbmdSZWYpOwogI2VuZGlmCiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBTdHJpbmdUYWJsZVByb3ZpZGVyPgorICAgIEFMV0FZU19JTkxJTkUgc3RhdGlj
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkV2l0aFN0cmluZ1RhYmxlUHJvdmlkZXIoU3RyaW5n
VGFibGVQcm92aWRlciYgc3RyaW5nVGFibGVQcm92aWRlciwgU3RyaW5nSW1wbCogc3RyaW5nKQor
ICAgIHsKKyAgICAgICAgaWYgKCFzdHJpbmcgfHwgc3RyaW5nLT5pc0F0b21pYygpKSB7CisgICAg
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzdHJpbmcgfHwgIXN0cmluZy0+bGVuZ3RoKCkg
fHwgaXNJbkF0b21pY1N0cmluZ1RhYmxlKHN0cmluZyksICJUaGUgYXRvbWljIHN0cmluZyBjb21l
cyBmcm9tIGFuIG90aGVyIHRocmVhZCEiKTsKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmc7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFkZFNsb3dDYXNlKHN0cmluZ1RhYmxlUHJvdmlkZXIu
YXRvbWljU3RyaW5nVGFibGUoKSwgc3RyaW5nKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgLy8g
VGhlIGV4cGxpY2l0IGNvbnN0cnVjdG9ycyB3aXRoIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwgbXVzdCBiZSB1c2VkIGZvciBsaXRlcmFscy4KKyAgICBBdG9taWNTdHJpbmcoQVND
SUlMaXRlcmFsKTsKKworICAgIFN0cmluZyBtX3N0cmluZzsKKyAgICAKKyAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkU2xvd0Nhc2UoU3Ry
aW5nSW1wbCopOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBhZGRTbG93Q2FzZShBdG9taWNTdHJpbmdUYWJsZSYsIFN0cmluZ0ltcGwqKTsK
KwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgQXRvbWljU3RyaW5nSW1wbCogZmlu
ZFNsb3dDYXNlKFN0cmluZ0ltcGwmKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGlj
IEF0b21pY1N0cmluZyBmcm9tVVRGOEludGVybmFsKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7
CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nVGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nVGFibGUuY3BwCShyZXZp
c2lvbiAxNjU5NDYpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjUgKzM3LDI4IEBAIHZvaWQgQXRvbWljU3RyaW5nVGFi
bGU6OmNyZWF0ZShXVEZUaHJlYWQKIAogICAgIGJvb2wgY3VycmVudFRocmVhZElzV2ViVGhyZWFk
ID0gaXNXZWJUaHJlYWQoKTsKICAgICBpZiAoY3VycmVudFRocmVhZElzV2ViVGhyZWFkIHx8IGlz
VUlUaHJlYWQoKSkKLSAgICAgICAgZGF0YS5tX2F0b21pY1N0cmluZ1RhYmxlID0gc2hhcmVkU3Ry
aW5nVGFibGU7CisgICAgICAgIGRhdGEubV9kZWZhdWx0QXRvbWljU3RyaW5nVGFibGUgPSBzaGFy
ZWRTdHJpbmdUYWJsZTsKICAgICBlbHNlCi0gICAgICAgIGRhdGEubV9hdG9taWNTdHJpbmdUYWJs
ZSA9IG5ldyBBdG9taWNTdHJpbmdUYWJsZTsKKyAgICAgICAgZGF0YS5tX2RlZmF1bHRBdG9taWNT
dHJpbmdUYWJsZSA9IG5ldyBBdG9taWNTdHJpbmdUYWJsZTsKIAogICAgIC8vIFdlIGRvIHRoZSBm
b2xsb3dpbmcgc28gdGhhdCBpdHMgZGVzdHJ1Y3Rpb24gaGFwcGVucyBvbmx5CiAgICAgLy8gb25j
ZSAtIG9uIHRoZSBtYWluIFVJIHRocmVhZC4KICAgICBpZiAoIWN1cnJlbnRUaHJlYWRJc1dlYlRo
cmVhZCkKICAgICAgICAgZGF0YS5tX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvciA9IEF0b21p
Y1N0cmluZ1RhYmxlOjpkZXN0cm95OwogI2Vsc2UKLSAgICBkYXRhLm1fYXRvbWljU3RyaW5nVGFi
bGUgPSBuZXcgQXRvbWljU3RyaW5nVGFibGU7CisgICAgZGF0YS5tX2RlZmF1bHRBdG9taWNTdHJp
bmdUYWJsZSA9IG5ldyBBdG9taWNTdHJpbmdUYWJsZTsKICAgICBkYXRhLm1fYXRvbWljU3RyaW5n
VGFibGVEZXN0cnVjdG9yID0gQXRvbWljU3RyaW5nVGFibGU6OmRlc3Ryb3k7CiAjZW5kaWYgLy8g
VVNFKFdFQl9USFJFQUQpCiB9CiAKK0F0b21pY1N0cmluZ1RhYmxlOjp+QXRvbWljU3RyaW5nVGFi
bGUoKQoreworICAgIGZvciAoYXV0byogc3RyaW5nIDogbV90YWJsZSkKKyAgICAgICAgc3RyaW5n
LT5zZXRJc0F0b21pYyhmYWxzZSk7Cit9CisKIHZvaWQgQXRvbWljU3RyaW5nVGFibGU6OmRlc3Ry
b3koQXRvbWljU3RyaW5nVGFibGUqIHRhYmxlKQogewotICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+
OjppdGVyYXRvciBlbmQgPSB0YWJsZS0+bV90YWJsZS5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8
U3RyaW5nSW1wbCo+OjppdGVyYXRvciBpdGVyID0gdGFibGUtPm1fdGFibGUuYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+c2V0SXNBdG9taWMoZmFsc2UpOwog
ICAgIGRlbGV0ZSB0YWJsZTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNT
dHJpbmdUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3Ry
aW5nVGFibGUuaAkocmV2aXNpb24gMTY1OTQ2KQorKysgU291cmNlL1dURi93dGYvdGV4dC9BdG9t
aWNTdHJpbmdUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIFN0
cmluZ0ltcGw7CiBjbGFzcyBBdG9taWNTdHJpbmdUYWJsZSB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5BdG9taWNTdHJpbmdU
YWJsZSgpOwogCiAgICAgc3RhdGljIHZvaWQgY3JlYXRlKFdURlRocmVhZERhdGEmKTsKICAgICBI
YXNoU2V0PFN0cmluZ0ltcGwqPiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDE2NTk0NikKKysrIFNvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwxMCArMTE1
LDYgQEAgU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQogCiAgICAgaWYgKGlzQXRvbWljKCkgJiYg
bV9sZW5ndGgpCiAgICAgICAgIEF0b21pY1N0cmluZzo6cmVtb3ZlKHRoaXMpOwotICAgIGlmIChp
c0lkZW50aWZpZXIoKSAmJiBtX2xlbmd0aCkgewotICAgICAgICBpZiAoIXd0ZlRocmVhZERhdGEo
KS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCktPnJlbW92ZSh0aGlzKSkKLSAgICAgICAgICAgIENS
QVNIKCk7Ci0gICAgfQogCiAgICAgQnVmZmVyT3duZXJzaGlwIG93bmVyc2hpcCA9IGJ1ZmZlck93
bmVyc2hpcCgpOwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2aXNpb24gMTY1
OTQ2KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDE0ICs0NCw5IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZTdHJpbmcgKiBDRlN0
cmkKIEBjbGFzcyBOU1N0cmluZzsKICNlbmRpZgogCi0vLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBv
cmFyeSBsYXllcmluZyB2aW9sYXRpb24gd2hpbGUgd2UgbW92ZSBzdHJpbmcgY29kZSB0byBXVEYu
Ci0vLyBMYW5kaW5nIHRoZSBmaWxlIG1vdmVzIGluIG9uZSBwYXRjaCwgd2lsbCBmb2xsb3cgb24g
d2l0aCBwYXRjaGVzIHRvIGNoYW5nZSB0aGUgbmFtZXNwYWNlcy4KIG5hbWVzcGFjZSBKU0Mgewot
c3RydWN0IElkZW50aWZpZXJBU0NJSVN0cmluZ1RyYW5zbGF0b3I7CiBuYW1lc3BhY2UgTExJbnQg
eyBjbGFzcyBEYXRhOyB9CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gc3RydWN0IElkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjsKLXN0cnVj
dCBJZGVudGlmaWVyTENoYXJGcm9tVUNoYXJUcmFuc2xhdG9yOwogfQogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTEzMiwxMCArMTI3LDYgQEAgc3RydWN0IFN0cmluZ1N0YXRzIHsKIAogY2xhc3MgU3Ry
aW5nSW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nSW1wbCk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlmaWVyQVNDSUlT
dHJpbmdUcmFuc2xhdG9yOwotICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlmaWVyQ2hhckJ1
ZmZlclRyYW5zbGF0b3I8TENoYXI+OwotICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlmaWVy
Q2hhckJ1ZmZlclRyYW5zbGF0b3I8VUNoYXI+OwotICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVu
dGlmaWVyTENoYXJGcm9tVUNoYXJUcmFuc2xhdG9yOwogICAgIGZyaWVuZCBzdHJ1Y3QgV1RGOjpD
U3RyaW5nVHJhbnNsYXRvcjsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBm
cmllbmQgc3RydWN0IFdURjo6SGFzaEFuZENoYXJhY3RlcnNUcmFuc2xhdG9yOwogICAgIGZyaWVu
ZCBzdHJ1Y3QgV1RGOjpIYXNoQW5kVVRGOENoYXJhY3RlcnNUcmFuc2xhdG9yOwpAQCAtMTYzLDcg
KzE1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50RmxhZ0lz
U3RhdGljU3RyaW5nKQogICAgICAgICAsIG1fbGVuZ3RoKDApCiAgICAgICAgICwgbV9kYXRhOChy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oJm1fbGVuZ3RoKSkKLSAgICAgICAgLCBtX2hh
c2hBbmRGbGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IHNfaGFzaEZsYWdJc0lkZW50aWZpZXIg
fCBzX2hhc2hGbGFnSXNBdG9taWMgfCBCdWZmZXJPd25lZCkKKyAgICAgICAgLCBtX2hhc2hBbmRG
bGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IHNfaGFzaEZsYWdJc0F0b21pYyB8IEJ1ZmZlck93
bmVkKQogICAgIHsKICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhc2ggaXMgY29tcHV0ZWQg
c28gdGhhdCBBdG9taWNTdHJpbmdIYXNoIGNhbiBjYWxsIGV4aXN0aW5nSGFzaCgpCiAgICAgICAg
IC8vIHdpdGggaW1wdW5pdHkuIFRoZSBlbXB0eSBzdHJpbmcgaXMgc3BlY2lhbCBiZWNhdXNlIGl0
IGlzIG5ldmVyIGVudGVyZWQgaW50bwpAQCAtNDA0LDcgKzM5NSw3IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyB1bnNpZ25lZCBmbGFnc09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dHJpbmdJbXBsLCBtX2hhc2hBbmRGbGFncyk7IH0KICAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ0lz
OEJpdCgpIHsgcmV0dXJuIHNfaGFzaEZsYWc4Qml0QnVmZmVyOyB9Ci0gICAgc3RhdGljIHVuc2ln
bmVkIGZsYWdJc0lkZW50aWZpZXIoKSB7IHJldHVybiBzX2hhc2hGbGFnSXNJZGVudGlmaWVyOyB9
CisgICAgc3RhdGljIHVuc2lnbmVkIGZsYWdJc0lkZW50aWZpZXIoKSB7IHJldHVybiBzX2hhc2hG
bGFnSXNBdG9taWM7IH0KICAgICBzdGF0aWMgdW5zaWduZWQgZGF0YU9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihTdHJpbmdJbXBsLCBtX2RhdGE4KTsgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhclR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPgpAQCAtNDcyLDE4ICs0NjMsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhczE2
Qml0U2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hGbGFnSGFz
MTZCaXRTaGFkb3c7IH0KICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCB1cGNvbnZlcnRD
aGFyYWN0ZXJzKHVuc2lnbmVkLCB1bnNpZ25lZCkgY29uc3Q7Ci0gICAgYm9vbCBpc0lkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdJc0lkZW50aWZp
ZXI7IH0KLSAgICBib29sIGlzSWRlbnRpZmllck9yVW5pcXVlKCkgY29uc3QgeyByZXR1cm4gaXNJ
ZGVudGlmaWVyKCkgfHwgaXNFbXB0eVVuaXF1ZSgpOyB9Ci0gICAgdm9pZCBzZXRJc0lkZW50aWZp
ZXIoYm9vbCBpc0lkZW50aWZpZXIpCi0gICAgewotICAgICAgICBBU1NFUlQoIWlzU3RhdGljKCkp
OwotICAgICAgICBBU1NFUlQoIWlzRW1wdHlVbmlxdWUoKSk7Ci0gICAgICAgIGlmIChpc0lkZW50
aWZpZXIpCi0gICAgICAgICAgICBtX2hhc2hBbmRGbGFncyB8PSBzX2hhc2hGbGFnSXNJZGVudGlm
aWVyOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2hhc2hBbmRGbGFncyAmPSB+c19oYXNo
RmxhZ0lzSWRlbnRpZmllcjsKLSAgICB9Ci0KKyAgICBib29sIGlzSWRlbnRpZmllcigpIGNvbnN0
IHsgcmV0dXJuIGlzQXRvbWljKCk7IH0KICAgICBib29sIGlzRW1wdHlVbmlxdWUoKSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuICFsZW5ndGgoKSAmJiAhaXNTdGF0aWMoKTsKQEAgLTgxNCw3
ICs3OTQsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFn
OEJpdEJ1ZmZlciA9IDF1IDw8IDU7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZs
YWdJc0F0b21pYyA9IDF1IDw8IDQ7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZs
YWdEaWRSZXBvcnRDb3N0ID0gMXUgPDwgMzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19o
YXNoRmxhZ0lzSWRlbnRpZmllciA9IDF1IDw8IDI7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNfaGFzaE1hc2tCdWZmZXJPd25lcnNoaXAgPSAxdSB8ICgxdSA8PCAxKTsKIAogI2lmZGVmIFNU
UklOR19TVEFUUwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1N0YXRpY3MuY3BwCShyZXZp
c2lvbiAxNjU5NDYpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1N0YXRpY3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OmVt
cHR5KCkKIC8vIGxlYWQgdG8gbG90cyBvZiBjb25mbGljdHMuCiB1bnNpZ25lZCBTdHJpbmdJbXBs
OjpoYXNoQW5kRmxhZ3NGb3JFbXB0eVVuaXF1ZSgpCiB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIHNf
bmV4dEhhc2hBbmRGbGFnc0ZvckVtcHR5VW5pcXVlID0gQnVmZmVySW50ZXJuYWwgfCBzX2hhc2hG
bGFnOEJpdEJ1ZmZlciB8IHNfaGFzaEZsYWdJc0lkZW50aWZpZXIgfCBzX2hhc2hGbGFnSXNBdG9t
aWM7CisgICAgc3RhdGljIHVuc2lnbmVkIHNfbmV4dEhhc2hBbmRGbGFnc0ZvckVtcHR5VW5pcXVl
ID0gQnVmZmVySW50ZXJuYWwgfCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IHNfaGFzaEZsYWdJc0F0
b21pYzsKICAgICBzX25leHRIYXNoQW5kRmxhZ3NGb3JFbXB0eVVuaXF1ZSArPSAxIDw8IHNfZmxh
Z0NvdW50OwogICAgIHNfbmV4dEhhc2hBbmRGbGFnc0ZvckVtcHR5VW5pcXVlIHw9IDEgPDwgMzE7
CiAgICAgcmV0dXJuIHNfbmV4dEhhc2hBbmRGbGFnc0ZvckVtcHR5VW5pcXVlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5oCShyZXZpc2lvbiAxNjU5NDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaWZuZGVmIElkZW50aWZpZXJSZXBfaAogI2RlZmluZSBJZGVudGlmaWVyUmVw
X2gKIAorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227312</attachid>
            <date>2014-03-20 12:00:47 -0700</date>
            <delta_ts>2014-03-20 12:03:37 -0700</delta_ts>
            <desc>Patch, with speculative Windows build fix</desc>
            <filename>128624.12.patch</filename>
            <type>text/plain</type>
            <size>48445</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY1OTY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBA
CisyMDE0LTAzLTIwICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBNZXJnZSBBdG9taWNTdHJpbmcsIElkZW50aWZpZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODYyNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdURjo6U3RyaW5nSW1wbCBjdXJyZW50
bHkgc3VwcG9ydHMgdHdvIHVuaXF1aW5nIG1lY2hhbmlzbSAtIEF0b21pY1N0cmluZyBhbmQKKyAg
ICAgICAgSWRlbnRpZmVyIC0gdGhhdCBpcyBvbmUgdG9vIG1hbnkuCisKKyAgICAgICAgUmVtb3Zl
IElkZW50aWZpZXIgaW4gZmF2b3VyIG9mIEF0b21pY1N0cmluZy4gSWRlbnRpZmllciBoYWQgdHdv
IGludGVyZXN0aW5nCisgICAgICAgIG1lY2hhbmlzbXMgdGhhdCB3ZSBwcmVzZXJ2ZS4KKworICAg
ICAgICAoMSkgSlNDIEFQSSBWTXMgZWFjaCBnZXQgdGhlaXIgb3duIHN0cmluZyB0YWJsZSwgc3dp
dGNoIHRoZSBzdHJpbmcgdGFibGUgb24KKyAgICAgICAgICAgIEFQSSBlbnRyeS9leGl0LgorICAg
ICAgICAoMikgSlNDIGNhY2hlcyBhIHBvaW50ZXIgdG8gdGhlIHN0cmluZyB0YWJsZSBvbiB0aGUg
Vk0gdG8gYXZvaWQgYSB0aHJlYWQKKyAgICAgICAgICAgIHNwZWNpZmljIGFjY2Vzcy4gQWRkcyBh
IG5ldyBBdG9taWNTdHJpbmc6OmFkZCBtZXRob2QgdG8gc3VwcG9ydCB0aGlzLgorCisgICAgICAg
ICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbToKKyAgICAgICAgICAgIC0gdXBkYXRlZCBpbmNs
dWRlcy4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAgICAgLSBhZGRlZCBJZGVudGlmaWVySW5saW5lcy5oLgorICAgICAgICAqIGlu
c3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHA6CisgICAgICAgICogaW5z
cGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHA6CisgICAgICAgICAgICAt
IHVwZGF0ZWQgaW5jbHVkZXMuCisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6Cisg
ICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6YXRvbWljU3RyaW5nVGFibGUpOgorICAgICAgICAgICAg
LSBhZGRlZCwgdXNlZCB2aWEgQXRvbWljU3RyaW5nOjphZGQgdG8gYXZvaWQgdGhyZWFkLXNwZWNp
ZmljIGFjY2Vzcy4KKyAgICAgICAgKiBydW50aW1lL0NvbnNvbGVQcm90b3R5cGUuY3BwOgorICAg
ICAgICAgICAgLSB1cGRhdGVkIGluY2x1ZGVzLgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmll
ci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6CisgICAgICAgIChKU0M6Oklk
ZW50aWZpZXI6OmFkZDgpOgorICAgICAgICAgICAgLSB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNo
YXJhY3RlclN0cmluZ1JlcCBub3cgcmV0dXJucyBBdG9taWMgc3RyaW5ncywgdXNlIEF0b21pY1N0
cmluZzo6YWRkLgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAoSlND
OjpJZGVudGlmaWVyOjpJZGVudGlmaWVyKToKKyAgICAgICAgICAgIC0gYWRkZWQgQVNTRVJUUy4K
KyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgICAgIC0gdm0tPnNtYWxs
U3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAgbm93IHJldHVybnMgQXRvbWljIHN0cmlu
Z3MsIHVzZSBBdG9taWNTdHJpbmc6OmFkZC4KKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZpZXJJ
bmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjphZGQpOgorICAgICAg
ICAgICAgLSBtb3ZlZCBmcm9tIElkZW50aWZpZXIuaCwgdXNlIEF0b21pY1N0cmluZzo6YWRkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDSW5saW5lcy5oOgorICAgICAgICAgICAgLSBhZGRlZCBJZGVu
dGlmaWVySW5saW5lcy5oLgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgICAg
ICAtIHJlbW92ZWQgSWRlbnRpZmllclRhYmxlLgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlO
YW1lQXJyYXkuY3BwOgorICAgICAgICAgICAgLSB1cGRhdGVkIGluY2x1ZGVzLgorICAgICAgICAq
IHJ1bnRpbWUvU21hbGxTdHJpbmdzLmNwcDoKKyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzU3Rv
cmFnZTo6U21hbGxTdHJpbmdzU3RvcmFnZSk6CisgICAgICAgICAgICAtIGVuc3VyZSBhbGwgc2lu
Z2xlIGNoYXJhY3RlciBzdHJpbmdzIGFyZSBBdG9taWMuCisgICAgICAgICogcnVudGltZS9WTS5j
cHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICAgICAtIGluc3RhbnRpYXRlIENv
bW1vbklkZW50aWZpZXJzIHdpdGggdGhlIGNvcnJlY3QgQXRvbWljU3RyaW5nVGFibGUgc2V0IG9u
IHRocmVhZCBkYXRhLgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06
OmF0b21pY1N0cmluZ1RhYmxlKToKKyAgICAgICAgICAgIC0gYWRkZWQsIHVzZWQgdmlhIEF0b21p
Y1N0cmluZzo6YWRkIHRvIGF2b2lkIHRocmVhZC1zcGVjaWZpYyBhY2Nlc3MuCisKIDIwMTQtMDMt
MjAgIEdhYm9yIFJhcGNzYW55aSAgPHJnYWJvckB3ZWJraXQub3JnPgogCiAgICAgICAgIFtBUk02
NF0gRml4IGFzc2VtYmxlciBidWlsZCBpc3N1ZXMgYW5kIGFkZCBjYWNoZUZsdXNoIHN1cHBvcnQg
Zm9yIExpbnV4CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9i
amVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3Jh
cHBlck9iamVjdC5tbQkocmV2aXNpb24gMTY1OTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0FQSVdyYXBwZXJPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywx
MCBAQAogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogCiAjaW5jbHVkZSAiRGVsYXll
ZFJlbGVhc2VTY29wZS5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKLSNpbmNsdWRl
ICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgi
Ci0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgi
Ci0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJM
RUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2NTk2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NDQsNiArODQ0LDcgQEAKIAkJODYwMTYxRTQw
RjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjAxNjFFMDBGM0E4M0MxMDBGODQ3MTAgLyog
TWFjcm9Bc3NlbWJsZXJYODYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJY
ODZfNjQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
MDE2MUUxMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2MDE2MUU2MEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYwMTYxRTIwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJODYwNkRERUExOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZp
ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NjA2RERFOTE4REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjBCRDgwMTE0OEVB
NkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkJGNjQyQTE0OERCMkI1MDA0REUzNkEgLyogSW50cmluc2ljLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODYxMkU0
Q0QxNTIzODlFQzAwQzgzNkJFIC8qIE1hdGNoUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjEyRTRDQjE1MjI5MTg0MDBDODM2QkUgLyogTWF0
Y2hSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk4NjE1OEFCMzE1NUM4QjQwMDBCNDVDOUMgLyogUHJvcGVydHlOYW1lLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjE1OEFCMjE1NUM4QjNGMDBC
NDVDOUMgLyogUHJvcGVydHlOYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTIzNjMsNiArMjM2NCw3IEBACiAJCTg2MDNDRUYyMTRDNzU0NjQw
MEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENvZGVQcm9maWxpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg2MDRGNEYyMTQzQTZDNDQwMEIyOTVGNSAvKiBDaGFuZ2VMb2cgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
Q2hhbmdlTG9nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjA2RERFOTE4REE0NEFC
MDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSWRlbnRpZmllcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODYxMkU0Q0IxNTIyOTE4NDAwQzgzNkJFIC8qIE1hdGNoUmVzdWx0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGNoUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2MTU4QUIyMTU1QzhCM0YwMEI0NUM5QyAvKiBQcm9wZXJ0eU5hbWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlOYW1lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2MjU1M0NFMTYxMzZBQTUwMDlGMTdEMCAvKiBKU1Byb3h5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJveHkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzk1MCw2ICszOTUyLDcgQEAKIAkJCQlCQzMzN0JE
RTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCiAJCQkJOTMzQTM0OUQwMzhB
RTgwRjAwODYzNUNFIC8qIElkZW50aWZpZXIuY3BwICovLAogCQkJCTkzM0EzNDlBMDM4QUU3QzYw
MDg2MzVDRSAvKiBJZGVudGlmaWVyLmggKi8sCisJCQkJODYwNkRERTkxOERBNDRBQjAwQTM4M0Qw
IC8qIElkZW50aWZpZXJJbmxpbmVzLmggKi8sCiAJCQkJMEZCN0YzOEQxNUVEOEUzODAwRjE2N0Iy
IC8qIEluZGV4aW5nSGVhZGVyLmggKi8sCiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8q
IEluZGV4aW5nSGVhZGVySW5saW5lcy5oICovLAogCQkJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERF
NyAvKiBJbmRleGluZ1R5cGUuY3BwICovLApAQCAtNTMwOSw2ICs1MzEyLDcgQEAKIAkJCQlBNTMy
NDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlMuanNvbiBpbiBIZWFkZXJzICovLAog
CQkJCUE1MzI0Mzg4MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU0JhY2tlbmREaXNwYXRj
aGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOEExODU2ODMzNTAwMkVENjkyIC8qIElu
c3BlY3RvckpTRnJvbnRlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJODYwNkRE
RUExOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTMyNDM4QzE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1MEU0QjYyMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUQ5M0FDMTg1MTRGNzkwMDQw
MERFRCAvKiBJbnNwZWN0b3JUeXBlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTY1OTY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJHZXR0ZXJTZXR0
ZXIuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRI
b3N0LmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTSW5qZWN0ZWRTY3Jp
cHRIb3N0LmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZh
U2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDE2NTk2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZh
U2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5j
bHVkZSAiSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U0phdmFTY3JpcHRDYWxsRnJhbWUuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTY1OTY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MSw2ICs4MSw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24o
KSBjb25zdCB7IHJldHVybiB2bSgpLmV4Y2VwdGlvbigpOyB9CiAgICAgICAgIGJvb2wgaGFkRXhj
ZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gIXZtKCkuZXhjZXB0aW9uKCkuaXNFbXB0eSgpOyB9CiAK
KyAgICAgICAgSWRlbnRpZmllclRhYmxlJiBhdG9taWNTdHJpbmdUYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIHZtKCkuYXRvbWljU3RyaW5nVGFibGUoKTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVu
dGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICp2bSgpLnByb3BlcnR5TmFt
ZXM7IH0KICAgICAgICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXImIGVtcHR5TGlzdCgpIGNv
bnN0IHsgcmV0dXJuICp2bSgpLmVtcHR5TGlzdDsgfQogICAgICAgICBJbnRlcnByZXRlciogaW50
ZXJwcmV0ZXIoKSB7IHJldHVybiB2bSgpLmludGVycHJldGVyOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMTY1OTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZVByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMCBAQAogI2luY2x1ZGUgIkNv
bnNvbGVDbGllbnQuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhl
bHBlcnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU0NvbnNvbGUuaCIKICNpbmNsdWRlICJTY3JpcHRBcmd1bWVu
dHMuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDE2NTk2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJsZS5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KIAogdXNpbmcgV1RGOjpUaHJlYWRTcGVjaWZpYzsKQEAgLTQ4LDYy
ICs0OSwxNCBAQCB2b2lkIGRlbGV0ZUlkZW50aWZpZXJUYWJsZShJZGVudGlmaWVyVGFiCiAgICAg
ZGVsZXRlIHRhYmxlOwogfQogCi1zdHJ1Y3QgSWRlbnRpZmllckFTQ0lJU3RyaW5nVHJhbnNsYXRv
ciB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgTENoYXIqIGMpCi0gICAgewotICAg
ICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiByLCBjb25zdCBMQ2hh
ciogcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBJZGVudGlmaWVyOjplcXVhbChyLCBzKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBj
b25zdCBMQ2hhciogYywgdW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIHNpemVfdCBsZW5n
dGggPSBzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYykpOwotICAgICAgICBs
b2NhdGlvbiA9ICZTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihjKSwgbGVuZ3RoKS5sZWFrUmVmKCk7Ci0gICAgICAgIGxvY2F0aW9uLT5z
ZXRIYXNoKGhhc2gpOwotICAgIH0KLX07Ci0KLXN0cnVjdCBJZGVudGlmaWVyTENoYXJGcm9tVUNo
YXJUcmFuc2xhdG9yIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFyQnVmZmVy
PFVDaGFyPiYgYnVmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0
ZUhhc2hBbmRNYXNrVG9wOEJpdHMoYnVmLnMsIGJ1Zi5sZW5ndGgpOwotICAgIH0KLSAgICAKLSAg
ICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBzdHIsIGNvbnN0IENoYXJCdWZmZXI8VUNo
YXI+JiBidWYpCi0gICAgewotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoc3RyLCBi
dWYucywgYnVmLmxlbmd0aCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0
ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0IENoYXJCdWZmZXI8VUNoYXI+JiBidWYsIHVu
c2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICBMQ2hhciogZDsKLSAgICAgICAgU3RyaW5nSW1w
bCYgciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmLmxlbmd0aCwgZCkubGVh
a1JlZigpOwotICAgICAgICBXVEY6OmNvcHlMQ2hhcnNGcm9tVUNoYXJTb3VyY2UoZCwgYnVmLnMs
IGJ1Zi5sZW5ndGgpOwotICAgICAgICByLnNldEhhc2goaGFzaCk7Ci0gICAgICAgIGxvY2F0aW9u
ID0gJnI7Ci0gICAgfQotfTsKLQogUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQo
Vk0qIHZtLCBjb25zdCBjaGFyKiBjKQogewogICAgIEFTU0VSVChjKTsKICAgICBBU1NFUlQoY1sw
XSk7CiAgICAgaWYgKCFjWzFdKQotICAgICAgICByZXR1cm4gYWRkKHZtLCB2bS0+c21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjWzBdKSk7Ci0KLSAgICBJZGVudGlmaWVyVGFi
bGUmIGlkZW50aWZpZXJUYWJsZSA9ICp2bS0+aWRlbnRpZmllclRhYmxlOwotCi0gICAgSGFzaFNl
dDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBpZGVudGlmaWVyVGFibGUuYWRk
PGNvbnN0IExDaGFyKiwgSWRlbnRpZmllckFTQ0lJU3RyaW5nVHJhbnNsYXRvcj4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KGMpKTsKLQotICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgbmV3
bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgotICAgIC8vIFRoZSBib29s
ZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCi0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IGFkZGVkU3RyaW5nID0gYWRkUmVzdWx0LmlzTmV3RW50cnkgPyBhZG9wdFJlZigqYWRk
UmVzdWx0Lml0ZXJhdG9yKSA6ICphZGRSZXN1bHQuaXRlcmF0b3I7CisgICAgICAgIHJldHVybiAq
dm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoY1swXSk7CiAKLSAgICBy
ZXR1cm4gYWRkZWRTdHJpbmcucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1cm4gKkF0b21pY1N0
cmluZzo6YWRkKGMpOwogfQogCiBQYXNzUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGMpCkBAIC0xMTcsNDIgKzcwLDEyIEBAIFBhc3NS
ZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkOChWTSoKICAgICAgICAgVUNoYXIgYyA9IHNb
MF07CiAgICAgICAgIEFTU0VSVChjIDw9IDB4ZmYpOwogICAgICAgICBpZiAoY2FuVXNlU2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKGMpKQotICAgICAgICAgICAgcmV0dXJuIGFkZCh2bSwgdm0tPnNtYWxs
U3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYykpOworICAgICAgICAgICAgcmV0dXJu
ICp2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKTsKICAgICB9Ci0g
ICAgCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiAqU3RyaW5nSW1wbDo6ZW1wdHko
KTsKLSAgICBDaGFyQnVmZmVyPFVDaGFyPiBidWYgPSB7IHMsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihsZW5ndGgpIH07Ci0gICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1
bHQgPSB2bS0+aWRlbnRpZmllclRhYmxlLT5hZGQ8Q2hhckJ1ZmZlcjxVQ2hhcj4sIElkZW50aWZp
ZXJMQ2hhckZyb21VQ2hhclRyYW5zbGF0b3IgPihidWYpOwotICAgIAotICAgIC8vIElmIHRoZSBz
dHJpbmcgaXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgotICAg
IC8vIFRoZSBib29sZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCi0gICAg
cmV0dXJuIGFkZFJlc3VsdC5pc05ld0VudHJ5ID8gYWRvcHRSZWYoKiphZGRSZXN1bHQuaXRlcmF0
b3IpIDogKiphZGRSZXN1bHQuaXRlcmF0b3I7Ci19Ci0KLVBhc3NSZWY8U3RyaW5nSW1wbD4gSWRl
bnRpZmllcjo6YWRkU2xvd0Nhc2UoVk0qIHZtLCBTdHJpbmdJbXBsKiByKQotewotICAgIGlmIChy
LT5pc0VtcHR5VW5pcXVlKCkpCi0gICAgICAgIHJldHVybiAqcjsKLSAgICBBU1NFUlQoIXItPmlz
SWRlbnRpZmllcigpKTsKLSAgICAvLyBUaGUgZW1wdHkgJiBudWxsIHN0cmluZ3MgYXJlIHN0YXRp
YyBzaW5nbGV0b25zLCBhbmQgc3RhdGljIHN0cmluZ3MgYXJlIGhhbmRsZWQKLSAgICAvLyBpbiA6
OmFkZCgpIGluIHRoZSBoZWFkZXIsIHNvIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSB3aXRoIGEg
emVybyBsZW5ndGggc3RyaW5nLgotICAgIEFTU0VSVChyLT5sZW5ndGgoKSk7Ci0KLSAgICBpZiAo
ci0+bGVuZ3RoKCkgPT0gMSkgewotICAgICAgICBVQ2hhciBjID0gKCpyKVswXTsKLSAgICAgICAg
aWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQotICAgICAgICAgICAgciA9IHZtLT5z
bWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGMpOwotICAgICAgICAgICAgaWYg
KHItPmlzSWRlbnRpZmllcigpKQotICAgICAgICAgICAgICAgIHJldHVybiAqcjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gKip2bS0+aWRlbnRpZmllclRhYmxlLT5hZGQocikuaXRlcmF0b3I7Ci19CiAK
LVBhc3NSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkU2xvd0Nhc2UoRXhlY1N0YXRlKiBl
eGVjLCBTdHJpbmdJbXBsKiByKQotewotICAgIHJldHVybiBhZGRTbG93Q2FzZSgmZXhlYy0+dm0o
KSwgcik7CisgICAgcmV0dXJuICpBdG9taWNTdHJpbmc6OmFkZChzLCBsZW5ndGgpOwogfQogCiBJ
ZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCB2YWx1
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJKHJl
dmlzaW9uIDE2NTk2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZp
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjEgKzM2LDIxIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHB1YmxpYzoKICAgICAgICAgSWRlbnRpZmllcigpIHsgfQogICAgICAgICBlbnVtIEVtcHR5
SWRlbnRpZmllckZsYWcgeyBFbXB0eUlkZW50aWZpZXIgfTsKLSAgICAgICAgSWRlbnRpZmllcihF
bXB0eUlkZW50aWZpZXJGbGFnKSA6IG1fc3RyaW5nKFN0cmluZ0ltcGw6OmVtcHR5KCkpIHsgfQor
ICAgICAgICBJZGVudGlmaWVyKEVtcHR5SWRlbnRpZmllckZsYWcpIDogbV9zdHJpbmcoU3RyaW5n
SW1wbDo6ZW1wdHkoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0lkZW50aWZpZXIoKSk7
IH0KIAogICAgICAgICAvLyBPbmx5IHRvIGJlIHVzZWQgd2l0aCBzdHJpbmcgbGl0ZXJhbHMuCiAg
ICAgICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLSAgICAgICAgSWRlbnRp
ZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJz
Q291bnRdKSA6IG1fc3RyaW5nKGFkZChleGVjLCBjaGFyYWN0ZXJzKSkgeyB9CisgICAgICAgIElk
ZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFj
dGVyc0NvdW50XSkgOiBtX3N0cmluZyhhZGQoZXhlYywgY2hhcmFjdGVycykpIHsgQVNTRVJUKG1f
c3RyaW5nLmltcGwoKS0+aXNJZGVudGlmaWVyKCkpOyB9CiAgICAgICAgIHRlbXBsYXRlPHVuc2ln
bmVkIGNoYXJhY3RlcnNDb3VudD4KLSAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IGNo
YXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5nKGFkZCh2bSwgY2hh
cmFjdGVycykpIHsgfQorICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgY2hhciAoJmNo
YXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIDogbV9zdHJpbmcoYWRkKHZtLCBjaGFyYWN0ZXJz
KSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0lkZW50aWZpZXIoKSk7IH0KIAotICAgICAg
ICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogcmVwKSA6IG1fc3RyaW5n
KGFkZChleGVjLCByZXApKSB7IH0KLSAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQoZXhlYywgcy5pbXBsKCkpKSB7IH0KKyAg
ICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0
cmluZyhhZGQoZXhlYywgcmVwKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0lkZW50aWZp
ZXIoKSk7IH0KKyAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyYgcykgOiBtX3N0cmluZyhhZGQoZXhlYywgcy5pbXBsKCkpKSB7IEFTU0VSVChtX3N0cmluZy5p
bXBsKCktPmlzSWRlbnRpZmllcigpKTsgfQogCi0gICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBj
b25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxlbmd0aCkp
IHsgfQotICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5n
dGgpIDogbV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgpKSB7IH0KLSAgICAgICAgSWRlbnRpZmll
cihWTSogdm0sIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmluZyhhZGQodm0sIHJlcCkpIHsgfSAK
LSAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmluZyhh
ZGQodm0sIHMuaW1wbCgpKSkgeyB9CisgICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBM
Q2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgQVNT
RVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJZGVudGlmaWVyKCkpOyB9CisgICAgICAgIElkZW50aWZp
ZXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0s
IHMsIGxlbmd0aCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNJZGVudGlmaWVyKCkpOyB9
CisgICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBTdHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmco
YWRkKHZtLCByZXApKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzSWRlbnRpZmllcigpKTsg
fQorICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBzKSA6IG1fc3RyaW5n
KGFkZCh2bSwgcy5pbXBsKCkpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzSWRlbnRpZmll
cigpKTsgfQogCiAgICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmc7IH0KICAgICAgICAgU3RyaW5nSW1wbCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaW5nLmltcGwoKTsgfQpAQCAtMTEwLDI3ICsxMTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gYWRkOChWTSosIGNvbnN0IFVDaGFyKiwg
aW50IGxlbmd0aCk7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBib29sIGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhUKTsKIAotICAgICAgICBz
dGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBs
KiByKQotICAgICAgICB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgY2hlY2tDdXJyZW50
SWRlbnRpZmllclRhYmxlKGV4ZWMpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoci0+aXNJZGVu
dGlmaWVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICpyOwotICAgICAgICAgICAgcmV0dXJu
IGFkZFNsb3dDYXNlKGV4ZWMsIHIpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVm
PFN0cmluZ0ltcGw+IGFkZChWTSogdm0sIFN0cmluZ0ltcGwqIHIpCi0gICAgICAgIHsKLSNpZm5k
ZWYgTkRFQlVHCi0gICAgICAgICAgICBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUodm0pOwot
I2VuZGlmCi0gICAgICAgICAgICBpZiAoci0+aXNJZGVudGlmaWVyKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuICpyOwotICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3dDYXNlKHZtLCByKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmPFN0cmlu
Z0ltcGw+IGFkZFNsb3dDYXNlKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqIHIpOwotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBhZGRTbG93Q2FzZShW
TSosIFN0cmluZ0ltcGwqIHIpOworICAgICAgICBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBh
ZGQoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCopOworICAgICAgICBzdGF0aWMgUGFzc1JlZjxTdHJp
bmdJbXBsPiBhZGQoVk0qLCBTdHJpbmdJbXBsKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgY2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKEV4ZWNTdGF0ZSopOwog
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRJZGVudGlm
aWVyVGFibGUoVk0qKTsKQEAgLTE0OCw1MSArMTI5LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBDaGFyQnVmZmVyIHsK
LSAgICAgICAgY29uc3QgVCogczsKLSAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aDsKLSAgICB9
OwotICAgIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBJZGVudGlmaWVy
Q2hhckJ1ZmZlclRyYW5zbGF0b3IgewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBDaGFyQnVmZmVyPFQ+JiBidWYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJp
bmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGJ1Zi5zLCBidWYubGVuZ3RoKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1w
bCogc3RyLCBjb25zdCBDaGFyQnVmZmVyPFQ+JiBidWYpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBJZGVudGlmaWVyOjplcXVhbChzdHIsIGJ1Zi5zLCBidWYubGVuZ3RoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRp
b24sIGNvbnN0IENoYXJCdWZmZXI8VD4mIGJ1ZiwgdW5zaWduZWQgaGFzaCkKLSAgICAgICAgewot
ICAgICAgICAgICAgVCogZDsKLSAgICAgICAgICAgIFN0cmluZ0ltcGwmIHIgPSBTdHJpbmdJbXBs
OjpjcmVhdGVVbmluaXRpYWxpemVkKGJ1Zi5sZW5ndGgsIGQpLmxlYWtSZWYoKTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gYnVmLmxlbmd0aDsgaSsrKQotICAgICAgICAg
ICAgICAgIGRbaV0gPSBidWYuc1tpXTsKLSAgICAgICAgICAgIHIuc2V0SGFzaChoYXNoKTsKLSAg
ICAgICAgICAgIGxvY2F0aW9uID0gJnI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CiAgICAgUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQo
Vk0qIHZtLCBjb25zdCBUKiBzLCBpbnQgbGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKGxlbmd0
aCA9PSAxKSB7CiAgICAgICAgICAgICBUIGMgPSBzWzBdOwogICAgICAgICAgICAgaWYgKGNhblVz
ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhjKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWRkKHZt
LCB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICp2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1Jl
cChjKTsKICAgICAgICAgfQotICAgICAgICAKICAgICAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAg
ICAgICByZXR1cm4gKlN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgICAgIENoYXJCdWZmZXI8VD4g
YnVmID0geyBzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSB9OwotICAgICAgICBIYXNo
U2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IHZtLT5pZGVudGlmaWVyVGFi
bGUtPmFkZDxDaGFyQnVmZmVyPFQ+LCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I8VD4+
KGJ1Zik7CiAgICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIG5ld2x5LXRyYW5z
bGF0ZWQsIHRoZW4gd2UgbmVlZCB0byBhZG9wdCBpdC4KLSAgICAgICAgLy8gVGhlIGJvb2xlYW4g
aW4gdGhlIHBhaXIgdGVsbHMgdXMgaWYgdGhhdCBpcyBzby4KLSAgICAgICAgcmV0dXJuIGFkZFJl
c3VsdC5pc05ld0VudHJ5ID8gYWRvcHRSZWYoKiphZGRSZXN1bHQuaXRlcmF0b3IpIDogKiphZGRS
ZXN1bHQuaXRlcmF0b3I7CisgICAgICAgIHJldHVybiAqQXRvbWljU3RyaW5nOjphZGQocywgbGVu
Z3RoKTsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElkZW50aWZp
ZXImIGEsIGNvbnN0IElkZW50aWZpZXImIGIpCkBAIC0yNTYsMTQgKzIwMyw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIGludCwgSWRl
bnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFN0cmluZ0ltcGw+PiwgSWRlbnRpZmll
ck1hcEluZGV4SGFzaFRyYWl0cz4gSWRlbnRpZmllck1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nSW1wbCosIGludCwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8U3RyaW5nSW1w
bCo+LCBJZGVudGlmaWVyTWFwSW5kZXhIYXNoVHJhaXRzPiBCb3Jyb3dlZElkZW50aWZpZXJNYXA7
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIEhhc2hTZXQ8U3Ry
aW5nSW1wbCo+OjpBZGRSZXN1bHQgSWRlbnRpZmllclRhYmxlOjphZGQoVSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV90YWJs
ZS5hZGQ8Vj4odmFsdWUpOwotICAgICAgICAoKnJlc3VsdC5pdGVyYXRvciktPnNldElzSWRlbnRp
Zmllcih0cnVlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIElkZW50aWZpZXJJbmxpbmVzX2gKKyNkZWZpbmUgSWRlbnRpZmll
cklubGluZXNfaAorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiSWRlbnRpZmll
ci5oIgorCituYW1lc3BhY2UgSlNDICB7CisKK2lubGluZSBQYXNzUmVmPFN0cmluZ0ltcGw+IElk
ZW50aWZpZXI6OmFkZChFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwqIHIpCit7CisjaWZuZGVm
IE5ERUJVRworICAgIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShleGVjKTsKKyNlbmRpZgor
ICAgIHJldHVybiAqQXRvbWljU3RyaW5nOjphZGRXaXRoU3RyaW5nVGFibGVQcm92aWRlcigqZXhl
Yywgcik7Cit9CitpbmxpbmUgUGFzc1JlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoVk0q
IHZtLCBTdHJpbmdJbXBsKiByKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBjaGVja0N1cnJlbnRJ
ZGVudGlmaWVyVGFibGUodm0pOworI2VuZGlmCisgICAgcmV0dXJuICpBdG9taWNTdHJpbmc6OmFk
ZFdpdGhTdHJpbmdUYWJsZVByb3ZpZGVyKCp2bSwgcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gSWRlbnRpZmllcklubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMTY1OTY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMu
aCIKKyNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkludGVycHJldGVy
LmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5oCShyZXZpc2lvbiAxNjU5NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtNDksNyArNTAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAv
LyBEcm9wQWxsTG9ja3Mgb2JqZWN0IHRha2VzIGNhcmUgdG8gcmVsZWFzZSB0aGUgSlNMb2NrIG9u
bHkgaWYgeW91cgogICAgIC8vIHRocmVhZCBhY3F1aXJlZCBpdCB0byBiZWdpbiB3aXRoLgogCi0g
ICAgY2xhc3MgSWRlbnRpZmllclRhYmxlOwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFz
cyBWTTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1l
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5TmFtZUFycmF5LmNwcAkocmV2aXNpb24gMTY1OTY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw4ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1l
QXJyYXkuaCIKIAorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgotCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3Mu
Y3BwCShyZXZpc2lvbiAxNjU5NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
bWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIFNtYWxsU3Ry
aW5nc1N0b3JhZ2U6OlNtYWxsU3RyaW5nc1N0b3JhZ2UKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
YmFzZVN0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nQ291bnQsIGNoYXJhY3RlckJ1ZmZlcik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpbmdsZUNoYXJhY3RlclN0cmluZ0NvdW50OyArK2kpIHsKICAgICAgICAgY2hhcmFj
dGVyQnVmZmVyW2ldID0gaTsKLSAgICAgICAgbV9yZXBzW2ldID0gU3RyaW5nSW1wbDo6Y3JlYXRl
U3Vic3RyaW5nU2hhcmluZ0ltcGwoYmFzZVN0cmluZywgaSwgMSk7CisgICAgICAgIG1fcmVwc1tp
XSA9IEF0b21pY1N0cmluZzo6YWRkKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4oU3RyaW5nSW1wbDo6
Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoYmFzZVN0cmluZywgaSwgMSkpLmdldCgpKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9u
IDE2NTk2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICAsIHByb21pc2VDb25zdHJ1Y3RvclRhYmxlKGFkb3B0UHRyKG5ldyBI
YXNoVGFibGUoSlNDOjpwcm9taXNlQ29uc3RydWN0b3JUYWJsZSkpKQogI2VuZGlmCiAgICAgLCBp
ZGVudGlmaWVyVGFibGUodm1UeXBlID09IERlZmF1bHQgPyB3dGZUaHJlYWREYXRhKCkuY3VycmVu
dElkZW50aWZpZXJUYWJsZSgpIDogY3JlYXRlSWRlbnRpZmllclRhYmxlKCkpCi0gICAgLCBwcm9w
ZXJ0eU5hbWVzKG5ldyBDb21tb25JZGVudGlmaWVycyh0aGlzKSkKKyAgICAsIHByb3BlcnR5TmFt
ZXMobnVsbHB0cikKICAgICAsIGVtcHR5TGlzdChuZXcgTWFya2VkQXJndW1lbnRCdWZmZXIpCiAg
ICAgLCBwYXJzZXJBcmVuYShhZG9wdFB0cihuZXcgUGFyc2VyQXJlbmEpKQogICAgICwga2V5d29y
ZHMoYWRvcHRQdHIobmV3IEtleXdvcmRzKCp0aGlzKSkpCkBAIC0yNDYsNiArMjQ2LDcgQEAgVk06
OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIC8vIE5lZWQgdG8gYmUg
Y2FyZWZ1bCB0byBrZWVwIGV2ZXJ5dGhpbmcgY29uc2lzdGVudCBoZXJlCiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodGhpcyk7CiAgICAgSWRlbnRpZmllclRhYmxlKiBleGlzdGluZ0VudHJ5SWRlbnRp
ZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoaWRl
bnRpZmllclRhYmxlKTsKKyAgICBwcm9wZXJ0eU5hbWVzID0gbmV3IENvbW1vbklkZW50aWZpZXJz
KHRoaXMpOwogICAgIHN0cnVjdHVyZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZTo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzKSk7CiAgICAgc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIGRlYnVnZ2VyQWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIERlYnVn
Z2VyQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNjU5NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3
Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBI
YW5kbGVTdGFjazsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAgIGNsYXNzIElkZW50aWZpZXJU
YWJsZTsKICAgICBjbGFzcyBJbnRlcnByZXRlcjsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsK
ICAgICBjbGFzcyBKU09iamVjdDsKQEAgLTI5Niw2ICsyOTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgRGF0ZUluc3RhbmNlQ2FjaGUgZGF0ZUluc3RhbmNlQ2FjaGU7CiAgICAgICAgIFdU
Rjo6U2ltcGxlU3RhdHMgbWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5l
SklUOwogCisgICAgICAgIElkZW50aWZpZXJUYWJsZSYgYXRvbWljU3RyaW5nVGFibGUoKSBjb25z
dCB7IHJldHVybiAqaWRlbnRpZmllclRhYmxlOyB9CisKICAgICAgICAgdm9pZCBzZXRJbkRlZmlu
ZU93blByb3BlcnR5KGJvb2wgaW5EZWZpbmVPd25Qcm9wZXJ0eSkKICAgICAgICAgewogICAgICAg
ICAgICAgbV9pbkRlZmluZU93blByb3BlcnR5ID0gaW5EZWZpbmVPd25Qcm9wZXJ0eTsKSW5kZXg6
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjU5NjgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDYzIEBACisyMDE0LTAzLTIwICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJh
Y2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBBdG9taWNTdHJpbmcsIElkZW50aWZp
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODYy
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdURjo6
U3RyaW5nSW1wbCBjdXJyZW50bHkgc3VwcG9ydHMgdHdvIHVuaXF1aW5nIG1lY2hhbmlzbSAtIEF0
b21pY1N0cmluZyBhbmQKKyAgICAgICAgSWRlbnRpZmVyIC0gdGhhdCBpcyBvbmUgdG9vIG1hbnku
CisKKyAgICAgICAgUmVtb3ZlIElkZW50aWZpZXIgaW4gZmF2b3VyIG9mIEF0b21pY1N0cmluZy4g
SWRlbnRpZmllciBoYWQgdHdvIGludGVyZXN0aW5nCisgICAgICAgIG1lY2hhbmlzbXMgdGhhdCB3
ZSBwcmVzZXJ2ZS4KKworICAgICAgICAoMSkgSlNDIEFQSSBWTXMgZWFjaCBnZXQgdGhlaXIgb3du
IHN0cmluZyB0YWJsZSwgc3dpdGNoIHRoZSBzdHJpbmcgdGFibGUgb24KKyAgICAgICAgICAgIEFQ
SSBlbnRyeS9leGl0LgorICAgICAgICAoMikgSlNDIGNhY2hlcyBhIHBvaW50ZXIgdG8gdGhlIHN0
cmluZyB0YWJsZSBvbiB0aGUgVk0gdG8gYXZvaWQgYSB0aHJlYWQKKyAgICAgICAgICAgIHNwZWNp
ZmljIGFjY2Vzcy4gQWRkcyBhIG5ldyBBdG9taWNTdHJpbmc6OmFkZCBtZXRob2QgdG8gc3VwcG9y
dCB0aGlzLgorCisgICAgICAgICogd3RmL1dURlRocmVhZERhdGEuY3BwOgorICAgICAgICAoV1RG
OjpXVEZUaHJlYWREYXRhOjpXVEZUaHJlYWREYXRhKToKKyAgICAgICAgICAgIC0gcmVtb3ZlIGFs
bG9jYXRpb24gb2YgSWRlbnRpZmllclRhYmxlLgorICAgICAgICAoV1RGOjpXVEZUaHJlYWREYXRh
Ojp+V1RGVGhyZWFkRGF0YSk6CisgICAgICAgICAgICAtIHJlbW92ZSBkZWxldGlvbiBvZiBJZGVu
dGlmaWVyVGFibGUuCisgICAgICAgICogd3RmL1dURlRocmVhZERhdGEuaDoKKyAgICAgICAgKFdU
Rjo6V1RGVGhyZWFkRGF0YTo6YXRvbWljU3RyaW5nVGFibGUpOgorICAgICAgICAgICAgLSB0YWJs
ZSBpcyBub3cgc3dpdGNoZWQgYnkgSlNDIEFQSSwgcmV0dXJuIHRoZSBjdXJyZW50IHRhYmxlLgor
ICAgICAgICAoV1RGOjpXVEZUaHJlYWREYXRhOjpjdXJyZW50SWRlbnRpZmllclRhYmxlKToKKyAg
ICAgICAgICAgIC0gbm93IHJldHVybnMgdGhlIGN1cnJlbnQgQXRvbWljU3RyaW5nVGFibGUuCisg
ICAgICAgIChXVEY6OldURlRocmVhZERhdGE6OnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUpOgor
ICAgICAgICAgICAgLSBub3cgc2V0cyB0aGUgY3VycmVudCBBdG9taWNTdHJpbmdUYWJsZS4KKyAg
ICAgICAgKFdURjo6V1RGVGhyZWFkRGF0YTo6cmVzZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKToK
KyAgICAgICAgICAgIC0gbm93IHJlc2V0cyB0aGUgQXRvbWljU3RyaW5nVGFibGUuCisgICAgICAg
ICogd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5n
OjphZGRTbG93Q2FzZSk6CisgICAgICAgICAgICAtIGFkZCB3aXRob3V0IHRocmVhZC1zcGVjaWZp
YyBhY2Nlc3MgdG8gYWNjZXNzIHN0cmluZyB0YWJsZS4KKyAgICAgICAgKiB3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaDoKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjphZGRXaXRoU3RyaW5nVGFi
bGVQcm92aWRlcik6CisgICAgICAgICAgICAtIGFkZCB3aXRob3V0IHRocmVhZC1zcGVjaWZpYyBh
Y2Nlc3MgKHVzZWQgYnkgSlNDLCBzdHJpbmcgdGFibGUgcHJvdmlkZWQgYnkgVk0gb3IgRXhlY1N0
YXRlKS4KKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJsZS5jcHA6CisgICAgICAg
IChXVEY6OkF0b21pY1N0cmluZ1RhYmxlOjpjcmVhdGUpOgorICAgICAgICAgICAgLSByZW5hbWVk
IG1fYXRvbWljU3RyaW5nVGFibGUgLT4gbV9kZWZhdWx0QXRvbWljU3RyaW5nVGFibGUuCisgICAg
ICAgIChXVEY6OkF0b21pY1N0cmluZ1RhYmxlOjp+QXRvbWljU3RyaW5nVGFibGUpOgorICAgICAg
ICAoV1RGOjpBdG9taWNTdHJpbmdUYWJsZTo6ZGVzdHJveSk6CisgICAgICAgICAgICAtIGNsZWFy
aW5nIG9mIHRhYmxlIG1vdmVkIGZyb20gQXRvbWljU3RyaW5nVGFibGU6OmRlc3Ryb3kgdG8gZGVz
dHJ1Y3Rvci4KKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJsZS5oOgorICAgICAg
ICAgICAgLSBhZGRlZCBkZXN0cnVjdG9yLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwu
Y3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCk6CisgICAgICAgICAg
ICAtIElkZW50aWZlcnMgbm8gbG9uZ2VyIGV4aXN0OyBubyBuZWVkIHRvIHJlbW92ZSB0aGVtIGZy
b20gSWRlbnRpZmllclRhYmxlLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6U3RyaW5nSW1wbCk6CisgICAgICAgICAgICAtIHJlbW92
ZWQgc19oYXNoRmxhZ0lzSWRlbnRpZmllci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Zmxh
Z0lzSWRlbnRpZmllcik6CisgICAgICAgICAgICAtIHNfaGFzaEZsYWdJc0lkZW50aWZpZXIgLT4g
c19oYXNoRmxhZ0lzQXRvbWljLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjppc0lkZW50aWZp
ZXIpOgorICAgICAgICAgICAgLSBub3cgc3lub255bW91cyB0byBpc0F0b21pYygpLgorICAgICAg
ICAqIHd0Zi90ZXh0L1N0cmluZ1N0YXRpY3MuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBs
OjpoYXNoQW5kRmxhZ3NGb3JFbXB0eVVuaXF1ZSk6CisgICAgICAgICAgICAtIHJlbW92ZWQgc19o
YXNoRmxhZ0lzSWRlbnRpZmllci4KKwogMjAxNC0wMy0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdIEFkZCBHTWFpbkxvb3BTb3Vy
Y2UgY2xhc3MgdG8gd3JhcCBpZGxlIGFuZCB0aW1lb3V0IHNvdXJjZXMKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1dURlRocmVhZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dU
RlRocmVhZERhdGEuY3BwCShyZXZpc2lvbiAxNjU5NjgpCisrKyBTb3VyY2UvV1RGL3d0Zi9XVEZU
aHJlYWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTIgKzQxLDkgQEAgVGhyZWFkU3Bl
Y2lmaWM8V1RGVGhyZWFkRGF0YT4qIFdURlRocmVhZAogCiBXVEZUaHJlYWREYXRhOjpXVEZUaHJl
YWREYXRhKCkKICAgICA6IG1fYXBpRGF0YSgwKQotICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZSgw
KQorICAgICwgbV9jdXJyZW50QXRvbWljU3RyaW5nVGFibGUoMCkKKyAgICAsIG1fZGVmYXVsdEF0
b21pY1N0cmluZ1RhYmxlKDApCiAgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3Rvcigw
KQotI2lmICFVU0UoV0VCX1RIUkVBRCkKLSAgICAsIG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZShu
ZXcgSlNDOjpJZGVudGlmaWVyVGFibGUoKSkKLSAgICAsIG1fY3VycmVudElkZW50aWZpZXJUYWJs
ZShtX2RlZmF1bHRJZGVudGlmaWVyVGFibGUpCi0jZW5kaWYKICAgICAsIG1fc3RhY2tCb3VuZHMo
U3RhY2tCb3VuZHM6OmN1cnJlbnRUaHJlYWRTdGFja0JvdW5kcygpKQogI2lmIEVOQUJMRShTVEFD
S19TVEFUUykKICAgICAsIG1fc3RhY2tTdGF0cygpCkBAIC01NCwyMyArNTEsMTQgQEAgV1RGVGhy
ZWFkRGF0YTo6V1RGVGhyZWFkRGF0YSgpCiAgICAgLCBtX3NhdmVkU3RhY2tQb2ludGVyQXRWTUVu
dHJ5KDApCiAgICAgLCBtX3NhdmVkTGFzdFN0YWNrVG9wKHN0YWNrKCkub3JpZ2luKCkpCiB7Ci0j
aWYgVVNFKFdFQl9USFJFQUQpCi0gICAgc3RhdGljIEpTQzo6SWRlbnRpZmllclRhYmxlKiBzaGFy
ZWRJZGVudGlmaWVyVGFibGUgPSBuZXcgSlNDOjpJZGVudGlmaWVyVGFibGUoKTsKLSAgICBpZiAo
cHRocmVhZF9tYWluX25wKCkgfHwgaXNXZWJUaHJlYWQoKSkKLSAgICAgICAgbV9kZWZhdWx0SWRl
bnRpZmllclRhYmxlID0gc2hhcmVkSWRlbnRpZmllclRhYmxlOwotICAgIGVsc2UKLSAgICAgICAg
bV9kZWZhdWx0SWRlbnRpZmllclRhYmxlID0gbmV3IEpTQzo6SWRlbnRpZmllclRhYmxlKCk7Ci0K
LSAgICBtX2N1cnJlbnRJZGVudGlmaWVyVGFibGUgPSBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGU7
Ci0jZW5kaWYKICAgICBBdG9taWNTdHJpbmdUYWJsZTo6Y3JlYXRlKCp0aGlzKTsKKyAgICBtX2N1
cnJlbnRBdG9taWNTdHJpbmdUYWJsZSA9IG1fZGVmYXVsdEF0b21pY1N0cmluZ1RhYmxlOwogfQog
CiBXVEZUaHJlYWREYXRhOjp+V1RGVGhyZWFkRGF0YSgpCiB7CiAgICAgaWYgKG1fYXRvbWljU3Ry
aW5nVGFibGVEZXN0cnVjdG9yKQotICAgICAgICBtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3Rv
cihtX2F0b21pY1N0cmluZ1RhYmxlKTsKLSAgICBkZWxldGUgbV9kZWZhdWx0SWRlbnRpZmllclRh
YmxlOworICAgICAgICBtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcihtX2RlZmF1bHRBdG9t
aWNTdHJpbmdUYWJsZSk7CiB9CiAKICNpZiBVU0UoUFRIUkVBRF9HRVRTUEVDSUZJQ19ESVJFQ1Qp
CkBAIC04NiwyMSArNzQsMyBAQCBXVEZUaHJlYWREYXRhJiBXVEZUaHJlYWREYXRhOjpjcmVhdGVB
bmRSCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV1RGCi0KLW5hbWVzcGFjZSBKU0MgewotCi1J
ZGVudGlmaWVyVGFibGU6On5JZGVudGlmaWVyVGFibGUoKQotewotICAgIEhhc2hTZXQ8U3RyaW5n
SW1wbCo+OjppdGVyYXRvciBlbmQgPSBtX3RhYmxlLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxT
dHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPnNldElzSWRlbnRpZmllcihmYWxzZSk7Ci19Ci0K
LUhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgSWRlbnRpZmllclRhYmxlOjphZGQoU3Ry
aW5nSW1wbCogdmFsdWUpCi17Ci0gICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX3RhYmxlLmFkZCh2YWx1ZSk7Ci0gICAgKCpyZXN1bHQuaXRlcmF0b3IpLT5zZXRJ
c0lkZW50aWZpZXIodHJ1ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCShyZXZpc2lvbiAxNjU5NjgpCisrKyBT
b3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDI4ICs0
OSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNlbmRpZgogCi0vLyBGSVhNRTog
VGhpcyBpcyBhIHRlbXBvcmFyeSBsYXllcmluZyB2aW9sYXRpb24gdW50aWwgd2UgbW92ZSBtb3Jl
IG9mIHRoZSBzdHJpbmcgY29kZSBmcm9tIEphdmFTY3JpcHRDb3JlIHRvIFdURi4KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBJZGVudGlmaWVyVGFibGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSB+SWRlbnRpZmllclRhYmxl
KCk7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJl
c3VsdCBhZGQoU3RyaW5nSW1wbCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+IEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkKFUpOwotCi0gICAgYm9vbCBy
ZW1vdmUoU3RyaW5nSW1wbCogaWRlbnRpZmllcikgeyByZXR1cm4gbV90YWJsZS5yZW1vdmUoaWRl
bnRpZmllcik7IH0KLQotcHJpdmF0ZToKLSAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPiBtX3RhYmxl
OwotfTsKLQotfQotCiBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3MgQXRvbWljU3RyaW5nVGFibGU7
Cit0eXBlZGVmIEF0b21pY1N0cmluZ1RhYmxlIElkZW50aWZpZXJUYWJsZTsKIAogdHlwZWRlZiB2
b2lkICgqQXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yKShBdG9taWNTdHJpbmdUYWJsZSopOwog
CkBAIC04MiwyNCArNjQsMjQgQEAgcHVibGljOgogCiAgICAgQXRvbWljU3RyaW5nVGFibGUqIGF0
b21pY1N0cmluZ1RhYmxlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2F0b21pY1N0cmluZ1Rh
YmxlOworICAgICAgICByZXR1cm4gbV9jdXJyZW50QXRvbWljU3RyaW5nVGFibGU7CiAgICAgfQog
Ci0gICAgSlNDOjpJZGVudGlmaWVyVGFibGUqIGN1cnJlbnRJZGVudGlmaWVyVGFibGUoKQorICAg
IElkZW50aWZpZXJUYWJsZSogY3VycmVudElkZW50aWZpZXJUYWJsZSgpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9jdXJyZW50SWRlbnRpZmllclRhYmxlOworICAgICAgICByZXR1cm4gbV9jdXJy
ZW50QXRvbWljU3RyaW5nVGFibGU7CiAgICAgfQogCi0gICAgSlNDOjpJZGVudGlmaWVyVGFibGUq
IHNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoSlNDOjpJZGVudGlmaWVyVGFibGUqIGlkZW50aWZp
ZXJUYWJsZSkKKyAgICBJZGVudGlmaWVyVGFibGUqIHNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUo
SWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGUpCiAgICAgewotICAgICAgICBKU0M6Oklk
ZW50aWZpZXJUYWJsZSogb2xkSWRlbnRpZmllclRhYmxlID0gbV9jdXJyZW50SWRlbnRpZmllclRh
YmxlOwotICAgICAgICBtX2N1cnJlbnRJZGVudGlmaWVyVGFibGUgPSBpZGVudGlmaWVyVGFibGU7
CisgICAgICAgIElkZW50aWZpZXJUYWJsZSogb2xkSWRlbnRpZmllclRhYmxlID0gbV9jdXJyZW50
QXRvbWljU3RyaW5nVGFibGU7CisgICAgICAgIG1fY3VycmVudEF0b21pY1N0cmluZ1RhYmxlID0g
aWRlbnRpZmllclRhYmxlOwogICAgICAgICByZXR1cm4gb2xkSWRlbnRpZmllclRhYmxlOwogICAg
IH0KIAogICAgIHZvaWQgcmVzZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKCkKICAgICB7Ci0gICAg
ICAgIG1fY3VycmVudElkZW50aWZpZXJUYWJsZSA9IG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZTsK
KyAgICAgICAgbV9jdXJyZW50QXRvbWljU3RyaW5nVGFibGUgPSBtX2RlZmF1bHRBdG9taWNTdHJp
bmdUYWJsZTsKICAgICB9CiAKICAgICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2soKQpAQCAtMTQy
LDExICsxMjQsMTAgQEAgcHVibGljOgogICAgIHZvaWQqIG1fYXBpRGF0YTsKIAogcHJpdmF0ZToK
LSAgICBBdG9taWNTdHJpbmdUYWJsZSogbV9hdG9taWNTdHJpbmdUYWJsZTsKKyAgICBBdG9taWNT
dHJpbmdUYWJsZSogbV9jdXJyZW50QXRvbWljU3RyaW5nVGFibGU7CisgICAgQXRvbWljU3RyaW5n
VGFibGUqIG1fZGVmYXVsdEF0b21pY1N0cmluZ1RhYmxlOwogICAgIEF0b21pY1N0cmluZ1RhYmxl
RGVzdHJ1Y3RvciBtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcjsKIAotICAgIEpTQzo6SWRl
bnRpZmllclRhYmxlKiBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGU7Ci0gICAgSlNDOjpJZGVudGlm
aWVyVGFibGUqIG1fY3VycmVudElkZW50aWZpZXJUYWJsZTsKICAgICBTdGFja0JvdW5kcyBtX3N0
YWNrQm91bmRzOwogI2lmIEVOQUJMRShTVEFDS19TVEFUUykKICAgICBTdGFja1N0YXRzOjpQZXJU
aHJlYWRTdGF0cyBtX3N0YWNrU3RhdHM7CkBAIC0xODgsNSArMTY5LDYgQEAgaW5saW5lIFdURlRo
cmVhZERhdGEmIHd0ZlRocmVhZERhdGEoKQogCiB1c2luZyBXVEY6OldURlRocmVhZERhdGE7CiB1
c2luZyBXVEY6Ond0ZlRocmVhZERhdGE7Cit1c2luZyBXVEY6OklkZW50aWZpZXJUYWJsZTsKIAog
I2VuZGlmIC8vIFdURlRocmVhZERhdGFfaApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9BdG9t
aWNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3Ry
aW5nLmNwcAkocmV2aXNpb24gMTY1OTY4KQorKysgU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNT
dHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNiArNDE0LDI0IEBAIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQKICAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVy
YXRvcjsKIH0KIAorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFkZFNsb3dD
YXNlKEF0b21pY1N0cmluZ1RhYmxlJiBzdHJpbmdUYWJsZSwgU3RyaW5nSW1wbCogc3RyaW5nKQor
eworICAgIGlmICghc3RyaW5nLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6
OmVtcHR5KCk7CisKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzdHJpbmctPmlzQXRvbWljKCks
ICJBdG9taWNTdHJpbmcgc2hvdWxkIG5vdCBoaXQgdGhlIHNsb3cgY2FzZSBpZiB0aGUgc3RyaW5n
IGlzIGFscmVhZHkgYXRvbWljLiIpOworCisgICAgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgbG9j
a2VyOworICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gc3Ry
aW5nVGFibGUudGFibGUoKS5hZGQoc3RyaW5nKTsKKworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdF
bnRyeSkgeworICAgICAgICBBU1NFUlQoKmFkZFJlc3VsdC5pdGVyYXRvciA9PSBzdHJpbmcpOwor
ICAgICAgICBzdHJpbmctPnNldElzQXRvbWljKHRydWUpOworICAgIH0KKworICAgIHJldHVybiAq
YWRkUmVzdWx0Lml0ZXJhdG9yOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgogc3RhdGljIGlubGluZSBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IgZmluZFN0cmlu
Zyhjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsKQogewpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9BdG9taWNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21pY1N0cmluZy5oCShyZXZpc2lvbiAxNjU5NjgpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21pY1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAKIG5hbWVzcGFj
ZSBXVEYgewogCitjbGFzcyBBdG9taWNTdHJpbmdUYWJsZTsKIHN0cnVjdCBBdG9taWNTdHJpbmdI
YXNoOwogCiBjbGFzcyBBdG9taWNTdHJpbmcgewpAQCAtMTY4LDEyICsxNjksNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzaG93KCkgY29uc3Q7CiAjZW5kaWYKIAotcHJpdmF0ZToKLSAgICAvLyBUaGUg
ZXhwbGljaXQgY29uc3RydWN0b3JzIHdpdGggQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCBtdXN0IGJlIHVzZWQgZm9yIGxpdGVyYWxzLgotICAgIEF0b21pY1N0cmluZyhBU0NJSUxp
dGVyYWwpOwotCi0gICAgU3RyaW5nIG1fc3RyaW5nOwotICAgIAogICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgTENoYXIqKTsK
ICAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChjb25z
dCBjaGFyKiBzKSB7IHJldHVybiBhZGQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHMp
KTsgfTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gYWRkKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKQEAgLTE5MSwxMSArMTg2
LDI5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBhZGRTbG93Q2FzZShzdHJpbmcpOwogICAg
IH0KICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gYWRkRnJvbUxpdGVyYWxEYXRhKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IGFkZFNsb3dDYXNlKFN0cmluZ0ltcGwqKTsKICNpZiBVU0UoQ0YpCiAgICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChDRlN0cmlu
Z1JlZik7CiAjZW5kaWYKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1RhYmxlUHJvdmlk
ZXI+CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGRX
aXRoU3RyaW5nVGFibGVQcm92aWRlcihTdHJpbmdUYWJsZVByb3ZpZGVyJiBzdHJpbmdUYWJsZVBy
b3ZpZGVyLCBTdHJpbmdJbXBsKiBzdHJpbmcpCisgICAgeworICAgICAgICBpZiAoIXN0cmluZyB8
fCBzdHJpbmctPmlzQXRvbWljKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
IXN0cmluZyB8fCAhc3RyaW5nLT5sZW5ndGgoKSB8fCBpc0luQXRvbWljU3RyaW5nVGFibGUoc3Ry
aW5nKSwgIlRoZSBhdG9taWMgc3RyaW5nIGNvbWVzIGZyb20gYW4gb3RoZXIgdGhyZWFkISIpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYWRk
U2xvd0Nhc2Uoc3RyaW5nVGFibGVQcm92aWRlci5hdG9taWNTdHJpbmdUYWJsZSgpLCBzdHJpbmcp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBUaGUgZXhwbGljaXQgY29uc3RydWN0b3JzIHdp
dGggQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCBtdXN0IGJlIHVzZWQgZm9yIGxp
dGVyYWxzLgorICAgIEF0b21pY1N0cmluZyhBU0NJSUxpdGVyYWwpOworCisgICAgU3RyaW5nIG1f
c3RyaW5nOworICAgIAorICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBhZGRTbG93Q2FzZShTdHJpbmdJbXBsKik7CisgICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZFNsb3dDYXNlKEF0b21p
Y1N0cmluZ1RhYmxlJiwgU3RyaW5nSW1wbCopOworCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IHN0YXRpYyBBdG9taWNTdHJpbmdJbXBsKiBmaW5kU2xvd0Nhc2UoU3RyaW5nSW1wbCYpOwogICAg
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgQXRvbWljU3RyaW5nIGZyb21VVEY4SW50ZXJu
YWwoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKIApJbmRleDogU291cmNlL1dURi93dGYvdGV4
dC9BdG9taWNTdHJpbmdUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4
dC9BdG9taWNTdHJpbmdUYWJsZS5jcHAJKHJldmlzaW9uIDE2NTk2OCkKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbWljU3RyaW5nVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywyNSAr
MzcsMjggQEAgdm9pZCBBdG9taWNTdHJpbmdUYWJsZTo6Y3JlYXRlKFdURlRocmVhZAogCiAgICAg
Ym9vbCBjdXJyZW50VGhyZWFkSXNXZWJUaHJlYWQgPSBpc1dlYlRocmVhZCgpOwogICAgIGlmIChj
dXJyZW50VGhyZWFkSXNXZWJUaHJlYWQgfHwgaXNVSVRocmVhZCgpKQotICAgICAgICBkYXRhLm1f
YXRvbWljU3RyaW5nVGFibGUgPSBzaGFyZWRTdHJpbmdUYWJsZTsKKyAgICAgICAgZGF0YS5tX2Rl
ZmF1bHRBdG9taWNTdHJpbmdUYWJsZSA9IHNoYXJlZFN0cmluZ1RhYmxlOwogICAgIGVsc2UKLSAg
ICAgICAgZGF0YS5tX2F0b21pY1N0cmluZ1RhYmxlID0gbmV3IEF0b21pY1N0cmluZ1RhYmxlOwor
ICAgICAgICBkYXRhLm1fZGVmYXVsdEF0b21pY1N0cmluZ1RhYmxlID0gbmV3IEF0b21pY1N0cmlu
Z1RhYmxlOwogCiAgICAgLy8gV2UgZG8gdGhlIGZvbGxvd2luZyBzbyB0aGF0IGl0cyBkZXN0cnVj
dGlvbiBoYXBwZW5zIG9ubHkKICAgICAvLyBvbmNlIC0gb24gdGhlIG1haW4gVUkgdGhyZWFkLgog
ICAgIGlmICghY3VycmVudFRocmVhZElzV2ViVGhyZWFkKQogICAgICAgICBkYXRhLm1fYXRvbWlj
U3RyaW5nVGFibGVEZXN0cnVjdG9yID0gQXRvbWljU3RyaW5nVGFibGU6OmRlc3Ryb3k7CiAjZWxz
ZQotICAgIGRhdGEubV9hdG9taWNTdHJpbmdUYWJsZSA9IG5ldyBBdG9taWNTdHJpbmdUYWJsZTsK
KyAgICBkYXRhLm1fZGVmYXVsdEF0b21pY1N0cmluZ1RhYmxlID0gbmV3IEF0b21pY1N0cmluZ1Rh
YmxlOwogICAgIGRhdGEubV9hdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3IgPSBBdG9taWNTdHJp
bmdUYWJsZTo6ZGVzdHJveTsKICNlbmRpZiAvLyBVU0UoV0VCX1RIUkVBRCkKIH0KIAorQXRvbWlj
U3RyaW5nVGFibGU6On5BdG9taWNTdHJpbmdUYWJsZSgpCit7CisgICAgZm9yIChhdXRvKiBzdHJp
bmcgOiBtX3RhYmxlKQorICAgICAgICBzdHJpbmctPnNldElzQXRvbWljKGZhbHNlKTsKK30KKwog
dm9pZCBBdG9taWNTdHJpbmdUYWJsZTo6ZGVzdHJveShBdG9taWNTdHJpbmdUYWJsZSogdGFibGUp
CiB7Ci0gICAgSGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5tX3Rh
YmxlLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ZXIg
PSB0YWJsZS0+bV90YWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAo
Kml0ZXIpLT5zZXRJc0F0b21pYyhmYWxzZSk7CiAgICAgZGVsZXRlIHRhYmxlOwogfQogCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJsZS5oCShyZXZpc2lvbiAxNjU5Njgp
CisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDcgQEAgY2xhc3MgU3RyaW5nSW1wbDsKIGNsYXNzIEF0b21pY1N0cmlu
Z1RhYmxlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgfkF0b21pY1N0cmluZ1RhYmxlKCk7CiAKICAgICBzdGF0aWMgdm9pZCBj
cmVhdGUoV1RGVGhyZWFkRGF0YSYpOwogICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+JiB0YWJsZSgp
IHsgcmV0dXJuIG1fdGFibGU7IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAko
cmV2aXNpb24gMTY1OTY4KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE1LDEwICsxMTUsNiBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1w
bCgpCiAKICAgICBpZiAoaXNBdG9taWMoKSAmJiBtX2xlbmd0aCkKICAgICAgICAgQXRvbWljU3Ry
aW5nOjpyZW1vdmUodGhpcyk7Ci0gICAgaWYgKGlzSWRlbnRpZmllcigpICYmIG1fbGVuZ3RoKSB7
Ci0gICAgICAgIGlmICghd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKS0+
cmVtb3ZlKHRoaXMpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICB9CiAKICAgICBCdWZmZXJP
d25lcnNoaXAgb3duZXJzaGlwID0gYnVmZmVyT3duZXJzaGlwKCk7CiAKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nSW1wbC5oCShyZXZpc2lvbiAxNjU5NjgpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTQgKzQ0LDkgQEAgdHlwZWRlZiBj
b25zdCBzdHJ1Y3QgX19DRlN0cmluZyAqIENGU3RyaQogQGNsYXNzIE5TU3RyaW5nOwogI2VuZGlm
CiAKLS8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGxheWVyaW5nIHZpb2xhdGlvbiB3aGls
ZSB3ZSBtb3ZlIHN0cmluZyBjb2RlIHRvIFdURi4KLS8vIExhbmRpbmcgdGhlIGZpbGUgbW92ZXMg
aW4gb25lIHBhdGNoLCB3aWxsIGZvbGxvdyBvbiB3aXRoIHBhdGNoZXMgdG8gY2hhbmdlIHRoZSBu
YW1lc3BhY2VzLgogbmFtZXNwYWNlIEpTQyB7Ci1zdHJ1Y3QgSWRlbnRpZmllckFTQ0lJU3RyaW5n
VHJhbnNsYXRvcjsKIG5hbWVzcGFjZSBMTEludCB7IGNsYXNzIERhdGE7IH0KIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgSWRlbnRpZmll
ckNoYXJCdWZmZXJUcmFuc2xhdG9yOwotc3RydWN0IElkZW50aWZpZXJMQ2hhckZyb21VQ2hhclRy
YW5zbGF0b3I7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMTMyLDEwICsxMjcsNiBAQCBzdHJ1
Y3QgU3RyaW5nU3RhdHMgewogCiBjbGFzcyBTdHJpbmdJbXBsIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTdHJpbmdJbXBsKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJpZW5k
IHN0cnVjdCBKU0M6OklkZW50aWZpZXJBU0NJSVN0cmluZ1RyYW5zbGF0b3I7Ci0gICAgZnJpZW5k
IHN0cnVjdCBKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxMQ2hhcj47Ci0gICAg
ZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxVQ2hhcj47
Ci0gICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJMQ2hhckZyb21VQ2hhclRyYW5zbGF0
b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6OkNTdHJpbmdUcmFuc2xhdG9yOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGZyaWVuZCBzdHJ1Y3QgV1RGOjpIYXNoQW5kQ2hh
cmFjdGVyc1RyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6Okhhc2hBbmRVVEY4Q2hh
cmFjdGVyc1RyYW5zbGF0b3I7CkBAIC0xNjMsNyArMTU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
OiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcpCiAgICAgICAgICwgbV9s
ZW5ndGgoMCkKICAgICAgICAgLCBtX2RhdGE4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigmbV9sZW5ndGgpKQotICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0QnVm
ZmVyIHwgc19oYXNoRmxhZ0lzSWRlbnRpZmllciB8IHNfaGFzaEZsYWdJc0F0b21pYyB8IEJ1ZmZl
ck93bmVkKQorICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwg
c19oYXNoRmxhZ0lzQXRvbWljIHwgQnVmZmVyT3duZWQpCiAgICAgewogICAgICAgICAvLyBFbnN1
cmUgdGhhdCB0aGUgaGFzaCBpcyBjb21wdXRlZCBzbyB0aGF0IEF0b21pY1N0cmluZ0hhc2ggY2Fu
IGNhbGwgZXhpc3RpbmdIYXNoKCkKICAgICAgICAgLy8gd2l0aCBpbXB1bml0eS4gVGhlIGVtcHR5
IHN0cmluZyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgaXMgbmV2ZXIgZW50ZXJlZCBpbnRvCkBAIC00
MDQsNyArMzk1LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHVuc2lnbmVkIGZsYWdzT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmluZ0ltcGwsIG1faGFzaEFuZEZsYWdzKTsg
fQogICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnSXM4Qml0KCkgeyByZXR1cm4gc19oYXNoRmxhZzhC
aXRCdWZmZXI7IH0KLSAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ0lzSWRlbnRpZmllcigpIHsgcmV0
dXJuIHNfaGFzaEZsYWdJc0lkZW50aWZpZXI7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ0lz
SWRlbnRpZmllcigpIHsgcmV0dXJuIHNfaGFzaEZsYWdJc0F0b21pYzsgfQogICAgIHN0YXRpYyB1
bnNpZ25lZCBkYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmluZ0ltcGws
IG1fZGF0YTgpOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CkBAIC00NzIsMTggKzQ2Myw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzMTZCaXRTaGFkb3coKSBjb25zdCB7IHJldHVybiBt
X2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdIYXMxNkJpdFNoYWRvdzsgfQogICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSB2b2lkIHVwY29udmVydENoYXJhY3RlcnModW5zaWduZWQsIHVuc2lnbmVk
KSBjb25zdDsKLSAgICBib29sIGlzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEFu
ZEZsYWdzICYgc19oYXNoRmxhZ0lzSWRlbnRpZmllcjsgfQotICAgIGJvb2wgaXNJZGVudGlmaWVy
T3JVbmlxdWUoKSBjb25zdCB7IHJldHVybiBpc0lkZW50aWZpZXIoKSB8fCBpc0VtcHR5VW5pcXVl
KCk7IH0KLSAgICB2b2lkIHNldElzSWRlbnRpZmllcihib29sIGlzSWRlbnRpZmllcikKLSAgICB7
Ci0gICAgICAgIEFTU0VSVCghaXNTdGF0aWMoKSk7Ci0gICAgICAgIEFTU0VSVCghaXNFbXB0eVVu
aXF1ZSgpKTsKLSAgICAgICAgaWYgKGlzSWRlbnRpZmllcikKLSAgICAgICAgICAgIG1faGFzaEFu
ZEZsYWdzIHw9IHNfaGFzaEZsYWdJc0lkZW50aWZpZXI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1faGFzaEFuZEZsYWdzICY9IH5zX2hhc2hGbGFnSXNJZGVudGlmaWVyOwotICAgIH0KLQor
ICAgIGJvb2wgaXNJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gaXNBdG9taWMoKTsgfQogICAg
IGJvb2wgaXNFbXB0eVVuaXF1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gIWxlbmd0
aCgpICYmICFpc1N0YXRpYygpOwpAQCAtODE0LDcgKzc5NCw2IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWc4Qml0QnVmZmVyID0gMXUgPDwgNTsKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ0lzQXRvbWljID0gMXUgPDwgNDsKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3QgPSAxdSA8PCAzOwot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnSXNJZGVudGlmaWVyID0gMXUgPDwg
MjsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19oYXNoTWFza0J1ZmZlck93bmVyc2hpcCA9
IDF1IHwgKDF1IDw8IDEpOwogCiAjaWZkZWYgU1RSSU5HX1NUQVRTCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ1N0YXRpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nU3RhdGljcy5jcHAJKHJldmlzaW9uIDE2NTk2OCkKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nU3RhdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcg
QEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6ZW1wdHkoKQogLy8gbGVhZCB0byBsb3RzIG9mIGNv
bmZsaWN0cy4KIHVuc2lnbmVkIFN0cmluZ0ltcGw6Omhhc2hBbmRGbGFnc0ZvckVtcHR5VW5pcXVl
KCkKIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgc19uZXh0SGFzaEFuZEZsYWdzRm9yRW1wdHlVbmlx
dWUgPSBCdWZmZXJJbnRlcm5hbCB8IHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgc19oYXNoRmxhZ0lz
SWRlbnRpZmllciB8IHNfaGFzaEZsYWdJc0F0b21pYzsKKyAgICBzdGF0aWMgdW5zaWduZWQgc19u
ZXh0SGFzaEFuZEZsYWdzRm9yRW1wdHlVbmlxdWUgPSBCdWZmZXJJbnRlcm5hbCB8IHNfaGFzaEZs
YWc4Qml0QnVmZmVyIHwgc19oYXNoRmxhZ0lzQXRvbWljOwogICAgIHNfbmV4dEhhc2hBbmRGbGFn
c0ZvckVtcHR5VW5pcXVlICs9IDEgPDwgc19mbGFnQ291bnQ7CiAgICAgc19uZXh0SGFzaEFuZEZs
YWdzRm9yRW1wdHlVbmlxdWUgfD0gMSA8PCAzMTsKICAgICByZXR1cm4gc19uZXh0SGFzaEFuZEZs
YWdzRm9yRW1wdHlVbmlxdWU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dl
YktpdEV4cG9ydEdlbmVyYXRvci9XZWJLaXRFeHBvcnRzLmRlZi5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEV4cG9ydEdlbmVyYXRvci9XZWJLaXRF
eHBvcnRzLmRlZi5pbgkocmV2aXNpb24gMTY1OTY4KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQu
dmN4cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTE3NCw4ICsxNzQsNiBAQCBFWFBPUlRTCiAgICAgICAgIHN5bWJvbFdpdGhQ
b2ludGVyKD9hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdEBSZW5kZXJPYmplY3RAV2ViQ29yZUBAUUJF
P0FWSW50UmVjdEAyQF9OQFosID9hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdEBSZW5kZXJPYmplY3RA
V2ViQ29yZUBAUUVCQT9BVkludFJlY3RAMkBfTkBaKQogICAgICAgICBzeW1ib2xXaXRoUG9pbnRl
cig/YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXNAUmVuZGVyT2JqZWN0
QFdlYkNvcmVAQFFCRT9BVkludFJlY3RAMkBYWiwgP2Fic29sdXRlQm91bmRpbmdCb3hSZWN0SWdu
b3JpbmdUcmFuc2Zvcm1zQFJlbmRlck9iamVjdEBXZWJDb3JlQEBRRUJBP0FWSW50UmVjdEAyQFha
KQogICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/ZGVzY3JpcHRpb25ARG9jdW1lbnRNYXJrZXJA
V2ViQ29yZUBAUUJFQUJWU3RyaW5nQFdURkBAWFosID9kZXNjcmlwdGlvbkBEb2N1bWVudE1hcmtl
ckBXZWJDb3JlQEBRRUJBQUVCVlN0cmluZ0BXVEZAQFhaKQotICAgICAgICBzeW1ib2xXaXRoUG9p
bnRlcig/YWRkQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBs
QFdURkBAQDJAUEJEQFosID9hZGRAQXRvbWljU3RyaW5nQFdURkBAQ0E/QVY/JFBhc3NSZWZQdHJA
VlN0cmluZ0ltcGxAV1RGQEBAMkBQRUJEQFopCi0gICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD9h
ZGRAQXRvbWljU3RyaW5nQFdURkBAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBA
MkBQQkVAWiwgP2FkZEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5n
SW1wbEBXVEZAQEAyQFBFQkVAWikKICAgICAgICAgc3ltYm9sV2l0aFBvaW50ZXIoP2FkZFNsb3dD
YXNlQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBA
QDJAUEFWU3RyaW5nSW1wbEAyQEBaLCA/YWRkU2xvd0Nhc2VAQXRvbWljU3RyaW5nQFdURkBAQ0E/
QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQRUFWU3RyaW5nSW1wbEAyQEBaKQog
ICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/Y2FjaGVET01TdHJ1Y3R1cmVAV2ViQ29yZUBAWUFQ
QVZTdHJ1Y3R1cmVASlNDQEBQQVZKU0RPTUdsb2JhbE9iamVjdEAxQFBBVjIzQFBCVUNsYXNzSW5m
b0AzQEBaLCA/Y2FjaGVET01TdHJ1Y3R1cmVAV2ViQ29yZUBAWUFQRUFWU3RydWN0dXJlQEpTQ0BA
UEVBVkpTRE9NR2xvYmFsT2JqZWN0QDFAUEVBVjIzQFBFQlVDbGFzc0luZm9AM0BAWikKICAgICAg
ICAgc3ltYm9sV2l0aFBvaW50ZXIoP2NoaWxkSXRlbVdpdGhUYXJnZXRASGlzdG9yeUl0ZW1AV2Vi
Q29yZUBAUUJFUEFWMTJAQUJWU3RyaW5nQFdURkBAQFosID9jaGlsZEl0ZW1XaXRoVGFyZ2V0QEhp
c3RvcnlJdGVtQFdlYkNvcmVAQFFFQkFQRUFWMTJAQUVCVlN0cmluZ0BXVEZAQEBaKQpAQCAtNDA2
LDcgKzQwNCw2IEBAIEVYUE9SVFMKICAgICAgICAgc3ltYm9sV2l0aFBvaW50ZXIoPz8xU3R5bGVT
aGVldENvbnRlbnRzQFdlYkNvcmVAQFFBRUBYWiwgPz8xU3R5bGVTaGVldENvbnRlbnRzQFdlYkNv
cmVAQFFFQUFAWFopCiAgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD9wYXVzZUFuaW1hdGlvbkF0
VGltZUBBbmltYXRpb25Db250cm9sbGVyQFdlYkNvcmVAQFFBRV9OUEFWUmVuZGVyRWxlbWVudEAy
QEFCVkF0b21pY1N0cmluZ0BXVEZAQE5AWiwgP3BhdXNlQW5pbWF0aW9uQXRUaW1lQEFuaW1hdGlv
bkNvbnRyb2xsZXJAV2ViQ29yZUBAUUVBQV9OUEVBVlJlbmRlckVsZW1lbnRAMkBBRUJWQXRvbWlj
U3RyaW5nQFdURkBATkBaKQogICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/cGF1c2VUcmFuc2l0
aW9uQXRUaW1lQEFuaW1hdGlvbkNvbnRyb2xsZXJAV2ViQ29yZUBAUUFFX05QQVZSZW5kZXJFbGVt
ZW50QDJAQUJWU3RyaW5nQFdURkBATkBaLCA/cGF1c2VUcmFuc2l0aW9uQXRUaW1lQEFuaW1hdGlv
bkNvbnRyb2xsZXJAV2ViQ29yZUBAUUVBQV9OUEVBVlJlbmRlckVsZW1lbnRAMkBBRUJWU3RyaW5n
QFdURkBATkBaKQotICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/YWRkRnJvbUxpdGVyYWxEYXRh
QEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJA
UEJESUBaLCA/YWRkRnJvbUxpdGVyYWxEYXRhQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQYXNz
UmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAUEVCRElAWikKICAgICAgICAgc3ltYm9sV2l0aFBv
aW50ZXIoP21lbW9yeUNhY2hlQFdlYkNvcmVAQFlBUEFWTWVtb3J5Q2FjaGVAMUBYWiwgP21lbW9y
eUNhY2hlQFdlYkNvcmVAQFlBUEVBVk1lbW9yeUNhY2hlQDFAWFopCiAgICAgICAgIHN5bWJvbFdp
dGhQb2ludGVyKD9yZXNvdXJjZUZvclVSTEBNZW1vcnlDYWNoZUBXZWJDb3JlQEBRQUVQQVZDYWNo
ZWRSZXNvdXJjZUAyQEFCVlVSTEAyQEBaLCA/cmVzb3VyY2VGb3JVUkxATWVtb3J5Q2FjaGVAV2Vi
Q29yZUBAUUVBQVBFQVZDYWNoZWRSZXNvdXJjZUAyQEFFQlZVUkxAMkBAWikKICAgICAgICAgc3lt
Ym9sV2l0aFBvaW50ZXIoP25vbkZhc3RTY3JvbGxhYmxlUmVjdHNAUGFnZUBXZWJDb3JlQEBRQUU/
QVY/JFBhc3NSZWZQdHJAVkNsaWVudFJlY3RMaXN0QFdlYkNvcmVAQEBXVEZAQFBCVkZyYW1lQDJA
QFosID9ub25GYXN0U2Nyb2xsYWJsZVJlY3RzQFBhZ2VAV2ViQ29yZUBAUUVBQT9BVj8kUGFzc1Jl
ZlB0ckBWQ2xpZW50UmVjdExpc3RAV2ViQ29yZUBAQFdURkBAUEVCVkZyYW1lQDJAQFopCg==
</data>
<flag name="review"
          id="251560"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>