<?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>125740</bug_id>
          
          <creation_ts>2013-12-14 12:15:12 -0800</creation_ts>
          <short_desc>Create a DFG SSA backend with global register allocation</short_desc>
          <delta_ts>2015-08-26 22:48:54 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>959856</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-14 12:15:12 -0800</bug_when>
    <thetext>A lot of the speed-up from the FTL is from optimizations implemented on the DFG side.

Maybe we should just lower to machine code directly from DFG IR, but just incrementally improve how we do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959857</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-14 12:25:30 -0800</bug_when>
    <thetext>This is going to be kind of dirty at first, but I think it&apos;ll work.  Here&apos;s what we need:

1) Compute an estimate of the data format and scratch register count for each node.  These really are estimates, for the most part, and we have a lot of room for slop here.  More on that below.

2) Compute the liveness that includes OSR availability.  This is kind of fun because it combines two backwards analyses (DFG liveness and BC liveness), one forward analysis (OSR availability), and some CFA results (canExit).  I&apos;ll refer to this as liveness-including-availability, or LIA.

3) Compute interference and use that to do coloring for both spill slots and registers, globally.  Use a quick-and-dirty coloring algorithm for spills and a smart algorithm for registers.

4) Institute a policy that at the top of each basic block, all live nodes (according to LIA) should be in the register and stored according to the format/register/spill that those nodes report.

5) Code generation proceeds independently for each basic block and runs forward, as now.  If the code generator wants more scratch registers, it may spill nodes.  It may also decide to change the representation of a node.  But it is required to return all nodes to their original formats at the end of the basic block.

(5) is the reason why (1) can be sloppy.  For example we may compute that a node is formatted as DataFormatJS and uses 1 scratch register, but then that node may actually return a DataFormatInt32 and use 2 scratch registers.  Worst case, this causes one local spill (that gets restored by the end of the block) and causes the code generator to have to reformat the node at the end of the block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959861</commentid>
    <comment_count>2</comment_count>
      <attachid>219257</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-14 13:44:58 -0800</bug_when>
    <thetext>Created attachment 219257
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959863</commentid>
    <comment_count>3</comment_count>
      <attachid>219258</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-14 15:08:43 -0800</bug_when>
    <thetext>Created attachment 219258
moar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959917</commentid>
    <comment_count>4</comment_count>
      <attachid>219274</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-14 23:19:39 -0800</bug_when>
    <thetext>Created attachment 219274
implemented the RA

I wrote Chaitin&apos;s algorithm.  It was enjoyable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959947</commentid>
    <comment_count>5</comment_count>
      <attachid>219258</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-12-15 13:45:39 -0800</bug_when>
    <thetext>Comment on attachment 219258
moar

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

&gt; Source/JavaScriptCore/dfg/DFGLocationAllocationPhase.cpp:199
&gt; +    HashMap&lt;Node*, HashSet&lt;Node*&gt;&gt; m_interference;

unused?

&gt; Source/JavaScriptCore/dfg/DFGNode.h:1563
&gt; +        ASSERT(static_cast&lt;unsigned&gt;(m_scratches) == num);

this cast shouldn&apos;t be necessary as both types are unsigned.  If your goal is to avoid undefined behaviour shenanigans your best approach would be to do ASSERT(!(num &amp; ~0xff)), but none of tat should matter as asserts are only on in debug builds so no edge case optimisation should occur.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959948</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-12-15 13:46:13 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=219274) [details]
&gt; implemented the RA
&gt; 
&gt; I wrote Chaitin&apos;s algorithm.  It was enjoyable.

wrong patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959949</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-15 14:13:28 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; Created an attachment (id=219274) [details] [details]
&gt; &gt; implemented the RA
&gt; &gt; 
&gt; &gt; I wrote Chaitin&apos;s algorithm.  It was enjoyable.
&gt; 
&gt; wrong patch?

Yeah.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959950</commentid>
    <comment_count>8</comment_count>
      <attachid>219282</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-15 14:13:53 -0800</bug_when>
    <thetext>Created attachment 219282
for real this time</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959958</commentid>
    <comment_count>9</comment_count>
      <attachid>219285</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-15 18:20:06 -0800</bug_when>
    <thetext>Created attachment 219285
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959979</commentid>
    <comment_count>10</comment_count>
      <attachid>219293</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-15 20:49:36 -0800</bug_when>
    <thetext>Created attachment 219293
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959982</commentid>
    <comment_count>11</comment_count>
      <attachid>219293</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-12-15 21:08:33 -0800</bug_when>
    <thetext>Comment on attachment 219293
more

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

&gt; Source/JavaScriptCore/dfg/DFGAllocationUnit.h:106
&gt; +    uintptr_t m_word;

Can we make this a bitfield rather than manually doing it? Or do you foresee these varying at runtime in future?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959987</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-15 21:27:45 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 219293 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219293&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAllocationUnit.h:106
&gt; &gt; +    uintptr_t m_word;
&gt; 
&gt; Can we make this a bitfield rather than manually doing it? Or do you foresee these varying at runtime in future?

How would this be a bitfield?  How do you envision a bitfield for pointers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960093</commentid>
    <comment_count>13</comment_count>
      <attachid>219293</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-12-16 09:46:45 -0800</bug_when>
    <thetext>Comment on attachment 219293
more

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

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGAllocationUnit.h:106
&gt;&gt;&gt; +    uintptr_t m_word;
&gt;&gt; 
&gt;&gt; Can we make this a bitfield rather than manually doing it? Or do you foresee these varying at runtime in future?
&gt; 
&gt; How would this be a bitfield?  How do you envision a bitfield for pointers?

Sorry, i missed it being purely a pointer - i just saw it being used in shift operations.  My bad</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960400</commentid>
    <comment_count>14</comment_count>
      <attachid>219397</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-16 22:01:14 -0800</bug_when>
    <thetext>Created attachment 219397
less

I think I have a better way of dealing with scratch registers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986177</commentid>
    <comment_count>15</comment_count>
      <attachid>225612</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-02 14:56:15 -0800</bug_when>
    <thetext>Created attachment 225612
more</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219257</attachid>
            <date>2013-12-14 13:44:58 -0800</date>
            <delta_ts>2013-12-14 15:08:43 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30637</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkocmV2
aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3Jt
YXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwxNiBAQCBpbmxpbmUgYm9vbCBpc0pT
Qm9vbGVhbihEYXRhRm9ybWF0IGZvcm1hCiAgICAgcmV0dXJuIGlzSlNGb3JtYXQoZm9ybWF0LCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKIH0KIAoraW5saW5lIGJvb2wgdXNlc0ZQUihEYXRhRm9ybWF0
IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGU7CiB9CiAK
K2lubGluZSBib29sIHVzZXNHUFIoRGF0YUZvcm1hdCBmb3JtYXQpCit7CisgICAgcmV0dXJuICF1
c2VzRlBSKGZvcm1hdCkgJiYgZm9ybWF0ICE9IERhdGFGb3JtYXROb25lOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwogI2VuZGlmIC8vIERhdGFGb3JtYXRfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJp
bGl0eUZvclJlZ2lzdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQXZhaWxh
YmlsaXR5Rm9yUmVnaXN0ZXIgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXI6OmZvcndhcmREZWx0YUZv
ck5kb2UoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJl
Z2lzdGVyKAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
dmFyaWFibGUtPmZsdXNoZWRBdCgpKSwKKyAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpKTsK
KyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBjYXNlIEdldEFyZ3VtZW50OiB7
CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKAorICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSksCisgICAg
ICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgY2FzZSBNb3ZIaW50OgorICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7CisgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKAorICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSksCisgICAgICAgICAgICB2YXJp
YWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgY2Fz
ZSBab21iaWVIaW50OiB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZv
clJlZ2lzdGVyKAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpLAorICAg
ICAgICAgICAgdmFyaWFibGUtPmxvY2FsKCkpOworICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rl
cigpOworICAgIH0KK30KKwordm9pZCBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiciIsIG1fcmVnLm9mZnNldCgp
LCAiOiAiLCBtX2F2YWlsYWJpbGl0eSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdp
c3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdmFpbGFiaWxpdHlGb3JS
ZWdpc3Rlcl9oCisjZGVmaW5lIERGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIg
eworcHVibGljOgorICAgIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKCkgeyB9CisgICAgCisgICAg
QXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKKyAgICAgICAgOiBtX2F2YWlsYWJpbGl0eShhdmFpbGFiaWxpdHkpCisg
ICAgICAgICwgbV9yZWdpc3RlcihyZWcpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2F2YWlsYWJpbGl0eSAmJiAhbV9yZWdpc3Rlci5p
c1ZhbGlkKCk7IH0KKyAgICAKKyAgICBjb25zdCBBdmFpbGFiaWxpdHkmIGF2YWlsYWJpbGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5OyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXI7IH0KKyAgICAKKyAgICAv
LyBSZXR1cm5zIGFuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyIHRoYXQgZGVzY3JpYmVzIHRoZSBh
dmFpbGFiaWxpdHkgZGVsdGEsIHdoZW4KKyAgICAvLyBzY2FubmluZyBmb3J3YXJkLCBmb3IgYSBu
b2RlLgorICAgIHN0YXRpYyBBdmFpbGFiaWxpdHlGb3JSZWdpc3RlciBmb3J3YXJkRGVsdGFGb3JO
b2RlKE5vZGUqKTsKKyAgICAKKyAgICB2b2lkIGFwcGx5RGVsdGEoT3BlcmFuZHM8QXZhaWxhYmls
aXR5PiYgb3BlcmFuZHMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBvcGVyYW5kcy5vcGVyYW5kKHZpcnR1YWxSZWdpc3Rlcigp
KSA9IGF2YWlsYWJpbGl0eSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQXZhaWxhYmlsaXR5IG1fYXZhaWxhYmls
aXR5OworICAgIFZpcnR1YWxSZWdpc3RlciBtX3JlZ2lzdGVyOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0
Nyw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAg
SGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJh
Y3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZh
bHVlPiB2YWx1ZXNBdFRhaWw7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxOb2RlKj4+
IGV4dHJhS2lsbHM7CiAgICAgICAgIAogICAgICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKICAg
ICAgICAgflNTQURhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2
ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE2MDU5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKIGNsYXNzIExpdmVuZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBw
dWJsaWM6Ci0gICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKLSAgICAgICAg
OiBQaGFzZShncmFwaCwgImxpdmVuZXNzIGFuYWx5c2lzIikKKyAgICBMaXZlbmVzc0FuYWx5c2lz
UGhhc2UoR3JhcGgmIGdyYXBoLCBBdmFpbGFiaWxpdHlMaXZlbmVzc01vZGUgYXZhaWxhYmlsaXR5
TW9kZSkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgYXZhaWxhYmlsaXR5TW9kZSA9PSBBdmFpbGFi
aWxpdHlOb3RMaXZlID8gImxpdmVuZXNzIGFuYWx5c2lzIiA6ICJsaXZlbmVzcyBhbmFseXNpcyAo
aW5jbC4gYXZhaWxhYmlsaXR5KSIpCisgICAgICAgICwgbV9hdmFpbGFiaWxpdHlNb2RlKGF2YWls
YWJpbGl0eU1vZGUpCiAgICAgewogICAgIH0KICAgICAKQEAgLTg2LDEwICs4NywzMSBAQCBwcml2
YXRlOgogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
KyAgICAgICAgYmxvY2stPnNzYS0+ZXh0cmFLaWxscy5jbGVhcigpOworICAgICAgICAKICAgICAg
ICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBz
dGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKICAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKICAgICAgICAgbV9saXZlID0gYmxv
Y2stPnNzYS0+bGl2ZUF0VGFpbDsKICAgICAgICAgCisgICAgICAgIGlmIChtX2F2YWlsYWJpbGl0
eU1vZGUgPT0gQXZhaWxhYmlsaXR5SXNMaXZlKSB7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0
eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgICAgIG1fZGVsdGFz
LnJlc2l6ZShibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIgZGVsdGEgPQorICAgICAgICAgICAgICAgICAg
ICBBdmFpbGFiaWxpdHk6OmZvcndhcmREZWx0YUZvck5vZGUobm9kZSk7CisgICAgICAgICAgICAg
ICAgaWYgKCEhZGVsdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5IG9sZEF2
YWlsYWJpbGl0eSA9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVy
YW5kKGRlbHRhLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGEu
YXBwbHlEZWx0YShtX2F2YWlsYWJpbGl0eSk7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhID0g
QXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIob2xkQXZhaWxhYmlsaXR5LCBkZWx0YS52aXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZGVsdGFzW25v
ZGVJbmRleF0gPSBkZWx0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgQVNTRVJUKG1fYXZhaWxhYmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFp
bCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4
ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAKQEAgLTEyNywxMCArMTQ5LDQz
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG1fbGl2
ZS5yZW1vdmUobm9kZSk7CiAgICAgICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4o
bV9ncmFwaCwgbm9kZSwgYWRkQ2hpbGRVc2UpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChtX2F2YWlsYWJpbGl0eU1vZGUgPT0gQXZhaWxhYmlsaXR5SXNMaXZlICYmIG5v
ZGUtPmNhbkV4aXQoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9hdmFpbGFiaWxpdHkuc2l6ZSgpOyAraSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1fYXZhaWxhYmlsaXR5W2ldOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGZsdXNoLmZvcm1hdCgpICE9IERlYWRGbHVzaCAmJiBmbHVz
aC5mb3JtYXQoKSAhPSBDb25mbGljdGluZ0ZsdXNoKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWF2YWlsbGFiaWxpdHkuaGFzTm9kZSgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGF2YWlsYWJpbGl0eS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobV9saXZlLmNvbnRhaW5zKGNoaWxkKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2F2YWlsYWJpbGl0eS5vcGVyYW5k
Rm9ySW5kZXgoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzTGl2ZSA9IG1fZ3Jh
cGguaXNMaXZlSW5CeXRlY29kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCksIG5vZGUtPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc0xpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2
ZS5hZGQoY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgVmVj
dG9yPE5vZGUqPj46OkFkZFJlc3VsdCByZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmV4dHJhS2lsbHMuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoY2hpbGQpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAobV9hdmFpbGFiaWxpdHlNb2RlID09IEF2YWlsYWJpbGl0eUlzTGl2ZSkKKyAgICAgICAgICAg
ICAgICBtX2RlbHRhc1tub2RlSW5kZXhdLmFwcGx5KG1fYXZhaWxhYmlsaXR5KTsKICAgICAgICAg
fQogICAgICAgICAKKyAgICAgICAgaWYgKG1fYXZhaWxhYmlsaXR5TW9kZSA9PSBBdmFpbGFiaWxp
dHlJc0xpdmUpCisgICAgICAgICAgICBBU1NFUlQobV9hdmFpbGFiaWxpdHkgPT0gYmxvY2stPnNz
YS0+YXZhaWxhYmlsaXR5QXRIZWFkKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChtX2xpdmUgPT0g
YmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBA
IC0xNTAsMTQgKzIwNSwxNyBAQCBwcml2YXRlOgogICAgICAgICBlZGdlLnNldEtpbGxTdGF0dXMo
bV9saXZlLmFkZChlZGdlLm5vZGUoKSkuaXNOZXdFbnRyeSA/IERvZXNLaWxsIDogRG9lc05vdEtp
bGwpOwogICAgIH0KICAgICAKKyAgICBBdmFpbGFiaWxpdHlMaXZlbmVzc01vZGUgbV9hdmFpbGFi
aWxpdHlNb2RlOwogICAgIGJvb2wgbV9jaGFuZ2VkOwogICAgIEhhc2hTZXQ8Tm9kZSo+IG1fbGl2
ZTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IG1fYXZhaWxhYmlsaXR5OworICAgIFZlY3Rv
cjxBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcj4gbV9kZWx0YXM7CiB9OwogCi1ib29sIHBlcmZvcm1M
aXZlbmVzc0FuYWx5c2lzKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUxpdmVuZXNzQW5hbHlz
aXMoR3JhcGgmIGdyYXBoLCBBdmFpbGFiaWxpdHlMaXZlbmVzc01vZGUgbW9kZSkKIHsKICAgICBT
YW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIExpdmVuZXNzIEFuYWx5c2lzIFBoYXNl
Iik7Ci0gICAgcmV0dXJuIHJ1blBoYXNlPExpdmVuZXNzQW5hbHlzaXNQaGFzZT4oZ3JhcGgpOwor
ICAgIHJldHVybiBydW5QaGFzZTxMaXZlbmVzc0FuYWx5c2lzUGhhc2U+KGdyYXBoLCBtb2RlKTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAx
NjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogCi0vLyBDb21wdXRlcyBCYXNpY0Jsb2Nr
Ojpzc2EtPmxpdmVBdEhlYWQvbGl2ZUF0VGFpbC4KKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNz
YS0+bGl2ZUF0SGVhZC9saXZlQXRUYWlsLiBNYXkgb3IgbWF5IG5vdCBpbmNsdWRlIHRoaW5ncwor
Ly8gdGhhdCBhcmUgcGFydCBvZiBBdmFpbGFiaWxpdHkuCiAKLWJvb2wgcGVyZm9ybUxpdmVuZXNz
QW5hbHlzaXMoR3JhcGgmKTsKK2VudW0gQXZhaWxhYmlsaXR5TGl2ZW5lc3NNb2RlIHsKKyAgICBB
dmFpbGFiaWxpdHlOb3RMaXZlLCAvLyBVc2VmdWwgaWYgeW91J3JlIGp1c3QgZG9pbmcgcHJ1bmlu
ZyBmb3IgQ0ZBLgorICAgIEF2YWlsYWJpbGl0eUlzTGl2ZSAvLyBVc2VmdWwgaWYgeW91J3JlIGRv
aW5nIHJlZ2lzdGVyIGFsbG9jYXRpb24uCit9OworCitib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5
c2lzKEdyYXBoJiwgQXZhaWxhYmlsaXR5TGl2ZW5lc3NNb2RlID0gQXZhaWxhYmlsaXR5Tm90TGl2
ZSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvY2F0aW9uQWxs
b2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1Njb3JlQm9h
cmQuaCIKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1l
bnQuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgTG9jYXRpb25BbGxvY2F0aW9uUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHVibGljOgorICAgIExvY2F0aW9uQWxsb2NhdGlvblBoYXNlKEdyYXBoJiBncmFw
aCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImxvY2F0aW9uIGFsbG9jYXRpb24iKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBEZXJpdmUgdGhlIHJlc3Vs
dCBmb3JtYXQgZm9yIGVhY2ggbm9kZSBhbmQgdGhlIG51bWJlciBvZiBzY3JhdGNoIHJlZ2lzdGVy
cyBpdAorICAgICAgICAvLyBpcyBleHBlY3RlZCB0byB1c2UuCisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtTG9jYXRpb25BbGxvY2F0aW9uKEdyYXBoJiBn
cmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIExvY2F0aW9u
IEFsbG9jYXRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8TG9jYXRpb25BbGxvY2F0
aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZV9o
CisjZGVmaW5lIERGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdQaGFzZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisv
LyBUaGlzIGFsbG9jYXRlcyBib3RoIHJlZ2lzdGVycyBhbmQgc3BpbGwgc2xvdHMuCisKK2Jvb2wg
cGVyZm9ybUxvY2F0aW9uQWxsb2NhdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xvY2F0
aW9uQWxsb2NhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE2MDU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNiArMTY3LDExIEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkKICAgICAgICAgLCBt
X3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICAgICAs
IG1fb3BJbmZvKDApCisgICAgICAgICwgbV9vcEluZm8yKDApCisgICAgICAgICwgbV9yZWdpc3Rl
cihzdGF0aWNfY2FzdDx1aW50OF90PihJbnZhbGlkR1BSUmVnKSkKKyAgICAgICAgLCBtX2RhdGFG
b3JtYXQoRGF0YUZvcm1hdE5vbmUpCisgICAgICAgICwgbV9zY3JhdGNoZXMoMCkKICAgICB7CiAg
ICAgICAgIG1pc2MucmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFn
cyhvcCk7CkBAIC0xODAsNiArMTg1LDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3Zp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkKICAgICAgICAgLCBtX3JlZkNvdW50KDEp
CiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICAgICAsIG1fb3BJbmZvKDAp
CisgICAgICAgICwgbV9vcEluZm8yKDApCisgICAgICAgICwgbV9yZWdpc3RlcihzdGF0aWNfY2Fz
dDx1aW50OF90PihJbnZhbGlkR1BSUmVnKSkKKyAgICAgICAgLCBtX2RhdGFGb3JtYXQoRGF0YUZv
cm1hdE5vbmUpCisgICAgICAgICwgbV9zY3JhdGNoZXMoMCkKICAgICB7CiAgICAgICAgIG1pc2Mu
cmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CkBAIC0x
OTUsNiArMjA1LDEwIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAg
ICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICAgICAsIG1fb3BJbmZvKGltbS5t
X3ZhbHVlKQorICAgICAgICAsIG1fb3BJbmZvMigwKQorICAgICAgICAsIG1fcmVnaXN0ZXIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oSW52YWxpZEdQUlJlZykpCisgICAgICAgICwgbV9kYXRhRm9ybWF0
KERhdGFGb3JtYXROb25lKQorICAgICAgICAsIG1fc2NyYXRjaGVzKDApCiAgICAgewogICAgICAg
ICBtaXNjLnJlcGxhY2VtZW50ID0gMDsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3Ap
OwpAQCAtMjExLDYgKzIyNSw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3ByZWRpY3Rp
b24oU3BlY05vbmUpCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQogICAgICAgICAs
IG1fb3BJbmZvMihpbW0yLm1fdmFsdWUpCisgICAgICAgICwgbV9yZWdpc3RlcihzdGF0aWNfY2Fz
dDx1aW50OF90PihJbnZhbGlkR1BSUmVnKSkKKyAgICAgICAgLCBtX2RhdGFGb3JtYXQoRGF0YUZv
cm1hdE5vbmUpCisgICAgICAgICwgbV9zY3JhdGNoZXMoMCkKICAgICB7CiAgICAgICAgIG1pc2Mu
cmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CkBAIC0y
MjcsNiArMjQ0LDkgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVj
Tm9uZSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCiAgICAgICAgICwgbV9vcElu
Zm8yKGltbTIubV92YWx1ZSkKKyAgICAgICAgLCBtX3JlZ2lzdGVyKHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KEludmFsaWRHUFJSZWcpKQorICAgICAgICAsIG1fZGF0YUZvcm1hdChEYXRhRm9ybWF0Tm9u
ZSkKKyAgICAgICAgLCBtX3NjcmF0Y2hlcygwKQogICAgIHsKICAgICAgICAgbWlzYy5yZXBsYWNl
bWVudCA9IDA7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTE1MDEsNiAr
MTUyMSw1OSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBub2RlQ2FuU3BlY3VsYXRl
SW50NTIoYXJpdGhOb2RlRmxhZ3MoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0Rm9ybWF0
KERhdGFGb3JtYXQgZGF0YUZvcm1hdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDx1aW50OF90PihJbnZhbGlkR1BSUmVnKSA9PSBzdGF0aWNfY2FzdDx1aW50OF90PihJbnZhbGlk
RlBSUmVnKSk7CisgICAgICAgIG1fZm9ybWF0ID0gZGF0YUZvcm1hdDsKKyAgICAgICAgbV9yZWdp
c3RlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEludmFsaWRHUFJSZWcpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNldFJlZ2lzdGVyKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBBU1NFUlQo
IXVzZXNGUFIoZGF0YUZvcm1hdCgpKSk7CisgICAgICAgIG1fcmVnaXN0ZXIgPSBzdGF0aWNfY2Fz
dDx1aW50OF90PihncHIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlZ2lzdGVyKEZQUlJl
ZyBmcHIpCisgICAgeworICAgICAgICBBU1NFUlQodXNlc0ZQUihkYXRhRm9ybWF0KCkpKTsKKyAg
ICAgICAgbV9yZWdpc3RlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZwcik7CisgICAgfQorICAg
IAorICAgIHZvaWQgc2V0UmVnaXN0ZXIoRGF0YUZvcm1hdCBkYXRhRm9ybWF0LCBHUFJSZWcgZ3By
KQorICAgIHsKKyAgICAgICAgc2V0Rm9ybWF0KGRhdGFGb3JtYXQpOworICAgICAgICBzZXRSZWdp
c3RlcihncHIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlZ2lzdGVyKERhdGFGb3JtYXQg
ZGF0YUZvcm1hdCwgRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIHNldEZvcm1hdChkYXRhRm9y
bWF0KTsKKyAgICAgICAgc2V0UmVnaXN0ZXIoZnByKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
ZXROdW1TY3JhdGNoZXModW5zaWduZWQgbnVtKQorICAgIHsKKyAgICAgICAgbV9zY3JhdGNoZXMg
PSBudW07CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zY3JhdGNoZXMp
ID09IG51bSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bVNjcmF0Y2hlcygpIGNvbnN0
IHsgcmV0dXJuIG1fc2NyYXRjaGVzOyB9CisgICAgCisgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YUZvcm1hdD4obV9mb3JtYXQpOyB9Cisg
ICAgCisgICAgR1BSUmVnIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIXVzZXNG
UFIoZGF0YUZvcm1hdCgpKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1f
cmVnaXN0ZXIpOworICAgIH0KKyAgICAKKyAgICBHUFJSZWcgZnByKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCh1c2VzRlBSKGRhdGFGb3JtYXQoKSkpOworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RlBSUmVnPihtX3JlZ2lzdGVyKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBkdW1w
Q2hpbGRyZW4oUHJpbnRTdHJlYW0mIG91dCkKICAgICB7CiAgICAgICAgIGlmICghY2hpbGQxKCkp
CkBAIC0xNTM3LDYgKzE2MTAsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBiaWcgZW5vdWdoIHRvIHN0
b3JlIGEgcG9pbnRlci4KICAgICB1aW50cHRyX3QgbV9vcEluZm87CiAgICAgdWludHB0cl90IG1f
b3BJbmZvMjsKKyAgICAKKyAgICAvLyBVc2VkIGZvciBTU0EgcmVnaXN0ZXIgYWxsb2NhdGlvbi4K
KyAgICB1aW50OF90IG1fcmVnaXN0ZXI7CisgICAgdWludDhfdCBtX2RhdGFGb3JtYXQ7CisgICAg
dWludDhfdCBtX3NjcmF0Y2hlczsKIAogcHVibGljOgogICAgIC8vIEZpZWxkcyB1c2VkIGJ5IHZh
cmlvdXMgYW5hbHlzZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9u
IDE2MDU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDM5ICs4Nyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewotICAgICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJp
bGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCksIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF2
YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZh
aWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXI6OmZvcndhcmREZWx0YUZvck5vZGUobm9k
ZSkuYXBwbHlEZWx0YShhdmFpbGFiaWxpdHkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5ID09IGJsb2NrLT5zc2Et
PmF2YWlsYWJpbGl0eUF0VGFpbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNl
LmgJKHJldmlzaW9uIDE2MDU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsMTMgQEAgYm9vbCBydW5QaGFzZShHcmFw
aCYgZ3JhcGgpCiAgICAgcmV0dXJuIHJ1bkFuZExvZyhwaGFzZSk7CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIFBoYXNlVHlwZSwgdGVtcGxhdGUgQXJnMVR5cGU+Citib29sIHJ1blBoYXNlKEdyYXBo
JiBncmFwaCwgY29uc3QgQXJnMVR5cGUmIGFyZzEpCit7CisgICAgUGhhc2VUeXBlIHBoYXNlKGdy
YXBoLCBhcmcxKTsKKyAgICByZXR1cm4gcnVuQW5kTG9nKHBoYXNlKTsKK30KKwogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VsdEFu
ZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1Jl
c3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHU2NvcmVCb2FyZC5oIgorI2lu
Y2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZSA6IHB1YmxpYyBQ
aGFzZSB7CitwdWJsaWM6CisgICAgUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2UoR3Jh
cGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAicmVzdWx0LWFuZC1zY3JhdGNoIGNh
bGN1bGF0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAg
Ly8gRGVyaXZlIHRoZSByZXN1bHQgZm9ybWF0IGZvciBlYWNoIG5vZGUgYW5kIHRoZSBudW1iZXIg
b2Ygc2NyYXRjaCByZWdpc3RlcnMgaXQKKyAgICAgICAgLy8gaXMgZXhwZWN0ZWQgdG8gdXNlLgor
ICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBt
X25vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBoYW5kbGVOb2Rl
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBoYW5kbGVOb2RlKCkKKyAgICB7CisgICAgICAgIAor
ICAgIH0KKyAgICAKKyAgICBOb2RlKiBtX25vZGU7Cit9OworCitib29sIHBlcmZvcm1SZXN1bHRB
bmRTY3JhdGNoQ2FsY3VsYXRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgUmVzdWx0LWFuZC1zY3JhdGNoIENhbGN1bGF0aW9uIFBoYXNl
Iik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFJlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNl
PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1bHRB
bmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2UuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRjaENh
bGN1bGF0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUmVzdWx0
QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2VfaAorI2RlZmluZSBERkdSZXN1bHRBbmRTY3JhdGNo
Q2FsY3VsYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gRmlndXJlcyBvdXQgd2hhdCB0
aGUgcmVzdWx0IHR5cGUgYW5kIG51bWJlciBvZiBzY3JhdGNoIHJlZ2lzdGVycyBpcyBmb3IgZWFj
aAorLy8gbm9kZS4KKworYm9vbCBwZXJmb3JtUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uKEdy
YXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2Vf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY4OSw2ICs2ODksMTEgQEAgcHVibGlj
OgogICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFVJTlRfTUFYOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBJZiBp
biBTU0EsIGNoZWNrIHRoYXQgdGhpcyBub2RlIGlzbid0IGxpdmUgYXQgdGhlIHRhaWwgb2YgdGhl
IGJsb2NrLgorICAgICAgICBpZiAobV9qaXQuZ3JhcGgoKS5tX2Zvcm0gPT0gU1NBCisgICAgICAg
ICAgICAmJiBtX2Jsb2NrLT5zc2EtPmxpdmVBdFRhaWwuZmluZChtX2N1cnJlbnROb2RlKSAhPSBt
X2Jsb2NrLT5zc2EtPmxpdmVBdFRhaWwuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gVUlOVF9N
QVg7CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxhc3ROb2RlIGlzIGEgYnJhbmNoIG9uIHRo
aXMgbm9kZS4KICAgICAgICAgTm9kZSogbGFzdE5vZGUgPSBtX2Jsb2NrLT5sYXN0KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgcnVuKCkKICAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRl
ZENQUyk7CisgICAgICAgIAogICAgICAgICBTY29yZUJvYXJkIHNjb3JlQm9hcmQobV9ncmFwaC5t
X25leHRNYWNoaW5lTG9jYWwpOwogICAgICAgICBzY29yZUJvYXJkLmFzc2VydENsZWFyKCk7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5u
dW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219258</attachid>
            <date>2013-12-14 15:08:43 -0800</date>
            <delta_ts>2013-12-15 13:45:39 -0800</delta_ts>
            <desc>moar</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38924</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkocmV2
aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3Jt
YXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwxNiBAQCBpbmxpbmUgYm9vbCBpc0pT
Qm9vbGVhbihEYXRhRm9ybWF0IGZvcm1hCiAgICAgcmV0dXJuIGlzSlNGb3JtYXQoZm9ybWF0LCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKIH0KIAoraW5saW5lIGJvb2wgdXNlc0ZQUihEYXRhRm9ybWF0
IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGU7CiB9CiAK
K2lubGluZSBib29sIHVzZXNHUFIoRGF0YUZvcm1hdCBmb3JtYXQpCit7CisgICAgcmV0dXJuICF1
c2VzRlBSKGZvcm1hdCkgJiYgZm9ybWF0ICE9IERhdGFGb3JtYXROb25lOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwogI2VuZGlmIC8vIERhdGFGb3JtYXRfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJp
bGl0eUZvclJlZ2lzdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQXZhaWxh
YmlsaXR5Rm9yUmVnaXN0ZXIgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXI6OmZvcndhcmREZWx0YUZv
ck5kb2UoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJl
Z2lzdGVyKAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
dmFyaWFibGUtPmZsdXNoZWRBdCgpKSwKKyAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpKTsK
KyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBjYXNlIEdldEFyZ3VtZW50OiB7
CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKAorICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSksCisgICAg
ICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgY2FzZSBNb3ZIaW50OgorICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7CisgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKAorICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSksCisgICAgICAgICAgICB2YXJp
YWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgY2Fz
ZSBab21iaWVIaW50OiB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZv
clJlZ2lzdGVyKAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpLAorICAg
ICAgICAgICAgdmFyaWFibGUtPmxvY2FsKCkpOworICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rl
cigpOworICAgIH0KK30KKwordm9pZCBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiciIsIG1fcmVnLm9mZnNldCgp
LCAiOiAiLCBtX2F2YWlsYWJpbGl0eSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdp
c3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdmFpbGFiaWxpdHlGb3JS
ZWdpc3Rlcl9oCisjZGVmaW5lIERGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIg
eworcHVibGljOgorICAgIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKCkgeyB9CisgICAgCisgICAg
QXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKKyAgICAgICAgOiBtX2F2YWlsYWJpbGl0eShhdmFpbGFiaWxpdHkpCisg
ICAgICAgICwgbV9yZWdpc3RlcihyZWcpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2F2YWlsYWJpbGl0eSAmJiAhbV9yZWdpc3Rlci5p
c1ZhbGlkKCk7IH0KKyAgICAKKyAgICBjb25zdCBBdmFpbGFiaWxpdHkmIGF2YWlsYWJpbGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5OyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXI7IH0KKyAgICAKKyAgICAv
LyBSZXR1cm5zIGFuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyIHRoYXQgZGVzY3JpYmVzIHRoZSBh
dmFpbGFiaWxpdHkgZGVsdGEsIHdoZW4KKyAgICAvLyBzY2FubmluZyBmb3J3YXJkLCBmb3IgYSBu
b2RlLgorICAgIHN0YXRpYyBBdmFpbGFiaWxpdHlGb3JSZWdpc3RlciBmb3J3YXJkRGVsdGFGb3JO
b2RlKE5vZGUqKTsKKyAgICAKKyAgICB2b2lkIGFwcGx5RGVsdGEoT3BlcmFuZHM8QXZhaWxhYmls
aXR5PiYgb3BlcmFuZHMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBvcGVyYW5kcy5vcGVyYW5kKHZpcnR1YWxSZWdpc3Rlcigp
KSA9IGF2YWlsYWJpbGl0eSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQXZhaWxhYmlsaXR5IG1fYXZhaWxhYmls
aXR5OworICAgIFZpcnR1YWxSZWdpc3RlciBtX3JlZ2lzdGVyOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0
Nyw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAg
SGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJh
Y3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZh
bHVlPiB2YWx1ZXNBdFRhaWw7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxOb2RlKj4+
IGV4dHJhS2lsbHM7CiAgICAgICAgIAogICAgICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKICAg
ICAgICAgflNTQURhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2
ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE2MDU5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKIGNsYXNzIExpdmVuZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBw
dWJsaWM6Ci0gICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKLSAgICAgICAg
OiBQaGFzZShncmFwaCwgImxpdmVuZXNzIGFuYWx5c2lzIikKKyAgICBMaXZlbmVzc0FuYWx5c2lz
UGhhc2UoR3JhcGgmIGdyYXBoLCBBdmFpbGFiaWxpdHlMaXZlbmVzc01vZGUgYXZhaWxhYmlsaXR5
TW9kZSkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgYXZhaWxhYmlsaXR5TW9kZSA9PSBBdmFpbGFi
aWxpdHlOb3RMaXZlID8gImxpdmVuZXNzIGFuYWx5c2lzIiA6ICJsaXZlbmVzcyBhbmFseXNpcyAo
aW5jbC4gYXZhaWxhYmlsaXR5KSIpCisgICAgICAgICwgbV9hdmFpbGFiaWxpdHlNb2RlKGF2YWls
YWJpbGl0eU1vZGUpCiAgICAgewogICAgIH0KICAgICAKQEAgLTg2LDUxICs4NywxMDggQEAgcHJp
dmF0ZToKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
CisgICAgICAgIGJsb2NrLT5zc2EtPmV4dHJhS2lsbHMuY2xlYXIoKTsKKyAgICAgICAgCiAgICAg
ICAgIC8vIEZJWE1FOiBJdCdzIGxpa2VseSB0aGF0IHRoaXMgY2FuIGJlIGltcHJvdmVkLCBmb3Ig
c3RhdGljIGFuYWx5c2VzIHRoYXQgdXNlCiAgICAgICAgIC8vIEhhc2hTZXRzLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDU1CiAgICAgICAgIG1fbGl2ZSA9IGJs
b2NrLT5zc2EtPmxpdmVBdFRhaWw7CiAgICAgICAgIAorICAgICAgICBpZiAobV9hdmFpbGFiaWxp
dHlNb2RlID09IEF2YWlsYWJpbGl0eUlzTGl2ZSkgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxp
dHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgICAgICBtX2RlbHRh
cy5yZXNpemUoYmxvY2stPnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAg
ICAgICAgIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyIGRlbHRhID0KKyAgICAgICAgICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5Ojpmb3J3YXJkRGVsdGFGb3JOb2RlKG5vZGUpOworICAgICAgICAgICAg
ICAgIGlmICghIWRlbHRhKSB7CisgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBvbGRB
dmFpbGFiaWxpdHkgPQorICAgICAgICAgICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkub3Bl
cmFuZChkZWx0YS52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIGRlbHRh
LmFwcGx5RGVsdGEobV9hdmFpbGFiaWxpdHkpOworICAgICAgICAgICAgICAgICAgICBkZWx0YSA9
IEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKG9sZEF2YWlsYWJpbGl0eSwgZGVsdGEudmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2RlbHRhc1tu
b2RlSW5kZXhdID0gZGVsdGE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEFTU0VSVChtX2F2YWlsYWJpbGl0eSA9PSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRh
aWwpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewogICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdl
bmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBHaXZlbiBhbiBVcHNpbG9uOgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgbjogVXBzaWxvbihAeCwgXnApCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYn
cyBAcCBhbmQgQG4gYW5kIHVzZXMgQHguCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAvLyBHaXZlbiBhIFBoaToKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
IC8vICAgIHA6IFBoaSgpCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBX
ZSBzYXkgbm90aGluZy4gSXQncyBuZWl0aGVyIGEgdXNlIG5vciBhIGRlZi4KKyAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgIC8vIEdpdmVuIGEgbm9kZToKKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQG4g
YW5kIHVzZXMgQGEsIEBiLCBAYy4KICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2l2ZW4g
YW4gVXBzaWxvbjoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBuOiBVcHNpbG9u
KEB4LCBecCkKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBk
ZWYncyBAcCBhbmQgQG4gYW5kIHVzZXMgQHguCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAg
Ly8gR2l2ZW4gYSBQaGk6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gICAgcDogUGhp
KCkKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXZSBzYXkgbm90aGluZy4gSXQncyBu
ZWl0aGVyIGEgdXNlIG5vciBhIGRlZi4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBH
aXZlbiBhIG5vZGU6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gICAgbjogVGhpbmd5
KEBhLCBAYiwgQGMpCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQg
aXQgZGVmJ3MgQG4gYW5kIHVzZXMgQGEsIEBiLCBAYy4KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFVwc2lsb246IHsKLSAg
ICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBub2RlLT5waGkoKTsKLSAgICAgICAgICAgICAgICBt
X2xpdmUucmVtb3ZlKHBoaSk7Ci0gICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsK
LSAgICAgICAgICAgICAgICBtX2xpdmUuYWRkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBVcHNpbG9uOiB7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHBoaSA9IG5vZGUtPnBoaSgpOworICAgICAgICAgICAgICAgICAg
ICBtX2xpdmUucmVtb3ZlKHBoaSk7CisgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUo
bm9kZSk7CisgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5hZGQobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQaGk6IHsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFBoaTogeworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJl
bW92ZShub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4o
bV9ncmFwaCwgbm9kZSwgYWRkQ2hpbGRVc2UpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOwotICAgICAg
ICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZENoaWxk
VXNlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1f
YXZhaWxhYmlsaXR5TW9kZSA9PSBBdmFpbGFiaWxpdHlJc0xpdmUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNhbkV4aXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXZhaWxhYmlsaXR5LnNpemUoKTsgK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9hdmFp
bGFiaWxpdHlbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsdXNoLmZvcm1h
dCgpICE9IERlYWRGbHVzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBmbHVz
aC5mb3JtYXQoKSAhPSBDb25mbGljdGluZ0ZsdXNoKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghYXZhaWxsYWJpbGl0eS5oYXNOb2RlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBhdmFpbGFiaWxpdHku
bm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2xpdmUuY29udGFpbnMo
Y2hpbGQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcGVy
YW5kID0gbV9hdmFpbGFiaWxpdHkub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaXNMaXZlID0gbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIG5v
ZGUtPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNMaXZl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5hZGQoY2hp
bGQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxO
b2RlKj4+OjpBZGRSZXN1bHQgcmVzdWx0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmxvY2stPnNzYS0+ZXh0cmFLaWxscy5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoY2hpbGQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fYXZhaWxhYmlsaXR5TW9kZSA9
PSBBdmFpbGFiaWxpdHlJc0xpdmUpCisgICAgICAgICAgICAgICAgbV9kZWx0YXNbbm9kZUluZGV4
XS5hcHBseShtX2F2YWlsYWJpbGl0eSk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGlm
IChtX2F2YWlsYWJpbGl0eU1vZGUgPT0gQXZhaWxhYmlsaXR5SXNMaXZlKQorICAgICAgICAgICAg
QVNTRVJUKG1fYXZhaWxhYmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZCk7
CisgICAgICAgIAogICAgICAgICBpZiAobV9saXZlID09IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIApAQCAtMTUwLDE0ICsyMDgsMTcgQEAgcHJp
dmF0ZToKICAgICAgICAgZWRnZS5zZXRLaWxsU3RhdHVzKG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkp
LmlzTmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsKTsKICAgICB9CiAgICAgCisgICAg
QXZhaWxhYmlsaXR5TGl2ZW5lc3NNb2RlIG1fYXZhaWxhYmlsaXR5TW9kZTsKICAgICBib29sIG1f
Y2hhbmdlZDsKICAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7CisgICAgT3BlcmFuZHM8QXZhaWxh
YmlsaXR5PiBtX2F2YWlsYWJpbGl0eTsKKyAgICBWZWN0b3I8QXZhaWxhYmlsaXR5Rm9yUmVnaXN0
ZXI+IG1fZGVsdGFzOwogfTsKIAotYm9vbCBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYg
Z3JhcGgpCitib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiBncmFwaCwgQXZhaWxh
YmlsaXR5TGl2ZW5lc3NNb2RlIG1vZGUpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdS
ZWdpb24oIkRGRyBMaXZlbmVzcyBBbmFseXNpcyBQaGFzZSIpOwotICAgIHJldHVybiBydW5QaGFz
ZTxMaXZlbmVzc0FuYWx5c2lzUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8TGl2
ZW5lc3NBbmFseXNpc1BoYXNlPihncmFwaCwgbW9kZSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsOSArMzYsMTUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFz
cyBHcmFwaDsKIAotLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5saXZlQXRIZWFkL2xpdmVB
dFRhaWwuCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmxpdmVBdEhlYWQvbGl2ZUF0VGFp
bC4gTWF5IG9yIG1heSBub3QgaW5jbHVkZSB0aGluZ3MKKy8vIHRoYXQgYXJlIHBhcnQgb2YgQXZh
aWxhYmlsaXR5LgogCi1ib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJik7CitlbnVt
IEF2YWlsYWJpbGl0eUxpdmVuZXNzTW9kZSB7CisgICAgQXZhaWxhYmlsaXR5Tm90TGl2ZSwgLy8g
VXNlZnVsIGlmIHlvdSdyZSBqdXN0IGRvaW5nIHBydW5pbmcgZm9yIENGQS4KKyAgICBBdmFpbGFi
aWxpdHlJc0xpdmUgLy8gVXNlZnVsIGlmIHlvdSdyZSBkb2luZyByZWdpc3RlciBhbGxvY2F0aW9u
LgorfTsKKworYm9vbCBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYsIEF2YWlsYWJpbGl0
eUxpdmVuZXNzTW9kZSA9IEF2YWlsYWJpbGl0eU5vdExpdmUpOwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9jYXRpb25B
bGxvY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTG9jYXRpb25BbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0xvY2F0
aW9uQWxsb2NhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHU2NvcmVCb2FyZC5oIgorI2luY2x1ZGUgIkpTQ2Vs
bElubGluZXMuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdGF0
aWMgdW5zaWduZWQgaW50ZXJmZXJlbmNlRGVncmVlKE5vZGUqIGEpCit7CisgICAgaWYgKGEtPm1p
c2MuaW50ZXJmZXJlbmNlKQorICAgICAgICByZXR1cm4gYS0+bWlzYy5pbnRlcmZlcmVuY2UtPnNp
emUoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgaW50ZXJmZXJlbmNlRGVncmVl
TGVzc1RoYW4oTm9kZSogYSwgTm9kZSogYikKK3sKKyAgICByZXR1cm4gaW50ZXJmZXJlbmNlRGVn
cmVlKGEpIDwgaW50ZXJmZXJlbmNlRGVncmVlKGIpOworfQorCitjbGFzcyBMb2NhdGlvbkFsbG9j
YXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgTG9jYXRpb25BbGxvY2F0
aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAibG9jYXRpb24g
YWxsb2NhdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAg
IC8vIENsZWFycyBtaXNjLmludGVyZmVyZW5jZSBiZWNhdXNlIGl0IG92ZXJsYXBzIG1pc2MucmVw
bGFjZW1lbnQuCisgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKKyAgICAgICAg
CisgICAgICAgIC8vIENvbXB1dGUgaW50ZXJmZXJlbmNlLgorICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmUgPSBibG9jay0+c3NhLT5s
aXZlQXRIZWFkOworICAgICAgICAgICAgYm9vbCBkaWRDaGFuZ2UgPSB0cnVlOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIGlmIChkaWRDaGFuZ2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaW50ZXJmZXJlKGxpdmUpOworICAgICAgICAgICAgICAgICAgICBkaWRD
aGFuZ2UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgaS0tOykgeworICAgICAgICAgICAgICAg
ICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoZWRnZS5kb2VzS2lsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXZl
LnJlbW92ZShlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2Ug
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxOb2RlKj4+
IGl0ZXIgPSBibG9jay0+c3NhLT5leHRyYUtpbGxzLmZpbmQobm9kZSk7CisgICAgICAgICAgICAg
ICAgaWYgKGl0ZXIgIT0gYmxvY2stPnNzYS0+ZXh0cmFLaWxscy5zaXplKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiYga2lsbHMgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0ga2lsbHMuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsaXZlLnJlbW92ZShraWxsc1tpXSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkaWRDaGFuZ2UgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5hZGp1c3RlZFJlZkNvdW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbGl2ZS5hZGQobm9k
ZSk7CisgICAgICAgICAgICAgICAgICAgIGRpZENoYW5nZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpZENoYW5nZSkKKyAgICAgICAg
ICAgICAgICBpbnRlcmZlcmUobGl2ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEZpcnN0IHVzZSBXZWxzaC1Qb3dlbGwgdG8gcGljayBzcGlsbCBzbG90cywgaS5lLiB2aXJ0dWFs
IHJlZ2lzdGVycy4gRXZlcnkgbm9kZSB0aGF0CisgICAgICAgIC8vIHByb2R1Y2VzIGEgcmVzdWx0
IG11c3QgaGF2ZSBhIHZpcnR1YWwgcmVnaXN0ZXIuCisgICAgICAgIFZlY3RvcjxOb2RlKj4gbm9k
ZXNJbkludGVyZmVyZW5jZU9yZGVyOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+aGFzUmVzdWx0KCkpCisgICAgICAgICAgICAgICAgICAgIG5vZGVz
SW5JbnRlcmZlcmVuY2VPcmRlci5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG5vZGVzSW5JbnRl
cmZlcmVuY2VPcmRlci5iZWdpbigpLCBub2Rlc0luSW50ZXJmZXJlbmNlT3JkZXIuZW5kKCksCisg
ICAgICAgICAgICBpbnRlcmZlcmVuY2VEZWdyZWVMZXNzVGhhbik7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBub2Rlc0luSW50ZXJmZXJlbmNlT3JkZXIuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICBOb2RlKiBmaXJzdE5vZGUgPSBub2Rlc0luSW50ZXJmZXJlbmNlT3Jk
ZXJbaV07CisgICAgICAgICAgICBpZiAoZmlyc3ROb2RlLT5oYXNWaXJ0dWFsUmVnaXN0ZXIoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPQorICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKyspOworICAgICAgICAgICAgZmlyc3ROb2RlLT5z
ZXRWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IGk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBzZWNvbmROb2RlID0g
bm9kZXNJbkludGVyZmVyZW5jZU9yZGVyW2pdOworICAgICAgICAgICAgICAgIGlmIChzZWNvbmRO
b2RlLT5oYXNWaXJ0dWFsUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgYm9vbCBpbnRlcmZlcmVzID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgaWYgKEhhc2hTZXQ8Tm9kZSo+KiBlZGdlcyA9IHNlY29uZE5vZGUtPm1pc2MuaW50ZXJmZXJl
bmNlKSB7CisgICAgICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVy
ID0gZWRnZXMtPmJlZ2luKCk7CisgICAgICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+Ojpp
dGVyYXRvciBlbmQgPSBlZGdlcy0+ZW5kKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoOyBp
dGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBvdGhl
ck5vZGUgPSAqaXRlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPnVz
ZXNWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVyZmVyZXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpbnRlcmZlcmVzKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzZWNvbmROb2RlLT5z
ZXRWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVXNlIENoYWl0aW4ncyBhbGdvcml0aG0gZm9yIHJl
Z2lzdGVycy4KKyAgICAgICAgRklYTUU7CisgICAgICAgIAorICAgICAgICAvLyBGaW5hbGx5IGRl
bGV0ZSBhbGwgaW50ZXJmZXJlbmNlIHNldHMuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIGlmICghbm9kZS0+bWlzYy5pbnRlcmZlcmVuY2UpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGRlbGV0ZSBub2RlLT5taXNjLmludGVy
ZmVyZW5jZTsKKyAgICAgICAgICAgICAgICBub2RlLT5taXNjLmludGVyZmVyZW5jZSA9IDA7IC8v
IFRoaXMgb3VnaHQgbm90IGJlIHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGl0IHByZXNlcnZlcyBz
b21lIGtpbmQgb2Ygc2FuaXR5LgorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgaW50ZXJmZXJlKEhhc2hT
ZXQ8Tm9kZSo+JiBsaXZlKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9y
IGl0ZXIgPSBsaXZlLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBl
bmQgPSBsaXZlLmVuZCgpOworICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICAgICAgSGFzaFNldDxOb2Rl
Kj4qIGVkZ2VzID0gbm9kZS0+bWlzYy5pbnRlcmZlcmVuY2U7CisgICAgICAgICAgICBpZiAoIWVk
Z2VzKQorICAgICAgICAgICAgICAgIG5vZGUtPm1pc2MuaW50ZXJmZXJlbmNlID0gZWRnZXMgPSBu
ZXcgSGFzaFNldDxOb2RlKj4oKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRv
ciBpdGVyMiA9IGxpdmUuYmVnaW4oKTsKKyAgICAgICAgICAgIGZvciAoOyBpdGVyMiAhPSBlbmQ7
ICsraXRlcjIpCisgICAgICAgICAgICAgICAgZWRnZXMtPmFkZCgqaXRlcjIpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGJvb2wgaW50ZXJmZXJlcyhOb2RlKiBhLCBOb2RlKiBiKQorICAg
IHsKKyAgICAgICAgaWYgKCFhLT5taXNjLmludGVyZmVyZW5jZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGEtPm1pc2MuaW50ZXJmZXJlbmNlLT5jb250YWlucyhi
KTsKKyAgICB9CisgICAgCisgICAgSGFzaE1hcDxOb2RlKiwgSGFzaFNldDxOb2RlKj4+IG1faW50
ZXJmZXJlbmNlOworfTsKKworYm9vbCBwZXJmb3JtTG9jYXRpb25BbGxvY2F0aW9uKEdyYXBoJiBn
cmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIExvY2F0aW9u
IEFsbG9jYXRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8TG9jYXRpb25BbGxvY2F0
aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZV9o
CisjZGVmaW5lIERGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdQaGFzZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisv
LyBUaGlzIGFsbG9jYXRlcyBib3RoIHJlZ2lzdGVycyBhbmQgc3BpbGwgc2xvdHMuCisKK2Jvb2wg
cGVyZm9ybUxvY2F0aW9uQWxsb2NhdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xvY2F0
aW9uQWxsb2NhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE2MDU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNiArMTY3LDExIEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkKICAgICAgICAgLCBt
X3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICAgICAs
IG1fb3BJbmZvKDApCisgICAgICAgICwgbV9vcEluZm8yKDApCisgICAgICAgICwgbV9yZWdpc3Rl
cihzdGF0aWNfY2FzdDx1aW50OF90PihJbnZhbGlkR1BSUmVnKSkKKyAgICAgICAgLCBtX2RhdGFG
b3JtYXQoRGF0YUZvcm1hdE5vbmUpCisgICAgICAgICwgbV9zY3JhdGNoZXMoMCkKICAgICB7CiAg
ICAgICAgIG1pc2MucmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFn
cyhvcCk7CkBAIC0xODAsNiArMTg1LDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3Zp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkKICAgICAgICAgLCBtX3JlZkNvdW50KDEp
CiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICAgICAsIG1fb3BJbmZvKDAp
CisgICAgICAgICwgbV9vcEluZm8yKDApCisgICAgICAgICwgbV9yZWdpc3RlcihzdGF0aWNfY2Fz
dDx1aW50OF90PihJbnZhbGlkR1BSUmVnKSkKKyAgICAgICAgLCBtX2RhdGFGb3JtYXQoRGF0YUZv
cm1hdE5vbmUpCisgICAgICAgICwgbV9zY3JhdGNoZXMoMCkKICAgICB7CiAgICAgICAgIG1pc2Mu
cmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CkBAIC0x
OTUsNiArMjA1LDEwIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAg
ICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICAgICAsIG1fb3BJbmZvKGltbS5t
X3ZhbHVlKQorICAgICAgICAsIG1fb3BJbmZvMigwKQorICAgICAgICAsIG1fcmVnaXN0ZXIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oSW52YWxpZEdQUlJlZykpCisgICAgICAgICwgbV9kYXRhRm9ybWF0
KERhdGFGb3JtYXROb25lKQorICAgICAgICAsIG1fc2NyYXRjaGVzKDApCiAgICAgewogICAgICAg
ICBtaXNjLnJlcGxhY2VtZW50ID0gMDsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3Ap
OwpAQCAtMjExLDYgKzIyNSw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3ByZWRpY3Rp
b24oU3BlY05vbmUpCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQogICAgICAgICAs
IG1fb3BJbmZvMihpbW0yLm1fdmFsdWUpCisgICAgICAgICwgbV9yZWdpc3RlcihzdGF0aWNfY2Fz
dDx1aW50OF90PihJbnZhbGlkR1BSUmVnKSkKKyAgICAgICAgLCBtX2RhdGFGb3JtYXQoRGF0YUZv
cm1hdE5vbmUpCisgICAgICAgICwgbV9zY3JhdGNoZXMoMCkKICAgICB7CiAgICAgICAgIG1pc2Mu
cmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CkBAIC0y
MjcsNiArMjQ0LDkgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVj
Tm9uZSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCiAgICAgICAgICwgbV9vcElu
Zm8yKGltbTIubV92YWx1ZSkKKyAgICAgICAgLCBtX3JlZ2lzdGVyKHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KEludmFsaWRHUFJSZWcpKQorICAgICAgICAsIG1fZGF0YUZvcm1hdChEYXRhRm9ybWF0Tm9u
ZSkKKyAgICAgICAgLCBtX3NjcmF0Y2hlcygwKQogICAgIHsKICAgICAgICAgbWlzYy5yZXBsYWNl
bWVudCA9IDA7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTExNTAsNiAr
MTE3MCwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX3ZpcnR1YWxSZWdpc3Rl
cjsKICAgICB9CiAgICAgCisgICAgYm9vbCB1c2VzVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgeworICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVn
aXN0ZXIgPT0gdmlydHVhbFJlZ2lzdGVyOworICAgIH0KKyAgICAKICAgICB2b2lkIHNldFZpcnR1
YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKQEAgLTE1MDEsNiArMTUyNiw1OSBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIHJldHVybiBub2RlQ2FuU3BlY3VsYXRlSW50NTIoYXJpdGhOb2RlRmxhZ3Mo
KSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0Rm9ybWF0KERhdGFGb3JtYXQgZGF0YUZvcm1h
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1aW50OF90PihJbnZhbGlkR1BS
UmVnKSA9PSBzdGF0aWNfY2FzdDx1aW50OF90PihJbnZhbGlkRlBSUmVnKSk7CisgICAgICAgIG1f
Zm9ybWF0ID0gZGF0YUZvcm1hdDsKKyAgICAgICAgbV9yZWdpc3RlciA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KEludmFsaWRHUFJSZWcpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlZ2lzdGVy
KEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBBU1NFUlQoIXVzZXNGUFIoZGF0YUZvcm1hdCgp
KSk7CisgICAgICAgIG1fcmVnaXN0ZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihncHIpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNldFJlZ2lzdGVyKEZQUlJlZyBmcHIpCisgICAgeworICAgICAg
ICBBU1NFUlQodXNlc0ZQUihkYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgbV9yZWdpc3RlciA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KGZwcik7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0UmVnaXN0
ZXIoRGF0YUZvcm1hdCBkYXRhRm9ybWF0LCBHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgc2V0
Rm9ybWF0KGRhdGFGb3JtYXQpOworICAgICAgICBzZXRSZWdpc3RlcihncHIpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNldFJlZ2lzdGVyKERhdGFGb3JtYXQgZGF0YUZvcm1hdCwgRlBSUmVnIGZw
cikKKyAgICB7CisgICAgICAgIHNldEZvcm1hdChkYXRhRm9ybWF0KTsKKyAgICAgICAgc2V0UmVn
aXN0ZXIoZnByKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXROdW1TY3JhdGNoZXModW5zaWdu
ZWQgbnVtKQorICAgIHsKKyAgICAgICAgbV9zY3JhdGNoZXMgPSBudW07CisgICAgICAgIEFTU0VS
VChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zY3JhdGNoZXMpID09IG51bSk7CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIG51bVNjcmF0Y2hlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2NyYXRjaGVz
OyB9CisgICAgCisgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8RGF0YUZvcm1hdD4obV9mb3JtYXQpOyB9CisgICAgCisgICAgR1BSUmVnIGdwcigp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIXVzZXNGUFIoZGF0YUZvcm1hdCgpKSk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fcmVnaXN0ZXIpOworICAgIH0KKyAg
ICAKKyAgICBHUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh1c2VzRlBS
KGRhdGFGb3JtYXQoKSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPihtX3Jl
Z2lzdGVyKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBkdW1wQ2hpbGRyZW4oUHJpbnRTdHJlYW0m
IG91dCkKICAgICB7CiAgICAgICAgIGlmICghY2hpbGQxKCkpCkBAIC0xNTM3LDYgKzE2MTUsMTEg
QEAgcHJpdmF0ZToKICAgICAvLyBiaWcgZW5vdWdoIHRvIHN0b3JlIGEgcG9pbnRlci4KICAgICB1
aW50cHRyX3QgbV9vcEluZm87CiAgICAgdWludHB0cl90IG1fb3BJbmZvMjsKKyAgICAKKyAgICAv
LyBVc2VkIGZvciBTU0EgcmVnaXN0ZXIgYWxsb2NhdGlvbi4KKyAgICB1aW50OF90IG1fcmVnaXN0
ZXI7CisgICAgdWludDhfdCBtX2RhdGFGb3JtYXQ7CisgICAgdWludDhfdCBtX3NjcmF0Y2hlczsK
IAogcHVibGljOgogICAgIC8vIEZpZWxkcyB1c2VkIGJ5IHZhcmlvdXMgYW5hbHlzZXMuCkBAIC0x
NTU1LDYgKzE2MzgsNyBAQCBwdWJsaWM6CiAgICAgdW5pb24gewogICAgICAgICBOb2RlKiByZXBs
YWNlbWVudDsKICAgICAgICAgQmFzaWNCbG9jayogb3duZXI7CisgICAgICAgIEhhc2hTZXQ8Tm9k
ZSo+KiBpbnRlcmZlcmVuY2U7CiAgICAgfSBtaXNjOwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NywzOSArODcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDogewotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCB2YXJpYWJs
ZS0+Zmx1c2hlZEF0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBjYXNlIEdldEFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLCB2YXJp
YWJsZS0+Zmx1c2hlZEF0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludEFu
ZENoZWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIFpvbWJpZUhp
bnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IEF2YWlsYWJpbGl0eTo6
dW5hdmFpbGFibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyOjpm
b3J3YXJkRGVsdGFGb3JOb2RlKG5vZGUpLmFwcGx5RGVsdGEoYXZhaWxhYmlsaXR5KTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGF2YWls
YWJpbGl0eSA9PSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDEz
IEBAIGJvb2wgcnVuUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgIHJldHVybiBydW5BbmRMb2cocGhh
c2UpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBQaGFzZVR5cGUsIHRlbXBsYXRlIEFyZzFUeXBl
PgorYm9vbCBydW5QaGFzZShHcmFwaCYgZ3JhcGgsIGNvbnN0IEFyZzFUeXBlJiBhcmcxKQorewor
ICAgIFBoYXNlVHlwZSBwaGFzZShncmFwaCwgYXJnMSk7CisgICAgcmV0dXJuIHJ1bkFuZExvZyhw
aGFzZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1bHRBbmRT
Y3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VsdEFuZFNjcmF0Y2hD
YWxjdWxhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUg
IkRGR1Njb3JlQm9hcmQuaCIKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAi
U3RhY2tBbGlnbm1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUmVzdWx0QW5kU2NyYXRjaENhbGN1
bGF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFJlc3VsdEFuZFNjcmF0
Y2hDYWxjdWxhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwg
InJlc3VsdC1hbmQtc2NyYXRjaCBjYWxjdWxhdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NB
KTsKKyAgICAgICAgCisgICAgICAgIC8vIERlcml2ZSB0aGUgcmVzdWx0IGZvcm1hdCBmb3IgZWFj
aCBub2RlIGFuZCB0aGUgbnVtYmVyIG9mIHNjcmF0Y2ggcmVnaXN0ZXJzIGl0CisgICAgICAgIC8v
IGlzIGV4cGVjdGVkIHRvIHVzZS4KKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07
KSB7CisgICAgICAgICAgICAgICAgbV9ub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAg
ICAgICAgICAgICAgaGFuZGxlTm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgaGFuZGxlTm9k
ZSgpCisgICAgeworICAgICAgICAKKyAgICB9CisgICAgCisgICAgTm9kZSogbV9ub2RlOworfTsK
KworYm9vbCBwZXJmb3JtUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uKEdyYXBoJiBncmFwaCkK
K3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFJlc3VsdC1hbmQtc2Ny
YXRjaCBDYWxjdWxhdGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxSZXN1bHRBbmRT
Y3JhdGNoQ2FsY3VsYXRpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxj
dWxhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlX2gKKyNkZWZp
bmUgREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR1BoYXNl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisK
Ky8vIEZpZ3VyZXMgb3V0IHdoYXQgdGhlIHJlc3VsdCB0eXBlIGFuZCBudW1iZXIgb2Ygc2NyYXRj
aCByZWdpc3RlcnMgaXMgZm9yIGVhY2gKKy8vIG5vZGUuCisKK2Jvb2wgcGVyZm9ybVJlc3VsdEFu
ZFNjcmF0Y2hDYWxjdWxhdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Jlc3VsdEFuZFNj
cmF0Y2hDYWxjdWxhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTYwNTk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
ODksNiArNjg5LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gSWYgaW4gU1NBLCBjaGVjayB0aGF0IHRoaXMgbm9kZSBpc24ndCBs
aXZlIGF0IHRoZSB0YWlsIG9mIHRoZSBibG9jay4KKyAgICAgICAgaWYgKG1faml0LmdyYXBoKCku
bV9mb3JtID09IFNTQQorICAgICAgICAgICAgJiYgbV9ibG9jay0+c3NhLT5saXZlQXRUYWlsLmZp
bmQobV9jdXJyZW50Tm9kZSkgIT0gbV9ibG9jay0+c3NhLT5saXZlQXRUYWlsLmVuZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0
Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCiAgICAgICAgIE5vZGUqIGxhc3ROb2RlID0g
bV9ibG9jay0+bGFzdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVn
aXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw4IEBA
IHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAgeworICAgICAgICBBU1NFUlQobV9n
cmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKICAgICAgICAgU2NvcmVCb2Fy
ZCBzY29yZUJvYXJkKG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKTsKICAgICAgICAgc2NvcmVC
b2FyZC5hc3NlcnRDbGVhcigpOwogICAgICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219274</attachid>
            <date>2013-12-14 23:19:39 -0800</date>
            <delta_ts>2013-12-15 14:13:53 -0800</delta_ts>
            <desc>implemented the RA</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17752</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNjE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDEzLTEyLTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMOiBhICsgYiBvdmVyZmxvdyBjaGVjayBzaG91bGRuJ3Qga2VlcCBib3RoIGEgYW5kIGIgYWxp
dmUgb24gdGhlIGV4aXQgcGF0aCBpZiB0aGV5IHdvdWxkbid0IGhhdmUgb3RoZXJ3aXNlIGJvdGgg
YmVlbiBsaXZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIFRoaXMgZG9lc24ndCBsZWFkIHRvIGEgc3BlZWQtdXAuIEJ1dCBtYXliZSBpdCB3
aWxsIGRvIHNvIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Okxvd2VyREZHVG9MTFZNKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQWRkU3ViKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWRkRXhpdEFyZ3VtZW50Rm9yTm9kZSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudCk6CisgICAgICAgICog
ZnRsL0ZUTFJlY292ZXJ5T3ZlcnJpZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpS
ZWNvdmVyeU92ZXJyaWRlOjp+UmVjb3ZlcnlPdmVycmlkZSk6CisgICAgICAgIChKU0M6OkZUTDo6
QWRkUmVjb3ZlcnlPdmVycmlkZTo6fkFkZFJlY292ZXJ5T3ZlcnJpZGUpOgorICAgICAgICAoSlND
OjpGVEw6OkFkZFJlY292ZXJ5T3ZlcnJpZGU6OnRyeU92ZXJyaWRlSW1wbCk6CisgICAgICAgIChK
U0M6OkZUTDo6U3ViUmVjb3ZlcnlPdmVycmlkZTo6flN1YlJlY292ZXJ5T3ZlcnJpZGUpOgorICAg
ICAgICAoSlNDOjpGVEw6OlN1YlJlY292ZXJ5T3ZlcnJpZGU6OnRyeU92ZXJyaWRlSW1wbCk6Cisg
ICAgICAgICogZnRsL0ZUTFJlY292ZXJ5T3ZlcnJpZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkZUTDo6UmVjb3ZlcnlPdmVycmlkZTo6UmVjb3ZlcnlPdmVycmlkZSk6CisgICAgICAgIChKU0M6
OkZUTDo6UmVjb3ZlcnlPdmVycmlkZTo6dHJ5T3ZlcnJpZGUpOgorICAgICAgICAoSlNDOjpGVEw6
OlJlY292ZXJ5T3ZlcnJpZGU6Om5leHQpOgorICAgICAgICAoSlNDOjpGVEw6OkFkZFJlY292ZXJ5
T3ZlcnJpZGU6OkFkZFJlY292ZXJ5T3ZlcnJpZGUpOgorICAgICAgICAoSlNDOjpGVEw6OlN1YlJl
Y292ZXJ5T3ZlcnJpZGU6OlN1YlJlY292ZXJ5T3ZlcnJpZGUpOgorCiAyMDEzLTEyLTE0ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRlRMIHNob3VsZCAqcmVhbGx5
KiBrbm93IHdoZW4gdGhpbmdzIGFyZSBmbHVzaGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTYwNjA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2
Nyw2ICsyNjcsOCBAQAogCQkwRjY2NkVDRDE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0
aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9u
Rm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZF
MTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkMxNERGM0YxNjAwQjdC
MkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQjExODVENTk2QjAw
ODQ1RDk3IC8qIEZUTFJlY292ZXJ5T3ZlcnJpZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQUYxODVENTk2QjAwODQ1RDk3IC8qIEZUTFJl
Y292ZXJ5T3ZlcnJpZGUuY3BwICovOyB9OworCQkwRjZCMUNCMjE4NUQ1OTZCMDA4NDVEOTcgLyog
RlRMUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2QjFDQjAxODVENTk2QjAwODQ1RDk3IC8qIEZUTFJlY292ZXJ5T3ZlcnJp
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzAyNUE3MTcx
NEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwICovOyB9OwogCQkw
RjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBODE3MTRC
MEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MTRDQTQxNkVBOTJGMDAwRjNF
QkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8q
IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovOyB9OwpAQCAtMTU3OSw2ICsxNTgx
LDggQEAKIAkJMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdSZXN1cnJlY3Rpb25G
b3JWYWxpZGF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUx
NjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFj
ZW5jeUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0Yx
MzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHRWRnZS5oOyBwYXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2QjFDQUYxODVENTk2QjAwODQ1RDk3IC8qIEZUTFJlY292ZXJ5T3ZlcnJpZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMUmVjb3ZlcnlPdmVycmlk
ZS5jcHA7IHBhdGggPSBmdGwvRlRMUmVjb3ZlcnlPdmVycmlkZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNkIxQ0IwMTg1RDU5NkIwMDg0NUQ5NyAvKiBGVExSZWNvdmVyeU92
ZXJyaWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFJlY292ZXJ5T3Zl
cnJpZGUuaDsgcGF0aCA9IGZ0bC9GVExSZWNvdmVyeU92ZXJyaWRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzAyNUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcwMjVBODE3MTRCMEY4
MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBwYXRoID0gZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4NzQsNiArMjg3OCw4IEBACiAJ
CQkJMEYyMzVCQ0ExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxlci5oICovLAog
CQkJCTBGRUEwQTI5MTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3BwICovLAogCQkJCTBG
RUEwQTA2MTcwNTEzREIwMEJCNzIyQyAvKiBGVExPdXRwdXQuaCAqLywKKwkJCQkwRjZCMUNBRjE4
NUQ1OTZCMDA4NDVEOTcgLyogRlRMUmVjb3ZlcnlPdmVycmlkZS5jcHAgKi8sCisJCQkJMEY2QjFD
QjAxODVENTk2QjAwODQ1RDk3IC8qIEZUTFJlY292ZXJ5T3ZlcnJpZGUuaCAqLywKIAkJCQkwRkNF
RkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICovLAogCQkJCTBGQ0VG
QUFBMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovLAogCQkJCTBGMjVGMUFB
MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwICovLApAQCAtNDU1OSw2ICs0
NTY1LDcgQEAKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRF
NDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QjFDQjIxODVENTk2QjAw
ODQ1RDk3IC8qIEZUTFJlY292ZXJ5T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4
MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzI1RjhCQ0UxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC01NDQ3LDYgKzU0NTQsNyBAQAogCQkJCUMyOTgxRkQ4MTdC
QUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzI5ODFGREMxN0JBRkY0NDAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXcml0ZUJhcnJp
ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzY0MTU5MUExQ0MwMDRDQjlGRiAvKiBE
RkdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2QjFDQjExODVENTk2QjAw
ODQ1RDk3IC8qIEZUTFJlY292ZXJ5T3ZlcnJpZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZE
ODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjA2MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBA
QAogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1ZGUgIkZUTExvd2VyZWRO
b2RlVmFsdWUuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIKKyNpbmNsdWRlICJGVExSZWNvdmVy
eU92ZXJyaWRlLmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgpAQCAtNzQsNiArNzUsNyBAQCBwdWJs
aWM6CiAgICAgICAgICwgbV9oZWFwcyhzdGF0ZS5jb250ZXh0KQogICAgICAgICAsIG1fb3V0KHN0
YXRlLmNvbnRleHQpCiAgICAgICAgICwgbV9hdmFpbGFiaWxpdHkoT3BlcmFuZHNMaWtlLCBzdGF0
ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fb3ZlcnJpZGUo
MCkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAgICAsIG1faW50ZXJwcmV0
ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUpCiAgICAgICAgICwgbV9zdGFja21hcElEcygwKQpAQCAt
NTA0LDYgKzUwNiw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0
cykKICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsK
ICAgICAgICAgCisgICAgICAgIEFTU0VSVCghbV9vdmVycmlkZSk7CisgICAgICAgIAogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTcxOCw4ICs3MjIsNDUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGlzU3ViID8gbV9vdXQu
c3ViV2l0aE92ZXJmbG93MzIobGVmdCwgcmlnaHQpIDogbV9vdXQuYWRkV2l0aE92ZXJmbG93MzIo
bGVmdCwgcmlnaHQpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUo
KSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlY292ZXJ5T3ZlcnJp
ZGU+IHJlY292ZXJ5OworICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNTdWIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUt
PmNoaWxkMigpLmRvZXNLaWxsKCkgJiYgIW1fbm9kZS0+Y2hpbGQyKCktPmhhc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXN1bHQgPSBsZWZ0IC0gcmlnaHQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtIHJpZ2h0ID0gcmVzdWx0IC0gbGVmdAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJpZ2h0ID0gbGVmdCAtIHJlc3VsdAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlY292ZXJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxTdWJS
ZWNvdmVyeU92ZXJyaWRlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVy
cmlkZSwgbV9ub2RlLT5jaGlsZDIoKS5ub2RlKCksIFZhbHVlRm9ybWF0SW50MzIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQs
IDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9ub2RlLT5jaGlsZDEo
KS5kb2VzS2lsbCgpICYmICFtX25vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzdWx0ID0gbGVmdCAtIHJpZ2h0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbGVmdCA9IHJlc3VsdCArIHJpZ2h0CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVjb3ZlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEFkZFJlY292ZXJ5
T3ZlcnJpZGU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX292ZXJyaWRlLCBt
X25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgVmFsdWVGb3JtYXRJbnQzMiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmlnaHQsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLmRvZXNLaWxsKCkg
JiYgIW1fbm9kZS0+Y2hpbGQyKCktPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyByZXN1bHQgPSBsZWZ0ICsgcmlnaHQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyByaWdodCA9IHJlc3VsdCAtIGxlZnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWNvdmVyeSA9IHN0ZDo6bWFrZV91bmlxdWU8U3ViUmVjb3ZlcnlPdmVycmlkZT4oCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3ZlcnJpZGUsIG1fbm9kZS0+Y2hpbGQy
KCkubm9kZSgpLCBWYWx1ZUZvcm1hdEludDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSwgbGVmdCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG1fbm9kZS0+Y2hpbGQxKCkuZG9lc0tpbGwoKSAmJiAhbV9u
b2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHJlc3VsdCA9IGxlZnQgKyByaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGxlZnQgPSByZXN1bHQgLSByaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Y292ZXJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxTdWJSZWNvdmVyeU92ZXJyaWRlPigKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVycmlkZSwgbV9ub2RlLT5jaGlsZDIoKS5ub2Rl
KCksIFZhbHVlRm9ybWF0SW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApLCByaWdodCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCks
IDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwg
MCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQxMDYsNiArNDE0NywxNCBA
QCBwcml2YXRlOgogICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudEV4aXRBcmd1bWVudChleGl0
LCBpbmRleCwgbm9kZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgICAgICBm
b3IgKFJlY292ZXJ5T3ZlcnJpZGUqIG92ZXJyaWRlID0gbV9vdmVycmlkZTsgb3ZlcnJpZGU7IG92
ZXJyaWRlID0gb3ZlcnJpZGUtPm5leHQoKSkgeworICAgICAgICAgICAgRm9ybWF0dGVkVmFsdWUg
dmFsdWUgPSBvdmVycmlkZS0+dHJ5T3ZlcnJpZGUobm9kZSwgbV9vdXQpOworICAgICAgICAgICAg
aWYgKCEhdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJn
dW1lbnRzLCBpbmRleCwgdmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1
ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUpOwogICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
IHsKICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBW
YWx1ZUZvcm1hdEludDMyLCB2YWx1ZS52YWx1ZSgpKTsKQEAgLTQxNzUsNiArNDIyNCwxMiBAQCBw
cml2YXRlOgogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBhZGRFeGl0QXJndW1lbnQoCisgICAgICAgIE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgdW5zaWduZWQgaW5kZXgsIEZvcm1hdHRlZFZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgs
IHZhbHVlLmZvcm1hdCgpLCB2YWx1ZS52YWx1ZSgpKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBv
YnNlcnZlTW92SGludChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPmNv
bnRhaW5zTW92SGludCgpKTsKQEAgLTQzNDgsNiArNDQwMyw4IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBtX2F2YWlsYWJpbGl0eTsKICAgICAKKyAgICBSZWNv
dmVyeU92ZXJyaWRlKiBtX292ZXJyaWRlOworICAgIAogICAgIEluUGxhY2VBYnN0cmFjdFN0YXRl
IG1fc3RhdGU7CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJzdHJhY3RTdGF0ZT4g
bV9pbnRlcnByZXRlcjsKICAgICBCYXNpY0Jsb2NrKiBtX2hpZ2hCbG9jazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUmVjb3ZlcnlPdmVycmlkZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExSZWNvdmVyeU92ZXJyaWRlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUmVjb3ZlcnlPdmVycmlk
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRlRMUmVjb3ZlcnlPdmVycmlkZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworUmVjb3ZlcnlPdmVycmlkZTo6flJlY292ZXJ5
T3ZlcnJpZGUoKQoreworICAgIEFTU0VSVChtX2hlYWQgPT0gdGhpcyk7CisgICAgKm1faGVhZCA9
IG1fbmV4dDsKK30KKworQWRkUmVjb3ZlcnlPdmVycmlkZTo6fkFkZFJlY292ZXJ5T3ZlcnJpZGUo
KSB7IH0KKworRm9ybWF0dGVkVmFsdWUgQWRkUmVjb3ZlcnlPdmVycmlkZTo6dHJ5T3ZlcnJpZGVJ
bXBsKE91dHB1dCYgb3V0KQoreworICAgIHJldHVybiBGb3JtYXR0ZWRWYWx1ZShtX2Zvcm1hdCwg
b3V0LmFkZChtX2xlZnQsIG1fcmlnaHQpKTsKK30KKworU3ViUmVjb3ZlcnlPdmVycmlkZTo6flN1
YlJlY292ZXJ5T3ZlcnJpZGUoKSB7IH0KKworRm9ybWF0dGVkVmFsdWUgU3ViUmVjb3ZlcnlPdmVy
cmlkZTo6dHJ5T3ZlcnJpZGVJbXBsKE91dHB1dCYgb3V0KQoreworICAgIHJldHVybiBGb3JtYXR0
ZWRWYWx1ZShtX2Zvcm1hdCwgb3V0LnN1YihtX2xlZnQsIG1fcmlnaHQpKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUmVjb3ZlcnlPdmVycmlkZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUmVjb3ZlcnlPdmVycmlkZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExSZWNvdmVyeU92ZXJy
aWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExSZWNvdmVyeU92ZXJyaWRl
X2gKKyNkZWZpbmUgRlRMUmVjb3ZlcnlPdmVycmlkZV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgor
I2luY2x1ZGUgIkZUTE91dHB1dC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CisKK2NsYXNzIFJlY292ZXJ5T3ZlcnJpZGUgeworcHJvdGVjdGVkOgorICAgIFJlY292ZXJ5T3Zl
cnJpZGUoUmVjb3ZlcnlPdmVycmlkZSomIGhlYWQsIERGRzo6Tm9kZSogbm9kZSkKKyAgICAgICAg
OiBtX2hlYWQoJmhlYWQpCisgICAgICAgICwgbV9uZXh0KGhlYWQpCisgICAgICAgICwgbV9ub2Rl
KG5vZGUpCisgICAgeworICAgICAgICAqbV9oZWFkID0gdGhpczsKKyAgICB9CisgICAgCitwdWJs
aWM6CisgICAgdmlydHVhbCB+UmVjb3ZlcnlPdmVycmlkZSgpOworICAgIAorICAgIEZvcm1hdHRl
ZFZhbHVlIHRyeU92ZXJyaWRlKERGRzo6Tm9kZSogbm9kZSwgT3V0cHV0JiBvdXQpCisgICAgewor
ICAgICAgICBpZiAobm9kZSA9PSBtX25vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ5T3ZlcnJp
ZGVJbXBsKG91dCk7CisgICAgICAgIHJldHVybiBGb3JtYXR0ZWRWYWx1ZSgpOworICAgIH0KKyAg
ICAKKyAgICBSZWNvdmVyeU92ZXJyaWRlKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9
CisgICAgCitwcml2YXRlOgorICAgIFJlY292ZXJ5T3ZlcnJpZGUqKiBtX2hlYWQ7CisgICAgUmVj
b3ZlcnlPdmVycmlkZSogbV9uZXh0OworICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRm9y
bWF0dGVkVmFsdWUgdHJ5T3ZlcnJpZGVJbXBsKE91dHB1dCYpID0gMDsKKyAgICAKKyAgICBERkc6
Ok5vZGUqIG1fbm9kZTsKK307CisKK2NsYXNzIEFkZFJlY292ZXJ5T3ZlcnJpZGUgOiBwdWJsaWMg
UmVjb3ZlcnlPdmVycmlkZSB7CitwdWJsaWM6CisgICAgQWRkUmVjb3ZlcnlPdmVycmlkZSgKKyAg
ICAgICAgUmVjb3ZlcnlPdmVycmlkZSomIGhlYWQsIERGRzo6Tm9kZSogbm9kZSwgVmFsdWVGb3Jt
YXQgZm9ybWF0LCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQorICAgICAgICA6IFJlY292ZXJ5
T3ZlcnJpZGUoaGVhZCwgbm9kZSkKKyAgICAgICAgLCBtX2Zvcm1hdChmb3JtYXQpCisgICAgICAg
ICwgbV9sZWZ0KGxlZnQpCisgICAgICAgICwgbV9yaWdodChyaWdodCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHZpcnR1YWwgfkFkZFJlY292ZXJ5T3ZlcnJpZGUoKTsKKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIEZvcm1hdHRlZFZhbHVlIHRyeU92ZXJyaWRlSW1wbChPdXRwdXQmKSBP
VkVSUklERTsKKworcHJpdmF0ZToKKyAgICBWYWx1ZUZvcm1hdCBtX2Zvcm1hdDsKKyAgICBMVmFs
dWUgbV9sZWZ0OworICAgIExWYWx1ZSBtX3JpZ2h0OworfTsKKworY2xhc3MgU3ViUmVjb3ZlcnlP
dmVycmlkZSA6IHB1YmxpYyBSZWNvdmVyeU92ZXJyaWRlIHsKK3B1YmxpYzoKKyAgICBTdWJSZWNv
dmVyeU92ZXJyaWRlKAorICAgICAgICBSZWNvdmVyeU92ZXJyaWRlKiYgaGVhZCwgREZHOjpOb2Rl
KiBub2RlLCBWYWx1ZUZvcm1hdCBmb3JtYXQsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCisg
ICAgICAgIDogUmVjb3ZlcnlPdmVycmlkZShoZWFkLCBub2RlKQorICAgICAgICAsIG1fZm9ybWF0
KGZvcm1hdCkKKyAgICAgICAgLCBtX2xlZnQobGVmdCkKKyAgICAgICAgLCBtX3JpZ2h0KHJpZ2h0
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+U3ViUmVjb3ZlcnlPdmVycmlkZSgp
OworICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRm9ybWF0dGVkVmFsdWUgdHJ5T3ZlcnJp
ZGVJbXBsKE91dHB1dCYpOworCitwcml2YXRlOgorICAgIFZhbHVlRm9ybWF0IG1fZm9ybWF0Owor
ICAgIExWYWx1ZSBtX2xlZnQ7CisgICAgTFZhbHVlIG1fcmlnaHQ7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8v
IEZUTFJlY292ZXJ5T3ZlcnJpZGVfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219282</attachid>
            <date>2013-12-15 14:13:53 -0800</date>
            <delta_ts>2013-12-15 18:20:06 -0800</delta_ts>
            <desc>for real this time</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>52733</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkocmV2
aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3Jt
YXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwxNiBAQCBpbmxpbmUgYm9vbCBpc0pT
Qm9vbGVhbihEYXRhRm9ybWF0IGZvcm1hCiAgICAgcmV0dXJuIGlzSlNGb3JtYXQoZm9ybWF0LCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKIH0KIAoraW5saW5lIGJvb2wgdXNlc0ZQUihEYXRhRm9ybWF0
IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGU7CiB9CiAK
K2lubGluZSBib29sIHVzZXNHUFIoRGF0YUZvcm1hdCBmb3JtYXQpCit7CisgICAgcmV0dXJuICF1
c2VzRlBSKGZvcm1hdCkgJiYgZm9ybWF0ICE9IERhdGFGb3JtYXROb25lOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwogI2VuZGlmIC8vIERhdGFGb3JtYXRfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJp
bGl0eUZvclJlZ2lzdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQXZhaWxh
YmlsaXR5Rm9yUmVnaXN0ZXIgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXI6OmZvcndhcmREZWx0YUZv
ck5kb2UoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJl
Z2lzdGVyKAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
dmFyaWFibGUtPmZsdXNoZWRBdCgpKSwKKyAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpKTsK
KyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBjYXNlIEdldEFyZ3VtZW50OiB7
CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKAorICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSksCisgICAg
ICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgY2FzZSBNb3ZIaW50OgorICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7CisgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKAorICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSksCisgICAgICAgICAgICB2YXJp
YWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgY2Fz
ZSBab21iaWVIaW50OiB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZv
clJlZ2lzdGVyKAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpLAorICAg
ICAgICAgICAgdmFyaWFibGUtPmxvY2FsKCkpOworICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rl
cigpOworICAgIH0KK30KKwordm9pZCBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiciIsIG1fcmVnLm9mZnNldCgp
LCAiOiAiLCBtX2F2YWlsYWJpbGl0eSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdp
c3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdmFpbGFiaWxpdHlGb3JS
ZWdpc3Rlcl9oCisjZGVmaW5lIERGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIg
eworcHVibGljOgorICAgIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKCkgeyB9CisgICAgCisgICAg
QXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKKyAgICAgICAgOiBtX2F2YWlsYWJpbGl0eShhdmFpbGFiaWxpdHkpCisg
ICAgICAgICwgbV9yZWdpc3RlcihyZWcpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2F2YWlsYWJpbGl0eSAmJiAhbV9yZWdpc3Rlci5p
c1ZhbGlkKCk7IH0KKyAgICAKKyAgICBjb25zdCBBdmFpbGFiaWxpdHkmIGF2YWlsYWJpbGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5OyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXI7IH0KKyAgICAKKyAgICAv
LyBSZXR1cm5zIGFuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyIHRoYXQgZGVzY3JpYmVzIHRoZSBh
dmFpbGFiaWxpdHkgZGVsdGEsIHdoZW4KKyAgICAvLyBzY2FubmluZyBmb3J3YXJkLCBmb3IgYSBu
b2RlLgorICAgIHN0YXRpYyBBdmFpbGFiaWxpdHlGb3JSZWdpc3RlciBmb3J3YXJkRGVsdGFGb3JO
b2RlKE5vZGUqKTsKKyAgICAKKyAgICB2b2lkIGFwcGx5RGVsdGEoT3BlcmFuZHM8QXZhaWxhYmls
aXR5PiYgb3BlcmFuZHMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBvcGVyYW5kcy5vcGVyYW5kKHZpcnR1YWxSZWdpc3Rlcigp
KSA9IGF2YWlsYWJpbGl0eSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQXZhaWxhYmlsaXR5IG1fYXZhaWxhYmls
aXR5OworICAgIFZpcnR1YWxSZWdpc3RlciBtX3JlZ2lzdGVyOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0
Nyw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAg
SGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJh
Y3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZh
bHVlPiB2YWx1ZXNBdFRhaWw7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxOb2RlKj4+
IGV4dHJhS2lsbHM7CiAgICAgICAgIAogICAgICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKICAg
ICAgICAgflNTQURhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9y
bWF0dGVkUmVnaXN0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRm9ybWF0dGVkUmVnaXN0ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGb3JtYXR0ZWRSZWdpc3Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRm9ybWF0dGVkUmVnaXN0ZXIu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK3ZvaWQgRm9ybWF0dGVkUmVnaXN0ZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSkpOwor
ICAgIAorICAgIGlmIChkYXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBvdXQucHJpbnQoIjoiKTsKKyAgICBpZiAodXNlc0dQUihkYXRhRm9y
bWF0KCkpKQorICAgICAgICBvdXQucHJpbnQoZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAgb3V0
LnByaW50KGZwcigpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rm9ybWF0dGVkUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Zvcm1hdHRlZFJlZ2lzdGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Zvcm1hdHRlZFJlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdGb3JtYXR0ZWRSZWdpc3Rlcl9oCisjZGVmaW5lIERGR0Zvcm1hdHRlZFJl
Z2lzdGVyX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5o
IgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBSZWdpc3RlckNsYXNzIHsgR2VuZXJhbFJl
Z2lzdGVycywgRG91YmxlUmVnaXN0ZXJzIH07CisKK2NsYXNzIEZvcm1hdHRlZFJlZ2lzdGVyIHsK
K3B1YmxpYzoKKyAgICBGb3JtYXR0ZWRSZWdpc3RlcigpCisgICAgICAgIDogbV9yZWdpc3Rlcihz
dGF0aWNfY2FzdDxpbnQ4X3Q+KEludmFsaWRHUFJSZWcpKQorICAgICAgICAsIG1fZGF0YUZvcm1h
dChEYXRhRm9ybWF0Tm9uZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxHUFJS
ZWc+KG1fcmVnaXN0ZXIpID09IEludmFsaWRHUFJSZWcpOworICAgICAgICBBU1NFUlQoc3RhdGlj
X2Nhc3Q8RlBSUmVnPihtX3JlZ2lzdGVyKSA9PSBJbnZhbGlkRlBSUmVnKTsKKyAgICB9CisgICAg
CisgICAgRm9ybWF0dGVkUmVnaXN0ZXIoRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgICAgICA6
IG1fcmVnaXN0ZXIoc3RhdGljX2Nhc3Q8aW50OF90PihJbnZhbGlkR1BSUmVnKSkKKyAgICAgICAg
LCBtX2RhdGFGb3JtYXQoc3RhdGljX2Nhc3Q8aW50OF90PihkYXRhRm9ybWF0KSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIEZvcm1hdHRlZFJlZ2lzdGVyKERhdGFGb3JtYXQgZGF0YUZvcm1hdCwg
R1BSUmVnIGdwcikKKyAgICAgICAgOiBtX3JlZ2lzdGVyKHN0YXRpY19jYXN0PGludDhfdD4oZ3By
KSkKKyAgICAgICAgLCBtX2RhdGFGb3JtYXQoZGF0YUZvcm1hdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCh1c2VzR1BSKGRhdGFGb3JtYXQpKTsKKyAgICB9CisgICAgCisgICAgRm9ybWF0dGVkUmVn
aXN0ZXIoRGF0YUZvcm1hdCBkYXRhRm9ybWF0LCBGUFJSZWcgZnByKQorICAgICAgICA6IG1fcmVn
aXN0ZXIoc3RhdGljX2Nhc3Q8aW50OF90PihmcHIpKQorICAgICAgICAsIG1fZGF0YUZvcm1hdChk
YXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNGUFIoZGF0YUZvcm1hdCkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlZ2lzdGVyKEdQUlJlZyBncHIpCisgICAgeworICAg
ICAgICBBU1NFUlQodXNlc0dQUihkYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgbV9yZWdpc3RlciA9
IHN0YXRpY19jYXN0PGludDhfdD4oZ3ByKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRSZWdp
c3RlcihGUFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNGUFIoZGF0YUZvcm1h
dCgpKSk7CisgICAgICAgIG1fcmVnaXN0ZXIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGZwcik7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAg
ICB2b2lkIHNldFJlZ2lzdGVySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBp
ZiAocmVnaXN0ZXJDbGFzcyA9PSBHZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgc2V0UmVn
aXN0ZXIoR1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzZXRSZWdpc3RlcihGUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAgICBib29sIGlz
UmVnaXN0ZXJDbGFzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAocmVnaXN0ZXJDbGFzcyA9
PSBHZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIHVzZXNHUFIoZGF0YUZvcm1h
dCgpKTsKKyAgICAgICAgcmV0dXJuIHVzZXNGUFIoZGF0YUZvcm1hdCgpKTsKKyAgICB9CisgICAg
CisgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RGF0YUZvcm1hdD4obV9kYXRhRm9ybWF0KTsgfQorICAgIAorICAgIEdQUlJlZyBncHIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNHUFIoZGF0YUZvcm1hdCgpKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fcmVnaXN0ZXIpOworICAgIH0KKyAgICAKKyAg
ICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh1c2VzRlBSKGRhdGFG
b3JtYXQoKSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPihtX3JlZ2lzdGVy
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8UmVnaXN0ZXJDbGFzcyByZWdpc3RlckNsYXNz
PgorICAgIHVuc2lnbmVkIHJlZ2lzdGVySW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KHJlZ2lzdGVyQ2xhc3MgPT0gR2VuZXJhbFJlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybiBH
UFJJbmZvOjp0b0luZGV4KGdwcigpKTsKKyAgICAgICAgcmV0dXJuIEZQUkluZm86OnRvSW5kZXgo
ZnByKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgaW50OF90IG1fcmVnaXN0ZXI7CisgICAgaW50OF90IG1fZGF0
YUZvcm1hdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRm9ybWF0dGVkUmVnaXN0ZXJfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDgg
KzM4LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBMaXZlbmVz
c0FuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgotICAgIExpdmVuZXNzQW5h
bHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogUGhhc2UoZ3JhcGgsICJsaXZlbmVz
cyBhbmFseXNpcyIpCisgICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCwgQXZh
aWxhYmlsaXR5TGl2ZW5lc3NNb2RlIGF2YWlsYWJpbGl0eU1vZGUpCisgICAgICAgIDogUGhhc2Uo
Z3JhcGgsIGF2YWlsYWJpbGl0eU1vZGUgPT0gQXZhaWxhYmlsaXR5Tm90TGl2ZSA/ICJsaXZlbmVz
cyBhbmFseXNpcyIgOiAibGl2ZW5lc3MgYW5hbHlzaXMgKGluY2wuIGF2YWlsYWJpbGl0eSkiKQor
ICAgICAgICAsIG1fYXZhaWxhYmlsaXR5TW9kZShhdmFpbGFiaWxpdHlNb2RlKQogICAgIHsKICAg
ICB9CiAgICAgCkBAIC04Niw1MSArODcsMTA4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghYmxv
Y2spCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgICAgICBibG9jay0+c3NhLT5l
eHRyYUtpbGxzLmNsZWFyKCk7CisgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtl
bHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVz
ZQogICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExODQ1NQogICAgICAgICBtX2xpdmUgPSBibG9jay0+c3NhLT5saXZlQXRUYWlsOwog
ICAgICAgICAKKyAgICAgICAgaWYgKG1fYXZhaWxhYmlsaXR5TW9kZSA9PSBBdmFpbGFiaWxpdHlJ
c0xpdmUpIHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxh
YmlsaXR5QXRIZWFkOworICAgICAgICAgICAgbV9kZWx0YXMucmVzaXplKGJsb2NrLT5zaXplKCkp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlGb3JS
ZWdpc3RlciBkZWx0YSA9CisgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eTo6Zm9yd2Fy
ZERlbHRhRm9yTm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoISFkZWx0YSkgeworICAg
ICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgb2xkQXZhaWxhYmlsaXR5ID0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQoZGVsdGEudmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgICAgICAgICBkZWx0YS5hcHBseURlbHRhKG1fYXZhaWxhYmls
aXR5KTsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rl
cihvbGRBdmFpbGFiaWxpdHksIGRlbHRhLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgbV9kZWx0YXNbbm9kZUluZGV4XSA9IGRlbHRhOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQobV9hdmFpbGFiaWxp
dHkgPT0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsKTsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2Rl
SW5kZXgtLTspIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAg
ICAgICAgLy8gR2l2ZW4gYW4gVXBzaWxvbjoKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgIC8vICAgIG46IFVwc2lsb24oQHgsIF5wKQorICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFuZCB1c2VzIEB4
LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gR2l2ZW4gYSBQaGk6Cisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICBwOiBQaGkoKQorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVp
dGhlciBhIHVzZSBub3IgYSBkZWYuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyBHaXZlbiBhIG5vZGU6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyAgICBuOiBUaGluZ3koQGEsIEBiLCBAYykKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwgQGMuCiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246Ci0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gICAgbjogVXBzaWxvbihAeCwgXnApCi0gICAgICAgICAgICAv
LwotICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFuZCB1c2Vz
IEB4LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhpOgotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCi0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVzZSBub3IgYSBkZWYu
Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2RlOgotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1c2VzIEBh
LCBAYiwgQGMuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewotICAgICAgICAgICAgY2FzZSBVcHNpbG9uOiB7Ci0gICAgICAgICAgICAgICAgTm9kZSogcGhp
ID0gbm9kZS0+cGhpKCk7Ci0gICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkpOwotICAg
ICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7Ci0gICAgICAgICAgICAgICAgbV9saXZl
LmFkZChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgVXBzaWxvbjogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGkg
PSBub2RlLT5waGkoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOworICAgICAgICAgICAgICAg
ICAgICBtX2xpdmUuYWRkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgUGhpOiB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAg
ICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZENoaWxk
VXNlKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKLSAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19U
T19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRDaGlsZFVzZSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2F2YWlsYWJpbGl0eU1vZGUgPT0gQXZh
aWxhYmlsaXR5SXNMaXZlCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5FeGl0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2F2YWlsYWJpbGl0eS5zaXplKCk7ICtpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1fYXZhaWxhYmlsaXR5W2ldOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChmbHVzaC5mb3JtYXQoKSAhPSBEZWFkRmx1c2gKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZmx1c2guZm9ybWF0KCkgIT0gQ29uZmxpY3Rp
bmdGbHVzaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF2
YWlsbGFiaWxpdHkuaGFzTm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGNoaWxkID0gYXZhaWxhYmlsaXR5Lm5vZGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobV9saXZlLmNvbnRhaW5zKGNoaWxkKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG1fYXZhaWxhYmlsaXR5Lm9w
ZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzTGl2
ZSA9IG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTGl2ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2xpdmUuYWRkKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCBWZWN0b3I8Tm9kZSo+Pjo6QWRkUmVzdWx0IHJlc3Vs
dCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5zc2EtPmV4dHJhS2ls
bHMuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChtX2F2YWlsYWJpbGl0eU1vZGUgPT0gQXZhaWxhYmlsaXR5SXNMaXZlKQor
ICAgICAgICAgICAgICAgIG1fZGVsdGFzW25vZGVJbmRleF0uYXBwbHkobV9hdmFpbGFiaWxpdHkp
OwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAobV9hdmFpbGFiaWxpdHlNb2RlID09
IEF2YWlsYWJpbGl0eUlzTGl2ZSkKKyAgICAgICAgICAgIEFTU0VSVChtX2F2YWlsYWJpbGl0eSA9
PSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQpOworICAgICAgICAKICAgICAgICAgaWYg
KG1fbGl2ZSA9PSBibG9jay0+c3NhLT5saXZlQXRIZWFkKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKQEAgLTE1MCwxNCArMjA4LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIGVkZ2Uuc2V0
S2lsbFN0YXR1cyhtX2xpdmUuYWRkKGVkZ2Uubm9kZSgpKS5pc05ld0VudHJ5ID8gRG9lc0tpbGwg
OiBEb2VzTm90S2lsbCk7CiAgICAgfQogICAgIAorICAgIEF2YWlsYWJpbGl0eUxpdmVuZXNzTW9k
ZSBtX2F2YWlsYWJpbGl0eU1vZGU7CiAgICAgYm9vbCBtX2NoYW5nZWQ7CiAgICAgSGFzaFNldDxO
b2RlKj4gbV9saXZlOworICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7
CisgICAgVmVjdG9yPEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyPiBtX2RlbHRhczsKIH07CiAKLWJv
b2wgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtTGl2
ZW5lc3NBbmFseXNpcyhHcmFwaCYgZ3JhcGgsIEF2YWlsYWJpbGl0eUxpdmVuZXNzTW9kZSBtb2Rl
KQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgTGl2ZW5lc3MgQW5h
bHlzaXMgUGhhc2UiKTsKLSAgICByZXR1cm4gcnVuUGhhc2U8TGl2ZW5lc3NBbmFseXNpc1BoYXNl
PihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPExpdmVuZXNzQW5hbHlzaXNQaGFzZT4oZ3Jh
cGgsIG1vZGUpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJ
KHJldmlzaW9uIDE2MDU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDE1IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR3JhcGg7CiAKLS8vIENvbXB1dGVz
IEJhc2ljQmxvY2s6OnNzYS0+bGl2ZUF0SGVhZC9saXZlQXRUYWlsLgorLy8gQ29tcHV0ZXMgQmFz
aWNCbG9jazo6c3NhLT5saXZlQXRIZWFkL2xpdmVBdFRhaWwuIE1heSBvciBtYXkgbm90IGluY2x1
ZGUgdGhpbmdzCisvLyB0aGF0IGFyZSBwYXJ0IG9mIEF2YWlsYWJpbGl0eS4KIAotYm9vbCBwZXJm
b3JtTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYpOworZW51bSBBdmFpbGFiaWxpdHlMaXZlbmVzc01v
ZGUgeworICAgIEF2YWlsYWJpbGl0eU5vdExpdmUsIC8vIFVzZWZ1bCBpZiB5b3UncmUganVzdCBk
b2luZyBwcnVuaW5nIGZvciBDRkEuCisgICAgQXZhaWxhYmlsaXR5SXNMaXZlIC8vIFVzZWZ1bCBp
ZiB5b3UncmUgZG9pbmcgcmVnaXN0ZXIgYWxsb2NhdGlvbi4KK307CisKK2Jvb2wgcGVyZm9ybUxp
dmVuZXNzQW5hbHlzaXMoR3JhcGgmLCBBdmFpbGFiaWxpdHlMaXZlbmVzc01vZGUgPSBBdmFpbGFi
aWxpdHlOb3RMaXZlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvY2F0aW9uQWxsb2NhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TG9jYXRpb25BbGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzM3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUg
IkRGR1Njb3JlQm9hcmQuaCIKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAi
U3RhY2tBbGlnbm1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTG9jYXRpb25BbGxvY2F0aW9uUGhh
c2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIExvY2F0aW9uQWxsb2NhdGlvblBoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImxvY2F0aW9uIGFsbG9jYXRp
b24iKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBDbGVh
cnMgbWlzYy5pbnRlcmZlcmVuY2UgYmVjYXVzZSBpdCBvdmVybGFwcyBtaXNjLnJlcGxhY2VtZW50
LgorICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBDb21wdXRlIGludGVyZmVyZW5jZS4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVh
ZDsKKyAgICAgICAgICAgIGJvb2wgZGlkQ2hhbmdlID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2Rl
SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGlkQ2hhbmdlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGludGVyZmVyZShsaXZlKTsKKyAgICAgICAgICAgICAgICAgICAgZGlkQ2hhbmdlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
Z3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgRWRn
ZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGVkZ2UuZG9lc0tpbGwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5yZW1vdmUo
ZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGlkQ2hhbmdlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCBWZWN0b3I8Tm9kZSo+PiBpdGVyID0g
YmxvY2stPnNzYS0+ZXh0cmFLaWxscy5maW5kKG5vZGUpOworICAgICAgICAgICAgICAgIGlmIChp
dGVyICE9IGJsb2NrLT5zc2EtPmV4dHJhS2lsbHMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxOb2RlKj4mIGtpbGxzID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGtpbGxzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbGl2ZS5yZW1vdmUoa2lsbHNbaV0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGlkQ2hhbmdlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YWRqdXN0
ZWRSZWZDb3VudCgpICYmIG5vZGUtPmhhc1Jlc3VsdCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGxpdmUuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2UgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkaWRDaGFu
Z2UpCisgICAgICAgICAgICAgICAgaW50ZXJmZXJlKGxpdmUpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBDb2xsZWN0IGFsbCBub2RlcyB0aGF0IGFyZSBpbnRlcmVzdGluZyB0byBh
bGxvY2F0aW9uLgorICAgICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzOworICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5v
ZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzUmVzdWx0KCkpCisgICAgICAg
ICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIEJyb2FkbHkgc3BlYWtpbmcsIG5vZGVzIGNhbm5vdCByZXVzZSB0aGVp
ciBpbnB1dCByZWdpc3RlcnMgZm9yIHN0b3JpbmcgdGhlaXIgb3V0cHV0LgorICAgICAgICAvLyBJ
biBjYXNlcyB3aGVyZSB0aGV5IGNhbiwgd2UgYWxsb3cgdGhlIGxvY2FsIHJlZ2lzdGVyIGFsbG9j
YXRvciB0byBvdmVycmlkZSB0aGlzCisgICAgICAgIC8vIGdsb2JhbCBhbGxvY2F0b3IncyBkZWNp
c2lvbi4gRm9yIG5vZGVzIHRoYXQgYXJlIGxpdmUgYWNyb3NzIGJhc2ljIGJsb2NrIGJvdW5kYXJp
ZXMsCisgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCBldmVudHVhbGx5IHRoZXJlIHdpbGwgYmUg
YSBtb3Ygb3Igc29tZXN1Y2guCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGVzLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVzW2ldOworICAgICAgICAg
ICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgaW50ZXJmZXJlV2l0aENo
aWxkcmVuKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgdXNlIFdlbHNo
LVBvd2VsbCB0byBwaWNrIHNwaWxsIHNsb3RzLCBpLmUuIHZpcnR1YWwgcmVnaXN0ZXJzLiBFdmVy
eSBub2RlIHRoYXQKKyAgICAgICAgLy8gcHJvZHVjZXMgYSByZXN1bHQgbXVzdCBoYXZlIGEgdmly
dHVhbCByZWdpc3Rlci4KKyAgICAgICAgc3RkOjpzb3J0KG5vZGVzLmJlZ2luKCksIG5vZGVzLmVu
ZCgpLCBpbnRlcmZlcmVuY2VEZWdyZWVMZXNzVGhhbik7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG5vZGVzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTm9kZSogZmlyc3ROb2RlID0g
bm9kZXNbaV07CisgICAgICAgICAgICBpZiAoZmlyc3ROb2RlLT5oYXNWaXJ0dWFsUmVnaXN0ZXIo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPQorICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKyspOworICAgICAgICAgICAgZmlyc3ROb2Rl
LT5zZXRWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IGk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBzZWNvbmROb2Rl
ID0gbm9kZXNbal07CisgICAgICAgICAgICAgICAgaWYgKHNlY29uZE5vZGUtPmhhc1ZpcnR1YWxS
ZWdpc3RlcigpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBib29sIGludGVyZmVyZXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoSGFzaFNldDxO
b2RlKj4qIGVkZ2VzID0gc2Vjb25kTm9kZS0+bWlzYy5pbnRlcmZlcmVuY2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBlZGdlcy0+YmVnaW4o
KTsKKyAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IGVk
Z2VzLT5lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG90aGVyTm9kZSA9ICppdGVyOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+dXNlc1ZpcnR1YWxSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJm
ZXJlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKGludGVyZmVyZXMpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHNlY29uZE5vZGUtPnNldFZpcnR1YWxSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBVc2UgQ2hhaXRpbidzIGFsZ29yaXRobSBmb3IgcmVnaXN0ZXJzLiBEbyBhIHNl
cGFyYXRlIHJ1biBmb3IgdGhlIHR3byBjbGFzc2VzIG9mCisgICAgICAgIC8vIHJlZ2lzdGVycyB0
aGF0IHdlIGRlYWwgd2l0aC4KKyAgICAgICAgY2hhaXRpbkFsbG9jYXRlPEdlbmVyYWxSZWdpc3Rl
cnMsIEdQUkluZm8+KG5vZGVzKTsKKyAgICAgICAgY2hhaXRpbkFsbG9jYXRlPERvdWJsZVJlZ2lz
dGVycywgRlBSSW5mbz4obm9kZXMpOworICAgICAgICAKKyAgICAgICAgLy8gRmluYWxseSBkZWxl
dGUgYWxsIGludGVyZmVyZW5jZSBzZXRzLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewor
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUtPm1pc2MuaW50ZXJmZXJlbmNlKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBkZWxldGUgbm9kZS0+bWlzYy5pbnRlcmZl
cmVuY2U7CisgICAgICAgICAgICAgICAgbm9kZS0+bWlzYy5pbnRlcmZlcmVuY2UgPSAwOyAvLyBU
aGlzIG91Z2h0IG5vdCBiZSBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpdCBwcmVzZXJ2ZXMgc29t
ZSBraW5kIG9mIHNhbml0eS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGludGVyZmVyZShIYXNoU2V0
PE5vZGUqPiYgbGl2ZSkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBp
dGVyID0gbGl2ZS5iZWdpbigpOworICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5k
ID0gbGl2ZS5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgICAgIEludGVyZmVyZW5jZSog
bm9kZUludGVyZmVyZW5jZSA9IGludGVyZmVyZW5jZShub2RlKTsKKyAgICAgICAgICAgIEhhc2hT
ZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyMiA9IGxpdmUuYmVnaW4oKTsKKyAgICAgICAgICAgIGZv
ciAoOyBpdGVyMiAhPSBlbmQ7ICsraXRlcjIpCisgICAgICAgICAgICAgICAgbm9kZUludGVyZmVy
ZW5jZS0+YWRkKCppdGVyMik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBpbnRl
cmZlcmVXaXRoQ2hpbGRyZW4oTm9kZSogbm9kZSwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
aW50ZXJmZXJlbmNlKG5vZGUpLT5hZGQoZWRnZS5ub2RlKCkpOworICAgICAgICBpbnRlcmZlcmVu
Y2UoZWRnZS5ub2RlKCkpLT5hZGQobm9kZSk7CisgICAgfQorICAgIAorICAgIEludGVyZmVyZW5j
ZSogaW50ZXJmZXJlbmNlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBJbnRlcmZlcmVuY2Uq
IGludGVyZmVyZW5jZSA9IG5vZGUtPm1pc2MuaW50ZXJmZXJlbmNlOworICAgICAgICBpZiAoIWlu
dGVyZmVyZW5jZSkKKyAgICAgICAgICAgIG5vZGUtPm1pc2MuaW50ZXJmZXJlbmNlID0gaW50ZXJm
ZXJlbmNlID0gbmV3IEludGVyZmVyZW5jZSgpOworICAgICAgICByZXR1cm4gaW50ZXJmZXJlbmNl
OworICAgIH0KKyAgICAKKyAgICBib29sIGludGVyZmVyZXMoTm9kZSogYSwgTm9kZSogYikKKyAg
ICB7CisgICAgICAgIGlmICghYS0+bWlzYy5pbnRlcmZlcmVuY2UpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBhLT5taXNjLmludGVyZmVyZW5jZS0+Y29udGFpbnMo
Yik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBpbnRlcmZlcmVuY2VEZWdyZWUo
Tm9kZSogYSkKKyAgICB7CisgICAgICAgIGlmIChhLT5taXNjLmludGVyZmVyZW5jZSkKKyAgICAg
ICAgICAgIHJldHVybiBhLT5taXNjLmludGVyZmVyZW5jZS0+c2l6ZSgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgaW50ZXJmZXJlbmNlRGVncmVlTGVz
c1RoYW4oTm9kZSogYSwgTm9kZSogYikKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcmZlcmVu
Y2VEZWdyZWUoYSkgPCBpbnRlcmZlcmVuY2VEZWdyZWUoYik7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcywgdHlwZW5hbWUgUmVnaXN0ZXJJbmZv
PgorICAgIHZvaWQgY2hhaXRpbkFsbG9jYXRlKGNvbnN0IFZlY3RvcjxOb2RlKj4mIG9yaWdpbmFs
Tm9kZXMpCisgICAgeworICAgICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgb3JpZ2luYWxOb2Rlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgaWYgKG9yaWdpbmFsTm9kZXNbaV0tPmxvY2F0aW9uLmlzUmVnaXN0ZXJDbGFzczxyZWdp
c3RlckNsYXNzPigpKQorICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChvcmlnaW5hbE5vZGVz
W2ldKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmVjdG9yPE5vZGUqPiBhbGxvY2F0
aW9uU3RhY2s7CisgICAgICAgIFZlY3RvcjxOb2RlKj4gc3BpbGxzOworICAgICAgICB3aGlsZSAo
IW5vZGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBwdXNoIHRoaW5n
cyBvbnRvIHRoZSBhbGxvY2F0aW9uIHN0YWNrLgorICAgICAgICAgICAgd2hpbGUgKCFub2Rlcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnNvcnQobm9kZXMuYmVnaW4oKSwgbm9k
ZXMuZW5kKCksIHNwZWNpZmljSW50ZXJmZXJlbmNlTGVzc1RoYW48cmVnaXN0ZXJDbGFzcz4pOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChzcGVjaWZpY0ludGVyZmVyZW5j
ZURlZ3JlZTxyZWdpc3RlckNsYXNzPihub2Rlcy5sYXN0KCkpID49IFJlZ2lzdGVySW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnMpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3RTdGFja1NpemUgPSBhbGxvY2F0aW9u
U3RhY2suc2l6ZSgpOworICAgICAgICAgICAgICAgIHdoaWxlIChzcGVjaWZpY0ludGVyZmVyZW5j
ZURlZ3JlZTxyZWdpc3RlckNsYXNzPihub2Rlcy5sYXN0KCkpIDwgUmVnaXN0ZXJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycykKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvblN0YWNrLmFwcGVu
ZChub2Rlcy5yZW1vdmVMYXN0KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGxhc3RTdGFja1NpemU7IGkgPCBhbGxvY2F0aW9uU3RhY2suc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUludGVyZmVyZW5jZTxyZWdpc3Rl
ckNsYXNzPihhbGxvY2F0aW9uU3RhY2tbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHNwaWxsLgorICAgICAgICAgICAgaWYgKCFub2Rl
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2Rlcy5zaXplKCk7IGktLTsp
CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3BlY2lmaWNJbnRlcmZlcmVuY2VEZWdy
ZWU8cmVnaXN0ZXJDbGFzcz4obm9kZXNbaV0pID49IFJlZ2lzdGVySW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICByZW1vdmVJbnRlcmZlcmVuY2U8cmVnaXN0ZXJDbGFzcz4obm9kZXNbMF0pOworICAgICAg
ICAgICAgICAgIHNwaWxscy5hcHBlbmQobm9kZXNbMF0pOworICAgICAgICAgICAgICAgIG5vZGVz
WzBdID0gbm9kZXMubGFzdCgpOworICAgICAgICAgICAgICAgIG5vZGVzLnJlbW92ZUxhc3QoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IGFzc2ln
biByZWdpc3RlcnMuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFsbG9jYXRpb25TdGFjay5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhbGxvY2F0aW9uU3RhY2tb
aV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmQgYSByZWdpc3RlciB0aGF0IHdv
bid0IGludGVyZmVyZS4gRG8gdGhpcyBieSBmaXJzdCBmaW5kaW5nIHRoZSByZWdpc3RlcnMKKyAg
ICAgICAgICAgIC8vIHRoYXQgZG8gaW50ZXJmZXJlLgorICAgICAgICAgICAgQml0bWFwPFJlZ2lz
dGVySW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM+IGludGVyZmVyZW5jZTsKKyAgICAgICAgICAgIEhh
c2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbm9kZS0+bWlzYy5pbnRlcmZlcmVuY2UtPnNl
dDxyZWdpc3RlckNsYXNzPigpLmJlZ2luKCk7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6
aXRlcmF0b3IgZW5kID0gbm9kZS0+bWlzYy5pbnRlcmZlcmVuY2UtPnNldDxyZWdpc3RlckNsYXNz
PigpLmVuZCgpOworICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSAqaXRlcjsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCByZWdpc3RlckluZGV4ID0gb3RoZXJOb2RlLT5sb2NhdGlvbi5yZWdpc3RlckluZGV4
PHJlZ2lzdGVyQ2xhc3M+KCk7CisgICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVySW5kZXggPT0g
UmVnaXN0ZXJGaWxlOjpJbnZhbGlkSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZS5zZXQocmVnaXN0ZXJJbmRleCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHJlZ2lzdGVySW5kZXggPSAwOyByZWdpc3RlckluZGV4IDwgUmVnaXN0ZXJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytyZWdpc3RlckluZGV4KSB7CisgICAgICAgICAgICAg
ICAgaWYgKGludGVyZmVyZW5jZS5nZXQocmVnaXN0ZXJJbmRleCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBub2RlLT5sb2NhdGlvbi5zZXRSZWdpc3RlckluZGV4PHJlZ2lzdGVyQ2xhc3M+KHJlZ2lz
dGVySW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZm91
bmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRJbnRlcmZlcmVuY2U8cmVnaXN0ZXJD
bGFzcz4obm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJlc3RvcmUgaW50
ZXJmZXJlbmNlIGZyb20gc3BpbGxzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBzaW5j
ZSB3ZSBkb24ndAorICAgICAgICAvLyB1c2UgaW50ZXJmZXJlbmNlIGFmdGVyIHJlZ2lzdGVyIGFs
bG9jYXRpb24uCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNwaWxscy5zaXplKCk7IGktLTsp
CisgICAgICAgICAgICBhZGRJbnRlcmZlcmVuY2U8cmVnaXN0ZXJDbGFzcz4oc3BpbGxzW2ldKTsK
KyAgICB9CisgICAgICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFz
cz4KKyAgICBzdGF0aWMgdW5zaWduZWQgc3BlY2lmaWNJbnRlcmZlcmVuY2VEZWdyZWUoTm9kZSog
YSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IGEtPm51bVNjcmF0Y2hlczxyZWdp
c3RlckNsYXNzPigpOworICAgICAgICBpZiAoYS0+bWlzYy5pbnRlcmZlcmVuY2UpCisgICAgICAg
ICAgICByZXN1bHQgKz0gYS0+bWlzYy5pbnRlcmZlcmVuY2Uuc2V0PHJlZ2lzdGVyQ2xhc3M+KCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPFJlZ2lz
dGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAgICBzdGF0aWMgYm9vbCBzcGVjaWZpY0luZmVyZmVy
ZW5jZUxlc3NUaGFuKE5vZGUqIGEsIE5vZGUqIGIpCisgICAgeworICAgICAgICByZXR1cm4gc3Bl
Y2lmaWNJbnRlcmZlcmVuY2VEZWdyZWU8cmVnaXN0ZXJDbGFzcz4oYSkgPCBzcGVjaWZpY0ludGVy
ZmVyZW5jZURlZ3JlZTxyZWdpc3RlckNsYXNzPihiKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8UmVnaXN0ZXJDbGFzcyByZWdpc3RlckNsYXNzPgorICAgIHZvaWQgcmVtb3ZlSW50ZXJmZXJl
bmNlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3Ig
aXRlciA9IG5vZGUtPm1pc2MuaW50ZXJmZXJlbmNlLT5zZXQ8cmVnaXN0ZXJDbGFzcz4oKS5iZWdp
bigpOworICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbm9kZS0+bWlzYy5p
bnRlcmZlcmVuY2UtPnNldDxyZWdpc3RlckNsYXNzPigpLmVuZCgpOworICAgICAgICBmb3IgKDsg
aXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIGl0ZXItPm1pc2MuaW50ZXJmZXJlbmNl
LT5zZXQ8cmVnaXN0ZXJDbGFzcz4oKS5yZW1vdmUobm9kZSk7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAgICB2b2lkIGFkZEludGVyZmVy
ZW5jZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9y
IGl0ZXIgPSBub2RlLT5taXNjLmludGVyZmVyZW5jZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuYmVn
aW4oKTsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG5vZGUtPm1pc2Mu
aW50ZXJmZXJlbmNlLT5zZXQ8cmVnaXN0ZXJDbGFzcz4oKS5lbmQoKTsKKyAgICAgICAgZm9yICg7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICBpdGVyLT5taXNjLmludGVyZmVyZW5j
ZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuYWRkKG5vZGUpOworICAgIH0KK307CisKK2Jvb2wgcGVy
Zm9ybUxvY2F0aW9uQWxsb2NhdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkRGRyBMb2NhdGlvbiBBbGxvY2F0aW9uIFBoYXNlIik7CisgICAg
cmV0dXJuIHJ1blBoYXNlPExvY2F0aW9uQWxsb2NhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9jYXRpb25BbGxv
Y2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTG9jYXRpb25BbGxvY2F0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHTG9jYXRpb25BbGxvY2F0aW9uUGhhc2VfaAorI2RlZmluZSBERkdMb2NhdGlvbkFsbG9j
YXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gVGhpcyBhbGxvY2F0ZXMgYm90aCByZWdp
c3RlcnMgYW5kIHNwaWxsIHNsb3RzLgorCitib29sIHBlcmZvcm1Mb2NhdGlvbkFsbG9jYXRpb24o
R3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NiArNTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdyYXBo
Owogc3RydWN0IEJhc2ljQmxvY2s7CitzdHJ1Y3QgTm9kZTsKIAogc3RydWN0IFN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhIHsKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlOwpAQCAtMTM5
LDYgKzE0MCwyNCBAQCBzdHJ1Y3QgU3dpdGNoRGF0YSB7CiAgICAgYm9vbCBkaWRVc2VKdW1wVGFi
bGU7CiB9OwogCisvLyBUaGlzIGdldHMgdXNlZCBieSB0aGUgbG9jYXRpb24gYWxsb2NhdGlvbiBw
aGFzZS4KK3N0cnVjdCBJbnRlcmZlcmVuY2UgeworICAgIEhhc2hTZXQ8Tm9kZSo+IHZhbHVlczsK
KyAgICBIYXNoU2V0PE5vZGUqPiBkb3VibGVzOworICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVy
Q2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAgICBIYXNoU2V0PE5vZGUqPiYgc2V0KCkKKyAgICB7Cisg
ICAgICAgIGlmIChyZWdpc3RlckNsYXNzID09IEdlbmVyYWxSZWdpc3RlcnMpCisgICAgICAgICAg
ICByZXR1cm4gdmFsdWVzOworICAgICAgICByZXR1cm4gZG91YmxlczsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhZGQoTm9kZSopOworICAgIGJvb2wgY29udGFpbnMoTm9kZSopIGNvbnN0OworICAg
IHNpemVfdCBzaXplKCkgY29uc3Q7Cit9OworCiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNzaW5n
IGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGluZ3Vp
c2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29kZUJs
b2NrIGRhdGEgc3RydWN0dXJlIC0gCiAvLyBhIGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwgb3Ig
aWRlbnRpZmllcikgZnJvbSBhIE5vZGUqLgpAQCAtMTY3LDYgKzE4NiwxMCBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAg
ICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKKyAg
ICAgICAgLCBtX29wSW5mbygwKQorICAgICAgICAsIG1fb3BJbmZvMigwKQorICAgICAgICAsIG1f
c2NyYXRjaEdQUnMoMCkKKyAgICAgICAgLCBtX3NjcmF0Y2hGUFJzKDApCiAgICAgewogICAgICAg
ICBtaXNjLnJlcGxhY2VtZW50ID0gMDsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3Ap
OwpAQCAtMTgwLDYgKzIwMywxMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV92aXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAg
ICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICAgICAgLCBtX29wSW5mbygwKQorICAg
ICAgICAsIG1fb3BJbmZvMigwKQorICAgICAgICAsIG1fc2NyYXRjaEdQUnMoMCkKKyAgICAgICAg
LCBtX3NjcmF0Y2hGUFJzKDApCiAgICAgewogICAgICAgICBtaXNjLnJlcGxhY2VtZW50ID0gMDsK
ICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwpAQCAtMTk1LDYgKzIyMiw5IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVkaWN0
aW9uKFNwZWNOb25lKQogICAgICAgICAsIG1fb3BJbmZvKGltbS5tX3ZhbHVlKQorICAgICAgICAs
IG1fb3BJbmZvMigwKQorICAgICAgICAsIG1fc2NyYXRjaEdQUnMoMCkKKyAgICAgICAgLCBtX3Nj
cmF0Y2hGUFJzKDApCiAgICAgewogICAgICAgICBtaXNjLnJlcGxhY2VtZW50ID0gMDsKICAgICAg
ICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwpAQCAtMjExLDYgKzI0MSw4IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgICAgICwgbV9vcElu
Zm8oaW1tMS5tX3ZhbHVlKQogICAgICAgICAsIG1fb3BJbmZvMihpbW0yLm1fdmFsdWUpCisgICAg
ICAgICwgbV9zY3JhdGNoR1BScygwKQorICAgICAgICAsIG1fc2NyYXRjaEZQUnMoMCkKICAgICB7
CiAgICAgICAgIG1pc2MucmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRG
bGFncyhvcCk7CkBAIC0yMjcsNiArMjU5LDggQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1f
cHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCiAg
ICAgICAgICwgbV9vcEluZm8yKGltbTIubV92YWx1ZSkKKyAgICAgICAgLCBtX3NjcmF0Y2hHUFJz
KDApCisgICAgICAgICwgbV9zY3JhdGNoRlBScygwKQogICAgIHsKICAgICAgICAgbWlzYy5yZXBs
YWNlbWVudCA9IDA7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTExNTAs
NiArMTE4NCwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX3ZpcnR1YWxSZWdp
c3RlcjsKICAgICB9CiAgICAgCisgICAgYm9vbCB1c2VzVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgeworICAgICAgICByZXR1cm4gbV92aXJ0dWFs
UmVnaXN0ZXIgPT0gdmlydHVhbFJlZ2lzdGVyOworICAgIH0KKyAgICAKICAgICB2b2lkIHNldFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKQEAgLTE1MDEsNiArMTU0MCwyNSBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIHJldHVybiBub2RlQ2FuU3BlY3VsYXRlSW50NTIoYXJpdGhOb2RlRmxh
Z3MoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0TnVtU2NyYXRjaGVzKHVuc2lnbmVkIG51
bUdQUnMsIHVuc2lnbmVkIG51bUZQUnMpCisgICAgeworICAgICAgICBtX3NjcmF0Y2hHUFJzID0g
bnVtR1BSczsKKyAgICAgICAgbV9zY3JhdGNoRlBScyA9IG51bUZQUnM7CisgICAgICAgIEFTU0VS
VChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zY3JhdGNoR1BScykgPT0gbnVtR1BScyk7CisgICAg
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zY3JhdGNoRlBScykgPT0gbnVtRlBS
cyk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bVNjcmF0Y2hHUFJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY3JhdGNoR1BSczsgfQorICAgIHVuc2lnbmVkIG51bVNjcmF0Y2hGUFJzKCkgY29u
c3QgeyByZXR1cm4gbV9zY3JhdGNoRlBSczsgfQorICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVy
Q2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAgICB1bnNpZ25lZCBudW1TY3JhdGNoZXMoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKHJlZ2lzdGVyQ2xhc3MgPT0gR2VuZXJhbFJlZ2lzdGVycykKKyAg
ICAgICAgICAgIHJldHVybiBudW1TY3JhdGNoR1BScygpOworICAgICAgICByZXR1cm4gbnVtU2Ny
YXRjaEZQUnMoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBkdW1wQ2hpbGRyZW4oUHJpbnRTdHJl
YW0mIG91dCkKICAgICB7CiAgICAgICAgIGlmICghY2hpbGQxKCkpCkBAIC0xNTM3LDggKzE1OTUs
MTQgQEAgcHJpdmF0ZToKICAgICAvLyBiaWcgZW5vdWdoIHRvIHN0b3JlIGEgcG9pbnRlci4KICAg
ICB1aW50cHRyX3QgbV9vcEluZm87CiAgICAgdWludHB0cl90IG1fb3BJbmZvMjsKKyAgICAKKyAg
ICAvLyBVc2VkIGZvciBTU0EgcmVnaXN0ZXIgYWxsb2NhdGlvbi4KKyAgICB1aW50OF90IG1fc2Ny
YXRjaEdQUnM7CisgICAgdWludDhfdCBtX3NjcmF0Y2hGUFJzOwogCiBwdWJsaWM6CisgICAgRm9y
bWF0dGVkUmVnaXN0ZXIgbG9jYXRpb247CisgICAgCiAgICAgLy8gRmllbGRzIHVzZWQgYnkgdmFy
aW91cyBhbmFseXNlcy4KICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOwogICAgIApAQCAtMTU1NSw2
ICsxNjE5LDcgQEAgcHVibGljOgogICAgIHVuaW9uIHsKICAgICAgICAgTm9kZSogcmVwbGFjZW1l
bnQ7CiAgICAgICAgIEJhc2ljQmxvY2sqIG93bmVyOworICAgICAgICBJbnRlcmZlcmVuY2UqIGlu
dGVyZmVyZW5jZTsKICAgICB9IG1pc2M7CiB9OwogCkBAIC0xNTg1LDYgKzE2NTAsMzAgQEAgQ1N0
cmluZyBub2RlTWFwRHVtcChjb25zdCBUJiBub2RlTWFwLCBEdQogICAgIHJldHVybiBvdXQudG9D
U3RyaW5nKCk7CiB9CiAKK2lubGluZSB2b2lkIEludGVyZmVyZW5jZTo6YWRkKE5vZGUqIG5vZGUp
Cit7CisgICAgaWYgKHVzZXNGUFIobm9kZS0+ZGF0YUZvcm1hdCgpKSkgeworICAgICAgICBkb3Vi
bGVzLmFkZChub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQo
dXNlc0dQUihkYXRhLT5kYXRhRm9ybWF0KCkpKTsKKyAgICB2YWx1ZXMuYWRkKG5vZGUpOworfQor
CitpbmxpbmUgYm9vbCBJbnRlcmZlcmVuY2U6OmNvbnRhaW5zKE5vZGUqIG5vZGUpIGNvbnN0Cit7
CisgICAgaWYgKHVzZXNGUFIobm9kZS0+ZGF0YUZvcm1hdCgpKSkKKyAgICAgICAgcmV0dXJuIGRv
dWJsZXMuY29udGFpbnMobm9kZSk7CisgICAgCisgICAgcmV0dXJuIHZhbHVlcy5jb250YWlucyhu
b2RlKTsKK30KKworaW5saW5lIHNpemVfdCBJbnRlcmZlcmVuY2U6OnNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBkb3VibGVzLnNpemUoKSArIHZhbHVlcy5zaXplKCk7Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAJKHJldmlzaW9uIDE2MDU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg3LDM5ICs4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7
ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2Fs
OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
dmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCksIHZhcmlhYmxl
LT5mbHVzaGVkQXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUsIHZhcmlh
YmxlLT5mbHVzaGVkQXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5k
Q2hlY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgWm9tYmllSGlu
dDogewotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gQXZhaWxhYmlsaXR5Ojp1
bmF2YWlsYWJsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXI6OmZv
cndhcmREZWx0YUZvck5vZGUobm9kZSkuYXBwbHlEZWx0YShhdmFpbGFiaWxpdHkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHJldmlzaW9uIDE2MDU5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsMTMg
QEAgYm9vbCBydW5QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgcmV0dXJuIHJ1bkFuZExvZyhwaGFz
ZSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFBoYXNlVHlwZSwgdGVtcGxhdGUgQXJnMVR5cGU+
Citib29sIHJ1blBoYXNlKEdyYXBoJiBncmFwaCwgY29uc3QgQXJnMVR5cGUmIGFyZzEpCit7Cisg
ICAgUGhhc2VUeXBlIHBoYXNlKGdyYXBoLCBhcmcxKTsKKyAgICByZXR1cm4gcnVuQW5kTG9nKHBo
YXNlKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VsdEFuZFNj
cmF0Y2hDYWxjdWxhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRjaENh
bGN1bGF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAi
REZHU2NvcmVCb2FyZC5oIgorI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJT
dGFja0FsaWdubWVudC5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBSZXN1bHRBbmRTY3JhdGNoQ2FsY3Vs
YXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgUmVzdWx0QW5kU2NyYXRj
aENhbGN1bGF0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
cmVzdWx0LWFuZC1zY3JhdGNoIGNhbGN1bGF0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
OworICAgICAgICAKKyAgICAgICAgLy8gRGVyaXZlIHRoZSByZXN1bHQgZm9ybWF0IGZvciBlYWNo
IG5vZGUgYW5kIHRoZSBudW1iZXIgb2Ygc2NyYXRjaCByZWdpc3RlcnMgaXQKKyAgICAgICAgLy8g
aXMgZXhwZWN0ZWQgdG8gdXNlLgorICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgICAgICBtX25vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICBoYW5kbGVOb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBoYW5kbGVOb2Rl
KCkKKyAgICB7CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICBOb2RlKiBtX25vZGU7Cit9Owor
Citib29sIHBlcmZvcm1SZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb24oR3JhcGgmIGdyYXBoKQor
eworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgUmVzdWx0LWFuZC1zY3Jh
dGNoIENhbGN1bGF0aW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFJlc3VsdEFuZFNj
cmF0Y2hDYWxjdWxhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1
bGF0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2VfaAorI2RlZmlu
ZSBERkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHUGhhc2Uu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKwor
Ly8gRmlndXJlcyBvdXQgd2hhdCB0aGUgcmVzdWx0IHR5cGUgYW5kIG51bWJlciBvZiBzY3JhdGNo
IHJlZ2lzdGVycyBpcyBmb3IgZWFjaAorLy8gbm9kZS4KKworYm9vbCBwZXJmb3JtUmVzdWx0QW5k
U2NyYXRjaENhbGN1bGF0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUmVzdWx0QW5kU2Ny
YXRjaENhbGN1bGF0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY4
OSw2ICs2ODksMTEgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBJZiBpbiBTU0EsIGNoZWNrIHRoYXQgdGhpcyBub2RlIGlzbid0IGxp
dmUgYXQgdGhlIHRhaWwgb2YgdGhlIGJsb2NrLgorICAgICAgICBpZiAobV9qaXQuZ3JhcGgoKS5t
X2Zvcm0gPT0gU1NBCisgICAgICAgICAgICAmJiBtX2Jsb2NrLT5zc2EtPmxpdmVBdFRhaWwuZmlu
ZChtX2N1cnJlbnROb2RlKSAhPSBtX2Jsb2NrLT5zc2EtPmxpdmVBdFRhaWwuZW5kKCkpCisgICAg
ICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxhc3RO
b2RlIGlzIGEgYnJhbmNoIG9uIHRoaXMgbm9kZS4KICAgICAgICAgTm9kZSogbGFzdE5vZGUgPSBt
X2Jsb2NrLT5sYXN0KCk7CkBAIC0yMjE4LDcgKzIyMjMsOSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICByZXR1cm4gZ2VuZXJhdGlvbkluZm8oZWRnZS5ub2RlKCkpOwogICAgIH0KLQorICAgIAor
ICAgIHZvaWQgc2h1ZmZsZVRvQ2Fub25pY2FsKCk7CisgICAgCiAgICAgLy8gVGhlIEpJVCwgd2hp
bGUgYWxzbyBwcm92aWRlcyBNYWNyb0Fzc2VtYmxlciBmdW5jdGlvbmFsaXR5LgogICAgIEpJVENv
bXBpbGVyJiBtX2ppdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVn
aXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw4IEBA
IHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAgeworICAgICAgICBBU1NFUlQobV9n
cmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKICAgICAgICAgU2NvcmVCb2Fy
ZCBzY29yZUJvYXJkKG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKTsKICAgICAgICAgc2NvcmVC
b2FyZC5hc3NlcnRDbGVhcigpOwogICAgICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9uIDE2MDU5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyAr
NDIwLDggQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyB1bnNpZ25lZCB0b0luZGV4KEdQUlJl
ZyByZWcpCiAgICAgewotICAgICAgICBBU1NFUlQocmVnICE9IEludmFsaWRHUFJSZWcpOworICAg
ICAgICBpZiAocmVnID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXR1cm4gSW52YWxp
ZEluZGV4OwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihyZWcpIDwgMTYpOwogICAg
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5kZXhGb3JSZWdpc3RlclsxNl0gPSB7IDAsIDIs
IDEsIDMsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4LCA1LCA0LCA2LCA3LCA4LCBJbnZhbGlk
SW5kZXgsIDksIDEwLCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCB9OwogICAgICAgICByZXR1
cm4gaW5kZXhGb3JSZWdpc3RlcltyZWddOwpAQCAtNDM4LDcgKzQzOSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgfTsKICAgICAgICAgcmV0dXJuIG5hbWVGb3JSZWdpc3RlcltyZWddOwogICAgIH0KLQor
ICAgIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJbnZhbGlkSW5kZXggPSAweGZmZmZmZmZm
OwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219285</attachid>
            <date>2013-12-15 18:20:06 -0800</date>
            <delta_ts>2013-12-15 20:49:36 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>64362</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkocmV2
aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3Jt
YXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwxNiBAQCBpbmxpbmUgYm9vbCBpc0pT
Qm9vbGVhbihEYXRhRm9ybWF0IGZvcm1hCiAgICAgcmV0dXJuIGlzSlNGb3JtYXQoZm9ybWF0LCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKIH0KIAoraW5saW5lIGJvb2wgdXNlc0ZQUihEYXRhRm9ybWF0
IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGU7CiB9CiAK
K2lubGluZSBib29sIHVzZXNHUFIoRGF0YUZvcm1hdCBmb3JtYXQpCit7CisgICAgcmV0dXJuICF1
c2VzRlBSKGZvcm1hdCkgJiYgZm9ybWF0ICE9IERhdGFGb3JtYXROb25lOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwogI2VuZGlmIC8vIERhdGFGb3JtYXRfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJp
bGl0eUZvclJlZ2lzdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQXZhaWxh
YmlsaXR5Rm9yUmVnaXN0ZXIgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXI6OmZvcndhcmREZWx0YUZv
ck5kb2UoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJl
Z2lzdGVyKAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
dmFyaWFibGUtPmZsdXNoZWRBdCgpKSwKKyAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpKTsK
KyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBjYXNlIEdldEFyZ3VtZW50OiB7
CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKAorICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSksCisgICAg
ICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgY2FzZSBNb3ZIaW50OgorICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7CisgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKAorICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSksCisgICAgICAgICAgICB2YXJp
YWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgY2Fz
ZSBab21iaWVIaW50OiB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZv
clJlZ2lzdGVyKAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpLAorICAg
ICAgICAgICAgdmFyaWFibGUtPmxvY2FsKCkpOworICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rl
cigpOworICAgIH0KK30KKwordm9pZCBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiciIsIG1fcmVnLm9mZnNldCgp
LCAiOiAiLCBtX2F2YWlsYWJpbGl0eSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdp
c3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdmFpbGFiaWxpdHlGb3JS
ZWdpc3Rlcl9oCisjZGVmaW5lIERGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIg
eworcHVibGljOgorICAgIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKCkgeyB9CisgICAgCisgICAg
QXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKKyAgICAgICAgOiBtX2F2YWlsYWJpbGl0eShhdmFpbGFiaWxpdHkpCisg
ICAgICAgICwgbV9yZWdpc3RlcihyZWcpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2F2YWlsYWJpbGl0eSAmJiAhbV9yZWdpc3Rlci5p
c1ZhbGlkKCk7IH0KKyAgICAKKyAgICBjb25zdCBBdmFpbGFiaWxpdHkmIGF2YWlsYWJpbGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5OyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXI7IH0KKyAgICAKKyAgICAv
LyBSZXR1cm5zIGFuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyIHRoYXQgZGVzY3JpYmVzIHRoZSBh
dmFpbGFiaWxpdHkgZGVsdGEsIHdoZW4KKyAgICAvLyBzY2FubmluZyBmb3J3YXJkLCBmb3IgYSBu
b2RlLgorICAgIHN0YXRpYyBBdmFpbGFiaWxpdHlGb3JSZWdpc3RlciBmb3J3YXJkRGVsdGFGb3JO
b2RlKE5vZGUqKTsKKyAgICAKKyAgICB2b2lkIGFwcGx5RGVsdGEoT3BlcmFuZHM8QXZhaWxhYmls
aXR5PiYgb3BlcmFuZHMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBvcGVyYW5kcy5vcGVyYW5kKHZpcnR1YWxSZWdpc3Rlcigp
KSA9IGF2YWlsYWJpbGl0eSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQXZhaWxhYmlsaXR5IG1fYXZhaWxhYmls
aXR5OworICAgIFZpcnR1YWxSZWdpc3RlciBtX3JlZ2lzdGVyOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0
Nyw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAg
SGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJh
Y3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZh
bHVlPiB2YWx1ZXNBdFRhaWw7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxOb2RlKj4+
IGV4dHJhS2lsbHM7CiAgICAgICAgIAogICAgICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKICAg
ICAgICAgflNTQURhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9y
bWF0dGVkUmVnaXN0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRm9ybWF0dGVkUmVnaXN0ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGb3JtYXR0ZWRSZWdpc3Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRm9ybWF0dGVkUmVnaXN0ZXIu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK3ZvaWQgRm9ybWF0dGVkUmVnaXN0ZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSkpOwor
ICAgIAorICAgIGlmIChkYXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBvdXQucHJpbnQoIjoiKTsKKyAgICBpZiAodXNlc0dQUihkYXRhRm9y
bWF0KCkpKQorICAgICAgICBvdXQucHJpbnQoZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAgb3V0
LnByaW50KGZwcigpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rm9ybWF0dGVkUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Zvcm1hdHRlZFJlZ2lzdGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Zvcm1hdHRlZFJlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdGb3JtYXR0ZWRSZWdpc3Rlcl9oCisjZGVmaW5lIERGR0Zvcm1hdHRlZFJl
Z2lzdGVyX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5o
IgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBSZWdpc3RlckNsYXNzIHsgR2VuZXJhbFJl
Z2lzdGVycywgRG91YmxlUmVnaXN0ZXJzIH07CisKK2NsYXNzIEZvcm1hdHRlZFJlZ2lzdGVyIHsK
K3B1YmxpYzoKKyAgICBGb3JtYXR0ZWRSZWdpc3RlcigpCisgICAgICAgIDogbV9yZWdpc3Rlcihz
dGF0aWNfY2FzdDxpbnQ4X3Q+KEludmFsaWRHUFJSZWcpKQorICAgICAgICAsIG1fZGF0YUZvcm1h
dChEYXRhRm9ybWF0Tm9uZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxHUFJS
ZWc+KG1fcmVnaXN0ZXIpID09IEludmFsaWRHUFJSZWcpOworICAgICAgICBBU1NFUlQoc3RhdGlj
X2Nhc3Q8RlBSUmVnPihtX3JlZ2lzdGVyKSA9PSBJbnZhbGlkRlBSUmVnKTsKKyAgICB9CisgICAg
CisgICAgRm9ybWF0dGVkUmVnaXN0ZXIoRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgICAgICA6
IG1fcmVnaXN0ZXIoc3RhdGljX2Nhc3Q8aW50OF90PihJbnZhbGlkR1BSUmVnKSkKKyAgICAgICAg
LCBtX2RhdGFGb3JtYXQoc3RhdGljX2Nhc3Q8aW50OF90PihkYXRhRm9ybWF0KSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIEZvcm1hdHRlZFJlZ2lzdGVyKERhdGFGb3JtYXQgZGF0YUZvcm1hdCwg
R1BSUmVnIGdwcikKKyAgICAgICAgOiBtX3JlZ2lzdGVyKHN0YXRpY19jYXN0PGludDhfdD4oZ3By
KSkKKyAgICAgICAgLCBtX2RhdGFGb3JtYXQoZGF0YUZvcm1hdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCh1c2VzR1BSKGRhdGFGb3JtYXQpKTsKKyAgICB9CisgICAgCisgICAgRm9ybWF0dGVkUmVn
aXN0ZXIoRGF0YUZvcm1hdCBkYXRhRm9ybWF0LCBGUFJSZWcgZnByKQorICAgICAgICA6IG1fcmVn
aXN0ZXIoc3RhdGljX2Nhc3Q8aW50OF90PihmcHIpKQorICAgICAgICAsIG1fZGF0YUZvcm1hdChk
YXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNGUFIoZGF0YUZvcm1hdCkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlZ2lzdGVyKEdQUlJlZyBncHIpCisgICAgeworICAg
ICAgICBBU1NFUlQodXNlc0dQUihkYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgbV9yZWdpc3RlciA9
IHN0YXRpY19jYXN0PGludDhfdD4oZ3ByKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRSZWdp
c3RlcihGUFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNGUFIoZGF0YUZvcm1h
dCgpKSk7CisgICAgICAgIG1fcmVnaXN0ZXIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGZwcik7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAg
ICB2b2lkIHNldFJlZ2lzdGVySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBp
ZiAocmVnaXN0ZXJDbGFzcyA9PSBHZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgc2V0UmVn
aXN0ZXIoR1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzZXRSZWdpc3RlcihGUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAgICBib29sIGlz
UmVnaXN0ZXJDbGFzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAocmVnaXN0ZXJDbGFzcyA9
PSBHZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIHVzZXNHUFIoZGF0YUZvcm1h
dCgpKTsKKyAgICAgICAgcmV0dXJuIHVzZXNGUFIoZGF0YUZvcm1hdCgpKTsKKyAgICB9CisgICAg
CisgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RGF0YUZvcm1hdD4obV9kYXRhRm9ybWF0KTsgfQorICAgIAorICAgIEdQUlJlZyBncHIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNHUFIoZGF0YUZvcm1hdCgpKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fcmVnaXN0ZXIpOworICAgIH0KKyAgICAKKyAg
ICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh1c2VzRlBSKGRhdGFG
b3JtYXQoKSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPihtX3JlZ2lzdGVy
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8UmVnaXN0ZXJDbGFzcyByZWdpc3RlckNsYXNz
PgorICAgIHVuc2lnbmVkIHJlZ2lzdGVySW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KHJlZ2lzdGVyQ2xhc3MgPT0gR2VuZXJhbFJlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybiBH
UFJJbmZvOjp0b0luZGV4KGdwcigpKTsKKyAgICAgICAgcmV0dXJuIEZQUkluZm86OnRvSW5kZXgo
ZnByKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybWF0dGVk
UmVnaXN0ZXImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXIg
PT0gb3RoZXIubV9yZWdpc3RlcgorICAgICAgICAgICAgJiYgbV9kYXRhRm9ybWF0ID09IG90aGVy
Lm1fZGF0YUZvcm1hdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZv
cm1hdHRlZFJlZ2lzdGVyJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgRm9y
bWF0dGVkUmVnaXN0ZXImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fcmVnaXN0
ZXIgIT0gb3RoZXIubV9yZWdpc3RlcikKKyAgICAgICAgICAgIHJldHVybiBtX3JlZ2lzdGVyIDwg
b3RoZXIubV9yZWdpc3RlcjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YUZvcm1hdCA8IG90aGVyLm1f
ZGF0YUZvcm1hdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIGludDhfdCBtX3JlZ2lzdGVyOworICAgIGludDhfdCBt
X2RhdGFGb3JtYXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Zvcm1hdHRlZFJlZ2lzdGVyX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw4ICszOCw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgTGl2
ZW5lc3NBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKLSAgICBMaXZlbmVz
c0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQotICAgICAgICA6IFBoYXNlKGdyYXBoLCAibGl2
ZW5lc3MgYW5hbHlzaXMiKQorICAgIExpdmVuZXNzQW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgs
IEF2YWlsYWJpbGl0eUxpdmVuZXNzTW9kZSBhdmFpbGFiaWxpdHlNb2RlKQorICAgICAgICA6IFBo
YXNlKGdyYXBoLCBhdmFpbGFiaWxpdHlNb2RlID09IEF2YWlsYWJpbGl0eU5vdExpdmUgPyAibGl2
ZW5lc3MgYW5hbHlzaXMiIDogImxpdmVuZXNzIGFuYWx5c2lzIChpbmNsLiBhdmFpbGFiaWxpdHkp
IikKKyAgICAgICAgLCBtX2F2YWlsYWJpbGl0eU1vZGUoYXZhaWxhYmlsaXR5TW9kZSkKICAgICB7
CiAgICAgfQogICAgIApAQCAtODYsNTEgKzg3LDEwOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAo
IWJsb2NrKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICAgICAgYmxvY2stPnNz
YS0+ZXh0cmFLaWxscy5jbGVhcigpOworICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEl0J3Mg
bGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhh
dCB1c2UKICAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTg0NTUKICAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFp
bDsKICAgICAgICAgCisgICAgICAgIGlmIChtX2F2YWlsYWJpbGl0eU1vZGUgPT0gQXZhaWxhYmls
aXR5SXNMaXZlKSB7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgICAgIG1fZGVsdGFzLnJlc2l6ZShibG9jay0+c2l6
ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5
Rm9yUmVnaXN0ZXIgZGVsdGEgPQorICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OmZv
cndhcmREZWx0YUZvck5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCEhZGVsdGEpIHsK
KyAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5IG9sZEF2YWlsYWJpbGl0eSA9CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKGRlbHRhLnZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGEuYXBwbHlEZWx0YShtX2F2YWls
YWJpbGl0eSk7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhID0gQXZhaWxhYmlsaXR5Rm9yUmVn
aXN0ZXIob2xkQXZhaWxhYmlsaXR5LCBkZWx0YS52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZGVsdGFzW25vZGVJbmRleF0gPSBkZWx0YTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKG1fYXZhaWxh
YmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCk7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsg
bm9kZUluZGV4LS07KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CisgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAg
ICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246CisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyAgICBuOiBVcHNpbG9uKEB4LCBecCkKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBwIGFuZCBAbiBhbmQgdXNl
cyBAeC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhp
OgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgcDogUGhpKCkKKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFdlIHNheSBub3RoaW5nLiBJdCdz
IG5laXRoZXIgYSB1c2Ugbm9yIGEgZGVmLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gR2l2ZW4gYSBub2RlOgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gICAgbjogVGhpbmd5KEBhLCBAYiwgQGMpCisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAbiBhbmQgdXNlcyBAYSwgQGIsIEBj
LgogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBHaXZlbiBhbiBVcHNpbG9uOgotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIG46IFVwc2lsb24oQHgsIF5wKQotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBwIGFuZCBAbiBhbmQg
dXNlcyBAeC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBHaXZlbiBhIFBoaToKLSAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBwOiBQaGkoKQotICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgIC8vIFdlIHNheSBub3RoaW5nLiBJdCdzIG5laXRoZXIgYSB1c2Ugbm9yIGEg
ZGVmLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEdpdmVuIGEgbm9kZToKLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBuOiBUaGluZ3koQGEsIEBiLCBAYykKLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAbiBhbmQgdXNl
cyBAYSwgQGIsIEBjLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgVXBzaWxvbjogewotICAgICAgICAgICAgICAgIE5vZGUq
IHBoaSA9IG5vZGUtPnBoaSgpOwotICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUocGhpKTsK
LSAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOwotICAgICAgICAgICAgICAgIG1f
bGl2ZS5hZGQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIFVwc2lsb246IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
cGhpID0gbm9kZS0+cGhpKCk7CisgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUocGhp
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9saXZlLmFkZChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIFBoaTogewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOworICAgICAg
ICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRD
aGlsZFVzZSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7Ci0gICAgICAgICAgICAgICAgREZHX05PREVf
RE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkQ2hpbGRVc2UpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFiaWxpdHlNb2RlID09
IEF2YWlsYWJpbGl0eUlzTGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2Fu
RXhpdCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9hdmFpbGFiaWxpdHkuc2l6ZSgpOyAraSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBtX2F2YWlsYWJpbGl0eVtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmx1c2guZm9ybWF0KCkgIT0gRGVhZEZsdXNoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGZsdXNoLmZvcm1hdCgpICE9IENvbmZs
aWN0aW5nRmx1c2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFhdmFpbGxhYmlsaXR5Lmhhc05vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGF2YWlsYWJpbGl0eS5ub2RlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fbGl2ZS5jb250YWlucyhjaGlsZCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2F2YWlsYWJpbGl0
eS5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBp
c0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgbm9kZS0+Y29kZU9yaWdpbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0xpdmUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChjaGlsZCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgVmVjdG9yPE5vZGUqPj46OkFkZFJlc3VsdCBy
ZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+c3NhLT5leHRy
YUtpbGxzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFwcGVuZChjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobV9hdmFpbGFiaWxpdHlNb2RlID09IEF2YWlsYWJpbGl0eUlzTGl2
ZSkKKyAgICAgICAgICAgICAgICBtX2RlbHRhc1tub2RlSW5kZXhdLmFwcGx5KG1fYXZhaWxhYmls
aXR5KTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKG1fYXZhaWxhYmlsaXR5TW9k
ZSA9PSBBdmFpbGFiaWxpdHlJc0xpdmUpCisgICAgICAgICAgICBBU1NFUlQobV9hdmFpbGFiaWxp
dHkgPT0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkKTsKKyAgICAgICAgCiAgICAgICAg
IGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCkBAIC0xNTAsMTQgKzIwOCwxNyBAQCBwcml2YXRlOgogICAgICAgICBlZGdl
LnNldEtpbGxTdGF0dXMobV9saXZlLmFkZChlZGdlLm5vZGUoKSkuaXNOZXdFbnRyeSA/IERvZXNL
aWxsIDogRG9lc05vdEtpbGwpOwogICAgIH0KICAgICAKKyAgICBBdmFpbGFiaWxpdHlMaXZlbmVz
c01vZGUgbV9hdmFpbGFiaWxpdHlNb2RlOwogICAgIGJvb2wgbV9jaGFuZ2VkOwogICAgIEhhc2hT
ZXQ8Tm9kZSo+IG1fbGl2ZTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IG1fYXZhaWxhYmls
aXR5OworICAgIFZlY3RvcjxBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcj4gbV9kZWx0YXM7CiB9Owog
Ci1ib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9y
bUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmIGdyYXBoLCBBdmFpbGFiaWxpdHlMaXZlbmVzc01vZGUg
bW9kZSkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIExpdmVuZXNz
IEFuYWx5c2lzIFBoYXNlIik7Ci0gICAgcmV0dXJuIHJ1blBoYXNlPExpdmVuZXNzQW5hbHlzaXNQ
aGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFzZTxMaXZlbmVzc0FuYWx5c2lzUGhhc2U+
KGdyYXBoLCBtb2RlKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiwxNSBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogCi0vLyBDb21w
dXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmxpdmVBdEhlYWQvbGl2ZUF0VGFpbC4KKy8vIENvbXB1dGVz
IEJhc2ljQmxvY2s6OnNzYS0+bGl2ZUF0SGVhZC9saXZlQXRUYWlsLiBNYXkgb3IgbWF5IG5vdCBp
bmNsdWRlIHRoaW5ncworLy8gdGhhdCBhcmUgcGFydCBvZiBBdmFpbGFiaWxpdHkuCiAKLWJvb2wg
cGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmKTsKK2VudW0gQXZhaWxhYmlsaXR5TGl2ZW5l
c3NNb2RlIHsKKyAgICBBdmFpbGFiaWxpdHlOb3RMaXZlLCAvLyBVc2VmdWwgaWYgeW91J3JlIGp1
c3QgZG9pbmcgcHJ1bmluZyBmb3IgQ0ZBLgorICAgIEF2YWlsYWJpbGl0eUlzTGl2ZSAvLyBVc2Vm
dWwgaWYgeW91J3JlIGRvaW5nIHJlZ2lzdGVyIGFsbG9jYXRpb24uCit9OworCitib29sIHBlcmZv
cm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiwgQXZhaWxhYmlsaXR5TGl2ZW5lc3NNb2RlID0gQXZh
aWxhYmlsaXR5Tm90TGl2ZSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9j
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTG9jYXRpb25BbGxvY2F0aW9uUGhhc2Uu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdTY29yZUJvYXJkLmgiCisjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1
ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIExvY2F0aW9uQWxsb2NhdGlv
blBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBMb2NhdGlvbkFsbG9jYXRpb25Q
aGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJsb2NhdGlvbiBhbGxv
Y2F0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgLy8g
Q2xlYXJzIG1pc2MuaW50ZXJmZXJlbmNlIGJlY2F1c2UgaXQgb3ZlcmxhcHMgbWlzYy5yZXBsYWNl
bWVudC4KKyAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICAKKyAg
ICAgICAgLy8gQ29tcHV0ZSBpbnRlcmZlcmVuY2UuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZSA9IGJsb2NrLT5zc2EtPmxpdmVB
dEhlYWQ7CisgICAgICAgICAgICBib29sIGRpZENoYW5nZSA9IHRydWU7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsr
bm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKGRpZENoYW5nZSkgeworICAgICAgICAg
ICAgICAgICAgICBpbnRlcmZlcmUobGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGRpZENoYW5n
ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAg
IEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChlZGdlLmRvZXNLaWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUucmVt
b3ZlKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZENoYW5nZSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgVmVjdG9yPE5vZGUqPj4gaXRl
ciA9IGJsb2NrLT5zc2EtPmV4dHJhS2lsbHMuZmluZChub2RlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoaXRlciAhPSBibG9jay0+c3NhLT5leHRyYUtpbGxzLnNpemUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8Tm9kZSo+JiBraWxscyA9IGl0ZXItPnZhbHVlOworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBraWxscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpdmUucmVtb3ZlKGtpbGxzW2ldKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZENoYW5nZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFk
anVzdGVkUmVmQ291bnQoKSAmJiBub2RlLT5oYXNSZXN1bHQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBsaXZlLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgZGlkQ2hhbmdlID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGlk
Q2hhbmdlKQorICAgICAgICAgICAgICAgIGludGVyZmVyZShsaXZlKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gQ29sbGVjdCBhbGwgbm9kZXMgdGhhdCBhcmUgaW50ZXJlc3Rpbmcg
dG8gYWxsb2NhdGlvbi4KKyAgICAgICAgVmVjdG9yPE5vZGUqPiBub2RlczsKKyAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgp
OyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1Jlc3VsdCgpKQorICAg
ICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyBCcm9hZGx5IHNwZWFraW5nLCBub2RlcyBjYW5ub3QgcmV1c2Ug
dGhlaXIgaW5wdXQgcmVnaXN0ZXJzIGZvciBzdG9yaW5nIHRoZWlyIG91dHB1dC4KKyAgICAgICAg
Ly8gSW4gY2FzZXMgd2hlcmUgdGhleSBjYW4sIHdlIGFsbG93IHRoZSBsb2NhbCByZWdpc3RlciBh
bGxvY2F0b3IgdG8gb3ZlcnJpZGUgdGhpcworICAgICAgICAvLyBnbG9iYWwgYWxsb2NhdG9yJ3Mg
ZGVjaXNpb24uIEZvciBub2RlcyB0aGF0IGFyZSBsaXZlIGFjcm9zcyBiYXNpYyBibG9jayBib3Vu
ZGFyaWVzLAorICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgZXZlbnR1YWxseSB0aGVyZSB3aWxs
IGJlIGEgbW92IG9yIHNvbWVzdWNoLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2Rlcy5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBub2Rlc1tpXTsKKyAgICAg
ICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGludGVyZmVyZVdp
dGhDaGlsZHJlbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpcnN0IHVzZSBX
ZWxzaC1Qb3dlbGwgdG8gcGljayBzcGlsbCBzbG90cywgaS5lLiB2aXJ0dWFsIHJlZ2lzdGVycy4g
RXZlcnkgbm9kZSB0aGF0CisgICAgICAgIC8vIHByb2R1Y2VzIGEgcmVzdWx0IG11c3QgaGF2ZSBh
IHZpcnR1YWwgcmVnaXN0ZXIuCisgICAgICAgIHN0ZDo6c29ydChub2Rlcy5iZWdpbigpLCBub2Rl
cy5lbmQoKSwgaW50ZXJmZXJlbmNlRGVncmVlTGVzc1RoYW4pOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBub2Rlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5vZGUqIGZpcnN0Tm9k
ZSA9IG5vZGVzW2ldOworICAgICAgICAgICAgaWYgKGZpcnN0Tm9kZS0+aGFzVmlydHVhbFJlZ2lz
dGVyKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0KKyAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbCsrKTsKKyAgICAgICAgICAgIGZpcnN0
Tm9kZS0+c2V0VmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogc2Vjb25k
Tm9kZSA9IG5vZGVzW2pdOworICAgICAgICAgICAgICAgIGlmIChzZWNvbmROb2RlLT5oYXNWaXJ0
dWFsUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgYm9vbCBpbnRlcmZlcmVzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKEhhc2hT
ZXQ8Tm9kZSo+KiBlZGdlcyA9IHNlY29uZE5vZGUtPm1pc2MuaW50ZXJmZXJlbmNlKSB7CisgICAg
ICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gZWRnZXMtPmJl
Z2luKCk7CisgICAgICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQg
PSBlZGdlcy0+ZW5kKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSAqaXRl
cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPnVzZXNWaXJ0dWFsUmVn
aXN0ZXIodmlydHVhbFJlZ2lzdGVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dGVyZmVyZXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpbnRlcmZlcmVzKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzZWNvbmROb2RlLT5zZXRWaXJ0dWFsUmVn
aXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gVXNlIENoYWl0aW4ncyBhbGdvcml0aG0gZm9yIHJlZ2lzdGVycy4gRG8g
YSBzZXBhcmF0ZSBydW4gZm9yIHRoZSB0d28gY2xhc3NlcyBvZgorICAgICAgICAvLyByZWdpc3Rl
cnMgdGhhdCB3ZSBkZWFsIHdpdGguCisgICAgICAgIGNoYWl0aW5BbGxvY2F0ZTxHZW5lcmFsUmVn
aXN0ZXJzLCBHUFJJbmZvPihub2Rlcyk7CisgICAgICAgIGNoYWl0aW5BbGxvY2F0ZTxEb3VibGVS
ZWdpc3RlcnMsIEZQUkluZm8+KG5vZGVzKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZpbmFsbHkg
ZGVsZXRlIGFsbCBpbnRlcmZlcmVuY2Ugc2V0cy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFub2RlLT5taXNjLmludGVyZmVyZW5jZSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGVsZXRlIG5vZGUtPm1pc2MuaW50
ZXJmZXJlbmNlOworICAgICAgICAgICAgICAgIG5vZGUtPm1pc2MuaW50ZXJmZXJlbmNlID0gMDsg
Ly8gVGhpcyBvdWdodCBub3QgYmUgc3RyaWN0bHkgbmVjZXNzYXJ5LCBidXQgaXQgcHJlc2VydmVz
IHNvbWUga2luZCBvZiBzYW5pdHkuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbnRlcmZlcmUoSGFz
aFNldDxOb2RlKj4mIGxpdmUpCisgICAgeworICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0
b3IgaXRlciA9IGxpdmUuYmVnaW4oKTsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9y
IGVuZCA9IGxpdmUuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAgICBJbnRlcmZlcmVu
Y2UqIG5vZGVJbnRlcmZlcmVuY2UgPSBpbnRlcmZlcmVuY2Uobm9kZSk7CisgICAgICAgICAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlcjIgPSBsaXZlLmJlZ2luKCk7CisgICAgICAgICAg
ICBmb3IgKDsgaXRlcjIgIT0gZW5kOyArK2l0ZXIyKQorICAgICAgICAgICAgICAgIG5vZGVJbnRl
cmZlcmVuY2UtPmFkZCgqaXRlcjIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
aW50ZXJmZXJlV2l0aENoaWxkcmVuKE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIGludGVyZmVyZW5jZShub2RlKS0+YWRkKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaW50ZXJm
ZXJlbmNlKGVkZ2Uubm9kZSgpKS0+YWRkKG5vZGUpOworICAgIH0KKyAgICAKKyAgICBJbnRlcmZl
cmVuY2UqIGludGVyZmVyZW5jZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgSW50ZXJmZXJl
bmNlKiBpbnRlcmZlcmVuY2UgPSBub2RlLT5taXNjLmludGVyZmVyZW5jZTsKKyAgICAgICAgaWYg
KCFpbnRlcmZlcmVuY2UpCisgICAgICAgICAgICBub2RlLT5taXNjLmludGVyZmVyZW5jZSA9IGlu
dGVyZmVyZW5jZSA9IG5ldyBJbnRlcmZlcmVuY2UoKTsKKyAgICAgICAgcmV0dXJuIGludGVyZmVy
ZW5jZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpbnRlcmZlcmVzKE5vZGUqIGEsIE5vZGUqIGIp
CisgICAgeworICAgICAgICBpZiAoIWEtPm1pc2MuaW50ZXJmZXJlbmNlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gYS0+bWlzYy5pbnRlcmZlcmVuY2UtPmNvbnRh
aW5zKGIpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50ZXJmZXJlbmNlRGVn
cmVlKE5vZGUqIGEpCisgICAgeworICAgICAgICBpZiAoYS0+bWlzYy5pbnRlcmZlcmVuY2UpCisg
ICAgICAgICAgICByZXR1cm4gYS0+bWlzYy5pbnRlcmZlcmVuY2UtPnNpemUoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGludGVyZmVyZW5jZURlZ3Jl
ZUxlc3NUaGFuKE5vZGUqIGEsIE5vZGUqIGIpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJm
ZXJlbmNlRGVncmVlKGEpIDwgaW50ZXJmZXJlbmNlRGVncmVlKGIpOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTxSZWdpc3RlckNsYXNzIHJlZ2lzdGVyQ2xhc3MsIHR5cGVuYW1lIFJlZ2lzdGVy
SW5mbz4KKyAgICB2b2lkIGNoYWl0aW5BbGxvY2F0ZShjb25zdCBWZWN0b3I8Tm9kZSo+JiBvcmln
aW5hbE5vZGVzKQorICAgIHsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiBub2RlczsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9yaWdpbmFsTm9kZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChvcmlnaW5hbE5vZGVzW2ldLT5sb2NhdGlvbi5pc1JlZ2lzdGVyQ2xhc3M8
cmVnaXN0ZXJDbGFzcz4oKSkKKyAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQob3JpZ2luYWxO
b2Rlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxOb2RlKj4gYWxs
b2NhdGlvblN0YWNrOworICAgICAgICBWZWN0b3I8Tm9kZSo+IHNwaWxsczsKKyAgICAgICAgd2hp
bGUgKCFub2Rlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gcHVzaCB0
aGluZ3Mgb250byB0aGUgYWxsb2NhdGlvbiBzdGFjay4KKyAgICAgICAgICAgIHdoaWxlICghbm9k
ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgLy8gU29ydCBieSBkZXNjZW5kaW5nIGlu
dGVyZmVyZW5jZSBkZWdyZWUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGlubmVyIGxvb3AgcmVxdWlyZXMgdGhhdCBhbGwgbm9kZXMgd2hvc2UgY3VycmVudCBp
bnRlcmZlcmVuY2UgZGVncmVlIGlzCisgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGFuIG51bWJl
ck9mUmVnaXN0ZXJzIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LCBhbmQgdGhleSBhcmUgc29y
dGVkCisgICAgICAgICAgICAgICAgLy8gaW4gZGVjcmVhc2luZyBvcmRlciBvZiBkZWdyZWUuCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBCdXQsIHRoZSBuZXh0IGxvb3Ag
LSB0aGUgc3BpbGxpbmcgbG9vcCAtIHJlcXVpcmVzIHRoYXQgdGhlIGZpcnN0IG5vZGUgaW4gdGhl
CisgICAgICAgICAgICAgICAgLy8gbGlzdCBoYXMgdGhlIGhpZ2hlc3QgZGVncmVlLiBIZW5jZSwg
YSBzb3J0IGlzIHByb2JhYmx5IHRoZSBzaW1wbGVzdCB3YXkgb2YKKyAgICAgICAgICAgICAgICAv
LyBlbnN1cmluZyBib3RoIHByb3BlcnRpZXMuCisgICAgICAgICAgICAgICAgc3RkOjpzb3J0KG5v
ZGVzLmJlZ2luKCksIG5vZGVzLmVuZCgpLCBzcGVjaWZpY0ludGVyZmVyZW5jZUdyZWF0ZXJUaGFu
PHJlZ2lzdGVyQ2xhc3M+KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBD
aGFpdGluJ3MgYWxnb3JpdGhtIGlzIGZvdW5kZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlz
IGNhc2UgaXMgcmFyZS4gV2UKKyAgICAgICAgICAgICAgICAvLyBhcmUgZXhwZWN0ZWQgdG8gZHJv
cCBkb3duIHRocm91Z2ggdGhpcyBvbiB0aGUgZmlyc3QgZ28tcm91bmQgYW5kIGZpcnN0IHBsb3cK
KyAgICAgICAgICAgICAgICAvLyB0aHJvdWdoIGEgYnVuY2ggb2YgbG93LWRlZ3JlZSBub2RlcyBp
biB0aGUgbG9vcCBiZWxvdy4gVGhhdCB3aWxsIHRoZW4gcmVkdWNlCisgICAgICAgICAgICAgICAg
Ly8gdGhlIGRlZ3JlZSBvZiB0aGUgcmVtYWluaW5nIG5vZGVzLCBhbmQgc28gaXQnbGwgdGFrZSBh
IHdoaWxlIGJlZm9yZSB0aGlzCisgICAgICAgICAgICAgICAgLy8gYnJlYWsgaXMgdGFrZW4uIEl0
IHdpbGwgb25seSBiZSB0YWtlbiBpZiBzb21ldGhpbmcgbmVlZHMgdG8gYmUgc3BpbGxlZC4KKyAg
ICAgICAgICAgICAgICAvLyBUaGVyZSB3aWxsIGJlIG1hbnkgZnVuY3Rpb25zIGluIHdoaWNoIHdl
IHdvbid0IHNwaWxsIGFueXRoaW5nLgorICAgICAgICAgICAgICAgIGlmIChzcGVjaWZpY0ludGVy
ZmVyZW5jZURlZ3JlZTxyZWdpc3RlckNsYXNzPihub2Rlcy5sYXN0KCkpID49IFJlZ2lzdGVySW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3RTdGFja1NpemUgPSBhbGxv
Y2F0aW9uU3RhY2suc2l6ZSgpOworICAgICAgICAgICAgICAgIHdoaWxlIChzcGVjaWZpY0ludGVy
ZmVyZW5jZURlZ3JlZTxyZWdpc3RlckNsYXNzPihub2Rlcy5sYXN0KCkpIDwgUmVnaXN0ZXJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVycykKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvblN0YWNr
LmFwcGVuZChub2Rlcy5yZW1vdmVMYXN0KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxhc3RTdGFja1NpemU7IGkgPCBhbGxvY2F0aW9uU3Rh
Y2suc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUludGVyZmVyZW5jZTxy
ZWdpc3RlckNsYXNzPihhbGxvY2F0aW9uU3RhY2tbaV0pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHNwaWxsIG9uZSB2YXJpYWJsZS4gU3Bp
bGxpbmcgdGhlIHZhcmlhYmxlIHdpdGggdGhlIGhpZ2hlc3QgZGVncmVlCisgICAgICAgICAgICAv
LyAoaS5lLiB0aGUgb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QpIG1pbmltaXplcyB0
aGUgbGlrZWxpaG9vZCB0aGF0IHdlJ2xsCisgICAgICAgICAgICAvLyBoYXZlIHRvIHNwaWxsIGFu
eXRoaW5nIGVsc2UuIE5vdGUsIGluc3RlYWQgb2YganVzdCBzcGlsbGluZyBvbmUgdmFyaWFibGUg
YW5kCisgICAgICAgICAgICAvLyByZWxvb3BpbmcsIHdlIGNvdWxkIG1ha2UgdGhpcyBtb3JlIHNj
YWxhYmxlIGJ5IHNwaWxsaW5nCisgICAgICAgICAgICAvLyBjdXJyZW50TWluRGVncmVlIC0gbnVt
YmVyT2ZSZWdpc3RlcnMgKyAxIHZhcmlhYmxlcywgYXMgdGhhdCBpcyB0aGUgbWluaW11bQorICAg
ICAgICAgICAgLy8gbnVtYmVyIG9mIHZhcmlhYmxlcyB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgc3Bp
bGxlZCB0byBlbnN1cmUgdGhhdCB0aGUgYWxsb2NhdGlvbgorICAgICAgICAgICAgLy8gbG9vcCBp
cyB1bmJsb2NrZWQuIFdlIGNvdWxkIGFwcHJveGltYXRlIHRoaXMgYnkgcmVwbGFjaW5nIGN1cnJl
bnRNaW5EZWdyZWUgd2l0aAorICAgICAgICAgICAgLy8gYSBzbmFwc2hvdCBvZiBjdXJyZW50TWlu
RGVncmVlIHByaW9yIHRvIHNwaWxsaW5nOyBpLmUuIHdlIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkK
KyAgICAgICAgICAgIC8vIHJlY29tcHV0ZSBjdXJyZW50TWluRGVncmVlIGVhY2ggdGltZSB3ZSBz
cGlsbCBhIHZhcmlhYmxlLgorICAgICAgICAgICAgaWYgKCFub2Rlcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBub2Rlcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoc3BlY2lmaWNJbnRlcmZlcmVuY2VEZWdyZWU8cmVnaXN0ZXJDbGFzcz4o
bm9kZXNbaV0pID49IFJlZ2lzdGVySW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZW1vdmVJbnRlcmZl
cmVuY2U8cmVnaXN0ZXJDbGFzcz4obm9kZXNbMF0pOworICAgICAgICAgICAgICAgIHNwaWxscy5h
cHBlbmQobm9kZXNbMF0pOworICAgICAgICAgICAgICAgIG5vZGVzWzBdID0gbm9kZXMubGFzdCgp
OworICAgICAgICAgICAgICAgIG5vZGVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IGFzc2lnbiByZWdpc3RlcnMuCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGFsbG9jYXRpb25TdGFjay5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBhbGxvY2F0aW9uU3RhY2tbaV07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIEZpbmQgYSByZWdpc3RlciB0aGF0IHdvbid0IGludGVyZmVyZS4gRG8g
dGhpcyBieSBmaXJzdCBmaW5kaW5nIHRoZSByZWdpc3RlcnMKKyAgICAgICAgICAgIC8vIHRoYXQg
ZG8gaW50ZXJmZXJlLgorICAgICAgICAgICAgQml0bWFwPFJlZ2lzdGVySW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM+IGludGVyZmVyZW5jZTsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVy
YXRvciBpdGVyID0gbm9kZS0+bWlzYy5pbnRlcmZlcmVuY2UtPnNldDxyZWdpc3RlckNsYXNzPigp
LmJlZ2luKCk7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbm9k
ZS0+bWlzYy5pbnRlcmZlcmVuY2UtPnNldDxyZWdpc3RlckNsYXNzPigpLmVuZCgpOworICAgICAg
ICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBvdGhlck5vZGUgPSAqaXRlcjsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCByZWdpc3Rlcklu
ZGV4ID0gb3RoZXJOb2RlLT5sb2NhdGlvbi5yZWdpc3RlckluZGV4PHJlZ2lzdGVyQ2xhc3M+KCk7
CisgICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVySW5kZXggPT0gUmVnaXN0ZXJGaWxlOjpJbnZh
bGlkSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGludGVyZmVyZW5jZS5zZXQocmVnaXN0ZXJJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHJlZ2lz
dGVySW5kZXggPSAwOyByZWdpc3RlckluZGV4IDwgUmVnaXN0ZXJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgKytyZWdpc3RlckluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKGludGVyZmVyZW5j
ZS5nZXQocmVnaXN0ZXJJbmRleCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBub2RlLT5sb2NhdGlv
bi5zZXRSZWdpc3RlckluZGV4PHJlZ2lzdGVyQ2xhc3M+KHJlZ2lzdGVySW5kZXgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZm91bmQpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBhZGRJbnRlcmZlcmVuY2U8cmVnaXN0ZXJDbGFzcz4obm9kZSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJlc3RvcmUgaW50ZXJmZXJlbmNlIGZyb20gc3Bp
bGxzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBzaW5jZSB3ZSBkb24ndAorICAgICAg
ICAvLyB1c2UgaW50ZXJmZXJlbmNlIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24uCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHNwaWxscy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBhZGRJ
bnRlcmZlcmVuY2U8cmVnaXN0ZXJDbGFzcz4oc3BpbGxzW2ldKTsKKyAgICB9CisgICAgICAgIAor
ICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAgICBzdGF0aWMgdW5z
aWduZWQgc3BlY2lmaWNJbnRlcmZlcmVuY2VEZWdyZWUoTm9kZSogYSkKKyAgICB7CisgICAgICAg
IC8vIEZJWE1FOgorICAgICAgICAvLyBUaGlzIGlzIGRlZmluaXRlbHkgbm90IHRoZSByaWdodCB3
YXkgb2YgcmVzZXJ2aW5nIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgICAgICB1bnNpZ25lZCByZXN1
bHQgPSBhLT5udW1TY3JhdGNoZXM8cmVnaXN0ZXJDbGFzcz4oKTsKKyAgICAgICAgaWYgKGEtPm1p
c2MuaW50ZXJmZXJlbmNlKQorICAgICAgICAgICAgcmVzdWx0ICs9IGEtPm1pc2MuaW50ZXJmZXJl
bmNlLnNldDxyZWdpc3RlckNsYXNzPigpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTxSZWdpc3RlckNsYXNzIHJlZ2lzdGVyQ2xhc3M+CisgICAgc3Rh
dGljIGJvb2wgc3BlY2lmaWNJbmZlcmZlcmVuY2VHcmVhdGVyVGhhbihOb2RlKiBhLCBOb2RlKiBi
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNwZWNpZmljSW50ZXJmZXJlbmNlRGVncmVlPHJlZ2lz
dGVyQ2xhc3M+KGEpID4gc3BlY2lmaWNJbnRlcmZlcmVuY2VEZWdyZWU8cmVnaXN0ZXJDbGFzcz4o
Yik7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFz
cz4KKyAgICB2b2lkIHJlbW92ZUludGVyZmVyZW5jZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAg
ICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBub2RlLT5taXNjLmludGVyZmVyZW5j
ZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuYmVnaW4oKTsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46
Oml0ZXJhdG9yIGVuZCA9IG5vZGUtPm1pc2MuaW50ZXJmZXJlbmNlLT5zZXQ8cmVnaXN0ZXJDbGFz
cz4oKS5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAg
ICAgICBpdGVyLT5taXNjLmludGVyZmVyZW5jZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkucmVtb3Zl
KG5vZGUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxSZWdpc3RlckNsYXNzIHJlZ2lzdGVy
Q2xhc3M+CisgICAgdm9pZCBhZGRJbnRlcmZlcmVuY2UoTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbm9kZS0+bWlzYy5pbnRlcmZlcmVu
Y2UtPnNldDxyZWdpc3RlckNsYXNzPigpLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+
OjppdGVyYXRvciBlbmQgPSBub2RlLT5taXNjLmludGVyZmVyZW5jZS0+c2V0PHJlZ2lzdGVyQ2xh
c3M+KCkuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAg
ICAgICAgaXRlci0+bWlzYy5pbnRlcmZlcmVuY2UtPnNldDxyZWdpc3RlckNsYXNzPigpLmFkZChu
b2RlKTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1Mb2NhdGlvbkFsbG9jYXRpb24oR3JhcGgm
IGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgTG9jYXRp
b24gQWxsb2NhdGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxMb2NhdGlvbkFsbG9j
YXRpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTG9jYXRpb25BbGxvY2F0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNl
X2gKKyNkZWZpbmUgREZHTG9jYXRpb25BbGxvY2F0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR1BoYXNl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisK
Ky8vIFRoaXMgYWxsb2NhdGVzIGJvdGggcmVnaXN0ZXJzIGFuZCBzcGlsbCBzbG90cy4KKworYm9v
bCBwZXJmb3JtTG9jYXRpb25BbGxvY2F0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTG9j
YXRpb25BbGxvY2F0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCiBjbGFzcyBHcmFwaDsKIHN0cnVjdCBCYXNpY0Jsb2NrOworc3RydWN0
IE5vZGU7CiAKIHN0cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSB7CiAgICAgU3RydWN0dXJl
KiBwcmV2aW91c1N0cnVjdHVyZTsKQEAgLTEzOSw2ICsxNDAsMjQgQEAgc3RydWN0IFN3aXRjaERh
dGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwogfTsKIAorLy8gVGhpcyBnZXRzIHVzZWQg
YnkgdGhlIGxvY2F0aW9uIGFsbG9jYXRpb24gcGhhc2UuCitzdHJ1Y3QgSW50ZXJmZXJlbmNlIHsK
KyAgICBIYXNoU2V0PE5vZGUqPiB2YWx1ZXM7CisgICAgSGFzaFNldDxOb2RlKj4gZG91YmxlczsK
KyAgICAKKyAgICB0ZW1wbGF0ZTxSZWdpc3RlckNsYXNzIHJlZ2lzdGVyQ2xhc3M+CisgICAgSGFz
aFNldDxOb2RlKj4mIHNldCgpCisgICAgeworICAgICAgICBpZiAocmVnaXN0ZXJDbGFzcyA9PSBH
ZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICAgICAgcmV0
dXJuIGRvdWJsZXM7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkKE5vZGUqKTsKKyAgICBib29s
IGNvbnRhaW5zKE5vZGUqKSBjb25zdDsKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OworfTsKKwog
Ly8gVGhpcyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlhdGUgYXJndW1lbnQgdG8gTm9k
ZSBjb25zdHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1tZWRpYXRlIHZhbHVlICh0eXBp
Y2FsbHkgYW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZSAtIAogLy8gYSBj
b25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4KQEAg
LTE2Nyw2ICsxODYsMTAgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fdmlydHVhbFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlcigpKQogICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAg
LCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCisgICAgICAgICwgbV9vcEluZm8oMCkKKyAgICAgICAg
LCBtX29wSW5mbzIoMCkKKyAgICAgICAgLCBtX3NjcmF0Y2hHUFJzKDApCisgICAgICAgICwgbV9z
Y3JhdGNoRlBScygwKQogICAgIHsKICAgICAgICAgbWlzYy5yZXBsYWNlbWVudCA9IDA7CiAgICAg
ICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTE4MCw2ICsyMDMsMTAgQEAgc3RydWN0
IE5vZGUgewogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKQog
ICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUp
CisgICAgICAgICwgbV9vcEluZm8oMCkKKyAgICAgICAgLCBtX29wSW5mbzIoMCkKKyAgICAgICAg
LCBtX3NjcmF0Y2hHUFJzKDApCisgICAgICAgICwgbV9zY3JhdGNoRlBScygwKQogICAgIHsKICAg
ICAgICAgbWlzYy5yZXBsYWNlbWVudCA9IDA7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdz
KG9wKTsKQEAgLTE5NSw2ICsyMjIsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9yZWZD
b3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAgICAgLCBtX29w
SW5mbyhpbW0ubV92YWx1ZSkKKyAgICAgICAgLCBtX29wSW5mbzIoMCkKKyAgICAgICAgLCBtX3Nj
cmF0Y2hHUFJzKDApCisgICAgICAgICwgbV9zY3JhdGNoRlBScygwKQogICAgIHsKICAgICAgICAg
bWlzYy5yZXBsYWNlbWVudCA9IDA7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsK
QEAgLTIxMSw2ICsyNDEsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9wcmVkaWN0aW9u
KFNwZWNOb25lKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKICAgICAgICAgLCBt
X29wSW5mbzIoaW1tMi5tX3ZhbHVlKQorICAgICAgICAsIG1fc2NyYXRjaEdQUnMoMCkKKyAgICAg
ICAgLCBtX3NjcmF0Y2hGUFJzKDApCiAgICAgewogICAgICAgICBtaXNjLnJlcGxhY2VtZW50ID0g
MDsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwpAQCAtMjI3LDYgKzI1OSw4IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgICAg
ICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQogICAgICAgICAsIG1fb3BJbmZvMihpbW0yLm1fdmFs
dWUpCisgICAgICAgICwgbV9zY3JhdGNoR1BScygwKQorICAgICAgICAsIG1fc2NyYXRjaEZQUnMo
MCkKICAgICB7CiAgICAgICAgIG1pc2MucmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFu
ZERlZmF1bHRGbGFncyhvcCk7CkBAIC0xMTUwLDYgKzExODQsMTEgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7CiAgICAgfQogICAgIAorICAgIGJvb2wg
dXNlc1ZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID09IHZpcnR1YWxSZWdpc3RlcjsK
KyAgICB9CisgICAgCiAgICAgdm9pZCBzZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlcikKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CkBA
IC0xNTAxLDYgKzE1NDAsMjUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbm9kZUNh
blNwZWN1bGF0ZUludDUyKGFyaXRoTm9kZUZsYWdzKCkpOwogICAgIH0KICAgICAKKyAgICB2b2lk
IHNldE51bVNjcmF0Y2hlcyh1bnNpZ25lZCBudW1HUFJzLCB1bnNpZ25lZCBudW1GUFJzKQorICAg
IHsKKyAgICAgICAgbV9zY3JhdGNoR1BScyA9IG51bUdQUnM7CisgICAgICAgIG1fc2NyYXRjaEZQ
UnMgPSBudW1GUFJzOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2Ny
YXRjaEdQUnMpID09IG51bUdQUnMpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG1fc2NyYXRjaEZQUnMpID09IG51bUZQUnMpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBudW1TY3JhdGNoR1BScygpIGNvbnN0IHsgcmV0dXJuIG1fc2NyYXRjaEdQUnM7IH0KKyAgICB1
bnNpZ25lZCBudW1TY3JhdGNoRlBScygpIGNvbnN0IHsgcmV0dXJuIG1fc2NyYXRjaEZQUnM7IH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTxSZWdpc3RlckNsYXNzIHJlZ2lzdGVyQ2xhc3M+CisgICAgdW5z
aWduZWQgbnVtU2NyYXRjaGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChyZWdpc3RlckNs
YXNzID09IEdlbmVyYWxSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gbnVtU2NyYXRjaEdQ
UnMoKTsKKyAgICAgICAgcmV0dXJuIG51bVNjcmF0Y2hGUFJzKCk7CisgICAgfQorICAgIAogICAg
IHZvaWQgZHVtcENoaWxkcmVuKFByaW50U3RyZWFtJiBvdXQpCiAgICAgewogICAgICAgICBpZiAo
IWNoaWxkMSgpKQpAQCAtMTUzNyw4ICsxNTk1LDE0IEBAIHByaXZhdGU6CiAgICAgLy8gYmlnIGVu
b3VnaCB0byBzdG9yZSBhIHBvaW50ZXIuCiAgICAgdWludHB0cl90IG1fb3BJbmZvOwogICAgIHVp
bnRwdHJfdCBtX29wSW5mbzI7CisgICAgCisgICAgLy8gVXNlZCBmb3IgU1NBIHJlZ2lzdGVyIGFs
bG9jYXRpb24uCisgICAgdWludDhfdCBtX3NjcmF0Y2hHUFJzOworICAgIHVpbnQ4X3QgbV9zY3Jh
dGNoRlBSczsKIAogcHVibGljOgorICAgIEZvcm1hdHRlZFJlZ2lzdGVyIGxvY2F0aW9uOworICAg
IAogICAgIC8vIEZpZWxkcyB1c2VkIGJ5IHZhcmlvdXMgYW5hbHlzZXMuCiAgICAgQWJzdHJhY3RW
YWx1ZSB2YWx1ZTsKICAgICAKQEAgLTE1NTUsNiArMTYxOSw3IEBAIHB1YmxpYzoKICAgICB1bmlv
biB7CiAgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50OwogICAgICAgICBCYXNpY0Jsb2NrKiBvd25l
cjsKKyAgICAgICAgSW50ZXJmZXJlbmNlKiBpbnRlcmZlcmVuY2U7CiAgICAgfSBtaXNjOwogfTsK
IApAQCAtMTU4NSw2ICsxNjUwLDMwIEBAIENTdHJpbmcgbm9kZU1hcER1bXAoY29uc3QgVCYgbm9k
ZU1hcCwgRHUKICAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOwogfQogCitpbmxpbmUgdm9pZCBJ
bnRlcmZlcmVuY2U6OmFkZChOb2RlKiBub2RlKQoreworICAgIGlmICh1c2VzRlBSKG5vZGUtPmRh
dGFGb3JtYXQoKSkpIHsKKyAgICAgICAgZG91Ymxlcy5hZGQobm9kZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHVzZXNHUFIoZGF0YS0+ZGF0YUZvcm1hdCgpKSk7
CisgICAgdmFsdWVzLmFkZChub2RlKTsKK30KKworaW5saW5lIGJvb2wgSW50ZXJmZXJlbmNlOjpj
b250YWlucyhOb2RlKiBub2RlKSBjb25zdAoreworICAgIGlmICh1c2VzRlBSKG5vZGUtPmRhdGFG
b3JtYXQoKSkpCisgICAgICAgIHJldHVybiBkb3VibGVzLmNvbnRhaW5zKG5vZGUpOworICAgIAor
ICAgIHJldHVybiB2YWx1ZXMuY29udGFpbnMobm9kZSk7Cit9CisKK2lubGluZSBzaXplX3QgSW50
ZXJmZXJlbmNlOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG91Ymxlcy5zaXplKCkgKyB2
YWx1ZXMuc2l6ZSgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFj
ZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNjA1OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywzOSArODcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAw
OyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50OiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxp
dHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEF2YWlsYWJpbGl0eShub2RlLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0
eShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyOjpmb3J3YXJkRGVsdGFGb3JOb2RlKG5vZGUpLmFwcGx5
RGVsdGEoYXZhaWxhYmlsaXR5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eSA9PSBibG9jay0+c3NhLT5hdmFpbGFi
aWxpdHlBdFRhaWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCShyZXZp
c2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDEzIEBAIGJvb2wgcnVuUGhhc2UoR3JhcGgmIGdyYXBo
KQogICAgIHJldHVybiBydW5BbmRMb2cocGhhc2UpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBQ
aGFzZVR5cGUsIHRlbXBsYXRlIEFyZzFUeXBlPgorYm9vbCBydW5QaGFzZShHcmFwaCYgZ3JhcGgs
IGNvbnN0IEFyZzFUeXBlJiBhcmcxKQoreworICAgIFBoYXNlVHlwZSBwaGFzZShncmFwaCwgYXJn
MSk7CisgICAgcmV0dXJuIHJ1bkFuZExvZyhwaGFzZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1bHRBbmRTY3JhdGNo
Q2FsY3VsYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdSZXN1bHRBbmRT
Y3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1Njb3JlQm9hcmQuaCIKKyNpbmNsdWRlICJK
U0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKyNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewor
cHVibGljOgorICAgIFJlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlKEdyYXBoJiBncmFw
aCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInJlc3VsdC1hbmQtc2NyYXRjaCBjYWxjdWxhdGlv
biIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBB
U1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIC8vIERlcml2
ZSB0aGUgcmVzdWx0IGZvcm1hdCBmb3IgZWFjaCBub2RlIGFuZCB0aGUgbnVtYmVyIG9mIHNjcmF0
Y2ggcmVnaXN0ZXJzIGl0CisgICAgICAgIC8vIGlzIGV4cGVjdGVkIHRvIHVzZS4KKyAgICAgICAg
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
YmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgbV9ub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaGFuZGxlTm9kZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitw
cml2YXRlOgorICAgIHZvaWQgaGFuZGxlTm9kZSgpCisgICAgeworICAgICAgICAKKyAgICB9Cisg
ICAgCisgICAgTm9kZSogbV9ub2RlOworfTsKKworYm9vbCBwZXJmb3JtUmVzdWx0QW5kU2NyYXRj
aENhbGN1bGF0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIFJlc3VsdC1hbmQtc2NyYXRjaCBDYWxjdWxhdGlvbiBQaGFzZSIpOworICAg
IHJldHVybiBydW5QaGFzZTxSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZT4oZ3JhcGgp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRj
aENhbGN1bGF0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlv
blBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1Jlc3VsdEFuZFNjcmF0
Y2hDYWxjdWxhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0
aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIEZpZ3VyZXMgb3V0IHdoYXQgdGhlIHJlc3Vs
dCB0eXBlIGFuZCBudW1iZXIgb2Ygc2NyYXRjaCByZWdpc3RlcnMgaXMgZm9yIGVhY2gKKy8vIG5v
ZGUuCisKK2Jvb2wgcGVyZm9ybVJlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvbihHcmFwaCYpOwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaHVmZmxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NodWZmbGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaHVmZmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU2h1ZmZsZS5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
Kwordm9pZCBUcmFuc2Zlcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlm
ICghdmlydHVhbFJlZ2lzdGVyKCkuaXNWYWxpZCgpKSB7CisgICAgICAgIG91dC5wcmludCgiPGlu
dmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KCJy
IiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksICI6ICIsIGZyb20oKSwgIiAtPiAiLCB0bygp
KTsKK30KKworbmFtZXNwYWNlIHsKKworYm9vbCB0cmFuc2ZlckZyb21MZXNzVGhhbihUcmFuc2Zl
ciBhLCBUcmFuc2ZlciBiKQoreworICAgIHJldHVybiBhLmZyb20oKSA8IGIuZnJvbSgpOworfQor
Citib29sIHRyYW5zZmVyVG9MZXNzVGhhbihUcmFuc2ZlciBhLCBUcmFuc2ZlciBiKQoreworICAg
IHJldHVybiBhLnRvKCkgPCBiLnRvKCk7Cit9CisKK0Zvcm1hdHRlZFZhbHVlIGdldEZyb20oVHJh
bnNmZXIgdHJhbnNmZXIpCit7CisgICAgcmV0dXJuIHRyYW5zZmVyLmZyb20oKTsKK30KKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgc2h1ZmZsZSgKKyAgICBBc3NlbWJseUhlbHBl
cnMmIGppdCwgVmVjdG9yPFRyYW5zZmVyPiYgdHJhbnNmZXJzLCBHUFJSZWcgc2NyYXRjaCwgR1BS
UmVnIGZwU2NyYXRjaCkKK3sKKyAgICAvLyBUdXJuIHRoZSB0cmFuc2ZlciBpbnRvIGEgc2VyaWVz
IG9mIGxpbmVzIGFuZCBjeWNsZXMuCisgICAgLy8KKyAgICAvLyBBIGxpbmUgd2lsbCBiZSBzb21l
dGhpbmcgbGlrZToKKyAgICAvLyAgICAgbW92IHIzLCByNAorICAgIC8vICAgICBtb3YgcjIsIHIz
CisgICAgLy8gICAgIG1vdiByMSwgcjIKKyAgICAvLworICAgIC8vIEEgY3ljbGUgd2lsbCBiZSBz
b21ldGhpbmcgbGlrZToKKyAgICAvLyAgICAgeGNoIHIxLCByMgorICAgIC8vCisgICAgLy8gb3I6
CisgICAgLy8gICAgIG1vdiByMSwgdG1wCisgICAgLy8gICAgIG1vdiByMiwgcjEKKyAgICAvLyAg
ICAgbW92IHIzLCByMgorICAgIC8vICAgICBtb3YgcjQsIHIzCisgICAgLy8gICAgIG1vdiB0bXAs
IHI0CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgY3ljbGVzIGNhbiBhbHdheXMgYmUgdHVybmVk
IGludG8geGNoJ3M6CisgICAgLy8KKyAgICAvLyAgICAgeGNoIHIxLCByNAorICAgIC8vICAgICB4
Y2ggcjEsIHIzCisgICAgLy8gICAgIHhjaCByMSwgcjIKKyAgICAvLworICAgIC8vIEJ1dCB0aGlz
IGFsZ29yaXRobSB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHdl
J3JlIHNodWZmbGluZyBiZXR3ZWVuCisgICAgLy8gR1BSJ3MgYW5kIEZQUidzIGFuZCBzcGlsbCBz
bG90cy4KKyAgICAvLworICAgIC8vIE9uIHRvcCBvZiB0aGF0LCB0aGVyZSdzIGEgYnVuY2ggb2Yg
Y29sZC1oZWFydGVkIGVuZ2luZWVyaW5nIGZvciBoYW5kbGluZyBkYXRhIGZvcm1hdAorICAgIC8v
IGNvbnZlcnNpb25zLgorICAgIAorICAgIGlmICghdHJhbnNmZXJzLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHRyYW5zZmVycy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBBU1NFUlQo
dHJhbnNmZXJzW2ldLmRvZXNUaGluZ3MoKSk7CisgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQo
dHJhbnNmZXJzLmJlZ2luKCksIHRyYW5zZmVycy5lbmQoKTsgdHJhbnNmZXJUb0xlc3NUaGFuKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdHJhbnNmZXJzLnNpemUoKSAtIDE7IGktLTspCisg
ICAgICAgICAgICBBU1NFUlQodHJhbnNmZXJzW2ldLnRvKCkgIT0gdHJhbnNmZXJzW2kgKyAxXS50
bygpKTsKKyAgICB9CisgICAgCisgICAgc3RkOjpzb3J0KHRyYW5zZmVycy5iZWdpbigpLCB0cmFu
c2ZlcnMuZW5kKCksIHRyYW5zZmVyRnJvbUxlc3NUaGFuKTsKKyAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0cmFuc2ZlcnMuc2l6ZSgpIC0gMTsg
aS0tOykKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2ZlcnNbaV0uZnJvbSgpICE9IHRyYW5zZmVy
c1tpICsgMV0uZnJvbSgpKTsKKyAgICB9CisgICAgCisgICAgQml0VmVjdG9yIGFscmVhZHlIYW5k
bGVkOworICAgIAorICAgIFZlY3RvcjxWZWN0b3I8VHJhbnNmZXI+PiBsaW5lczsKKyAgICBWZWN0
b3I8VmVjdG9yPFRyYW5zZmVyPj4gY3ljbGVzOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0cmFuc2ZlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGFscmVhZHlIYW5k
bGVkLmdldChpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgQml0
VmVjdG9yIGluY2x1ZGVkOworICAgICAgICBWZWN0b3I8VHJhbnNmZXI+IGxpc3Q7CisgICAgICAg
IAorICAgICAgICB1bnNpZ25lZCBmaXJzdEluZGV4ID0gaTsKKyAgICAgICAgdW5zaWduZWQgY3Vy
cmVudEluZGV4ID0gY3VycmVudEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICBUcmFuc2ZlciBjdXJyZW50ID0gdHJhbnNmZXJzW2N1cnJlbnRJbmRleF07CisgICAgICAgICAg
ICBsaXN0LmFwcGVuZChjdXJyZW50KTsKKyAgICAgICAgICAgIEFTU0VSVCghaW5jbHVkZWQuZ2V0
KGN1cnJlbnRJbmRleCkpOworICAgICAgICAgICAgaW5jbHVkZWQuc2V0KGN1cnJlbnRJbmRleCk7
CisgICAgICAgICAgICBBU1NFUlQoIWFscmVhZHlIYW5kbGVkLmdldChjdXJyZW50SW5kZXgpKTsK
KyAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkLnNldChjdXJyZW50SW5kZXgpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBzb3J0ZWRJbmRleE9mPFRyYW5z
ZmVyLCBGb3JtYXR0ZWRWYWx1ZT4oCisgICAgICAgICAgICAgICAgdHJhbnNmZXJzLCB0cmFuc2Zl
cnMuc2l6ZSgpLCBjdXJyZW50LnRvKCksIGdldEZyb20pOworICAgICAgICAgICAgaWYgKG5leHRJ
bmRleCA9PSB0cmFuc2ZlcnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KGxpc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoaW5jbHVkZWQuZ2V0KG5leHRJbmRleCkpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQobmV4dEluZGV4ID09IGZpcnN0SW5kZXgpOworICAgICAgICAgICAgICAg
IGN5Y2xlcy5hcHBlbmQobGlzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IG5leHRJbmRleDsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2h1ZmZsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTaHVmZmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1No
dWZmbGVfaAorI2RlZmluZSBERkdTaHVmZmxlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiREZHRm9ybWF0dGVkUmVnaXN0
ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBUcmFuc2Zl
ciB7CitwdWJsaWM6CisgICAgVHJhbnNmZXIoKSB7IH0KKyAgICAKKyAgICBUcmFuc2ZlcihGb3Jt
YXR0ZWRSZWdpc3RlciBmcm9tLCBGb3JtYXR0ZWRSZWdpc3RlciB0bywgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgOiBtX2Zyb20oZnJvbSkKKyAgICAgICAgLCBtX3Rv
KHRvKQorICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikKKyAgICB7
CisgICAgfQorICAgIAorICAgIEZvcm1hdHRlZFJlZ2lzdGVyIGZyb20oKSBjb25zdCB7IHJldHVy
biBtX2Zyb207IH0KKyAgICBGb3JtYXR0ZWRSZWdpc3RlciB0bygpIGNvbnN0IHsgcmV0dXJuIG1f
dG87IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3QgeyByZXR1
cm4gbV92aXJ0dWFsUmVnaXN0ZXI7IH0KKyAgICAKKyAgICBib29sIGRvZXNUaGluZ3MoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb20oKSAhPSB0bygpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIGVtaXRz
IGNvZGUgdGhhdCBtYXkgZGVzdHJveSB0aGUgdmFsdWUgaW4gdGhlIGZyb20oKSBsb2NhdGlvbiBh
bmQgd2lsbAorICAgIC8vIHBsYWNlIHRoZSB2YWx1ZSBpbnRvIHRoZSB0bygpIGxvY2F0aW9uLiBZ
b3UgY2FuJ3QgcmVseSBvbiBiZWluZyBhYmxlIHRvIHVzZQorICAgIC8vIHRoZSBmcm9tKCkgbG9j
YXRpb24gYW55bW9yZS4gTm90ZSB0aGF0IHRoZSBzY3JhdGNoIHJlZ2lzdGVycyBhcmUgZ3VhcmFu
dGVlZAorICAgIC8vIHRvIGJlIHVubmVjZXNzYXJ5IGlmIHRoZSBkYXRhIGZvcm1hdHMgYXJlIHRo
ZSBzYW1lLgorICAgIHZvaWQgZW1pdChBc3NlbWJseUhlbHBlcnMmLCBHUFJSZWcgc2NyYXRjaCA9
IEludmFsaWRHUFJSZWcsIEdQUlJlZyBmcFNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnKTsKKworcHJp
dmF0ZToKKyAgICBGb3JtYXR0ZWRSZWdpc3RlciBtX2Zyb207CisgICAgRm9ybWF0dGVkUmVnaXN0
ZXIgbV90bzsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV92aXJ0dWFsUmVnaXN0ZXI7Cit9OworCisv
LyBOb3RlLCB0aGlzIHdpbGwgcmVhcnJhbmdlIHRoZSB2ZWN0b3IgaW4gd2hhdGV2ZXIgd2F5IGl0
IHdhbnRzLgordm9pZCBzaHVmZmxlKEFzc2VtYmx5SGVscGVycyYsIFZlY3RvcjxUcmFuc2Zlcj4m
LCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIGZwU2NyYXRjaCk7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHU2h1
ZmZsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ1MSw2ICs1NDUx
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtCcmFuY2hlcygpCiAgICAgfQogfQogCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpzaHVmZmxlVG9DYW5vbmljYWwoKQoreworICAgIAorfQorCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTYwNTk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02ODksNiArNjg5LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gSWYgaW4gU1NBLCBjaGVjayB0aGF0IHRoaXMgbm9k
ZSBpc24ndCBsaXZlIGF0IHRoZSB0YWlsIG9mIHRoZSBibG9jay4KKyAgICAgICAgaWYgKG1faml0
LmdyYXBoKCkubV9mb3JtID09IFNTQQorICAgICAgICAgICAgJiYgbV9ibG9jay0+c3NhLT5saXZl
QXRUYWlsLmZpbmQobV9jdXJyZW50Tm9kZSkgIT0gbV9ibG9jay0+c3NhLT5saXZlQXRUYWlsLmVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogCiAgICAgICAgIC8vIENoZWNrIGlm
IHRoZSBsYXN0Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCiAgICAgICAgIE5vZGUqIGxh
c3ROb2RlID0gbV9ibG9jay0+bGFzdCgpOwpAQCAtMjIxOCw3ICsyMjIzLDIwIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiBnZW5lcmF0aW9uSW5mbyhlZGdlLm5vZGUoKSk7CiAgICAg
fQotCisgICAgCisgICAgRm9ybWF0dGVkUmVnaXN0ZXIgY3VycmVudEZvcm1hdChOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mbyhu
b2RlKTsKKyAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9u
ZSkgeworICAgICAgICAgICAgaWYgKHVzZXNHUFIoaW5mby5yZWdpc3RlckZvcm1hdCgpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gRm9ybWF0dGVkUmVnaXN0ZXIoaW5mby5yZWdpc3RlckZvcm1h
dCgpLCBpbmZvLmdwcigpKTsKKyAgICAgICAgICAgIHJldHVybiBGb3JtYXR0ZWRSZWdpc3Rlcihp
bmZvLnJlZ2lzdGVyRm9ybWF0KCksIGluZm8uZnByKCkpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBGb3JtYXR0ZWRSZWdpc3RlcihpbmZvLnNwaWxsRm9ybWF0KCkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNodWZmbGVUb0Nhbm9uaWNhbCgpOworICAgIAogICAgIC8vIFRoZSBKSVQsIHdo
aWxlIGFsc28gcHJvdmlkZXMgTWFjcm9Bc3NlbWJsZXIgZnVuY3Rpb25hbGl0eS4KICAgICBKSVRD
b21waWxlciYgbV9qaXQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE2MDU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
Z3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAgICAgICAgIFNjb3JlQm9h
cmQgc2NvcmVCb2FyZChtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbCk7CiAgICAgICAgIHNjb3Jl
Qm9hcmQuYXNzZXJ0Q2xlYXIoKTsKICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDcg
KzQyMCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdW5zaWduZWQgdG9JbmRleChHUFJS
ZWcgcmVnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlZyAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICAgICAgaWYgKHJlZyA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0dXJuIEludmFs
aWRJbmRleDsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ocmVnKSA8IDE2KTsKICAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4Rm9yUmVnaXN0ZXJbMTZdID0geyAwLCAy
LCAxLCAzLCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgNSwgNCwgNiwgNywgOCwgSW52YWxp
ZEluZGV4LCA5LCAxMCwgSW52YWxpZEluZGV4LCBJbnZhbGlkSW5kZXggfTsKICAgICAgICAgcmV0
dXJuIGluZGV4Rm9yUmVnaXN0ZXJbcmVnXTsKQEAgLTQzOCw3ICs0MzksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIH07CiAgICAgICAgIHJldHVybiBuYW1lRm9yUmVnaXN0ZXJbcmVnXTsKICAgICB9Ci0K
KyAgICAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW52YWxpZEluZGV4ID0gMHhmZmZmZmZm
ZjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219293</attachid>
            <date>2013-12-15 20:49:36 -0800</date>
            <delta_ts>2013-12-16 22:01:14 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>69256</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkocmV2
aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3Jt
YXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwxNiBAQCBpbmxpbmUgYm9vbCBpc0pT
Qm9vbGVhbihEYXRhRm9ybWF0IGZvcm1hCiAgICAgcmV0dXJuIGlzSlNGb3JtYXQoZm9ybWF0LCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKIH0KIAoraW5saW5lIGJvb2wgdXNlc0ZQUihEYXRhRm9ybWF0
IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGU7CiB9CiAK
K2lubGluZSBib29sIHVzZXNHUFIoRGF0YUZvcm1hdCBmb3JtYXQpCit7CisgICAgcmV0dXJuICF1
c2VzRlBSKGZvcm1hdCkgJiYgZm9ybWF0ICE9IERhdGFGb3JtYXROb25lOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwogI2VuZGlmIC8vIERhdGFGb3JtYXRfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0aW9uVW5pdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdGlvblVuaXQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdGlvblVuaXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR0FsbG9jYXRpb25Vbml0X2gKKyNkZWZpbmUgREZHQWxsb2Nh
dGlvblVuaXRfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdGb3JtYXR0
ZWRSZWdpc3Rlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVj
dCBOb2RlOworCitjbGFzcyBBbGxvY2F0aW9uVW5pdCB7CitwdWJsaWM6CisgICAgQWxsb2NhdGlv
blVuaXQoKQorICAgICAgICA6IG1fd29yZCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhw
bGljaXQgQWxsb2NhdGlvblVuaXQoTm9kZSogbm9kZSkKKyAgICAgICAgOiBtX3dvcmQoYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpCisgICAgeworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTxSZWdpc3RlckNsYXNzIHJlZ2lzdGVyQ2xhc3M+CisgICAgc3RhdGljIEFsbG9jYXRpb25Vbml0
IHNjcmF0Y2godW5zaWduZWQgc2NyYXRjaEluZGV4KQorICAgIHsKKyAgICAgICAgQWxsb2NhdGlv
blVuaXQgcmVzdWx0OworICAgICAgICByZXN1bHQubV93b3JkID0gc2NyYXRjaEluZGV4IDw8IHNj
cmF0Y2hTaGlmdCgpOworICAgICAgICBpZiAocmVnaXN0ZXJDbGFzcyA9PSBEb3VibGVSZWdpc3Rl
cnMpCisgICAgICAgICAgICByZXN1bHQubV93b3JkIHw9IGZwQml0KCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIW1fd29yZDsgfQorICAgIGJvb2wgaXNTY3JhdGNoKCkgY29uc3QgeyByZXR1cm4gbV93b3Jk
ICYgc2NyYXRjaEJpdCgpOyB9CisgICAgYm9vbCBpc05vZGUoKSBjb25zdCB7IHJldHVybiBtX3dv
cmQgJiYgIWlzU2NyYXRjaCgpOyB9CisgICAgCisgICAgTm9kZSogbm9kZSgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaXNOb2RlKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PE5vZGUqPihtX3dvcmQpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBzY3JhdGNoSW5kZXgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2NyYXRjaCgpKTsKKyAgICAgICAgcmV0
dXJuIG1fd29yZCA+PiBzY3JhdGNoU2hpZnQoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
UmVnaXN0ZXJDbGFzcyByZWdpc3RlckNsYXNzPgorICAgIGJvb2wgaXNSZWdpc3RlckNsYXNzKCkK
KyAgICB7CisgICAgICAgIGlmIChpc05vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBub2RlKCkt
PmxvY2F0aW9uLmlzUmVnaXN0ZXJDbGFzczxyZWdpc3RlckNsYXNzPigpOworICAgICAgICBpZiAo
cmVnaXN0ZXJDbGFzcyA9PSBEb3VibGVSZWdpc3RlcikKKyAgICAgICAgICAgIHJldHVybiAhISht
X3dvcmQgJiBmcEJpdCgpKTsKKyAgICAgICAgcmV0dXJuICEobV93b3JkICYgZnBCaXQoKSk7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAg
ICBIYXNoU2V0PEFsbG9jYXRpb25Vbml0Kj4mIHNldCgpCisgICAgeworICAgICAgICBpZiAocmVn
aXN0ZXJDbGFzcyA9PSBHZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIG1fdmFs
dWVzOworICAgICAgICByZXR1cm4gbV9kb3VibGVzOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFk
ZChBbGxvY2F0aW9uVW5pdCogdW5pdCkKKyAgICB7CisgICAgICAgIGlmICh1bml0LT5pc1JlZ2lz
dGVyQ2xhc3M8R2VuZXJhbFJlZ2lzdGVycz4oKSkKKyAgICAgICAgICAgIG1fdmFsdWVzLmFkZCh1
bml0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kb3VibGVzLmFkZCh1bml0KTsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1aW50cHRyX3Qgc2NyYXRjaEJpdCgpIHsg
cmV0dXJuIDE7IH0KKyAgICBzdGF0aWMgdWludHB0cl90IGZwQml0KCkgeyByZXR1cm4gMjsgfQor
ICAgIHN0YXRpYyB1bnNpZ25lZCBzY3JhdGNoU2hpZnQoKSB7IHJldHVybiAyOyB9CisgICAgCisg
ICAgdWludHB0cl90IG1fd29yZDsKKyAgICBIYXNoU2V0PEFsbG9jYXRpb25Vbml0Kj4gbV92YWx1
ZXM7CisgICAgSGFzaFNldDxBbGxvY2F0aW9uVW5pdCo+IG1fZG91YmxlczsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHQWxsb2NhdGlvblVuaXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5Rm9yUmVn
aXN0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitBdmFpbGFiaWxpdHlGb3JS
ZWdpc3RlciBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcjo6Zm9yd2FyZERlbHRhRm9yTmRvZShOb2Rl
KiBub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgU2V0TG9jYWw6
IHsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICByZXR1cm4gQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIoCisg
ICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCB2YXJpYWJsZS0+
Zmx1c2hlZEF0KCkpLAorICAgICAgICAgICAgdmFyaWFibGUtPmxvY2FsKCkpOworICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKKyAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICByZXR1cm4gQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIoCisgICAgICAgICAgICBB
dmFpbGFiaWxpdHkobm9kZSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKSwKKyAgICAgICAgICAgIHZh
cmlhYmxlLT5sb2NhbCgpKTsKKyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBj
YXNlIE1vdkhpbnQ6CisgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKKyAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICByZXR1cm4gQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIoCisgICAgICAgICAgICBBdmFpbGFi
aWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSwKKyAgICAgICAgICAgIHZhcmlhYmxlLT5sb2Nh
bCgpKTsKKyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBjYXNlIFpvbWJpZUhp
bnQ6IHsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICByZXR1cm4gQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIo
CisgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCksCisgICAgICAgICAgICB2
YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKCk7CisgICAg
fQorfQorCit2b2lkIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJyIiwgbV9yZWcub2Zmc2V0KCksICI6ICIsIG1f
YXZhaWxhYmlsaXR5KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyX2gK
KyNkZWZpbmUgREZHQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXJfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHkuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBBdmFpbGFiaWxpdHlGb3JSZWdpc3RlciB7CitwdWJsaWM6
CisgICAgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIoKSB7IH0KKyAgICAKKyAgICBBdmFpbGFiaWxp
dHlGb3JSZWdpc3RlcihBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5LCBWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQorICAgICAgICA6IG1fYXZhaWxhYmlsaXR5KGF2YWlsYWJpbGl0eSkKKyAgICAgICAgLCBt
X3JlZ2lzdGVyKHJlZykKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIW1fYXZhaWxhYmlsaXR5ICYmICFtX3JlZ2lzdGVyLmlzVmFsaWQoKTsg
fQorICAgIAorICAgIGNvbnN0IEF2YWlsYWJpbGl0eSYgYXZhaWxhYmlsaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9hdmFpbGFiaWxpdHk7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcjsgfQorICAgIAorICAgIC8vIFJldHVybnMg
YW4gQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIgdGhhdCBkZXNjcmliZXMgdGhlIGF2YWlsYWJpbGl0
eSBkZWx0YSwgd2hlbgorICAgIC8vIHNjYW5uaW5nIGZvcndhcmQsIGZvciBhIG5vZGUuCisgICAg
c3RhdGljIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyIGZvcndhcmREZWx0YUZvck5vZGUoTm9kZSop
OworICAgIAorICAgIHZvaWQgYXBwbHlEZWx0YShPcGVyYW5kczxBdmFpbGFiaWxpdHk+JiBvcGVy
YW5kcykgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG9wZXJhbmRzLm9wZXJhbmQodmlydHVhbFJlZ2lzdGVyKCkpID0gYXZhaWxh
YmlsaXR5KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIAorcHJpdmF0ZToKKyAgICBBdmFpbGFiaWxpdHkgbV9hdmFpbGFiaWxpdHk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG1fcmVnaXN0ZXI7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0F2YWlsYWJp
bGl0eUZvclJlZ2lzdGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE2MDU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICBIYXNoU2V0PE5v
ZGUqPiBsaXZlQXRUYWlsOwogICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2
YWx1ZXNBdEhlYWQ7CiAgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVl
c0F0VGFpbDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgVmVjdG9yPE5vZGUqPj4gZXh0cmFLaWxs
czsKICAgICAgICAgCiAgICAgICAgIFNTQURhdGEoQmFzaWNCbG9jayopOwogICAgICAgICB+U1NB
RGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JtYXR0ZWRSZWdp
c3Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3Jt
YXR0ZWRSZWdpc3Rlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Zvcm1hdHRlZFJlZ2lzdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdGb3JtYXR0ZWRSZWdpc3Rlci5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9p
ZCBGb3JtYXR0ZWRSZWdpc3Rlcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChkYXRhRm9ybWF0VG9TdHJpbmcoZGF0YUZvcm1hdCgpKSk7CisgICAgCisgICAg
aWYgKGRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIG91dC5wcmludCgiOiIpOworICAgIGlmICh1c2VzR1BSKGRhdGFGb3JtYXQoKSkpCisg
ICAgICAgIG91dC5wcmludChncHIoKSk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQoZnBy
KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JtYXR0ZWRS
ZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9y
bWF0dGVkUmVnaXN0ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRm9ybWF0dGVkUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0Zvcm1hdHRlZFJlZ2lzdGVyX2gKKyNkZWZpbmUgREZHRm9ybWF0dGVkUmVnaXN0ZXJfaAor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCisjaW5jbHVk
ZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIkZQUkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitlbnVtIFJlZ2lzdGVyQ2xhc3MgeyBHZW5lcmFsUmVnaXN0ZXJzLCBE
b3VibGVSZWdpc3RlcnMgfTsKKworY2xhc3MgRm9ybWF0dGVkUmVnaXN0ZXIgeworcHVibGljOgor
ICAgIEZvcm1hdHRlZFJlZ2lzdGVyKCkKKyAgICAgICAgOiBtX3JlZ2lzdGVyKHN0YXRpY19jYXN0
PGludDhfdD4oSW52YWxpZEdQUlJlZykpCisgICAgICAgICwgbV9kYXRhRm9ybWF0KERhdGFGb3Jt
YXROb25lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PEdQUlJlZz4obV9yZWdp
c3RlcikgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxGUFJS
ZWc+KG1fcmVnaXN0ZXIpID09IEludmFsaWRGUFJSZWcpOworICAgIH0KKyAgICAKKyAgICBGb3Jt
YXR0ZWRSZWdpc3RlcihEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCisgICAgICAgIDogbV9yZWdpc3Rl
cihzdGF0aWNfY2FzdDxpbnQ4X3Q+KEludmFsaWRHUFJSZWcpKQorICAgICAgICAsIG1fZGF0YUZv
cm1hdChzdGF0aWNfY2FzdDxpbnQ4X3Q+KGRhdGFGb3JtYXQpKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgRm9ybWF0dGVkUmVnaXN0ZXIoRGF0YUZvcm1hdCBkYXRhRm9ybWF0LCBHUFJSZWcgZ3By
KQorICAgICAgICA6IG1fcmVnaXN0ZXIoc3RhdGljX2Nhc3Q8aW50OF90PihncHIpKQorICAgICAg
ICAsIG1fZGF0YUZvcm1hdChkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNH
UFIoZGF0YUZvcm1hdCkpOworICAgIH0KKyAgICAKKyAgICBGb3JtYXR0ZWRSZWdpc3RlcihEYXRh
Rm9ybWF0IGRhdGFGb3JtYXQsIEZQUlJlZyBmcHIpCisgICAgICAgIDogbV9yZWdpc3RlcihzdGF0
aWNfY2FzdDxpbnQ4X3Q+KGZwcikpCisgICAgICAgICwgbV9kYXRhRm9ybWF0KGRhdGFGb3JtYXQp
CisgICAgeworICAgICAgICBBU1NFUlQodXNlc0ZQUihkYXRhRm9ybWF0KSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgc2V0UmVnaXN0ZXIoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIEFTU0VS
VCh1c2VzR1BSKGRhdGFGb3JtYXQoKSkpOworICAgICAgICBtX3JlZ2lzdGVyID0gc3RhdGljX2Nh
c3Q8aW50OF90PihncHIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlZ2lzdGVyKEZQUlJl
ZyBmcHIpCisgICAgeworICAgICAgICBBU1NFUlQodXNlc0ZQUihkYXRhRm9ybWF0KCkpKTsKKyAg
ICAgICAgbV9yZWdpc3RlciA9IHN0YXRpY19jYXN0PGludDhfdD4oZnByKTsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8UmVnaXN0ZXJDbGFzcyByZWdpc3RlckNsYXNzPgorICAgIHZvaWQgc2V0
UmVnaXN0ZXJJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIGlmIChyZWdpc3Rl
ckNsYXNzID09IEdlbmVyYWxSZWdpc3RlcnMpCisgICAgICAgICAgICBzZXRSZWdpc3RlcihHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldFJl
Z2lzdGVyKEZQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpKTsKKyAgICB9CisgICAgCisgICAgdGVt
cGxhdGU8UmVnaXN0ZXJDbGFzcyByZWdpc3RlckNsYXNzPgorICAgIGJvb2wgaXNSZWdpc3RlckNs
YXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChyZWdpc3RlckNsYXNzID09IEdlbmVyYWxS
ZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gdXNlc0dQUihkYXRhRm9ybWF0KCkpOworICAg
ICAgICByZXR1cm4gdXNlc0ZQUihkYXRhRm9ybWF0KCkpOworICAgIH0KKyAgICAKKyAgICBEYXRh
Rm9ybWF0IGRhdGFGb3JtYXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxEYXRhRm9ybWF0
PihtX2RhdGFGb3JtYXQpOyB9CisgICAgCisgICAgR1BSUmVnIGdwcigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQodXNlc0dQUihkYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEdQUlJlZz4obV9yZWdpc3Rlcik7CisgICAgfQorICAgIAorICAgIEZQUlJlZyBm
cHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNGUFIoZGF0YUZvcm1hdCgpKSk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KG1fcmVnaXN0ZXIpOworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTxSZWdpc3RlckNsYXNzIHJlZ2lzdGVyQ2xhc3M+CisgICAgdW5z
aWduZWQgcmVnaXN0ZXJJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAocmVnaXN0ZXJD
bGFzcyA9PSBHZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnRv
SW5kZXgoZ3ByKCkpOworICAgICAgICByZXR1cm4gRlBSSW5mbzo6dG9JbmRleChmcHIoKSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb3JtYXR0ZWRSZWdpc3RlciYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yZWdpc3RlciA9PSBvdGhlci5t
X3JlZ2lzdGVyCisgICAgICAgICAgICAmJiBtX2RhdGFGb3JtYXQgPT0gb3RoZXIubV9kYXRhRm9y
bWF0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9ybWF0dGVkUmVn
aXN0ZXImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBGb3JtYXR0ZWRSZWdp
c3RlciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9yZWdpc3RlciAhPSBvdGhl
ci5tX3JlZ2lzdGVyKQorICAgICAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXIgPCBvdGhlci5tX3Jl
Z2lzdGVyOworICAgICAgICByZXR1cm4gbV9kYXRhRm9ybWF0IDwgb3RoZXIubV9kYXRhRm9ybWF0
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAK
K3ByaXZhdGU6CisgICAgaW50OF90IG1fcmVnaXN0ZXI7CisgICAgaW50OF90IG1fZGF0YUZvcm1h
dDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHRm9ybWF0dGVkUmVnaXN0ZXJfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhh
c2UuY3BwCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDkg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBMaXZlbmVzc0FuYWx5
c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgotICAgIExpdmVuZXNzQW5hbHlzaXNQ
aGFzZShHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogUGhhc2UoZ3JhcGgsICJsaXZlbmVzcyBhbmFs
eXNpcyIpCisgICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCwgQXZhaWxhYmls
aXR5TGl2ZW5lc3NNb2RlIGF2YWlsYWJpbGl0eU1vZGUpCisgICAgICAgIDogUGhhc2UoZ3JhcGgs
IGF2YWlsYWJpbGl0eU1vZGUgPT0gQXZhaWxhYmlsaXR5Tm90TGl2ZSA/ICJsaXZlbmVzcyBhbmFs
eXNpcyIgOiAibGl2ZW5lc3MgYW5hbHlzaXMgKGluY2wuIGF2YWlsYWJpbGl0eSkiKQorICAgICAg
ICAsIG1fYXZhaWxhYmlsaXR5TW9kZShhdmFpbGFiaWxpdHlNb2RlKQogICAgIHsKICAgICB9CiAg
ICAgCkBAIC04Niw1MSArODcsMTA4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghYmxvY2spCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgICAgICBibG9jay0+c3NhLT5leHRyYUtp
bGxzLmNsZWFyKCk7CisgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhh
dCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQogICAg
ICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExODQ1NQogICAgICAgICBtX2xpdmUgPSBibG9jay0+c3NhLT5saXZlQXRUYWlsOwogICAgICAg
ICAKKyAgICAgICAgaWYgKG1fYXZhaWxhYmlsaXR5TW9kZSA9PSBBdmFpbGFiaWxpdHlJc0xpdmUp
IHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5
QXRIZWFkOworICAgICAgICAgICAgbV9kZWx0YXMucmVzaXplKGJsb2NrLT5zaXplKCkpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+
c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rl
ciBkZWx0YSA9CisgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eTo6Zm9yd2FyZERlbHRh
Rm9yTm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoISFkZWx0YSkgeworICAgICAgICAg
ICAgICAgICAgICBBdmFpbGFiaWxpdHkgb2xkQXZhaWxhYmlsaXR5ID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQoZGVsdGEudmlydHVhbFJlZ2lzdGVyKCkp
OworICAgICAgICAgICAgICAgICAgICBkZWx0YS5hcHBseURlbHRhKG1fYXZhaWxhYmlsaXR5KTsK
KyAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBBdmFpbGFiaWxpdHlGb3JSZWdpc3RlcihvbGRB
dmFpbGFiaWxpdHksIGRlbHRhLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbV9kZWx0YXNbbm9kZUluZGV4XSA9IGRlbHRhOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQobV9hdmFpbGFiaWxpdHkgPT0g
YmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsKTsKKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgt
LTspIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gR2l2ZW4gYW4gVXBzaWxvbjoKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
IC8vICAgIG46IFVwc2lsb24oQHgsIF5wKQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFuZCB1c2VzIEB4LgorICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gR2l2ZW4gYSBQaGk6CisgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICBwOiBQaGkoKQorICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBh
IHVzZSBub3IgYSBkZWYuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBH
aXZlbiBhIG5vZGU6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICBu
OiBUaGluZ3koQGEsIEBiLCBAYykKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
IC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwgQGMuCiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246Ci0gICAgICAgICAgICAvLwot
ICAgICAgICAgICAgLy8gICAgbjogVXBzaWxvbihAeCwgXnApCi0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFuZCB1c2VzIEB4Lgot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhpOgotICAgICAgICAgICAg
Ly8KLSAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCi0gICAgICAgICAgICAvLwotICAgICAgICAg
ICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVzZSBub3IgYSBkZWYuCi0gICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2RlOgotICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQotICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwg
QGMuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAg
ICAgICAgICAgY2FzZSBVcHNpbG9uOiB7Ci0gICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9k
ZS0+cGhpKCk7Ci0gICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkpOwotICAgICAgICAg
ICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7Ci0gICAgICAgICAgICAgICAgbV9saXZlLmFkZChu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgVXBzaWxvbjogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBub2Rl
LT5waGkoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkpOworICAgICAg
ICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBt
X2xpdmUuYWRkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgUGhpOiB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZENoaWxkVXNlKTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
bV9saXZlLnJlbW92ZShub2RlKTsKLSAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElM
RFJFTihtX2dyYXBoLCBub2RlLCBhZGRDaGlsZFVzZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2F2YWlsYWJpbGl0eU1vZGUgPT0gQXZhaWxhYmls
aXR5SXNMaXZlCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5FeGl0KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2F2YWls
YWJpbGl0eS5zaXplKCk7ICtpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxh
YmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1fYXZhaWxhYmlsaXR5W2ldOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChmbHVzaC5mb3JtYXQoKSAhPSBEZWFkRmx1c2gKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgZmx1c2guZm9ybWF0KCkgIT0gQ29uZmxpY3RpbmdGbHVz
aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF2YWlsbGFi
aWxpdHkuaGFzTm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIGNoaWxkID0gYXZhaWxhYmlsaXR5Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobV9saXZlLmNvbnRhaW5zKGNoaWxkKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmRG
b3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzTGl2ZSA9IG1f
Z3JhcGguaXNMaXZlSW5CeXRlY29kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzTGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2xpdmUuYWRkKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBIYXNoTWFwPE5vZGUqLCBWZWN0b3I8Tm9kZSo+Pjo6QWRkUmVzdWx0IHJlc3VsdCA9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5zc2EtPmV4dHJhS2lsbHMuYWRk
KG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChtX2F2YWlsYWJpbGl0eU1vZGUgPT0gQXZhaWxhYmlsaXR5SXNMaXZlKQorICAgICAg
ICAgICAgICAgIG1fZGVsdGFzW25vZGVJbmRleF0uYXBwbHkobV9hdmFpbGFiaWxpdHkpOwogICAg
ICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAobV9hdmFpbGFiaWxpdHlNb2RlID09IEF2YWls
YWJpbGl0eUlzTGl2ZSkKKyAgICAgICAgICAgIEFTU0VSVChtX2F2YWlsYWJpbGl0eSA9PSBibG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQpOworICAgICAgICAKICAgICAgICAgaWYgKG1fbGl2
ZSA9PSBibG9jay0+c3NhLT5saXZlQXRIZWFkKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKQEAgLTE1MCwxNCArMjA4LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIGVkZ2Uuc2V0S2lsbFN0
YXR1cyhtX2xpdmUuYWRkKGVkZ2Uubm9kZSgpKS5pc05ld0VudHJ5ID8gRG9lc0tpbGwgOiBEb2Vz
Tm90S2lsbCk7CiAgICAgfQogICAgIAorICAgIEF2YWlsYWJpbGl0eUxpdmVuZXNzTW9kZSBtX2F2
YWlsYWJpbGl0eU1vZGU7CiAgICAgYm9vbCBtX2NoYW5nZWQ7CiAgICAgSGFzaFNldDxOb2RlKj4g
bV9saXZlOworICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7CisgICAg
VmVjdG9yPEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyPiBtX2RlbHRhczsKIH07CiAKLWJvb2wgcGVy
Zm9ybUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtTGl2ZW5lc3NB
bmFseXNpcyhHcmFwaCYgZ3JhcGgsIEF2YWlsYWJpbGl0eUxpdmVuZXNzTW9kZSBtb2RlKQogewog
ICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgTGl2ZW5lc3MgQW5hbHlzaXMg
UGhhc2UiKTsKLSAgICByZXR1cm4gcnVuUGhhc2U8TGl2ZW5lc3NBbmFseXNpc1BoYXNlPihncmFw
aCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPExpdmVuZXNzQW5hbHlzaXNQaGFzZT4oZ3JhcGgsIG1v
ZGUpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHJldmlz
aW9uIDE2MDU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDE1IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR3JhcGg7CiAKLS8vIENvbXB1dGVzIEJhc2lj
QmxvY2s6OnNzYS0+bGl2ZUF0SGVhZC9saXZlQXRUYWlsLgorLy8gQ29tcHV0ZXMgQmFzaWNCbG9j
azo6c3NhLT5saXZlQXRIZWFkL2xpdmVBdFRhaWwuIE1heSBvciBtYXkgbm90IGluY2x1ZGUgdGhp
bmdzCisvLyB0aGF0IGFyZSBwYXJ0IG9mIEF2YWlsYWJpbGl0eS4KIAotYm9vbCBwZXJmb3JtTGl2
ZW5lc3NBbmFseXNpcyhHcmFwaCYpOworZW51bSBBdmFpbGFiaWxpdHlMaXZlbmVzc01vZGUgewor
ICAgIEF2YWlsYWJpbGl0eU5vdExpdmUsIC8vIFVzZWZ1bCBpZiB5b3UncmUganVzdCBkb2luZyBw
cnVuaW5nIGZvciBDRkEuCisgICAgQXZhaWxhYmlsaXR5SXNMaXZlIC8vIFVzZWZ1bCBpZiB5b3Un
cmUgZG9pbmcgcmVnaXN0ZXIgYWxsb2NhdGlvbi4KK307CisKK2Jvb2wgcGVyZm9ybUxpdmVuZXNz
QW5hbHlzaXMoR3JhcGgmLCBBdmFpbGFiaWxpdHlMaXZlbmVzc01vZGUgPSBBdmFpbGFiaWxpdHlO
b3RMaXZlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9jYXRp
b25BbGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1Nj
b3JlQm9hcmQuaCIKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RhY2tB
bGlnbm1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTG9jYXRpb25BbGxvY2F0aW9uUGhhc2UgOiBw
dWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIExvY2F0aW9uQWxsb2NhdGlvblBoYXNlKEdyYXBo
JiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImxvY2F0aW9uIGFsbG9jYXRpb24iKQor
ICAgICAgICAsIG1fbmV4dFNjcmF0Y2hJbmRleCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7
CisgICAgICAgIAorICAgICAgICAvLyBDbGVhcnMgbWlzYy5hbGxvY2F0aW9uVW5pdCBiZWNhdXNl
IGl0IG92ZXJsYXBzIG1pc2MucmVwbGFjZW1lbnQuCisgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBs
YWNlbWVudHMoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgaG93IG1hbnkgYWxs
b2NhdGlvbiB1bml0cyB3ZSB3aWxsIGhhdmUuCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQWxs
b2NhdGlvblVuaXRzID0gMDsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZBbGxvY2F0aW9uVW5p
dHMgKz0gMSArIG5vZGUtPm51bVNjcmF0Y2hHUFJzKCkgKyBub2RlLT5udW1TY3JhdGNoRlBScygp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX3NsYWJPZkFs
bG9jYXRpb25Vbml0cyA9IHN0ZDo6bWFrZV91bmlxdWU8QWxsb2NhdGlvblVuaXRbXT4obnVtYmVy
T2ZBbGxvY2F0aW9uVW5pdHMpOworICAgICAgICAKKyAgICAgICAgLy8gQ3JlYXRlIGFsbG9jYXRp
b24gdW5pdHMgZm9yIGFsbCBub2Rlcy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAg
ICAgICAgICAgaWYgKCFub2RlLT5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9ub2Rlcy5hcHBlbmQo
bm9kZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+bWlzYy5hbGxvY2F0aW9uVW5pdCA9IGFkZEFs
bG9jYXRpb25Vbml0KEFsbG9jYXRpb25Vbml0KG5vZGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZSBpbnRlcmZlcmVuY2UuCisgICAgICAg
IFZlY3RvcjxBbGxvY2F0aW9uVW5pdCo+IHRlbXBVbml0czsKKyAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlID0gYmxvY2stPnNzYS0+
bGl2ZUF0SGVhZDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9k
ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisKKyAgICAgICAgICAgICAgICB0ZW1w
VW5pdHMucmVzaXplKDApOworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRv
ciBpdGVyID0gbGl2ZS5iZWdpbigpOworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+Ojpp
dGVyYXRvciBlbmQgPSBsaXZlLmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9
IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgICAgICAgICB0ZW1wVW5pdHMuYXBwZW5kKCgqaXRl
ciktPm1pc2MuYWxsb2NhdGlvblVuaXQpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNS
ZXN1bHQoKSkKKyAgICAgICAgICAgICAgICAgICAgdGVtcFVuaXRzLmFwcGVuZChub2RlLT5taXNj
LmFsbG9jYXRpb25Vbml0KTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2Rl
LT5udW1TY3JhdGNoR1BScygpKQorICAgICAgICAgICAgICAgICAgICB0ZW1wVW5pdHMuYXBwZW5k
KGFkZFNjcmF0Y2hBbGxvY2F0aW9uVW5pdDxHZW5lcmFsUmVnaXN0ZXJzPigpKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5udW1TY3JhdGNoRlBScygpKQorICAgICAg
ICAgICAgICAgICAgICB0ZW1wVW5pdHMuYXBwZW5kKGFkZFNjcmF0Y2hBbGxvY2F0aW9uVW5pdDxE
b3VibGVSZWdpc3RlcnM+KCkpOworICAgICAgICAgICAgICAgIGludGVyZmVyZSh0ZW1wVW5pdHMp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1DaGlsZHJlbihu
b2RlKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNo
aWxkKG5vZGUsIGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZS5kb2VzS2lsbCgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLnJlbW92ZShlZGdlLm5vZGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2UgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxOb2RlKj4+IGl0ZXIgPSBibG9jay0+c3NhLT5leHRyYUtp
bGxzLmZpbmQobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0gYmxvY2stPnNzYS0+
ZXh0cmFLaWxscy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiYg
a2lsbHMgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0ga2lsbHMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5yZW1v
dmUoa2lsbHNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpICYmIG5vZGUtPmhhc1Jlc3Vs
dCgpKQorICAgICAgICAgICAgICAgICAgICBsaXZlLmFkZChub2RlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHRlbXBVbml0cy5yZXNpemUoMCk7CisgICAgICAgICAgICBIYXNoU2V0PE5v
ZGUqPjo6aXRlcmF0b3IgaXRlciA9IGxpdmUuYmVnaW4oKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBsaXZlLmVuZCgpOworICAgICAgICAgICAgZm9yICg7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgdGVtcFVuaXRzLmFwcGVuZCgoKml0
ZXIpLT5taXNjLmFsbG9jYXRpb25Vbml0KTsKKyAgICAgICAgICAgIGludGVyZmVyZSh0ZW1wVW5p
dHMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaXJzdCB1c2UgV2Vsc2gtUG93
ZWxsIHRvIHBpY2sgc3BpbGwgc2xvdHMsIGkuZS4gdmlydHVhbCByZWdpc3RlcnMuIEV2ZXJ5IG5v
ZGUgdGhhdAorICAgICAgICAvLyBwcm9kdWNlcyBhIHJlc3VsdCBtdXN0IGhhdmUgYSB2aXJ0dWFs
IHJlZ2lzdGVyLgorICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBoYXZlIGEgc3RvcnkgZm9yIG5v
bi1zY3JhdGNoIGludGVyZmVyZW5jZSBkZWdyZWUuCisgICAgICAgIHN0ZDo6c29ydChtX25vZGVz
LmJlZ2luKCksIG1fbm9kZXMuZW5kKCksIGludGVyZmVyZW5jZURlZ3JlZUxlc3NUaGFuKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICBOb2RlKiBmaXJzdE5vZGUgPSBub2Rlc1tpXTsKKyAgICAgICAgICAgIGlmIChmaXJzdE5vZGUt
Pmhhc1ZpcnR1YWxSZWdpc3RlcigpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9CisgICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWwrKyk7Cisg
ICAgICAgICAgICBmaXJzdE5vZGUtPnNldFZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaTsgai0tOykgeworICAgICAgICAgICAg
ICAgIE5vZGUqIHNlY29uZE5vZGUgPSBub2Rlc1tqXTsKKyAgICAgICAgICAgICAgICBpZiAoc2Vj
b25kTm9kZS0+aGFzVmlydHVhbFJlZ2lzdGVyKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGJvb2wgaW50ZXJmZXJlcyA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGhhdmUgYSB3YXkgb2YgZWFzaWx5IHNjYW5uaW5nIGFs
bCBhZGphY2VudCBub2RlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBpbnRlcmZlcmVuY2Ug
Z3JhcGguCisgICAgICAgICAgICAgICAgaWYgKEhhc2hTZXQ8Tm9kZSo+KiBlZGdlcyA9IHNlY29u
ZE5vZGUtPm1pc2MuaW50ZXJmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gZWRnZXMtPmJlZ2luKCk7CisgICAgICAgICAgICAgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBlZGdlcy0+ZW5kKCk7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSAqaXRlcjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChvdGhlck5vZGUtPnVzZXNWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmVyZXMgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChpbnRlcmZlcmVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBzZWNvbmROb2RlLT5zZXRWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVXNlIENoYWl0
aW4ncyBhbGdvcml0aG0gZm9yIHJlZ2lzdGVycy4gRG8gYSBzZXBhcmF0ZSBydW4gZm9yIHRoZSB0
d28gY2xhc3NlcyBvZgorICAgICAgICAvLyByZWdpc3RlcnMgdGhhdCB3ZSBkZWFsIHdpdGguCisg
ICAgICAgIGNoYWl0aW5BbGxvY2F0ZTxHZW5lcmFsUmVnaXN0ZXJzLCBHUFJJbmZvPihub2Rlcyk7
CisgICAgICAgIGNoYWl0aW5BbGxvY2F0ZTxEb3VibGVSZWdpc3RlcnMsIEZQUkluZm8+KG5vZGVz
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEZpbmFsbHkgZGVsZXRlIGFsbCBpbnRlcmZlcmVuY2Ug
c2V0cy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJs
b2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5k
ZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFub2Rl
LT5taXNjLmludGVyZmVyZW5jZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgZGVsZXRlIG5vZGUtPm1pc2MuaW50ZXJmZXJlbmNlOworICAgICAgICAgICAg
ICAgIG5vZGUtPm1pc2MuaW50ZXJmZXJlbmNlID0gMDsgLy8gVGhpcyBvdWdodCBub3QgYmUgc3Ry
aWN0bHkgbmVjZXNzYXJ5LCBidXQgaXQgcHJlc2VydmVzIHNvbWUga2luZCBvZiBzYW5pdHkuCisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgQWxsb2NhdGlvblVuaXQqIGFkZEFsbG9jYXRpb25Vbml0KGNvbnN0IEFs
bG9jYXRpb25Vbml0JiBhbGxvY2F0aW9uVW5pdCkKKyAgICB7CisgICAgICAgIEFsbG9jYXRpb25V
bml0KiByZXN1bHQgPSAmbV9zbGFiT2ZBbGxvY2F0aW9uVW5pdHNbbV9hbGxvY2F0aW9uVW5pdHMu
c2l6ZSgpXTsKKyAgICAgICAgbV9hbGxvY2F0aW9uVW5pdHMuYXBwZW5kKHJlc3VsdCk7CisgICAg
ICAgICpyZXN1bHQgPSBhbGxvY2F0aW9uVW5pdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8UmVnaXN0ZXJDbGFzcyByZWdpc3RlckNsYXNzPgorICAg
IEFsbG9jYXRpb25Vbml0KiBhZGRTY3JhdGNoQWxsb2NhdGlvblVuaXQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkZEFsbG9jYXRpb25Vbml0KAorICAgICAgICAgICAgQWxsb2NhdGlvblVuaXQ6
OnNjcmF0Y2g8cmVnaXN0ZXJDbGFzcz4obV9uZXh0U2NyYXRjaEluZGV4KyspKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBpbnRlcmZlcmUoY29uc3QgVmVjdG9yPEFsbG9jYXRpb25Vbml0Kj4mIHVu
aXRzKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdW5pdHMuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICBBbGxvY2F0aW9uVW5pdCogdW5pdCA9IHVuaXRzW2ldOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gdW5pdHMuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAg
ICAgICAgQWxsb2NhdGlvblVuaXQqIG90aGVyVW5pdCA9IHVuaXRzW2pdOworICAgICAgICAgICAg
ICAgIHVuaXQtPmFkZChvdGhlclVuaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHZvaWQgaW50ZXJmZXJlV2l0aENoaWxkKE5vZGUqIG5vZGUsIEVkZ2UgZWRn
ZSkKKyAgICB7CisgICAgICAgIGludGVyZmVyZW5jZShub2RlKS0+YWRkKGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgaW50ZXJmZXJlbmNlKGVkZ2Uubm9kZSgpKS0+YWRkKG5vZGUpOworICAgIH0KKyAg
ICAKKyAgICBJbnRlcmZlcmVuY2UqIGludGVyZmVyZW5jZShOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgSW50ZXJmZXJlbmNlKiBpbnRlcmZlcmVuY2UgPSBub2RlLT5taXNjLmludGVyZmVyZW5j
ZTsKKyAgICAgICAgaWYgKCFpbnRlcmZlcmVuY2UpCisgICAgICAgICAgICBub2RlLT5taXNjLmlu
dGVyZmVyZW5jZSA9IGludGVyZmVyZW5jZSA9IG5ldyBJbnRlcmZlcmVuY2UoKTsKKyAgICAgICAg
cmV0dXJuIGludGVyZmVyZW5jZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpbnRlcmZlcmVzKE5v
ZGUqIGEsIE5vZGUqIGIpCisgICAgeworICAgICAgICBpZiAoIWEtPm1pc2MuaW50ZXJmZXJlbmNl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gYS0+bWlzYy5pbnRl
cmZlcmVuY2UtPmNvbnRhaW5zKGIpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQg
aW50ZXJmZXJlbmNlRGVncmVlKE5vZGUqIGEpCisgICAgeworICAgICAgICBpZiAoYS0+bWlzYy5p
bnRlcmZlcmVuY2UpCisgICAgICAgICAgICByZXR1cm4gYS0+bWlzYy5pbnRlcmZlcmVuY2UtPnNp
emUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlu
dGVyZmVyZW5jZURlZ3JlZUxlc3NUaGFuKE5vZGUqIGEsIE5vZGUqIGIpCisgICAgeworICAgICAg
ICByZXR1cm4gaW50ZXJmZXJlbmNlRGVncmVlKGEpIDwgaW50ZXJmZXJlbmNlRGVncmVlKGIpOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxSZWdpc3RlckNsYXNzIHJlZ2lzdGVyQ2xhc3MsIHR5
cGVuYW1lIFJlZ2lzdGVySW5mbz4KKyAgICB2b2lkIGNoYWl0aW5BbGxvY2F0ZShjb25zdCBWZWN0
b3I8Tm9kZSo+JiBvcmlnaW5hbE5vZGVzKQorICAgIHsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiBu
b2RlczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9yaWdpbmFsTm9kZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChvcmlnaW5hbE5vZGVzW2ldLT5sb2NhdGlvbi5p
c1JlZ2lzdGVyQ2xhc3M8cmVnaXN0ZXJDbGFzcz4oKSkKKyAgICAgICAgICAgICAgICBub2Rlcy5h
cHBlbmQob3JpZ2luYWxOb2Rlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxOb2RlKj4gYWxsb2NhdGlvblN0YWNrOworICAgICAgICBWZWN0b3I8Tm9kZSo+IHNwaWxs
czsKKyAgICAgICAgd2hpbGUgKCFub2Rlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIEF0
dGVtcHQgdG8gcHVzaCB0aGluZ3Mgb250byB0aGUgYWxsb2NhdGlvbiBzdGFjay4KKyAgICAgICAg
ICAgIHdoaWxlICghbm9kZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgLy8gU29ydCBi
eSBkZXNjZW5kaW5nIGludGVyZmVyZW5jZSBkZWdyZWUuCisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAvLyBUaGlzIGlubmVyIGxvb3AgcmVxdWlyZXMgdGhhdCBhbGwgbm9kZXMg
d2hvc2UgY3VycmVudCBpbnRlcmZlcmVuY2UgZGVncmVlIGlzCisgICAgICAgICAgICAgICAgLy8g
bGVzcyB0aGFuIG51bWJlck9mUmVnaXN0ZXJzIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LCBh
bmQgdGhleSBhcmUgc29ydGVkCisgICAgICAgICAgICAgICAgLy8gaW4gZGVjcmVhc2luZyBvcmRl
ciBvZiBkZWdyZWUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBCdXQs
IHRoZSBuZXh0IGxvb3AgLSB0aGUgc3BpbGxpbmcgbG9vcCAtIHJlcXVpcmVzIHRoYXQgdGhlIGZp
cnN0IG5vZGUgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8gbGlzdCBoYXMgdGhlIGhpZ2hlc3Qg
ZGVncmVlLiBIZW5jZSwgYSBzb3J0IGlzIHByb2JhYmx5IHRoZSBzaW1wbGVzdCB3YXkgb2YKKyAg
ICAgICAgICAgICAgICAvLyBlbnN1cmluZyBib3RoIHByb3BlcnRpZXMuCisgICAgICAgICAgICAg
ICAgc3RkOjpzb3J0KG5vZGVzLmJlZ2luKCksIG5vZGVzLmVuZCgpLCBzcGVjaWZpY0ludGVyZmVy
ZW5jZUdyZWF0ZXJUaGFuPHJlZ2lzdGVyQ2xhc3M+KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBDaGFpdGluJ3MgYWxnb3JpdGhtIGlzIGZvdW5kZWQgb24gdGhlIGFzc3Vt
cHRpb24gdGhhdCB0aGlzIGNhc2UgaXMgcmFyZS4gV2UKKyAgICAgICAgICAgICAgICAvLyBhcmUg
ZXhwZWN0ZWQgdG8gZHJvcCBkb3duIHRocm91Z2ggdGhpcyBvbiB0aGUgZmlyc3QgZ28tcm91bmQg
YW5kIGZpcnN0IHBsb3cKKyAgICAgICAgICAgICAgICAvLyB0aHJvdWdoIGEgYnVuY2ggb2YgbG93
LWRlZ3JlZSBub2RlcyBpbiB0aGUgbG9vcCBiZWxvdy4gVGhhdCB3aWxsIHRoZW4gcmVkdWNlCisg
ICAgICAgICAgICAgICAgLy8gdGhlIGRlZ3JlZSBvZiB0aGUgcmVtYWluaW5nIG5vZGVzLCBhbmQg
c28gaXQnbGwgdGFrZSBhIHdoaWxlIGJlZm9yZSB0aGlzCisgICAgICAgICAgICAgICAgLy8gYnJl
YWsgaXMgdGFrZW4uIEl0IHdpbGwgb25seSBiZSB0YWtlbiBpZiBzb21ldGhpbmcgbmVlZHMgdG8g
YmUgc3BpbGxlZC4KKyAgICAgICAgICAgICAgICAvLyBUaGVyZSB3aWxsIGJlIG1hbnkgZnVuY3Rp
b25zIGluIHdoaWNoIHdlIHdvbid0IHNwaWxsIGFueXRoaW5nLgorICAgICAgICAgICAgICAgIGlm
IChzcGVjaWZpY0ludGVyZmVyZW5jZURlZ3JlZTxyZWdpc3RlckNsYXNzPihub2Rlcy5sYXN0KCkp
ID49IFJlZ2lzdGVySW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3RT
dGFja1NpemUgPSBhbGxvY2F0aW9uU3RhY2suc2l6ZSgpOworICAgICAgICAgICAgICAgIHdoaWxl
IChzcGVjaWZpY0ludGVyZmVyZW5jZURlZ3JlZTxyZWdpc3RlckNsYXNzPihub2Rlcy5sYXN0KCkp
IDwgUmVnaXN0ZXJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykKKyAgICAgICAgICAgICAgICAgICAg
YWxsb2NhdGlvblN0YWNrLmFwcGVuZChub2Rlcy5yZW1vdmVMYXN0KCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxhc3RTdGFja1NpemU7IGkg
PCBhbGxvY2F0aW9uU3RhY2suc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHJlbW92
ZUludGVyZmVyZW5jZTxyZWdpc3RlckNsYXNzPihhbGxvY2F0aW9uU3RhY2tbaV0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHNwaWxsIG9u
ZSB2YXJpYWJsZS4gU3BpbGxpbmcgdGhlIHZhcmlhYmxlIHdpdGggdGhlIGhpZ2hlc3QgZGVncmVl
CisgICAgICAgICAgICAvLyAoaS5lLiB0aGUgb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxp
c3QpIG1pbmltaXplcyB0aGUgbGlrZWxpaG9vZCB0aGF0IHdlJ2xsCisgICAgICAgICAgICAvLyBo
YXZlIHRvIHNwaWxsIGFueXRoaW5nIGVsc2UuIE5vdGUsIGluc3RlYWQgb2YganVzdCBzcGlsbGlu
ZyBvbmUgdmFyaWFibGUgYW5kCisgICAgICAgICAgICAvLyByZWxvb3BpbmcsIHdlIGNvdWxkIG1h
a2UgdGhpcyBtb3JlIHNjYWxhYmxlIGJ5IHNwaWxsaW5nCisgICAgICAgICAgICAvLyBjdXJyZW50
TWluRGVncmVlIC0gbnVtYmVyT2ZSZWdpc3RlcnMgKyAxIHZhcmlhYmxlcywgYXMgdGhhdCBpcyB0
aGUgbWluaW11bQorICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHZhcmlhYmxlcyB0aGF0IHdvdWxk
IG5lZWQgdG8gYmUgc3BpbGxlZCB0byBlbnN1cmUgdGhhdCB0aGUgYWxsb2NhdGlvbgorICAgICAg
ICAgICAgLy8gbG9vcCBpcyB1bmJsb2NrZWQuIFdlIGNvdWxkIGFwcHJveGltYXRlIHRoaXMgYnkg
cmVwbGFjaW5nIGN1cnJlbnRNaW5EZWdyZWUgd2l0aAorICAgICAgICAgICAgLy8gYSBzbmFwc2hv
dCBvZiBjdXJyZW50TWluRGVncmVlIHByaW9yIHRvIHNwaWxsaW5nOyBpLmUuIHdlIGRvbid0IG5l
ZWQgdG8gYWN0dWFsbHkKKyAgICAgICAgICAgIC8vIHJlY29tcHV0ZSBjdXJyZW50TWluRGVncmVl
IGVhY2ggdGltZSB3ZSBzcGlsbCBhIHZhcmlhYmxlLgorICAgICAgICAgICAgaWYgKCFub2Rlcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2Rlcy5zaXplKCk7IGktLTspCisg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3BlY2lmaWNJbnRlcmZlcmVuY2VEZWdyZWU8
cmVnaXN0ZXJDbGFzcz4obm9kZXNbaV0pID49IFJlZ2lzdGVySW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICByZW1vdmVJbnRlcmZlcmVuY2U8cmVnaXN0ZXJDbGFzcz4obm9kZXNbMF0pOworICAgICAgICAg
ICAgICAgIHNwaWxscy5hcHBlbmQobm9kZXNbMF0pOworICAgICAgICAgICAgICAgIG5vZGVzWzBd
ID0gbm9kZXMubGFzdCgpOworICAgICAgICAgICAgICAgIG5vZGVzLnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IGFzc2lnbiBy
ZWdpc3RlcnMuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFsbG9jYXRpb25TdGFjay5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhbGxvY2F0aW9uU3RhY2tbaV07
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmQgYSByZWdpc3RlciB0aGF0IHdvbid0
IGludGVyZmVyZS4gRG8gdGhpcyBieSBmaXJzdCBmaW5kaW5nIHRoZSByZWdpc3RlcnMKKyAgICAg
ICAgICAgIC8vIHRoYXQgZG8gaW50ZXJmZXJlLgorICAgICAgICAgICAgQml0bWFwPFJlZ2lzdGVy
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM+IGludGVyZmVyZW5jZTsKKyAgICAgICAgICAgIEhhc2hT
ZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbm9kZS0+bWlzYy5pbnRlcmZlcmVuY2UtPnNldDxy
ZWdpc3RlckNsYXNzPigpLmJlZ2luKCk7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRl
cmF0b3IgZW5kID0gbm9kZS0+bWlzYy5pbnRlcmZlcmVuY2UtPnNldDxyZWdpc3RlckNsYXNzPigp
LmVuZCgpOworICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAg
ICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSAqaXRlcjsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCByZWdpc3RlckluZGV4ID0gb3RoZXJOb2RlLT5sb2NhdGlvbi5yZWdpc3RlckluZGV4PHJl
Z2lzdGVyQ2xhc3M+KCk7CisgICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVySW5kZXggPT0gUmVn
aXN0ZXJGaWxlOjpJbnZhbGlkSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZS5zZXQocmVnaXN0ZXJJbmRleCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHJlZ2lzdGVySW5kZXggPSAwOyByZWdpc3RlckluZGV4IDwgUmVnaXN0ZXJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytyZWdpc3RlckluZGV4KSB7CisgICAgICAgICAgICAgICAg
aWYgKGludGVyZmVyZW5jZS5nZXQocmVnaXN0ZXJJbmRleCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5sb2NhdGlvbi5zZXRSZWdpc3RlckluZGV4PHJlZ2lzdGVyQ2xhc3M+KHJlZ2lzdGVy
SW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZm91bmQp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRJbnRlcmZlcmVuY2U8cmVnaXN0ZXJDbGFz
cz4obm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJlc3RvcmUgaW50ZXJm
ZXJlbmNlIGZyb20gc3BpbGxzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBzaW5jZSB3
ZSBkb24ndAorICAgICAgICAvLyB1c2UgaW50ZXJmZXJlbmNlIGFmdGVyIHJlZ2lzdGVyIGFsbG9j
YXRpb24uCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNwaWxscy5zaXplKCk7IGktLTspCisg
ICAgICAgICAgICBhZGRJbnRlcmZlcmVuY2U8cmVnaXN0ZXJDbGFzcz4oc3BpbGxzW2ldKTsKKyAg
ICB9CisgICAgICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4K
KyAgICBzdGF0aWMgdW5zaWduZWQgc3BlY2lmaWNJbnRlcmZlcmVuY2VEZWdyZWUoTm9kZSogYSkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOgorICAgICAgICAvLyBUaGlzIGlzIGRlZmluaXRlbHkg
bm90IHRoZSByaWdodCB3YXkgb2YgcmVzZXJ2aW5nIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBhLT5udW1TY3JhdGNoZXM8cmVnaXN0ZXJDbGFzcz4oKTsKKyAg
ICAgICAgaWYgKGEtPm1pc2MuaW50ZXJmZXJlbmNlKQorICAgICAgICAgICAgcmVzdWx0ICs9IGEt
Pm1pc2MuaW50ZXJmZXJlbmNlLnNldDxyZWdpc3RlckNsYXNzPigpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxSZWdpc3RlckNsYXNzIHJlZ2lzdGVy
Q2xhc3M+CisgICAgc3RhdGljIGJvb2wgc3BlY2lmaWNJbmZlcmZlcmVuY2VHcmVhdGVyVGhhbihO
b2RlKiBhLCBOb2RlKiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNwZWNpZmljSW50ZXJmZXJl
bmNlRGVncmVlPHJlZ2lzdGVyQ2xhc3M+KGEpID4gc3BlY2lmaWNJbnRlcmZlcmVuY2VEZWdyZWU8
cmVnaXN0ZXJDbGFzcz4oYik7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xh
c3MgcmVnaXN0ZXJDbGFzcz4KKyAgICB2b2lkIHJlbW92ZUludGVyZmVyZW5jZShOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBub2RlLT5t
aXNjLmludGVyZmVyZW5jZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuYmVnaW4oKTsKKyAgICAgICAg
SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG5vZGUtPm1pc2MuaW50ZXJmZXJlbmNlLT5z
ZXQ8cmVnaXN0ZXJDbGFzcz4oKS5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpCisgICAgICAgICAgICBpdGVyLT5taXNjLmludGVyZmVyZW5jZS0+c2V0PHJlZ2lzdGVy
Q2xhc3M+KCkucmVtb3ZlKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxSZWdpc3Rl
ckNsYXNzIHJlZ2lzdGVyQ2xhc3M+CisgICAgdm9pZCBhZGRJbnRlcmZlcmVuY2UoTm9kZSogbm9k
ZSkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbm9kZS0+
bWlzYy5pbnRlcmZlcmVuY2UtPnNldDxyZWdpc3RlckNsYXNzPigpLmJlZ2luKCk7CisgICAgICAg
IEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBub2RlLT5taXNjLmludGVyZmVyZW5jZS0+
c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsg
KytpdGVyKQorICAgICAgICAgICAgaXRlci0+bWlzYy5pbnRlcmZlcmVuY2UtPnNldDxyZWdpc3Rl
ckNsYXNzPigpLmFkZChub2RlKTsKKyAgICB9CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEFs
bG9jYXRpb25Vbml0W10+IHNsYWJPZkFsbG9jYXRpb25Vbml0czsKKyAgICBWZWN0b3I8Tm9kZSo+
IG1fbm9kZXM7CisgICAgVmVjdG9yPEFsbG9jYXRpb25Vbml0Kj4gbV9hbGxvY2F0aW9uVW5pdHM7
CisgICAgdW5zaWduZWQgbV9uZXh0U2NyYXRjaEluZGV4OworfTsKKworYm9vbCBwZXJmb3JtTG9j
YXRpb25BbGxvY2F0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIExvY2F0aW9uIEFsbG9jYXRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4g
cnVuUGhhc2U8TG9jYXRpb25BbGxvY2F0aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9jYXRpb25Q
aGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2Nh
dGlvbkFsbG9jYXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdM
b2NhdGlvbkFsbG9jYXRpb25QaGFzZV9oCisjZGVmaW5lIERGR0xvY2F0aW9uQWxsb2NhdGlvblBo
YXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBUaGlzIGFsbG9jYXRlcyBib3RoIHJlZ2lzdGVycyBh
bmQgc3BpbGwgc2xvdHMuCisKK2Jvb2wgcGVyZm9ybUxvY2F0aW9uQWxsb2NhdGlvbihHcmFwaCYp
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2MDU5OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR3JhcGg7CiBzdHJ1
Y3QgQmFzaWNCbG9jazsKK3N0cnVjdCBOb2RlOwogCiBzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEgewogICAgIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmU7CkBAIC0xNjcsNiArMTY4
LDEwIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIoKSkKICAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVkaWN0
aW9uKFNwZWNOb25lKQorICAgICAgICAsIG1fb3BJbmZvKDApCisgICAgICAgICwgbV9vcEluZm8y
KDApCisgICAgICAgICwgbV9zY3JhdGNoR1BScygwKQorICAgICAgICAsIG1fc2NyYXRjaEZQUnMo
MCkKICAgICB7CiAgICAgICAgIG1pc2MucmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFu
ZERlZmF1bHRGbGFncyhvcCk7CkBAIC0xODAsNiArMTg1LDEwIEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkKICAgICAgICAgLCBt
X3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICAgICAs
IG1fb3BJbmZvKDApCisgICAgICAgICwgbV9vcEluZm8yKDApCisgICAgICAgICwgbV9zY3JhdGNo
R1BScygwKQorICAgICAgICAsIG1fc2NyYXRjaEZQUnMoMCkKICAgICB7CiAgICAgICAgIG1pc2Mu
cmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CkBAIC0x
OTUsNiArMjA0LDkgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAg
ICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgICAgICwgbV9vcEluZm8oaW1tLm1f
dmFsdWUpCisgICAgICAgICwgbV9vcEluZm8yKDApCisgICAgICAgICwgbV9zY3JhdGNoR1BScygw
KQorICAgICAgICAsIG1fc2NyYXRjaEZQUnMoMCkKICAgICB7CiAgICAgICAgIG1pc2MucmVwbGFj
ZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CkBAIC0yMTEsNiAr
MjIzLDggQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkK
ICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCiAgICAgICAgICwgbV9vcEluZm8yKGlt
bTIubV92YWx1ZSkKKyAgICAgICAgLCBtX3NjcmF0Y2hHUFJzKDApCisgICAgICAgICwgbV9zY3Jh
dGNoRlBScygwKQogICAgIHsKICAgICAgICAgbWlzYy5yZXBsYWNlbWVudCA9IDA7CiAgICAgICAg
IHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTIyNyw2ICsyNDEsOCBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICAgICAsIG1fb3BJbmZv
KGltbTEubV92YWx1ZSkKICAgICAgICAgLCBtX29wSW5mbzIoaW1tMi5tX3ZhbHVlKQorICAgICAg
ICAsIG1fc2NyYXRjaEdQUnMoMCkKKyAgICAgICAgLCBtX3NjcmF0Y2hGUFJzKDApCiAgICAgewog
ICAgICAgICBtaXNjLnJlcGxhY2VtZW50ID0gMDsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0Rmxh
Z3Mob3ApOwpAQCAtMTE1MCw2ICsxMTY2LDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0
dXJuIG1fdmlydHVhbFJlZ2lzdGVyOwogICAgIH0KICAgICAKKyAgICBib29sIHVzZXNWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA9PSB2aXJ0dWFsUmVnaXN0ZXI7CisgICAgfQorICAg
IAogICAgIHZvaWQgc2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwpAQCAtMTUwMSw2ICsx
NTIyLDI1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG5vZGVDYW5TcGVjdWxhdGVJ
bnQ1Mihhcml0aE5vZGVGbGFncygpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzZXROdW1TY3Jh
dGNoZXModW5zaWduZWQgbnVtR1BScywgdW5zaWduZWQgbnVtRlBScykKKyAgICB7CisgICAgICAg
IG1fc2NyYXRjaEdQUnMgPSBudW1HUFJzOworICAgICAgICBtX3NjcmF0Y2hGUFJzID0gbnVtRlBS
czsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3NjcmF0Y2hHUFJzKSA9
PSBudW1HUFJzKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3NjcmF0
Y2hGUFJzKSA9PSBudW1GUFJzKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbnVtU2NyYXRj
aEdQUnMoKSBjb25zdCB7IHJldHVybiBtX3NjcmF0Y2hHUFJzOyB9CisgICAgdW5zaWduZWQgbnVt
U2NyYXRjaEZQUnMoKSBjb25zdCB7IHJldHVybiBtX3NjcmF0Y2hGUFJzOyB9CisgICAgCisgICAg
dGVtcGxhdGU8UmVnaXN0ZXJDbGFzcyByZWdpc3RlckNsYXNzPgorICAgIHVuc2lnbmVkIG51bVNj
cmF0Y2hlcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAocmVnaXN0ZXJDbGFzcyA9PSBHZW5l
cmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIG51bVNjcmF0Y2hHUFJzKCk7CisgICAg
ICAgIHJldHVybiBudW1TY3JhdGNoRlBScygpOworICAgIH0KKyAgICAKICAgICB2b2lkIGR1bXBD
aGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkK
QEAgLTE1MzcsOCArMTU3NywxNCBAQCBwcml2YXRlOgogICAgIC8vIGJpZyBlbm91Z2ggdG8gc3Rv
cmUgYSBwb2ludGVyLgogICAgIHVpbnRwdHJfdCBtX29wSW5mbzsKICAgICB1aW50cHRyX3QgbV9v
cEluZm8yOworICAgIAorICAgIC8vIFVzZWQgZm9yIFNTQSByZWdpc3RlciBhbGxvY2F0aW9uLgor
ICAgIHVpbnQ4X3QgbV9zY3JhdGNoR1BSczsKKyAgICB1aW50OF90IG1fc2NyYXRjaEZQUnM7CiAK
IHB1YmxpYzoKKyAgICBGb3JtYXR0ZWRSZWdpc3RlciBsb2NhdGlvbjsKKyAgICAKICAgICAvLyBG
aWVsZHMgdXNlZCBieSB2YXJpb3VzIGFuYWx5c2VzLgogICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7
CiAgICAgCkBAIC0xNTU1LDYgKzE2MDEsNyBAQCBwdWJsaWM6CiAgICAgdW5pb24gewogICAgICAg
ICBOb2RlKiByZXBsYWNlbWVudDsKICAgICAgICAgQmFzaWNCbG9jayogb3duZXI7CisgICAgICAg
IEFsbG9jYXRpb25Vbml0IGFsbG9jYXRpb25Vbml0OwogICAgIH0gbWlzYzsKIH07CiAKQEAgLTE1
ODUsNiArMTYzMiwzMCBAQCBDU3RyaW5nIG5vZGVNYXBEdW1wKGNvbnN0IFQmIG5vZGVNYXAsIER1
CiAgICAgcmV0dXJuIG91dC50b0NTdHJpbmcoKTsKIH0KIAoraW5saW5lIHZvaWQgSW50ZXJmZXJl
bmNlOjphZGQoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAodXNlc0ZQUihub2RlLT5kYXRhRm9ybWF0
KCkpKSB7CisgICAgICAgIGRvdWJsZXMuYWRkKG5vZGUpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIEFTU0VSVCh1c2VzR1BSKGRhdGEtPmRhdGFGb3JtYXQoKSkpOworICAgIHZh
bHVlcy5hZGQobm9kZSk7Cit9CisKK2lubGluZSBib29sIEludGVyZmVyZW5jZTo6Y29udGFpbnMo
Tm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBpZiAodXNlc0ZQUihub2RlLT5kYXRhRm9ybWF0KCkp
KQorICAgICAgICByZXR1cm4gZG91Ymxlcy5jb250YWlucyhub2RlKTsKKyAgICAKKyAgICByZXR1
cm4gdmFsdWVzLmNvbnRhaW5zKG5vZGUpOworfQorCitpbmxpbmUgc2l6ZV90IEludGVyZmVyZW5j
ZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvdWJsZXMuc2l6ZSgpICsgdmFsdWVzLnNp
emUoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiBuYW1lc3BhY2UgV1RGIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTYwNTk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODcsMzkgKzg3LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUlu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDogewotICAgICAgICAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHkobm9kZSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgICAg
ICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBBdmFpbGFi
aWxpdHlGb3JSZWdpc3Rlcjo6Zm9yd2FyZERlbHRhRm9yTm9kZShub2RlKS5hcHBseURlbHRhKGF2
YWlsYWJpbGl0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkgPT0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRU
YWlsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24gMTYw
NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw2ICs4NSwxMyBAQCBib29sIHJ1blBoYXNlKEdyYXBoJiBncmFwaCkKICAgICBy
ZXR1cm4gcnVuQW5kTG9nKHBoYXNlKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgUGhhc2VUeXBl
LCB0ZW1wbGF0ZSBBcmcxVHlwZT4KK2Jvb2wgcnVuUGhhc2UoR3JhcGgmIGdyYXBoLCBjb25zdCBB
cmcxVHlwZSYgYXJnMSkKK3sKKyAgICBQaGFzZVR5cGUgcGhhc2UoZ3JhcGgsIGFyZzEpOworICAg
IHJldHVybiBydW5BbmRMb2cocGhhc2UpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUmVzdWx0QW5kU2NyYXRjaENh
bGN1bGF0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJERkdTY29yZUJvYXJkLmgiCisjaW5jbHVkZSAiSlNDZWxsSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFJl
c3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoK
KyAgICBSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJyZXN1bHQtYW5kLXNjcmF0Y2ggY2FsY3VsYXRpb24iKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
Z3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBEZXJpdmUgdGhlIHJl
c3VsdCBmb3JtYXQgZm9yIGVhY2ggbm9kZSBhbmQgdGhlIG51bWJlciBvZiBzY3JhdGNoIHJlZ2lz
dGVycyBpdAorICAgICAgICAvLyBpcyBleHBlY3RlZCB0byB1c2UuCisgICAgICAgIAorICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5z
aXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgIG1fbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIGhhbmRsZU5vZGUoKQorICAgIHsKKyAgICAgICAgCisgICAgfQorICAgIAorICAg
IE5vZGUqIG1fbm9kZTsKK307CisKK2Jvb2wgcGVyZm9ybVJlc3VsdEFuZFNjcmF0Y2hDYWxjdWxh
dGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBSZXN1bHQtYW5kLXNjcmF0Y2ggQ2FsY3VsYXRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4g
cnVuUGhhc2U8UmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2U+KGdyYXBoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxh
dGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3Vs
YXRpb25QaGFzZV9oCisjZGVmaW5lIERGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNl
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdQaGFzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIEdyYXBoOworCisvLyBGaWd1cmVzIG91dCB3aGF0IHRoZSByZXN1bHQgdHlwZSBh
bmQgbnVtYmVyIG9mIHNjcmF0Y2ggcmVnaXN0ZXJzIGlzIGZvciBlYWNoCisvLyBub2RlLgorCiti
b29sIHBlcmZvcm1SZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb24oR3JhcGgmKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2h1ZmZsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaHVmZmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2h1ZmZsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NodWZmbGUuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQg
VHJhbnNmZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoIXZpcnR1
YWxSZWdpc3RlcigpLmlzVmFsaWQoKSkgeworICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludCgiciIsIHZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpLCAiOiAiLCBmcm9tKCksICIgLT4gIiwgdG8oKSk7Cit9CisK
K25hbWVzcGFjZSB7CisKK2Jvb2wgdHJhbnNmZXJGcm9tTGVzc1RoYW4oVHJhbnNmZXIgYSwgVHJh
bnNmZXIgYikKK3sKKyAgICByZXR1cm4gYS5mcm9tKCkgPCBiLmZyb20oKTsKK30KKworYm9vbCB0
cmFuc2ZlclRvTGVzc1RoYW4oVHJhbnNmZXIgYSwgVHJhbnNmZXIgYikKK3sKKyAgICByZXR1cm4g
YS50bygpIDwgYi50bygpOworfQorCitGb3JtYXR0ZWRWYWx1ZSBnZXRGcm9tKFRyYW5zZmVyIHRy
YW5zZmVyKQoreworICAgIHJldHVybiB0cmFuc2Zlci5mcm9tKCk7Cit9CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorCit2b2lkIHNodWZmbGUoCisgICAgQXNzZW1ibHlIZWxwZXJzJiBqaXQs
IFZlY3RvcjxUcmFuc2Zlcj4mIHRyYW5zZmVycywgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyBmcFNj
cmF0Y2gpCit7CisgICAgLy8gVHVybiB0aGUgdHJhbnNmZXIgaW50byBhIHNlcmllcyBvZiBsaW5l
cyBhbmQgY3ljbGVzLgorICAgIC8vCisgICAgLy8gQSBsaW5lIHdpbGwgYmUgc29tZXRoaW5nIGxp
a2U6CisgICAgLy8gICAgIG1vdiByMywgcjQKKyAgICAvLyAgICAgbW92IHIyLCByMworICAgIC8v
ICAgICBtb3YgcjEsIHIyCisgICAgLy8KKyAgICAvLyBBIGN5Y2xlIHdpbGwgYmUgc29tZXRoaW5n
IGxpa2U6CisgICAgLy8gICAgIHhjaCByMSwgcjIKKyAgICAvLworICAgIC8vIG9yOgorICAgIC8v
ICAgICBtb3YgcjEsIHRtcAorICAgIC8vICAgICBtb3YgcjIsIHIxCisgICAgLy8gICAgIG1vdiBy
MywgcjIKKyAgICAvLyAgICAgbW92IHI0LCByMworICAgIC8vICAgICBtb3YgdG1wLCByNAorICAg
IC8vCisgICAgLy8gTm90ZSB0aGF0IGN5Y2xlcyBjYW4gYWx3YXlzIGJlIHR1cm5lZCBpbnRvIHhj
aCdzOgorICAgIC8vCisgICAgLy8gICAgIHhjaCByMSwgcjQKKyAgICAvLyAgICAgeGNoIHIxLCBy
MworICAgIC8vICAgICB4Y2ggcjEsIHIyCisgICAgLy8KKyAgICAvLyBCdXQgdGhpcyBhbGdvcml0
aG0gd2lsbCBoYXZlIHRvIGRlYWwgd2l0aCB0aGUgcG9zc2liaWxpdHkgdGhhdCB3ZSdyZSBzaHVm
ZmxpbmcgYmV0d2VlbgorICAgIC8vIEdQUidzIGFuZCBGUFIncyBhbmQgc3BpbGwgc2xvdHMuCisg
ICAgLy8KKyAgICAvLyBPbiB0b3Agb2YgdGhhdCwgdGhlcmUncyBhIGJ1bmNoIG9mIGNvbGQtaGVh
cnRlZCBlbmdpbmVlcmluZyBmb3IgaGFuZGxpbmcgZGF0YSBmb3JtYXQKKyAgICAvLyBjb252ZXJz
aW9ucy4KKyAgICAKKyAgICBpZiAoIXRyYW5zZmVycy5zaXplKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSB0cmFuc2ZlcnMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgQVNTRVJUKHRyYW5zZmVy
c1tpXS5kb2VzVGhpbmdzKCkpOworICAgICAgICAKKyAgICAgICAgc3RkOjpzb3J0KHRyYW5zZmVy
cy5iZWdpbigpLCB0cmFuc2ZlcnMuZW5kKCk7IHRyYW5zZmVyVG9MZXNzVGhhbik7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHRyYW5zZmVycy5zaXplKCkgLSAxOyBpLS07KQorICAgICAgICAg
ICAgQVNTRVJUKHRyYW5zZmVyc1tpXS50bygpICE9IHRyYW5zZmVyc1tpICsgMV0udG8oKSk7Cisg
ICAgfQorICAgIAorICAgIHN0ZDo6c29ydCh0cmFuc2ZlcnMuYmVnaW4oKSwgdHJhbnNmZXJzLmVu
ZCgpLCB0cmFuc2ZlckZyb21MZXNzVGhhbik7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdHJhbnNmZXJzLnNpemUoKSAtIDE7IGktLTspCisg
ICAgICAgICAgICBBU1NFUlQodHJhbnNmZXJzW2ldLmZyb20oKSAhPSB0cmFuc2ZlcnNbaSArIDFd
LmZyb20oKSk7CisgICAgfQorICAgIAorICAgIEJpdFZlY3RvciBhbHJlYWR5SGFuZGxlZDsKKyAg
ICAKKyAgICBWZWN0b3I8VmVjdG9yPFRyYW5zZmVyPj4gbGluZXM7CisgICAgVmVjdG9yPFZlY3Rv
cjxUcmFuc2Zlcj4+IGN5Y2xlczsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dHJhbnNmZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChhbHJlYWR5SGFuZGxlZC5nZXQo
aSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIEJpdFZlY3RvciBp
bmNsdWRlZDsKKyAgICAgICAgVmVjdG9yPFRyYW5zZmVyPiBsaXN0OworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgZmlyc3RJbmRleCA9IGk7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRl
eCA9IGN1cnJlbnRJbmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgVHJhbnNm
ZXIgY3VycmVudCA9IHRyYW5zZmVyc1tjdXJyZW50SW5kZXhdOworICAgICAgICAgICAgbGlzdC5h
cHBlbmQoY3VycmVudCk7CisgICAgICAgICAgICBBU1NFUlQoIWluY2x1ZGVkLmdldChjdXJyZW50
SW5kZXgpKTsKKyAgICAgICAgICAgIGluY2x1ZGVkLnNldChjdXJyZW50SW5kZXgpOworICAgICAg
ICAgICAgQVNTRVJUKCFhbHJlYWR5SGFuZGxlZC5nZXQoY3VycmVudEluZGV4KSk7CisgICAgICAg
ICAgICBhbHJlYWR5SGFuZGxlZC5zZXQoY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgdW5zaWduZWQgbmV4dEluZGV4ID0gc29ydGVkSW5kZXhPZjxUcmFuc2ZlciwgRm9y
bWF0dGVkVmFsdWU+KAorICAgICAgICAgICAgICAgIHRyYW5zZmVycywgdHJhbnNmZXJzLnNpemUo
KSwgY3VycmVudC50bygpLCBnZXRGcm9tKTsKKyAgICAgICAgICAgIGlmIChuZXh0SW5kZXggPT0g
dHJhbnNmZXJzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaXN0KTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKGluY2x1ZGVkLmdldChuZXh0SW5kZXgpKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG5leHRJbmRleCA9PSBmaXJzdEluZGV4KTsKKyAgICAgICAgICAgICAgICBjeWNsZXMu
YXBwZW5kKGxpc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBjdXJyZW50SW5kZXggPSBuZXh0SW5kZXg7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgCit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NodWZmbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NodWZmbGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2h1ZmZsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdTaHVmZmxlX2gK
KyNkZWZpbmUgREZHU2h1ZmZsZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkFzc2VtYmx5SGVscGVycy5oIgorI2luY2x1ZGUgIkRGR0Zvcm1hdHRlZFJlZ2lzdGVyLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVHJhbnNmZXIgeworcHVi
bGljOgorICAgIFRyYW5zZmVyKCkgeyB9CisgICAgCisgICAgVHJhbnNmZXIoRm9ybWF0dGVkUmVn
aXN0ZXIgZnJvbSwgRm9ybWF0dGVkUmVnaXN0ZXIgdG8sIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIpCisgICAgICAgIDogbV9mcm9tKGZyb20pCisgICAgICAgICwgbV90byh0bykKKyAg
ICAgICAgLCBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBGb3JtYXR0ZWRSZWdpc3RlciBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9t
OyB9CisgICAgRm9ybWF0dGVkUmVnaXN0ZXIgdG8oKSBjb25zdCB7IHJldHVybiBtX3RvOyB9Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmly
dHVhbFJlZ2lzdGVyOyB9CisgICAgCisgICAgYm9vbCBkb2VzVGhpbmdzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBmcm9tKCkgIT0gdG8oKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBlbWl0cyBjb2RlIHRo
YXQgbWF5IGRlc3Ryb3kgdGhlIHZhbHVlIGluIHRoZSBmcm9tKCkgbG9jYXRpb24gYW5kIHdpbGwK
KyAgICAvLyBwbGFjZSB0aGUgdmFsdWUgaW50byB0aGUgdG8oKSBsb2NhdGlvbi4gWW91IGNhbid0
IHJlbHkgb24gYmVpbmcgYWJsZSB0byB1c2UKKyAgICAvLyB0aGUgZnJvbSgpIGxvY2F0aW9uIGFu
eW1vcmUuIE5vdGUgdGhhdCB0aGUgc2NyYXRjaCByZWdpc3RlcnMgYXJlIGd1YXJhbnRlZWQKKyAg
ICAvLyB0byBiZSB1bm5lY2Vzc2FyeSBpZiB0aGUgZGF0YSBmb3JtYXRzIGFyZSB0aGUgc2FtZS4K
KyAgICB2b2lkIGVtaXQoQXNzZW1ibHlIZWxwZXJzJiwgR1BSUmVnIHNjcmF0Y2ggPSBJbnZhbGlk
R1BSUmVnLCBHUFJSZWcgZnBTY3JhdGNoID0gSW52YWxpZEZQUlJlZyk7CisKK3ByaXZhdGU6Cisg
ICAgRm9ybWF0dGVkUmVnaXN0ZXIgbV9mcm9tOworICAgIEZvcm1hdHRlZFJlZ2lzdGVyIG1fdG87
CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fdmlydHVhbFJlZ2lzdGVyOworfTsKKworLy8gTm90ZSwg
dGhpcyB3aWxsIHJlYXJyYW5nZSB0aGUgdmVjdG9yIGluIHdoYXRldmVyIHdheSBpdCB3YW50cy4K
K3ZvaWQgc2h1ZmZsZShBc3NlbWJseUhlbHBlcnMmLCBWZWN0b3I8VHJhbnNmZXI+JiwgR1BSUmVn
IHNjcmF0Y2gsIEdQUlJlZyBmcFNjcmF0Y2gpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1NodWZmbGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkocmV2aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0NTEsNiArNTQ1MSwxMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rQnJhbmNoZXMoKQogICAgIH0KIH0KIAordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c2h1ZmZsZVRvQ2Fub25pY2FsKCkKK3sKKyAgICAKK30KKwogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2MDU5OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
Njg5LDYgKzY4OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIElmIGluIFNTQSwgY2hlY2sgdGhhdCB0aGlzIG5vZGUgaXNuJ3Qg
bGl2ZSBhdCB0aGUgdGFpbCBvZiB0aGUgYmxvY2suCisgICAgICAgIGlmIChtX2ppdC5ncmFwaCgp
Lm1fZm9ybSA9PSBTU0EKKyAgICAgICAgICAgICYmIG1fYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5m
aW5kKG1fY3VycmVudE5vZGUpICE9IG1fYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBVSU5UX01BWDsKIAogICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFz
dE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgogICAgICAgICBOb2RlKiBsYXN0Tm9kZSA9
IG1fYmxvY2stPmxhc3QoKTsKQEAgLTIyMTgsNyArMjIyMywyMCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gZ2VuZXJhdGlvbkluZm8oZWRnZS5ub2RlKCkpOwogICAgIH0KLQorICAg
IAorICAgIEZvcm1hdHRlZFJlZ2lzdGVyIGN1cnJlbnRGb3JtYXQoTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm8obm9kZSk7Cisg
ICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAg
ICAgICAgICAgIGlmICh1c2VzR1BSKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEZvcm1hdHRlZFJlZ2lzdGVyKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSwgaW5m
by5ncHIoKSk7CisgICAgICAgICAgICByZXR1cm4gRm9ybWF0dGVkUmVnaXN0ZXIoaW5mby5yZWdp
c3RlckZvcm1hdCgpLCBpbmZvLmZwcigpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRm9y
bWF0dGVkUmVnaXN0ZXIoaW5mby5zcGlsbEZvcm1hdCgpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzaHVmZmxlVG9DYW5vbmljYWwoKTsKKyAgICAKICAgICAvLyBUaGUgSklULCB3aGlsZSBhbHNv
IHByb3ZpZGVzIE1hY3JvQXNzZW1ibGVyIGZ1bmN0aW9uYWxpdHkuCiAgICAgSklUQ29tcGlsZXIm
IG1faml0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdp
c3RlckFsbG9jYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFs
bG9jYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgcHVibGlj
OgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1f
Zm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAogICAgICAgICBTY29yZUJvYXJkIHNjb3Jl
Qm9hcmQobV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWwpOwogICAgICAgICBzY29yZUJvYXJkLmFz
c2VydENsZWFyKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0dQUkluZm8uaAkocmV2aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyMCw3ICs0MjAsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIHVuc2lnbmVkIHRvSW5kZXgoR1BSUmVnIHJlZykK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChyZWcgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIGlm
IChyZWcgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJldHVybiBJbnZhbGlkSW5kZXg7
CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHJlZykgPCAxNik7CiAgICAgICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBpbmRleEZvclJlZ2lzdGVyWzE2XSA9IHsgMCwgMiwgMSwgMywg
SW52YWxpZEluZGV4LCBJbnZhbGlkSW5kZXgsIDUsIDQsIDYsIDcsIDgsIEludmFsaWRJbmRleCwg
OSwgMTAsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4IH07CiAgICAgICAgIHJldHVybiBpbmRl
eEZvclJlZ2lzdGVyW3JlZ107CkBAIC00MzgsNyArNDM5LDcgQEAgcHVibGljOgogICAgICAgICB9
OwogICAgICAgICByZXR1cm4gbmFtZUZvclJlZ2lzdGVyW3JlZ107CiAgICAgfQotCisgICAgCiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEludmFsaWRJbmRleCA9IDB4ZmZmZmZmZmY7CiB9Owog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219397</attachid>
            <date>2013-12-16 22:01:14 -0800</date>
            <delta_ts>2014-03-02 14:56:15 -0800</delta_ts>
            <desc>less</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>61860</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkocmV2
aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3Jt
YXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwxNiBAQCBpbmxpbmUgYm9vbCBpc0pT
Qm9vbGVhbihEYXRhRm9ybWF0IGZvcm1hCiAgICAgcmV0dXJuIGlzSlNGb3JtYXQoZm9ybWF0LCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKIH0KIAoraW5saW5lIGJvb2wgdXNlc0ZQUihEYXRhRm9ybWF0
IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGU7CiB9CiAK
K2lubGluZSBib29sIHVzZXNHUFIoRGF0YUZvcm1hdCBmb3JtYXQpCit7CisgICAgcmV0dXJuICF1
c2VzRlBSKGZvcm1hdCkgJiYgZm9ybWF0ICE9IERhdGFGb3JtYXROb25lOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwogI2VuZGlmIC8vIERhdGFGb3JtYXRfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJp
bGl0eUZvclJlZ2lzdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQXZhaWxh
YmlsaXR5Rm9yUmVnaXN0ZXIgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXI6OmZvcndhcmREZWx0YUZv
ck5kb2UoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJl
Z2lzdGVyKAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
dmFyaWFibGUtPmZsdXNoZWRBdCgpKSwKKyAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpKTsK
KyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBjYXNlIEdldEFyZ3VtZW50OiB7
CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKAorICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSksCisgICAg
ICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgY2FzZSBNb3ZIaW50OgorICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7CisgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKAorICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSksCisgICAgICAgICAgICB2YXJp
YWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgY2Fz
ZSBab21iaWVIaW50OiB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZv
clJlZ2lzdGVyKAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpLAorICAg
ICAgICAgICAgdmFyaWFibGUtPmxvY2FsKCkpOworICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rl
cigpOworICAgIH0KK30KKwordm9pZCBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiciIsIG1fcmVnLm9mZnNldCgp
LCAiOiAiLCBtX2F2YWlsYWJpbGl0eSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdp
c3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdmFpbGFiaWxpdHlGb3JS
ZWdpc3Rlcl9oCisjZGVmaW5lIERGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIg
eworcHVibGljOgorICAgIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKCkgeyB9CisgICAgCisgICAg
QXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKKyAgICAgICAgOiBtX2F2YWlsYWJpbGl0eShhdmFpbGFiaWxpdHkpCisg
ICAgICAgICwgbV9yZWdpc3RlcihyZWcpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2F2YWlsYWJpbGl0eSAmJiAhbV9yZWdpc3Rlci5p
c1ZhbGlkKCk7IH0KKyAgICAKKyAgICBjb25zdCBBdmFpbGFiaWxpdHkmIGF2YWlsYWJpbGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5OyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXI7IH0KKyAgICAKKyAgICAv
LyBSZXR1cm5zIGFuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyIHRoYXQgZGVzY3JpYmVzIHRoZSBh
dmFpbGFiaWxpdHkgZGVsdGEsIHdoZW4KKyAgICAvLyBzY2FubmluZyBmb3J3YXJkLCBmb3IgYSBu
b2RlLgorICAgIHN0YXRpYyBBdmFpbGFiaWxpdHlGb3JSZWdpc3RlciBmb3J3YXJkRGVsdGFGb3JO
b2RlKE5vZGUqKTsKKyAgICAKKyAgICB2b2lkIGFwcGx5RGVsdGEoT3BlcmFuZHM8QXZhaWxhYmls
aXR5PiYgb3BlcmFuZHMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBvcGVyYW5kcy5vcGVyYW5kKHZpcnR1YWxSZWdpc3Rlcigp
KSA9IGF2YWlsYWJpbGl0eSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQXZhaWxhYmlsaXR5IG1fYXZhaWxhYmls
aXR5OworICAgIFZpcnR1YWxSZWdpc3RlciBtX3JlZ2lzdGVyOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0
Nyw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAg
SGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJh
Y3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZh
bHVlPiB2YWx1ZXNBdFRhaWw7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxOb2RlKj4+
IGV4dHJhS2lsbHM7CiAgICAgICAgIAogICAgICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKICAg
ICAgICAgflNTQURhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9y
bWF0dGVkUmVnaXN0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRm9ybWF0dGVkUmVnaXN0ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGb3JtYXR0ZWRSZWdpc3Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRm9ybWF0dGVkUmVnaXN0ZXIu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK3ZvaWQgRm9ybWF0dGVkUmVnaXN0ZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSkpOwor
ICAgIAorICAgIGlmIChkYXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBvdXQucHJpbnQoIjoiKTsKKyAgICBpZiAodXNlc0dQUihkYXRhRm9y
bWF0KCkpKQorICAgICAgICBvdXQucHJpbnQoZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAgb3V0
LnByaW50KGZwcigpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rm9ybWF0dGVkUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Zvcm1hdHRlZFJlZ2lzdGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Zvcm1hdHRlZFJlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdGb3JtYXR0ZWRSZWdpc3Rlcl9oCisjZGVmaW5lIERGR0Zvcm1hdHRlZFJl
Z2lzdGVyX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5o
IgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBSZWdpc3RlckNsYXNzIHsgR2VuZXJhbFJl
Z2lzdGVycywgRG91YmxlUmVnaXN0ZXJzIH07CisKK2NsYXNzIEZvcm1hdHRlZFJlZ2lzdGVyIHsK
K3B1YmxpYzoKKyAgICBGb3JtYXR0ZWRSZWdpc3RlcigpCisgICAgICAgIDogbV9yZWdpc3Rlcihz
dGF0aWNfY2FzdDxpbnQ4X3Q+KEludmFsaWRHUFJSZWcpKQorICAgICAgICAsIG1fZGF0YUZvcm1h
dChEYXRhRm9ybWF0Tm9uZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxHUFJS
ZWc+KG1fcmVnaXN0ZXIpID09IEludmFsaWRHUFJSZWcpOworICAgICAgICBBU1NFUlQoc3RhdGlj
X2Nhc3Q8RlBSUmVnPihtX3JlZ2lzdGVyKSA9PSBJbnZhbGlkRlBSUmVnKTsKKyAgICB9CisgICAg
CisgICAgRm9ybWF0dGVkUmVnaXN0ZXIoRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgICAgICA6
IG1fcmVnaXN0ZXIoc3RhdGljX2Nhc3Q8aW50OF90PihJbnZhbGlkR1BSUmVnKSkKKyAgICAgICAg
LCBtX2RhdGFGb3JtYXQoc3RhdGljX2Nhc3Q8aW50OF90PihkYXRhRm9ybWF0KSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIEZvcm1hdHRlZFJlZ2lzdGVyKERhdGFGb3JtYXQgZGF0YUZvcm1hdCwg
R1BSUmVnIGdwcikKKyAgICAgICAgOiBtX3JlZ2lzdGVyKHN0YXRpY19jYXN0PGludDhfdD4oZ3By
KSkKKyAgICAgICAgLCBtX2RhdGFGb3JtYXQoZGF0YUZvcm1hdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCh1c2VzR1BSKGRhdGFGb3JtYXQpKTsKKyAgICB9CisgICAgCisgICAgRm9ybWF0dGVkUmVn
aXN0ZXIoRGF0YUZvcm1hdCBkYXRhRm9ybWF0LCBGUFJSZWcgZnByKQorICAgICAgICA6IG1fcmVn
aXN0ZXIoc3RhdGljX2Nhc3Q8aW50OF90PihmcHIpKQorICAgICAgICAsIG1fZGF0YUZvcm1hdChk
YXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNGUFIoZGF0YUZvcm1hdCkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlZ2lzdGVyKEdQUlJlZyBncHIpCisgICAgeworICAg
ICAgICBBU1NFUlQodXNlc0dQUihkYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgbV9yZWdpc3RlciA9
IHN0YXRpY19jYXN0PGludDhfdD4oZ3ByKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRSZWdp
c3RlcihGUFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNGUFIoZGF0YUZvcm1h
dCgpKSk7CisgICAgICAgIG1fcmVnaXN0ZXIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGZwcik7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAg
ICB2b2lkIHNldFJlZ2lzdGVySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBp
ZiAocmVnaXN0ZXJDbGFzcyA9PSBHZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgc2V0UmVn
aXN0ZXIoR1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzZXRSZWdpc3RlcihGUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAgICBib29sIGlz
UmVnaXN0ZXJDbGFzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAocmVnaXN0ZXJDbGFzcyA9
PSBHZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIHVzZXNHUFIoZGF0YUZvcm1h
dCgpKTsKKyAgICAgICAgcmV0dXJuIHVzZXNGUFIoZGF0YUZvcm1hdCgpKTsKKyAgICB9CisgICAg
CisgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RGF0YUZvcm1hdD4obV9kYXRhRm9ybWF0KTsgfQorICAgIAorICAgIEdQUlJlZyBncHIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNHUFIoZGF0YUZvcm1hdCgpKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fcmVnaXN0ZXIpOworICAgIH0KKyAgICAKKyAg
ICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh1c2VzRlBSKGRhdGFG
b3JtYXQoKSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPihtX3JlZ2lzdGVy
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8UmVnaXN0ZXJDbGFzcyByZWdpc3RlckNsYXNz
PgorICAgIHVuc2lnbmVkIHJlZ2lzdGVySW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KHJlZ2lzdGVyQ2xhc3MgPT0gR2VuZXJhbFJlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybiBH
UFJJbmZvOjp0b0luZGV4KGdwcigpKTsKKyAgICAgICAgcmV0dXJuIEZQUkluZm86OnRvSW5kZXgo
ZnByKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybWF0dGVk
UmVnaXN0ZXImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXIg
PT0gb3RoZXIubV9yZWdpc3RlcgorICAgICAgICAgICAgJiYgbV9kYXRhRm9ybWF0ID09IG90aGVy
Lm1fZGF0YUZvcm1hdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZv
cm1hdHRlZFJlZ2lzdGVyJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgRm9y
bWF0dGVkUmVnaXN0ZXImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fcmVnaXN0
ZXIgIT0gb3RoZXIubV9yZWdpc3RlcikKKyAgICAgICAgICAgIHJldHVybiBtX3JlZ2lzdGVyIDwg
b3RoZXIubV9yZWdpc3RlcjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YUZvcm1hdCA8IG90aGVyLm1f
ZGF0YUZvcm1hdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIGludDhfdCBtX3JlZ2lzdGVyOworICAgIGludDhfdCBt
X2RhdGFGb3JtYXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Zvcm1hdHRlZFJlZ2lzdGVyX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw4ICszOCw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgTGl2
ZW5lc3NBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKLSAgICBMaXZlbmVz
c0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQotICAgICAgICA6IFBoYXNlKGdyYXBoLCAibGl2
ZW5lc3MgYW5hbHlzaXMiKQorICAgIExpdmVuZXNzQW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgs
IEF2YWlsYWJpbGl0eUxpdmVuZXNzTW9kZSBhdmFpbGFiaWxpdHlNb2RlKQorICAgICAgICA6IFBo
YXNlKGdyYXBoLCBhdmFpbGFiaWxpdHlNb2RlID09IEF2YWlsYWJpbGl0eU5vdExpdmUgPyAibGl2
ZW5lc3MgYW5hbHlzaXMiIDogImxpdmVuZXNzIGFuYWx5c2lzIChpbmNsLiBhdmFpbGFiaWxpdHkp
IikKKyAgICAgICAgLCBtX2F2YWlsYWJpbGl0eU1vZGUoYXZhaWxhYmlsaXR5TW9kZSkKICAgICB7
CiAgICAgfQogICAgIApAQCAtODYsNTEgKzg3LDEwOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAo
IWJsb2NrKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICAgICAgYmxvY2stPnNz
YS0+ZXh0cmFLaWxscy5jbGVhcigpOworICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEl0J3Mg
bGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhh
dCB1c2UKICAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTg0NTUKICAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFp
bDsKICAgICAgICAgCisgICAgICAgIGlmIChtX2F2YWlsYWJpbGl0eU1vZGUgPT0gQXZhaWxhYmls
aXR5SXNMaXZlKSB7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgICAgIG1fZGVsdGFzLnJlc2l6ZShibG9jay0+c2l6
ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5
Rm9yUmVnaXN0ZXIgZGVsdGEgPQorICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OmZv
cndhcmREZWx0YUZvck5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCEhZGVsdGEpIHsK
KyAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5IG9sZEF2YWlsYWJpbGl0eSA9CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKGRlbHRhLnZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGEuYXBwbHlEZWx0YShtX2F2YWls
YWJpbGl0eSk7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhID0gQXZhaWxhYmlsaXR5Rm9yUmVn
aXN0ZXIob2xkQXZhaWxhYmlsaXR5LCBkZWx0YS52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZGVsdGFzW25vZGVJbmRleF0gPSBkZWx0YTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKG1fYXZhaWxh
YmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCk7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsg
bm9kZUluZGV4LS07KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CisgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAg
ICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246CisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyAgICBuOiBVcHNpbG9uKEB4LCBecCkKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBwIGFuZCBAbiBhbmQgdXNl
cyBAeC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhp
OgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgcDogUGhpKCkKKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFdlIHNheSBub3RoaW5nLiBJdCdz
IG5laXRoZXIgYSB1c2Ugbm9yIGEgZGVmLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gR2l2ZW4gYSBub2RlOgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gICAgbjogVGhpbmd5KEBhLCBAYiwgQGMpCisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAbiBhbmQgdXNlcyBAYSwgQGIsIEBj
LgogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBHaXZlbiBhbiBVcHNpbG9uOgotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIG46IFVwc2lsb24oQHgsIF5wKQotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBwIGFuZCBAbiBhbmQg
dXNlcyBAeC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBHaXZlbiBhIFBoaToKLSAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBwOiBQaGkoKQotICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgIC8vIFdlIHNheSBub3RoaW5nLiBJdCdzIG5laXRoZXIgYSB1c2Ugbm9yIGEg
ZGVmLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEdpdmVuIGEgbm9kZToKLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBuOiBUaGluZ3koQGEsIEBiLCBAYykKLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAbiBhbmQgdXNl
cyBAYSwgQGIsIEBjLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgVXBzaWxvbjogewotICAgICAgICAgICAgICAgIE5vZGUq
IHBoaSA9IG5vZGUtPnBoaSgpOwotICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUocGhpKTsK
LSAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOwotICAgICAgICAgICAgICAgIG1f
bGl2ZS5hZGQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIFVwc2lsb246IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
cGhpID0gbm9kZS0+cGhpKCk7CisgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUocGhp
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9saXZlLmFkZChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIFBoaTogewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOworICAgICAg
ICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRD
aGlsZFVzZSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7Ci0gICAgICAgICAgICAgICAgREZHX05PREVf
RE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkQ2hpbGRVc2UpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFiaWxpdHlNb2RlID09
IEF2YWlsYWJpbGl0eUlzTGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2Fu
RXhpdCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9hdmFpbGFiaWxpdHkuc2l6ZSgpOyAraSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBtX2F2YWlsYWJpbGl0eVtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmx1c2guZm9ybWF0KCkgIT0gRGVhZEZsdXNoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGZsdXNoLmZvcm1hdCgpICE9IENvbmZs
aWN0aW5nRmx1c2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFhdmFpbGxhYmlsaXR5Lmhhc05vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGF2YWlsYWJpbGl0eS5ub2RlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fbGl2ZS5jb250YWlucyhjaGlsZCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2F2YWlsYWJpbGl0
eS5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBp
c0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgbm9kZS0+Y29kZU9yaWdpbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0xpdmUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChjaGlsZCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgVmVjdG9yPE5vZGUqPj46OkFkZFJlc3VsdCBy
ZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+c3NhLT5leHRy
YUtpbGxzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFwcGVuZChjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobV9hdmFpbGFiaWxpdHlNb2RlID09IEF2YWlsYWJpbGl0eUlzTGl2
ZSkKKyAgICAgICAgICAgICAgICBtX2RlbHRhc1tub2RlSW5kZXhdLmFwcGx5KG1fYXZhaWxhYmls
aXR5KTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKG1fYXZhaWxhYmlsaXR5TW9k
ZSA9PSBBdmFpbGFiaWxpdHlJc0xpdmUpCisgICAgICAgICAgICBBU1NFUlQobV9hdmFpbGFiaWxp
dHkgPT0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkKTsKKyAgICAgICAgCiAgICAgICAg
IGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCkBAIC0xNTAsMTQgKzIwOCwxNyBAQCBwcml2YXRlOgogICAgICAgICBlZGdl
LnNldEtpbGxTdGF0dXMobV9saXZlLmFkZChlZGdlLm5vZGUoKSkuaXNOZXdFbnRyeSA/IERvZXNL
aWxsIDogRG9lc05vdEtpbGwpOwogICAgIH0KICAgICAKKyAgICBBdmFpbGFiaWxpdHlMaXZlbmVz
c01vZGUgbV9hdmFpbGFiaWxpdHlNb2RlOwogICAgIGJvb2wgbV9jaGFuZ2VkOwogICAgIEhhc2hT
ZXQ8Tm9kZSo+IG1fbGl2ZTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IG1fYXZhaWxhYmls
aXR5OworICAgIFZlY3RvcjxBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcj4gbV9kZWx0YXM7CiB9Owog
Ci1ib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9y
bUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmIGdyYXBoLCBBdmFpbGFiaWxpdHlMaXZlbmVzc01vZGUg
bW9kZSkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIExpdmVuZXNz
IEFuYWx5c2lzIFBoYXNlIik7Ci0gICAgcmV0dXJuIHJ1blBoYXNlPExpdmVuZXNzQW5hbHlzaXNQ
aGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFzZTxMaXZlbmVzc0FuYWx5c2lzUGhhc2U+
KGdyYXBoLCBtb2RlKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiwxNSBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogCi0vLyBDb21w
dXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmxpdmVBdEhlYWQvbGl2ZUF0VGFpbC4KKy8vIENvbXB1dGVz
IEJhc2ljQmxvY2s6OnNzYS0+bGl2ZUF0SGVhZC9saXZlQXRUYWlsLiBNYXkgb3IgbWF5IG5vdCBp
bmNsdWRlIHRoaW5ncworLy8gdGhhdCBhcmUgcGFydCBvZiBBdmFpbGFiaWxpdHkuCiAKLWJvb2wg
cGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmKTsKK2VudW0gQXZhaWxhYmlsaXR5TGl2ZW5l
c3NNb2RlIHsKKyAgICBBdmFpbGFiaWxpdHlOb3RMaXZlLCAvLyBVc2VmdWwgaWYgeW91J3JlIGp1
c3QgZG9pbmcgcHJ1bmluZyBmb3IgQ0ZBLgorICAgIEF2YWlsYWJpbGl0eUlzTGl2ZSAvLyBVc2Vm
dWwgaWYgeW91J3JlIGRvaW5nIHJlZ2lzdGVyIGFsbG9jYXRpb24uCit9OworCitib29sIHBlcmZv
cm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiwgQXZhaWxhYmlsaXR5TGl2ZW5lc3NNb2RlID0gQXZh
aWxhYmlsaXR5Tm90TGl2ZSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9j
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTG9jYXRpb25BbGxvY2F0aW9uUGhhc2Uu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdTY29yZUJvYXJkLmgiCisjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1
ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIExvY2F0aW9uQWxsb2NhdGlv
blBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBMb2NhdGlvbkFsbG9jYXRpb25Q
aGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJsb2NhdGlvbiBhbGxv
Y2F0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgLy8g
Q2xlYXJzIG1pc2MuaW50ZXJmZXJlbmNlIGJlY2F1c2UgaXQgb3ZlcmxhcHMgbWlzYy5yZXBsYWNl
bWVudC4KKyAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICAKKyAg
ICAgICAgLy8gQ29tcHV0ZSBpbnRlcmZlcmVuY2UgYW5kIGNvbGxlY3QgYWxsIG5vZGVzIHRoYXQg
YXJlIGludGVyZXN0aW5nIHRvIGFsbG9jYXRpb24uCisgICAgICAgIFZlY3RvcjxOb2RlKj4gbm9k
ZXM7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSGFzaFNldDxO
b2RlKj4gbGl2ZSA9IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQ7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUlu
ZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmhhc1Jlc3VsdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxpdmUuYWRkKG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICBpbnRlcmZlcmUobGl2ZSk7CisgICAgICAgICAgICAg
ICAgICAgIG5vZGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1DaGls
ZHJlbihub2RlKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dy
YXBoLmNoaWxkKG5vZGUsIGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZS5kb2VzS2ls
bCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLnJlbW92ZShlZGdlLm5vZGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2UgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxOb2RlKj4+IGl0ZXIgPSBibG9jay0+c3NhLT5l
eHRyYUtpbGxzLmZpbmQobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0gYmxvY2st
PnNzYS0+ZXh0cmFLaWxscy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE5v
ZGUqPiYga2lsbHMgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0ga2lsbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBs
aXZlLnJlbW92ZShraWxsc1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2Ug
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNSZXN1bHQoKSAmJiAhbm9k
ZS0+YWRqdXN0ZWRSZWZDb3VudCgpKQorICAgICAgICAgICAgICAgICAgICBsaXZlLnJlbW92ZShu
b2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmly
c3QgdXNlIFdlbHNoLVBvd2VsbCB0byBwaWNrIHNwaWxsIHNsb3RzLCBpLmUuIHZpcnR1YWwgcmVn
aXN0ZXJzLiBFdmVyeSBub2RlIHRoYXQKKyAgICAgICAgLy8gcHJvZHVjZXMgYSByZXN1bHQgbXVz
dCBoYXZlIGEgdmlydHVhbCByZWdpc3Rlci4KKyAgICAgICAgc3RkOjpzb3J0KG5vZGVzLmJlZ2lu
KCksIG5vZGVzLmVuZCgpLCBpbnRlcmZlcmVuY2VEZWdyZWVMZXNzVGhhbik7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG5vZGVzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTm9kZSog
Zmlyc3ROb2RlID0gbm9kZXNbaV07CisgICAgICAgICAgICBpZiAoZmlyc3ROb2RlLT5oYXNWaXJ0
dWFsUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPQorICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKyspOworICAgICAgICAg
ICAgZmlyc3ROb2RlLT5zZXRWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBzZWNvbmROb2RlID0gbm9kZXNbal07CisgICAgICAgICAgICAgICAgaWYgKHNlY29uZE5vZGUt
Pmhhc1ZpcnR1YWxSZWdpc3RlcigpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBib29sIGludGVyZmVyZXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBp
ZiAoSGFzaFNldDxOb2RlKj4qIGVkZ2VzID0gc2Vjb25kTm9kZS0+bWlzYy5pbnRlcmZlcmVuY2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBl
ZGdlcy0+YmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJh
dG9yIGVuZCA9IGVkZ2VzLT5lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG90aGVyTm9k
ZSA9ICppdGVyOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+dXNlc1Zp
cnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ZXJmZXJlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGludGVyZmVyZXMpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHNlY29uZE5vZGUtPnNldFZp
cnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBVc2UgQ2hhaXRpbidzIGFsZ29yaXRobSBmb3IgcmVnaXN0
ZXJzLiBEbyBhIHNlcGFyYXRlIHJ1biBmb3IgdGhlIHR3byBjbGFzc2VzIG9mCisgICAgICAgIC8v
IHJlZ2lzdGVycyB0aGF0IHdlIGRlYWwgd2l0aC4KKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZT
Y3JhdGNoR1BScyA9IDI7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU2NyYXRjaEZQUnMgPSAx
OworICAgICAgICBjaGFpdGluQWxsb2NhdGU8R2VuZXJhbFJlZ2lzdGVycywgR1BSSW5mbz4obm9k
ZXMsIG51bWJlck9mU2NyYXRjaEdQUnMpOworICAgICAgICBjaGFpdGluQWxsb2NhdGU8RG91Ymxl
UmVnaXN0ZXJzLCBGUFJJbmZvPihub2RlcywgbnVtYmVyT2ZTY3JhdGNoRlBScyk7CisgICAgICAg
IAorICAgICAgICAvLyBGaW5hbGx5IGRlbGV0ZSBhbGwgaW50ZXJmZXJlbmNlIHNldHMuCisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2st
PnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+bWlzYy5pbnRl
cmZlcmVuY2UpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGRlbGV0ZSBub2RlLT5taXNjLmludGVyZmVyZW5jZTsKKyAgICAgICAgICAgICAgICBub2RlLT5t
aXNjLmludGVyZmVyZW5jZSA9IDA7IC8vIFRoaXMgb3VnaHQgbm90IGJlIHN0cmljdGx5IG5lY2Vz
c2FyeSwgYnV0IGl0IHByZXNlcnZlcyBzb21lIGtpbmQgb2Ygc2FuaXR5LgorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHZvaWQgaW50ZXJmZXJlKEhhc2hTZXQ8Tm9kZSo+JiBsaXZlKQorICAgIHsKKyAgICAgICAg
SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBsaXZlLmJlZ2luKCk7CisgICAgICAgIEhh
c2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBsaXZlLmVuZCgpOworICAgICAgICBmb3IgKDsg
aXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOwor
ICAgICAgICAgICAgSW50ZXJmZXJlbmNlKiBub2RlSW50ZXJmZXJlbmNlID0gaW50ZXJmZXJlbmNl
KG5vZGUpOworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIyID0gbGl2
ZS5iZWdpbigpOworICAgICAgICAgICAgZm9yICg7IGl0ZXIyICE9IGVuZDsgKytpdGVyMikKKyAg
ICAgICAgICAgICAgICBub2RlSW50ZXJmZXJlbmNlLT5hZGQoKml0ZXIyKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGludGVyZmVyZVdpdGhDaGlsZHJlbihOb2RlKiBub2RlLCBF
ZGdlIGVkZ2UpCisgICAgeworICAgICAgICBpbnRlcmZlcmVuY2Uobm9kZSktPmFkZChlZGdlLm5v
ZGUoKSk7CisgICAgICAgIGludGVyZmVyZW5jZShlZGdlLm5vZGUoKSktPmFkZChub2RlKTsKKyAg
ICB9CisgICAgCisgICAgSW50ZXJmZXJlbmNlKiBpbnRlcmZlcmVuY2UoTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIEludGVyZmVyZW5jZSogaW50ZXJmZXJlbmNlID0gbm9kZS0+bWlzYy5pbnRl
cmZlcmVuY2U7CisgICAgICAgIGlmICghaW50ZXJmZXJlbmNlKQorICAgICAgICAgICAgbm9kZS0+
bWlzYy5pbnRlcmZlcmVuY2UgPSBpbnRlcmZlcmVuY2UgPSBuZXcgSW50ZXJmZXJlbmNlKCk7Cisg
ICAgICAgIHJldHVybiBpbnRlcmZlcmVuY2U7CisgICAgfQorICAgIAorICAgIGJvb2wgaW50ZXJm
ZXJlcyhOb2RlKiBhLCBOb2RlKiBiKQorICAgIHsKKyAgICAgICAgaWYgKCFhLT5taXNjLmludGVy
ZmVyZW5jZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGEtPm1p
c2MuaW50ZXJmZXJlbmNlLT5jb250YWlucyhiKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVu
c2lnbmVkIGludGVyZmVyZW5jZURlZ3JlZShOb2RlKiBhKQorICAgIHsKKyAgICAgICAgaWYgKGEt
Pm1pc2MuaW50ZXJmZXJlbmNlKQorICAgICAgICAgICAgcmV0dXJuIGEtPm1pc2MuaW50ZXJmZXJl
bmNlLT5zaXplKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
Ym9vbCBpbnRlcmZlcmVuY2VEZWdyZWVMZXNzVGhhbihOb2RlKiBhLCBOb2RlKiBiKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGludGVyZmVyZW5jZURlZ3JlZShhKSA8IGludGVyZmVyZW5jZURlZ3Jl
ZShiKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8UmVnaXN0ZXJDbGFzcyByZWdpc3RlckNs
YXNzLCB0eXBlbmFtZSBSZWdpc3RlckluZm8+CisgICAgdm9pZCBjaGFpdGluQWxsb2NhdGUoY29u
c3QgVmVjdG9yPE5vZGUqPiYgb3JpZ2luYWxOb2RlcywgdW5zaWduZWQgbnVtU2NyYXRjaCkKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzID0gUmVnaXN0ZXJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyAtIG51bVNjcmF0Y2g7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8
Tm9kZSo+IG5vZGVzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3JpZ2luYWxO
b2Rlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG9yaWdpbmFsTm9kZXNbaV0tPmxv
Y2F0aW9uLmlzUmVnaXN0ZXJDbGFzczxyZWdpc3RlckNsYXNzPigpKQorICAgICAgICAgICAgICAg
IG5vZGVzLmFwcGVuZChvcmlnaW5hbE5vZGVzW2ldKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgVmVjdG9yPE5vZGUqPiBhbGxvY2F0aW9uU3RhY2s7CisgICAgICAgIFZlY3RvcjxOb2Rl
Kj4gc3BpbGxzOworICAgICAgICB3aGlsZSAoIW5vZGVzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgLy8gQXR0ZW1wdCB0byBwdXNoIHRoaW5ncyBvbnRvIHRoZSBhbGxvY2F0aW9uIHN0YWNrLgor
ICAgICAgICAgICAgd2hpbGUgKCFub2Rlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBTb3J0IGJ5IGRlc2NlbmRpbmcgaW50ZXJmZXJlbmNlIGRlZ3JlZS4KKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIFRoaXMgaW5uZXIgbG9vcCByZXF1aXJlcyB0aGF0IGFs
bCBub2RlcyB3aG9zZSBjdXJyZW50IGludGVyZmVyZW5jZSBkZWdyZWUgaXMKKyAgICAgICAgICAg
ICAgICAvLyBsZXNzIHRoYW4gbnVtYmVyT2ZSZWdpc3RlcnMgYXJlIGF0IHRoZSBlbmQgb2YgdGhl
IGxpc3QsIGFuZCB0aGV5IGFyZSBzb3J0ZWQKKyAgICAgICAgICAgICAgICAvLyBpbiBkZWNyZWFz
aW5nIG9yZGVyIG9mIGRlZ3JlZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
IC8vIEJ1dCwgdGhlIG5leHQgbG9vcCAtIHRoZSBzcGlsbGluZyBsb29wIC0gcmVxdWlyZXMgdGhh
dCB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBsaXN0IGhhcyB0aGUg
aGlnaGVzdCBkZWdyZWUuIEhlbmNlLCBhIHNvcnQgaXMgcHJvYmFibHkgdGhlIHNpbXBsZXN0IHdh
eSBvZgorICAgICAgICAgICAgICAgIC8vIGVuc3VyaW5nIGJvdGggcHJvcGVydGllcy4KKyAgICAg
ICAgICAgICAgICBzdGQ6OnNvcnQobm9kZXMuYmVnaW4oKSwgbm9kZXMuZW5kKCksIHNwZWNpZmlj
SW50ZXJmZXJlbmNlR3JlYXRlclRoYW48cmVnaXN0ZXJDbGFzcz4pOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIENoYWl0aW4ncyBhbGdvcml0aG0gaXMgZm91bmRlZCBvbiB0
aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgY2FzZSBpcyByYXJlLiBXZQorICAgICAgICAgICAgICAg
IC8vIGFyZSBleHBlY3RlZCB0byBkcm9wIGRvd24gdGhyb3VnaCB0aGlzIG9uIHRoZSBmaXJzdCBn
by1yb3VuZCBhbmQgZmlyc3QgcGxvdworICAgICAgICAgICAgICAgIC8vIHRocm91Z2ggYSBidW5j
aCBvZiBsb3ctZGVncmVlIG5vZGVzIGluIHRoZSBsb29wIGJlbG93LiBUaGF0IHdpbGwgdGhlbiBy
ZWR1Y2UKKyAgICAgICAgICAgICAgICAvLyB0aGUgZGVncmVlIG9mIHRoZSByZW1haW5pbmcgbm9k
ZXMsIGFuZCBzbyBpdCdsbCB0YWtlIGEgd2hpbGUgYmVmb3JlIHRoaXMKKyAgICAgICAgICAgICAg
ICAvLyBicmVhayBpcyB0YWtlbi4gSXQgd2lsbCBvbmx5IGJlIHRha2VuIGlmIHNvbWV0aGluZyBu
ZWVkcyB0byBiZSBzcGlsbGVkLgorICAgICAgICAgICAgICAgIC8vIFRoZXJlIHdpbGwgYmUgbWFu
eSBmdW5jdGlvbnMgaW4gd2hpY2ggd2Ugd29uJ3Qgc3BpbGwgYW55dGhpbmcuCisgICAgICAgICAg
ICAgICAgaWYgKHNwZWNpZmljSW50ZXJmZXJlbmNlRGVncmVlPHJlZ2lzdGVyQ2xhc3M+KG5vZGVz
Lmxhc3QoKSkgPj0gbnVtYmVyT2ZSZWdpc3RlcnMpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3RTdGFja1Np
emUgPSBhbGxvY2F0aW9uU3RhY2suc2l6ZSgpOworICAgICAgICAgICAgICAgIHdoaWxlIChzcGVj
aWZpY0ludGVyZmVyZW5jZURlZ3JlZTxyZWdpc3RlckNsYXNzPihub2Rlcy5sYXN0KCkpIDwgbnVt
YmVyT2ZSZWdpc3RlcnMpCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25TdGFjay5hcHBl
bmQobm9kZXMucmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBsYXN0U3RhY2tTaXplOyBpIDwgYWxsb2NhdGlvblN0YWNrLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICByZW1vdmVJbnRlcmZlcmVuY2U8cmVnaXN0
ZXJDbGFzcz4oYWxsb2NhdGlvblN0YWNrW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzcGlsbCBvbmUgdmFyaWFibGUuIFNwaWxsaW5n
IHRoZSB2YXJpYWJsZSB3aXRoIHRoZSBoaWdoZXN0IGRlZ3JlZQorICAgICAgICAgICAgLy8gKGku
ZS4gdGhlIG9uZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0KSBtaW5pbWl6ZXMgdGhlIGxp
a2VsaWhvb2QgdGhhdCB3ZSdsbAorICAgICAgICAgICAgLy8gaGF2ZSB0byBzcGlsbCBhbnl0aGlu
ZyBlbHNlLiBOb3RlLCBpbnN0ZWFkIG9mIGp1c3Qgc3BpbGxpbmcgb25lIHZhcmlhYmxlIGFuZAor
ICAgICAgICAgICAgLy8gcmVsb29waW5nLCB3ZSBjb3VsZCBtYWtlIHRoaXMgbW9yZSBzY2FsYWJs
ZSBieSBzcGlsbGluZworICAgICAgICAgICAgLy8gY3VycmVudE1pbkRlZ3JlZSAtIG51bWJlck9m
UmVnaXN0ZXJzICsgMSB2YXJpYWJsZXMsIGFzIHRoYXQgaXMgdGhlIG1pbmltdW0KKyAgICAgICAg
ICAgIC8vIG51bWJlciBvZiB2YXJpYWJsZXMgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIHNwaWxsZWQg
dG8gZW5zdXJlIHRoYXQgdGhlIGFsbG9jYXRpb24KKyAgICAgICAgICAgIC8vIGxvb3AgaXMgdW5i
bG9ja2VkLiBXZSBjb3VsZCBhcHByb3hpbWF0ZSB0aGlzIGJ5IHJlcGxhY2luZyBjdXJyZW50TWlu
RGVncmVlIHdpdGgKKyAgICAgICAgICAgIC8vIGEgc25hcHNob3Qgb2YgY3VycmVudE1pbkRlZ3Jl
ZSBwcmlvciB0byBzcGlsbGluZzsgaS5lLiB3ZSBkb24ndCBuZWVkIHRvIGFjdHVhbGx5CisgICAg
ICAgICAgICAvLyByZWNvbXB1dGUgY3VycmVudE1pbkRlZ3JlZSBlYWNoIHRpbWUgd2Ugc3BpbGwg
YSB2YXJpYWJsZS4KKyAgICAgICAgICAgIGlmICghbm9kZXMuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbm9kZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKHNwZWNpZmljSW50ZXJmZXJlbmNlRGVncmVlPHJlZ2lzdGVyQ2xhc3M+KG5vZGVz
W2ldKSA+PSBudW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIHJlbW92ZUludGVyZmVyZW5jZTxyZWdpc3RlckNsYXNz
Pihub2Rlc1swXSk7CisgICAgICAgICAgICAgICAgc3BpbGxzLmFwcGVuZChub2Rlc1swXSk7Cisg
ICAgICAgICAgICAgICAgbm9kZXNbMF0gPSBub2Rlcy5sYXN0KCk7CisgICAgICAgICAgICAgICAg
bm9kZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBOb3cgYXNzaWduIHJlZ2lzdGVycy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gYWxsb2NhdGlvblN0YWNrLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGFsbG9jYXRpb25TdGFja1tpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRmlu
ZCBhIHJlZ2lzdGVyIHRoYXQgd29uJ3QgaW50ZXJmZXJlLiBEbyB0aGlzIGJ5IGZpcnN0IGZpbmRp
bmcgdGhlIHJlZ2lzdGVycworICAgICAgICAgICAgLy8gdGhhdCBkbyBpbnRlcmZlcmUuCisgICAg
ICAgICAgICBCaXRtYXA8UmVnaXN0ZXJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycz4gaW50ZXJmZXJl
bmNlOworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBub2RlLT5t
aXNjLmludGVyZmVyZW5jZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuYmVnaW4oKTsKKyAgICAgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBub2RlLT5taXNjLmludGVyZmVyZW5j
ZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuZW5kKCk7CisgICAgICAgICAgICBmb3IgKDsgaXRlciAh
PSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgICAgIE5vZGUqIG90aGVyTm9kZSA9ICppdGVy
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVySW5kZXggPSBvdGhlck5vZGUtPmxv
Y2F0aW9uLnJlZ2lzdGVySW5kZXg8cmVnaXN0ZXJDbGFzcz4oKTsKKyAgICAgICAgICAgICAgICBp
ZiAocmVnaXN0ZXJJbmRleCA9PSBSZWdpc3RlckZpbGU6OkludmFsaWRJbmRleCkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlLnNldChy
ZWdpc3RlckluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcmVnaXN0ZXJJbmRleCA9IDA7IHJlZ2lz
dGVySW5kZXggPCBudW1iZXJPZlJlZ2lzdGVyczsgKytyZWdpc3RlckluZGV4KSB7CisgICAgICAg
ICAgICAgICAgaWYgKGludGVyZmVyZW5jZS5nZXQocmVnaXN0ZXJJbmRleCkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5sb2NhdGlvbi5zZXRSZWdpc3RlckluZGV4PHJlZ2lzdGVyQ2xhc3M+
KHJlZ2lzdGVySW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZm91bmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRJbnRlcmZlcmVuY2U8cmVn
aXN0ZXJDbGFzcz4obm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJlc3Rv
cmUgaW50ZXJmZXJlbmNlIGZyb20gc3BpbGxzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2Fy
eSBzaW5jZSB3ZSBkb24ndAorICAgICAgICAvLyB1c2UgaW50ZXJmZXJlbmNlIGFmdGVyIHJlZ2lz
dGVyIGFsbG9jYXRpb24uCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNwaWxscy5zaXplKCk7
IGktLTspCisgICAgICAgICAgICBhZGRJbnRlcmZlcmVuY2U8cmVnaXN0ZXJDbGFzcz4oc3BpbGxz
W2ldKTsKKyAgICB9CisgICAgICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0
ZXJDbGFzcz4KKyAgICBzdGF0aWMgdW5zaWduZWQgc3BlY2lmaWNJbnRlcmZlcmVuY2VEZWdyZWUo
Tm9kZSogYSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOgorICAgICAgICAvLyBUaGlzIGlzIGRl
ZmluaXRlbHkgbm90IHRoZSByaWdodCB3YXkgb2YgcmVzZXJ2aW5nIHNjcmF0Y2ggcmVnaXN0ZXJz
LgorICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBhLT5udW1TY3JhdGNoZXM8cmVnaXN0ZXJDbGFz
cz4oKTsKKyAgICAgICAgaWYgKGEtPm1pc2MuaW50ZXJmZXJlbmNlKQorICAgICAgICAgICAgcmVz
dWx0ICs9IGEtPm1pc2MuaW50ZXJmZXJlbmNlLnNldDxyZWdpc3RlckNsYXNzPigpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxSZWdpc3RlckNsYXNz
IHJlZ2lzdGVyQ2xhc3M+CisgICAgc3RhdGljIGJvb2wgc3BlY2lmaWNJbmZlcmZlcmVuY2VHcmVh
dGVyVGhhbihOb2RlKiBhLCBOb2RlKiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNwZWNpZmlj
SW50ZXJmZXJlbmNlRGVncmVlPHJlZ2lzdGVyQ2xhc3M+KGEpID4gc3BlY2lmaWNJbnRlcmZlcmVu
Y2VEZWdyZWU8cmVnaXN0ZXJDbGFzcz4oYik7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPFJl
Z2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAgICB2b2lkIHJlbW92ZUludGVyZmVyZW5jZShO
b2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIg
PSBub2RlLT5taXNjLmludGVyZmVyZW5jZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuYmVnaW4oKTsK
KyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG5vZGUtPm1pc2MuaW50ZXJm
ZXJlbmNlLT5zZXQ8cmVnaXN0ZXJDbGFzcz4oKS5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICBpdGVyLT5taXNjLmludGVyZmVyZW5jZS0+c2V0
PHJlZ2lzdGVyQ2xhc3M+KCkucmVtb3ZlKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTxSZWdpc3RlckNsYXNzIHJlZ2lzdGVyQ2xhc3M+CisgICAgdm9pZCBhZGRJbnRlcmZlcmVuY2Uo
Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVy
ID0gbm9kZS0+bWlzYy5pbnRlcmZlcmVuY2UtPnNldDxyZWdpc3RlckNsYXNzPigpLmJlZ2luKCk7
CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBub2RlLT5taXNjLmludGVy
ZmVyZW5jZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVy
ICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgaXRlci0+bWlzYy5pbnRlcmZlcmVuY2UtPnNl
dDxyZWdpc3RlckNsYXNzPigpLmFkZChub2RlKTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1M
b2NhdGlvbkFsbG9jYXRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgTG9jYXRpb24gQWxsb2NhdGlvbiBQaGFzZSIpOworICAgIHJldHVy
biBydW5QaGFzZTxMb2NhdGlvbkFsbG9jYXRpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9jYXRpb25BbGxvY2F0aW9uUGhhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvY2F0aW9uQWxsb2NhdGlv
blBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xv
Y2F0aW9uQWxsb2NhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHTG9jYXRpb25BbGxvY2F0aW9u
UGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMgYWxsb2NhdGVzIGJvdGggcmVnaXN0ZXJz
IGFuZCBzcGlsbCBzbG90cy4KKworYm9vbCBwZXJmb3JtTG9jYXRpb25BbGxvY2F0aW9uKEdyYXBo
Jik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHTG9jYXRpb25BbGxvY2F0aW9uUGhhc2VfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTYwNTk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBHcmFwaDsKIHN0
cnVjdCBCYXNpY0Jsb2NrOworc3RydWN0IE5vZGU7CiAKIHN0cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSB7CiAgICAgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZTsKQEAgLTEzOSw2ICsx
NDAsMjQgQEAgc3RydWN0IFN3aXRjaERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwog
fTsKIAorLy8gVGhpcyBnZXRzIHVzZWQgYnkgdGhlIGxvY2F0aW9uIGFsbG9jYXRpb24gcGhhc2Uu
CitzdHJ1Y3QgSW50ZXJmZXJlbmNlIHsKKyAgICBIYXNoU2V0PE5vZGUqPiB2YWx1ZXM7CisgICAg
SGFzaFNldDxOb2RlKj4gZG91YmxlczsKKyAgICAKKyAgICB0ZW1wbGF0ZTxSZWdpc3RlckNsYXNz
IHJlZ2lzdGVyQ2xhc3M+CisgICAgSGFzaFNldDxOb2RlKj4mIHNldCgpCisgICAgeworICAgICAg
ICBpZiAocmVnaXN0ZXJDbGFzcyA9PSBHZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0
dXJuIHZhbHVlczsKKyAgICAgICAgcmV0dXJuIGRvdWJsZXM7CisgICAgfQorICAgIAorICAgIHZv
aWQgYWRkKE5vZGUqKTsKKyAgICBib29sIGNvbnRhaW5zKE5vZGUqKSBjb25zdDsKKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0OworfTsKKwogLy8gVGhpcyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBp
bW1lZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBjb25zdHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMg
YW4gaW1tZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkgYW4gaW5kZXggaW50byBhIENvZGVCbG9jayBk
YXRhIHN0cnVjdHVyZSAtIAogLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50
aWZpZXIpIGZyb20gYSBOb2RlKi4KQEAgLTE2Nyw2ICsxODYsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwg
bV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICAgICAg
LCBtX29wSW5mbygwKQorICAgICAgICAsIG1fb3BJbmZvMigwKQogICAgIHsKICAgICAgICAgbWlz
Yy5yZXBsYWNlbWVudCA9IDA7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAg
LTE4MCw2ICsyMDEsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAs
IG1fcHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICAgICAgLCBtX29wSW5mbygwKQorICAgICAgICAs
IG1fb3BJbmZvMigwKQogICAgIHsKICAgICAgICAgbWlzYy5yZXBsYWNlbWVudCA9IDA7CiAgICAg
ICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTE5NSw2ICsyMTgsNyBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihT
cGVjTm9uZSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1ZSkKKyAgICAgICAgLCBtX29w
SW5mbzIoMCkKICAgICB7CiAgICAgICAgIG1pc2MucmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBz
ZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CkBAIC0xMTUwLDYgKzExNzQsMTEgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7CiAgICAgfQogICAgIAorICAg
IGJvb2wgdXNlc1ZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID09IHZpcnR1YWxSZWdp
c3RlcjsKKyAgICB9CisgICAgCiAgICAgdm9pZCBzZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNSZXN1bHQo
KSk7CkBAIC0xNTM5LDYgKzE1NjgsOCBAQCBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBtX29wSW5m
bzI7CiAKIHB1YmxpYzoKKyAgICBGb3JtYXR0ZWRSZWdpc3RlciBsb2NhdGlvbjsKKyAgICAKICAg
ICAvLyBGaWVsZHMgdXNlZCBieSB2YXJpb3VzIGFuYWx5c2VzLgogICAgIEFic3RyYWN0VmFsdWUg
dmFsdWU7CiAgICAgCkBAIC0xNTU1LDYgKzE1ODYsNyBAQCBwdWJsaWM6CiAgICAgdW5pb24gewog
ICAgICAgICBOb2RlKiByZXBsYWNlbWVudDsKICAgICAgICAgQmFzaWNCbG9jayogb3duZXI7Cisg
ICAgICAgIEludGVyZmVyZW5jZSogaW50ZXJmZXJlbmNlOwogICAgIH0gbWlzYzsKIH07CiAKQEAg
LTE1ODUsNiArMTYxNywzMCBAQCBDU3RyaW5nIG5vZGVNYXBEdW1wKGNvbnN0IFQmIG5vZGVNYXAs
IER1CiAgICAgcmV0dXJuIG91dC50b0NTdHJpbmcoKTsKIH0KIAoraW5saW5lIHZvaWQgSW50ZXJm
ZXJlbmNlOjphZGQoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAodXNlc0ZQUihub2RlLT5kYXRhRm9y
bWF0KCkpKSB7CisgICAgICAgIGRvdWJsZXMuYWRkKG5vZGUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIEFTU0VSVCh1c2VzR1BSKGRhdGEtPmRhdGFGb3JtYXQoKSkpOworICAg
IHZhbHVlcy5hZGQobm9kZSk7Cit9CisKK2lubGluZSBib29sIEludGVyZmVyZW5jZTo6Y29udGFp
bnMoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBpZiAodXNlc0ZQUihub2RlLT5kYXRhRm9ybWF0
KCkpKQorICAgICAgICByZXR1cm4gZG91Ymxlcy5jb250YWlucyhub2RlKTsKKyAgICAKKyAgICBy
ZXR1cm4gdmFsdWVzLmNvbnRhaW5zKG5vZGUpOworfQorCitpbmxpbmUgc2l6ZV90IEludGVyZmVy
ZW5jZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvdWJsZXMuc2l6ZSgpICsgdmFsdWVz
LnNpemUoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiBuYW1lc3BhY2UgV1RG
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTYwNTk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMzkgKzg3LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9k
ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDogewotICAgICAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
dmFpbGFiaWxpdHkobm9kZSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHlGb3JSZWdpc3Rlcjo6Zm9yd2FyZERlbHRhRm9yTm9kZShub2RlKS5hcHBseURlbHRh
KGF2YWlsYWJpbGl0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkgPT0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5
QXRUYWlsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24g
MTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04NSw2ICs4NSwxMyBAQCBib29sIHJ1blBoYXNlKEdyYXBoJiBncmFwaCkKICAg
ICByZXR1cm4gcnVuQW5kTG9nKHBoYXNlKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgUGhhc2VU
eXBlLCB0ZW1wbGF0ZSBBcmcxVHlwZT4KK2Jvb2wgcnVuUGhhc2UoR3JhcGgmIGdyYXBoLCBjb25z
dCBBcmcxVHlwZSYgYXJnMSkKK3sKKyAgICBQaGFzZVR5cGUgcGhhc2UoZ3JhcGgsIGFyZzEpOwor
ICAgIHJldHVybiBydW5BbmRMb2cocGhhc2UpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1
bGF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUmVzdWx0QW5kU2NyYXRj
aENhbGN1bGF0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdTY29yZUJvYXJkLmgiCisjaW5jbHVkZSAiSlNDZWxs
SW5saW5lcy5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IFJlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1Ymxp
YzoKKyAgICBSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisg
ICAgICAgIDogUGhhc2UoZ3JhcGgsICJyZXN1bHQtYW5kLXNjcmF0Y2ggY2FsY3VsYXRpb24iKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBEZXJpdmUgdGhl
IHJlc3VsdCBmb3JtYXQgZm9yIGVhY2ggbm9kZSBhbmQgdGhlIG51bWJlciBvZiBzY3JhdGNoIHJl
Z2lzdGVycyBpdAorICAgICAgICAvLyBpcyBleHBlY3RlZCB0byB1c2UuCisgICAgICAgIAorICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2Nr
LT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgIG1fbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIGhhbmRsZU5vZGUoKQorICAgIHsKKyAgICAgICAgCisgICAgfQorICAgIAor
ICAgIE5vZGUqIG1fbm9kZTsKK307CisKK2Jvb2wgcGVyZm9ybVJlc3VsdEFuZFNjcmF0Y2hDYWxj
dWxhdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdp
b24oIkRGRyBSZXN1bHQtYW5kLXNjcmF0Y2ggQ2FsY3VsYXRpb24gUGhhc2UiKTsKKyAgICByZXR1
cm4gcnVuUGhhc2U8UmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2U+KGdyYXBoKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxj
dWxhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdSZXN1bHRBbmRTY3JhdGNoQ2Fs
Y3VsYXRpb25QaGFzZV9oCisjZGVmaW5lIERGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBo
YXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBGaWd1cmVzIG91dCB3aGF0IHRoZSByZXN1bHQgdHlw
ZSBhbmQgbnVtYmVyIG9mIHNjcmF0Y2ggcmVnaXN0ZXJzIGlzIGZvciBlYWNoCisvLyBub2RlLgor
CisvLyBGSVhNRTogV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gY29tcHV0ZSB0aGUgc2NyYXRjaCBwYXJ0
IG9mIHRoaXMuCisKK2Jvb2wgcGVyZm9ybVJlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvbihHcmFw
aCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaHVmZmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NodWZmbGUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaHVmZmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU2h1ZmZs
ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKwordm9pZCBUcmFuc2Zlcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIGlmICghdmlydHVhbFJlZ2lzdGVyKCkuaXNWYWxpZCgpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnBy
aW50KCJyIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksICI6ICIsIGZyb20oKSwgIiAtPiAi
LCB0bygpKTsKK30KKworbmFtZXNwYWNlIHsKKworYm9vbCB0cmFuc2ZlckZyb21MZXNzVGhhbihU
cmFuc2ZlciBhLCBUcmFuc2ZlciBiKQoreworICAgIHJldHVybiBhLmZyb20oKSA8IGIuZnJvbSgp
OworfQorCitib29sIHRyYW5zZmVyVG9MZXNzVGhhbihUcmFuc2ZlciBhLCBUcmFuc2ZlciBiKQor
eworICAgIHJldHVybiBhLnRvKCkgPCBiLnRvKCk7Cit9CisKK0Zvcm1hdHRlZFZhbHVlIGdldEZy
b20oVHJhbnNmZXIgdHJhbnNmZXIpCit7CisgICAgcmV0dXJuIHRyYW5zZmVyLmZyb20oKTsKK30K
KworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgc2h1ZmZsZSgKKyAgICBBc3NlbWJs
eUhlbHBlcnMmIGppdCwgVmVjdG9yPFRyYW5zZmVyPiYgdHJhbnNmZXJzLCBHUFJSZWcgc2NyYXRj
aCwgR1BSUmVnIGZwU2NyYXRjaCkKK3sKKyAgICAvLyBUdXJuIHRoZSB0cmFuc2ZlciBpbnRvIGEg
c2VyaWVzIG9mIGxpbmVzIGFuZCBjeWNsZXMuCisgICAgLy8KKyAgICAvLyBBIGxpbmUgd2lsbCBi
ZSBzb21ldGhpbmcgbGlrZToKKyAgICAvLyAgICAgbW92IHIzLCByNAorICAgIC8vICAgICBtb3Yg
cjIsIHIzCisgICAgLy8gICAgIG1vdiByMSwgcjIKKyAgICAvLworICAgIC8vIEEgY3ljbGUgd2ls
bCBiZSBzb21ldGhpbmcgbGlrZToKKyAgICAvLyAgICAgeGNoIHIxLCByMgorICAgIC8vCisgICAg
Ly8gb3I6CisgICAgLy8gICAgIG1vdiByMSwgdG1wCisgICAgLy8gICAgIG1vdiByMiwgcjEKKyAg
ICAvLyAgICAgbW92IHIzLCByMgorICAgIC8vICAgICBtb3YgcjQsIHIzCisgICAgLy8gICAgIG1v
diB0bXAsIHI0CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgY3ljbGVzIGNhbiBhbHdheXMgYmUg
dHVybmVkIGludG8geGNoJ3M6CisgICAgLy8KKyAgICAvLyAgICAgeGNoIHIxLCByNAorICAgIC8v
ICAgICB4Y2ggcjEsIHIzCisgICAgLy8gICAgIHhjaCByMSwgcjIKKyAgICAvLworICAgIC8vIEJ1
dCB0aGlzIGFsZ29yaXRobSB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIHRoZSBwb3NzaWJpbGl0eSB0
aGF0IHdlJ3JlIHNodWZmbGluZyBiZXR3ZWVuCisgICAgLy8gR1BSJ3MgYW5kIEZQUidzIGFuZCBz
cGlsbCBzbG90cy4KKyAgICAvLworICAgIC8vIE9uIHRvcCBvZiB0aGF0LCB0aGVyZSdzIGEgYnVu
Y2ggb2YgY29sZC1oZWFydGVkIGVuZ2luZWVyaW5nIGZvciBoYW5kbGluZyBkYXRhIGZvcm1hdAor
ICAgIC8vIGNvbnZlcnNpb25zLgorICAgIAorICAgIGlmICghdHJhbnNmZXJzLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHRyYW5zZmVycy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBB
U1NFUlQodHJhbnNmZXJzW2ldLmRvZXNUaGluZ3MoKSk7CisgICAgICAgIAorICAgICAgICBzdGQ6
OnNvcnQodHJhbnNmZXJzLmJlZ2luKCksIHRyYW5zZmVycy5lbmQoKTsgdHJhbnNmZXJUb0xlc3NU
aGFuKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdHJhbnNmZXJzLnNpemUoKSAtIDE7IGkt
LTspCisgICAgICAgICAgICBBU1NFUlQodHJhbnNmZXJzW2ldLnRvKCkgIT0gdHJhbnNmZXJzW2kg
KyAxXS50bygpKTsKKyAgICB9CisgICAgCisgICAgc3RkOjpzb3J0KHRyYW5zZmVycy5iZWdpbigp
LCB0cmFuc2ZlcnMuZW5kKCksIHRyYW5zZmVyRnJvbUxlc3NUaGFuKTsKKyAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0cmFuc2ZlcnMuc2l6ZSgp
IC0gMTsgaS0tOykKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2ZlcnNbaV0uZnJvbSgpICE9IHRy
YW5zZmVyc1tpICsgMV0uZnJvbSgpKTsKKyAgICB9CisgICAgCisgICAgQml0VmVjdG9yIGFscmVh
ZHlIYW5kbGVkOworICAgIAorICAgIFZlY3RvcjxWZWN0b3I8VHJhbnNmZXI+PiBsaW5lczsKKyAg
ICBWZWN0b3I8VmVjdG9yPFRyYW5zZmVyPj4gY3ljbGVzOworICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0cmFuc2ZlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGFscmVh
ZHlIYW5kbGVkLmdldChpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAg
ICAgQml0VmVjdG9yIGluY2x1ZGVkOworICAgICAgICBWZWN0b3I8VHJhbnNmZXI+IGxpc3Q7Cisg
ICAgICAgIAorICAgICAgICB1bnNpZ25lZCBmaXJzdEluZGV4ID0gaTsKKyAgICAgICAgdW5zaWdu
ZWQgY3VycmVudEluZGV4ID0gY3VycmVudEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAg
ICAgICAgICBUcmFuc2ZlciBjdXJyZW50ID0gdHJhbnNmZXJzW2N1cnJlbnRJbmRleF07CisgICAg
ICAgICAgICBsaXN0LmFwcGVuZChjdXJyZW50KTsKKyAgICAgICAgICAgIEFTU0VSVCghaW5jbHVk
ZWQuZ2V0KGN1cnJlbnRJbmRleCkpOworICAgICAgICAgICAgaW5jbHVkZWQuc2V0KGN1cnJlbnRJ
bmRleCk7CisgICAgICAgICAgICBBU1NFUlQoIWFscmVhZHlIYW5kbGVkLmdldChjdXJyZW50SW5k
ZXgpKTsKKyAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkLnNldChjdXJyZW50SW5kZXgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBzb3J0ZWRJbmRleE9m
PFRyYW5zZmVyLCBGb3JtYXR0ZWRWYWx1ZT4oCisgICAgICAgICAgICAgICAgdHJhbnNmZXJzLCB0
cmFuc2ZlcnMuc2l6ZSgpLCBjdXJyZW50LnRvKCksIGdldEZyb20pOworICAgICAgICAgICAgaWYg
KG5leHRJbmRleCA9PSB0cmFuc2ZlcnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKGxpc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5jbHVkZWQuZ2V0KG5leHRJbmRleCkpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobmV4dEluZGV4ID09IGZpcnN0SW5kZXgpOworICAgICAgICAg
ICAgICAgIGN5Y2xlcy5hcHBlbmQobGlzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IG5leHRJ
bmRleDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2h1ZmZsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTaHVmZmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1NodWZmbGVfaAorI2RlZmluZSBERkdTaHVmZmxlX2gKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiREZHRm9ybWF0dGVk
UmVnaXN0ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBU
cmFuc2ZlciB7CitwdWJsaWM6CisgICAgVHJhbnNmZXIoKSB7IH0KKyAgICAKKyAgICBUcmFuc2Zl
cihGb3JtYXR0ZWRSZWdpc3RlciBmcm9tLCBGb3JtYXR0ZWRSZWdpc3RlciB0bywgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgOiBtX2Zyb20oZnJvbSkKKyAgICAgICAg
LCBtX3RvKHRvKQorICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikK
KyAgICB7CisgICAgfQorICAgIAorICAgIEZvcm1hdHRlZFJlZ2lzdGVyIGZyb20oKSBjb25zdCB7
IHJldHVybiBtX2Zyb207IH0KKyAgICBGb3JtYXR0ZWRSZWdpc3RlciB0bygpIGNvbnN0IHsgcmV0
dXJuIG1fdG87IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7IH0KKyAgICAKKyAgICBib29sIGRvZXNUaGluZ3Mo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb20oKSAhPSB0bygpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlz
IGVtaXRzIGNvZGUgdGhhdCBtYXkgZGVzdHJveSB0aGUgdmFsdWUgaW4gdGhlIGZyb20oKSBsb2Nh
dGlvbiBhbmQgd2lsbAorICAgIC8vIHBsYWNlIHRoZSB2YWx1ZSBpbnRvIHRoZSB0bygpIGxvY2F0
aW9uLiBZb3UgY2FuJ3QgcmVseSBvbiBiZWluZyBhYmxlIHRvIHVzZQorICAgIC8vIHRoZSBmcm9t
KCkgbG9jYXRpb24gYW55bW9yZS4gTm90ZSB0aGF0IHRoZSBzY3JhdGNoIHJlZ2lzdGVycyBhcmUg
Z3VhcmFudGVlZAorICAgIC8vIHRvIGJlIHVubmVjZXNzYXJ5IGlmIHRoZSBkYXRhIGZvcm1hdHMg
YXJlIHRoZSBzYW1lLgorICAgIHZvaWQgZW1pdChBc3NlbWJseUhlbHBlcnMmLCBHUFJSZWcgc2Ny
YXRjaCA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBmcFNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnKTsK
KworcHJpdmF0ZToKKyAgICBGb3JtYXR0ZWRSZWdpc3RlciBtX2Zyb207CisgICAgRm9ybWF0dGVk
UmVnaXN0ZXIgbV90bzsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV92aXJ0dWFsUmVnaXN0ZXI7Cit9
OworCisvLyBOb3RlLCB0aGlzIHdpbGwgcmVhcnJhbmdlIHRoZSB2ZWN0b3IgaW4gd2hhdGV2ZXIg
d2F5IGl0IHdhbnRzLgordm9pZCBzaHVmZmxlKEFzc2VtYmx5SGVscGVycyYsIFZlY3RvcjxUcmFu
c2Zlcj4mLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIGZwU2NyYXRjaCk7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHU2h1ZmZsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ1MSw2
ICs1NDUxLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtCcmFuY2hlcygpCiAgICAgfQog
fQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzaHVmZmxlVG9DYW5vbmljYWwoKQoreworICAgIAor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTYwNTk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02ODksNiArNjg5LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gSWYgaW4gU1NBLCBjaGVjayB0aGF0IHRo
aXMgbm9kZSBpc24ndCBsaXZlIGF0IHRoZSB0YWlsIG9mIHRoZSBibG9jay4KKyAgICAgICAgaWYg
KG1faml0LmdyYXBoKCkubV9mb3JtID09IFNTQQorICAgICAgICAgICAgJiYgbV9ibG9jay0+c3Nh
LT5saXZlQXRUYWlsLmZpbmQobV9jdXJyZW50Tm9kZSkgIT0gbV9ibG9jay0+c3NhLT5saXZlQXRU
YWlsLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogCiAgICAgICAgIC8vIENo
ZWNrIGlmIHRoZSBsYXN0Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCiAgICAgICAgIE5v
ZGUqIGxhc3ROb2RlID0gbV9ibG9jay0+bGFzdCgpOwpAQCAtMjIxOCw3ICsyMjIzLDIwIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBnZW5lcmF0aW9uSW5mbyhlZGdlLm5vZGUoKSk7
CiAgICAgfQotCisgICAgCisgICAgRm9ybWF0dGVkUmVnaXN0ZXIgY3VycmVudEZvcm1hdChOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9u
SW5mbyhub2RlKTsKKyAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9y
bWF0Tm9uZSkgeworICAgICAgICAgICAgaWYgKHVzZXNHUFIoaW5mby5yZWdpc3RlckZvcm1hdCgp
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRm9ybWF0dGVkUmVnaXN0ZXIoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpLCBpbmZvLmdwcigpKTsKKyAgICAgICAgICAgIHJldHVybiBGb3JtYXR0ZWRSZWdp
c3RlcihpbmZvLnJlZ2lzdGVyRm9ybWF0KCksIGluZm8uZnByKCkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBGb3JtYXR0ZWRSZWdpc3RlcihpbmZvLnNwaWxsRm9ybWF0KCkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNodWZmbGVUb0Nhbm9uaWNhbCgpOworICAgIAogICAgIC8vIFRoZSBK
SVQsIHdoaWxlIGFsc28gcHJvdmlkZXMgTWFjcm9Bc3NlbWJsZXIgZnVuY3Rpb25hbGl0eS4KICAg
ICBKSVRDb21waWxlciYgbV9qaXQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE2MDU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiAr
NDUsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAgICAgICAgIFNj
b3JlQm9hcmQgc2NvcmVCb2FyZChtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbCk7CiAgICAgICAg
IHNjb3JlQm9hcmQuYXNzZXJ0Q2xlYXIoKTsKICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lvbiAxNjA1OTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
NDIwLDcgKzQyMCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdW5zaWduZWQgdG9JbmRl
eChHUFJSZWcgcmVnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KTsKKyAgICAgICAgaWYgKHJlZyA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0dXJu
IEludmFsaWRJbmRleDsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ocmVnKSA8IDE2
KTsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4Rm9yUmVnaXN0ZXJbMTZdID0g
eyAwLCAyLCAxLCAzLCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgNSwgNCwgNiwgNywgOCwg
SW52YWxpZEluZGV4LCA5LCAxMCwgSW52YWxpZEluZGV4LCBJbnZhbGlkSW5kZXggfTsKICAgICAg
ICAgcmV0dXJuIGluZGV4Rm9yUmVnaXN0ZXJbcmVnXTsKQEAgLTQzOCw3ICs0MzksNyBAQCBwdWJs
aWM6CiAgICAgICAgIH07CiAgICAgICAgIHJldHVybiBuYW1lRm9yUmVnaXN0ZXJbcmVnXTsKICAg
ICB9Ci0KKyAgICAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW52YWxpZEluZGV4ID0gMHhm
ZmZmZmZmZjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225612</attachid>
            <date>2014-03-02 14:56:15 -0800</date>
            <delta_ts>2014-03-02 14:56:15 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>63040</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkocmV2
aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3Jt
YXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwxNiBAQCBpbmxpbmUgYm9vbCBpc0pT
Qm9vbGVhbihEYXRhRm9ybWF0IGZvcm1hCiAgICAgcmV0dXJuIGlzSlNGb3JtYXQoZm9ybWF0LCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKIH0KIAoraW5saW5lIGJvb2wgdXNlc0ZQUihEYXRhRm9ybWF0
IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGU7CiB9CiAK
K2lubGluZSBib29sIHVzZXNHUFIoRGF0YUZvcm1hdCBmb3JtYXQpCit7CisgICAgcmV0dXJuICF1
c2VzRlBSKGZvcm1hdCkgJiYgZm9ybWF0ICE9IERhdGFGb3JtYXROb25lOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwogI2VuZGlmIC8vIERhdGFGb3JtYXRfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJp
bGl0eUZvclJlZ2lzdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQXZhaWxh
YmlsaXR5Rm9yUmVnaXN0ZXIgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXI6OmZvcndhcmREZWx0YUZv
ck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJl
Z2lzdGVyKAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
dmFyaWFibGUtPmZsdXNoZWRBdCgpKSwKKyAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpKTsK
KyAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBjYXNlIEdldEFyZ3VtZW50OiB7
CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKAorICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSksCisgICAg
ICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgY2FzZSBNb3ZIaW50OgorICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7CisgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKAorICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSksCisgICAgICAgICAgICB2YXJp
YWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgY2Fz
ZSBab21iaWVIaW50OiB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eUZv
clJlZ2lzdGVyKAorICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpLAorICAg
ICAgICAgICAgdmFyaWFibGUtPmxvY2FsKCkpOworICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rl
cigpOworICAgIH0KK30KKwordm9pZCBBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiciIsIG1fcmVnLm9mZnNldCgp
LCAiOiAiLCBtX2F2YWlsYWJpbGl0eSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlGb3JSZWdp
c3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdmFpbGFiaWxpdHlGb3JS
ZWdpc3Rlcl9oCisjZGVmaW5lIERGR0F2YWlsYWJpbGl0eUZvclJlZ2lzdGVyX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIg
eworcHVibGljOgorICAgIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyKCkgeyB9CisgICAgCisgICAg
QXZhaWxhYmlsaXR5Rm9yUmVnaXN0ZXIoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKKyAgICAgICAgOiBtX2F2YWlsYWJpbGl0eShhdmFpbGFiaWxpdHkpCisg
ICAgICAgICwgbV9yZWdpc3RlcihyZWcpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2F2YWlsYWJpbGl0eSAmJiAhbV9yZWdpc3Rlci5p
c1ZhbGlkKCk7IH0KKyAgICAKKyAgICBjb25zdCBBdmFpbGFiaWxpdHkmIGF2YWlsYWJpbGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5OyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXI7IH0KKyAgICAKKyAgICAv
LyBSZXR1cm5zIGFuIEF2YWlsYWJpbGl0eUZvclJlZ2lzdGVyIHRoYXQgZGVzY3JpYmVzIHRoZSBh
dmFpbGFiaWxpdHkgZGVsdGEsIHdoZW4KKyAgICAvLyBzY2FubmluZyBmb3J3YXJkLCBmb3IgYSBu
b2RlLgorICAgIHN0YXRpYyBBdmFpbGFiaWxpdHlGb3JSZWdpc3RlciBmb3J3YXJkRGVsdGFGb3JO
b2RlKE5vZGUqKTsKKyAgICAKKyAgICB2b2lkIGFwcGx5RGVsdGEoT3BlcmFuZHM8QXZhaWxhYmls
aXR5PiYgb3BlcmFuZHMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBvcGVyYW5kcy5vcGVyYW5kKHZpcnR1YWxSZWdpc3Rlcigp
KSA9IGF2YWlsYWJpbGl0eSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQXZhaWxhYmlsaXR5IG1fYXZhaWxhYmls
aXR5OworICAgIFZpcnR1YWxSZWdpc3RlciBtX3JlZ2lzdGVyOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0
Nyw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAg
SGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJh
Y3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZh
bHVlPiB2YWx1ZXNBdFRhaWw7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxOb2RlKj4+
IGV4dHJhS2lsbHM7CiAgICAgICAgIAogICAgICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKICAg
ICAgICAgflNTQURhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9y
bWF0dGVkUmVnaXN0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRm9ybWF0dGVkUmVnaXN0ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGb3JtYXR0ZWRSZWdpc3Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRm9ybWF0dGVkUmVnaXN0ZXIu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK3ZvaWQgRm9ybWF0dGVkUmVnaXN0ZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSkpOwor
ICAgIAorICAgIGlmIChkYXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBvdXQucHJpbnQoIjoiKTsKKyAgICBpZiAodXNlc0dQUihkYXRhRm9y
bWF0KCkpKQorICAgICAgICBvdXQucHJpbnQoZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAgb3V0
LnByaW50KGZwcigpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rm9ybWF0dGVkUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Zvcm1hdHRlZFJlZ2lzdGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Zvcm1hdHRlZFJlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdGb3JtYXR0ZWRSZWdpc3Rlcl9oCisjZGVmaW5lIERGR0Zvcm1hdHRlZFJl
Z2lzdGVyX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5o
IgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBSZWdpc3RlckNsYXNzIHsgR2VuZXJhbFJl
Z2lzdGVycywgRG91YmxlUmVnaXN0ZXJzIH07CisKK2NsYXNzIEZvcm1hdHRlZFJlZ2lzdGVyIHsK
K3B1YmxpYzoKKyAgICBGb3JtYXR0ZWRSZWdpc3RlcigpCisgICAgICAgIDogbV9yZWdpc3Rlcihz
dGF0aWNfY2FzdDxpbnQ4X3Q+KEludmFsaWRHUFJSZWcpKQorICAgICAgICAsIG1fZGF0YUZvcm1h
dChEYXRhRm9ybWF0Tm9uZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxHUFJS
ZWc+KG1fcmVnaXN0ZXIpID09IEludmFsaWRHUFJSZWcpOworICAgICAgICBBU1NFUlQoc3RhdGlj
X2Nhc3Q8RlBSUmVnPihtX3JlZ2lzdGVyKSA9PSBJbnZhbGlkRlBSUmVnKTsKKyAgICB9CisgICAg
CisgICAgRm9ybWF0dGVkUmVnaXN0ZXIoRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgICAgICA6
IG1fcmVnaXN0ZXIoc3RhdGljX2Nhc3Q8aW50OF90PihJbnZhbGlkR1BSUmVnKSkKKyAgICAgICAg
LCBtX2RhdGFGb3JtYXQoc3RhdGljX2Nhc3Q8aW50OF90PihkYXRhRm9ybWF0KSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIEZvcm1hdHRlZFJlZ2lzdGVyKERhdGFGb3JtYXQgZGF0YUZvcm1hdCwg
R1BSUmVnIGdwcikKKyAgICAgICAgOiBtX3JlZ2lzdGVyKHN0YXRpY19jYXN0PGludDhfdD4oZ3By
KSkKKyAgICAgICAgLCBtX2RhdGFGb3JtYXQoZGF0YUZvcm1hdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCh1c2VzR1BSKGRhdGFGb3JtYXQpKTsKKyAgICB9CisgICAgCisgICAgRm9ybWF0dGVkUmVn
aXN0ZXIoRGF0YUZvcm1hdCBkYXRhRm9ybWF0LCBGUFJSZWcgZnByKQorICAgICAgICA6IG1fcmVn
aXN0ZXIoc3RhdGljX2Nhc3Q8aW50OF90PihmcHIpKQorICAgICAgICAsIG1fZGF0YUZvcm1hdChk
YXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNGUFIoZGF0YUZvcm1hdCkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlZ2lzdGVyKEdQUlJlZyBncHIpCisgICAgeworICAg
ICAgICBBU1NFUlQodXNlc0dQUihkYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgbV9yZWdpc3RlciA9
IHN0YXRpY19jYXN0PGludDhfdD4oZ3ByKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRSZWdp
c3RlcihGUFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNGUFIoZGF0YUZvcm1h
dCgpKSk7CisgICAgICAgIG1fcmVnaXN0ZXIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGZwcik7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAg
ICB2b2lkIHNldFJlZ2lzdGVySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBp
ZiAocmVnaXN0ZXJDbGFzcyA9PSBHZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgc2V0UmVn
aXN0ZXIoR1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzZXRSZWdpc3RlcihGUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAgICBib29sIGlz
UmVnaXN0ZXJDbGFzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAocmVnaXN0ZXJDbGFzcyA9
PSBHZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIHVzZXNHUFIoZGF0YUZvcm1h
dCgpKTsKKyAgICAgICAgcmV0dXJuIHVzZXNGUFIoZGF0YUZvcm1hdCgpKTsKKyAgICB9CisgICAg
CisgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RGF0YUZvcm1hdD4obV9kYXRhRm9ybWF0KTsgfQorICAgIAorICAgIEdQUlJlZyBncHIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNHUFIoZGF0YUZvcm1hdCgpKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fcmVnaXN0ZXIpOworICAgIH0KKyAgICAKKyAg
ICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh1c2VzRlBSKGRhdGFG
b3JtYXQoKSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPihtX3JlZ2lzdGVy
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8UmVnaXN0ZXJDbGFzcyByZWdpc3RlckNsYXNz
PgorICAgIHVuc2lnbmVkIHJlZ2lzdGVySW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KHJlZ2lzdGVyQ2xhc3MgPT0gR2VuZXJhbFJlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybiBH
UFJJbmZvOjp0b0luZGV4KGdwcigpKTsKKyAgICAgICAgcmV0dXJuIEZQUkluZm86OnRvSW5kZXgo
ZnByKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybWF0dGVk
UmVnaXN0ZXImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXIg
PT0gb3RoZXIubV9yZWdpc3RlcgorICAgICAgICAgICAgJiYgbV9kYXRhRm9ybWF0ID09IG90aGVy
Lm1fZGF0YUZvcm1hdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZv
cm1hdHRlZFJlZ2lzdGVyJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgRm9y
bWF0dGVkUmVnaXN0ZXImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fcmVnaXN0
ZXIgIT0gb3RoZXIubV9yZWdpc3RlcikKKyAgICAgICAgICAgIHJldHVybiBtX3JlZ2lzdGVyIDwg
b3RoZXIubV9yZWdpc3RlcjsKKyAgICAgICAgcmV0dXJuIG1fZGF0YUZvcm1hdCA8IG90aGVyLm1f
ZGF0YUZvcm1hdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIGludDhfdCBtX3JlZ2lzdGVyOworICAgIGludDhfdCBt
X2RhdGFGb3JtYXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Zvcm1hdHRlZFJlZ2lzdGVyX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw4ICszOCw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgTGl2
ZW5lc3NBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKLSAgICBMaXZlbmVz
c0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQotICAgICAgICA6IFBoYXNlKGdyYXBoLCAibGl2
ZW5lc3MgYW5hbHlzaXMiKQorICAgIExpdmVuZXNzQW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgs
IEF2YWlsYWJpbGl0eUxpdmVuZXNzTW9kZSBhdmFpbGFiaWxpdHlNb2RlKQorICAgICAgICA6IFBo
YXNlKGdyYXBoLCBhdmFpbGFiaWxpdHlNb2RlID09IEF2YWlsYWJpbGl0eU5vdExpdmUgPyAibGl2
ZW5lc3MgYW5hbHlzaXMiIDogImxpdmVuZXNzIGFuYWx5c2lzIChpbmNsLiBhdmFpbGFiaWxpdHkp
IikKKyAgICAgICAgLCBtX2F2YWlsYWJpbGl0eU1vZGUoYXZhaWxhYmlsaXR5TW9kZSkKICAgICB7
CiAgICAgfQogICAgIApAQCAtODYsNTEgKzg3LDEwOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAo
IWJsb2NrKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICAgICAgYmxvY2stPnNz
YS0+ZXh0cmFLaWxscy5jbGVhcigpOworICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEl0J3Mg
bGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhh
dCB1c2UKICAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTg0NTUKICAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFp
bDsKICAgICAgICAgCisgICAgICAgIGlmIChtX2F2YWlsYWJpbGl0eU1vZGUgPT0gQXZhaWxhYmls
aXR5SXNMaXZlKSB7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgICAgIG1fZGVsdGFzLnJlc2l6ZShibG9jay0+c2l6
ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5
Rm9yUmVnaXN0ZXIgZGVsdGEgPQorICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OmZv
cndhcmREZWx0YUZvck5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCEhZGVsdGEpIHsK
KyAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5IG9sZEF2YWlsYWJpbGl0eSA9CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKGRlbHRhLnZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGEuYXBwbHlEZWx0YShtX2F2YWls
YWJpbGl0eSk7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhID0gQXZhaWxhYmlsaXR5Rm9yUmVn
aXN0ZXIob2xkQXZhaWxhYmlsaXR5LCBkZWx0YS52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZGVsdGFzW25vZGVJbmRleF0gPSBkZWx0YTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKG1fYXZhaWxh
YmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCk7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsg
bm9kZUluZGV4LS07KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CisgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAg
ICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246CisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyAgICBuOiBVcHNpbG9uKEB4LCBecCkKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBwIGFuZCBAbiBhbmQgdXNl
cyBAeC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhp
OgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgcDogUGhpKCkKKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFdlIHNheSBub3RoaW5nLiBJdCdz
IG5laXRoZXIgYSB1c2Ugbm9yIGEgZGVmLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gR2l2ZW4gYSBub2RlOgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gICAgbjogVGhpbmd5KEBhLCBAYiwgQGMpCisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAbiBhbmQgdXNlcyBAYSwgQGIsIEBj
LgogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBHaXZlbiBhbiBVcHNpbG9uOgotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIG46IFVwc2lsb24oQHgsIF5wKQotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBwIGFuZCBAbiBhbmQg
dXNlcyBAeC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBHaXZlbiBhIFBoaToKLSAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBwOiBQaGkoKQotICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgIC8vIFdlIHNheSBub3RoaW5nLiBJdCdzIG5laXRoZXIgYSB1c2Ugbm9yIGEg
ZGVmLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEdpdmVuIGEgbm9kZToKLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBuOiBUaGluZ3koQGEsIEBiLCBAYykKLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAbiBhbmQgdXNl
cyBAYSwgQGIsIEBjLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgVXBzaWxvbjogewotICAgICAgICAgICAgICAgIE5vZGUq
IHBoaSA9IG5vZGUtPnBoaSgpOwotICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUocGhpKTsK
LSAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOwotICAgICAgICAgICAgICAgIG1f
bGl2ZS5hZGQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIFVwc2lsb246IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
cGhpID0gbm9kZS0+cGhpKCk7CisgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUocGhp
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9saXZlLmFkZChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIFBoaTogewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOworICAgICAg
ICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRD
aGlsZFVzZSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7Ci0gICAgICAgICAgICAgICAgREZHX05PREVf
RE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkQ2hpbGRVc2UpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFiaWxpdHlNb2RlID09
IEF2YWlsYWJpbGl0eUlzTGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2Fu
RXhpdCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9hdmFpbGFiaWxpdHkuc2l6ZSgpOyAraSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBtX2F2YWlsYWJpbGl0eVtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmx1c2guZm9ybWF0KCkgIT0gRGVhZEZsdXNoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGZsdXNoLmZvcm1hdCgpICE9IENvbmZs
aWN0aW5nRmx1c2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFhdmFpbGxhYmlsaXR5Lmhhc05vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGF2YWlsYWJpbGl0eS5ub2RlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fbGl2ZS5jb250YWlucyhjaGlsZCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2F2YWlsYWJpbGl0
eS5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBp
c0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgbm9kZS0+Y29kZU9yaWdpbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0xpdmUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChjaGlsZCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgVmVjdG9yPE5vZGUqPj46OkFkZFJlc3VsdCBy
ZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+c3NhLT5leHRy
YUtpbGxzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFwcGVuZChjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobV9hdmFpbGFiaWxpdHlNb2RlID09IEF2YWlsYWJpbGl0eUlzTGl2
ZSkKKyAgICAgICAgICAgICAgICBtX2RlbHRhc1tub2RlSW5kZXhdLmFwcGx5KG1fYXZhaWxhYmls
aXR5KTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKG1fYXZhaWxhYmlsaXR5TW9k
ZSA9PSBBdmFpbGFiaWxpdHlJc0xpdmUpCisgICAgICAgICAgICBBU1NFUlQobV9hdmFpbGFiaWxp
dHkgPT0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkKTsKKyAgICAgICAgCiAgICAgICAg
IGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCkBAIC0xNTAsMTQgKzIwOCwxNyBAQCBwcml2YXRlOgogICAgICAgICBlZGdl
LnNldEtpbGxTdGF0dXMobV9saXZlLmFkZChlZGdlLm5vZGUoKSkuaXNOZXdFbnRyeSA/IERvZXNL
aWxsIDogRG9lc05vdEtpbGwpOwogICAgIH0KICAgICAKKyAgICBBdmFpbGFiaWxpdHlMaXZlbmVz
c01vZGUgbV9hdmFpbGFiaWxpdHlNb2RlOwogICAgIGJvb2wgbV9jaGFuZ2VkOwogICAgIEhhc2hT
ZXQ8Tm9kZSo+IG1fbGl2ZTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IG1fYXZhaWxhYmls
aXR5OworICAgIFZlY3RvcjxBdmFpbGFiaWxpdHlGb3JSZWdpc3Rlcj4gbV9kZWx0YXM7CiB9Owog
Ci1ib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9y
bUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmIGdyYXBoLCBBdmFpbGFiaWxpdHlMaXZlbmVzc01vZGUg
bW9kZSkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIExpdmVuZXNz
IEFuYWx5c2lzIFBoYXNlIik7Ci0gICAgcmV0dXJuIHJ1blBoYXNlPExpdmVuZXNzQW5hbHlzaXNQ
aGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFzZTxMaXZlbmVzc0FuYWx5c2lzUGhhc2U+
KGdyYXBoLCBtb2RlKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5oCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiwxNSBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogCi0vLyBDb21w
dXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmxpdmVBdEhlYWQvbGl2ZUF0VGFpbC4KKy8vIENvbXB1dGVz
IEJhc2ljQmxvY2s6OnNzYS0+bGl2ZUF0SGVhZC9saXZlQXRUYWlsLiBNYXkgb3IgbWF5IG5vdCBp
bmNsdWRlIHRoaW5ncworLy8gdGhhdCBhcmUgcGFydCBvZiBBdmFpbGFiaWxpdHkuCiAKLWJvb2wg
cGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmKTsKK2VudW0gQXZhaWxhYmlsaXR5TGl2ZW5l
c3NNb2RlIHsKKyAgICBBdmFpbGFiaWxpdHlOb3RMaXZlLCAvLyBVc2VmdWwgaWYgeW91J3JlIGp1
c3QgZG9pbmcgcHJ1bmluZyBmb3IgQ0ZBLgorICAgIEF2YWlsYWJpbGl0eUlzTGl2ZSAvLyBVc2Vm
dWwgaWYgeW91J3JlIGRvaW5nIHJlZ2lzdGVyIGFsbG9jYXRpb24uCit9OworCitib29sIHBlcmZv
cm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiwgQXZhaWxhYmlsaXR5TGl2ZW5lc3NNb2RlID0gQXZh
aWxhYmlsaXR5Tm90TGl2ZSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9jYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb2NhdGlvbkFsbG9j
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTG9jYXRpb25BbGxvY2F0aW9uUGhhc2Uu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdTY29yZUJvYXJkLmgiCisjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1
ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIExvY2F0aW9uQWxsb2NhdGlv
blBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBMb2NhdGlvbkFsbG9jYXRpb25Q
aGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJsb2NhdGlvbiBhbGxv
Y2F0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgLy8g
Q2xlYXJzIG1pc2MuaW50ZXJmZXJlbmNlIGJlY2F1c2UgaXQgb3ZlcmxhcHMgbWlzYy5yZXBsYWNl
bWVudC4KKyAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOworICAgICAgICAKKyAg
ICAgICAgLy8gQ29tcHV0ZSBpbnRlcmZlcmVuY2UgYW5kIGNvbGxlY3QgYWxsIG5vZGVzIHRoYXQg
YXJlIGludGVyZXN0aW5nIHRvIGFsbG9jYXRpb24uCisgICAgICAgIFZlY3RvcjxOb2RlKj4gbm9k
ZXM7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSGFzaFNldDxO
b2RlKj4gbGl2ZSA9IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQ7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUlu
ZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmhhc1Jlc3VsdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxpdmUuYWRkKG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICBpbnRlcmZlcmUobGl2ZSk7CisgICAgICAgICAgICAg
ICAgICAgIG5vZGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1DaGls
ZHJlbihub2RlKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dy
YXBoLmNoaWxkKG5vZGUsIGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZS5kb2VzS2ls
bCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLnJlbW92ZShlZGdlLm5vZGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2UgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxOb2RlKj4+IGl0ZXIgPSBibG9jay0+c3NhLT5l
eHRyYUtpbGxzLmZpbmQobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0gYmxvY2st
PnNzYS0+ZXh0cmFLaWxscy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE5v
ZGUqPiYga2lsbHMgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0ga2lsbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBs
aXZlLnJlbW92ZShraWxsc1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2Ug
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNSZXN1bHQoKSAmJiAhbm9k
ZS0+YWRqdXN0ZWRSZWZDb3VudCgpKQorICAgICAgICAgICAgICAgICAgICBsaXZlLnJlbW92ZShu
b2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmly
c3QgdXNlIFdlbHNoLVBvd2VsbCB0byBwaWNrIHNwaWxsIHNsb3RzLCBpLmUuIHZpcnR1YWwgcmVn
aXN0ZXJzLiBFdmVyeSBub2RlIHRoYXQKKyAgICAgICAgLy8gcHJvZHVjZXMgYSByZXN1bHQgbXVz
dCBoYXZlIGEgdmlydHVhbCByZWdpc3Rlci4KKyAgICAgICAgc3RkOjpzb3J0KG5vZGVzLmJlZ2lu
KCksIG5vZGVzLmVuZCgpLCBpbnRlcmZlcmVuY2VEZWdyZWVMZXNzVGhhbik7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG5vZGVzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTm9kZSog
Zmlyc3ROb2RlID0gbm9kZXNbaV07CisgICAgICAgICAgICBpZiAoZmlyc3ROb2RlLT5oYXNWaXJ0
dWFsUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPQorICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKyspOworICAgICAgICAg
ICAgZmlyc3ROb2RlLT5zZXRWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBzZWNvbmROb2RlID0gbm9kZXNbal07CisgICAgICAgICAgICAgICAgaWYgKHNlY29uZE5vZGUt
Pmhhc1ZpcnR1YWxSZWdpc3RlcigpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBib29sIGludGVyZmVyZXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBp
ZiAoSGFzaFNldDxOb2RlKj4qIGVkZ2VzID0gc2Vjb25kTm9kZS0+bWlzYy5pbnRlcmZlcmVuY2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBl
ZGdlcy0+YmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJh
dG9yIGVuZCA9IGVkZ2VzLT5lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG90aGVyTm9k
ZSA9ICppdGVyOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+dXNlc1Zp
cnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ZXJmZXJlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGludGVyZmVyZXMpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHNlY29uZE5vZGUtPnNldFZp
cnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBVc2UgQ2hhaXRpbidzIGFsZ29yaXRobSBmb3IgcmVnaXN0
ZXJzLiBEbyBhIHNlcGFyYXRlIHJ1biBmb3IgdGhlIHR3byBjbGFzc2VzIG9mCisgICAgICAgIC8v
IHJlZ2lzdGVycyB0aGF0IHdlIGRlYWwgd2l0aC4KKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZT
Y3JhdGNoR1BScyA9IDI7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU2NyYXRjaEZQUnMgPSAx
OworICAgICAgICBjaGFpdGluQWxsb2NhdGU8R2VuZXJhbFJlZ2lzdGVycywgR1BSSW5mbz4obm9k
ZXMsIG51bWJlck9mU2NyYXRjaEdQUnMpOworICAgICAgICBjaGFpdGluQWxsb2NhdGU8RG91Ymxl
UmVnaXN0ZXJzLCBGUFJJbmZvPihub2RlcywgbnVtYmVyT2ZTY3JhdGNoRlBScyk7CisgICAgICAg
IAorICAgICAgICAvLyBGaW5hbGx5IGRlbGV0ZSBhbGwgaW50ZXJmZXJlbmNlIHNldHMuCisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2st
PnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+bWlzYy5pbnRl
cmZlcmVuY2UpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGRlbGV0ZSBub2RlLT5taXNjLmludGVyZmVyZW5jZTsKKyAgICAgICAgICAgICAgICBub2RlLT5t
aXNjLmludGVyZmVyZW5jZSA9IDA7IC8vIFRoaXMgb3VnaHQgbm90IGJlIHN0cmljdGx5IG5lY2Vz
c2FyeSwgYnV0IGl0IHByZXNlcnZlcyBzb21lIGtpbmQgb2Ygc2FuaXR5LgorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHZvaWQgaW50ZXJmZXJlKEhhc2hTZXQ8Tm9kZSo+JiBsaXZlKQorICAgIHsKKyAgICAgICAg
SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBsaXZlLmJlZ2luKCk7CisgICAgICAgIEhh
c2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBsaXZlLmVuZCgpOworICAgICAgICBmb3IgKDsg
aXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOwor
ICAgICAgICAgICAgSW50ZXJmZXJlbmNlKiBub2RlSW50ZXJmZXJlbmNlID0gaW50ZXJmZXJlbmNl
KG5vZGUpOworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIyID0gbGl2
ZS5iZWdpbigpOworICAgICAgICAgICAgZm9yICg7IGl0ZXIyICE9IGVuZDsgKytpdGVyMikKKyAg
ICAgICAgICAgICAgICBub2RlSW50ZXJmZXJlbmNlLT5hZGQoKml0ZXIyKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGludGVyZmVyZVdpdGhDaGlsZHJlbihOb2RlKiBub2RlLCBF
ZGdlIGVkZ2UpCisgICAgeworICAgICAgICBpbnRlcmZlcmVuY2Uobm9kZSktPmFkZChlZGdlLm5v
ZGUoKSk7CisgICAgICAgIGludGVyZmVyZW5jZShlZGdlLm5vZGUoKSktPmFkZChub2RlKTsKKyAg
ICB9CisgICAgCisgICAgSW50ZXJmZXJlbmNlKiBpbnRlcmZlcmVuY2UoTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIEludGVyZmVyZW5jZSogaW50ZXJmZXJlbmNlID0gbm9kZS0+bWlzYy5pbnRl
cmZlcmVuY2U7CisgICAgICAgIGlmICghaW50ZXJmZXJlbmNlKQorICAgICAgICAgICAgbm9kZS0+
bWlzYy5pbnRlcmZlcmVuY2UgPSBpbnRlcmZlcmVuY2UgPSBuZXcgSW50ZXJmZXJlbmNlKCk7Cisg
ICAgICAgIHJldHVybiBpbnRlcmZlcmVuY2U7CisgICAgfQorICAgIAorICAgIGJvb2wgaW50ZXJm
ZXJlcyhOb2RlKiBhLCBOb2RlKiBiKQorICAgIHsKKyAgICAgICAgaWYgKCFhLT5taXNjLmludGVy
ZmVyZW5jZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGEtPm1p
c2MuaW50ZXJmZXJlbmNlLT5jb250YWlucyhiKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVu
c2lnbmVkIGludGVyZmVyZW5jZURlZ3JlZShOb2RlKiBhKQorICAgIHsKKyAgICAgICAgaWYgKGEt
Pm1pc2MuaW50ZXJmZXJlbmNlKQorICAgICAgICAgICAgcmV0dXJuIGEtPm1pc2MuaW50ZXJmZXJl
bmNlLT5zaXplKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
Ym9vbCBpbnRlcmZlcmVuY2VEZWdyZWVMZXNzVGhhbihOb2RlKiBhLCBOb2RlKiBiKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGludGVyZmVyZW5jZURlZ3JlZShhKSA8IGludGVyZmVyZW5jZURlZ3Jl
ZShiKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8UmVnaXN0ZXJDbGFzcyByZWdpc3RlckNs
YXNzLCB0eXBlbmFtZSBSZWdpc3RlckluZm8+CisgICAgdm9pZCBjaGFpdGluQWxsb2NhdGUoY29u
c3QgVmVjdG9yPE5vZGUqPiYgb3JpZ2luYWxOb2RlcywgdW5zaWduZWQgbnVtU2NyYXRjaCkKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzID0gUmVnaXN0ZXJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyAtIG51bVNjcmF0Y2g7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8
Tm9kZSo+IG5vZGVzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3JpZ2luYWxO
b2Rlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG9yaWdpbmFsTm9kZXNbaV0tPmxv
Y2F0aW9uLmlzUmVnaXN0ZXJDbGFzczxyZWdpc3RlckNsYXNzPigpKQorICAgICAgICAgICAgICAg
IG5vZGVzLmFwcGVuZChvcmlnaW5hbE5vZGVzW2ldKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgVmVjdG9yPE5vZGUqPiBhbGxvY2F0aW9uU3RhY2s7CisgICAgICAgIFZlY3RvcjxOb2Rl
Kj4gc3BpbGxzOworICAgICAgICB3aGlsZSAoIW5vZGVzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgLy8gQXR0ZW1wdCB0byBwdXNoIHRoaW5ncyBvbnRvIHRoZSBhbGxvY2F0aW9uIHN0YWNrLgor
ICAgICAgICAgICAgd2hpbGUgKCFub2Rlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBTb3J0IGJ5IGRlc2NlbmRpbmcgaW50ZXJmZXJlbmNlIGRlZ3JlZS4KKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIFRoaXMgaW5uZXIgbG9vcCByZXF1aXJlcyB0aGF0IGFs
bCBub2RlcyB3aG9zZSBjdXJyZW50IGludGVyZmVyZW5jZSBkZWdyZWUgaXMKKyAgICAgICAgICAg
ICAgICAvLyBsZXNzIHRoYW4gbnVtYmVyT2ZSZWdpc3RlcnMgYXJlIGF0IHRoZSBlbmQgb2YgdGhl
IGxpc3QsIGFuZCB0aGV5IGFyZSBzb3J0ZWQKKyAgICAgICAgICAgICAgICAvLyBpbiBkZWNyZWFz
aW5nIG9yZGVyIG9mIGRlZ3JlZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
IC8vIEJ1dCwgdGhlIG5leHQgbG9vcCAtIHRoZSBzcGlsbGluZyBsb29wIC0gcmVxdWlyZXMgdGhh
dCB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBsaXN0IGhhcyB0aGUg
aGlnaGVzdCBkZWdyZWUuIEhlbmNlLCBhIHNvcnQgaXMgcHJvYmFibHkgdGhlIHNpbXBsZXN0IHdh
eSBvZgorICAgICAgICAgICAgICAgIC8vIGVuc3VyaW5nIGJvdGggcHJvcGVydGllcy4KKyAgICAg
ICAgICAgICAgICBzdGQ6OnNvcnQobm9kZXMuYmVnaW4oKSwgbm9kZXMuZW5kKCksIHNwZWNpZmlj
SW50ZXJmZXJlbmNlR3JlYXRlclRoYW48cmVnaXN0ZXJDbGFzcz4pOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIENoYWl0aW4ncyBhbGdvcml0aG0gaXMgZm91bmRlZCBvbiB0
aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgY2FzZSBpcyByYXJlLiBXZQorICAgICAgICAgICAgICAg
IC8vIGFyZSBleHBlY3RlZCB0byBkcm9wIGRvd24gdGhyb3VnaCB0aGlzIG9uIHRoZSBmaXJzdCBn
by1yb3VuZCBhbmQgZmlyc3QgcGxvdworICAgICAgICAgICAgICAgIC8vIHRocm91Z2ggYSBidW5j
aCBvZiBsb3ctZGVncmVlIG5vZGVzIGluIHRoZSBsb29wIGJlbG93LiBUaGF0IHdpbGwgdGhlbiBy
ZWR1Y2UKKyAgICAgICAgICAgICAgICAvLyB0aGUgZGVncmVlIG9mIHRoZSByZW1haW5pbmcgbm9k
ZXMsIGFuZCBzbyBpdCdsbCB0YWtlIGEgd2hpbGUgYmVmb3JlIHRoaXMKKyAgICAgICAgICAgICAg
ICAvLyBicmVhayBpcyB0YWtlbi4gSXQgd2lsbCBvbmx5IGJlIHRha2VuIGlmIHNvbWV0aGluZyBu
ZWVkcyB0byBiZSBzcGlsbGVkLgorICAgICAgICAgICAgICAgIC8vIFRoZXJlIHdpbGwgYmUgbWFu
eSBmdW5jdGlvbnMgaW4gd2hpY2ggd2Ugd29uJ3Qgc3BpbGwgYW55dGhpbmcuCisgICAgICAgICAg
ICAgICAgaWYgKHNwZWNpZmljSW50ZXJmZXJlbmNlRGVncmVlPHJlZ2lzdGVyQ2xhc3M+KG5vZGVz
Lmxhc3QoKSkgPj0gbnVtYmVyT2ZSZWdpc3RlcnMpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3RTdGFja1Np
emUgPSBhbGxvY2F0aW9uU3RhY2suc2l6ZSgpOworICAgICAgICAgICAgICAgIHdoaWxlIChzcGVj
aWZpY0ludGVyZmVyZW5jZURlZ3JlZTxyZWdpc3RlckNsYXNzPihub2Rlcy5sYXN0KCkpIDwgbnVt
YmVyT2ZSZWdpc3RlcnMpCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25TdGFjay5hcHBl
bmQobm9kZXMucmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBsYXN0U3RhY2tTaXplOyBpIDwgYWxsb2NhdGlvblN0YWNrLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICByZW1vdmVJbnRlcmZlcmVuY2U8cmVnaXN0
ZXJDbGFzcz4oYWxsb2NhdGlvblN0YWNrW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzcGlsbCBvbmUgdmFyaWFibGUuIFNwaWxsaW5n
IHRoZSB2YXJpYWJsZSB3aXRoIHRoZSBoaWdoZXN0IGRlZ3JlZQorICAgICAgICAgICAgLy8gKGku
ZS4gdGhlIG9uZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0KSBtaW5pbWl6ZXMgdGhlIGxp
a2VsaWhvb2QgdGhhdCB3ZSdsbAorICAgICAgICAgICAgLy8gaGF2ZSB0byBzcGlsbCBhbnl0aGlu
ZyBlbHNlLiBOb3RlLCBpbnN0ZWFkIG9mIGp1c3Qgc3BpbGxpbmcgb25lIHZhcmlhYmxlIGFuZAor
ICAgICAgICAgICAgLy8gcmVsb29waW5nLCB3ZSBjb3VsZCBtYWtlIHRoaXMgbW9yZSBzY2FsYWJs
ZSBieSBzcGlsbGluZworICAgICAgICAgICAgLy8gY3VycmVudE1pbkRlZ3JlZSAtIG51bWJlck9m
UmVnaXN0ZXJzICsgMSB2YXJpYWJsZXMsIGFzIHRoYXQgaXMgdGhlIG1pbmltdW0KKyAgICAgICAg
ICAgIC8vIG51bWJlciBvZiB2YXJpYWJsZXMgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIHNwaWxsZWQg
dG8gZW5zdXJlIHRoYXQgdGhlIGFsbG9jYXRpb24KKyAgICAgICAgICAgIC8vIGxvb3AgaXMgdW5i
bG9ja2VkLiBXZSBjb3VsZCBhcHByb3hpbWF0ZSB0aGlzIGJ5IHJlcGxhY2luZyBjdXJyZW50TWlu
RGVncmVlIHdpdGgKKyAgICAgICAgICAgIC8vIGEgc25hcHNob3Qgb2YgY3VycmVudE1pbkRlZ3Jl
ZSBwcmlvciB0byBzcGlsbGluZzsgaS5lLiB3ZSBkb24ndCBuZWVkIHRvIGFjdHVhbGx5CisgICAg
ICAgICAgICAvLyByZWNvbXB1dGUgY3VycmVudE1pbkRlZ3JlZSBlYWNoIHRpbWUgd2Ugc3BpbGwg
YSB2YXJpYWJsZS4KKyAgICAgICAgICAgIGlmICghbm9kZXMuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbm9kZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKHNwZWNpZmljSW50ZXJmZXJlbmNlRGVncmVlPHJlZ2lzdGVyQ2xhc3M+KG5vZGVz
W2ldKSA+PSBudW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIHJlbW92ZUludGVyZmVyZW5jZTxyZWdpc3RlckNsYXNz
Pihub2Rlc1swXSk7CisgICAgICAgICAgICAgICAgc3BpbGxzLmFwcGVuZChub2Rlc1swXSk7Cisg
ICAgICAgICAgICAgICAgbm9kZXNbMF0gPSBub2Rlcy5sYXN0KCk7CisgICAgICAgICAgICAgICAg
bm9kZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBOb3cgYXNzaWduIHJlZ2lzdGVycy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gYWxsb2NhdGlvblN0YWNrLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGFsbG9jYXRpb25TdGFja1tpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRmlu
ZCBhIHJlZ2lzdGVyIHRoYXQgd29uJ3QgaW50ZXJmZXJlLiBEbyB0aGlzIGJ5IGZpcnN0IGZpbmRp
bmcgdGhlIHJlZ2lzdGVycworICAgICAgICAgICAgLy8gdGhhdCBkbyBpbnRlcmZlcmUuCisgICAg
ICAgICAgICBCaXRtYXA8UmVnaXN0ZXJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycz4gaW50ZXJmZXJl
bmNlOworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBub2RlLT5t
aXNjLmludGVyZmVyZW5jZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuYmVnaW4oKTsKKyAgICAgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBub2RlLT5taXNjLmludGVyZmVyZW5j
ZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuZW5kKCk7CisgICAgICAgICAgICBmb3IgKDsgaXRlciAh
PSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgICAgIE5vZGUqIG90aGVyTm9kZSA9ICppdGVy
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVySW5kZXggPSBvdGhlck5vZGUtPmxv
Y2F0aW9uLnJlZ2lzdGVySW5kZXg8cmVnaXN0ZXJDbGFzcz4oKTsKKyAgICAgICAgICAgICAgICBp
ZiAocmVnaXN0ZXJJbmRleCA9PSBSZWdpc3RlckZpbGU6OkludmFsaWRJbmRleCkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlLnNldChy
ZWdpc3RlckluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcmVnaXN0ZXJJbmRleCA9IDA7IHJlZ2lz
dGVySW5kZXggPCBudW1iZXJPZlJlZ2lzdGVyczsgKytyZWdpc3RlckluZGV4KSB7CisgICAgICAg
ICAgICAgICAgaWYgKGludGVyZmVyZW5jZS5nZXQocmVnaXN0ZXJJbmRleCkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5sb2NhdGlvbi5zZXRSZWdpc3RlckluZGV4PHJlZ2lzdGVyQ2xhc3M+
KHJlZ2lzdGVySW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZm91bmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRJbnRlcmZlcmVuY2U8cmVn
aXN0ZXJDbGFzcz4obm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJlc3Rv
cmUgaW50ZXJmZXJlbmNlIGZyb20gc3BpbGxzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2Fy
eSBzaW5jZSB3ZSBkb24ndAorICAgICAgICAvLyB1c2UgaW50ZXJmZXJlbmNlIGFmdGVyIHJlZ2lz
dGVyIGFsbG9jYXRpb24uCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNwaWxscy5zaXplKCk7
IGktLTspCisgICAgICAgICAgICBhZGRJbnRlcmZlcmVuY2U8cmVnaXN0ZXJDbGFzcz4oc3BpbGxz
W2ldKTsKKyAgICB9CisgICAgICAgIAorICAgIHRlbXBsYXRlPFJlZ2lzdGVyQ2xhc3MgcmVnaXN0
ZXJDbGFzcz4KKyAgICBzdGF0aWMgdW5zaWduZWQgc3BlY2lmaWNJbnRlcmZlcmVuY2VEZWdyZWUo
Tm9kZSogYSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOgorICAgICAgICAvLyBUaGlzIGlzIGRl
ZmluaXRlbHkgbm90IHRoZSByaWdodCB3YXkgb2YgcmVzZXJ2aW5nIHNjcmF0Y2ggcmVnaXN0ZXJz
LgorICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBhLT5udW1TY3JhdGNoZXM8cmVnaXN0ZXJDbGFz
cz4oKTsKKyAgICAgICAgaWYgKGEtPm1pc2MuaW50ZXJmZXJlbmNlKQorICAgICAgICAgICAgcmVz
dWx0ICs9IGEtPm1pc2MuaW50ZXJmZXJlbmNlLnNldDxyZWdpc3RlckNsYXNzPigpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxSZWdpc3RlckNsYXNz
IHJlZ2lzdGVyQ2xhc3M+CisgICAgc3RhdGljIGJvb2wgc3BlY2lmaWNJbmZlcmZlcmVuY2VHcmVh
dGVyVGhhbihOb2RlKiBhLCBOb2RlKiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNwZWNpZmlj
SW50ZXJmZXJlbmNlRGVncmVlPHJlZ2lzdGVyQ2xhc3M+KGEpID4gc3BlY2lmaWNJbnRlcmZlcmVu
Y2VEZWdyZWU8cmVnaXN0ZXJDbGFzcz4oYik7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPFJl
Z2lzdGVyQ2xhc3MgcmVnaXN0ZXJDbGFzcz4KKyAgICB2b2lkIHJlbW92ZUludGVyZmVyZW5jZShO
b2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIg
PSBub2RlLT5taXNjLmludGVyZmVyZW5jZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuYmVnaW4oKTsK
KyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG5vZGUtPm1pc2MuaW50ZXJm
ZXJlbmNlLT5zZXQ8cmVnaXN0ZXJDbGFzcz4oKS5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICBpdGVyLT5taXNjLmludGVyZmVyZW5jZS0+c2V0
PHJlZ2lzdGVyQ2xhc3M+KCkucmVtb3ZlKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTxSZWdpc3RlckNsYXNzIHJlZ2lzdGVyQ2xhc3M+CisgICAgdm9pZCBhZGRJbnRlcmZlcmVuY2Uo
Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVy
ID0gbm9kZS0+bWlzYy5pbnRlcmZlcmVuY2UtPnNldDxyZWdpc3RlckNsYXNzPigpLmJlZ2luKCk7
CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBub2RlLT5taXNjLmludGVy
ZmVyZW5jZS0+c2V0PHJlZ2lzdGVyQ2xhc3M+KCkuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVy
ICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgaXRlci0+bWlzYy5pbnRlcmZlcmVuY2UtPnNl
dDxyZWdpc3RlckNsYXNzPigpLmFkZChub2RlKTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1M
b2NhdGlvbkFsbG9jYXRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgTG9jYXRpb24gQWxsb2NhdGlvbiBQaGFzZSIpOworICAgIHJldHVy
biBydW5QaGFzZTxMb2NhdGlvbkFsbG9jYXRpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9jYXRpb25BbGxvY2F0aW9uUGhhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvY2F0aW9uQWxsb2NhdGlv
blBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xv
Y2F0aW9uQWxsb2NhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0xvY2F0aW9uQWxsb2NhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHTG9jYXRpb25BbGxvY2F0aW9u
UGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMgYWxsb2NhdGVzIGJvdGggcmVnaXN0ZXJz
IGFuZCBzcGlsbCBzbG90cy4KKworYm9vbCBwZXJmb3JtTG9jYXRpb25BbGxvY2F0aW9uKEdyYXBo
Jik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHTG9jYXRpb25BbGxvY2F0aW9uUGhhc2VfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTYwNTk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBHcmFwaDsKIHN0
cnVjdCBCYXNpY0Jsb2NrOworc3RydWN0IE5vZGU7CiAKIHN0cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSB7CiAgICAgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZTsKQEAgLTEzOSw2ICsx
NDAsMjQgQEAgc3RydWN0IFN3aXRjaERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwog
fTsKIAorLy8gVGhpcyBnZXRzIHVzZWQgYnkgdGhlIGxvY2F0aW9uIGFsbG9jYXRpb24gcGhhc2Uu
CitzdHJ1Y3QgSW50ZXJmZXJlbmNlIHsKKyAgICBIYXNoU2V0PE5vZGUqPiB2YWx1ZXM7CisgICAg
SGFzaFNldDxOb2RlKj4gZG91YmxlczsKKyAgICAKKyAgICB0ZW1wbGF0ZTxSZWdpc3RlckNsYXNz
IHJlZ2lzdGVyQ2xhc3M+CisgICAgSGFzaFNldDxOb2RlKj4mIHNldCgpCisgICAgeworICAgICAg
ICBpZiAocmVnaXN0ZXJDbGFzcyA9PSBHZW5lcmFsUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0
dXJuIHZhbHVlczsKKyAgICAgICAgcmV0dXJuIGRvdWJsZXM7CisgICAgfQorICAgIAorICAgIHZv
aWQgYWRkKE5vZGUqKTsKKyAgICBib29sIGNvbnRhaW5zKE5vZGUqKSBjb25zdDsKKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0OworfTsKKwogLy8gVGhpcyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBp
bW1lZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBjb25zdHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMg
YW4gaW1tZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkgYW4gaW5kZXggaW50byBhIENvZGVCbG9jayBk
YXRhIHN0cnVjdHVyZSAtIAogLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50
aWZpZXIpIGZyb20gYSBOb2RlKi4KQEAgLTE2Nyw2ICsxODYsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwg
bV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICAgICAg
LCBtX29wSW5mbygwKQorICAgICAgICAsIG1fb3BJbmZvMigwKQogICAgIHsKICAgICAgICAgbWlz
Yy5yZXBsYWNlbWVudCA9IDA7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAg
LTE4MCw2ICsyMDEsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAs
IG1fcHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICAgICAgLCBtX29wSW5mbygwKQorICAgICAgICAs
IG1fb3BJbmZvMigwKQogICAgIHsKICAgICAgICAgbWlzYy5yZXBsYWNlbWVudCA9IDA7CiAgICAg
ICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTE5NSw2ICsyMTgsNyBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihT
cGVjTm9uZSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1ZSkKKyAgICAgICAgLCBtX29w
SW5mbzIoMCkKICAgICB7CiAgICAgICAgIG1pc2MucmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBz
ZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CkBAIC0xMTUwLDYgKzExNzQsMTEgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7CiAgICAgfQogICAgIAorICAg
IGJvb2wgdXNlc1ZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID09IHZpcnR1YWxSZWdp
c3RlcjsKKyAgICB9CisgICAgCiAgICAgdm9pZCBzZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNSZXN1bHQo
KSk7CkBAIC0xNTM5LDYgKzE1NjgsOCBAQCBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBtX29wSW5m
bzI7CiAKIHB1YmxpYzoKKyAgICBGb3JtYXR0ZWRSZWdpc3RlciBsb2NhdGlvbjsKKyAgICAKICAg
ICAvLyBGaWVsZHMgdXNlZCBieSB2YXJpb3VzIGFuYWx5c2VzLgogICAgIEFic3RyYWN0VmFsdWUg
dmFsdWU7CiAgICAgCkBAIC0xNTU1LDYgKzE1ODYsNyBAQCBwdWJsaWM6CiAgICAgdW5pb24gewog
ICAgICAgICBOb2RlKiByZXBsYWNlbWVudDsKICAgICAgICAgQmFzaWNCbG9jayogb3duZXI7Cisg
ICAgICAgIEludGVyZmVyZW5jZSogaW50ZXJmZXJlbmNlOwogICAgIH0gbWlzYzsKIH07CiAKQEAg
LTE1ODUsNiArMTYxNywzMCBAQCBDU3RyaW5nIG5vZGVNYXBEdW1wKGNvbnN0IFQmIG5vZGVNYXAs
IER1CiAgICAgcmV0dXJuIG91dC50b0NTdHJpbmcoKTsKIH0KIAoraW5saW5lIHZvaWQgSW50ZXJm
ZXJlbmNlOjphZGQoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAodXNlc0ZQUihub2RlLT5kYXRhRm9y
bWF0KCkpKSB7CisgICAgICAgIGRvdWJsZXMuYWRkKG5vZGUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIEFTU0VSVCh1c2VzR1BSKGRhdGEtPmRhdGFGb3JtYXQoKSkpOworICAg
IHZhbHVlcy5hZGQobm9kZSk7Cit9CisKK2lubGluZSBib29sIEludGVyZmVyZW5jZTo6Y29udGFp
bnMoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBpZiAodXNlc0ZQUihub2RlLT5kYXRhRm9ybWF0
KCkpKQorICAgICAgICByZXR1cm4gZG91Ymxlcy5jb250YWlucyhub2RlKTsKKyAgICAKKyAgICBy
ZXR1cm4gdmFsdWVzLmNvbnRhaW5zKG5vZGUpOworfQorCitpbmxpbmUgc2l6ZV90IEludGVyZmVy
ZW5jZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvdWJsZXMuc2l6ZSgpICsgdmFsdWVz
LnNpemUoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiBuYW1lc3BhY2UgV1RG
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTYwNTk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMzkgKzg3LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9k
ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDogewotICAgICAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
dmFpbGFiaWxpdHkobm9kZSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHlGb3JSZWdpc3Rlcjo6Zm9yd2FyZERlbHRhRm9yTm9kZShub2RlKS5hcHBseURlbHRh
KGF2YWlsYWJpbGl0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkgPT0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5
QXRUYWlsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24g
MTYwNTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04NSw2ICs4NSwxMyBAQCBib29sIHJ1blBoYXNlKEdyYXBoJiBncmFwaCkKICAg
ICByZXR1cm4gcnVuQW5kTG9nKHBoYXNlKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgUGhhc2VU
eXBlLCB0ZW1wbGF0ZSBBcmcxVHlwZT4KK2Jvb2wgcnVuUGhhc2UoR3JhcGgmIGdyYXBoLCBjb25z
dCBBcmcxVHlwZSYgYXJnMSkKK3sKKyAgICBQaGFzZVR5cGUgcGhhc2UoZ3JhcGgsIGFyZzEpOwor
ICAgIHJldHVybiBydW5BbmRMb2cocGhhc2UpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdWx0QW5kU2NyYXRjaENhbGN1
bGF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUmVzdWx0QW5kU2NyYXRj
aENhbGN1bGF0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdTY29yZUJvYXJkLmgiCisjaW5jbHVkZSAiSlNDZWxs
SW5saW5lcy5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IFJlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1Ymxp
YzoKKyAgICBSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisg
ICAgICAgIDogUGhhc2UoZ3JhcGgsICJyZXN1bHQtYW5kLXNjcmF0Y2ggY2FsY3VsYXRpb24iKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBEZXJpdmUgdGhl
IHJlc3VsdCBmb3JtYXQgZm9yIGVhY2ggbm9kZSBhbmQgdGhlIG51bWJlciBvZiBzY3JhdGNoIHJl
Z2lzdGVycyBpdAorICAgICAgICAvLyBpcyBleHBlY3RlZCB0byB1c2UuCisgICAgICAgIAorICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2Nr
LT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgIG1fbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIGhhbmRsZU5vZGUoKQorICAgIHsKKyAgICAgICAgCisgICAgfQorICAgIAor
ICAgIE5vZGUqIG1fbm9kZTsKK307CisKK2Jvb2wgcGVyZm9ybVJlc3VsdEFuZFNjcmF0Y2hDYWxj
dWxhdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdp
b24oIkRGRyBSZXN1bHQtYW5kLXNjcmF0Y2ggQ2FsY3VsYXRpb24gUGhhc2UiKTsKKyAgICByZXR1
cm4gcnVuUGhhc2U8UmVzdWx0QW5kU2NyYXRjaENhbGN1bGF0aW9uUGhhc2U+KGdyYXBoKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxj
dWxhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1bHRBbmRTY3JhdGNoQ2FsY3VsYXRpb25QaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdSZXN1bHRBbmRTY3JhdGNoQ2Fs
Y3VsYXRpb25QaGFzZV9oCisjZGVmaW5lIERGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBo
YXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBGaWd1cmVzIG91dCB3aGF0IHRoZSByZXN1bHQgdHlw
ZSBhbmQgbnVtYmVyIG9mIHNjcmF0Y2ggcmVnaXN0ZXJzIGlzIGZvciBlYWNoCisvLyBub2RlLgor
CisvLyBGSVhNRTogV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gY29tcHV0ZSB0aGUgc2NyYXRjaCBwYXJ0
IG9mIHRoaXMuCisKK2Jvb2wgcGVyZm9ybVJlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvbihHcmFw
aCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR1Jlc3VsdEFuZFNjcmF0Y2hDYWxjdWxhdGlvblBoYXNlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaHVmZmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NodWZmbGUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaHVmZmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU2h1ZmZs
ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKwordm9pZCBUcmFuc2Zlcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIGlmICghdmlydHVhbFJlZ2lzdGVyKCkuaXNWYWxpZCgpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnBy
aW50KCJyIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksICI6ICIsIGZyb20oKSwgIiAtPiAi
LCB0bygpKTsKK30KKworbmFtZXNwYWNlIHsKKworYm9vbCB0cmFuc2ZlckZyb21MZXNzVGhhbihU
cmFuc2ZlciBhLCBUcmFuc2ZlciBiKQoreworICAgIHJldHVybiBhLmZyb20oKSA8IGIuZnJvbSgp
OworfQorCitib29sIHRyYW5zZmVyVG9MZXNzVGhhbihUcmFuc2ZlciBhLCBUcmFuc2ZlciBiKQor
eworICAgIHJldHVybiBhLnRvKCkgPCBiLnRvKCk7Cit9CisKK0Zvcm1hdHRlZFZhbHVlIGdldEZy
b20oVHJhbnNmZXIgdHJhbnNmZXIpCit7CisgICAgcmV0dXJuIHRyYW5zZmVyLmZyb20oKTsKK30K
KworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgc2h1ZmZsZSgKKyAgICBBc3NlbWJs
eUhlbHBlcnMmIGppdCwgVmVjdG9yPFRyYW5zZmVyPiYgdHJhbnNmZXJzLCBHUFJSZWcgc2NyYXRj
aCwgR1BSUmVnIGZwU2NyYXRjaCkKK3sKKyAgICAvLyBUdXJuIHRoZSB0cmFuc2ZlciBpbnRvIGEg
c2VyaWVzIG9mIGxpbmVzIGFuZCBjeWNsZXMuCisgICAgLy8KKyAgICAvLyBBIGxpbmUgd2lsbCBi
ZSBzb21ldGhpbmcgbGlrZToKKyAgICAvLyAgICAgbW92IHIzLCByNAorICAgIC8vICAgICBtb3Yg
cjIsIHIzCisgICAgLy8gICAgIG1vdiByMSwgcjIKKyAgICAvLworICAgIC8vIEEgY3ljbGUgd2ls
bCBiZSBzb21ldGhpbmcgbGlrZToKKyAgICAvLyAgICAgeGNoIHIxLCByMgorICAgIC8vCisgICAg
Ly8gb3I6CisgICAgLy8gICAgIG1vdiByMSwgdG1wCisgICAgLy8gICAgIG1vdiByMiwgcjEKKyAg
ICAvLyAgICAgbW92IHIzLCByMgorICAgIC8vICAgICBtb3YgcjQsIHIzCisgICAgLy8gICAgIG1v
diB0bXAsIHI0CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgY3ljbGVzIGNhbiBhbHdheXMgYmUg
dHVybmVkIGludG8geGNoJ3M6CisgICAgLy8KKyAgICAvLyAgICAgeGNoIHIxLCByNAorICAgIC8v
ICAgICB4Y2ggcjEsIHIzCisgICAgLy8gICAgIHhjaCByMSwgcjIKKyAgICAvLworICAgIC8vIEJ1
dCB0aGlzIGFsZ29yaXRobSB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIHRoZSBwb3NzaWJpbGl0eSB0
aGF0IHdlJ3JlIHNodWZmbGluZyBiZXR3ZWVuCisgICAgLy8gR1BSJ3MgYW5kIEZQUidzIGFuZCBz
cGlsbCBzbG90cy4KKyAgICAvLworICAgIC8vIE9uIHRvcCBvZiB0aGF0LCB0aGVyZSdzIGEgYnVu
Y2ggb2YgY29sZC1oZWFydGVkIGVuZ2luZWVyaW5nIGZvciBoYW5kbGluZyBkYXRhIGZvcm1hdAor
ICAgIC8vIGNvbnZlcnNpb25zLgorICAgIAorICAgIGlmICghdHJhbnNmZXJzLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHRyYW5zZmVycy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBB
U1NFUlQodHJhbnNmZXJzW2ldLmRvZXNUaGluZ3MoKSk7CisgICAgICAgIAorICAgICAgICBzdGQ6
OnNvcnQodHJhbnNmZXJzLmJlZ2luKCksIHRyYW5zZmVycy5lbmQoKTsgdHJhbnNmZXJUb0xlc3NU
aGFuKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdHJhbnNmZXJzLnNpemUoKSAtIDE7IGkt
LTspCisgICAgICAgICAgICBBU1NFUlQodHJhbnNmZXJzW2ldLnRvKCkgIT0gdHJhbnNmZXJzW2kg
KyAxXS50bygpKTsKKyAgICB9CisgICAgCisgICAgc3RkOjpzb3J0KHRyYW5zZmVycy5iZWdpbigp
LCB0cmFuc2ZlcnMuZW5kKCksIHRyYW5zZmVyRnJvbUxlc3NUaGFuKTsKKyAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0cmFuc2ZlcnMuc2l6ZSgp
IC0gMTsgaS0tOykKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2ZlcnNbaV0uZnJvbSgpICE9IHRy
YW5zZmVyc1tpICsgMV0uZnJvbSgpKTsKKyAgICB9CisgICAgCisgICAgQml0VmVjdG9yIGFscmVh
ZHlIYW5kbGVkOworICAgIAorICAgIFZlY3RvcjxWZWN0b3I8VHJhbnNmZXI+PiBsaW5lczsKKyAg
ICBWZWN0b3I8VmVjdG9yPFRyYW5zZmVyPj4gY3ljbGVzOworICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0cmFuc2ZlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGFscmVh
ZHlIYW5kbGVkLmdldChpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAg
ICAgQml0VmVjdG9yIGluY2x1ZGVkOworICAgICAgICBWZWN0b3I8VHJhbnNmZXI+IGxpc3Q7Cisg
ICAgICAgIAorICAgICAgICB1bnNpZ25lZCBmaXJzdEluZGV4ID0gaTsKKyAgICAgICAgdW5zaWdu
ZWQgY3VycmVudEluZGV4ID0gY3VycmVudEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAg
ICAgICAgICBUcmFuc2ZlciBjdXJyZW50ID0gdHJhbnNmZXJzW2N1cnJlbnRJbmRleF07CisgICAg
ICAgICAgICBsaXN0LmFwcGVuZChjdXJyZW50KTsKKyAgICAgICAgICAgIEFTU0VSVCghaW5jbHVk
ZWQuZ2V0KGN1cnJlbnRJbmRleCkpOworICAgICAgICAgICAgaW5jbHVkZWQuc2V0KGN1cnJlbnRJ
bmRleCk7CisgICAgICAgICAgICBBU1NFUlQoIWFscmVhZHlIYW5kbGVkLmdldChjdXJyZW50SW5k
ZXgpKTsKKyAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkLnNldChjdXJyZW50SW5kZXgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBzb3J0ZWRJbmRleE9m
PFRyYW5zZmVyLCBGb3JtYXR0ZWRWYWx1ZT4oCisgICAgICAgICAgICAgICAgdHJhbnNmZXJzLCB0
cmFuc2ZlcnMuc2l6ZSgpLCBjdXJyZW50LnRvKCksIGdldEZyb20pOworICAgICAgICAgICAgaWYg
KG5leHRJbmRleCA9PSB0cmFuc2ZlcnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKGxpc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5jbHVkZWQuZ2V0KG5leHRJbmRleCkpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobmV4dEluZGV4ID09IGZpcnN0SW5kZXgpOworICAgICAgICAg
ICAgICAgIGN5Y2xlcy5hcHBlbmQobGlzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IG5leHRJ
bmRleDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2h1ZmZsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTaHVmZmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1NodWZmbGVfaAorI2RlZmluZSBERkdTaHVmZmxlX2gKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiREZHRm9ybWF0dGVk
UmVnaXN0ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBU
cmFuc2ZlciB7CitwdWJsaWM6CisgICAgVHJhbnNmZXIoKSB7IH0KKyAgICAKKyAgICBUcmFuc2Zl
cihGb3JtYXR0ZWRSZWdpc3RlciBmcm9tLCBGb3JtYXR0ZWRSZWdpc3RlciB0bywgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgOiBtX2Zyb20oZnJvbSkKKyAgICAgICAg
LCBtX3RvKHRvKQorICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikK
KyAgICB7CisgICAgfQorICAgIAorICAgIEZvcm1hdHRlZFJlZ2lzdGVyIGZyb20oKSBjb25zdCB7
IHJldHVybiBtX2Zyb207IH0KKyAgICBGb3JtYXR0ZWRSZWdpc3RlciB0bygpIGNvbnN0IHsgcmV0
dXJuIG1fdG87IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7IH0KKyAgICAKKyAgICBib29sIGRvZXNUaGluZ3Mo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb20oKSAhPSB0bygpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlz
IGVtaXRzIGNvZGUgdGhhdCBtYXkgZGVzdHJveSB0aGUgdmFsdWUgaW4gdGhlIGZyb20oKSBsb2Nh
dGlvbiBhbmQgd2lsbAorICAgIC8vIHBsYWNlIHRoZSB2YWx1ZSBpbnRvIHRoZSB0bygpIGxvY2F0
aW9uLiBZb3UgY2FuJ3QgcmVseSBvbiBiZWluZyBhYmxlIHRvIHVzZQorICAgIC8vIHRoZSBmcm9t
KCkgbG9jYXRpb24gYW55bW9yZS4gTm90ZSB0aGF0IHRoZSBzY3JhdGNoIHJlZ2lzdGVycyBhcmUg
Z3VhcmFudGVlZAorICAgIC8vIHRvIGJlIHVubmVjZXNzYXJ5IGlmIHRoZSBkYXRhIGZvcm1hdHMg
YXJlIHRoZSBzYW1lLgorICAgIHZvaWQgZW1pdChBc3NlbWJseUhlbHBlcnMmLCBHUFJSZWcgc2Ny
YXRjaCA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBmcFNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnKTsK
KworcHJpdmF0ZToKKyAgICBGb3JtYXR0ZWRSZWdpc3RlciBtX2Zyb207CisgICAgRm9ybWF0dGVk
UmVnaXN0ZXIgbV90bzsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV92aXJ0dWFsUmVnaXN0ZXI7Cit9
OworCisvLyBOb3RlLCB0aGlzIHdpbGwgcmVhcnJhbmdlIHRoZSB2ZWN0b3IgaW4gd2hhdGV2ZXIg
d2F5IGl0IHdhbnRzLgordm9pZCBzaHVmZmxlKEFzc2VtYmx5SGVscGVycyYsIFZlY3RvcjxUcmFu
c2Zlcj4mLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIGZwU2NyYXRjaCk7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHU2h1ZmZsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjA1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ1MSw2
ICs1NDUxLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtCcmFuY2hlcygpCiAgICAgfQog
fQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzaHVmZmxlVG9DYW5vbmljYWwoKQoreworICAgIAor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTYwNTk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02ODksNiArNjg5LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gSWYgaW4gU1NBLCBjaGVjayB0aGF0IHRo
aXMgbm9kZSBpc24ndCBsaXZlIGF0IHRoZSB0YWlsIG9mIHRoZSBibG9jay4KKyAgICAgICAgaWYg
KG1faml0LmdyYXBoKCkubV9mb3JtID09IFNTQQorICAgICAgICAgICAgJiYgbV9ibG9jay0+c3Nh
LT5saXZlQXRUYWlsLmZpbmQobV9jdXJyZW50Tm9kZSkgIT0gbV9ibG9jay0+c3NhLT5saXZlQXRU
YWlsLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogCiAgICAgICAgIC8vIENo
ZWNrIGlmIHRoZSBsYXN0Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCiAgICAgICAgIE5v
ZGUqIGxhc3ROb2RlID0gbV9ibG9jay0+bGFzdCgpOwpAQCAtMjIxOCw3ICsyMjIzLDIwIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBnZW5lcmF0aW9uSW5mbyhlZGdlLm5vZGUoKSk7
CiAgICAgfQotCisgICAgCisgICAgRm9ybWF0dGVkUmVnaXN0ZXIgY3VycmVudEZvcm1hdChOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9u
SW5mbyhub2RlKTsKKyAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9y
bWF0Tm9uZSkgeworICAgICAgICAgICAgaWYgKHVzZXNHUFIoaW5mby5yZWdpc3RlckZvcm1hdCgp
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRm9ybWF0dGVkUmVnaXN0ZXIoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpLCBpbmZvLmdwcigpKTsKKyAgICAgICAgICAgIHJldHVybiBGb3JtYXR0ZWRSZWdp
c3RlcihpbmZvLnJlZ2lzdGVyRm9ybWF0KCksIGluZm8uZnByKCkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBGb3JtYXR0ZWRSZWdpc3RlcihpbmZvLnNwaWxsRm9ybWF0KCkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNodWZmbGVUb0Nhbm9uaWNhbCgpOworICAgIAogICAgIC8vIFRoZSBK
SVQsIHdoaWxlIGFsc28gcHJvdmlkZXMgTWFjcm9Bc3NlbWJsZXIgZnVuY3Rpb25hbGl0eS4KICAg
ICBKSVRDb21waWxlciYgbV9qaXQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE2MDU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiAr
NDUsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAgICAgICAgIFNj
b3JlQm9hcmQgc2NvcmVCb2FyZChtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbCk7CiAgICAgICAg
IHNjb3JlQm9hcmQuYXNzZXJ0Q2xlYXIoKTsKICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lvbiAxNjA1OTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
NDIwLDcgKzQyMCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdW5zaWduZWQgdG9JbmRl
eChHUFJSZWcgcmVnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlZyAhPSBJbnZhbGlkR1BSUmVn
KTsKKyAgICAgICAgaWYgKHJlZyA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0dXJu
IEludmFsaWRJbmRleDsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ocmVnKSA8IDE2
KTsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4Rm9yUmVnaXN0ZXJbMTZdID0g
eyAwLCAyLCAxLCAzLCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgNSwgNCwgNiwgNywgOCwg
SW52YWxpZEluZGV4LCA5LCAxMCwgSW52YWxpZEluZGV4LCBJbnZhbGlkSW5kZXggfTsKICAgICAg
ICAgcmV0dXJuIGluZGV4Rm9yUmVnaXN0ZXJbcmVnXTsKQEAgLTQzOCw3ICs0MzksNyBAQCBwdWJs
aWM6CiAgICAgICAgIH07CiAgICAgICAgIHJldHVybiBuYW1lRm9yUmVnaXN0ZXJbcmVnXTsKICAg
ICB9Ci0KKyAgICAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW52YWxpZEluZGV4ID0gMHhm
ZmZmZmZmZjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAxNjA1OTkp
CisrKyBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQz
LDYgKzI0MywxNiBAQCBpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogdHJ5QmluYXJ5U2VhcmNoCiAg
ICAgcmV0dXJuIGJpbmFyeVNlYXJjaEltcGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJy
YXlUeXBlLCBFeHRyYWN0S2V5LCBLZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXk+KGFycmF5LCBz
aXplLCBrZXksIGV4dHJhY3RLZXkpOwogfQogCisvLyBSZXR1cm4gdGhlIGluZGV4IG9mIGZvdW5k
IGVsZW1lbnQuIFJldHVybiBzaXplIGlmIG5vdCBmb3VuZC4KK3RlbXBsYXRlPHR5cGVuYW1lIEFy
cmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlw
ZW5hbWUgRXh0cmFjdEtleT4KK2lubGluZSBzaXplX3Qgc29ydGVkSW5kZXhPZihBcnJheVR5cGUm
IGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9
IEV4dHJhY3RLZXkoKSkKK3sKKyAgICBBcnJheUVsZW1lbnRUeXBlKiByZXN1bHQgPSB0cnlCaW5h
cnlTZWFyY2goYXJyYXksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7CisgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgIHJldHVybiBzaXplOworICAgIHJldHVybiByZXN1bHQgLSAmYXJyYXlbMF07Cit9
CisKIC8vIFJldHVybiB0aGUgZWxlbWVudCB0aGF0IGlzIGVpdGhlciB0byB0aGUgbGVmdCwgb3Ig
dGhlIHJpZ2h0LCBvZiB3aGVyZSB0aGUgZWxlbWVudCB3b3VsZCBoYXZlIGJlZW4gZm91bmQuCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBl
bmFtZSBBcnJheVR5cGUsIHR5cGVuYW1lIEV4dHJhY3RLZXk+CiBpbmxpbmUgQXJyYXlFbGVtZW50
VHlwZSogYXBwcm94aW1hdGVCaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNp
emUsIEtleVR5cGUga2V5LCBFeHRyYWN0S2V5IGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>