<?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>151556</bug_id>
          
          <creation_ts>2015-11-22 17:05:10 -0800</creation_ts>
          <short_desc>[JSC] Speed up Air Liveness Analysis on Tmps</short_desc>
          <delta_ts>2015-11-30 18:27:07 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1144107</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-22 17:05:10 -0800</bug_when>
    <thetext>[JSC] Speed up Air Liveness Analysis on Tmps</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144108</commentid>
    <comment_count>1</comment_count>
      <attachid>266074</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-22 17:34:24 -0800</bug_when>
    <thetext>Created attachment 266074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144110</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-22 17:35:35 -0800</bug_when>
    <thetext>Attachment 266074 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirReportUsedRegisters.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirTmpLiveness.h:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirTmpLiveness.h:197:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirTmpLiveness.h:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirTmpLiveness.h:216:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 5 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144715</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-29 18:24:15 -0800</bug_when>
    <thetext>Why not do the optimization in Air::Liveness and make it also work for StackSlots?  Those also have indices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144721</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-29 22:03:10 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Why not do the optimization in Air::Liveness and make it also work for
&gt; StackSlots?  Those also have indices.

But they don&apos;t have types right? The way things are split in TmpLiveness is how it is best consumed by the allocator.

I may use the absolute indices directly in the future too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144764</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 08:32:51 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Why not do the optimization in Air::Liveness and make it also work for
&gt; &gt; StackSlots?  Those also have indices.
&gt; 
&gt; But they don&apos;t have types right? The way things are split in TmpLiveness is
&gt; how it is best consumed by the allocator.
&gt; 
&gt; I may use the absolute indices directly in the future too.

But you could have Liveness take a traits or adaptor or something as a template argument that produces an index given a value of vice-versa. For temps, you&apos;d have two versions of the adapter - one for FP and one for GP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145057</commentid>
    <comment_count>6</comment_count>
      <attachid>266309</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-30 17:42:11 -0800</bug_when>
    <thetext>Created attachment 266309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145058</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-30 17:44:56 -0800</bug_when>
    <thetext>Attachment 266309 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:92:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:218:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:225:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:234:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145067</commentid>
    <comment_count>8</comment_count>
      <attachid>266309</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 18:08:55 -0800</bug_when>
    <thetext>Comment on attachment 266309
Patch

R=me assuming you also fix the bug you found in the extra early clobbers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145078</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-30 18:27:07 -0800</bug_when>
    <thetext>Committed r192851: &lt;http://trac.webkit.org/changeset/192851&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266074</attachid>
            <date>2015-11-22 17:34:24 -0800</date>
            <delta_ts>2015-11-30 17:42:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151556-20151122173409.patch</filename>
            <type>text/plain</type>
            <size>54476</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyNzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
Yjk5ZjQ4ODE5MWNhMjMwNjFlZDIwZDc4ZTg3MTMzMWQ0NTFlNDYwLi44NTljOWZiMGI1ZDVlMjky
MmU2OGY4ODEyZDYxMDMyYTU1NDYyOWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEg
KzEsMTA4IEBACisyMDE1LTExLTIyICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFtKU0NdIFNwZWVkIHVwIEFpciBMaXZlbmVzcyBBbmFseXNpcyBvbiBU
bXBzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1
NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMaXZl
bmVzcyBBbmFseXNpcyBzY2FsZXMgcG9vcmx5IG9uIGxhcmdlIGdyYXBocyBsaWtlIHRoZSBvbmVz
CisgICAgICAgIGdlbmVyYXRlZCBieSB0ZXN0Q29tcGxleCgpLgorICAgICAgICBUaGlzIHBhdGNo
IGludHJvZHVjZXMgYSBmYXN0ZXIgdmVyc2lvbiBzcGVjaWFsaXplZCBmb3IgVG1wIExpdmVuZXNz
LgorCisgICAgICAgIFRoZXJlIGFyZSB0d28gbWFpbiBhcmVhcyBvZiBpbXByb3ZlbWVudHM6Cisg
ICAgICAgIDEpIFJlZHVjZSB0aGUgY29zdCBvZiBkb2luZyBhIExvY2FsQ2FsYyBvdmVyIGEgQmFz
aWNCbG9jay4KKyAgICAgICAgMikgUmVkdWNlIGhvdyBtYW55IExvY2FsQ2FsYyBhcmUgbmVlZGVk
IHRvIGNvbnZlcmdlIHRvIGEgc29sdXRpb24uCisKKyAgICAgICAgTW9zdCBvZiB0aGUgY29zdHMg
b2YgTG9jYWxDYWxjIGFyZSBmcm9tIEhhc2hTZXQgbWFuaXB1bGF0aW9ucy4KKyAgICAgICAgVGhl
IEhhc2hTZXQgb3BlcmF0aW9ucyBhcmUgTygxKSBidXQgdGhlIGNvbnN0YW50IGlzIGxhcmdlIGVu
b3VnaAorICAgICAgICB0byBiZSBhIHByb2JsZW0uCisKKyAgICAgICAgSSB1c2VkIGEgc2ltaWxh
ciB0cmljayBhcyB0aGUgUmVnaXN0ZXIgQWxsb2NhdG9yIHRvIHJlbW92ZSBoYXNoaW5nCisgICAg
ICAgIGFuZCBjb2xsaXNpb24gaGFuZGxpbmc6IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgVG1w
IGlzIHVzZWQgYXMgYW4gaW5kZXgKKyAgICAgICAgaW50byBhIGZsYXQgYXJyYXkuCisKKyAgICAg
ICAgSSB1c2VkIEJyaWdncydzIFNwYXJzZSBTZXQgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBsb2Nh
bCBsaXZlIGluZm9ybWF0aW9uCisgICAgICAgIGF0IGVhY2ggaW5zdHJ1Y3Rpb24uIEl0IGhhcyBn
cmVhdCBwcm9wZXJ0aWVzIGZvciBkb2luZyB0aGUgbG9jYWwgY2FsY3VsYXRpb246CisgICAgICAg
IC1ObyBtZW1vcnkgcmVhbGxvY2F0aW9uLgorICAgICAgICAtTygxKSBhZGQoKSBhbmQgcmVtb3Zl
KCkgd2l0aCBhIHNtYWxsIGNvbnN0YW50LgorICAgICAgICAtU3RyaWN0IE8obikgaXRlcmF0aW9u
LgorICAgICAgICAtTygxKSBjbGVhcigpLgorCisgICAgICAgIFRoZSB2YWx1ZXMgTGl2ZS1BdC1I
ZWFkIGFyZSBub3cgc3RvcmVkIGludG8gYSBWZWN0b3IuIFRoZSBTcGFyc2UgU2V0CisgICAgICAg
IGlzIHVzZWQgdG8gbWFpbnRhaW4gdGhlIFRtcCB1bmlxdWVuZXNzLgorCisgICAgICAgIFdoZW4g
Zm9yd2FyZGluZyBuZXcgbGl2ZW5lc3MgYXQgaGVhZCB0byB0aGUgcHJlZGVjZXNzb3IsIEkgc3Rh
cnQgYnkgcmVtb3ZpbmcKKyAgICAgICAgZXZlcnl0aGluZyB0aGF0IHdhcyBhbHJlYWR5IGluIGxp
dmUtYXQtaGVhZC4gV2UgY2FuIGFzc3VtZSB0aGF0IGFueSB2YWx1ZQorICAgICAgICBpbiB0aGF0
IGxpc3QgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgcHJlZGVjZXNzb3JzLgorICAgICAg
ICBUaGlzIGxlYXZlcyB1cyB3aXRoIGEgc21hbGwtaXNoIG51bWJlciBvZiBUbXBzIHRvIGFkZCB0
byBsaXZlLWF0LWhlYWQKKyAgICAgICAgYW5kIHRvIHRoZSBwcmVkZWNlc3NvcnMuCisKKyAgICAg
ICAgVGhlIHNwZWVkIHVwIGNvbnZlcmdlbmNlLCBJIHVzZWQgdGhlIHNhbWUgdHJpY2sgYXMgREZH
J3MgbGl2ZW5lc3M6IGtlZXAKKyAgICAgICAgYSBzZXQgb2YgZGlydHkgYmxvY2tzIHRvIHByb2Nl
c3MuIEluIHByYWN0aWNlLCBhbGwgdGhlIGJsb2NrcyB3aXRob3V0CisgICAgICAgIGJhY2stZWRn
ZXMgY29udmVyZ2UgcXVpY2tseSwgYW5kIHdlIG9ubHkgcHJvcGFnYXRlIGxpdmVuZXNzIGFzIG5l
ZWRlZC4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgdGhlIHRpbWUgdGFrZW4gYnkgInRl
c3RDb21wbGV4KDY0LCAzODQpIiBieSBhbm90aGVyIDUlLgorCisgICAgICAgIFRoZSByZW1haW5p
bmcgdGhpbmdzIHRvIGRvIGZvciBMaXZlbmVzcyBhcmU6CisgICAgICAgIC1Ta2lwIHRoZSBmaXJz
dCBibG9jayBmb3IgdGhlIGZpeCBwb2ludCAoaXQgaXMgb2Z0ZW4gbGFyZ2UgYW5kIGRvaW5nIGEg
bG9jYWwKKyAgICAgICAgIGNhbGMgb24gaXQgaXMgdXNlbGVzcykuCisgICAgICAgIC1GaW5kIGEg
YmV0dGVyIERhdGEgU3RydWN0dXJlIGZvciBsaXZlLWF0LXRhaWwgKHVwZGF0aW5nIHRoZSBIYXNo
U2V0IHRha2VzCisgICAgICAgICA+IDUwJSBvZiB0aGUgdG90YWwgY29udmVyZ2VuY2UgdGltZSku
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpi
dWlsZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
QWxsb2NhdG9yOjpnZXRBbGlhcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpnZXRBbGlhc1doZW5TcGlsbGluZyk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjphbGxv
Y2F0ZWRSZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZ0FsbG9jYXRvcjo6dG1wQXJyYXlTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRl
cmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OmluaXRpYWxpemVEZWdyZWVzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6
OmFkZEVkZ2VzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxl
c2NpbmdBbGxvY2F0b3I6OmFkZEVkZ2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRl
ZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6bWFrZVdvcmtMaXN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OnNpbXBsaWZ5
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxv
Y2F0b3I6OmZvckVhY2hBZGphY2VudCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpoYXNCZWVuU2ltcGxpZmllZCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpkZWNy
ZW1lbnREZWdyZWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZ0FsbG9jYXRvcjo6Zm9yRWFjaE5vZGVNb3Zlcyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjppc01vdmVSZWxhdGVkKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0
b3I6OmVuYWJsZU1vdmVzT25WYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpwcmVjb2xvcmVkQ29hbGVzY2luZ0hldXJpc3Rp
Yyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxs
b2NhdG9yOjpjb25zZXJ2YXRpdmVIZXVyaXN0aWMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6YWRkV29ya0xpc3QpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6Y29t
YmluZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
QWxsb2NhdG9yOjpmcmVlemVNb3Zlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpzZWxlY3RTcGlsbCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjphc3NpZ25Db2xv
cnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0Fs
bG9jYXRvcjo6ZHVtcEludGVyZmVyZW5jZUdyYXBoSW5Eb3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjppdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uVHlwZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6Oml0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QWJzb2x1dGVUbXBIZWxwZXI8QXJnOjpHUD46OmFic29sdXRlSW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnNvbHV0ZVRtcEhlbHBlcjxBcmc6OkdQPjo6dG1wRnJv
bUFic29sdXRlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnNvbHV0
ZVRtcEhlbHBlcjxBcmc6OkZQPjo6YWJzb2x1dGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFic29sdXRlVG1wSGVscGVyPEFyZzo6RlA+Ojp0bXBGcm9tQWJzb2x1dGVJ
bmRleCk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAg
ICAgKiBiMy9haXIvQWlyVG1wSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnNv
bHV0ZVRtcE1hcHBlcjxBcmc6OkdQPjo6YWJzb2x1dGVJbmRleCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFic29sdXRlVG1wTWFwcGVyPEFyZzo6R1A+Ojp0bXBGcm9tQWJzb2x1dGVJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic29sdXRlVG1wTWFwcGVyPEFyZzo6RlA+OjphYnNv
bHV0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzb2x1dGVUbXBNYXBwZXI8QXJn
OjpGUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wTGl2
ZW5lc3MuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcExpdmVuZXNzOjpUbXBM
aXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcExpdmVuZXNzOjpMb2NhbENhbGM6
OkxvY2FsQ2FsYyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcExpdmVuZXNzOjpMb2NhbENh
bGM6Okl0ZXJhdG9yOjpJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcExpdmVu
ZXNzOjpMb2NhbENhbGM6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wTGl2ZW5lc3M6OkxvY2FsQ2FsYzo6SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OlRtcExpdmVuZXNzOjpMb2NhbENhbGM6Okl0ZXJhdG9yOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wTGl2ZW5lc3M6OkxvY2FsQ2FsYzo6
SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBMaXZlbmVz
czo6TG9jYWxDYWxjOjpJdGVyYWJsZVRtcDo6SXRlcmFibGVUbXApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXBMaXZlbmVzczo6TG9jYWxDYWxjOjpJdGVyYWJsZVRtcDo6YmVnaW4pOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXBMaXZlbmVzczo6TG9jYWxDYWxjOjpJdGVyYWJsZVRtcDo6
ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wTGl2ZW5lc3M6OkxvY2FsQ2FsYzo6bGl2
ZVRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcExpdmVuZXNzOjpMb2NhbENhbGM6OmV4
ZWN1dGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBMaXZlbmVzczo6YWRkVG9TZXQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBMaXZlbmVzczo6cmVtb3ZlRnJvbVNldCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OlRtcExpdmVuZXNzOjpXb3Jrc2V0OjpXb3Jrc2V0KToKKwogPT0g
Um9sbGVkIG92ZXIgdG8gQ2hhbmdlTG9nLTIwMTUtMTEtMjEgPT0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggODBhNTc5NGMwNmY0
ZmFiMDlmZjAzYTY0MTc4MGUzZjI2YWMzYWQ4ZC4uMTkzNDkwMzhhNDAyZWU5YjRiMmY0OTM4NzVm
MWM2NWIxMGQ5NjQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNS0xMS0yMiAgQmVuamFtaW4g
UG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBTcGVlZCB1cCBB
aXIgTGl2ZW5lc3MgQW5hbHlzaXMgb24gVG1wcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNTU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiB3dGYvSW5kZXhTcGFyc2VTZXQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkluZGV4
U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OkluZGV4U3BhcnNlU2V0KToKKyAgICAgICAgKFdU
Rjo6SW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6YWRkKToKKyAgICAgICAgKFdURjo6
SW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6
SW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpJ
bmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpzaXplKToKKyAgICAgICAgKFdURjo6SW5k
ZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6aXNFbXB0eSk6CisgICAgICAgIChXVEY6Oklu
ZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmNvbnRhaW5zKToKKwogMjAxNS0xMS0xOCAg
RGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gQVNTRVJU
SU9OIEZBSUxFRDogdGVtcG9yYXJ5RmlsZVBhdGgubGFzdCgpID09ICcvJyBpbiBXZWJDb3JlOjpv
cGVuVGVtcG9yYXJ5RmlsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGVkNzQ5
MTZjY2NjMjZlZDNkODY0ZGJkNTBmMGQ5MTYzMzkzMGFlMTMuLjU3Y2QwOGVjYWIzMmU0ZmFmMTNk
Y2M0MDMwODcwNDFlY2E4ZmVkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MDg0LDYgKzEwODQsNyBAQAogCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdK
b2luZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2
MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oICovOyB9OwogCQkyNjcx
OEJBNDFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY3MThCQTIx
QkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcCAqLzsg
fTsKIAkJMjY3MThCQTUxQkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NjcxOEJBMzFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmcu
aCAqLzsgfTsKKwkJMjY4NEQ0MzgxQzAwMTYxQzAwODFENjYzIC8qIEFpclRtcExpdmVuZXNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjg0RDQzNzFD
MDAxNjFDMDA4MUQ2NjMgLyogQWlyVG1wTGl2ZW5lc3MuaCAqLzsgfTsKIAkJMjY5RDYzNkUxQkZC
RTVEMTAwMTAxQjFEIC8qIEZUTEIzT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNjlENjM2RDFCRkJFNUQwMDAxMDFCMUQgLyogRlRMQjNPdXRw
dXQuaCAqLzsgfTsKIAkJMjZCQjU3NjAxQkZDNDMyODAwNUYxMkVCIC8qIEZUTEIzT3V0cHV0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QkI1NzVG
MUJGQzQzMjgwMDVGMTJFQiAvKiBGVExCM091dHB1dC5jcHAgKi87IH07CiAJCTJBMDVBQkQ1MTk2
MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkEwNUFCRDMxOTYxREYyNDAwMzQx
NzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgKi87IH07CkBAIC0zMTA5LDYgKzMx
MTAsNyBAQAogCQkyNjQwOTFGQTFCRTJGRDQxMDA2ODREQjIgLyogQWlyT3Bjb2RlLm9wY29kZXMg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gQWlyT3Bjb2RlLm9wY29kZXM7IHBhdGggPSBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2NzE4QkEyMUJFOTlGNzgwMDUyMDE3QiAv
KiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyNjcxOEJBMzFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWly
SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJJdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNjg0RDQz
NzFDMDAxNjFDMDA4MUQ2NjMgLyogQWlyVG1wTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyVG1wTGl2ZW5lc3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBMaXZl
bmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjlENjM2RDFCRkJFNUQwMDAx
MDFCMUQgLyogRlRMQjNPdXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RlRMQjNPdXRwdXQuaDsgcGF0aCA9IGZ0bC9GVExCM091dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyNkJCNTc1RjFCRkM0MzI4MDA1RjEyRUIgLyogRlRMQjNPdXRwdXQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQjNPdXRwdXQuY3BwOyBw
YXRoID0gZnRsL0ZUTEIzT3V0cHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkEwNUFCRDMxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDYyOCw2ICs0NjMwLDcg
QEAKIAkJCQkwRkVDODU2ODFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLywKIAkJCQkw
RkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi8sCiAJCQkJMEZFQzg1NkExQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclRtcElubGluZXMuaCAqLywKKwkJCQkyNjg0RDQzNzFDMDAxNjFD
MDA4MUQ2NjMgLyogQWlyVG1wTGl2ZW5lc3MuaCAqLywKIAkJCQkwRkVDODU2QjFCREFDREM3MDA4
MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAogCQkJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJWYWxpZGF0ZS5oICovLAogCQkJKTsKQEAgLTc2NTcsNiArNzY2MCw3IEBACiAJCQkJ
MEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzM4NjU1NjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDE0NDhDRDEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmls
dGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNjg0RDQzODFDMDAxNjFDMDA4MUQ2NjMgLyogQWly
VG1wTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU5ODk4MTdDODZDNTgwMEExRTU0
MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERTkxOTgz
MkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUQ1Mzcy
NkYwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nLmNwcAppbmRleCA4ZWY4ZDE3NWE5MGI4NjYyNWE1ZmY1OWRhMTRlN2MyZTFh
NzI4MWY2Li4yMGM0NjZjZmY0MTQwMmUxNWU1MTYwMzE0N2JmM2VmNmM2OWE0MWY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nLmNwcApAQCAtMzEsOSArMzEsMTAgQEAKICNpbmNsdWRlICJBaXJD
b2RlLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5zdElu
bGluZXMuaCIKLSNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkFpclBoYXNlU2Nv
cGUuaCIKICNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVkZSAiQWlyVG1w
SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclRtcExpdmVuZXNzLmgiCiAjaW5jbHVkZSA8d3RmL0xp
c3REdW1wLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAKQEAgLTc3LDU4ICs3OCw2
IEBAIHN0cnVjdCBNb3ZlSW5zdEhlbHBlcjxBcmc6OkZQPiB7CiAgICAgfQogfTsKIAotCi0vLyBU
aGUgc3BlZWQgb2YgdGhlIGFsb2NhdG9yIGRlcGVuZHMgZGlyZWN0bHkgb24gaG93IGZhc3Qgd2Ug
Y2FuIHF1ZXJ5IGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIFRtcAotLy8gYW5kL29yIGl0
cyBvd25lcnNoaXAgdG8gYSBzZXQuCi0vLwotLy8gSGFzaFNldC9IYXNoTWFwIG9wZXJhdGlvbnMg
YXJlIG92ZXJseSBleHBlbnNpdmUgZm9yIHRoYXQuCi0vLwotLy8gSW5zdGVhZCBvZiBhIEhhc2gg
c3RydWN0dXJlLCBUbXAgYXJlIGluZGV4ZWQgZGlyZWN0bHkgYnkgdmFsdWUgaW4gQXJyYXlzLiBU
aGUgaW50ZXJuYWwgaW50ZWdlciBpcyB1c2VkIGFzIHRoZSBpbmRleAotLy8gdG8gcmVmZXJlbmNl
IHRoZW0gcXVpY2tseS4gSW4gc29tZSBzZXRzLCB3ZSBkbyBub3QgY2FyZSBhYm91dCB0aGUgY29s
b3JlZCByZWdzLCB3ZSBzdGlsbCBhbGxvY2F0ZSB0aGUgbWVtb3J5IGZvciB0aGVtCi0vLyBhbmQg
anVzdCBkbyBub3QgdXNlIGl0LgotdGVtcGxhdGU8QXJnOjpUeXBlIHR5cGU+Ci1zdHJ1Y3QgQWJz
b2x1dGVUbXBIZWxwZXI7Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBBYnNvbHV0ZVRtcEhlbHBlcjxB
cmc6OkdQPiB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGFic29sdXRlSW5kZXgoY29uc3QgVG1wJiB0
bXApCi0gICAgewotICAgICAgICBBU1NFUlQodG1wLmlzR1AoKSk7Ci0gICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxpbnQ+KHRtcC5pbnRlcm5hbFZhbHVlKCkpID4gMCk7Ci0gICAgICAgIHJldHVy
biB0bXAuaW50ZXJuYWxWYWx1ZSgpOwotICAgIH0KLQotICAgIHN0YXRpYyB1bnNpZ25lZCBhYnNv
bHV0ZUluZGV4KHVuc2lnbmVkIHRtcEluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFic29s
dXRlSW5kZXgoVG1wOjpncFRtcEZvckluZGV4KHRtcEluZGV4KSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIFRtcCB0bXBGcm9tQWJzb2x1dGVJbmRleCh1bnNpZ25lZCB0bXBJbmRleCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBUbXA6OnRtcEZvckludGVybmFsVmFsdWUodG1wSW5kZXgpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBBYnNvbHV0ZVRtcEhlbHBlcjxBcmc6OkZQPiB7Ci0g
ICAgc3RhdGljIHVuc2lnbmVkIGFic29sdXRlSW5kZXgoY29uc3QgVG1wJiB0bXApCi0gICAgewot
ICAgICAgICBBU1NFUlQodG1wLmlzRlAoKSk7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxp
bnQ+KHRtcC5pbnRlcm5hbFZhbHVlKCkpIDwgMCk7Ci0gICAgICAgIHJldHVybiAtdG1wLmludGVy
bmFsVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgYWJzb2x1dGVJbmRleCh1
bnNpZ25lZCB0bXBJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZUluZGV4KFRt
cDo6ZnBUbXBGb3JJbmRleCh0bXBJbmRleCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBUbXAgdG1w
RnJvbUFic29sdXRlSW5kZXgodW5zaWduZWQgdG1wSW5kZXgpCi0gICAgewotICAgICAgICByZXR1
cm4gVG1wOjp0bXBGb3JJbnRlcm5hbFZhbHVlKC10bXBJbmRleCk7Ci0gICAgfQotfTsKLQogdGVt
cGxhdGU8QXJnOjpUeXBlIHR5cGU+CiBjbGFzcyBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0Fs
bG9jYXRvciB7CiBwdWJsaWM6CkBAIC0xNDUsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
aXNPblNlbGVjdFN0YWNrLmVuc3VyZVNpemUodG1wQXJyYXlTaXplKTsKICAgICB9CiAKLSAgICB2
b2lkIGJ1aWxkKEluc3QmIGluc3QsIGNvbnN0IExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyYgbG9j
YWxDYWxjKQorICAgIHZvaWQgYnVpbGQoSW5zdCYgaW5zdCwgY29uc3QgVG1wTGl2ZW5lc3M6Okxv
Y2FsQ2FsYyYgbG9jYWxDYWxjKQogICAgIHsKICAgICAgICAgaW5zdC5mb3JFYWNoRGVmQW5kRXh0
cmFDbG9iYmVyZWRUbXAodHlwZSwgWyZdIChUbXAmIGFyZykgewogICAgICAgICAgICAgLy8gQWxs
IHRoZSBEZWYoKXMgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlciBhbmQgd2l0aCBhbGwgdGhlIGV4
dHJhIGNsb2JiZXJlZCBUbXBzLgpAQCAtMTg3LDE2ICsxMzYsMTYgQEAgcHVibGljOgogICAgICAg
ICAgICAgbV9hY3RpdmVNb3Zlcy5lbnN1cmVTaXplKG5leHRNb3ZlSW5kZXggKyAxKTsKIAogICAg
ICAgICAgICAgZm9yIChjb25zdCBBcmcmIGFyZyA6IGluc3QuYXJncykgewotICAgICAgICAgICAg
ICAgIGF1dG8mIGxpc3QgPSBtX21vdmVMaXN0W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNv
bHV0ZUluZGV4KGFyZy50bXAoKSldOworICAgICAgICAgICAgICAgIGF1dG8mIGxpc3QgPSBtX21v
dmVMaXN0W0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGFyZy50bXAoKSld
OwogICAgICAgICAgICAgICAgIGxpc3QuYWRkKG5leHRNb3ZlSW5kZXgpOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBmb3IgKGNvbnN0IFRtcCYgbGl2ZVRtcCA6IGxvY2FsQ2FsYy5saXZl
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGl2ZVRtcCAhPSB1c2VUbXAgJiYgbGl2ZVRtcC5p
c0dQKCkgPT0gKHR5cGUgPT0gQXJnOjpHUCkpCisgICAgICAgICAgICBmb3IgKGNvbnN0IFRtcCYg
bGl2ZVRtcCA6IGxvY2FsQ2FsYy5saXZlVG1wPHR5cGU+KCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobGl2ZVRtcCAhPSB1c2VUbXApCiAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoZGVmVG1w
LCBsaXZlVG1wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBh
ZGRFZGdlcyhpbnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKKyAgICAgICAgICAgIGFkZEVkZ2VzKGlu
c3QsIGxvY2FsQ2FsYy5saXZlVG1wPHR5cGU+KCkpOwogICAgIH0KIAogICAgIHZvaWQgYWxsb2Nh
dGUoKQpAQCAtMjM5LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAgICBUbXAgZ2V0QWxpYXMoVG1wIHRt
cCkgY29uc3QKICAgICB7CiAgICAgICAgIFRtcCBhbGlhcyA9IHRtcDsKLSAgICAgICAgd2hpbGUg
KFRtcCBuZXh0QWxpYXMgPSBtX2NvYWxlc2NlZFRtcHNbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46
OmFic29sdXRlSW5kZXgoYWxpYXMpXSkKKyAgICAgICAgd2hpbGUgKFRtcCBuZXh0QWxpYXMgPSBt
X2NvYWxlc2NlZFRtcHNbQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoYWxp
YXMpXSkKICAgICAgICAgICAgIGFsaWFzID0gbmV4dEFsaWFzOwogICAgICAgICByZXR1cm4gYWxp
YXM7CiAgICAgfQpAQCAtMjUyLDcgKzIwMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVy
biB0bXA7CiAKICAgICAgICAgVG1wIGFsaWFzID0gdG1wOwotICAgICAgICB3aGlsZSAoVG1wIG5l
eHRBbGlhcyA9IG1fY29hbGVzY2VkVG1wc0F0U3BpbGxbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46
OmFic29sdXRlSW5kZXgoYWxpYXMpXSkKKyAgICAgICAgd2hpbGUgKFRtcCBuZXh0QWxpYXMgPSBt
X2NvYWxlc2NlZFRtcHNBdFNwaWxsW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUlu
ZGV4KGFsaWFzKV0pCiAgICAgICAgICAgICBhbGlhcyA9IG5leHRBbGlhczsKIAogICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKCFtX3NwaWxsZWRUbXAuY29udGFpbnModG1wKSB8fCBhbGlhcyA9
PSB0bXAsICJUaGUgYWxpYXNlcyBhdCBzcGlsbCBzaG91bGQgYWx3YXlzIGJlIGNvbG9yYWJsZS4g
U29tZXRoaW5nIHdlbnQgaG9ycmlibHkgd3JvbmcuIik7CkBAIC0yNjcsNyArMjE2LDcgQEAgcHVi
bGljOgogICAgICAgICBBU1NFUlQobV9jb2xvcmVkVG1wLnNpemUoKSk7CiAgICAgICAgIEFTU0VS
VCh0bXAuaXNHUCgpID09ICh0eXBlID09IEFyZzo6R1ApKTsKIAotICAgICAgICBSZWcgcmVnID0g
bV9jb2xvcmVkVG1wW0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCld
OworICAgICAgICBSZWcgcmVnID0gbV9jb2xvcmVkVG1wW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+
OjphYnNvbHV0ZUluZGV4KHRtcCldOwogICAgICAgICBpZiAoIXJlZykgewogICAgICAgICAgICAg
Ly8gV2Ugb25seSBjYXJlIGFib3V0IFRtcHMgdGhhdCBpbnRlcmZlcmUuIEEgVG1wIHRoYXQgbmV2
ZXIgaW50ZXJmZXJlIHdpdGggYW55dGhpbmcKICAgICAgICAgICAgIC8vIGNhbiB0YWtlIGFueSBy
ZWdpc3Rlci4KQEAgLTI4MCw3ICsyMjksNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25l
ZCB0bXBBcnJheVNpemUoQ29kZSYgY29kZSkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG51bVRt
cHMgPSBjb2RlLm51bVRtcHModHlwZSk7Ci0gICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcEhlbHBl
cjx0eXBlPjo6YWJzb2x1dGVJbmRleChudW1UbXBzKTsKKyAgICAgICAgcmV0dXJuIEFic29sdXRl
VG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KG51bVRtcHMpOwogICAgIH0KIAogICAgIHZv
aWQgaW5pdGlhbGl6ZURlZ3JlZXMoQ29kZSYgY29kZSkKQEAgLTI4OSwyMSArMjM4LDE5IEBAIHBy
aXZhdGU6CiAgICAgICAgIG1fZGVncmVlcy5yZXNpemUodG1wQXJyYXlTaXplKTsKIAogICAgICAg
ICAvLyBBbGwgcHJlY29sb3JlZCByZWdpc3RlcnMgaGF2ZSAgYW4gImluZmluaXRlIiBkZWdyZWUu
Ci0gICAgICAgIHVuc2lnbmVkIGZpcnN0Tm9uUmVnSW5kZXggPSBBYnNvbHV0ZVRtcEhlbHBlcjx0
eXBlPjo6YWJzb2x1dGVJbmRleCgwKTsKKyAgICAgICAgdW5zaWduZWQgZmlyc3ROb25SZWdJbmRl
eCA9IEFic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KDApOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlyc3ROb25SZWdJbmRleDsgKytpKQogICAgICAgICAg
ICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwog
CiAgICAgICAgIGJ6ZXJvKG1fZGVncmVlcy5kYXRhKCkgKyBmaXJzdE5vblJlZ0luZGV4LCAodG1w
QXJyYXlTaXplIC0gZmlyc3ROb25SZWdJbmRleCkgKiBzaXplb2YodW5zaWduZWQpKTsKICAgICB9
CiAKLSAgICB2b2lkIGFkZEVkZ2VzKEluc3QmIGluc3QsIGNvbnN0IEhhc2hTZXQ8VG1wPiYgbGl2
ZVRtcCkKKyAgICB2b2lkIGFkZEVkZ2VzKEluc3QmIGluc3QsIGNvbnN0IFRtcExpdmVuZXNzOjpM
b2NhbENhbGM6Okl0ZXJhYmxlVG1wPHR5cGU+JiBsaXZlVG1wKQogICAgIHsKICAgICAgICAgLy8g
QWxsIHRoZSBEZWYoKXMgaW50ZXJmZXJlIHdpdGggZXZlcnRoaW5nIGxpdmUuCiAgICAgICAgIGlu
c3QuZm9yRWFjaERlZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKHR5cGUsIFsmXSAoVG1wJiBhcmcpIHsK
LSAgICAgICAgICAgIGZvciAoY29uc3QgVG1wJiBsaXZlVG1wIDogbGl2ZVRtcCkgewotICAgICAg
ICAgICAgICAgIGlmIChsaXZlVG1wLmlzR1AoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSkKLSAgICAg
ICAgICAgICAgICAgICAgYWRkRWRnZShhcmcsIGxpdmVUbXApOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZm9yIChjb25zdCBUbXAmIGxpdmVUbXAgOiBsaXZlVG1wKQorICAgICAgICAgICAg
ICAgIGFkZEVkZ2UoYXJnLCBsaXZlVG1wKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zMTQs
MzIgKzI2MSwzMiBAQCBwcml2YXRlOgogCiAgICAgICAgIGlmIChtX2ludGVyZmVyZW5jZUVkZ2Vz
LmFkZChJbnRlcmZlcmVuY2VFZGdlKGEsIGIpKS5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICBp
ZiAoIWEuaXNSZWcoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghbV9hZGphY2VuY3lMaXN0
W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGEpXS5jb250YWlucyhiKSk7
Ci0gICAgICAgICAgICAgICAgbV9hZGphY2VuY3lMaXN0W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+
OjphYnNvbHV0ZUluZGV4KGEpXS5hcHBlbmQoYik7Ci0gICAgICAgICAgICAgICAgbV9kZWdyZWVz
W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGEpXSsrOworICAgICAgICAg
ICAgICAgIEFTU0VSVCghbV9hZGphY2VuY3lMaXN0W0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+Ojph
YnNvbHV0ZUluZGV4KGEpXS5jb250YWlucyhiKSk7CisgICAgICAgICAgICAgICAgbV9hZGphY2Vu
Y3lMaXN0W0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGEpXS5hcHBlbmQo
Yik7CisgICAgICAgICAgICAgICAgbV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+Ojph
YnNvbHV0ZUluZGV4KGEpXSsrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIWIu
aXNSZWcoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghbV9hZGphY2VuY3lMaXN0W0Fic29s
dXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGIpXS5jb250YWlucyhhKSk7Ci0gICAg
ICAgICAgICAgICAgbV9hZGphY2VuY3lMaXN0W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNv
bHV0ZUluZGV4KGIpXS5hcHBlbmQoYSk7Ci0gICAgICAgICAgICAgICAgbV9kZWdyZWVzW0Fic29s
dXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGIpXSsrOworICAgICAgICAgICAgICAg
IEFTU0VSVCghbV9hZGphY2VuY3lMaXN0W0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0
ZUluZGV4KGIpXS5jb250YWlucyhhKSk7CisgICAgICAgICAgICAgICAgbV9hZGphY2VuY3lMaXN0
W0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGIpXS5hcHBlbmQoYSk7Cisg
ICAgICAgICAgICAgICAgbV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0
ZUluZGV4KGIpXSsrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgdm9p
ZCBtYWtlV29ya0xpc3QoKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgZmlyc3ROb25SZWdJbmRl
eCA9IEFic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KDApOworICAgICAgICB1
bnNpZ25lZCBmaXJzdE5vblJlZ0luZGV4ID0gQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29s
dXRlSW5kZXgoMCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0Tm9uUmVnSW5kZXg7
IGkgPCBtX2RlZ3JlZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGRlZ3Jl
ZSA9IG1fZGVncmVlc1tpXTsKICAgICAgICAgICAgIGlmICghZGVncmVlKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBUbXAgdG1wID0gQWJzb2x1dGVUbXBIZWxwZXI8
dHlwZT46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGkpOworICAgICAgICAgICAgVG1wIHRtcCA9IEFi
c29sdXRlVG1wTWFwcGVyPHR5cGU+Ojp0bXBGcm9tQWJzb2x1dGVJbmRleChpKTsKIAogICAgICAg
ICAgICAgaWYgKGRlZ3JlZSA+PSBtX251bWJlck9mUmVnaXN0ZXJzKQogICAgICAgICAgICAgICAg
IG1fc3BpbGxXb3JrbGlzdC5hZGQodG1wKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFtX21vdmVM
aXN0W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIGVsc2UgaWYgKCFtX21vdmVMaXN0W0Fic29sdXRlVG1wTWFwcGVyPHR5
cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBtX2Zy
ZWV6ZVdvcmtsaXN0LmFkZCh0bXApOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IG1fc2ltcGxpZnlXb3JrbGlzdC5hcHBlbmQodG1wKTsKQEAgLTM1MSw5ICsyOTgsOSBAQCBwcml2
YXRlOgogICAgICAgICBUbXAgbGFzdCA9IG1fc2ltcGxpZnlXb3JrbGlzdC50YWtlTGFzdCgpOwog
CiAgICAgICAgIEFTU0VSVCghbV9zZWxlY3RTdGFjay5jb250YWlucyhsYXN0KSk7Ci0gICAgICAg
IEFTU0VSVCghbV9pc09uU2VsZWN0U3RhY2suZ2V0KEFic29sdXRlVG1wSGVscGVyPHR5cGU+Ojph
YnNvbHV0ZUluZGV4KGxhc3QpKSk7CisgICAgICAgIEFTU0VSVCghbV9pc09uU2VsZWN0U3RhY2su
Z2V0KEFic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGxhc3QpKSk7CiAgICAg
ICAgIG1fc2VsZWN0U3RhY2suYXBwZW5kKGxhc3QpOwotICAgICAgICBtX2lzT25TZWxlY3RTdGFj
ay5xdWlja1NldChBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChsYXN0KSk7
CisgICAgICAgIG1faXNPblNlbGVjdFN0YWNrLnF1aWNrU2V0KEFic29sdXRlVG1wTWFwcGVyPHR5
cGU+OjphYnNvbHV0ZUluZGV4KGxhc3QpKTsKIAogICAgICAgICBmb3JFYWNoQWRqYWNlbnQobGFz
dCwgW3RoaXNdKFRtcCBhZGphY2VudFRtcCkgewogICAgICAgICAgICAgZGVjcmVtZW50RGVncmVl
KGFkamFjZW50VG1wKTsKQEAgLTM2Myw3ICszMTAsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0aW9uPgogICAgIHZvaWQgZm9yRWFjaEFkamFjZW50KFRtcCB0bXAsIEZ1
bmN0aW9uIGZ1bmN0aW9uKQogICAgIHsKLSAgICAgICAgZm9yIChUbXAgYWRqYWNlbnRUbXAgOiBt
X2FkamFjZW5jeUxpc3RbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1w
KV0pIHsKKyAgICAgICAgZm9yIChUbXAgYWRqYWNlbnRUbXAgOiBtX2FkamFjZW5jeUxpc3RbQWJz
b2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKV0pIHsKICAgICAgICAgICAg
IGlmICghaGFzQmVlblNpbXBsaWZpZWQoYWRqYWNlbnRUbXApKQogICAgICAgICAgICAgICAgIGZ1
bmN0aW9uKGFkamFjZW50VG1wKTsKICAgICAgICAgfQpAQCAtMzcxLDE0ICszMTgsMTQgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgaGFzQmVlblNpbXBsaWZpZWQoVG1wIHRtcCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2lzT25TZWxlY3RTdGFjay5xdWlja0dldChBYnNvbHV0ZVRtcEhlbHBlcjx0
eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApKSB8fCAhIW1fY29hbGVzY2VkVG1wc1tBYnNvbHV0ZVRt
cEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXTsKKyAgICAgICAgcmV0dXJuIG1faXNP
blNlbGVjdFN0YWNrLnF1aWNrR2V0KEFic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUlu
ZGV4KHRtcCkpIHx8ICEhbV9jb2FsZXNjZWRUbXBzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+Ojph
YnNvbHV0ZUluZGV4KHRtcCldOwogICAgIH0KIAogICAgIHZvaWQgZGVjcmVtZW50RGVncmVlKFRt
cCB0bXApCiAgICAgewotICAgICAgICBBU1NFUlQobV9kZWdyZWVzW0Fic29sdXRlVG1wSGVscGVy
PHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldKTsKKyAgICAgICAgQVNTRVJUKG1fZGVncmVlc1tB
YnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSk7CiAKLSAgICAgICAg
dW5zaWduZWQgb2xkRGVncmVlID0gbV9kZWdyZWVzW0Fic29sdXRlVG1wSGVscGVyPHR5cGU+Ojph
YnNvbHV0ZUluZGV4KHRtcCldLS07CisgICAgICAgIHVuc2lnbmVkIG9sZERlZ3JlZSA9IG1fZGVn
cmVlc1tBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXS0tOwogICAg
ICAgICBpZiAob2xkRGVncmVlID09IG1fbnVtYmVyT2ZSZWdpc3RlcnMpIHsKICAgICAgICAgICAg
IGVuYWJsZU1vdmVzT25WYWx1ZUFuZEFkamFjZW50cyh0bXApOwogICAgICAgICAgICAgbV9zcGls
bFdvcmtsaXN0LnJlbW92ZSh0bXApOwpAQCAtMzkyLDcgKzMzOSw3IEBAIHByaXZhdGU6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+CiAgICAgdm9pZCBmb3JFYWNoTm9kZU1vdmVzKFRt
cCB0bXAsIEZ1bmN0aW9uIGZ1bmN0aW9uKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBt
b3ZlSW5kZXggOiBtX21vdmVMaXN0W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUlu
ZGV4KHRtcCldKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgbW92ZUluZGV4IDogbV9tb3ZlTGlz
dFtBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSkgewogICAgICAg
ICAgICAgaWYgKG1fYWN0aXZlTW92ZXMucXVpY2tHZXQobW92ZUluZGV4KSB8fCBtX3dvcmtsaXN0
TW92ZXMuY29udGFpbnMobW92ZUluZGV4KSkKICAgICAgICAgICAgICAgICBmdW5jdGlvbihtb3Zl
SW5kZXgpOwogICAgICAgICB9CkBAIC00MDAsNyArMzQ3LDcgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgaXNNb3ZlUmVsYXRlZChUbXAgdG1wKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBt
b3ZlSW5kZXggOiBtX21vdmVMaXN0W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUlu
ZGV4KHRtcCldKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgbW92ZUluZGV4IDogbV9tb3ZlTGlz
dFtBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSkgewogICAgICAg
ICAgICAgaWYgKG1fYWN0aXZlTW92ZXMucXVpY2tHZXQobW92ZUluZGV4KSB8fCBtX3dvcmtsaXN0
TW92ZXMuY29udGFpbnMobW92ZUluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQpAQCAtNDA5LDcgKzM1Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVuYWJs
ZU1vdmVzT25WYWx1ZShUbXAgdG1wKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBtb3Zl
SW5kZXggOiBtX21vdmVMaXN0W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4
KHRtcCldKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgbW92ZUluZGV4IDogbV9tb3ZlTGlzdFtB
YnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSkgewogICAgICAgICAg
ICAgaWYgKG1fYWN0aXZlTW92ZXMucXVpY2tDbGVhcihtb3ZlSW5kZXgpKQogICAgICAgICAgICAg
ICAgIG1fd29ya2xpc3RNb3Zlcy5yZXR1cm5Nb3ZlKG1vdmVJbmRleCk7CiAgICAgICAgIH0KQEAg
LTQ4MSwxMSArNDI4LDExIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIElmIGFueSBhZGphY2VudCBv
ZiB0aGUgbm9uLWNvbG9yZWQgbm9kZSBpcyBub3QgYW4gYWRqYWNlbnQgb2YgdGhlIGNvbG9yZWQg
bm9kZSBBTkQgaGFzIGEgZGVncmVlID49IEsKICAgICAgICAgLy8gdGhlcmUgaXMgYSByaXNrIHRo
YXQgdGhpcyBub2RlIG5lZWRzIHRvIGhhdmUgdGhlIHNhbWUgY29sb3IgYXMgb3VyIHByZWNvbG9y
ZWQgbm9kZS4gSWYgd2UgY29hbGVzY2Ugc3VjaAogICAgICAgICAvLyBtb3ZlLCB3ZSBtYXkgY3Jl
YXRlIGFuIHVuY29sb3JhYmxlIGdyYXBoLgotICAgICAgICBjb25zdCBhdXRvJiBhZGphY2VudHNP
ZlYgPSBtX2FkamFjZW5jeUxpc3RbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5k
ZXgodildOworICAgICAgICBjb25zdCBhdXRvJiBhZGphY2VudHNPZlYgPSBtX2FkamFjZW5jeUxp
c3RbQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodildOwogICAgICAgICBm
b3IgKFRtcCBhZGphY2VudFRtcCA6IGFkamFjZW50c09mVikgewogICAgICAgICAgICAgaWYgKCFh
ZGphY2VudFRtcC5pc1JlZygpCiAgICAgICAgICAgICAgICAgJiYgIWhhc0JlZW5TaW1wbGlmaWVk
KGFkamFjZW50VG1wKQotICAgICAgICAgICAgICAgICYmIG1fZGVncmVlc1tBYnNvbHV0ZVRtcEhl
bHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhZGphY2VudFRtcCldID49IG1fbnVtYmVyT2ZSZWdp
c3RlcnMKKyAgICAgICAgICAgICAgICAmJiBtX2RlZ3JlZXNbQWJzb2x1dGVUbXBNYXBwZXI8dHlw
ZT46OmFic29sdXRlSW5kZXgoYWRqYWNlbnRUbXApXSA+PSBtX251bWJlck9mUmVnaXN0ZXJzCiAg
ICAgICAgICAgICAgICAgJiYgIW1faW50ZXJmZXJlbmNlRWRnZXMuY29udGFpbnMoSW50ZXJmZXJl
bmNlRWRnZSh1LCBhZGphY2VudFRtcCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQpAQCAtNTAzLDggKzQ1MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVCgh
dS5pc1JlZygpKTsKICAgICAgICAgQVNTRVJUKCF2LmlzUmVnKCkpOwogCi0gICAgICAgIGNvbnN0
IGF1dG8mIGFkamFjZW50c09mVSA9IG1fYWRqYWNlbmN5TGlzdFtBYnNvbHV0ZVRtcEhlbHBlcjx0
eXBlPjo6YWJzb2x1dGVJbmRleCh1KV07Ci0gICAgICAgIGNvbnN0IGF1dG8mIGFkamFjZW50c09m
ViA9IG1fYWRqYWNlbmN5TGlzdFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRl
eCh2KV07CisgICAgICAgIGNvbnN0IGF1dG8mIGFkamFjZW50c09mVSA9IG1fYWRqYWNlbmN5TGlz
dFtBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh1KV07CisgICAgICAgIGNv
bnN0IGF1dG8mIGFkamFjZW50c09mViA9IG1fYWRqYWNlbmN5TGlzdFtBYnNvbHV0ZVRtcE1hcHBl
cjx0eXBlPjo6YWJzb2x1dGVJbmRleCh2KV07CiAKICAgICAgICAgaWYgKGFkamFjZW50c09mVS5z
aXplKCkgKyBhZGphY2VudHNPZlYuc2l6ZSgpIDwgbV9udW1iZXJPZlJlZ2lzdGVycykgewogICAg
ICAgICAgICAgLy8gU2hvcnRjdXQ6IGlmIHRoZSB0b3RhbCBudW1iZXIgb2YgYWRqYWNlbnRzIGlz
IGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVyLCB0aGUgY29uZGl0aW9uIGlzIGFsd2F5
cyBtZXQuCkBAIC01MTYsNyArNDYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChUbXAgYWRq
YWNlbnRUbXAgOiBhZGphY2VudHNPZlUpIHsKICAgICAgICAgICAgIEFTU0VSVChhZGphY2VudFRt
cCAhPSB2KTsKICAgICAgICAgICAgIEFTU0VSVChhZGphY2VudFRtcCAhPSB1KTsKLSAgICAgICAg
ICAgIGlmICghaGFzQmVlblNpbXBsaWZpZWQoYWRqYWNlbnRUbXApICYmIG1fZGVncmVlc1tBYnNv
bHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhZGphY2VudFRtcCldID49IG1fbnVt
YmVyT2ZSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIGlmICghaGFzQmVlblNpbXBsaWZpZWQoYWRq
YWNlbnRUbXApICYmIG1fZGVncmVlc1tBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJ
bmRleChhZGphY2VudFRtcCldID49IG1fbnVtYmVyT2ZSZWdpc3RlcnMpIHsKICAgICAgICAgICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IGhpZ2hPcmRlckFkamFjZW50cy5hZGQoYWRqYWNlbnRUbXAp
OwogICAgICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBoaWdoT3JkZXJB
ZGphY2VudHMuc2l6ZSgpID49IG1fbnVtYmVyT2ZSZWdpc3RlcnMpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTUyNSw3ICs0NzIsNyBAQCBwcml2YXRlOgogICAgICAgICBm
b3IgKFRtcCBhZGphY2VudFRtcCA6IGFkamFjZW50c09mVikgewogICAgICAgICAgICAgQVNTRVJU
KGFkamFjZW50VG1wICE9IHUpOwogICAgICAgICAgICAgQVNTRVJUKGFkamFjZW50VG1wICE9IHYp
OwotICAgICAgICAgICAgaWYgKCFoYXNCZWVuU2ltcGxpZmllZChhZGphY2VudFRtcCkgJiYgbV9k
ZWdyZWVzW0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGFkamFjZW50VG1w
KV0gPj0gbV9udW1iZXJPZlJlZ2lzdGVycykgeworICAgICAgICAgICAgaWYgKCFoYXNCZWVuU2lt
cGxpZmllZChhZGphY2VudFRtcCkgJiYgbV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+
OjphYnNvbHV0ZUluZGV4KGFkamFjZW50VG1wKV0gPj0gbV9udW1iZXJPZlJlZ2lzdGVycykgewog
ICAgICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gaGlnaE9yZGVyQWRqYWNlbnRzLmFkZChh
ZGphY2VudFRtcCk7CiAgICAgICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5ICYm
IGhpZ2hPcmRlckFkamFjZW50cy5zaXplKCkgPj0gbV9udW1iZXJPZlJlZ2lzdGVycykKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTM4LDcgKzQ4NSw3IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGFkZFdvcmtMaXN0KFRtcCB0bXApCiAgICAgewotICAgICAgICBpZiAoIXRt
cC5pc1JlZygpICYmIG1fZGVncmVlc1tBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJ
bmRleCh0bXApXSA8IG1fbnVtYmVyT2ZSZWdpc3RlcnMgJiYgIWlzTW92ZVJlbGF0ZWQodG1wKSkg
eworICAgICAgICBpZiAoIXRtcC5pc1JlZygpICYmIG1fZGVncmVlc1tBYnNvbHV0ZVRtcE1hcHBl
cjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSA8IG1fbnVtYmVyT2ZSZWdpc3RlcnMgJiYgIWlz
TW92ZVJlbGF0ZWQodG1wKSkgewogICAgICAgICAgICAgbV9mcmVlemVXb3JrbGlzdC5yZW1vdmUo
dG1wKTsKICAgICAgICAgICAgIG1fc2ltcGxpZnlXb3JrbGlzdC5hcHBlbmQodG1wKTsKICAgICAg
ICAgfQpAQCAtNTQ5LDE4ICs0OTYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFtX2ZyZWV6
ZVdvcmtsaXN0LnJlbW92ZSh2KSkKICAgICAgICAgICAgIG1fc3BpbGxXb3JrbGlzdC5yZW1vdmUo
dik7CiAKLSAgICAgICAgQVNTRVJUKCFtX2NvYWxlc2NlZFRtcHNbQWJzb2x1dGVUbXBIZWxwZXI8
dHlwZT46OmFic29sdXRlSW5kZXgodildKTsKLSAgICAgICAgbV9jb2FsZXNjZWRUbXBzW0Fic29s
dXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHYpXSA9IHU7CisgICAgICAgIEFTU0VS
VCghbV9jb2FsZXNjZWRUbXBzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4
KHYpXSk7CisgICAgICAgIG1fY29hbGVzY2VkVG1wc1tBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6
YWJzb2x1dGVJbmRleCh2KV0gPSB1OwogCi0gICAgICAgIGF1dG8mIHZNb3ZlcyA9IG1fbW92ZUxp
c3RbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodildOwotICAgICAgICBt
X21vdmVMaXN0W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHUpXS5hZGQo
dk1vdmVzLmJlZ2luKCksIHZNb3Zlcy5lbmQoKSk7CisgICAgICAgIGF1dG8mIHZNb3ZlcyA9IG1f
bW92ZUxpc3RbQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodildOworICAg
ICAgICBtX21vdmVMaXN0W0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHUp
XS5hZGQodk1vdmVzLmJlZ2luKCksIHZNb3Zlcy5lbmQoKSk7CiAKICAgICAgICAgZm9yRWFjaEFk
amFjZW50KHYsIFt0aGlzLCB1XSAoVG1wIGFkamFjZW50VG1wKSB7CiAgICAgICAgICAgICBhZGRF
ZGdlKGFkamFjZW50VG1wLCB1KTsKICAgICAgICAgICAgIGRlY3JlbWVudERlZ3JlZShhZGphY2Vu
dFRtcCk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIGlmIChtX2RlZ3JlZXNbQWJzb2x1dGVUbXBI
ZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodSldID49IG1fbnVtYmVyT2ZSZWdpc3RlcnMgJiYg
bV9mcmVlemVXb3JrbGlzdC5yZW1vdmUodSkpCisgICAgICAgIGlmIChtX2RlZ3JlZXNbQWJzb2x1
dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodSldID49IG1fbnVtYmVyT2ZSZWdpc3Rl
cnMgJiYgbV9mcmVlemVXb3JrbGlzdC5yZW1vdmUodSkpCiAgICAgICAgICAgICBtX3NwaWxsV29y
a2xpc3QuYWRkKHUpOwogICAgIH0KIApAQCAtNTgxLDcgKzUyOCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBjb25zdCBNb3ZlT3BlcmFuZHMmIG1vdmVPcGVyYW5kcyA9IG1fY29hbGVzY2luZ0Nh
bmRpZGF0ZXNbbW92ZUluZGV4XTsKICAgICAgICAgICAgIFRtcCBvcmlnaW5hbE90aGVyVG1wID0g
bW92ZU9wZXJhbmRzLnNyYyAhPSB0bXAgPyBtb3ZlT3BlcmFuZHMuc3JjIDogbW92ZU9wZXJhbmRz
LmRzdDsKICAgICAgICAgICAgIFRtcCBvdGhlclRtcCA9IGdldEFsaWFzKG9yaWdpbmFsT3RoZXJU
bXApOwotICAgICAgICAgICAgaWYgKG1fZGVncmVlc1tBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6
YWJzb2x1dGVJbmRleChvdGhlclRtcCldIDwgbV9udW1iZXJPZlJlZ2lzdGVycyAmJiAhaXNNb3Zl
UmVsYXRlZChvdGhlclRtcCkpIHsKKyAgICAgICAgICAgIGlmIChtX2RlZ3JlZXNbQWJzb2x1dGVU
bXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgob3RoZXJUbXApXSA8IG1fbnVtYmVyT2ZSZWdp
c3RlcnMgJiYgIWlzTW92ZVJlbGF0ZWQob3RoZXJUbXApKSB7CiAgICAgICAgICAgICAgICAgaWYg
KG1fZnJlZXplV29ya2xpc3QucmVtb3ZlKG90aGVyVG1wKSkKICAgICAgICAgICAgICAgICAgICAg
bV9zaW1wbGlmeVdvcmtsaXN0LmFwcGVuZChvdGhlclRtcCk7CiAgICAgICAgICAgICB9CkBAIC02
MDYsMTEgKzU1MywxMSBAQCBwcml2YXRlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoaXRlcmF0b3IgIT0gbV9zcGlsbFdvcmtsaXN0LmVuZCgpLCAiSXQgaXMgbm90IHBvc3Np
YmxlIHRvIGNvbG9yIHRoZSBBaXIgZ3JhcGggd2l0aCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBy
ZWdpc3RlcnMuIik7CiAKICAgICAgICAgYXV0byB2aWN0aW1JdGVyYXRvciA9IGl0ZXJhdG9yOwot
ICAgICAgICB1bnNpZ25lZCBtYXhEZWdyZWUgPSBtX2RlZ3JlZXNbQWJzb2x1dGVUbXBIZWxwZXI8
dHlwZT46OmFic29sdXRlSW5kZXgoKml0ZXJhdG9yKV07CisgICAgICAgIHVuc2lnbmVkIG1heERl
Z3JlZSA9IG1fZGVncmVlc1tBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCgq
aXRlcmF0b3IpXTsKIAogICAgICAgICArK2l0ZXJhdG9yOwogICAgICAgICBmb3IgKDtpdGVyYXRv
ciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHRtcERlZ3JlZSA9IG1fZGVncmVlc1tBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJz
b2x1dGVJbmRleCgqaXRlcmF0b3IpXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRtcERlZ3JlZSA9
IG1fZGVncmVlc1tBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCgqaXRlcmF0
b3IpXTsKICAgICAgICAgICAgIGlmICh0bXBEZWdyZWUgPiBtYXhEZWdyZWUpIHsKICAgICAgICAg
ICAgICAgICBpZiAobV91bnNwaWxsYWJsZVRtcC5jb250YWlucygqaXRlcmF0b3IpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTY0OSwxNyArNTk2LDE3IEBAIHByaXZhdGU6CiAg
ICAgICAgIHdoaWxlICghbV9zZWxlY3RTdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIFRt
cCB0bXAgPSBtX3NlbGVjdFN0YWNrLnRha2VMYXN0KCk7CiAgICAgICAgICAgICBBU1NFUlQoIXRt
cC5pc1JlZygpKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9jb2xvcmVkVG1wW0Fic29sdXRlVG1w
SGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
bV9jb2xvcmVkVG1wW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCld
KTsKIAogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY29sb3JlZFJlZ2lzdGVyczsKLSAgICAgICAg
ICAgIGZvciAoVG1wIGFkamFjZW50VG1wIDogbV9hZGphY2VuY3lMaXN0W0Fic29sdXRlVG1wSGVs
cGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldKSB7CisgICAgICAgICAgICBmb3IgKFRtcCBh
ZGphY2VudFRtcCA6IG1fYWRqYWNlbmN5TGlzdFtBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJz
b2x1dGVJbmRleCh0bXApXSkgewogICAgICAgICAgICAgICAgIFRtcCBhbGlhc1RtcCA9IGdldEFs
aWFzKGFkamFjZW50VG1wKTsKICAgICAgICAgICAgICAgICBpZiAoYWxpYXNUbXAuaXNSZWcoKSkg
ewogICAgICAgICAgICAgICAgICAgICBjb2xvcmVkUmVnaXN0ZXJzLnNldChhbGlhc1RtcC5yZWco
KSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIFJlZyByZWcgPSBtX2NvbG9yZWRUbXBbQWJzb2x1dGVUbXBIZWxwZXI8
dHlwZT46OmFic29sdXRlSW5kZXgoYWxpYXNUbXApXTsKKyAgICAgICAgICAgICAgICBSZWcgcmVn
ID0gbV9jb2xvcmVkVG1wW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGFs
aWFzVG1wKV07CiAgICAgICAgICAgICAgICAgaWYgKHJlZykKICAgICAgICAgICAgICAgICAgICAg
Y29sb3JlZFJlZ2lzdGVycy5zZXQocmVnKTsKICAgICAgICAgICAgIH0KQEAgLTY2Nyw3ICs2MTQs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYm9vbCBjb2xvckFzc2lnbmVkID0gZmFsc2U7CiAg
ICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdpc3RlcnNJblByaW9yaXR5T3JkZXIpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIWNvbG9yZWRSZWdpc3RlcnMuZ2V0KHJlZykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9jb2xvcmVkVG1wW0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0
ZUluZGV4KHRtcCldID0gcmVnOworICAgICAgICAgICAgICAgICAgICBtX2NvbG9yZWRUbXBbQWJz
b2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKV0gPSByZWc7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbG9yQXNzaWduZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC02OTcsNyArNjQ0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdG1wIDogdG1wc1dpdGhJbnRlcmZl
cmVuY2VzKQotICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgdG1wLmludGVybmFsVmFsdWUo
KSwgIiBbbGFiZWw9XCIiLCB0bXAsICIgKCIsIG1fZGVncmVlc1tBYnNvbHV0ZVRtcEhlbHBlcjx0
eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSwgIilcIl07XG4iKTsKKyAgICAgICAgICAgIG91dC5w
cmludCgiICAgICIsIHRtcC5pbnRlcm5hbFZhbHVlKCksICIgW2xhYmVsPVwiIiwgdG1wLCAiICgi
LCBtX2RlZ3JlZXNbQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKV0s
ICIpXCJdO1xuIik7CiAKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlZGdlIDogbV9pbnRlcmZl
cmVuY2VFZGdlcykKICAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGVkZ2UuZmlyc3QoKS5p
bnRlcm5hbFZhbHVlKCksICIgLS0gIiwgZWRnZS5zZWNvbmQoKS5pbnRlcm5hbFZhbHVlKCksICI7
XG4iKTsKQEAgLTEwMjEsOSArOTY4LDkgQEAgc3RhdGljIHZvaWQgaXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmdPblR5cGUoQ29kZSYgY29kZSwgSGFzaFNldDxUbXA+JiB1bnNwaWxsYWIKICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgICBudW1JdGVyYXRpb25zKys7CiAgICAgICAgIEl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yPHR5cGU+IGFsbG9jYXRvcihjb2RlLCB1bnNwaWxs
YWJsZVRtcHMpOwotICAgICAgICBMaXZlbmVzczxUbXA+IGxpdmVuZXNzKGNvZGUpOworICAgICAg
ICBUbXBMaXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKLSAgICAgICAgICAgIExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2Nh
bENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKyAgICAgICAgICAgIFRtcExpdmVuZXNzOjpMb2NhbENh
bGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAgICAgICAgICAg
ICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKICAgICAgICAgICAgICAgICBh
bGxvY2F0b3IuYnVpbGQoaW5zdCwgbG9jYWxDYWxjKTsKQEAgLTEwNTksOSArMTAwNiw5IEBAIHZv
aWQgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcoQ29kZSYgY29kZSkKIAogICAgICAgICAvLyBM
aXZlbmVzcyBBbmFseXNpcyBjYW4gYmUgcHJvaGliaXRpdmVseSBleHBlbnNpdmUuIEl0IGlzIHNo
YXJlZAogICAgICAgICAvLyBiZXR3ZWVuIHRoZSB0d28gYWxsb2NhdG9ycyB0byBhdm9pZCBkb2lu
ZyBpdCB0d2ljZS4KLSAgICAgICAgTGl2ZW5lc3M8VG1wPiBsaXZlbmVzcyhjb2RlKTsKKyAgICAg
ICAgVG1wTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgICAgICBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMgbG9j
YWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgICAgICBUbXBMaXZlbmVzczo6TG9jYWxD
YWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKICAgICAgICAgICAg
ICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCmlu
ZGV4IGQ2ZmRmN2QwZDhkZDE0ODdhOWY3M2EyZjZjMjU0NjRmNjI2ODJmM2YuLjVkYzdiZDcxNzdl
ZjVlMjljNTg2M2Y0MmExNzYyY2MxZTk1YTA0YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcApAQCAtMzAsNyAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJUbXBMaXZlbmVzcy5o
IgogI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgewpAQCAtNDEsMTggKzQxLDIyIEBAIHZvaWQgcmVwb3J0VXNl
ZFJlZ2lzdGVycyhDb2RlJiBjb2RlKQogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0ZWxsIGxp
dmVuZXNzIHRvIG9ubHkgdHJhY2sgUmVncy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzUxCi0gICAgTGl2ZW5lc3M8VG1wPiBsaXZlbmVzcyhjb2Rl
KTsKKyAgICBUbXBMaXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsKIAogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2Nh
bENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKyAgICAgICAgVG1wTGl2ZW5lc3M6OkxvY2FsQ2FsYyBs
b2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJ
bmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAgICAgICAgICAgSW5zdCYg
aW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwogICAgICAgICAgICAgaWYgKGluc3QuaGFzU3Bl
Y2lhbCgpKSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJTZXQ7Ci0gICAg
ICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbG9jYWxDYWxjLmxpdmUoKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZWdp
c3RlclNldC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBs
b2NhbENhbGMubGl2ZVRtcDxBcmc6OkdQPigpKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VCh0bXAuaXNSZWcoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2V0LnNldCh0bXAu
cmVnKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKFRtcCB0bXAg
OiBsb2NhbENhbGMubGl2ZVRtcDxBcmc6OkZQPigpKSB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCh0bXAuaXNSZWcoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2V0LnNldCh0
bXAucmVnKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpbnN0LnJlcG9y
dFVzZWRSZWdpc3RlcnMocmVnaXN0ZXJTZXQpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAppbmRleCBmMjk1NGUzMmJlMzk4YTNm
N2RiMWZjNTg4MGNhYjRkMzdmNzUwMTBjLi4yZjFlMDljNWQ1MGI4N2U2MWQ1ZmNjZTUxOGM2ODBm
YjVlYzhiODFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRt
cElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGlu
ZXMuaApAQCAtMzgsNiArMzgsNTEgQEAgaW5saW5lIFRtcDo6VG1wKGNvbnN0IEFyZyYgYXJnKQog
ICAgICp0aGlzID0gYXJnLnRtcCgpOwogfQogCisvLyBXaGVuIGEgSGFzaCBzdHJ1Y3R1cmUgaXMg
dG9vIHNsb3cgb3Igd2hlbiBTZXRzIGNvbnRhaW5zIG1vc3QgdmFsdWVzLCB5b3UgY2FuCisvLyB1
c2UgZGlyZWN0IGFycmF5IGFkZHJlc3Npbmcgd2l0aCBUbXBzLgordGVtcGxhdGU8QXJnOjpUeXBl
IHR5cGU+CitzdHJ1Y3QgQWJzb2x1dGVUbXBNYXBwZXI7CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBB
YnNvbHV0ZVRtcE1hcHBlcjxBcmc6OkdQPiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGFic29sdXRl
SW5kZXgoY29uc3QgVG1wJiB0bXApCisgICAgeworICAgICAgICBBU1NFUlQodG1wLmlzR1AoKSk7
CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHRtcC5pbnRlcm5hbFZhbHVlKCkpID4g
MCk7CisgICAgICAgIHJldHVybiB0bXAuaW50ZXJuYWxWYWx1ZSgpOworICAgIH0KKworICAgIHN0
YXRpYyB1bnNpZ25lZCBhYnNvbHV0ZUluZGV4KHVuc2lnbmVkIHRtcEluZGV4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFic29sdXRlSW5kZXgoVG1wOjpncFRtcEZvckluZGV4KHRtcEluZGV4KSk7
CisgICAgfQorCisgICAgc3RhdGljIFRtcCB0bXBGcm9tQWJzb2x1dGVJbmRleCh1bnNpZ25lZCB0
bXBJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBUbXA6OnRtcEZvckludGVybmFsVmFsdWUo
dG1wSW5kZXgpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBBYnNvbHV0ZVRtcE1h
cHBlcjxBcmc6OkZQPiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGFic29sdXRlSW5kZXgoY29uc3Qg
VG1wJiB0bXApCisgICAgeworICAgICAgICBBU1NFUlQodG1wLmlzRlAoKSk7CisgICAgICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxpbnQ+KHRtcC5pbnRlcm5hbFZhbHVlKCkpIDwgMCk7CisgICAgICAg
IHJldHVybiAtdG1wLmludGVybmFsVmFsdWUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgYWJzb2x1dGVJbmRleCh1bnNpZ25lZCB0bXBJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhYnNvbHV0ZUluZGV4KFRtcDo6ZnBUbXBGb3JJbmRleCh0bXBJbmRleCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBUbXAgdG1wRnJvbUFic29sdXRlSW5kZXgodW5zaWduZWQgdG1wSW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gVG1wOjp0bXBGb3JJbnRlcm5hbFZhbHVlKC10bXBJbmRleCk7
CisgICAgfQorfTsKKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVG1wTGl2ZW5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1w
TGl2ZW5lc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNDgyZWE1NjZkOWI1MDk1NWRiZDdhNGMzMGEzYzhhODgy
NzljMDk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJUbXBMaXZlbmVzcy5oCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wTGl2ZW5lc3NfaAorI2RlZmlu
ZSBBaXJUbXBMaXZlbmVzc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
QmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKKyNpbmNsdWRlICJCM0lu
ZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9JbmRleFNw
YXJzZVNldC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKKy8vIEVmZmljaWVudCBsaXZlbmVzcyBhbmFseXNpcyBvbiBUbXAuCitjbGFzcyBUbXBM
aXZlbmVzcyB7CisgICAgc3RydWN0IFdvcmtzZXQ7CitwdWJsaWM6CisgICAgVG1wTGl2ZW5lc3Mo
Q29kZSYgY29kZSkKKyAgICAgICAgOiBtX3dvcmtzZXQoY29kZSkKKyAgICB7CisgICAgICAgIG1f
bGl2ZUF0VGFpbC5yZXNpemUoY29kZS5zaXplKCkpOworICAgICAgICBtX2xpdmVBdEhlYWQucmVz
aXplKGNvZGUuc2l6ZSgpKTsKKworICAgICAgICAvLyBUaGUgbGl2ZUF0VGFpbCBvZiBlYWNoIGJs
b2NrIGF1dG9tYXRpY2FsbHkgY29udGFpbnMgdGhlIExhdGVVc2UncyBvZiB0aGUgdGVybWluYWwu
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgICAgICBM
aXZlQXRUYWlsJiBsaXZlQXRUYWlsID0gbV9saXZlQXRUYWlsW2Jsb2NrXTsKKyAgICAgICAgICAg
IGJsb2NrLT5sYXN0KCkuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IFRt
cCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNMYXRlVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAg
YWRkVG9TZXQodG1wLCB0eXBlLCBsaXZlQXRUYWlsKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEJsb2NrcyB3aXRoIG5ldyBsaXZlIHZhbHVlcyBhdCB0YWls
LgorICAgICAgICBCaXRWZWN0b3IgZGlydHlCbG9ja3M7CisgICAgICAgIGZvciAoc2l6ZV90IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgY29kZS5zaXplKCk7ICsrYmxvY2tJbmRleCkKKyAg
ICAgICAgICAgIGRpcnR5QmxvY2tzLnNldChibG9ja0luZGV4KTsKKworICAgICAgICBib29sIGNo
YW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKworICAg
ICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4
LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlLmF0KGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKCFkaXJ0eUJsb2Nrcy5xdWlja0NsZWFy
KGJsb2NrSW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgICAgIExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCisg
ICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CisKKyAgICAg
ICAgICAgICAgICBMaXZlQXRIZWFkJiBsaXZlQXRIZWFkID0gbV9saXZlQXRIZWFkW2Jsb2NrXTsK
KworICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBUbXBzIHRoYXQgd2VyZSBk
aXNjb3ZlcmVkIGluIHRoaXMgaXRlcmF0aW9uLiBJdCBpcyBpbXBvc3NpYmxlCisgICAgICAgICAg
ICAgICAgLy8gdG8gcmVtb3ZlIGEgbGl2ZSAgICAgdmFsdWUgZnJvbSB0aGUgaGVhZC4KKyAgICAg
ICAgICAgICAgICAvLyBXZSByZW1vdmUgYWxsIHRoZSB2YWx1ZXMgd2UgYWxyZWFkeSBrbmV3IGFi
b3V0IHNvIHRoYXQgd2Ugb25seSBoYXZlIHRvIGRlYWwgd2l0aAorICAgICAgICAgICAgICAgIC8v
IHdoYXQgaXMgbmV3IGluIExpdmVBdEhlYWQuCisgICAgICAgICAgICAgICAgaWYgKG1fd29ya3Nl
dC5ncC5zaXplKCkgPT0gbGl2ZUF0SGVhZC5ncC5zaXplKCkpCisgICAgICAgICAgICAgICAgICAg
IG1fd29ya3NldC5ncC5jbGVhcigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxpdmVHUEF0SGVhZCA6IGxpdmVBdEhlYWQuZ3ApCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX3dvcmtzZXQuZ3AucmVtb3ZlKGxpdmVHUEF0SGVhZCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX3dvcmtzZXQuZnAuc2l6
ZSgpID09IGxpdmVBdEhlYWQuZnAuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBtX3dvcmtz
ZXQuZnAuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBsaXZlRlBBdEhlYWQgOiBsaXZlQXRIZWFkLmZwKQorICAgICAgICAg
ICAgICAgICAgICAgICAgbV93b3Jrc2V0LmZwLnJlbW92ZShsaXZlRlBBdEhlYWQpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtX3dvcmtzZXQuZ3AuaXNFbXB0eSgp
ICYmIG1fd29ya3NldC5mcC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZC5ncC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0
SGVhZC5ncC5zaXplKCkgKyBtX3dvcmtzZXQuZ3Auc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogbV93b3Jrc2V0LmdwKQorICAgICAgICAgICAgICAgICAg
ICBsaXZlQXRIZWFkLmdwLnVuY2hlY2tlZEFwcGVuZChuZXdWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgbGl2ZUF0SGVhZC5mcC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0SGVhZC5mcC5zaXplKCkgKyBt
X3dvcmtzZXQuZnAuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5ld1Zh
bHVlIDogbV93b3Jrc2V0LmZwKQorICAgICAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLmZwLnVu
Y2hlY2tlZEFwcGVuZChuZXdWYWx1ZSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7CisgICAgICAgICAgICAg
ICAgICAgIExpdmVBdFRhaWwmIGxpdmVBdFRhaWwgPSBtX2xpdmVBdFRhaWxbcHJlZGVjZXNzb3Jd
OworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogbV93b3Jrc2V0
LmdwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGl2ZUF0VGFpbC5ncC5hZGQobmV3
VmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpcnR5QmxvY2tzLnF1
aWNrU2V0KHByZWRlY2Vzc29yLT5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1
ZSA6IG1fd29ya3NldC5mcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVBdFRh
aWwuZnAuYWRkKG5ld1ZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChk
aXJ0eUJsb2Nrcy5xdWlja1NldChwcmVkZWNlc3Nvci0+aW5kZXgoKSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNh
bGN1bGF0b3IgaGFzIHRvIGJlIHJ1biBpbiByZXZlcnNlLgorICAgIGNsYXNzIExvY2FsQ2FsYyB7
CisgICAgcHVibGljOgorICAgICAgICBMb2NhbENhbGMoVG1wTGl2ZW5lc3MmIGxpdmVuZXNzLCBC
YXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV93b3Jrc2V0KGxpdmVuZXNzLm1fd29y
a3NldCkKKyAgICAgICAgICAgICwgbV9ibG9jayhibG9jaykKKyAgICAgICAgeworICAgICAgICAg
ICAgTGl2ZUF0VGFpbCYgbGl2ZUF0VGFpbCA9IGxpdmVuZXNzLm1fbGl2ZUF0VGFpbFtibG9ja107
CisgICAgICAgICAgICBtX3dvcmtzZXQuZ3AuY2xlYXIoKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgZ3BUbXAgOiBsaXZlQXRUYWlsLmdwKQorICAgICAgICAgICAgICAgIG1fd29ya3NldC5n
cC5hZGQoZ3BUbXApOworICAgICAgICAgICAgbV93b3Jrc2V0LmZwLmNsZWFyKCk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGZwVG1wIDogbGl2ZUF0VGFpbC5mcCkKKyAgICAgICAgICAgICAg
ICBtX3dvcmtzZXQuZnAuYWRkKGZwVG1wKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRl
PEFyZzo6VHlwZSB0eXBlPgorICAgICAgICBzdHJ1Y3QgSXRlcmF0b3IgeworICAgICAgICAgICAg
SXRlcmF0b3IoSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+Ojpjb25zdF9pdGVy
YXRvciBzcGFyY2VTZXRJdGVyYXRvcikKKyAgICAgICAgICAgICAgICA6IG1fc3BhcmNlU2V0SXRl
cmF0b3Ioc3BhcmNlU2V0SXRlcmF0b3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICArK21fc3BhcmNlU2V0SXRlcmF0b3I7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUbXAgb3BlcmF0b3IqKCkgY29u
c3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBw
ZXI8dHlwZT46OnRtcEZyb21BYnNvbHV0ZUluZGV4KCptX3NwYXJjZVNldEl0ZXJhdG9yKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9y
JiBvdGhlcikgeyByZXR1cm4gbV9zcGFyY2VTZXRJdGVyYXRvciA9PSBvdGhlci5tX3NwYXJjZVNl
dEl0ZXJhdG9yOyB9CisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3Im
IG90aGVyKSB7IHJldHVybiBtX3NwYXJjZVNldEl0ZXJhdG9yICE9IG90aGVyLm1fc3BhcmNlU2V0
SXRlcmF0b3I7IH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSW5kZXhTcGFyc2VT
ZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+Ojpjb25zdF9pdGVyYXRvciBtX3NwYXJjZVNldEl0ZXJh
dG9yOworICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgorICAg
ICAgICBzdHJ1Y3QgSXRlcmFibGVUbXAgeworICAgICAgICAgICAgSXRlcmFibGVUbXAoY29uc3Qg
SW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBzcGFyc2VTZXQpCisgICAgICAg
ICAgICAgICAgOiBtX3NwYXJzZVNldChzcGFyc2VTZXQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIEl0ZXJhdG9yPHR5cGU+IGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gSXRlcmF0b3I8dHlwZT4obV9zcGFyc2VTZXQuYmVnaW4oKSk7IH0KKyAgICAgICAgICAgIEl0
ZXJhdG9yPHR5cGU+IGVuZCgpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yPHR5cGU+KG1fc3BhcnNl
U2V0LmVuZCgpKTsgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBJbmRl
eFNwYXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIG1fc3BhcnNlU2V0OworICAgICAgICB9
OworCisgICAgICAgIHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgorICAgICAgICBJdGVyYWJsZVRt
cDx0eXBlPiBsaXZlVG1wKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUg
PT0gQXJnOjpHUCkKKyAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmFibGVUbXA8dHlwZT4obV93
b3Jrc2V0LmdwKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYWJsZVRtcDx0eXBlPihtX3dvcmtz
ZXQuZnApOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBleGVjdXRlKHVuc2lnbmVkIGluc3RJ
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KGlu
c3RJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBkZWYn
cy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBbdGhpc10g
KFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHRtcC5pc0FsaXZlKCkpOworCisgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgVG1wTGl2ZW5lc3M6
OnJlbW92ZUZyb21TZXQodG1wLCB0eXBlLCBtX3dvcmtzZXQpOworICAgICAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICAvLyBUaGVuIGhhbmRsZSB1c2Uncy4KKyAgICAgICAgICAgIGluc3Qu
Zm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRtcCYgdG1wLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNF
YXJseVVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcExpdmVuZXNzOjphZGRU
b1NldCh0bXAsIHR5cGUsIG1fd29ya3NldCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgIC8vIEFuZCBmaW5hbGx5LCBoYW5kbGUgdGhlIGxhdGUgdXNlJ3Mgb2YgdGhlIHByZXZp
b3VzIGluc3RydWN0aW9uLgorICAgICAgICAgICAgaWYgKGluc3RJbmRleCkgeworICAgICAgICAg
ICAgICAgIEluc3QmIHByZXZJbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4IC0gMSk7CisKKyAg
ICAgICAgICAgICAgICBwcmV2SW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgICAgICBb
dGhpc10gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZVVzZShyb2xlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUbXBMaXZlbmVzczo6YWRkVG9TZXQodG1wLCB0eXBlLCBtX3dvcmtz
ZXQpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgVG1wTGl2ZW5lc3M6OldvcmtzZXQmIG1fd29ya3NldDsK
KyAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICB9OworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBMb2NhbENhbGM7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZXQ+CisgICAg
aW5saW5lIHN0YXRpYyB2b2lkIGFkZFRvU2V0KFRtcCB0bXAsIEFyZzo6VHlwZSB0eXBlLCBTZXQm
IHNldHMpCisgICAgeworICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQKQorICAgICAgICAgICAg
c2V0cy5ncC5hZGQoQWJzb2x1dGVUbXBNYXBwZXI8QXJnOjpHUD46OmFic29sdXRlSW5kZXgodG1w
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldHMuZnAuYWRkKEFic29sdXRlVG1wTWFw
cGVyPEFyZzo6RlA+OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFNldD4KKyAgICBpbmxpbmUgc3RhdGljIHZvaWQgcmVtb3ZlRnJvbVNldChUbXAg
dG1wLCBBcmc6OlR5cGUgdHlwZSwgU2V0JiBzZXRzKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUg
PT0gQXJnOjpHUCkKKyAgICAgICAgICAgIHNldHMuZ3AucmVtb3ZlKEFic29sdXRlVG1wTWFwcGVy
PEFyZzo6R1A+OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzZXRzLmZwLnJlbW92ZShBYnNvbHV0ZVRtcE1hcHBlcjxBcmc6OkZQPjo6YWJzb2x1dGVJbmRl
eCh0bXApKTsKKyAgICB9CisKKyAgICBzdHJ1Y3QgV29ya3NldCB7CisgICAgICAgIFdvcmtzZXQo
Q29kZSYgY29kZSkKKyAgICAgICAgICAgIDogZ3AoQWJzb2x1dGVUbXBNYXBwZXI8QXJnOjpHUD46
OmFic29sdXRlSW5kZXgoVG1wOjpncFRtcEZvckluZGV4KGNvZGUubnVtVG1wcyhBcmc6OkdQKSkp
KQorICAgICAgICAgICAgLCBmcChBYnNvbHV0ZVRtcE1hcHBlcjxBcmc6OkZQPjo6YWJzb2x1dGVJ
bmRleChUbXA6OmZwVG1wRm9ySW5kZXgoY29kZS5udW1UbXBzKEFyZzo6RlApKSkpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJm
bG93PiBncDsKKyAgICAgICAgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IGZw
OworICAgIH07CisgICAgV29ya3NldCBtX3dvcmtzZXQ7CisKKyAgICBzdHJ1Y3QgTGl2ZUF0SGVh
ZCB7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gZ3A7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gZnA7CisgICAgfTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBMaXZlQXRIZWFkPiBtX2xp
dmVBdEhlYWQ7CisKKyAgICBzdHJ1Y3QgTGl2ZUF0VGFpbCB7CisgICAgICAgIEhhc2hTZXQ8dW5z
aWduZWQ+IGdwOworICAgICAgICBIYXNoU2V0PHVuc2lnbmVkPiBmcDsKKyAgICB9OworICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIExpdmVBdFRhaWw+IG1fbGl2ZUF0VGFpbDsKK307CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBBaXJUbXBMaXZlbmVzc19oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGQyYjhmYzhhNDQzMTI0NzlkYjY0YTY2Y2ZmYzllMmE4MzI3ZjQ4
ZjAuLmMyOGExMGRjODQ1NmZhYzkwN2FiMDkwYzJlNGMzNmUxYjljMzFiNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODYsNiArODYsNyBAQAogCQkxRkE0
N0M4QjE1MjUwMkRBMDA1NjhEMUIgLyogV2ViQ29yZVRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUZBNDdDODkxNTI1MDJEQTAwNTY4RDFCIC8q
IFdlYkNvcmVUaHJlYWQuaCAqLzsgfTsKIAkJMjYxNDdCMEExNUREQ0NEQzAwRERCOTA3IC8qIElu
dGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI2MTQ3QjA4MTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJp
bmdDb252ZXJzaW9uLmggKi87IH07CiAJCTI2Mjk5QjZFMTdBOUU1QjgwMEFERUJFNSAvKiBSZWYu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2Mjk5QjZE
MTdBOUU1QjgwMEFERUJFNSAvKiBSZWYuaCAqLzsgfTsKKwkJMjY4NEQ0MzYxQzAwMEQ0MDAwODFE
NjYzIC8qIEluZGV4U3BhcnNlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNjg0RDQzNTFDMDAwRDQwMDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VTZXQu
aCAqLzsgfTsKIAkJMkMwNTM4NTQxNUJDODE5MDAwRjIxQjk2IC8qIEdyZWdvcmlhbkRhdGVUaW1l
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQzA1Mzg1
MzE1QkM4MTkwMDBGMjFCOTYgLyogR3JlZ29yaWFuRGF0ZVRpbWUuaCAqLzsgfTsKIAkJMkNDRDg5
MkExNUMwMzkwMjAwMjg1MDgzIC8qIEdyZWdvcmlhbkRhdGVUaW1lLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDQ0Q4OTI5MTVDMDM5MDIwMDI4NTA4
MyAvKiBHcmVnb3JpYW5EYXRlVGltZS5jcHAgKi87IH07CiAJCTJDREVEMEVGMTgxMTVDMzgwMDRE
QkE3MCAvKiBSdW5Mb29wQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkNERUQwRUUxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgKi87
IH07CkBAIC0zODYsNiArMzg3LDcgQEAKIAkJMUZBNDdDODkxNTI1MDJEQTAwNTY4RDFCIC8qIFdl
YkNvcmVUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVRo
cmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjE0N0IwODE1RERDQ0RDMDBE
REI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTI2Mjk5QjZEMTdBOUU1QjgwMEFERUJFNSAvKiBSZWYuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTI2ODRENDM1MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJzZVNldC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleFNwYXJzZVNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyQzA1Mzg1MzE1QkM4MTkwMDBGMjFCOTYgLyogR3JlZ29yaWFu
RGF0ZVRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JlZ29yaWFuRGF0
ZVRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkNDRDg5MjkxNUMwMzkwMjAw
Mjg1MDgzIC8qIEdyZWdvcmlhbkRhdGVUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdyZWdvcmlhbkRhdGVUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkNERUQwRUUxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdW5Mb29wQ0YuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODAxLDYgKzgwMyw3IEBACiAJCQkJQThBNDcyQjkxNTFBODI1
QTAwNDEyM0ZGIC8qIEhhc2hUYWJsZS5oICovLAogCQkJCUE4QTQ3MkJBMTUxQTgyNUEwMDQxMjNG
RiAvKiBIYXNoVHJhaXRzLmggKi8sCiAJCQkJQThBNDcyQkIxNTFBODI1QTAwNDEyM0ZGIC8qIEhl
eE51bWJlci5oICovLAorCQkJCTI2ODRENDM1MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJz
ZVNldC5oICovLAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCAq
LywKIAkJCQlBNzBEQTA4MjE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggKi8sCiAJCQkJ
N0NERDdGRjcxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCAqLywKQEAgLTEy
MjksNiArMTIzMiw3IEBACiAJCQkJQTc0ODc0NTMxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJh
Y3Rlckhhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDI2MTUxQTgyNUIwMDQxMjNGRiAv
KiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MjgxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0YWNrQm91bmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNjg0RDQzNjFDMDAwRDQwMDA4
MUQ2NjMgLyogSW5kZXhTcGFyc2VTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFREFDRDNFMTYz
MEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQy
OTE1MUE4MjVCMDA0MTIzRkYgLyogU3RhdGljQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQyQTE1MUE4MjVCMDA0MTIzRkYgLyogU3RkTGliRXh0cmFzLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjNDM2NTZhZmMyMTY5NzE1
MDBjYzg3ZTM3OTQ4MWNkOTRjZjY3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9JbmRleFNwYXJzZVNldC5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbmRleFNwYXJzZVNldF9oCisjZGVm
aW5lIEluZGV4U3BhcnNlU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKKy8vIEluZGV4U3BhcnNlU2V0IGlzIGFuIGVmZmljaWVudCBzZXQgb2YgaW50
ZWdlcnMgdGhhdCBjYW4gb25seSBiZSB2YWx1ZWQKKy8vIGJldHdlZW4gemVybyBhbmQgc2l6ZSgp
IC0gMS4KKy8vCisvLyBUaGUgaW1wbGVtZW50YXRpb24gaXMgdXNpbmcgQnJpZ2dzIFNwYXJzZSBT
ZXQgcmVwcmVzZW50YXRpb24uIFdlIGFsbG9jYXRlCisvLyBtZW1vcnkgZnJvbSAwIHRvIHNpemUo
KSAtIDEgdG8gZG8gbWFwcGluZyBpbiBPKDEpLCBidXQgd2UgbmV2ZXIgaW5pdGlhbGl6ZQorLy8g
dGhhdCBtZW1vcnkuIFdoZW4gYWRkaW5nL3JlbW92aW5nIHZhbHVlcyB0byB0aGUgc2V0LCB0aGV5
IGFyZSBhZGRlZCBpbiBhIGxpc3QKKy8vIGFuZCB0aGUgY29ycmVzcG9uZGluZyBidWNrZXQgaXMg
aW5pdGlhbGl6ZWQgdG8gdGhlIHBvc2l0aW9uIGluIHRoZSBsaXN0LgorLy8KKy8vIFRoZSBhc3N1
bXB0aW9uIGhlcmUgaXMgdGhhdCB3ZSBvbmx5IG5lZWQgYSBzcGFyc2Ugc3Vic2V0IG9mIG51bWJl
ciBsaXZlIGF0IGFueQorLy8gdGltZS4KKwordGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyID0gQ3Jhc2hPbk92ZXJmbG93PgorY2xhc3MgSW5kZXhTcGFyc2VTZXQgeworICAgIHR5cGVk
ZWYgVmVjdG9yPHVuc2lnbmVkLCAwLCBPdmVyZmxvd0hhbmRsZXI+IFZhbHVlTGlzdDsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBJbmRleFNwYXJzZVNldCh1bnNpZ25lZCBtYXhWYWx1ZSk7CisKKyAg
ICB2b2lkIGFkZCh1bnNpZ25lZCk7CisgICAgdm9pZCByZW1vdmUodW5zaWduZWQpOworICAgIHZv
aWQgY2xlYXIoKTsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdDsKKyAgICBib29sIGlzRW1w
dHkoKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkKSBjb25zdDsKKworICAgIHR5
cGVkZWYgdHlwZW5hbWUgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsK
KyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0OworICAgIGNvbnN0X2l0ZXJhdG9yIGVu
ZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFZlY3Rvcjx1bnNpZ25lZCwgMCwgT3ZlcmZsb3dI
YW5kbGVyLCAxPiBtX21hcDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZs
b3dIYW5kbGVyPjo6SW5kZXhTcGFyc2VTZXQodW5zaWduZWQgbWF4VmFsdWUpCit7CisgICAgbV9t
YXAucmVzaXplKG1heFZhbHVlICsgMSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KK2lubGluZSB2b2lkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmFk
ZCh1bnNpZ25lZCB2YWx1ZSkKK3sKKyAgICBpZiAoY29udGFpbnModmFsdWUpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB1bnNpZ25lZCBuZXdQb3NpdGlvbiA9IG1fdmFsdWVzLnNpemUoKTsKKyAg
ICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworICAgIG1fbWFwW3ZhbHVlXSA9IG5ld1Bvc2l0aW9u
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgdm9pZCBJ
bmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUodW5zaWduZWQgdmFsdWUpCit7
CisgICAgdW5zaWduZWQgcG9zaXRpb24gPSBtX21hcFt2YWx1ZV07CisgICAgaWYgKHBvc2l0aW9u
ID49IG1fdmFsdWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fdmFsdWVz
W3Bvc2l0aW9uXSA9PSB2YWx1ZSkgeworICAgICAgICB1bnNpZ25lZCBsYXN0VmFsdWUgPSBtX3Zh
bHVlcy5sYXN0KCk7CisgICAgICAgIG1fdmFsdWVzW3Bvc2l0aW9uXSA9IGxhc3RWYWx1ZTsKKyAg
ICAgICAgbV9tYXBbbGFzdFZhbHVlXSA9IHBvc2l0aW9uOworICAgICAgICBtX3ZhbHVlcy5yZW1v
dmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
Cit2b2lkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmNsZWFyKCkKK3sKKyAgICBt
X3ZhbHVlcy5yZXNpemUoMCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
cj4KK3Vuc2lnbmVkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnNpemUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ZhbHVlcy5zaXplKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlcj4KK2Jvb2wgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6
aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFzaXplKCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2Jvb2wgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5k
bGVyPjo6Y29udGFpbnModW5zaWduZWQgdmFsdWUpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgcG9z
aXRpb24gPSBtX21hcFt2YWx1ZV07CisgICAgaWYgKHBvc2l0aW9uID49IG1fdmFsdWVzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fdmFsdWVzW3Bvc2l0aW9u
XSA9PSB2YWx1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgorYXV0
byBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpiZWdpbigpIGNvbnN0IC0+IGNvbnN0
X2l0ZXJhdG9yCit7CisgICAgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2F1dG8gSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dI
YW5kbGVyPjo6ZW5kKCkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKK3sKKyAgICByZXR1cm4gbV92
YWx1ZXMuZW5kKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkluZGV4
U3BhcnNlU2V0OworCisjZW5kaWYgLy8gSW5kZXhTcGFyc2VTZXRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266309</attachid>
            <date>2015-11-30 17:42:11 -0800</date>
            <delta_ts>2015-11-30 18:08:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151556-20151130174150.patch</filename>
            <type>text/plain</type>
            <size>69763</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyODQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MDI5YWEwNzVhMzdkMmRhYzViZTQzYzU0YmMzYmI1Mjk0YmFlY2EwLi42MjVkYWUzYjY2MWQ1Njcw
MGMwM2ZkNTg4NGY2ODliYTEyZTk3YzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NiBAQAorMjAxNS0xMS0zMCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBTcGVlZCB1cCBBaXIgTGl2ZW5lc3MgQW5hbHlzaXMgb24g
VG1wcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUx
NTU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGl2
ZW5lc3MgQW5hbHlzaXMgc2NhbGVzIHBvb3JseSBvbiBsYXJnZSBncmFwaHMgbGlrZSB0aGUgb25l
cworICAgICAgICBnZW5lcmF0ZWQgYnkgdGVzdENvbXBsZXgoKS4KKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIGEgZmFzdGVyIG9mIExpdmVuZXNzIHVzaW5nIHRoZSBjb250aW51b3VzIGlu
ZGljZXMKKyAgICAgICAgb2YgdmFsdWVzIGluc3RlYWQgb2YgdGhlIHZhbHVlcyB0aGVtc2VsdmVz
LgorCisgICAgICAgIFRoZXJlIGFyZSB0d28gbWFpbiBhcmVhcyBvZiBpbXByb3ZlbWVudHM6Cisg
ICAgICAgIDEpIFJlZHVjZSB0aGUgY29zdCBvZiBkb2luZyBhIExvY2FsQ2FsYyBvdmVyIGEgQmFz
aWNCbG9jay4KKyAgICAgICAgMikgUmVkdWNlIGhvdyBtYW55IExvY2FsQ2FsYyBhcmUgbmVlZGVk
IHRvIGNvbnZlcmdlIHRvIGEgc29sdXRpb24uCisKKyAgICAgICAgTW9zdCBvZiB0aGUgY29zdHMg
b2YgTG9jYWxDYWxjIGFyZSBmcm9tIEhhc2hTZXQgbWFuaXB1bGF0aW9ucy4KKyAgICAgICAgVGhl
IEhhc2hTZXQgb3BlcmF0aW9ucyBhcmUgTygxKSBidXQgdGhlIGNvbnN0YW50IGlzIGxhcmdlIGVu
b3VnaAorICAgICAgICB0byBiZSBhIHByb2JsZW0uCisKKyAgICAgICAgSSB1c2VkIGEgc2ltaWxh
ciB0cmljayBhcyB0aGUgUmVnaXN0ZXIgQWxsb2NhdG9yIHRvIHJlbW92ZSBoYXNoaW5nCisgICAg
ICAgIGFuZCBjb2xsaXNpb24gaGFuZGxpbmc6IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgVG1w
IGlzIHVzZWQgYXMgYW4gaW5kZXgKKyAgICAgICAgaW50byBhIGZsYXQgYXJyYXkuCisKKyAgICAg
ICAgSSB1c2VkIEJyaWdncydzIFNwYXJzZSBTZXQgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBsb2Nh
bCBsaXZlIGluZm9ybWF0aW9uCisgICAgICAgIGF0IGVhY2ggaW5zdHJ1Y3Rpb24uIEl0IGhhcyBn
cmVhdCBwcm9wZXJ0aWVzIGZvciBkb2luZyB0aGUgbG9jYWwgY2FsY3VsYXRpb246CisgICAgICAg
IC1ObyBtZW1vcnkgcmVhbGxvY2F0aW9uLgorICAgICAgICAtTygxKSBhZGQoKSBhbmQgcmVtb3Zl
KCkgd2l0aCBhIHNtYWxsIGNvbnN0YW50LgorICAgICAgICAtU3RyaWN0IE8obikgaXRlcmF0aW9u
LgorICAgICAgICAtTygxKSBjbGVhcigpLgorCisgICAgICAgIFRoZSB2YWx1ZXMgTGl2ZS1BdC1I
ZWFkIGFyZSBub3cgc3RvcmVkIGludG8gYSBWZWN0b3IuIFRoZSBTcGFyc2UgU2V0CisgICAgICAg
IGlzIHVzZWQgdG8gbWFpbnRhaW4gdGhlIFRtcCB1bmlxdWVuZXNzLgorCisgICAgICAgIFdoZW4g
Zm9yd2FyZGluZyBuZXcgbGl2ZW5lc3MgYXQgaGVhZCB0byB0aGUgcHJlZGVjZXNzb3IsIEkgc3Rh
cnQgYnkgcmVtb3ZpbmcKKyAgICAgICAgZXZlcnl0aGluZyB0aGF0IHdhcyBhbHJlYWR5IGluIGxp
dmUtYXQtaGVhZC4gV2UgY2FuIGFzc3VtZSB0aGF0IGFueSB2YWx1ZQorICAgICAgICBpbiB0aGF0
IGxpc3QgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgcHJlZGVjZXNzb3JzLgorICAgICAg
ICBUaGlzIGxlYXZlcyB1cyB3aXRoIGEgc21hbGwtaXNoIG51bWJlciBvZiBUbXBzIHRvIGFkZCB0
byBsaXZlLWF0LWhlYWQKKyAgICAgICAgYW5kIHRvIHRoZSBwcmVkZWNlc3NvcnMuCisKKyAgICAg
ICAgVGhlIHNwZWVkIHVwIGNvbnZlcmdlbmNlLCBJIHVzZWQgdGhlIHNhbWUgdHJpY2sgYXMgREZH
J3MgbGl2ZW5lc3M6IGtlZXAKKyAgICAgICAgYSBzZXQgb2YgZGlydHkgYmxvY2tzIHRvIHByb2Nl
c3MuIEluIHByYWN0aWNlLCBhbGwgdGhlIGJsb2NrcyB3aXRob3V0CisgICAgICAgIGJhY2stZWRn
ZXMgY29udmVyZ2UgcXVpY2tseSwgYW5kIHdlIG9ubHkgcHJvcGFnYXRlIGxpdmVuZXNzIGFzIG5l
ZWRlZC4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgdGhlIHRpbWUgdGFrZW4gYnkgInRl
c3RDb21wbGV4KDY0LCAzODQpIiBieSBhbm90aGVyIDUlLgorCisgICAgICAgIFRoZSByZW1haW5p
bmcgdGhpbmdzIHRvIGRvIGZvciBMaXZlbmVzcyBhcmU6CisgICAgICAgIC1Ta2lwIHRoZSBmaXJz
dCBibG9jayBmb3IgdGhlIGZpeCBwb2ludCAoaXQgaXMgb2Z0ZW4gbGFyZ2UgYW5kIGRvaW5nIGEg
bG9jYWwKKyAgICAgICAgIGNhbGMgb24gaXQgaXMgdXNlbGVzcykuCisgICAgICAgIC1GaW5kIGEg
YmV0dGVyIERhdGEgU3RydWN0dXJlIGZvciBsaXZlLWF0LXRhaWwgKHVwZGF0aW5nIHRoZSBIYXNo
U2V0IHRha2VzCisgICAgICAgICA+IDUwJSBvZiB0aGUgdG90YWwgY29udmVyZ2VuY2UgdGltZSku
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpi
dWlsZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
QWxsb2NhdG9yOjpnZXRBbGlhcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpnZXRBbGlhc1doZW5TcGlsbGluZyk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjphbGxv
Y2F0ZWRSZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZ0FsbG9jYXRvcjo6dG1wQXJyYXlTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRl
cmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OmluaXRpYWxpemVEZWdyZWVzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6
OmFkZEVkZ2VzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxl
c2NpbmdBbGxvY2F0b3I6OmFkZEVkZ2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRl
ZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6bWFrZVdvcmtMaXN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OnNpbXBsaWZ5
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxv
Y2F0b3I6OmZvckVhY2hBZGphY2VudCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpoYXNCZWVuU2ltcGxpZmllZCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpkZWNy
ZW1lbnREZWdyZWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZ0FsbG9jYXRvcjo6Zm9yRWFjaE5vZGVNb3Zlcyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjppc01vdmVSZWxhdGVkKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0
b3I6OmVuYWJsZU1vdmVzT25WYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpwcmVjb2xvcmVkQ29hbGVzY2luZ0hldXJpc3Rp
Yyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxs
b2NhdG9yOjpjb25zZXJ2YXRpdmVIZXVyaXN0aWMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6YWRkV29ya0xpc3QpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6Y29t
YmluZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
QWxsb2NhdG9yOjpmcmVlemVNb3Zlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpzZWxlY3RTcGlsbCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjphc3NpZ25Db2xv
cnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0Fs
bG9jYXRvcjo6ZHVtcEludGVyZmVyZW5jZUdyYXBoSW5Eb3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjppdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uVHlwZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6Oml0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QWJzb2x1dGVUbXBIZWxwZXI8QXJnOjpHUD46OmFic29sdXRlSW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnNvbHV0ZVRtcEhlbHBlcjxBcmc6OkdQPjo6dG1wRnJv
bUFic29sdXRlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnNvbHV0
ZVRtcEhlbHBlcjxBcmc6OkZQPjo6YWJzb2x1dGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFic29sdXRlVG1wSGVscGVyPEFyZzo6RlA+Ojp0bXBGcm9tQWJzb2x1dGVJ
bmRleCk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAg
ICAgKiBiMy9haXIvQWlyVG1wSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnNv
bHV0ZVRtcE1hcHBlcjxBcmc6OkdQPjo6YWJzb2x1dGVJbmRleCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFic29sdXRlVG1wTWFwcGVyPEFyZzo6R1A+Ojp0bXBGcm9tQWJzb2x1dGVJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic29sdXRlVG1wTWFwcGVyPEFyZzo6RlA+OjphYnNv
bHV0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzb2x1dGVUbXBNYXBwZXI8QXJn
OjpGUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KToKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5l
c3MuaDogQWRkZWQuCisKIDIwMTUtMTEtMzAgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIFJlZmFjdG9yIHRoZSBvcF9hZGQsIG9wX3N1YiwgYW5kIG9wX211bCBzbmlw
cGV0cyB0byB1c2UgdGhlIFNuaXBwZXRPcGVyYW5kIGNsYXNzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA4NjQyZmMxMzRkNTYy
MDAwM2YyODg1NmFhMmFlMzQ0NjU0ZjU5MzM5Li5jODNiNTMxOTdlYTZhZjZiMzYyOTEwZWJmOTFl
MTQxOTAyZjUwM2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE1LTExLTMwICBCZW5qYW1pbiBQ
b3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIFNwZWVkIHVwIEFp
ciBMaXZlbmVzcyBBbmFseXNpcyBvbiBUbXBzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHd0Zi9JbmRleFNwYXJzZVNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6SW5kZXhT
cGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6SW5kZXhTcGFyc2VTZXQpOgorICAgICAgICAoV1RG
OjpJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjphZGQpOgorICAgICAgICAoV1RGOjpJ
bmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpJ
bmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpjbGVhcik6CisgICAgICAgIChXVEY6Oklu
ZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnNpemUpOgorICAgICAgICAoV1RGOjpJbmRl
eFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+Ojppc0VtcHR5KToKKyAgICAgICAgKFdURjo6SW5k
ZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6Y29udGFpbnMpOgorCiAyMDE1LTExLTMwICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIEdldCByaWQg
b2YgdGhlICFVU0UoQVNZTkNfTlNURVhUSU5QVVRDTElFTlQpIGNvZGVwYXRoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQzNDlhNDllZTg2NjUyMzVjN2NlNWQyOGE2NjE1MTFmZjk2
YzYwYWYuLjUzNWYxNmUzM2E1ZmI5NzNiMzg3MmM5MDAwMjJhNGFmNGJmMjYxYWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04MTQsNyArODE0LDYgQEAKIAkJMEZFQzg1N0YxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3Bw
ICovOyB9OwogCQkwRkVDODU4MDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUIxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckluc3QuaCAqLzsgfTsKIAkJMEZFQzg1ODExQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCAqLzsg
fTsKLQkJMEZFQzg1ODIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCAqLzsgfTsKIAkJMEZFQzg1ODMxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclBoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3Bw
ICovOyB9OwogCQkwRkVDODU4NDFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLzsgfTsKIAkJMEZFQzg1ODUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clJlZ2lzdGVyUHJpb3JpdHkuY3BwICovOyB9OwpAQCAtMTA4OCw2ICsxMDg3LDcgQEAKIAkJMjYw
MEI1QTcxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYg
LyogSlNTdHJpbmdKb2luZXIuaCAqLzsgfTsKIAkJMjY3MThCQTQxQkU5OUY3ODAwNTIwMTdCIC8q
IEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2NzE4QkEyMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgKi87IH07CiAJCTI2NzE4QkE1MUJFOTlGNzgw
MDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY3MThCQTMxQkU5OUY3ODAwNTIwMTdC
IC8qIEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmggKi87IH07CisJCTI2ODRENDM4MUMw
MDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjY4NEQ0MzcxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVu
ZXNzLmggKi87IH07CiAJCTI2OUQ2MzZFMUJGQkU1RDEwMDEwMUIxRCAvKiBGVExCM091dHB1dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY5RDYzNkQx
QkZCRTVEMDAwMTAxQjFEIC8qIEZUTEIzT3V0cHV0LmggKi87IH07CiAJCTI2QkI1NzYwMUJGQzQz
MjgwMDVGMTJFQiAvKiBGVExCM091dHB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNkJCNTc1RjFCRkM0MzI4MDA1RjEyRUIgLyogRlRMQjNPdXRw
dXQuY3BwICovOyB9OwogCQkyQTA1QUJENTE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJBMDVBQkQzMTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwICovOyB9OwpAQCAtMjg5NSw3ICsyODk1LDYgQEAKIAkJMEZFQzg1NUExQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckluc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlySW5zdC5jcHA7IHBhdGggPSBiMy9haXIvQWlySW5zdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc3QuaDsgcGF0aCA9IGIzL2Fpci9B
aXJJbnN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NTVDMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJJbnN0SW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0Fpckluc3RJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJMaXZlbmVz
cy5oOyBwYXRoID0gYjMvYWlyL0FpckxpdmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclBoYXNlU2NvcGUuY3BwOyBwYXRo
ID0gYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmg7IHBhdGggPSBiMy9haXIvQWly
UGhhc2VTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODU2MDFCREFD
REM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJSZWdpc3RlclByaW9yaXR5LmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTMxMjQsNiArMzEyMyw3IEBACiAJCTI2NDA5MUZBMUJFMkZENDEwMDY4NERCMiAvKiBBaXJPcGNv
ZGUub3Bjb2RlcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IG5hbWUgPSBBaXJPcGNvZGUub3Bjb2RlczsgcGF0aCA9IGIzL2Fpci9BaXJPcGNv
ZGUub3Bjb2Rlczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjY3MThCQTIxQkU5OUY3
ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBB
aXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oOyBwYXRoID0gYjMvYWlyL0Fp
ckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTI2ODRENDM3MUMwMDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJMaXZlbmVzcy5oOyBwYXRoID0gYjMvYWlyL0Fpckxp
dmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2OUQ2MzZEMUJGQkU1RDAw
MDEwMUIxRCAvKiBGVExCM091dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGVExCM091dHB1dC5oOyBwYXRoID0gZnRsL0ZUTEIzT3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTI2QkI1NzVGMUJGQzQzMjgwMDVGMTJFQiAvKiBGVExCM091dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExCM091dHB1dC5jcHA7
IHBhdGggPSBmdGwvRlRMQjNPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyQTA1QUJEMzE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NjMxLDcgKzQ2MzEs
NyBAQAogCQkJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oICov
LAogCQkJCTI2NzE4QkEyMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZy5jcHAgKi8sCiAJCQkJMjY3MThCQTMxQkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmggKi8sCi0JCQkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckxpdmVuZXNzLmggKi8sCisJCQkJMjY4NEQ0MzcxQzAwMTYxQzAwODFENjYzIC8qIEFp
ckxpdmVuZXNzLmggKi8sCiAJCQkJMjY0MDkxRkExQkUyRkQ0MTAwNjg0REIyIC8qIEFpck9wY29k
ZS5vcGNvZGVzICovLAogCQkJCTBGQjM4NzhDMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuY3BwICovLAogCQkJCTBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJP
cHRpbWl6ZUJsb2NrT3JkZXIuaCAqLywKQEAgLTY2NzQsNyArNjY3NCw2IEBACiAJCQkJMEZFQzg1
N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMEZFQzg1ODIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODU4NDFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1ODYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJl
Z2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDU3MDNEMUJFNDVGMEEwMDYy
QTYyOSAvKiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTc2OTcs
NiArNzY5Niw3IEBACiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjExODY5N0I0MDA1NDAyNzkgLyogVGh1
bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDRDEzQTE3ODM3MDBGNUJB
MUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNjg0RDQzODFDMDAx
NjFDMDA4MUQ2NjMgLyogQWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU5ODk4
MTdDODZDNTgwMEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyRDRERTkxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUQ1MzcyNkYwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgKaW5kZXggNGJlM2MwMmU4YTJj
YzVhZTIxNWJjNTExMDY2ZGY2MWI3ODY4NzgyZS4uMjJmYzg1ODExOTcyM2NmNzlkNzBjZjBmYzU1
YzZkMTViNWI1MjQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5k
ZXhNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCkBAIC01
OCw2ICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5
LT5pbmRleCgpXTsKICAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1f
dmVjdG9yLmNsZWFyKCk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBWZWN0b3I8VmFsdWU+
IG1fdmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
bGxvY2F0ZVN0YWNrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVTdGFjay5jcHAKaW5kZXggMjA1YjU4NWZkN2M0MDA2ODJhNjI4MTkwNDQzOTllYjQwZmFhZjFh
YS4uNGY4ZjliNjMxNTM3YjVmYTgxMDMxYTQ1YzBlZTQ0ZjI2NDA3MjIwMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCkBAIC0xMzYs
MTYgKzEzNiwxNiBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICB9CiAKICAg
ICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBhbm9ueW1vdXMgc2xvdHMuCi0gICAgTGl2ZW5lc3M8U3Rh
Y2tTbG90Kj4gbGl2ZW5lc3MoY29kZSk7CisgICAgU3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3Mo
Y29kZSk7CiAgICAgSW5kZXhNYXA8U3RhY2tTbG90LCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRl
cmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKICAgICBWZWN0b3I8U3RhY2tTbG90
Kj4gc2xvdHM7CiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAg
ICBMaXZlbmVzczxTdGFja1Nsb3QqPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxv
Y2spOworICAgICAgICBTdGFja1Nsb3RMaXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZl
bmVzcywgYmxvY2spOwogCiAgICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdIChJbnN0JiBpbnN0
KSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJJ
bnRlcmZlcmluZzogIiwgcG9pbnRlckxpc3REdW1wKGxvY2FsQ2FsYy5saXZlKCkpLCAiXG4iKTsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmluZzogIiwgV1RGOjpwb2ludGVyTGlz
dER1bXAobG9jYWxDYWxjLmxpdmUoKSksICJcbiIpOwogCiAgICAgICAgICAgICBpbnN0LmZvckVh
Y2hBcmcoCiAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFy
Zzo6VHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAppbmRleCA1NGU2OGI1MzMxNjAy
MDE3ZDcwOTJhN2E3MDI3NGU3MWM4Nzg5MzE1Li42YWU2ODE3Yjg1NWEzYTlkZGVlY2UxMTcwMzdi
ZjE1MTk0OGVmZGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5o
IgogI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJBaXJUbXBJbmxp
bmVzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+CiAKQEAgLTc3LDc1ICs3OCwxMDAgQEAgc3RydWN0IE1vdmVJbnN0SGVscGVyPEFyZzo6
RlA+IHsKICAgICB9CiB9OwogCi0KLS8vIFRoZSBzcGVlZCBvZiB0aGUgYWxvY2F0b3IgZGVwZW5k
cyBkaXJlY3RseSBvbiBob3cgZmFzdCB3ZSBjYW4gcXVlcnkgaW5mb3JtYXRpb24gYXNzb2NpYXRl
ZCB3aXRoIGEgVG1wCi0vLyBhbmQvb3IgaXRzIG93bmVyc2hpcCB0byBhIHNldC4KLS8vCi0vLyBI
YXNoU2V0L0hhc2hNYXAgb3BlcmF0aW9ucyBhcmUgb3Zlcmx5IGV4cGVuc2l2ZSBmb3IgdGhhdC4K
LS8vCi0vLyBJbnN0ZWFkIG9mIGEgSGFzaCBzdHJ1Y3R1cmUsIFRtcCBhcmUgaW5kZXhlZCBkaXJl
Y3RseSBieSB2YWx1ZSBpbiBBcnJheXMuIFRoZSBpbnRlcm5hbCBpbnRlZ2VyIGlzIHVzZWQgYXMg
dGhlIGluZGV4Ci0vLyB0byByZWZlcmVuY2UgdGhlbSBxdWlja2x5LiBJbiBzb21lIHNldHMsIHdl
IGRvIG5vdCBjYXJlIGFib3V0IHRoZSBjb2xvcmVkIHJlZ3MsIHdlIHN0aWxsIGFsbG9jYXRlIHRo
ZSBtZW1vcnkgZm9yIHRoZW0KLS8vIGFuZCBqdXN0IGRvIG5vdCB1c2UgaXQuCiB0ZW1wbGF0ZTxB
cmc6OlR5cGUgdHlwZT4KLXN0cnVjdCBBYnNvbHV0ZVRtcEhlbHBlcjsKLQotdGVtcGxhdGU8Pgot
c3RydWN0IEFic29sdXRlVG1wSGVscGVyPEFyZzo6R1A+IHsKLSAgICBzdGF0aWMgdW5zaWduZWQg
YWJzb2x1dGVJbmRleChjb25zdCBUbXAmIHRtcCkKK2NsYXNzIEl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2lu
Z0FsbG9jYXRvcihDb2RlJiBjb2RlLCBjb25zdCBIYXNoU2V0PFRtcD4mIHVuc3BpbGxhYmxlVG1w
KQorICAgICAgICA6IG1fdW5zcGlsbGFibGVUbXAodW5zcGlsbGFibGVUbXApCisgICAgICAgICwg
bV9udW1iZXJPZlJlZ2lzdGVycyhyZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpLnNpemUoKSkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVCh0bXAuaXNHUCgpKTsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PGludD4odG1wLmludGVybmFsVmFsdWUoKSkgPiAwKTsKLSAgICAgICAgcmV0dXJuIHRtcC5p
bnRlcm5hbFZhbHVlKCk7CisgICAgICAgIGluaXRpYWxpemVEZWdyZWVzKGNvZGUpOworCisgICAg
ICAgIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSA9IHRoaXMtPnRtcEFycmF5U2l6ZShjb2RlKTsKKyAg
ICAgICAgbV9hZGphY2VuY3lMaXN0LnJlc2l6ZSh0bXBBcnJheVNpemUpOworICAgICAgICBtX21v
dmVMaXN0LnJlc2l6ZSh0bXBBcnJheVNpemUpOworICAgICAgICBtX2NvYWxlc2NlZFRtcHMucmVz
aXplKHRtcEFycmF5U2l6ZSk7CisgICAgICAgIG1faXNPblNlbGVjdFN0YWNrLmVuc3VyZVNpemUo
dG1wQXJyYXlTaXplKTsKKworICAgICAgICBidWlsZChjb2RlKTsKKyAgICAgICAgYWxsb2NhdGUo
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgYWJzb2x1dGVJbmRleCh1bnNpZ25lZCB0
bXBJbmRleCkKKyAgICBUbXAgZ2V0QWxpYXMoVG1wIHRtcCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBhYnNvbHV0ZUluZGV4KFRtcDo6Z3BUbXBGb3JJbmRleCh0bXBJbmRleCkpOworICAg
ICAgICBUbXAgYWxpYXMgPSB0bXA7CisgICAgICAgIHdoaWxlIChUbXAgbmV4dEFsaWFzID0gbV9j
b2FsZXNjZWRUbXBzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGFsaWFz
KV0pCisgICAgICAgICAgICBhbGlhcyA9IG5leHRBbGlhczsKKyAgICAgICAgcmV0dXJuIGFsaWFz
OwogICAgIH0KIAotICAgIHN0YXRpYyBUbXAgdG1wRnJvbUFic29sdXRlSW5kZXgodW5zaWduZWQg
dG1wSW5kZXgpCisgICAgVG1wIGdldEFsaWFzV2hlblNwaWxsaW5nKFRtcCB0bXApIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gVG1wOjp0bXBGb3JJbnRlcm5hbFZhbHVlKHRtcEluZGV4KTsK
KyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9zcGlsbGVkVG1wLmlzRW1wdHkoKSwgIlRo
aXMgZnVuY3Rpb24gaXMgb25seSB2YWxpZCBmb3IgY29hbGVzY2luZyBkdXJpbmcgc3BpbGxpbmcu
Iik7CisKKyAgICAgICAgaWYgKG1fY29hbGVzY2VkVG1wc0F0U3BpbGwuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHRtcDsKKworICAgICAgICBUbXAgYWxpYXMgPSB0bXA7CisgICAgICAg
IHdoaWxlIChUbXAgbmV4dEFsaWFzID0gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbFtBYnNvbHV0ZVRt
cE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhbGlhcyldKQorICAgICAgICAgICAgYWxpYXMg
PSBuZXh0QWxpYXM7CisKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9zcGlsbGVkVG1w
LmNvbnRhaW5zKHRtcCkgfHwgYWxpYXMgPT0gdG1wLCAiVGhlIGFsaWFzZXMgYXQgc3BpbGwgc2hv
dWxkIGFsd2F5cyBiZSBjb2xvcmFibGUuIFNvbWV0aGluZyB3ZW50IGhvcnJpYmx5IHdyb25nLiIp
OworCisgICAgICAgIHJldHVybiBhbGlhczsKICAgICB9Ci19OwogCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgQWJzb2x1dGVUbXBIZWxwZXI8QXJnOjpGUD4gewotICAgIHN0YXRpYyB1bnNpZ25lZCBhYnNv
bHV0ZUluZGV4KGNvbnN0IFRtcCYgdG1wKQorICAgIGNvbnN0IEhhc2hTZXQ8VG1wPiYgc3BpbGxl
ZFRtcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BpbGxlZFRtcDsgfQorICAgIFJlZyBhbGxvY2F0ZWRS
ZWcoVG1wIHRtcCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVCh0bXAuaXNGUCgpKTsKLSAg
ICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odG1wLmludGVybmFsVmFsdWUoKSkgPCAwKTsK
LSAgICAgICAgcmV0dXJuIC10bXAuaW50ZXJuYWxWYWx1ZSgpOworICAgICAgICBBU1NFUlQoIXRt
cC5pc1JlZygpKTsKKyAgICAgICAgQVNTRVJUKG1fY29sb3JlZFRtcC5zaXplKCkpOworICAgICAg
ICBBU1NFUlQodG1wLmlzR1AoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSk7CisKKyAgICAgICAgUmVn
IHJlZyA9IG1fY29sb3JlZFRtcFtBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRl
eCh0bXApXTsKKyAgICAgICAgaWYgKCFyZWcpIHsKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgY2Fy
ZSBhYm91dCBUbXBzIHRoYXQgaW50ZXJmZXJlLiBBIFRtcCB0aGF0IG5ldmVyIGludGVyZmVyZSB3
aXRoIGFueXRoaW5nCisgICAgICAgICAgICAvLyBjYW4gdGFrZSBhbnkgcmVnaXN0ZXIuCisgICAg
ICAgICAgICByZWcgPSByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpLmZpcnN0KCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHJlZzsKICAgICB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgYWJz
b2x1dGVJbmRleCh1bnNpZ25lZCB0bXBJbmRleCkKK3ByaXZhdGU6CisgICAgc3RhdGljIHVuc2ln
bmVkIHRtcEFycmF5U2l6ZShDb2RlJiBjb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFic29s
dXRlSW5kZXgoVG1wOjpmcFRtcEZvckluZGV4KHRtcEluZGV4KSk7CisgICAgICAgIHVuc2lnbmVk
IG51bVRtcHMgPSBjb2RlLm51bVRtcHModHlwZSk7CisgICAgICAgIHJldHVybiBBYnNvbHV0ZVRt
cE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChudW1UbXBzKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgVG1wIHRtcEZyb21BYnNvbHV0ZUluZGV4KHVuc2lnbmVkIHRtcEluZGV4KQorICAgIHZvaWQg
aW5pdGlhbGl6ZURlZ3JlZXMoQ29kZSYgY29kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBUbXA6
OnRtcEZvckludGVybmFsVmFsdWUoLXRtcEluZGV4KTsKKyAgICAgICAgdW5zaWduZWQgdG1wQXJy
YXlTaXplID0gdGhpcy0+dG1wQXJyYXlTaXplKGNvZGUpOworICAgICAgICBtX2RlZ3JlZXMucmVz
aXplKHRtcEFycmF5U2l6ZSk7CisKKyAgICAgICAgLy8gQWxsIHByZWNvbG9yZWQgcmVnaXN0ZXJz
IGhhdmUgIGFuICJpbmZpbml0ZSIgZGVncmVlLgorICAgICAgICB1bnNpZ25lZCBmaXJzdE5vblJl
Z0luZGV4ID0gQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoMCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaXJzdE5vblJlZ0luZGV4OyArK2kpCisgICAg
ICAgICAgICBtX2RlZ3JlZXNbaV0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCk7CisKKyAgICAgICAgYnplcm8obV9kZWdyZWVzLmRhdGEoKSArIGZpcnN0Tm9uUmVnSW5kZXgs
ICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAqIHNpemVvZih1bnNpZ25lZCkpOwog
ICAgIH0KLX07CiAKLXRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgotY2xhc3MgSXRlcmF0ZWRSZWdp
c3RlckNvYWxlc2NpbmdBbGxvY2F0b3IgewotcHVibGljOgotICAgIEl0ZXJhdGVkUmVnaXN0ZXJD
b2FsZXNjaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUsIGNvbnN0IEhhc2hTZXQ8VG1wPiYgdW5zcGls
bGFibGVUbXApCi0gICAgICAgIDogbV91bnNwaWxsYWJsZVRtcCh1bnNwaWxsYWJsZVRtcCkKLSAg
ICAgICAgLCBtX251bWJlck9mUmVnaXN0ZXJzKHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkuc2l6
ZSgpKQorICAgIHZvaWQgYnVpbGQoQ29kZSYgY29kZSkKICAgICB7Ci0gICAgICAgIGluaXRpYWxp
emVEZWdyZWVzKGNvZGUpOwotCi0gICAgICAgIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSA9IHRoaXMt
PnRtcEFycmF5U2l6ZShjb2RlKTsKLSAgICAgICAgbV9hZGphY2VuY3lMaXN0LnJlc2l6ZSh0bXBB
cnJheVNpemUpOwotICAgICAgICBtX21vdmVMaXN0LnJlc2l6ZSh0bXBBcnJheVNpemUpOwotICAg
ICAgICBtX2NvYWxlc2NlZFRtcHMucmVzaXplKHRtcEFycmF5U2l6ZSk7Ci0gICAgICAgIG1faXNP
blNlbGVjdFN0YWNrLmVuc3VyZVNpemUodG1wQXJyYXlTaXplKTsKKyAgICAgICAgVG1wTGl2ZW5l
c3M8dHlwZT4gbGl2ZW5lc3MoY29kZSk7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBjb2RlKSB7CisgICAgICAgICAgICB0eXBlbmFtZSBUbXBMaXZlbmVzczx0eXBlPjo6TG9jYWxD
YWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAg
ICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAg
SW5zdCogbmV4dEluc3QgPSBpbnN0SW5kZXggKyAxIDwgYmxvY2stPnNpemUoKSA/ICZibG9jay0+
YXQoaW5zdEluZGV4ICsgMSkgOiBudWxscHRyOworICAgICAgICAgICAgICAgIGJ1aWxkKGluc3Qs
IG5leHRJbnN0LCBsb2NhbENhbGMpOworICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRl
KGluc3RJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lk
IGJ1aWxkKEluc3QmIGluc3QsIEluc3QqIG5leHRJbnN0LCBjb25zdCBMaXZlbmVzczxUbXA+OjpM
b2NhbENhbGMmIGxvY2FsQ2FsYykKKyAgICB2b2lkIGJ1aWxkKEluc3QmIGluc3QsIEluc3QqIG5l
eHRJbnN0LCBjb25zdCB0eXBlbmFtZSBUbXBMaXZlbmVzczx0eXBlPjo6TG9jYWxDYWxjJiBsb2Nh
bENhbGMpCiAgICAgewogICAgICAgICBpbnN0LmZvckVhY2hUbXBXaXRoRXh0cmFDbG9iYmVyZWRS
ZWdzKAogICAgICAgICAgICAgbmV4dEluc3QsCkBAIC0xOTEsMTIgKzIxNywxMiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBtX2FjdGl2ZU1vdmVzLmVuc3VyZVNpemUobmV4dE1vdmVJbmRleCArIDEp
OwogCiAgICAgICAgICAgICBmb3IgKGNvbnN0IEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byYgbGlzdCA9IG1fbW92ZUxpc3RbQWJzb2x1dGVUbXBIZWxwZXI8dHlw
ZT46OmFic29sdXRlSW5kZXgoYXJnLnRtcCgpKV07CisgICAgICAgICAgICAgICAgYXV0byYgbGlz
dCA9IG1fbW92ZUxpc3RbQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoYXJn
LnRtcCgpKV07CiAgICAgICAgICAgICAgICAgbGlzdC5hZGQobmV4dE1vdmVJbmRleCk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoY29uc3QgVG1wJiBsaXZlVG1wIDogbG9jYWxD
YWxjLmxpdmUoKSkgewotICAgICAgICAgICAgICAgIGlmIChsaXZlVG1wICE9IHVzZVRtcCAmJiBs
aXZlVG1wLmlzR1AoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSkKKyAgICAgICAgICAgICAgICBpZiAo
bGl2ZVRtcCAhPSB1c2VUbXApCiAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoZGVmVG1wLCBs
aXZlVG1wKTsKICAgICAgICAgICAgIH0KIApAQCAtMjEzLDEwNCArMjM5LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgYWRkRWRnZXMoaW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYy5saXZlKCkpOwog
ICAgIH0KIAotICAgIHZvaWQgYWxsb2NhdGUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX2FjdGl2ZU1vdmVzLnNpemUoKSA+PSBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLnNp
emUoKSwgIlRoZSBhY3RpdmVNb3ZlIHNldCBzaG91bGQgYmUgYmlnIGVub3VnaCBmb3IgdGhlIHF1
aWNrIG9wZXJhdGlvbnMgb2YgQml0VmVjdG9yLiIpOwotCi0gICAgICAgIG1ha2VXb3JrTGlzdCgp
OwotCi0gICAgICAgIGlmIChkZWJ1ZykgewotICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJmZXJl
bmNlOiAiLCBsaXN0RHVtcChtX2ludGVyZmVyZW5jZUVkZ2VzKSwgIlxuIik7Ci0gICAgICAgICAg
ICBkdW1wSW50ZXJmZXJlbmNlR3JhcGhJbkRvdChXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICAg
ICAgZGF0YUxvZygiSW5pdGlhbCB3b3JrIGxpc3RcbiIpOwotICAgICAgICAgICAgZHVtcFdvcmtM
aXN0cyhXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZG8gewotICAgICAg
ICAgICAgaWYgKHRyYWNlRGVidWcpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJCZWZvcmUg
R3JhcGggc2ltcGxpZmljYXRpb24gaXRlcmF0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICBkdW1w
V29ya0xpc3RzKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICghbV9zaW1wbGlmeVdvcmtsaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBzaW1w
bGlmeSgpOwotICAgICAgICAgICAgZWxzZSBpZiAoIW1fd29ya2xpc3RNb3Zlcy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAgICAgY29hbGVzY2UoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFtX2Zy
ZWV6ZVdvcmtsaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBmcmVlemUoKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKCFtX3NwaWxsV29ya2xpc3QuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgIHNlbGVjdFNwaWxsKCk7Ci0KLSAgICAgICAgICAgIGlmICh0cmFjZURlYnVnKSB7Ci0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiQWZ0ZXIgR3JhcGggc2ltcGxpZmljYXRpb24gaXRlcmF0aW9u
XG4iKTsKLSAgICAgICAgICAgICAgICBkdW1wV29ya0xpc3RzKFdURjo6ZGF0YUZpbGUoKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKCFtX3NpbXBsaWZ5V29ya2xpc3QuaXNFbXB0
eSgpIHx8ICFtX3dvcmtsaXN0TW92ZXMuaXNFbXB0eSgpIHx8ICFtX2ZyZWV6ZVdvcmtsaXN0Lmlz
RW1wdHkoKSB8fCAhbV9zcGlsbFdvcmtsaXN0LmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgYXNzaWdu
Q29sb3JzKCk7Ci0gICAgfQotCi0gICAgVG1wIGdldEFsaWFzKFRtcCB0bXApIGNvbnN0Ci0gICAg
ewotICAgICAgICBUbXAgYWxpYXMgPSB0bXA7Ci0gICAgICAgIHdoaWxlIChUbXAgbmV4dEFsaWFz
ID0gbV9jb2FsZXNjZWRUbXBzW0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4
KGFsaWFzKV0pCi0gICAgICAgICAgICBhbGlhcyA9IG5leHRBbGlhczsKLSAgICAgICAgcmV0dXJu
IGFsaWFzOwotICAgIH0KLQotICAgIFRtcCBnZXRBbGlhc1doZW5TcGlsbGluZyhUbXAgdG1wKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9zcGlsbGVkVG1wLmlz
RW1wdHkoKSwgIlRoaXMgZnVuY3Rpb24gaXMgb25seSB2YWxpZCBmb3IgY29hbGVzY2luZyBkdXJp
bmcgc3BpbGxpbmcuIik7Ci0KLSAgICAgICAgaWYgKG1fY29hbGVzY2VkVG1wc0F0U3BpbGwuaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRtcDsKLQotICAgICAgICBUbXAgYWxpYXMgPSB0
bXA7Ci0gICAgICAgIHdoaWxlIChUbXAgbmV4dEFsaWFzID0gbV9jb2FsZXNjZWRUbXBzQXRTcGls
bFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhbGlhcyldKQotICAgICAg
ICAgICAgYWxpYXMgPSBuZXh0QWxpYXM7Ci0KLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSgh
bV9zcGlsbGVkVG1wLmNvbnRhaW5zKHRtcCkgfHwgYWxpYXMgPT0gdG1wLCAiVGhlIGFsaWFzZXMg
YXQgc3BpbGwgc2hvdWxkIGFsd2F5cyBiZSBjb2xvcmFibGUuIFNvbWV0aGluZyB3ZW50IGhvcnJp
Ymx5IHdyb25nLiIpOwotCi0gICAgICAgIHJldHVybiBhbGlhczsKLSAgICB9Ci0KLSAgICBjb25z
dCBIYXNoU2V0PFRtcD4mIHNwaWxsZWRUbXAoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXA7
IH0KLSAgICBSZWcgYWxsb2NhdGVkUmVnKFRtcCB0bXApIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQoIXRtcC5pc1JlZygpKTsKLSAgICAgICAgQVNTRVJUKG1fY29sb3JlZFRtcC5zaXplKCkp
OwotICAgICAgICBBU1NFUlQodG1wLmlzR1AoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSk7Ci0KLSAg
ICAgICAgUmVnIHJlZyA9IG1fY29sb3JlZFRtcFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJz
b2x1dGVJbmRleCh0bXApXTsKLSAgICAgICAgaWYgKCFyZWcpIHsKLSAgICAgICAgICAgIC8vIFdl
IG9ubHkgY2FyZSBhYm91dCBUbXBzIHRoYXQgaW50ZXJmZXJlLiBBIFRtcCB0aGF0IG5ldmVyIGlu
dGVyZmVyZSB3aXRoIGFueXRoaW5nCi0gICAgICAgICAgICAvLyBjYW4gdGFrZSBhbnkgcmVnaXN0
ZXIuCi0gICAgICAgICAgICByZWcgPSByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpLmZpcnN0KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlZzsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
c3RhdGljIHVuc2lnbmVkIHRtcEFycmF5U2l6ZShDb2RlJiBjb2RlKQotICAgIHsKLSAgICAgICAg
dW5zaWduZWQgbnVtVG1wcyA9IGNvZGUubnVtVG1wcyh0eXBlKTsKLSAgICAgICAgcmV0dXJuIEFi
c29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KG51bVRtcHMpOwotICAgIH0KLQot
ICAgIHZvaWQgaW5pdGlhbGl6ZURlZ3JlZXMoQ29kZSYgY29kZSkKLSAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIHRtcEFycmF5U2l6ZSA9IHRoaXMtPnRtcEFycmF5U2l6ZShjb2RlKTsKLSAgICAgICAg
bV9kZWdyZWVzLnJlc2l6ZSh0bXBBcnJheVNpemUpOwotCi0gICAgICAgIC8vIEFsbCBwcmVjb2xv
cmVkIHJlZ2lzdGVycyBoYXZlICBhbiAiaW5maW5pdGUiIGRlZ3JlZS4KLSAgICAgICAgdW5zaWdu
ZWQgZmlyc3ROb25SZWdJbmRleCA9IEFic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUlu
ZGV4KDApOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlyc3ROb25SZWdJbmRl
eDsgKytpKQotICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpOwotCi0gICAgICAgIGJ6ZXJvKG1fZGVncmVlcy5kYXRhKCkgKyBmaXJz
dE5vblJlZ0luZGV4LCAodG1wQXJyYXlTaXplIC0gZmlyc3ROb25SZWdJbmRleCkgKiBzaXplb2Yo
dW5zaWduZWQpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZEVkZ2VzKEluc3QmIGluc3QsIEluc3Qq
IG5leHRJbnN0LCBjb25zdCBIYXNoU2V0PFRtcD4mIGxpdmVUbXApCisgICAgdm9pZCBhZGRFZGdl
cyhJbnN0JiBpbnN0LCBJbnN0KiBuZXh0SW5zdCwgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8dHlwZT46
OkxvY2FsQ2FsYzo6SXRlcmFibGUgbGl2ZVRtcCkKICAgICB7CiAgICAgICAgIC8vIEFsbCB0aGUg
RGVmKClzIGludGVyZmVyZSB3aXRoIGV2ZXJ0aGluZyBsaXZlLgogICAgICAgICBpbnN0LmZvckVh
Y2hUbXBXaXRoRXh0cmFDbG9iYmVyZWRSZWdzKApAQCAtMzMzLDMyICsyNjIsMzIgQEAgcHJpdmF0
ZToKIAogICAgICAgICBpZiAobV9pbnRlcmZlcmVuY2VFZGdlcy5hZGQoSW50ZXJmZXJlbmNlRWRn
ZShhLCBiKSkuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgaWYgKCFhLmlzUmVnKCkpIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoIW1fYWRqYWNlbmN5TGlzdFtBYnNvbHV0ZVRtcEhlbHBlcjx0
eXBlPjo6YWJzb2x1dGVJbmRleChhKV0uY29udGFpbnMoYikpOwotICAgICAgICAgICAgICAgIG1f
YWRqYWNlbmN5TGlzdFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhKV0u
YXBwZW5kKGIpOwotICAgICAgICAgICAgICAgIG1fZGVncmVlc1tBYnNvbHV0ZVRtcEhlbHBlcjx0
eXBlPjo6YWJzb2x1dGVJbmRleChhKV0rKzsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fYWRq
YWNlbmN5TGlzdFtBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhKV0uY29u
dGFpbnMoYikpOworICAgICAgICAgICAgICAgIG1fYWRqYWNlbmN5TGlzdFtBYnNvbHV0ZVRtcE1h
cHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhKV0uYXBwZW5kKGIpOworICAgICAgICAgICAgICAg
IG1fZGVncmVlc1tBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhKV0rKzsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFiLmlzUmVnKCkpIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoIW1fYWRqYWNlbmN5TGlzdFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6
YWJzb2x1dGVJbmRleChiKV0uY29udGFpbnMoYSkpOwotICAgICAgICAgICAgICAgIG1fYWRqYWNl
bmN5TGlzdFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChiKV0uYXBwZW5k
KGEpOwotICAgICAgICAgICAgICAgIG1fZGVncmVlc1tBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6
YWJzb2x1dGVJbmRleChiKV0rKzsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fYWRqYWNlbmN5
TGlzdFtBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChiKV0uY29udGFpbnMo
YSkpOworICAgICAgICAgICAgICAgIG1fYWRqYWNlbmN5TGlzdFtBYnNvbHV0ZVRtcE1hcHBlcjx0
eXBlPjo6YWJzb2x1dGVJbmRleChiKV0uYXBwZW5kKGEpOworICAgICAgICAgICAgICAgIG1fZGVn
cmVlc1tBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChiKV0rKzsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHZvaWQgbWFrZVdvcmtMaXN0KCkKICAg
ICB7Ci0gICAgICAgIHVuc2lnbmVkIGZpcnN0Tm9uUmVnSW5kZXggPSBBYnNvbHV0ZVRtcEhlbHBl
cjx0eXBlPjo6YWJzb2x1dGVJbmRleCgwKTsKKyAgICAgICAgdW5zaWduZWQgZmlyc3ROb25SZWdJ
bmRleCA9IEFic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KDApOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdE5vblJlZ0luZGV4OyBpIDwgbV9kZWdyZWVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBkZWdyZWUgPSBtX2RlZ3JlZXNbaV07CiAg
ICAgICAgICAgICBpZiAoIWRlZ3JlZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICAgICAgVG1wIHRtcCA9IEFic29sdXRlVG1wSGVscGVyPHR5cGU+Ojp0bXBGcm9tQWJzb2x1
dGVJbmRleChpKTsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBBYnNvbHV0ZVRtcE1hcHBlcjx0eXBl
Pjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaSk7CiAKICAgICAgICAgICAgIGlmIChkZWdyZWUgPj0g
bV9udW1iZXJPZlJlZ2lzdGVycykKICAgICAgICAgICAgICAgICBtX3NwaWxsV29ya2xpc3QuYWRk
KHRtcCk7Ci0gICAgICAgICAgICBlbHNlIGlmICghbV9tb3ZlTGlzdFtBYnNvbHV0ZVRtcEhlbHBl
cjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXS5pc0VtcHR5KCkpCisgICAgICAgICAgICBlbHNl
IGlmICghbV9tb3ZlTGlzdFtBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0
bXApXS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgbV9mcmVlemVXb3JrbGlzdC5hZGQodG1w
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBtX3NpbXBsaWZ5V29ya2xpc3Qu
YXBwZW5kKHRtcCk7CkBAIC0zNzAsOSArMjk5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgVG1wIGxh
c3QgPSBtX3NpbXBsaWZ5V29ya2xpc3QudGFrZUxhc3QoKTsKIAogICAgICAgICBBU1NFUlQoIW1f
c2VsZWN0U3RhY2suY29udGFpbnMobGFzdCkpOwotICAgICAgICBBU1NFUlQoIW1faXNPblNlbGVj
dFN0YWNrLmdldChBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChsYXN0KSkp
OworICAgICAgICBBU1NFUlQoIW1faXNPblNlbGVjdFN0YWNrLmdldChBYnNvbHV0ZVRtcE1hcHBl
cjx0eXBlPjo6YWJzb2x1dGVJbmRleChsYXN0KSkpOwogICAgICAgICBtX3NlbGVjdFN0YWNrLmFw
cGVuZChsYXN0KTsKLSAgICAgICAgbV9pc09uU2VsZWN0U3RhY2sucXVpY2tTZXQoQWJzb2x1dGVU
bXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgobGFzdCkpOworICAgICAgICBtX2lzT25TZWxl
Y3RTdGFjay5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChs
YXN0KSk7CiAKICAgICAgICAgZm9yRWFjaEFkamFjZW50KGxhc3QsIFt0aGlzXShUbXAgYWRqYWNl
bnRUbXApIHsKICAgICAgICAgICAgIGRlY3JlbWVudERlZ3JlZShhZGphY2VudFRtcCk7CkBAIC0z
ODIsNyArMzExLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4K
ICAgICB2b2lkIGZvckVhY2hBZGphY2VudChUbXAgdG1wLCBGdW5jdGlvbiBmdW5jdGlvbikKICAg
ICB7Ci0gICAgICAgIGZvciAoVG1wIGFkamFjZW50VG1wIDogbV9hZGphY2VuY3lMaXN0W0Fic29s
dXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldKSB7CisgICAgICAgIGZvciAo
VG1wIGFkamFjZW50VG1wIDogbV9hZGphY2VuY3lMaXN0W0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+
OjphYnNvbHV0ZUluZGV4KHRtcCldKSB7CiAgICAgICAgICAgICBpZiAoIWhhc0JlZW5TaW1wbGlm
aWVkKGFkamFjZW50VG1wKSkKICAgICAgICAgICAgICAgICBmdW5jdGlvbihhZGphY2VudFRtcCk7
CiAgICAgICAgIH0KQEAgLTM5MCwxNCArMzE5LDE0IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhh
c0JlZW5TaW1wbGlmaWVkKFRtcCB0bXApCiAgICAgewotICAgICAgICByZXR1cm4gbV9pc09uU2Vs
ZWN0U3RhY2sucXVpY2tHZXQoQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgo
dG1wKSkgfHwgISFtX2NvYWxlc2NlZFRtcHNbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29s
dXRlSW5kZXgodG1wKV07CisgICAgICAgIHJldHVybiBtX2lzT25TZWxlY3RTdGFjay5xdWlja0dl
dChBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApKSB8fCAhIW1fY29h
bGVzY2VkVG1wc1tBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXTsK
ICAgICB9CiAKICAgICB2b2lkIGRlY3JlbWVudERlZ3JlZShUbXAgdG1wKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fZGVncmVlc1tBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRl
eCh0bXApXSk7CisgICAgICAgIEFTU0VSVChtX2RlZ3JlZXNbQWJzb2x1dGVUbXBNYXBwZXI8dHlw
ZT46OmFic29sdXRlSW5kZXgodG1wKV0pOwogCi0gICAgICAgIHVuc2lnbmVkIG9sZERlZ3JlZSA9
IG1fZGVncmVlc1tBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXS0t
OworICAgICAgICB1bnNpZ25lZCBvbGREZWdyZWUgPSBtX2RlZ3JlZXNbQWJzb2x1dGVUbXBNYXBw
ZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKV0tLTsKICAgICAgICAgaWYgKG9sZERlZ3JlZSA9
PSBtX251bWJlck9mUmVnaXN0ZXJzKSB7CiAgICAgICAgICAgICBlbmFibGVNb3Zlc09uVmFsdWVB
bmRBZGphY2VudHModG1wKTsKICAgICAgICAgICAgIG1fc3BpbGxXb3JrbGlzdC5yZW1vdmUodG1w
KTsKQEAgLTQxMSw3ICszNDAsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0aW9uPgogICAgIHZvaWQgZm9yRWFjaE5vZGVNb3ZlcyhUbXAgdG1wLCBGdW5jdGlvbiBmdW5j
dGlvbikKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbW92ZUluZGV4IDogbV9tb3ZlTGlz
dFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIG1vdmVJbmRleCA6IG1fbW92ZUxpc3RbQWJzb2x1dGVUbXBNYXBwZXI8
dHlwZT46OmFic29sdXRlSW5kZXgodG1wKV0pIHsKICAgICAgICAgICAgIGlmIChtX2FjdGl2ZU1v
dmVzLnF1aWNrR2V0KG1vdmVJbmRleCkgfHwgbV93b3JrbGlzdE1vdmVzLmNvbnRhaW5zKG1vdmVJ
bmRleCkpCiAgICAgICAgICAgICAgICAgZnVuY3Rpb24obW92ZUluZGV4KTsKICAgICAgICAgfQpA
QCAtNDE5LDcgKzM0OCw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGlzTW92ZVJlbGF0ZWQoVG1w
IHRtcCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbW92ZUluZGV4IDogbV9tb3ZlTGlz
dFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIG1vdmVJbmRleCA6IG1fbW92ZUxpc3RbQWJzb2x1dGVUbXBNYXBwZXI8
dHlwZT46OmFic29sdXRlSW5kZXgodG1wKV0pIHsKICAgICAgICAgICAgIGlmIChtX2FjdGl2ZU1v
dmVzLnF1aWNrR2V0KG1vdmVJbmRleCkgfHwgbV93b3JrbGlzdE1vdmVzLmNvbnRhaW5zKG1vdmVJ
bmRleCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQyOCw3
ICszNTcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBlbmFibGVNb3Zlc09uVmFsdWUoVG1wIHRt
cCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbW92ZUluZGV4IDogbV9tb3ZlTGlzdFtB
YnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSkgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIG1vdmVJbmRleCA6IG1fbW92ZUxpc3RbQWJzb2x1dGVUbXBNYXBwZXI8dHlw
ZT46OmFic29sdXRlSW5kZXgodG1wKV0pIHsKICAgICAgICAgICAgIGlmIChtX2FjdGl2ZU1vdmVz
LnF1aWNrQ2xlYXIobW92ZUluZGV4KSkKICAgICAgICAgICAgICAgICBtX3dvcmtsaXN0TW92ZXMu
cmV0dXJuTW92ZShtb3ZlSW5kZXgpOwogICAgICAgICB9CkBAIC01MDAsMTEgKzQyOSwxMSBAQCBw
cml2YXRlOgogICAgICAgICAvLyBJZiBhbnkgYWRqYWNlbnQgb2YgdGhlIG5vbi1jb2xvcmVkIG5v
ZGUgaXMgbm90IGFuIGFkamFjZW50IG9mIHRoZSBjb2xvcmVkIG5vZGUgQU5EIGhhcyBhIGRlZ3Jl
ZSA+PSBLCiAgICAgICAgIC8vIHRoZXJlIGlzIGEgcmlzayB0aGF0IHRoaXMgbm9kZSBuZWVkcyB0
byBoYXZlIHRoZSBzYW1lIGNvbG9yIGFzIG91ciBwcmVjb2xvcmVkIG5vZGUuIElmIHdlIGNvYWxl
c2NlIHN1Y2gKICAgICAgICAgLy8gbW92ZSwgd2UgbWF5IGNyZWF0ZSBhbiB1bmNvbG9yYWJsZSBn
cmFwaC4KLSAgICAgICAgY29uc3QgYXV0byYgYWRqYWNlbnRzT2ZWID0gbV9hZGphY2VuY3lMaXN0
W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHYpXTsKKyAgICAgICAgY29u
c3QgYXV0byYgYWRqYWNlbnRzT2ZWID0gbV9hZGphY2VuY3lMaXN0W0Fic29sdXRlVG1wTWFwcGVy
PHR5cGU+OjphYnNvbHV0ZUluZGV4KHYpXTsKICAgICAgICAgZm9yIChUbXAgYWRqYWNlbnRUbXAg
OiBhZGphY2VudHNPZlYpIHsKICAgICAgICAgICAgIGlmICghYWRqYWNlbnRUbXAuaXNSZWcoKQog
ICAgICAgICAgICAgICAgICYmICFoYXNCZWVuU2ltcGxpZmllZChhZGphY2VudFRtcCkKLSAgICAg
ICAgICAgICAgICAmJiBtX2RlZ3JlZXNbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRl
SW5kZXgoYWRqYWNlbnRUbXApXSA+PSBtX251bWJlck9mUmVnaXN0ZXJzCisgICAgICAgICAgICAg
ICAgJiYgbV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGFk
amFjZW50VG1wKV0gPj0gbV9udW1iZXJPZlJlZ2lzdGVycwogICAgICAgICAgICAgICAgICYmICFt
X2ludGVyZmVyZW5jZUVkZ2VzLmNvbnRhaW5zKEludGVyZmVyZW5jZUVkZ2UodSwgYWRqYWNlbnRU
bXApKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTUyMiw4
ICs0NTEsOCBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQoIXUuaXNSZWcoKSk7CiAgICAgICAg
IEFTU0VSVCghdi5pc1JlZygpKTsKIAotICAgICAgICBjb25zdCBhdXRvJiBhZGphY2VudHNPZlUg
PSBtX2FkamFjZW5jeUxpc3RbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgo
dSldOwotICAgICAgICBjb25zdCBhdXRvJiBhZGphY2VudHNPZlYgPSBtX2FkamFjZW5jeUxpc3Rb
QWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodildOworICAgICAgICBjb25z
dCBhdXRvJiBhZGphY2VudHNPZlUgPSBtX2FkamFjZW5jeUxpc3RbQWJzb2x1dGVUbXBNYXBwZXI8
dHlwZT46OmFic29sdXRlSW5kZXgodSldOworICAgICAgICBjb25zdCBhdXRvJiBhZGphY2VudHNP
ZlYgPSBtX2FkamFjZW5jeUxpc3RbQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5k
ZXgodildOwogCiAgICAgICAgIGlmIChhZGphY2VudHNPZlUuc2l6ZSgpICsgYWRqYWNlbnRzT2ZW
LnNpemUoKSA8IG1fbnVtYmVyT2ZSZWdpc3RlcnMpIHsKICAgICAgICAgICAgIC8vIFNob3J0Y3V0
OiBpZiB0aGUgdG90YWwgbnVtYmVyIG9mIGFkamFjZW50cyBpcyBsZXNzIHRoYW4gdGhlIG51bWJl
ciBvZiByZWdpc3RlciwgdGhlIGNvbmRpdGlvbiBpcyBhbHdheXMgbWV0LgpAQCAtNTM1LDcgKzQ2
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAoVG1wIGFkamFjZW50VG1wIDogYWRqYWNlbnRz
T2ZVKSB7CiAgICAgICAgICAgICBBU1NFUlQoYWRqYWNlbnRUbXAgIT0gdik7CiAgICAgICAgICAg
ICBBU1NFUlQoYWRqYWNlbnRUbXAgIT0gdSk7Ci0gICAgICAgICAgICBpZiAoIWhhc0JlZW5TaW1w
bGlmaWVkKGFkamFjZW50VG1wKSAmJiBtX2RlZ3JlZXNbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46
OmFic29sdXRlSW5kZXgoYWRqYWNlbnRUbXApXSA+PSBtX251bWJlck9mUmVnaXN0ZXJzKSB7Cisg
ICAgICAgICAgICBpZiAoIWhhc0JlZW5TaW1wbGlmaWVkKGFkamFjZW50VG1wKSAmJiBtX2RlZ3Jl
ZXNbQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoYWRqYWNlbnRUbXApXSA+
PSBtX251bWJlck9mUmVnaXN0ZXJzKSB7CiAgICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBoaWdoT3JkZXJBZGphY2VudHMuYWRkKGFkamFjZW50VG1wKTsKICAgICAgICAgICAgICAgICBp
ZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgaGlnaE9yZGVyQWRqYWNlbnRzLnNpemUoKSA+PSBt
X251bWJlck9mUmVnaXN0ZXJzKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC01NDQsNyArNDczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChUbXAgYWRqYWNlbnRUbXAg
OiBhZGphY2VudHNPZlYpIHsKICAgICAgICAgICAgIEFTU0VSVChhZGphY2VudFRtcCAhPSB1KTsK
ICAgICAgICAgICAgIEFTU0VSVChhZGphY2VudFRtcCAhPSB2KTsKLSAgICAgICAgICAgIGlmICgh
aGFzQmVlblNpbXBsaWZpZWQoYWRqYWNlbnRUbXApICYmIG1fZGVncmVlc1tBYnNvbHV0ZVRtcEhl
bHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhZGphY2VudFRtcCldID49IG1fbnVtYmVyT2ZSZWdp
c3RlcnMpIHsKKyAgICAgICAgICAgIGlmICghaGFzQmVlblNpbXBsaWZpZWQoYWRqYWNlbnRUbXAp
ICYmIG1fZGVncmVlc1tBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhZGph
Y2VudFRtcCldID49IG1fbnVtYmVyT2ZSZWdpc3RlcnMpIHsKICAgICAgICAgICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IGhpZ2hPcmRlckFkamFjZW50cy5hZGQoYWRqYWNlbnRUbXApOwogICAgICAg
ICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBoaWdoT3JkZXJBZGphY2VudHMu
c2l6ZSgpID49IG1fbnVtYmVyT2ZSZWdpc3RlcnMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTU1Nyw3ICs0ODYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRXb3Jr
TGlzdChUbXAgdG1wKQogICAgIHsKLSAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSAmJiBtX2RlZ3Jl
ZXNbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKV0gPCBtX251bWJl
ck9mUmVnaXN0ZXJzICYmICFpc01vdmVSZWxhdGVkKHRtcCkpIHsKKyAgICAgICAgaWYgKCF0bXAu
aXNSZWcoKSAmJiBtX2RlZ3JlZXNbQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5k
ZXgodG1wKV0gPCBtX251bWJlck9mUmVnaXN0ZXJzICYmICFpc01vdmVSZWxhdGVkKHRtcCkpIHsK
ICAgICAgICAgICAgIG1fZnJlZXplV29ya2xpc3QucmVtb3ZlKHRtcCk7CiAgICAgICAgICAgICBt
X3NpbXBsaWZ5V29ya2xpc3QuYXBwZW5kKHRtcCk7CiAgICAgICAgIH0KQEAgLTU2OCwxOCArNDk3
LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghbV9mcmVlemVXb3JrbGlzdC5yZW1vdmUodikp
CiAgICAgICAgICAgICBtX3NwaWxsV29ya2xpc3QucmVtb3ZlKHYpOwogCi0gICAgICAgIEFTU0VS
VCghbV9jb2FsZXNjZWRUbXBzW0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4
KHYpXSk7Ci0gICAgICAgIG1fY29hbGVzY2VkVG1wc1tBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6
YWJzb2x1dGVJbmRleCh2KV0gPSB1OworICAgICAgICBBU1NFUlQoIW1fY29hbGVzY2VkVG1wc1tB
YnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh2KV0pOworICAgICAgICBtX2Nv
YWxlc2NlZFRtcHNbQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodildID0g
dTsKIAotICAgICAgICBhdXRvJiB2TW92ZXMgPSBtX21vdmVMaXN0W0Fic29sdXRlVG1wSGVscGVy
PHR5cGU+OjphYnNvbHV0ZUluZGV4KHYpXTsKLSAgICAgICAgbV9tb3ZlTGlzdFtBYnNvbHV0ZVRt
cEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh1KV0uYWRkKHZNb3Zlcy5iZWdpbigpLCB2TW92
ZXMuZW5kKCkpOworICAgICAgICBhdXRvJiB2TW92ZXMgPSBtX21vdmVMaXN0W0Fic29sdXRlVG1w
TWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHYpXTsKKyAgICAgICAgbV9tb3ZlTGlzdFtBYnNv
bHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh1KV0uYWRkKHZNb3Zlcy5iZWdpbigp
LCB2TW92ZXMuZW5kKCkpOwogCiAgICAgICAgIGZvckVhY2hBZGphY2VudCh2LCBbdGhpcywgdV0g
KFRtcCBhZGphY2VudFRtcCkgewogICAgICAgICAgICAgYWRkRWRnZShhZGphY2VudFRtcCwgdSk7
CiAgICAgICAgICAgICBkZWNyZW1lbnREZWdyZWUoYWRqYWNlbnRUbXApOwogICAgICAgICB9KTsK
IAotICAgICAgICBpZiAobV9kZWdyZWVzW0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0
ZUluZGV4KHUpXSA+PSBtX251bWJlck9mUmVnaXN0ZXJzICYmIG1fZnJlZXplV29ya2xpc3QucmVt
b3ZlKHUpKQorICAgICAgICBpZiAobV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+Ojph
YnNvbHV0ZUluZGV4KHUpXSA+PSBtX251bWJlck9mUmVnaXN0ZXJzICYmIG1fZnJlZXplV29ya2xp
c3QucmVtb3ZlKHUpKQogICAgICAgICAgICAgbV9zcGlsbFdvcmtsaXN0LmFkZCh1KTsKICAgICB9
CiAKQEAgLTYwMCw3ICs1MjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY29uc3QgTW92ZU9w
ZXJhbmRzJiBtb3ZlT3BlcmFuZHMgPSBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzW21vdmVJbmRleF07
CiAgICAgICAgICAgICBUbXAgb3JpZ2luYWxPdGhlclRtcCA9IG1vdmVPcGVyYW5kcy5zcmMgIT0g
dG1wID8gbW92ZU9wZXJhbmRzLnNyYyA6IG1vdmVPcGVyYW5kcy5kc3Q7CiAgICAgICAgICAgICBU
bXAgb3RoZXJUbXAgPSBnZXRBbGlhcyhvcmlnaW5hbE90aGVyVG1wKTsKLSAgICAgICAgICAgIGlm
IChtX2RlZ3JlZXNbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgob3RoZXJU
bXApXSA8IG1fbnVtYmVyT2ZSZWdpc3RlcnMgJiYgIWlzTW92ZVJlbGF0ZWQob3RoZXJUbXApKSB7
CisgICAgICAgICAgICBpZiAobV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNv
bHV0ZUluZGV4KG90aGVyVG1wKV0gPCBtX251bWJlck9mUmVnaXN0ZXJzICYmICFpc01vdmVSZWxh
dGVkKG90aGVyVG1wKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2ZyZWV6ZVdvcmtsaXN0LnJl
bW92ZShvdGhlclRtcCkpCiAgICAgICAgICAgICAgICAgICAgIG1fc2ltcGxpZnlXb3JrbGlzdC5h
cHBlbmQob3RoZXJUbXApOwogICAgICAgICAgICAgfQpAQCAtNjI1LDExICs1NTQsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXJhdG9yICE9IG1f
c3BpbGxXb3JrbGlzdC5lbmQoKSwgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byBjb2xvciB0aGUgQWly
IGdyYXBoIHdpdGggdGhlIG51bWJlciBvZiBhdmFpbGFibGUgcmVnaXN0ZXJzLiIpOwogCiAgICAg
ICAgIGF1dG8gdmljdGltSXRlcmF0b3IgPSBpdGVyYXRvcjsKLSAgICAgICAgdW5zaWduZWQgbWF4
RGVncmVlID0gbV9kZWdyZWVzW0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4
KCppdGVyYXRvcildOworICAgICAgICB1bnNpZ25lZCBtYXhEZWdyZWUgPSBtX2RlZ3JlZXNbQWJz
b2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoKml0ZXJhdG9yKV07CiAKICAgICAg
ICAgKytpdGVyYXRvcjsKICAgICAgICAgZm9yICg7aXRlcmF0b3IgIT0gbV9zcGlsbFdvcmtsaXN0
LmVuZCgpOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0bXBEZWdyZWUgPSBt
X2RlZ3JlZXNbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoKml0ZXJhdG9y
KV07CisgICAgICAgICAgICB1bnNpZ25lZCB0bXBEZWdyZWUgPSBtX2RlZ3JlZXNbQWJzb2x1dGVU
bXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoKml0ZXJhdG9yKV07CiAgICAgICAgICAgICBp
ZiAodG1wRGVncmVlID4gbWF4RGVncmVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdW5zcGls
bGFibGVUbXAuY29udGFpbnMoKml0ZXJhdG9yKSkKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CkBAIC02NDUsNiArNTc0LDQzIEBAIHByaXZhdGU6CiAgICAgICAgIGZyZWV6ZU1vdmVzKHZp
Y3RpbVRtcCk7CiAgICAgfQogCisgICAgdm9pZCBhbGxvY2F0ZSgpCisgICAgeworICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKG1fYWN0aXZlTW92ZXMuc2l6ZSgpID49IG1fY29hbGVzY2luZ0Nh
bmRpZGF0ZXMuc2l6ZSgpLCAiVGhlIGFjdGl2ZU1vdmUgc2V0IHNob3VsZCBiZSBiaWcgZW5vdWdo
IGZvciB0aGUgcXVpY2sgb3BlcmF0aW9ucyBvZiBCaXRWZWN0b3IuIik7CisKKyAgICAgICAgbWFr
ZVdvcmtMaXN0KCk7CisKKyAgICAgICAgaWYgKGRlYnVnKSB7CisgICAgICAgICAgICBkYXRhTG9n
KCJJbnRlcmZlcmVuY2U6ICIsIGxpc3REdW1wKG1faW50ZXJmZXJlbmNlRWRnZXMpLCAiXG4iKTsK
KyAgICAgICAgICAgIGR1bXBJbnRlcmZlcmVuY2VHcmFwaEluRG90KFdURjo6ZGF0YUZpbGUoKSk7
CisgICAgICAgICAgICBkYXRhTG9nKCJJbml0aWFsIHdvcmsgbGlzdFxuIik7CisgICAgICAgICAg
ICBkdW1wV29ya0xpc3RzKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIH0KKworICAgICAgICBk
byB7CisgICAgICAgICAgICBpZiAodHJhY2VEZWJ1ZykgeworICAgICAgICAgICAgICAgIGRhdGFM
b2coIkJlZm9yZSBHcmFwaCBzaW1wbGlmaWNhdGlvbiBpdGVyYXRpb25cbiIpOworICAgICAgICAg
ICAgICAgIGR1bXBXb3JrTGlzdHMoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFtX3NpbXBsaWZ5V29ya2xpc3QuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIHNpbXBsaWZ5KCk7CisgICAgICAgICAgICBlbHNlIGlmICghbV93b3JrbGlzdE1vdmVz
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb2FsZXNjZSgpOworICAgICAgICAgICAgZWxz
ZSBpZiAoIW1fZnJlZXplV29ya2xpc3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGZyZWV6
ZSgpOworICAgICAgICAgICAgZWxzZSBpZiAoIW1fc3BpbGxXb3JrbGlzdC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgc2VsZWN0U3BpbGwoKTsKKworICAgICAgICAgICAgaWYgKHRyYWNlRGVi
dWcpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJBZnRlciBHcmFwaCBzaW1wbGlmaWNhdGlv
biBpdGVyYXRpb25cbiIpOworICAgICAgICAgICAgICAgIGR1bXBXb3JrTGlzdHMoV1RGOjpkYXRh
RmlsZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoIW1fc2ltcGxpZnlXb3Jr
bGlzdC5pc0VtcHR5KCkgfHwgIW1fd29ya2xpc3RNb3Zlcy5pc0VtcHR5KCkgfHwgIW1fZnJlZXpl
V29ya2xpc3QuaXNFbXB0eSgpIHx8ICFtX3NwaWxsV29ya2xpc3QuaXNFbXB0eSgpKTsKKworICAg
ICAgICBhc3NpZ25Db2xvcnMoKTsKKyAgICB9CisKICAgICB2b2lkIGFzc2lnbkNvbG9ycygpCiAg
ICAgewogICAgICAgICBBU1NFUlQobV9zaW1wbGlmeVdvcmtsaXN0LmlzRW1wdHkoKSk7CkBAIC02
NjgsMTcgKzYzNCwxNyBAQCBwcml2YXRlOgogICAgICAgICB3aGlsZSAoIW1fc2VsZWN0U3RhY2su
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBUbXAgdG1wID0gbV9zZWxlY3RTdGFjay50YWtlTGFz
dCgpOwogICAgICAgICAgICAgQVNTRVJUKCF0bXAuaXNSZWcoKSk7Ci0gICAgICAgICAgICBBU1NF
UlQoIW1fY29sb3JlZFRtcFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0
bXApXSk7CisgICAgICAgICAgICBBU1NFUlQoIW1fY29sb3JlZFRtcFtBYnNvbHV0ZVRtcE1hcHBl
cjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSk7CiAKICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGNvbG9yZWRSZWdpc3RlcnM7Ci0gICAgICAgICAgICBmb3IgKFRtcCBhZGphY2VudFRtcCA6IG1f
YWRqYWNlbmN5TGlzdFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXAp
XSkgeworICAgICAgICAgICAgZm9yIChUbXAgYWRqYWNlbnRUbXAgOiBtX2FkamFjZW5jeUxpc3Rb
QWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKV0pIHsKICAgICAgICAg
ICAgICAgICBUbXAgYWxpYXNUbXAgPSBnZXRBbGlhcyhhZGphY2VudFRtcCk7CiAgICAgICAgICAg
ICAgICAgaWYgKGFsaWFzVG1wLmlzUmVnKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29sb3Jl
ZFJlZ2lzdGVycy5zZXQoYWxpYXNUbXAucmVnKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBSZWcgcmVnID0gbV9j
b2xvcmVkVG1wW0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KGFsaWFzVG1w
KV07CisgICAgICAgICAgICAgICAgUmVnIHJlZyA9IG1fY29sb3JlZFRtcFtBYnNvbHV0ZVRtcE1h
cHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhbGlhc1RtcCldOwogICAgICAgICAgICAgICAgIGlm
IChyZWcpCiAgICAgICAgICAgICAgICAgICAgIGNvbG9yZWRSZWdpc3RlcnMuc2V0KHJlZyk7CiAg
ICAgICAgICAgICB9CkBAIC02ODYsNyArNjUyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJv
b2wgY29sb3JBc3NpZ25lZCA9IGZhbHNlOwogICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVn
aXN0ZXJzSW5Qcmlvcml0eU9yZGVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjb2xvcmVkUmVn
aXN0ZXJzLmdldChyZWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY29sb3JlZFRtcFtBYnNv
bHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSA9IHJlZzsKKyAgICAgICAg
ICAgICAgICAgICAgbV9jb2xvcmVkVG1wW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0
ZUluZGV4KHRtcCldID0gcmVnOwogICAgICAgICAgICAgICAgICAgICBjb2xvckFzc2lnbmVkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAt
NzE4LDcgKzY4NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIHRtcCA6IHRtcHNXaXRoSW50ZXJmZXJlbmNlcykKLSAgICAgICAgICAgIG91dC5wcmlu
dCgiICAgICIsIHRtcC5pbnRlcm5hbFZhbHVlKCksICIgW2xhYmVsPVwiIiwgdG1wLCAiICgiLCBt
X2RlZ3JlZXNbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKV0sICIp
XCJdO1xuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCB0bXAuaW50ZXJuYWxWYWx1
ZSgpLCAiIFtsYWJlbD1cIiIsIHRtcCwgIiAoIiwgbV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVy
PHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldLCAiKVwiXTtcbiIpOwogCiAgICAgICAgIGZvciAo
Y29uc3QgYXV0byYgZWRnZSA6IG1faW50ZXJmZXJlbmNlRWRnZXMpCiAgICAgICAgICAgICBvdXQu
cHJpbnQoIiAgICAiLCBlZGdlLmZpcnN0KCkuaW50ZXJuYWxWYWx1ZSgpLCAiIC0tICIsIGVkZ2Uu
c2Vjb25kKCkuaW50ZXJuYWxWYWx1ZSgpLCAiO1xuIik7CkBAIC0xMDM5LDIzICsxMDA1LDEyIEBA
IHN0YXRpYyB2b2lkIGFkZFNwaWxsQW5kRmlsbFRvUHJvZ3JhbShDb2RlJiBjb2RlLCBjb25zdCBJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luCiB9CiAKIHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgot
c3RhdGljIHZvaWQgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGUoQ29kZSYgY29kZSwg
SGFzaFNldDxUbXA+JiB1bnNwaWxsYWJsZVRtcHMsIHVuc2lnbmVkJiBudW1JdGVyYXRpb25zKQor
c3RhdGljIHZvaWQgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGUoQ29kZSYgY29kZSwg
dW5zaWduZWQmIG51bUl0ZXJhdGlvbnMpCiB7CisgICAgSGFzaFNldDxUbXA+IHVuc3BpbGxhYmxl
VG1wczsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBudW1JdGVyYXRpb25zKys7CiAgICAg
ICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yPHR5cGU+IGFsbG9jYXRvcihj
b2RlLCB1bnNwaWxsYWJsZVRtcHMpOwotICAgICAgICBMaXZlbmVzczxUbXA+IGxpdmVuZXNzKGNv
ZGUpOwotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICAg
ICAgTGl2ZW5lc3M8VG1wPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0
SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJ
bmRleCk7Ci0gICAgICAgICAgICAgICAgSW5zdCogbmV4dEluc3QgPSBpbnN0SW5kZXggKyAxIDwg
YmxvY2stPnNpemUoKSA/ICZibG9jay0+YXQoaW5zdEluZGV4ICsgMSkgOiBudWxscHRyOwotICAg
ICAgICAgICAgICAgIGFsbG9jYXRvci5idWlsZChpbnN0LCBuZXh0SW5zdCwgbG9jYWxDYWxjKTsK
LSAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYWxsb2NhdG9yLmFsbG9jYXRlKCk7CiAgICAgICAg
IGlmIChhbGxvY2F0b3Iuc3BpbGxlZFRtcCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXNz
aWduUmVnaXN0ZXJUb1RtcEluUHJvZ3JhbShjb2RlLCBhbGxvY2F0b3IpOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTA2OCw1NSArMTAyMywxMCBAQCB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nKENvZGUmIGNvZGUpCiB7CiAgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJp
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyIpOwogCi0gICAgYm9vbCBncElzQ29sb3JlZCA9IGZh
bHNlOwotICAgIGJvb2wgZnBJc0NvbG9yZWQgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBudW1JdGVy
YXRpb25zID0gMDsKIAotICAgIEhhc2hTZXQ8VG1wPiB1bnNwaWxsYWJsZUdQczsKLSAgICBIYXNo
U2V0PFRtcD4gdW5zcGlsbGFibGVGUHM7Ci0KLSAgICAvLyBGaXJzdCB3ZSBydW4gYm90aCBhbGxv
Y2F0b3IgdG9nZXRoZXIgYXMgbG9uZyBhcyB0aGV5IGJvdGggc3BpbGwuCi0gICAgd2hpbGUgKCFn
cElzQ29sb3JlZCAmJiAhZnBJc0NvbG9yZWQpIHsKLSAgICAgICAgbnVtSXRlcmF0aW9ucysrOwot
ICAgICAgICBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjxBcmc6OkdQPiBncEFs
bG9jYXRvcihjb2RlLCB1bnNwaWxsYWJsZUdQcyk7Ci0gICAgICAgIEl0ZXJhdGVkUmVnaXN0ZXJD
b2FsZXNjaW5nQWxsb2NhdG9yPEFyZzo6RlA+IGZwQWxsb2NhdG9yKGNvZGUsIHVuc3BpbGxhYmxl
RlBzKTsKLQotICAgICAgICAvLyBMaXZlbmVzcyBBbmFseXNpcyBjYW4gYmUgcHJvaGliaXRpdmVs
eSBleHBlbnNpdmUuIEl0IGlzIHNoYXJlZAotICAgICAgICAvLyBiZXR3ZWVuIHRoZSB0d28gYWxs
b2NhdG9ycyB0byBhdm9pZCBkb2luZyBpdCB0d2ljZS4KLSAgICAgICAgTGl2ZW5lc3M8VG1wPiBs
aXZlbmVzcyhjb2RlKTsKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsK
LSAgICAgICAgICAgIExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3Ms
IGJsb2NrKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNp
emUoKTsgaW5zdEluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOwotICAgICAgICAgICAgICAgIEluc3QqIG5leHRJbnN0ID0gaW5zdElu
ZGV4ICsgMSA8IGJsb2NrLT5zaXplKCkgPyAmYmxvY2stPmF0KGluc3RJbmRleCArIDEpIDogbnVs
bHB0cjsKLQotICAgICAgICAgICAgICAgIGdwQWxsb2NhdG9yLmJ1aWxkKGluc3QsIG5leHRJbnN0
LCBsb2NhbENhbGMpOwotICAgICAgICAgICAgICAgIGZwQWxsb2NhdG9yLmJ1aWxkKGluc3QsIG5l
eHRJbnN0LCBsb2NhbENhbGMpOwotCi0gICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUo
aW5zdEluZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGdwQWxsb2Nh
dG9yLmFsbG9jYXRlKCk7Ci0gICAgICAgIGZwQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICAg
ICAgaWYgKGdwQWxsb2NhdG9yLnNwaWxsZWRUbXAoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IGFzc2lnblJlZ2lzdGVyVG9UbXBJblByb2dyYW0oY29kZSwgZ3BBbGxvY2F0b3IpOwotICAgICAg
ICAgICAgZ3BJc0NvbG9yZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFk
ZFNwaWxsQW5kRmlsbFRvUHJvZ3JhbTxBcmc6OkdQPihjb2RlLCBncEFsbG9jYXRvciwgdW5zcGls
bGFibGVHUHMpOwotCi0gICAgICAgIGlmIChmcEFsbG9jYXRvci5zcGlsbGVkVG1wKCkuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBhc3NpZ25SZWdpc3RlclRvVG1wSW5Qcm9ncmFtKGNvZGUsIGZw
QWxsb2NhdG9yKTsKLSAgICAgICAgICAgIGZwSXNDb2xvcmVkID0gdHJ1ZTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBhZGRTcGlsbEFuZEZpbGxUb1Byb2dyYW08QXJnOjpGUD4oY29kZSwg
ZnBBbGxvY2F0b3IsIHVuc3BpbGxhYmxlRlBzKTsKLSAgICB9OwotCi0gICAgaWYgKCFncElzQ29s
b3JlZCkKLSAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGU8QXJnOjpHUD4o
Y29kZSwgdW5zcGlsbGFibGVHUHMsIG51bUl0ZXJhdGlvbnMpOwotICAgIGlmICghZnBJc0NvbG9y
ZWQpCi0gICAgICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlPEFyZzo6RlA+KGNv
ZGUsIHVuc3BpbGxhYmxlRlBzLCBudW1JdGVyYXRpb25zKTsKKyAgICBpdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZ09uVHlwZTxBcmc6OkdQPihjb2RlLCBudW1JdGVyYXRpb25zKTsKKyAgICBpdGVy
YXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uVHlwZTxBcmc6OkZQPihjb2RlLCBudW1JdGVyYXRpb25z
KTsKIAogICAgIGlmIChyZXBvcnRTdGF0cykKICAgICAgICAgZGF0YUxvZygiTnVtIGl0ZXJhdGlv
bnMgPSAiLCBudW1JdGVyYXRpb25zLCAiXG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTGl2ZW5lc3MuaAppbmRleCBhNDBjMTg4ZTBlODM1YmI3NjNiMzNkNGM5Y2VmMjk1ZTRl
Y2MzYzhiLi45NmE2NjE5ZGU5MDU0ZmJiNWQ5MDcyOTcwZjFhZDdkY2Y2OGIwNDZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCkBAIC0yMCw3ICsyMCw3IEBA
CiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgQWlyTGl2ZW5lc3NfaApAQCAtMjksMTMw
ICsyOSwyMzYgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKICNpbmNsdWRlICJCM0luZGV4TWFwLmgi
CiAjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9JbmRleFNwYXJzZVNldC5o
PgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKLS8v
IFlvdSBjYW4gY29tcHV0ZSBsaXZlbmVzcyBvdmVyIFRtcCdzIG9yIG92ZXIgQXJnJ3MuIElmIHlv
dSBjb21wdXRlIG92ZXIgQXJnJ3MsIHlvdSBnZXQgYm90aAotLy8gc3RhY2sgbGl2ZW5lc3MgYW5k
IHRtcCBsaXZlbmVzcy4KLXRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nPgotY2xhc3MgTGl2ZW5lc3Mg
ewotcHVibGljOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIGJvb2wgaXNB
bGl2ZShjb25zdCBUJiB0aGluZykgeyByZXR1cm4gdGhpbmcuaXNBbGl2ZSgpOyB9Cit0ZW1wbGF0
ZTxBcmc6OlR5cGUgYWRhcHRlclR5cGU+CitzdHJ1Y3QgVG1wTGl2ZW5lc3NBZGFwdGVyIHsKKyAg
ICB0eXBlZGVmIFRtcCBUaGluZzsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8dW5zaWduZWQ+IEluZGV4
U2V0OworCisgICAgVG1wTGl2ZW5lc3NBZGFwdGVyKENvZGUmKSB7IH0KIAotICAgIHN0YXRpYyBi
b29sIGlzQWxpdmUoU3RhY2tTbG90KiBzbG90KSB7IHJldHVybiBzbG90LT5raW5kKCkgPT0gU3Rh
Y2tTbG90S2luZDo6QW5vbnltb3VzOyB9Ci0gICAgCi0gICAgTGl2ZW5lc3MoQ29kZSYgY29kZSkK
KyAgICBzdGF0aWMgdW5zaWduZWQgbWF4SW5kZXgoQ29kZSYgY29kZSkKICAgICB7Ci0gICAgICAg
IG1fbGl2ZUF0SGVhZC5yZXNpemUoY29kZS5zaXplKCkpOwotICAgICAgICBtX2xpdmVBdFRhaWwu
cmVzaXplKGNvZGUuc2l6ZSgpKTsKKyAgICAgICAgdW5zaWduZWQgbnVtVG1wcyA9IGNvZGUubnVt
VG1wcyhhZGFwdGVyVHlwZSk7CisgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxhZGFw
dGVyVHlwZT46OmFic29sdXRlSW5kZXgobnVtVG1wcyk7CisgICAgfQorICAgIHN0YXRpYyBib29s
IGFjY2VwdHNUeXBlKEFyZzo6VHlwZSB0eXBlKSB7IHJldHVybiB0eXBlID09IGFkYXB0ZXJUeXBl
OyB9CisgICAgc3RhdGljIHVuc2lnbmVkIHZhbHVlVG9JbmRleChUbXAgdG1wKSB7IHJldHVybiBB
YnNvbHV0ZVRtcE1hcHBlcjxhZGFwdGVyVHlwZT46OmFic29sdXRlSW5kZXgodG1wKTsgfQorICAg
IHN0YXRpYyBUbXAgaW5kZXhUb1ZhbHVlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBBYnNvbHV0
ZVRtcE1hcHBlcjxhZGFwdGVyVHlwZT46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGluZGV4KTsgfQor
fTsKIAorc3RydWN0IFN0YWNrU2xvdExpdmVuZXNzQWRhcHRlciB7CisgICAgdHlwZWRlZiBTdGFj
a1Nsb3QqIFRoaW5nOworICAgIHR5cGVkZWYgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8
dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2ln
bmVkPj4gSW5kZXhTZXQ7CisKKyAgICBTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXIoQ29kZSYgY29k
ZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHVu
c2lnbmVkIG1heEluZGV4KENvZGUmIGNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gY29kZS5z
dGFja1Nsb3RzKCkuc2l6ZSgpIC0gMTsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgYWNjZXB0c1R5
cGUoQXJnOjpUeXBlKSB7IHJldHVybiB0cnVlOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIHZhbHVl
VG9JbmRleChTdGFja1Nsb3QqIHN0YWNrU2xvdCkgeyByZXR1cm4gc3RhY2tTbG90LT5pbmRleCgp
OyB9CisgICAgU3RhY2tTbG90KiBpbmRleFRvVmFsdWUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IG1fY29kZS5zdGFja1Nsb3RzKClbaW5kZXhdOyB9CisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9j
b2RlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRlcj4KK2NsYXNzIEFic3RyYWN0TGl2
ZW5lc3MgOiBwcml2YXRlIEFkYXB0ZXIgeworICAgIHN0cnVjdCBXb3Jrc2V0OworcHVibGljOgor
ICAgIEFic3RyYWN0TGl2ZW5lc3MoQ29kZSYgY29kZSkKKyAgICAgICAgOiBBZGFwdGVyKGNvZGUp
CisgICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om1heEluZGV4KGNvZGUpKQorICAgICAgICAs
IG1fbGl2ZUF0SGVhZChjb2RlLnNpemUoKSkKKyAgICAgICAgLCBtX2xpdmVBdFRhaWwoY29kZS5z
aXplKCkpCisgICAgewogICAgICAgICAvLyBUaGUgbGl2ZUF0VGFpbCBvZiBlYWNoIGJsb2NrIGF1
dG9tYXRpY2FsbHkgY29udGFpbnMgdGhlIExhdGVVc2UncyBvZiB0aGUgdGVybWluYWwuCiAgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgICAgICBIYXNoU2V0
PFRoaW5nPiYgbGl2ZSA9IG1fbGl2ZUF0VGFpbFtibG9ja107Ci0gICAgICAgICAgICBibG9jay0+
bGFzdCgpLmZvckVhY2g8VGhpbmc+KAotICAgICAgICAgICAgICAgIFsmXSAoVGhpbmcmIHRoaW5n
LCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzTGF0ZVVzZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUuYWRkKHRo
aW5nKTsKKyAgICAgICAgICAgIHR5cGVuYW1lIEFkYXB0ZXI6OkluZGV4U2V0JiBsaXZlQXRUYWls
ID0gbV9saXZlQXRUYWlsW2Jsb2NrXTsKKworICAgICAgICAgICAgYmxvY2stPmxhc3QoKS5mb3JF
YWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKKyAgICAgICAgICAgICAgICBbJl0gKHR5cGVu
YW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBl
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZVVzZShyb2xlKSAmJiBBZGFw
dGVyOjphY2NlcHRzVHlwZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdFRh
aWwuYWRkKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOwogICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICB9CiAKLSAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gc2VlbjsKKyAgICAg
ICAgLy8gQmxvY2tzIHdpdGggbmV3IGxpdmUgdmFsdWVzIGF0IHRhaWwuCisgICAgICAgIEJpdFZl
Y3RvciBkaXJ0eUJsb2NrczsKKyAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBjb2RlLnNpemUoKTsgKytibG9ja0luZGV4KQorICAgICAgICAgICAgZGlydHlC
bG9ja3Muc2V0KGJsb2NrSW5kZXgpOwogCi0gICAgICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7Ci0g
ICAgICAgIHdoaWxlIChjaGFuZ2VkKSB7CisgICAgICAgIGJvb2wgY2hhbmdlZDsKKyAgICAgICAg
ZG8gewogICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwogCiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBibG9ja0luZGV4ID0gY29kZS5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGNvZGUuYXQoYmxvY2tJbmRleCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIWRpcnR5QmxvY2tzLnF1aWNrQ2xlYXIoYmxvY2tJbmRleCkpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICAgICAgTG9jYWxDYWxj
IGxvY2FsQ2FsYygqdGhpcywgYmxvY2spOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGlu
c3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykKICAgICAgICAgICAgICAgICAg
ICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKLSAgICAgICAgICAgICAgICBib29sIGZp
cnN0VGltZSA9IHNlZW4uYWRkKGJsb2NrKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VGlt
ZSAmJiBsb2NhbENhbGMubGl2ZSgpID09IG1fbGl2ZUF0SGVhZFtibG9ja10pCisKKyAgICAgICAg
ICAgICAgICBWZWN0b3I8dW5zaWduZWQ+JiBsaXZlQXRIZWFkID0gbV9saXZlQXRIZWFkW2Jsb2Nr
XTsKKworICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBUbXBzIHRoYXQgd2Vy
ZSBkaXNjb3ZlcmVkIGluIHRoaXMgaXRlcmF0aW9uLiBJdCBpcyBpbXBvc3NpYmxlCisgICAgICAg
ICAgICAgICAgLy8gdG8gcmVtb3ZlIGEgbGl2ZSB2YWx1ZSBmcm9tIHRoZSBoZWFkLgorICAgICAg
ICAgICAgICAgIC8vIFdlIHJlbW92ZSBhbGwgdGhlIHZhbHVlcyB3ZSBhbHJlYWR5IGtuZXcgYWJv
dXQgc28gdGhhdCB3ZSBvbmx5IGhhdmUgdG8gZGVhbCB3aXRoCisgICAgICAgICAgICAgICAgLy8g
d2hhdCBpcyBuZXcgaW4gTGl2ZUF0SGVhZC4KKyAgICAgICAgICAgICAgICBpZiAobV93b3Jrc2V0
LnNpemUoKSA9PSBsaXZlQXRIZWFkLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgbV93b3Jr
c2V0LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgbGl2ZUluZGV4QXRIZWFkIDogbGl2ZUF0SGVhZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fd29ya3NldC5yZW1vdmUobGl2ZUluZGV4QXRIZWFkKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobV93b3Jrc2V0LmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CisKKyAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShsaXZlQXRI
ZWFkLnNpemUoKSArIG1fd29ya3NldC5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbmV3VmFsdWUgOiBtX3dvcmtzZXQpCisgICAgICAgICAgICAgICAgICAgIGxpdmVBdEhl
YWQudW5jaGVja2VkQXBwZW5kKG5ld1ZhbHVlKTsKKwogICAgICAgICAgICAgICAgIGZvciAoQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29yXS5hZGQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhbENhbGMubGl2ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5k
KCkpOworICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBBZGFwdGVyOjpJbmRleFNldCYgbGl2
ZUF0VGFpbCA9IG1fbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl07CisgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgbmV3VmFsdWUgOiBtX3dvcmtzZXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChsaXZlQXRUYWlsLmFkZChuZXdWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZGlydHlCbG9ja3MucXVpY2tTZXQocHJlZGVjZXNzb3ItPmluZGV4KCkp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxvY2tdID0gbG9jYWxDYWxjLnRh
a2VMaXZlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgIH0gd2hp
bGUgKGNoYW5nZWQpOwogCi0gICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmVBdEhlYWQoQmFz
aWNCbG9jayogYmxvY2spIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9saXZlQXRIZWFk
W2Jsb2NrXTsKLSAgICB9Ci0KLSAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0VGFpbChC
YXNpY0Jsb2NrKiBibG9jaykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xpdmVBdFRh
aWxbYmxvY2tdOworICAgICAgICBtX2xpdmVBdEhlYWQuY2xlYXIoKTsKICAgICB9CiAKICAgICAv
LyBUaGlzIGNhbGN1bGF0b3IgaGFzIHRvIGJlIHJ1biBpbiByZXZlcnNlLgogICAgIGNsYXNzIExv
Y2FsQ2FsYyB7CiAgICAgcHVibGljOgotICAgICAgICBMb2NhbENhbGMoTGl2ZW5lc3MmIGxpdmVu
ZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKLSAgICAgICAgICAgIDogbV9saXZlKGxpdmVuZXNzLmxp
dmVBdFRhaWwoYmxvY2spKQorICAgICAgICBMb2NhbENhbGMoQWJzdHJhY3RMaXZlbmVzcyYgbGl2
ZW5lc3MsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2xpdmVuZXNzKGxpdmVu
ZXNzKQogICAgICAgICAgICAgLCBtX2Jsb2NrKGJsb2NrKQogICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvJiB3b3Jrc2V0ID0gbGl2ZW5lc3MubV93b3Jrc2V0OworICAgICAgICAgICAgd29ya3Nl
dC5jbGVhcigpOworICAgICAgICAgICAgdHlwZW5hbWUgQWRhcHRlcjo6SW5kZXhTZXQmIGxpdmVB
dFRhaWwgPSBsaXZlbmVzcy5tX2xpdmVBdFRhaWxbYmxvY2tdOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA6IGxpdmVBdFRhaWwpCisgICAgICAgICAgICAgICAgd29ya3NldC5hZGQo
aW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmUo
KSBjb25zdCB7IHJldHVybiBtX2xpdmU7IH0KLSAgICAgICAgSGFzaFNldDxUaGluZz4mJiB0YWtl
TGl2ZSgpIHsgcmV0dXJuIFdURjo6bW92ZShtX2xpdmUpOyB9CisgICAgICAgIHN0cnVjdCBJdGVy
YXRvciB7CisgICAgICAgICAgICBJdGVyYXRvcihBZGFwdGVyJiBhZGFwdGVyLCBJbmRleFNwYXJz
ZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz46OmNvbnN0X2l0ZXJhdG9yIHNwYXJjZVNldEl0ZXJh
dG9yKQorICAgICAgICAgICAgICAgIDogbV9hZGFwdGVyKGFkYXB0ZXIpCisgICAgICAgICAgICAg
ICAgLCBtX3NwYXJjZVNldEl0ZXJhdG9yKHNwYXJjZVNldEl0ZXJhdG9yKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKyttX3NwYXJjZVNldEl0ZXJhdG9yOworICAg
ICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9hZGFwdGVyLmluZGV4VG9WYWx1ZSgqbV9zcGFyY2VT
ZXRJdGVyYXRvcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIHsgcmV0dXJuIG1fc3BhcmNlU2V0SXRlcmF0b3IgPT0g
b3RoZXIubV9zcGFyY2VTZXRJdGVyYXRvcjsgfQorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gbV9zcGFyY2VTZXRJdGVyYXRvciAhPSBv
dGhlci5tX3NwYXJjZVNldEl0ZXJhdG9yOyB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIEFkYXB0ZXImIG1fYWRhcHRlcjsKKyAgICAgICAgICAgIEluZGV4U3BhcnNlU2V0PFVuc2Fm
ZVZlY3Rvck92ZXJmbG93Pjo6Y29uc3RfaXRlcmF0b3IgbV9zcGFyY2VTZXRJdGVyYXRvcjsKKyAg
ICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgSXRlcmFibGUgeworICAgICAgICAgICAgSXRlcmFi
bGUoQWJzdHJhY3RMaXZlbmVzcyYgbGl2ZW5lc3MpCisgICAgICAgICAgICAgICAgOiBtX2xpdmVu
ZXNzKGxpdmVuZXNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1f
bGl2ZW5lc3MubV93b3Jrc2V0LmJlZ2luKCkpOyB9CisgICAgICAgICAgICBJdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBJdGVyYXRvcihtX2xpdmVuZXNzLCBtX2xpdmVuZXNzLm1fd29ya3Nl
dC5lbmQoKSk7IH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgQWJzdHJhY3RMaXZl
bmVzcyYgbV9saXZlbmVzczsKKyAgICAgICAgfTsKKworICAgICAgICBJdGVyYWJsZSBsaXZlKCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhYmxlKG1fbGl2ZW5lc3Mp
OworICAgICAgICB9CiAKICAgICAgICAgdm9pZCBleGVjdXRlKHVuc2lnbmVkIGluc3RJbmRleCkK
ICAgICAgICAgewogICAgICAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRl
eCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8mIHdvcmtzZXQgPSBtX2xpdmVuZXNz
Lm1fd29ya3NldDsKICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KLSAgICAgICAg
ICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCi0gICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYg
YXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghaXNBbGl2ZShhcmcpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbGl2ZS5yZW1vdmUoYXJnKTsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaDx0eXBlbmFt
ZSBBZGFwdGVyOjpUaGluZz4oCisgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVy
OjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlw
ZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6
OnZhbHVlVG9JbmRleCh0aGluZykpOwogICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAg
ICAvLyBUaGVuIGhhbmRsZSB1c2Uncy4KLSAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4o
Ci0gICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJn
OjpUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNBbGl2ZShhcmcpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c0Vhcmx5VXNlKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChhcmcp
OworICAgICAgICAgICAgaW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKKyAg
ICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzRWFybHlVc2Uocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICB3b3Jrc2V0LmFkZChBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcp
KTsKICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgLy8gQW5kIGZpbmFsbHksIGhh
bmRsZSB0aGUgbGF0ZSB1c2UncyBvZiB0aGUgcHJldmlvdXMgaW5zdHJ1Y3Rpb24uCiAgICAgICAg
ICAgICBpZiAoaW5zdEluZGV4KSB7CiAgICAgICAgICAgICAgICAgSW5zdCYgcHJldkluc3QgPSBt
X2Jsb2NrLT5hdChpbnN0SW5kZXggLSAxKTsKLQotICAgICAgICAgICAgICAgIHByZXZJbnN0LmZv
ckVhY2g8VGhpbmc+KAotICAgICAgICAgICAgICAgICAgICBbdGhpc10gKFRoaW5nJiBhcmcsIEFy
Zzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
QXJnOjppc0xhdGVVc2Uocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWxpdmUoYXJnKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2xpdmUuYWRkKGFyZyk7CisgICAgICAgICAgICAgICAgcHJldklu
c3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCisgICAgICAgICAgICAgICAgICAg
IFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJn
OjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZVVz
ZShyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3b3Jrc2V0LmFkZChBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKICAg
ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIEhhc2hTZXQ8VGhpbmc+IG1fbGl2ZTsKKyAgICAgICAgQWJzdHJhY3RM
aXZlbmVzcyYgbV9saXZlbmVzczsKICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICB9
OwogCiBwcml2YXRlOgotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBt
X2xpdmVBdEhlYWQ7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1f
bGl2ZUF0VGFpbDsKKyAgICBmcmllbmQgY2xhc3MgTG9jYWxDYWxjOworICAgIGZyaWVuZCBzdHJ1
Y3QgTG9jYWxDYWxjOjpJdGVyYWJsZTsKKworICAgIEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX3dvcmtzZXQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPHVu
c2lnbmVkPj4gbV9saXZlQXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIHR5cGVuYW1l
IEFkYXB0ZXI6OkluZGV4U2V0PiBtX2xpdmVBdFRhaWw7CiB9OwogCit0ZW1wbGF0ZTxBcmc6OlR5
cGUgdHlwZT4KK3VzaW5nIFRtcExpdmVuZXNzID0gQWJzdHJhY3RMaXZlbmVzczxUbXBMaXZlbmVz
c0FkYXB0ZXI8dHlwZT4+OworCit0eXBlZGVmIEFic3RyYWN0TGl2ZW5lc3M8VG1wTGl2ZW5lc3NB
ZGFwdGVyPEFyZzo6R1A+PiBHUExpdmVuZXNzOwordHlwZWRlZiBBYnN0cmFjdExpdmVuZXNzPFRt
cExpdmVuZXNzQWRhcHRlcjxBcmc6OkZQPj4gRlBMaXZlbmVzczsKK3R5cGVkZWYgQWJzdHJhY3RM
aXZlbmVzczxTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXI+IFN0YWNrU2xvdExpdmVuZXNzOworCiB9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2Vk
UmVnaXN0ZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNl
ZFJlZ2lzdGVycy5jcHAKaW5kZXggZDZmZGY3ZDBkOGRkMTQ4N2E5ZjczYTJmNmMyNTQ2NGY2MjY4
MmYzZi4uODhlNzVmMzZjM2Q1MTk3YzgwNWJmM2QwMzJmNDY4MmM4YmQxMWYyYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3Rl
cnMuY3BwCkBAIC00MSwyMiArNDEsMjkgQEAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKENvZGUm
IGNvZGUpCiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRlbGwgbGl2ZW5lc3MgdG8gb25seSB0
cmFjayBSZWdzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTA3NTEKLSAgICBMaXZlbmVzczxUbXA+IGxpdmVuZXNzKGNvZGUpOworICAgIEdQTGl2ZW5l
c3MgZ3BMaXZlbmVzcyhjb2RlKTsKKyAgICBGUExpdmVuZXNzIGZwTGl2ZW5lc3MoY29kZSk7CiAK
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBMaXZlbmVzczxU
bXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgIEdQTGl2
ZW5lc3M6OkxvY2FsQ2FsYyBncExvY2FsQ2FsYyhncExpdmVuZXNzLCBibG9jayk7CisgICAgICAg
IEZQTGl2ZW5lc3M6OkxvY2FsQ2FsYyBmcExvY2FsQ2FsYyhmcExpdmVuZXNzLCBibG9jayk7CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5k
ZXgtLTspIHsKICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
ICAgICAgICAgICAgIGlmIChpbnN0Lmhhc1NwZWNpYWwoKSkgewogICAgICAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IHJlZ2lzdGVyU2V0OwotICAgICAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxv
Y2FsQ2FsYy5saXZlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTZXQuc2V0KHRtcC5yZWcoKSk7CisgICAg
ICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogZ3BMb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCh0bXAuaXNHUCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVn
aXN0ZXJTZXQuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGZvciAoVG1wIHRtcCA6IGZwTG9jYWxDYWxjLmxpdmUoKSkgeworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQodG1wLmlzRlAoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2V0
LnNldCh0bXAucmVnKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpbnN0
LnJlcG9ydFVzZWRSZWdpc3RlcnMocmVnaXN0ZXJTZXQpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIGdwTG9jYWxD
YWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIGZwTG9jYWxDYWxjLmV4ZWN1dGUo
aW5zdEluZGV4KTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAppbmRleCBkMWIyM2U3NjZiZDk4
ZjdjNmU0NzI1ZTc0NWMwMjUyNGNkNGQwNWZlLi4wYzFjZjQwOGMyMmFmNzRkZTg0OTRlM2VmYWE0
ODQxM2NiNzBjOWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clNwaWxsRXZlcnl0aGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCkBAIC00NCwxNCArNDQsMjEgQEAgdm9pZCBzcGlsbEV2ZXJ5
dGhpbmcoQ29kZSYgY29kZSkKIAogICAgIC8vIFdlIHdhbnQgdG8ga25vdyB0aGUgc2V0IG9mIHJl
Z2lzdGVycyB1c2VkIGF0IGV2ZXJ5IHBvaW50IGluIGV2ZXJ5IGJhc2ljIGJsb2NrLgogICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIFZlY3RvcjxSZWdpc3RlclNldD4+IHVzZWRSZWdpc3RlcnMoY29k
ZS5zaXplKCkpOwotICAgIExpdmVuZXNzPFRtcD4gbGl2ZW5lc3MoY29kZSk7CisgICAgR1BMaXZl
bmVzcyBncExpdmVuZXNzKGNvZGUpOworICAgIEZQTGl2ZW5lc3MgZnBMaXZlbmVzcyhjb2RlKTsK
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBMaXZlbmVzczxU
bXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgIEdQTGl2
ZW5lc3M6OkxvY2FsQ2FsYyBncExvY2FsQ2FsYyhncExpdmVuZXNzLCBibG9jayk7CisgICAgICAg
IEZQTGl2ZW5lc3M6OkxvY2FsQ2FsYyBmcExvY2FsQ2FsYyhmcExpdmVuZXNzLCBibG9jayk7CisK
ICAgICAgICAgdXNlZFJlZ2lzdGVyc1tibG9ja10ucmVzaXplKGJsb2NrLT5zaXplKCkgKyAxKTsK
IAogICAgICAgICBhdXRvIHNldFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBJ
bnN0JiBpbnN0KSB7CiAgICAgICAgICAgICBSZWdpc3RlclNldCYgcmVnaXN0ZXJTZXQgPSB1c2Vk
UmVnaXN0ZXJzW2Jsb2NrXVtpbmRleF07Ci0gICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsb2Nh
bENhbGMubGl2ZSgpKSB7CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBncExvY2FsQ2FsYy5s
aXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyU2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yIChUbXAgdG1wIDogZnBMb2NhbENhbGMubGl2ZSgpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKHRtcC5pc1JlZygpKQogICAgICAgICAgICAgICAgICAgICByZWdpc3RlclNldC5zZXQo
dG1wLnJlZygpKTsKICAgICAgICAgICAgIH0KQEAgLTY5LDcgKzc2LDggQEAgdm9pZCBzcGlsbEV2
ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBi
bG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKICAgICAgICAgICAgIEluc3QmIGluc3QgPSBi
bG9jay0+YXQoaW5zdEluZGV4KTsKICAgICAgICAgICAgIHNldFVzZWRSZWdpc3RlcnMoaW5zdElu
ZGV4ICsgMSwgaW5zdCk7Ci0gICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgp
OworICAgICAgICAgICAgZ3BMb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOworICAgICAgICAg
ICAgZnBMb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAg
SW5zdCBub3A7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRt
cElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5o
CmluZGV4IGYyOTU0ZTMyYmUzOThhM2Y3ZGIxZmM1ODgwY2FiNGQzN2Y3NTAxMGMuLjJmMWUwOWM1
ZDUwYjg3ZTYxZDVmY2NlNTE4YzY4MGZiNWVjOGI4MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCkBAIC0zOCw2ICszOCw1MSBAQCBpbmxpbmUgVG1w
OjpUbXAoY29uc3QgQXJnJiBhcmcpCiAgICAgKnRoaXMgPSBhcmcudG1wKCk7CiB9CiAKKy8vIFdo
ZW4gYSBIYXNoIHN0cnVjdHVyZSBpcyB0b28gc2xvdyBvciB3aGVuIFNldHMgY29udGFpbnMgbW9z
dCB2YWx1ZXMsIHlvdSBjYW4KKy8vIHVzZSBkaXJlY3QgYXJyYXkgYWRkcmVzc2luZyB3aXRoIFRt
cHMuCit0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KK3N0cnVjdCBBYnNvbHV0ZVRtcE1hcHBlcjsK
KwordGVtcGxhdGU8Pgorc3RydWN0IEFic29sdXRlVG1wTWFwcGVyPEFyZzo6R1A+IHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgYWJzb2x1dGVJbmRleChjb25zdCBUbXAmIHRtcCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCh0bXAuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4o
dG1wLmludGVybmFsVmFsdWUoKSkgPiAwKTsKKyAgICAgICAgcmV0dXJuIHRtcC5pbnRlcm5hbFZh
bHVlKCk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGFic29sdXRlSW5kZXgodW5zaWdu
ZWQgdG1wSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYWJzb2x1dGVJbmRleChUbXA6Omdw
VG1wRm9ySW5kZXgodG1wSW5kZXgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1wIHRtcEZyb21B
YnNvbHV0ZUluZGV4KHVuc2lnbmVkIHRtcEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRt
cDo6dG1wRm9ySW50ZXJuYWxWYWx1ZSh0bXBJbmRleCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
Pgorc3RydWN0IEFic29sdXRlVG1wTWFwcGVyPEFyZzo6RlA+IHsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgYWJzb2x1dGVJbmRleChjb25zdCBUbXAmIHRtcCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0
bXAuaXNGUCgpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odG1wLmludGVybmFs
VmFsdWUoKSkgPCAwKTsKKyAgICAgICAgcmV0dXJuIC10bXAuaW50ZXJuYWxWYWx1ZSgpOworICAg
IH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBhYnNvbHV0ZUluZGV4KHVuc2lnbmVkIHRtcEluZGV4
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFic29sdXRlSW5kZXgoVG1wOjpmcFRtcEZvckluZGV4
KHRtcEluZGV4KSk7CisgICAgfQorCisgICAgc3RhdGljIFRtcCB0bXBGcm9tQWJzb2x1dGVJbmRl
eCh1bnNpZ25lZCB0bXBJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBUbXA6OnRtcEZvcklu
dGVybmFsVmFsdWUoLXRtcEluZGV4KTsKKyAgICB9Cit9OworCiB9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDJiOGZjOGE0NDMxMjQ3OWRiNjRhNjZjZmZj
OWUyYTgzMjdmNDhmMC4uYzI4YTEwZGM4NDU2ZmFjOTA3YWIwOTBjMmU0YzM2ZTFiOWMzMWI1MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04Niw2ICs4Niw3
IEBACiAJCTFGQTQ3QzhCMTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkE0N0M4OTE1MjUwMkRB
MDA1NjhEMUIgLyogV2ViQ29yZVRocmVhZC5oICovOyB9OwogCQkyNjE0N0IwQTE1RERDQ0RDMDBE
REI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYxNDdCMDgxNUREQ0NEQzAwRERCOTA3IC8qIElu
dGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCAqLzsgfTsKIAkJMjYyOTlCNkUxN0E5RTVCODAwQURF
QkU1IC8qIFJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjYyOTlCNkQxN0E5RTVCODAwQURFQkU1IC8qIFJlZi5oICovOyB9OworCQkyNjg0RDQzNjFD
MDAwRDQwMDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2ODRENDM1MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRl
eFNwYXJzZVNldC5oICovOyB9OwogCQkyQzA1Mzg1NDE1QkM4MTkwMDBGMjFCOTYgLyogR3JlZ29y
aWFuRGF0ZVRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJDMDUzODUzMTVCQzgxOTAwMEYyMUI5NiAvKiBHcmVnb3JpYW5EYXRlVGltZS5oICovOyB9
OwogCQkyQ0NEODkyQTE1QzAzOTAyMDAyODUwODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkNDRDg5MjkxNUMw
MzkwMjAwMjg1MDgzIC8qIEdyZWdvcmlhbkRhdGVUaW1lLmNwcCAqLzsgfTsKIAkJMkNERUQwRUYx
ODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0RFRDBFRTE4MTE1QzM4MDA0REJBNzAgLyogUnVuTG9v
cENGLmNwcCAqLzsgfTsKQEAgLTM4Niw2ICszODcsNyBAQAogCQkxRkE0N0M4OTE1MjUwMkRBMDA1
NjhEMUIgLyogV2ViQ29yZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJDb3JlVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2MTQ3QjA4
MTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYyOTlCNkQxN0E5RTVCODAwQURFQkU1IC8qIFJl
Zi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWYuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMjY4NEQ0MzUxQzAwMEQ0MDAwODFENjYzIC8qIEluZGV4U3BhcnNl
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4U3BhcnNlU2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJDMDUzODUzMTVCQzgxOTAwMEYyMUI5NiAv
KiBHcmVnb3JpYW5EYXRlVGltZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmVnb3JpYW5EYXRlVGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQ0NEODky
OTE1QzAzOTAyMDAyODUwODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JlZ29yaWFuRGF0ZVRpbWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyQ0RFRDBFRTE4MTE1QzM4MDA0REJBNzAgLyogUnVuTG9vcENG
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJ1bkxvb3BDRi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDEsNiArODAzLDcgQEAKIAkJCQlBOEE0
NzJCOTE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaFRhYmxlLmggKi8sCiAJCQkJQThBNDcyQkExNTFB
ODI1QTAwNDEyM0ZGIC8qIEhhc2hUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzJCQjE1MUE4MjVBMDA0
MTIzRkYgLyogSGV4TnVtYmVyLmggKi8sCisJCQkJMjY4NEQ0MzUxQzAwMEQ0MDAwODFENjYzIC8q
IEluZGV4U3BhcnNlU2V0LmggKi8sCiAJCQkJQThBNDcyQkMxNTFBODI1QTAwNDEyM0ZGIC8qIElu
bGluZUFTTS5oICovLAogCQkJCUE3MERBMDgyMTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24u
aCAqLywKIAkJCQk3Q0REN0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5o
ICovLApAQCAtMTIyOSw2ICsxMjMyLDcgQEAKIAkJCQlBNzQ4NzQ1MzE3QTBCREFFMDBGQTA0Q0Ig
LyogU2l4Q2hhcmFjdGVySGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MjYxNTFBODI1
QjAwNDEyM0ZGIC8qIFNwZWN0cnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyODE1MUE4
MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI2ODRENDM2
MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJzZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkVEQUNEM0UxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDI5MTUxQTgyNUIwMDQxMjNGRiAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDJBMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGRMaWJFeHRyYXMu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VT
ZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGM0MzY1
NmFmYzIxNjk3MTUwMGNjODdlMzc5NDgxY2Q5NGNmNjc5NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluZGV4U3BhcnNl
U2V0X2gKKyNkZWZpbmUgSW5kZXhTcGFyc2VTZXRfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSW5kZXhTcGFyc2VTZXQgaXMgYW4gZWZmaWNpZW50
IHNldCBvZiBpbnRlZ2VycyB0aGF0IGNhbiBvbmx5IGJlIHZhbHVlZAorLy8gYmV0d2VlbiB6ZXJv
IGFuZCBzaXplKCkgLSAxLgorLy8KKy8vIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyB1c2luZyBCcmln
Z3MgU3BhcnNlIFNldCByZXByZXNlbnRhdGlvbi4gV2UgYWxsb2NhdGUKKy8vIG1lbW9yeSBmcm9t
IDAgdG8gc2l6ZSgpIC0gMSB0byBkbyBtYXBwaW5nIGluIE8oMSksIGJ1dCB3ZSBuZXZlciBpbml0
aWFsaXplCisvLyB0aGF0IG1lbW9yeS4gV2hlbiBhZGRpbmcvcmVtb3ZpbmcgdmFsdWVzIHRvIHRo
ZSBzZXQsIHRoZXkgYXJlIGFkZGVkIGluIGEgbGlzdAorLy8gYW5kIHRoZSBjb3JyZXNwb25kaW5n
IGJ1Y2tldCBpcyBpbml0aWFsaXplZCB0byB0aGUgcG9zaXRpb24gaW4gdGhlIGxpc3QuCisvLwor
Ly8gVGhlIGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IHdlIG9ubHkgbmVlZCBhIHNwYXJzZSBzdWJz
ZXQgb2YgbnVtYmVyIGxpdmUgYXQgYW55CisvLyB0aW1lLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIgPSBDcmFzaE9uT3ZlcmZsb3c+CitjbGFzcyBJbmRleFNwYXJzZVNldCB7
CisgICAgdHlwZWRlZiBWZWN0b3I8dW5zaWduZWQsIDAsIE92ZXJmbG93SGFuZGxlcj4gVmFsdWVM
aXN0OworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIG1heFZh
bHVlKTsKKworICAgIHZvaWQgYWRkKHVuc2lnbmVkKTsKKyAgICB2b2lkIHJlbW92ZSh1bnNpZ25l
ZCk7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OworICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAgIGJvb2wgY29udGFpbnModW5zaWduZWQpIGNvbnN0
OworCisgICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yOworICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgICAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHVuc2lnbmVkLCAw
LCBPdmVyZmxvd0hhbmRsZXIsIDE+IG1fbWFwOworICAgIFZhbHVlTGlzdCBtX3ZhbHVlczsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGluZSBJbmRleFNwYXJz
ZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpJbmRleFNwYXJzZVNldCh1bnNpZ25lZCBtYXhWYWx1ZSkK
K3sKKyAgICBtX21hcC5yZXNpemUobWF4VmFsdWUgKyAxKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPgoraW5saW5lIHZvaWQgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dI
YW5kbGVyPjo6YWRkKHVuc2lnbmVkIHZhbHVlKQoreworICAgIGlmIChjb250YWlucyh2YWx1ZSkp
CisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG5ld1Bvc2l0aW9uID0gbV92YWx1ZXMu
c2l6ZSgpOworICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7CisgICAgbV9tYXBbdmFsdWVdID0g
bmV3UG9zaXRpb247Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lu
bGluZSB2b2lkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSh1bnNpZ25l
ZCB2YWx1ZSkKK3sKKyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IG1fbWFwW3ZhbHVlXTsKKyAgICBp
ZiAocG9zaXRpb24gPj0gbV92YWx1ZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV92YWx1ZXNbcG9zaXRpb25dID09IHZhbHVlKSB7CisgICAgICAgIHVuc2lnbmVkIGxhc3RW
YWx1ZSA9IG1fdmFsdWVzLmxhc3QoKTsKKyAgICAgICAgbV92YWx1ZXNbcG9zaXRpb25dID0gbGFz
dFZhbHVlOworICAgICAgICBtX21hcFtsYXN0VmFsdWVdID0gcG9zaXRpb247CisgICAgICAgIG1f
dmFsdWVzLnJlbW92ZUxhc3QoKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK3ZvaWQgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6Y2xlYXIo
KQoreworICAgIG1fdmFsdWVzLnJlc2l6ZSgwKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPgordW5zaWduZWQgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6
c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgorYm9vbCBJbmRleFNwYXJzZVNldDxPdmVyZmxv
d0hhbmRsZXI+Ojppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIXNpemUoKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgorYm9vbCBJbmRleFNwYXJzZVNldDxP
dmVyZmxvd0hhbmRsZXI+Ojpjb250YWlucyh1bnNpZ25lZCB2YWx1ZSkgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBwb3NpdGlvbiA9IG1fbWFwW3ZhbHVlXTsKKyAgICBpZiAocG9zaXRpb24gPj0gbV92
YWx1ZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV92YWx1
ZXNbcG9zaXRpb25dID09IHZhbHVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+CithdXRvIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmJlZ2luKCkgY29u
c3QgLT4gY29uc3RfaXRlcmF0b3IKK3sKKyAgICByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgorYXV0byBJbmRleFNwYXJzZVNl
dDxPdmVyZmxvd0hhbmRsZXI+OjplbmQoKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgoreworICAg
IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5n
IFdURjo6SW5kZXhTcGFyc2VTZXQ7CisKKyNlbmRpZiAvLyBJbmRleFNwYXJzZVNldF9oCg==
</data>
<flag name="review"
          id="291326"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>