<?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>80055</bug_id>
          
          <creation_ts>2012-03-01 15:15:04 -0800</creation_ts>
          <short_desc>JIT heuristics should be hyperbolic</short_desc>
          <delta_ts>2012-03-05 14:11:19 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>79962</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>paroga</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>568963</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-01 15:15:04 -0800</bug_when>
    <thetext>The less memory we have, the more we should wait to tier up.  This should further reduce the likelihood that we&apos;ll ever run out of executable memory, while also ensuring that when running an app that has a ton of code, we end up optimizing the things that are really the most important.

&lt;rdar://problem/10922260&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568974</commentid>
    <comment_count>1</comment_count>
      <attachid>129756</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-01 15:22:40 -0800</bug_when>
    <thetext>Created attachment 129756
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568980</commentid>
    <comment_count>2</comment_count>
      <attachid>129758</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-01 15:32:34 -0800</bug_when>
    <thetext>Created attachment 129758
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570219</commentid>
    <comment_count>3</comment_count>
      <attachid>130019</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-04 01:37:02 -0800</bug_when>
    <thetext>Created attachment 130019
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570220</commentid>
    <comment_count>4</comment_count>
      <attachid>130019</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-04 01:52:50 -0800</bug_when>
    <thetext>Comment on attachment 130019
the patch

Attachment 130019 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11807369</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570221</commentid>
    <comment_count>5</comment_count>
      <attachid>130019</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-04 01:57:26 -0800</bug_when>
    <thetext>Comment on attachment 130019
the patch

Attachment 130019 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11803596</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570222</commentid>
    <comment_count>6</comment_count>
      <attachid>130020</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-04 01:58:47 -0800</bug_when>
    <thetext>Created attachment 130020
the patch

Ooops, forgot to fix up all of the build systems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570223</commentid>
    <comment_count>7</comment_count>
      <attachid>130020</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-04 02:12:18 -0800</bug_when>
    <thetext>Comment on attachment 130020
the patch

Attachment 130020 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11801569</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570224</commentid>
    <comment_count>8</comment_count>
      <attachid>130021</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-04 02:15:25 -0800</bug_when>
    <thetext>Created attachment 130021
the patch

Trying again to fix Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570227</commentid>
    <comment_count>9</comment_count>
      <attachid>130021</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-04 03:47:13 -0800</bug_when>
    <thetext>Comment on attachment 130021
the patch

Attachment 130021 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11802597

New failing tests:
editing/selection/select-line-break-with-opposite-directionality.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570417</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-04 22:53:26 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/109705</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570917</commentid>
    <comment_count>11</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2012-03-05 11:56:39 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Landed in http://trac.webkit.org/changeset/109705

Patch broke WinCE bot, which is the only one with JIT turned off.

1&gt;ExecutionCounter.cpp
1&gt;..\..\..\..\Source\JavaScriptCore\bytecode\ExecutionCounter.cpp(68) : error C2653: &apos;ExecutableAllocator&apos; : is not a class or namespace name
1&gt;..\..\..\..\Source\JavaScriptCore\bytecode\ExecutionCounter.cpp(68) : error C3861: &apos;memoryPressureMultiplier&apos;: identifier not found

Can fix it, or at least tell me what&apos;s the correct way to fix it?


If there is any interrest in maintaing the !ENABLE(JIT) build, it would be nice to watch the WinCE bot too. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570927</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-05 12:08:02 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Landed in http://trac.webkit.org/changeset/109705
&gt; 
&gt; Patch broke WinCE bot, which is the only one with JIT turned off.
&gt; 
&gt; 1&gt;ExecutionCounter.cpp
&gt; 1&gt;..\..\..\..\Source\JavaScriptCore\bytecode\ExecutionCounter.cpp(68) : error C2653: &apos;ExecutableAllocator&apos; : is not a class or namespace name
&gt; 1&gt;..\..\..\..\Source\JavaScriptCore\bytecode\ExecutionCounter.cpp(68) : error C3861: &apos;memoryPressureMultiplier&apos;: identifier not found
&gt; 
&gt; Can fix it, or at least tell me what&apos;s the correct way to fix it?
&gt; 
&gt; 
&gt; If there is any interrest in maintaing the !ENABLE(JIT) build, it would be nice to watch the WinCE bot too. :-)

Oh noes!  Sorry about that!  The right fix is to place #if ENABLE(JIT) around ExecutionCounter.h and ExecutionCounter.cpp.  Hopefully that will be sufficient.

If you don&apos;t get around to it in the next half hour, I&apos;ll do it when I get to the office.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570957</commentid>
    <comment_count>13</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2012-03-05 12:40:46 -0800</bug_when>
    <thetext>Landed fix for !ENABLE(JIT) in http://trac.webkit.org/changeset/109784</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570968</commentid>
    <comment_count>14</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2012-03-05 12:52:05 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Landed fix for !ENABLE(JIT) in http://trac.webkit.org/changeset/109784

Simple adding #if ENABLE(JIT) isn&apos;t sufficent, since it&apos;s used in CodeBlock.h. IMHO there are some additional ifdefs required. Can you take care of this problem? Otherwise I need to digg deeper into the code, to place the ifdefs correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570980</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-05 13:07:38 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; Landed fix for !ENABLE(JIT) in http://trac.webkit.org/changeset/109784
&gt; 
&gt; Simple adding #if ENABLE(JIT) isn&apos;t sufficent, since it&apos;s used in CodeBlock.h. IMHO there are some additional ifdefs required. Can you take care of this problem? Otherwise I need to digg deeper into the code, to place the ifdefs correctly.

Yes, I&apos;ll take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571036</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-05 14:11:19 -0800</bug_when>
    <thetext>Build fix landed in http://trac.webkit.org/changeset/109802</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129756</attachid>
            <date>2012-03-01 15:22:40 -0800</date>
            <delta_ts>2012-03-01 15:32:34 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>hyperbolicjit_patch_1.diff</filename>
            <type>text/plain</type>
            <size>49103</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5NDQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBA
QAorMjAxMi0wMy0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpJVCBoZXVyaXN0aWNzIHNob3VsZCBiZSBoeXBlcmJvbGljCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDA1NQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMTA5MjIyNjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBBZGRlZCB0cmFja2luZyBvZiB0aGUgYW1vdW50IG9mIGV4ZWN1dGFibGUg
bWVtb3J5IHR5cGljYWxseSB1c2VkIGZvciBhIGJ5dGVjb2RlCisgICAgICAgIGluc3RydWN0aW9u
LiBNb2RpZmllZCB0aGUgZXhlY3V0aW9uIGNvdW50ZXIgc2NoZW1lIHRvIHVzZSB0aGlzLCBhbmQg
dGhlIGFtb3VudAorICAgICAgICBvZiBmcmVlIG1lbW9yeSwgdG8gZGV0ZXJtaW5lIGhvdyBsb25n
IHRvIHdhaXQgYmVmb3JlIGludm9raW5nIHRoZSBKSVQuCisgICAgICAgIAorICAgICAgICBUaGUg
cmVzdWx0IGlzIHRoYXQgZXZlbiBpZiB3ZSBib21iIHRoZSBWTSB3aXRoIG1vcmUgY29kZSB0aGFu
IGNhbiBmaXQgaW4gb3VyCisgICAgICAgIGV4ZWN1dGFibGUgbWVtb3J5IHBvb2wsIHdlIHN0aWxs
IGtlZXAgcnVubmluZyBhbmQgYWxtb3N0IG5ldmVyIHJ1biBvdXQgb2YKKyAgICAgICAgZXhlY3V0
YWJsZSBtZW1vcnkgLSB3aGljaCBlbnN1cmVzIHRoYXQgaWYgd2UgaGF2ZSB0byBKSVQgc29tZXRo
aW5nIGNyaXRpY2FsLCB0aGVuCisgICAgICAgIHdlJ2xsIGxpa2VseSBoYXZlIGVub3VnaCBtZW1v
cnkgdG8gZG8gc28uIFRoaXMgYWxzbyBkb2VzIG5vdCByZWdyZXNzIHBlcmZvcm1hbmNlCisgICAg
ICAgIG9uIHRoZSB0aHJlZSBtYWluIGJlbmNobWFya3MuCisgICAgICAgIAorICAgICAgICBXT1JL
IElOIFBST0dSRVNTLiBTdGlsbCBuZWVkIHRvIHdyaXRlIDY0LWJpdCBwYXJ0LCBuZWVkIHRvIGNs
ZWFuIHVwIHNvbWUgZGVidWcKKyAgICAgICAgc3R1ZmYsIGFuZCBmaXggYSBjcmFzaCBvbiBWOC9y
YXl0cmFjZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1c2VzT3Bjb2RlKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmRvbnRKSVRBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0QWZ0ZXJX
YXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdFNvb24pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcik6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0aW9uVG90YWxDb3VudCk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0RXhlY3V0ZUNvdW50ZXIpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpkb250T3B0aW1pemVBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6b3B0aW1pemVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
b3B0aW1pemVBZnRlckxvbmdXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGlt
aXplU29vbik6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6RXhlY3V0
aW9uQ291bnRlcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6OmNoZWNrSWZUaHJl
c2hvbGRDcm9zc2VkQW5kU2V0KToKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6c2V0
TmV3VGhyZXNob2xkKToKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6ZGVmZXJJbmRl
ZmluaXRlbHkpOgorICAgICAgICAoSlNDOjpFeGVjdXRpb25Db3VudGVyOjphcHBseU1lbW9yeVVz
YWdlSGV1cmlzdGljcyk6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVt
b3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KToKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6aGFzQ3Jvc3NlZFRocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGlv
bkNvdW50ZXI6OnNldFRocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6
OnJlc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEV4ZWN1dGlvbkNvdW50ZXIpOgorICAgICAgICAoSlND
OjpFeGVjdXRpb25Db3VudGVyOjpmb3JtYXR0ZWRUb3RhbENvdW50KToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGVO
ZXdTcGFjZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5
UHJlc3N1cmUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9j
YXRvcjo6bWVtb3J5UHJlc3N1cmVNdWx0aXBsaWVyKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5oOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3Vy
ZU11bHRpcGxpZXIpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGxs
aW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmppdENvbXBpbGVB
bmRTZXRIZXVyaXN0aWNzKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0ds
b2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChPcHRp
b25zKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6ZU9wdGlvbnMpOgorICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAoT3B0aW9ucyk6CisgICAgICAgICogd3Rm
L1NpbXBsZVN0YXRzLmg6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFNpbXBsZVN0
YXRzKToKKyAgICAgICAgKFdURjo6U2ltcGxlU3RhdHM6OlNpbXBsZVN0YXRzKToKKyAgICAgICAg
KFdURjo6U2ltcGxlU3RhdHM6OmFkZCk6CisgICAgICAgIChXVEY6OlNpbXBsZVN0YXRzOjpvcGVy
YXRvciEpOgorICAgICAgICAoV1RGOjpTaW1wbGVTdGF0czo6Y291bnQpOgorICAgICAgICAoV1RG
OjpTaW1wbGVTdGF0czo6c3VtKToKKyAgICAgICAgKFdURjo6U2ltcGxlU3RhdHM6OnN1bU9mU3F1
YXJlcyk6CisgICAgICAgIChXVEY6OlNpbXBsZVN0YXRzOjptZWFuKToKKyAgICAgICAgKFdURjo6
U2ltcGxlU3RhdHM6OnZhcmlhbmNlKToKKyAgICAgICAgKFdURjo6U2ltcGxlU3RhdHM6OnN0YW5k
YXJkRGV2aWF0aW9uKToKKwogMjAxMi0wMy0wMSAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFu
QGludGVsLmNvbT4KIAogICAgICAgICBERkcgbG9jYWwgQ1NFIGZvciBhIG5vZGUgY2FuIGJlIHRl
cm1pbmF0ZWQgZWFybGllcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDEwOTMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDkgQEAK
IAkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQxMTRCQkM1
RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5IC8q
IEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY1NUYwRjExNEQxMDYzNjAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwICovOyB9Owog
CQkwRjU1RjBGNTE0RDEwNjNDMDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NUYwRjIxNEQxMDYzNjAwQUM3NjQ5
IC8qIEFic3RyYWN0UEMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjU2QTFEMzE1MDAwRjM1MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NkExRDEx
NTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjU2QTFENTE1MDAxQ0Y0MDAyOTkyQjEg
LyogRXhlY3V0aW9uQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRl
ci5jcHAgKi87IH07CisJCTBGNTZBMUQ3MTUwMDI4QkIwMDI5OTJCMSAvKiBTaW1wbGVTdGF0cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NkExRDYx
NTAwMjhCOTAwMjk5MkIxIC8qIFNpbXBsZVN0YXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzIxNDNG
Q0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjIwMTc1MTQzRkNEMzcwMDY4Qjc3
QyAvKiBERkdPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk3NCw2ICs5Nzcs
OSBAQAogCQkwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIb3N0Q2FsbFJldHVyblZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTVGMEYxMTREMTA2MzYwMEFDNzY0OSAv
KiBBYnN0cmFjdFBDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFi
c3RyYWN0UEMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1RjBGMjE0RDEw
NjM2MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBYnN0cmFjdFBDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTZBMUQx
MTUwMDBGMzEwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGlvbkNvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY1NkExRDQxNTAwMUNGMjAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0aW9uQ291bnRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTZBMUQ2MTUwMDI4QjkwMDI5OTJC
MSAvKiBTaW1wbGVTdGF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1w
bGVTdGF0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVGMDhDQzE0NkJFNjAy
MDAwNDcyQTkgLyogREZHQnl0ZUNvZGVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdCeXRlQ29kZUNhY2hlLmg7IHBhdGggPSBkZmcvREZHQnl0ZUNvZGVDYWNoZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkg
LyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuY3BwOyBw
YXRoID0gZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjMxNCw2ICsyMzIwLDcgQEAKIAkJCQlBN0M0MEMwODEzMEIwNTdEMDBEMDAyQTEgLyog
U2VudGluZWxMaW5rZWRMaXN0LmggKi8sCiAJCQkJNzZGQjlGMTAxMkU4NTE5NjAwNTFBMkVCIC8q
IFNIQTEuY3BwICovLAogCQkJCTc2RkI5RjBFMTJFODUxODYwMDUxQTJFQiAvKiBTSEExLmggKi8s
CisJCQkJMEY1NkExRDYxNTAwMjhCOTAwMjk5MkIxIC8qIFNpbXBsZVN0YXRzLmggKi8sCiAJCQkJ
QTdDNDBDMDkxMzBCMDU3RDAwRDAwMkExIC8qIFNpbmdseUxpbmtlZExpc3QuaCAqLywKIAkJCQkw
QkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8sCiAJCQkJMEYyRTVC
RjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0cnVtLmggKi8sCkBAIC0yNzg4LDYgKzI3OTUsOCBA
QAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNTZBMUQ0MTUwMDFDRjIwMDI5OTJC
MSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCAqLywKKwkJCQkwRjU2QTFEMTE1MDAwRjMxMDAyOTky
QjEgLyogRXhlY3V0aW9uQ291bnRlci5oICovLAogCQkJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4
OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3QTE0
RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovLAogCQkJ
CTBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAg
Ki8sCkBAIC0zNDA5LDYgKzM0MTgsOCBAQAogCQkJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAv
KiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI1
NDY5MDE0RkFEQTdCMDAyQzI5ODkgLyogUmVmQ291bnRlZEFycmF5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25D
b3VudGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjU2QTFENzE1MDAyOEJCMDAyOTkyQjEgLyog
U2ltcGxlU3RhdHMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNDAxOCw2ICs0MDI5LDcgQEAKIAkJCQkw
RkZGQzk1RjE0RUY5MEJCMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3RDE0
RjVDRkQ2MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjU2QTFENTE1MDAxQ0Y0MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0Nyw3ICsy
NDQ3LDQxIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCiB9CiAjZW5kaWYK
IAotI2lmbmRlZiBOREVCVUcKK3NpemVfdCBDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVDb2Rl
U2l6ZSgpCit7CisgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBmcm9tIENvZGVCbG9jazo6Q29k
ZUJsb2NrIGJlZm9yZSBlaXRoZXIgbV9nbG9iYWxEYXRhIG9yIHRoZQorICAgIC8vIGluc3RydWN0
aW9ucyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuIEl0J3MgT0sgdG8gcmV0dXJuIDAgYmVjYXVzZSB3
aGF0IHdpbGwgcmVhbGx5CisgICAgLy8gbWF0dGVyIGlzIHRoZSByZWNvbXB1dGF0aW9uIG9mIHRo
aXMgdmFsdWUgd2hlbiB0aGUgc2xvdyBwYXRoIGlzIHRyaWdnZXJlZC4KKyAgICBpZiAoIW1fZ2xv
YmFsRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYgKCFtX2dsb2JhbERhdGEt
Pm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVCkKKyAgICAgICAg
cmV0dXJuIDA7IC8vIEl0J3MgYXMgZ29vZCBvZiBhIHByZWRpY3Rpb24gYXMgd2UnbGwgZ2V0Lgor
ICAgIAorICAgIC8vIEJlIGNvbnNlcnZhdGl2ZTogcmV0dXJuIGEgc2l6ZSB0aGF0IHdpbGwgYmUg
YW4gb3ZlcmVzdGltYXRpb24gODQlIG9mIHRoZSB0aW1lLgorICAgIGRvdWJsZSBtdWx0aXBsaWVy
ID0gbV9nbG9iYWxEYXRhLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxp
bmVKSVQubWVhbigpICsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT5tYWNoaW5lQ29kZUJ5dGVzUGVy
Qnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQuc3RhbmRhcmREZXZpYXRpb24oKTsKKyAgICAKKyAg
ICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coIk1hY2hpbmUgY29kZSBzaXplIHByZWRpY3Rp
b24gbXVsdGlwbGllciA9ICVsZlxuIiwgbXVsdGlwbGllcik7CisgICAgCisgICAgLy8gQmUgcGFy
YW5vaWQ6IHNpbGVudGx5IHJlamVjdCBib2d1cyBtdWx0aXBpZXJzLiBTaWxlbnRseSBkb2luZyB0
aGUgIndyb25nIiB0aGluZworICAgIC8vIGhlcmUgaXMgT0ssIHNpbmNlIHRoaXMgd2hvbGUgbWV0
aG9kIGlzIGp1c3QgYSBoZXVyaXN0aWMuCisgICAgaWYgKG11bHRpcGxpZXIgPCAwIHx8IG11bHRp
cGxpZXIgPiAxMDAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBkb3VibGUgZG91Ymxl
UmVzdWx0ID0gbXVsdGlwbGllciAqIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsKKyAgICAKKyAgICAv
LyBCZSBldmVuIG1vcmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCB2YWx1ZXMgdGhhdCB3b24n
dCBmaXQgaW50byBhIHNpemVfdC4gSWYKKyAgICAvLyB0aGUgZnVuY3Rpb24gaXMgc28gaHVnZSB0
aGF0IHdlIGNhbid0IGV2ZW4gZml0IGl0IGludG8gdmlydHVhbCBtZW1vcnkgdGhlbiB3ZQorICAg
IC8vIHNob3VsZCBwcm9iYWJseSBoYXZlIHNvbWUgb3RoZXIgZ3VhcmRzIGluIHBsYWNlIHRvIHBy
ZXZlbnQgdXMgZnJvbSBldmVuIGdldHRpbmcKKyAgICAvLyB0byB0aGlzIHBvaW50LgorICAgIGlm
IChkb3VibGVSZXN1bHQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90Pihkb3Vi
bGVSZXN1bHQpOworfQorCiBib29sIENvZGVCbG9jazo6dXNlc09wY29kZShPcGNvZGVJRCBvcGNv
ZGVJRCkKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBnbG9iYWxEYXRhKCktPmlu
dGVycHJldGVyOwpAQCAtMjQ3Miw2ICsyNTA2LDUgQEAgYm9vbCBDb2RlQmxvY2s6OnVzZXNPcGNv
ZGUoT3Bjb2RlSUQgb3BjbwogICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDEwOTMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2lu
Y2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUg
IkV2YWxDb2RlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVk
ZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUgIkdsb2JhbFJlc29sdmVJbmZvLmgi
CiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKQEAgLTM0NCw2ICszNDUsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25z
KCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgY29uc3QgUmVmQ291bnRlZEFy
cmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVj
dGlvbnM7IH0KICAgICAgICAgCisgICAgICAgIHNpemVfdCBwcmVkaWN0ZWRNYWNoaW5lQ29kZVNp
emUoKTsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgdXNlc09wY29kZShPcGNvZGVJRCk7CiAKICAg
ICAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25z
LnNpemUoKTsgfQpAQCAtODMyLDI0ICs4MzUsMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiBKSVR0aW5nIGtpY2tzIGluLCBpbiBh
IG1peGVkIG1vZGUKICAgICAgICAgLy8gZXhlY3V0aW9uIHdvcmxkLgogICAgICAgICAKKyAgICAg
ICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRB
bmRTZXQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZvaWQgZG9udEpJVEFu
eXRpbWVTb29uKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVy
ID0gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udEpJVEFueXRpbWVTb29uOwor
ICAgICAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSBPcHRpb25zOjpleGVjdXRp
b25Db3VudGVyVmFsdWVGb3JKSVRBZnRlcldhcm1VcDsKKyAgICAgICAgICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJX
YXJtVXAsIHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGppdFNvb24o
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSBPcHRpb25z
OjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JKSVRTb29uOworICAgICAgICAgICAgbV9sbGludEV4
ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29u
LCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaW50MzJfdCBsbGludEV4ZWN1
dGVDb3VudGVyKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fbGxpbnRF
eGVjdXRlQ291bnRlcjsKKyAgICAgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIu
bV9jb3VudGVyOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBGdW5jdGlvbnMgZm9y
IGNvbnRyb2xsaW5nIHdoZW4gdGllcmVkIGNvbXBpbGF0aW9uIGtpY2tzIGluLiBUaGlzCkBAIC04
ODgsMzEgKzg5Niw0MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGludDMy
X3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBPcHRpb25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CisgICAgICAgICAgICBy
ZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCA8PCByZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpbnQz
Ml90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CisgICAg
ICAgICAgICByZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJt
VXAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gJm1faml0RXhlY3V0ZUNvdW50ZXI7CisgICAgICAgICAgICBy
ZXR1cm4gJm1faml0RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVyOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKTsg
fQorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX2NvdW50ZXIpOyB9CisgICAgICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX2FjdGl2ZVRocmVzaG9sZCk7IH0K
KyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlvblRvdGFsQ291bnQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVy
KSArIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX3RvdGFsQ291bnQpOyB9CiAK
LSAgICAgICAgaW50MzJfdCBqaXRFeGVjdXRlQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1faml0
RXhlY3V0ZUNvdW50ZXI7IH0KKyAgICAgICAgaW50MzJfdCBqaXRFeGVjdXRlQ291bnRlcigpIGNv
bnN0IHsgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVyOyB9CiAgICAgICAgIAog
ICAgICAgICB1bnNpZ25lZCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSBjb25zdCB7IHJldHVy
biBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsgfQogICAgICAgICAKKyAgICAgICAgLy8gQ2hl
Y2sgaWYgdGhlIG9wdGltaXphdGlvbiB0aHJlc2hvbGQgaGFzIGJlZW4gcmVhY2hlZCwgYW5kIGlm
IG5vdCwKKyAgICAgICAgLy8gYWRqdXN0IHRoZSBoZXVyaXN0aWNzIGFjY29yZGluZ2x5LiBSZXR1
cm5zIHRydWUgaWYgdGhlIHRocmVzaG9sZCBoYXMKKyAgICAgICAgLy8gYmVlbiByZWFjaGVkLgor
ICAgICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8v
IENhbGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJl
LiBUaGlzIGlzCiAgICAgICAgIC8vIHJhcmVseSB3aXNlLCBzaW5jZSBvcHRpbWl6YXRpb24gdHJp
Z2dlcnMgYXJlIHR5cGljYWxseSBtb3JlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1
dGluZyBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24o
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyID0gT3B0aW9uczo6
ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbjsKKyAgICAgICAg
ICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVudCBvcHRpbWl6YXRp
b24gZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdApAQCAtOTIyLDcgKzk0MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAvLyB0aGUgZnV0dXJlIGFzIHdlbGwuCiAgICAgICAgIHZv
aWQgZG9udE9wdGltaXplQW55dGltZVNvb24oKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2pp
dEV4ZWN1dGVDb3VudGVyID0gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9w
dGltaXplQW55dGltZVNvb247CisgICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLmRlZmVy
SW5kZWZpbml0ZWx5KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhp
cyB0byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8gaXRzIHN0YXJ0aW5nIHN0YXRlLApAQCAt
OTMzLDE0ICs5NTEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGNvdW50ZXIgdGhh
dCB0aGlzIGNvcnJlc3BvbmRzIHRvIGlzIGFsc28gYXZhaWxhYmxlIGRpcmVjdGx5LgogICAgICAg
ICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2pp
dEV4ZWN1dGVDb3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpOwor
ICAgICAgICAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoY291bnRlclZh
bHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIGFuIG9wdGltaXphdGlvbiB0cmlnZ2VyIHRv
IGZpcmUgb25seSBhZnRlcgogICAgICAgICAvLyBhIGxvdCBvZiB3YXJtLXVwLgogICAgICAgICB2
b2lkIG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9q
aXRFeGVjdXRlQ291bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCk7CisgICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChjb3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpLCB0aGlzKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGNhdXNlIGFuIG9wdGltaXphdGlvbiB0
cmlnZ2VyIHRvIGZpcmUgc29vbiwgYnV0CkBAIC05NjMsNyArOTgxLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGlt
aXplU29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIgPSBP
cHRpb25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24gPDwgcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAgICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0
TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplU29vbiA8PCByZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigpLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgLy8gVGhlIHNwZWN1bGF0aXZlIEpJVCB0cmFja3MgaXRzIHN1Y2Nlc3MgcmF0ZSwgc28gdGhh
dCB3ZSBjYW4KQEAgLTEyMDMsMTMgKzEyMjEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAgICAgCi0gICAgICAgIGlu
dDMyX3QgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICBFeGVjdXRpb25Db3VudGVyIG1f
bGxpbnRFeGVjdXRlQ291bnRlcjsKICAgICAgICAgCi0gICAgICAgIGludDMyX3QgbV9qaXRFeGVj
dXRlQ291bnRlcjsKKyAgICAgICAgRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVy
OworICAgICAgICBpbnQzMl90IG1fdG90YWxKSVRFeGVjdXRpb25zOwogICAgICAgICB1aW50MzJf
dCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7CiAgICAgICAgIHVpbnQzMl90IG1fc3BlY3Vs
YXRpdmVGYWlsQ291bnRlcjsKLSAgICAgICAgdWludDhfdCBtX29wdGltaXphdGlvbkRlbGF5Q291
bnRlcjsKLSAgICAgICAgdWludDhfdCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOworICAg
ICAgICB1aW50MTZfdCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsKKyAgICAgICAgdWludDE2
X3QgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKICAgICAgICAgCiAgICAgICAgIHN0cnVj
dCBSYXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxv
Zy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworRXhlY3V0aW9uQ291bnRlcjo6RXhlY3V0aW9uQ291
bnRlcigpCit7CisgICAgcmVzZXQoKTsKK30KKworYm9vbCBFeGVjdXRpb25Db3VudGVyOjpjaGVj
a0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBp
ZiAoaGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICBpZiAoc2V0VGhyZXNob2xkKGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFeGVjdXRpb25Db3VudGVy
OjpzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayogY29kZUJsb2Nr
KQoreworICAgIHJlc2V0KCk7CisgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7Cisg
ICAgc2V0VGhyZXNob2xkKGNvZGVCbG9jayk7Cit9CisKK3ZvaWQgRXhlY3V0aW9uQ291bnRlcjo6
ZGVmZXJJbmRlZmluaXRlbHkoKQoreworICAgIG1fdG90YWxDb3VudCA9IDA7CisgICAgbV9hY3Rp
dmVUaHJlc2hvbGQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKTsKKyAgICBt
X2NvdW50ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKTsKK30KKworZG91
YmxlIEV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKGludDMyX3Qg
dmFsdWUsIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGRvdWJsZSBtdWx0aXBsaWVyID0K
KyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1cmVNdWx0aXBsaWVyKAor
ICAgICAgICAgICAgY29kZUJsb2NrLT5wcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKSk7CisgICAg
QVNTRVJUKG11bHRpcGxpZXIgPj0gMS4wKTsKKyAgICByZXR1cm4gbXVsdGlwbGllciAqIHZhbHVl
OworfQorCitpbnQzMl90IEV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0
aWNzQW5kQ29udmVydFRvSW50KAorICAgIGludDMyX3QgdmFsdWUsIENvZGVCbG9jayogY29kZUJs
b2NrKQoreworICAgIGRvdWJsZSBkb3VibGVSZXN1bHQgPSBhcHBseU1lbW9yeVVzYWdlSGV1cmlz
dGljcyh2YWx1ZSwgY29kZUJsb2NrKTsKKyAgICAKKyAgICBBU1NFUlQoZG91YmxlUmVzdWx0ID49
IDApOworICAgIAorICAgIGlmIChkb3VibGVSZXN1bHQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1heCgpOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pihkb3VibGVS
ZXN1bHQpOworfQorCitib29sIEV4ZWN1dGlvbkNvdW50ZXI6Omhhc0Nyb3NzZWRUaHJlc2hvbGQo
Q29kZUJsb2NrKiBjb2RlQmxvY2spIGNvbnN0Cit7CisgICAgLy8gVGhpcyBjaGVja3MgaWYgdGhl
IGN1cnJlbnQgY291bnQgcm91bmRlZCB1cCB0byB0aGUgdGhyZXNob2xkIHdlIHdlcmUgdGFyZ2V0
aW5nLgorICAgIC8vIEZvciBleGFtcGxlLCBpZiB3ZSBhcmUgdXNpbmcgaGFsZiBvZiBhdmFpbGFi
bGUgZXhlY3V0YWJsZSBtZW1vcnkgYW5kIGhhdmUKKyAgICAvLyBtX2FjdGl2ZVRocmVzaG9sZCA9
IDEwMDAsIGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKG1fYWN0aXZlVGhyZXNob2xkKSB3aWxs
IGJlCisgICAgLy8gMjAwMCwgYnV0IHdlIHdpbGwgcHJldGVuZCBhcyBpZiB0aGUgdGhyZXNob2xk
IHdhcyBjcm9zc2VkIGlmIHdlIHJlYWNoIDIwMDAgLQorICAgIC8vIDEwMDAgLyAyLCBvciAxNTAw
LiBUaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB3ZSB3YW50IHRvIGF2b2lkIHRocmFzaGluZy4g
SWYKKyAgICAvLyB0aGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlLCB0aGVuIHRoZSBKSVQncyB0aHJl
c2hvbGQgZm9yIHdoZW4gaXQgd2lsbCBhZ2FpbiBjYWxsCisgICAgLy8gaW50byB0aGUgc2xvdyBw
YXRoICh3aGljaCB3aWxsIGNhbGwgdGhpcyBtZXRob2QgYSBzZWNvbmQgdGltZSkgd2lsbCBiZSBz
ZXQKKyAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY3VycmVu
dCBjb3VudCBhbmQgdGhlIHRhcmdldCBjb3VudAorICAgIC8vIGFjY29yZGluZyB0byAqY3VycmVu
dCogbWVtb3J5IHVzYWdlLiBCdXQgYnkgdGhlIHRpbWUgd2UgY2FsbCBpbnRvIHRoaXMgYWdhaW4s
IHdlCisgICAgLy8gbWF5IGhhdmUgSklUJ2VkIG1vcmUgY29kZSwgYW5kIHNvIHRoZSB0YXJnZXQg
Y291bnQgd2lsbCBpbmNyZWFzZSBzbGlnaHRseS4gVGhpcworICAgIC8vIG1heSBsZWFkIHRvIGEg
cmVwZWF0aW5nIHBhdHRlcm4gd2hlcmUgdGhlIHRhcmdldCBjb3VudCBpcyBzbGlnaHRseSBpbmNy
ZW1lbnRlZCwKKyAgICAvLyB0aGUgSklUIGltbWVkaWF0ZWx5IG1hdGNoZXMgdGhhdCBpbmNyZWFz
ZSwgY2FsbHMgaW50byB0aGUgc2xvdyBwYXRoIGFnYWluLCBhbmQKKyAgICAvLyBhZ2FpbiB0aGUg
dGFyZ2V0IGNvdW50IGlzIHNsaWdodGx5IGluY3JlbWVudGVkLiBJbnN0ZWFkIG9mIGhhdmluZyB0
aGlzIHZpY2lvdXMKKyAgICAvLyBjeWNsZSwgd2UgZGVjbGFyZSB2aWN0b3J5IGEgYml0IGVhcmx5
IGlmIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQKKyAgICAvLyB0b3RhbCBhbmQg
b3VyIHRhcmdldCBhY2NvcmRpbmcgdG8gbWVtb3J5IGhldXJpc3RpY3MgaXMgc21hbGwuIE91ciBk
ZWZpbml0aW9uIG9mCisgICAgLy8gc21hbGwgaXMgYXJiaXRyYXJpbHkgcGlja2VkIHRvIGJlIGhh
bGYgb2YgdGhlIG9yaWdpbmFsIHRocmVzaG9sZCAoaS5lLgorICAgIC8vIG1fYWN0aXZlVGhyZXNo
b2xkKS4KKyAgICAKKyAgICBkb3VibGUgbW9kaWZpZWRUaHJlc2hvbGQgPSBhcHBseU1lbW9yeVVz
YWdlSGV1cmlzdGljcyhtX2FjdGl2ZVRocmVzaG9sZCwgY29kZUJsb2NrKTsKKyAgICAKKyAgICBp
ZiAoZmFsc2UpIHsKKyAgICAgICAgZGF0YUxvZygibV90b3RhbENvdW50ID0gJWxmLCBtX2NvdW50
ZXIgPSAlZCwgbW9kaWZpZWRUaHJlc2hvbGQgPSAlbGYsIG1fYWN0aXZlVGhyZXNob2xkID0gJWRc
biIsCisgICAgICAgICAgICAgICAgKGRvdWJsZSltX3RvdGFsQ291bnQsIG1fY291bnRlciwgbW9k
aWZpZWRUaHJlc2hvbGQsIG1fYWN0aXZlVGhyZXNob2xkKTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlciA+PQorICAg
ICAgICAgbW9kaWZpZWRUaHJlc2hvbGQgLSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fYWN0aXZlVGhy
ZXNob2xkKSAvIDI7Cit9CisKK2Jvb2wgRXhlY3V0aW9uQ291bnRlcjo6c2V0VGhyZXNob2xkKENv
ZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChtX2FjdGl2ZVRocmVzaG9sZCA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkgeworICAgICAgICBkZWZlckluZGVmaW5p
dGVseSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAgICBBU1NF
UlQoIWhhc0Nyb3NzZWRUaHJlc2hvbGQoY29kZUJsb2NrKSk7CisgICAgICAgIAorICAgIC8vIENv
bXB1dGUgdGhlIHRydWUgdG90YWwgY291bnQuCisgICAgZG91YmxlIHRydWVUb3RhbENvdW50ID0g
c3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyOworICAgICAgICAK
KyAgICAvLyBDb3JyZWN0IHRoZSB0aHJlc2hvbGQgZm9yIGN1cnJlbnQgbWVtb3J5IHVzYWdlLgor
ICAgIGRvdWJsZSB0aHJlc2hvbGQgPSBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljcyhtX2FjdGl2
ZVRocmVzaG9sZCwgY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgLy8gVGhyZXNob2xkIG11c3Qg
YmUgbm9uLW5lZ2F0aXZlIGFuZCBub3QgTmFOLgorICAgIEFTU0VSVCh0aHJlc2hvbGQgPj0gMCk7
CisgICAgICAgIAorICAgIC8vIEFkanVzdCB0aGUgdGhyZXNob2xkIGFjY29yZGluZyB0byB0aGUg
bnVtYmVyIG9mIGV4ZWN1dGlvbnMgd2UgaGF2ZSBhbHJlYWR5CisgICAgLy8gc2Vlbi4gVGhpcyBz
aG91bGRuJ3QgZ28gbmVnYXRpdmUsIGJ1dCBpdCBtaWdodCwgYmVjYXVzZSBvZiByb3VuZC1vZmYg
ZXJyb3JzLgorICAgIHRocmVzaG9sZCAtPSB0cnVlVG90YWxDb3VudDsKKyAgICAgICAgCisgICAg
aWYgKHRocmVzaG9sZCA8PSAwKSB7CisgICAgICAgIG1fY291bnRlciA9IDA7CisgICAgICAgIG1f
dG90YWxDb3VudCA9IHRydWVUb3RhbENvdW50OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAodGhyZXNob2xkID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4
KCkpCisgICAgICAgIHRocmVzaG9sZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1h
eCgpOworICAgICAgICAKKyAgICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhy
ZXNob2xkKTsKKyAgICAgICAgCisgICAgbV90b3RhbENvdW50ID0gdHJ1ZVRvdGFsQ291bnQgKyB0
aHJlc2hvbGQ7CisgICAgICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFeGVjdXRp
b25Db3VudGVyOjpyZXNldCgpCit7CisgICAgbV9jb3VudGVyID0gMDsKKyAgICBtX3RvdGFsQ291
bnQgPSAwOworICAgIG1fYWN0aXZlVGhyZXNob2xkID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3Vu
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1
dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBFeGVj
dXRpb25Db3VudGVyX2gKKyNkZWZpbmUgRXhlY3V0aW9uQ291bnRlcl9oCisKKyNpbmNsdWRlIDx3
dGYvU2ltcGxlU3RhdHMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsK
KworY2xhc3MgRXhlY3V0aW9uQ291bnRlciB7CitwdWJsaWM6CisgICAgRXhlY3V0aW9uQ291bnRl
cigpOworICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7
CisgICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayop
OworICAgIHZvaWQgZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICBzdGF0aWMgZG91YmxlIGFwcGx5
TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKGludDMyX3QgdmFsdWUsIENvZGVCbG9jayopOworICAgIHN0
YXRpYyBpbnQzMl90IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KGlu
dDMyX3QgdmFsdWUsIENvZGVCbG9jayopOworCisgICAgc3RhdGljIGludDMyX3QgZm9ybWF0dGVk
VG90YWxDb3VudChmbG9hdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAg
ICAgIGludDMyX3QgaTsKKyAgICAgICAgICAgIGZsb2F0IGY7CisgICAgICAgIH0gdTsKKyAgICAg
ICAgdS5mID0gdmFsdWU7CisgICAgICAgIHJldHVybiB1Lmk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBib29sIGhhc0Nyb3NzZWRUaHJlc2hvbGQoQ29kZUJsb2NrKikgY29uc3Q7CisgICAg
Ym9vbCBzZXRUaHJlc2hvbGQoQ29kZUJsb2NrKik7CisgICAgdm9pZCByZXNldCgpOworCitwdWJs
aWM6CisKKyAgICAvLyBOQi4gVGhlc2UgYXJlIGludGVudGlvbmFsbHkgcHVibGljIGJlY2F1c2Ug
aXQgd2lsbCBiZSBtb2RpZmllZCBmcm9tIG1hY2hpbmUgY29kZS4KKyAgICAKKyAgICAvLyBUaGlz
IGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYnkgdGhlIEpJVCBvciBMTEludC4gSXQgc3RhcnRzIG91
dCBuZWdhdGl2ZSBhbmQgaXMKKyAgICAvLyBjb3VudGVkIHVwIHVudGlsIGl0IGJlY29tZXMgbm9u
LW5lZ2F0aXZlLiBBdCB0aGUgc3RhcnQgb2YgYSBjb3VudGluZyBwZXJpb2QsCisgICAgLy8gdGhl
IHRocmVzaG9sZCB3ZSB3aXNoIHRvIHJlYWNoIGlzIG1fdG90YWxDb3VudCArIG1fY291bnRlciwg
aW4gdGhlIHNlbnNlIHRoYXQKKyAgICAvLyB3ZSB3aWxsIGFkZCBYIHRvIG1fdG90YWxDb3VudCBh
bmQgc3VidHJhY3QgWCBmcm9tIG1fY291bnRlci4KKyAgICBpbnQzMl90IG1fY291bnRlcjsKKwor
ICAgIC8vIENvdW50cyB0aGUgdG90YWwgbnVtYmVyIG9mIGV4ZWN1dGlvbnMgd2UgaGF2ZSBzZWVu
IHBsdXMgdGhlIG9uZXMgd2UndmUgc2V0IGEKKyAgICAvLyB0aHJlc2hvbGQgZm9yIGluIG1fY291
bnRlci4gQmVjYXVzZSBtX2NvdW50ZXIncyB0aHJlc2hvbGQgaXMgbmVnYXRpdmUsIHRoZQorICAg
IC8vIHRvdGFsIG51bWJlciBvZiBhY3R1YWwgZXhlY3V0aW9ucyBjYW4gYWx3YXlzIGJlIGNvbXB1
dGVkIGFzIG1fdG90YWxDb3VudCArCisgICAgLy8gbV9jb3VudGVyLgorICAgIGZsb2F0IG1fdG90
YWxDb3VudDsKKworICAgIC8vIFRoaXMgaXMgdGhlIHRocmVzaG9sZCB3ZSB3ZXJlIG9yaWdpbmFs
bHkgdGFyZ2V0dGluZywgd2l0aG91dCBhbnkgY29ycmVjdGlvbiBmb3IKKyAgICAvLyB0aGUgbWVt
b3J5IHVzYWdlIGhldXJpc3RpY3MuCisgICAgaW50MzJfdCBtX2FjdGl2ZVRocmVzaG9sZDsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRXhlY3V0aW9uQ291bnRlcl9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxMDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgx
LDEzICs1ODEsMjEgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAog
ICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBsb3dGYWlsUmF0ZSA9IG1faml0LmJyYW5jaDMyKEFz
c2VtYmx5SGVscGVyczo6QmVsb3dPckVxdWFsLCBHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVn
VDEpOwogICAgIAogICAgIC8vIFJlb3B0aW1pemUgYXMgc29vbiBhcyBwb3NzaWJsZS4KLSAgICBt
X2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291
bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbiksIEFzc2VtYmx5SGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVy
KCkpKTsKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoMCksIEFzc2Vt
Ymx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJ
VEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6
SW1tMzIoMCksIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGlvbkFjdGl2ZVRocmVzaG9sZCgpKSk7CiAgICAgQXNzZW1i
bHlIZWxwZXJzOjpKdW1wIGRvbmVBZGp1c3RpbmcgPSBtX2ppdC5qdW1wKCk7CiAgICAgCiAgICAg
ZmV3RmFpbHMubGluaygmbV9qaXQpOwogICAgIGxvd0ZhaWxSYXRlLmxpbmsoJm1faml0KTsKICAg
ICAKLSAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIobV9qaXQuYmFzZWxp
bmVDb2RlQmxvY2soKS0+Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSks
IEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICAvLyBBZGp1c3QgdGhlIGV4ZWN1dGlvbiBj
b3VudGVyIHN1Y2ggdGhhdCB0aGUgdGFyZ2V0IGlzIHRvIG9ubHkgb3B0aW1pemUgYWZ0ZXIgYSB3
aGlsZS4KKyAgICBpbnQzMl90IHRhcmdldFZhbHVlID0KKyAgICAgICAgRXhlY3V0aW9uQ291bnRl
cjo6YXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3NBbmRDb252ZXJ0VG9JbnQoCisgICAgICAgICAg
ICBtX2ppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcCgpLAorICAgICAgICAgICAgbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2soKSk7Cisg
ICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKC10YXJnZXRWYWx1ZSksIEFz
c2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVy
czo6SW1tMzIodGFyZ2V0VmFsdWUpLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQoKSkp
OworICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihFeGVjdXRpb25Db3Vu
dGVyOjpmb3JtYXR0ZWRUb3RhbENvdW50KHRhcmdldFZhbHVlKSksIEFzc2VtYmx5SGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGlvblRv
dGFsQ291bnQoKSkpOwogICAgIAogICAgIGRvbmVBZGp1c3RpbmcubGluaygmbV9qaXQpOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCShyZXZpc2lvbiAxMDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTcg
QEAKIAogI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpCiAjaW5jbHVkZSAi
Q29kZVByb2ZpbGluZy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3Rm
L01ldGFBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0aW9uLmg+CiAjaW5j
bHVkZSA8d3RmL1ZNVGFncy5oPgogI2VuZGlmCiAKKy8vIFVuY29tbWVudCB0byBjcmVhdGUgYW4g
YXJ0aWZpY2lhbCBleGVjdXRhYmxlIG1lbW9yeSB1c2FnZSBsaW1pdC4gVGhpcyBsaW1pdAorLy8g
aXMgaW1wZXJmZWN0IGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciB0ZXN0aW5nIHRoZSBWTSdz
IGFiaWxpdHkgdG8gaGFuZGxlCisvLyBvdXQtb2YtZXhlY3V0YWJsZS1tZW1vcnkgc2l0dWF0aW9u
cy4KKy8vICNkZWZpbmUgRVhFQ1VUQUJMRV9NRU1PUllfTElNSVQgMTAwMDAwMAorCiAjaWYgRU5B
QkxFKEFTU0VNQkxFUikKIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKQEAgLTY1LDYgKzcxLDExIEBA
IHByb3RlY3RlZDoKICAgICAgICAgCiAgICAgICAgIG51bVBhZ2VzID0gbmV3TnVtUGFnZXM7CiAg
ICAgICAgIAorI2lmZGVmIEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUCisgICAgICAgIGlmIChieXRl
c0FsbG9jYXRlZCgpID49IEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisjZW5kaWYKKyAgICAgICAgCiAgICAgICAgIFBhZ2VSZXNlcnZhdGlvbiByZXNlcnZh
dGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZShudW1QYWdlcyAqIHBhZ2VTaXplKCksIE9T
QWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVl
KTsKICAgICAgICAgaWYgKCFyZXNlcnZhdGlvbikKICAgICAgICAgICAgIENSQVNIKCk7CkBAIC0x
MDksNyArMTIwLDI5IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnMK
IAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKIHsKKyNp
ZmRlZiBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVAorICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVz
QWxsb2NhdGVkKCkgPiBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVCAvIDI7CisjZWxzZQogICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitkb3VibGUgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVt
b3J5UHJlc3N1cmVNdWx0aXBsaWVyKHNpemVfdCBhZGRlZE1lbW9yeVVzYWdlKQoreworI2lmZGVm
IEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUCisgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIGRhdGFM
b2coIkNvbXB1dGluZyBtZW1vcnkgcHJlc3N1cmUgbXVsdGlwbGllciB3aXRoIGJ5dGVzQWxsb2Nh
dGVkID0gJWx1LCBhZGRlZE1lbW9yeVVzYWdlID0gJWx1XG4iLAorICAgICAgICAgICAgICAgIGFs
bG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSwgYWRkZWRNZW1vcnlVc2FnZSk7CisgICAgfQorICAg
IHNpemVfdCBieXRlc0FsbG9jYXRlZCA9IGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSArIGFk
ZGVkTWVtb3J5VXNhZ2U7CisgICAgaWYgKGJ5dGVzQWxsb2NhdGVkID49IEVYRUNVVEFCTEVfTUVN
T1JZX0xJTUlUKQorICAgICAgICBieXRlc0FsbG9jYXRlZCA9IEVYRUNVVEFCTEVfTUVNT1JZX0xJ
TUlUOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KEVYRUNVVEFCTEVfTUVNT1JZX0xJ
TUlUKSAvCisgICAgICAgIChFWEVDVVRBQkxFX01FTU9SWV9MSU1JVCAtIGJ5dGVzQWxsb2NhdGVk
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFkZGVkTWVtb3J5VXNhZ2UpOworICAgIHJldHVy
biAxLjA7CisjZW5kaWYKIH0KIAogUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBF
eGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAko
cmV2aXNpb24gMTA5MzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOCBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgYm9vbCB1bmRlck1lbW9yeVByZXNzdXJlKCk7CiAgICAgCisgICAgc3RhdGlj
IGRvdWJsZSBtZW1vcnlQcmVzc3VyZU11bHRpcGxpZXIoc2l6ZV90IGFkZGVkTWVtb3J5VXNhZ2Up
OworICAgIAogI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQogICAgIHN0YXRpYyB2
b2lkIGR1bXBQcm9maWxlKCk7CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAko
cmV2aXNpb24gMTA5MzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDE3
IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmUKICAgICByZXR1cm4g
c3RhdGlzdGljcy5ieXRlc0FsbG9jYXRlZCA+IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCAvIDI7
CiB9CiAKK2RvdWJsZSBFeGVjdXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3VyZU11bHRpcGxp
ZXIoc2l6ZV90IGFkZGVkTWVtb3J5VXNhZ2UpCit7CisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlz
dGljcyBzdGF0aXN0aWNzID0gYWxsb2NhdG9yLT5jdXJyZW50U3RhdGlzdGljcygpOworICAgIEFT
U0VSVChzdGF0aXN0aWNzLmJ5dGVzQWxsb2NhdGVkIDw9IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZl
ZCk7CisgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkID0gc3RhdGlzdGljcy5ieXRlc0FsbG9jYXRl
ZCArIGFkZGVkTWVtb3J5VXNhZ2U7CisgICAgaWYgKGJ5dGVzQWxsb2NhdGVkID49IHN0YXRpc3Rp
Y3MuYnl0ZXNSZXNlcnZlZCkKKyAgICAgICAgYnl0ZXNBbGxvY2F0ZWQgPSBzdGF0aXN0aWNzLmJ5
dGVzUmVzZXJ2ZWQ7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhdGlzdGljcy5i
eXRlc1Jlc2VydmVkKSAvCisgICAgICAgIChzdGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQgLSBieXRl
c0FsbG9jYXRlZCk7Cit9CisKIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQpCiB7CiAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9j
YXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEwOTMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE1LDYgKzcxNSwxMCBAQCBKSVRDb2Rl
IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgCiAgICAgQ29kZVJlZiByZXN1
bHQgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAKKyAgICBtX2dsb2JhbERhdGEt
Pm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5hZGQoCisgICAg
ICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLworICAgICAgICBzdGF0aWNf
Y2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKKyAgICAK
ICNpZiBFTkFCTEUoSklUX1ZFUkJPU0UpCiAgICAgZGF0YUxvZygiSklUIGdlbmVyYXRlZCBjb2Rl
IGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5zdGFydCgpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAx
MDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkyOSwxMiArMTkyOSwxNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcHRpbWl6ZV9mcm9tCiAgICAgCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0Zy
YW1lLmNhbGxGcmFtZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5pbnQzMigpOwogCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJn
c1swXS5pbnQzMigpOworICAgIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgZGF0
YUxvZygiJXA6IEVudGVyZWQgb3B0aW1pemVfZnJvbV9sb29wIHdpdGggZXhlY3V0ZUNvdW50ZXIg
PSAlZCwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlD
b3VudGVyID0gJXVcbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigp
LCBjb2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksIGNvZGVCbG9jay0+b3B0
aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwogI2VuZGlmCiAKKyAgICBpZiAoIWNvZGVCbG9jay0+
Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewogI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGxvb3Ag
T1NSIGludG8gJXAoJXApIHdpdGggc3VjY2Vzcy9mYWlsICV1LyV1LlxuIiwgY29kZUJsb2NrLCBj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3Vs
YXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0
aXZlRmFpbENvdW50ZXIoKSk7CkBAIC0yMDMzLDYgKzIwMzcsOSBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgZGF0YUxvZygiRW50ZXJlZCBvcHRpbWl6ZV9m
cm9tX3JldCB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyID0gJXUsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICV1XG4iLCBjb2RlQmxvY2stPmpp
dEV4ZWN1dGVDb3VudGVyKCksIGNvZGVCbG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
KSwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSk7CiAjZW5kaWYKIAorICAg
IGlmICghY29kZUJsb2NrLT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgZGF0YUxvZygi
UmV0dXJuaW5nIGZyb20gb2xkIEpJVCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxhY2Vt
ZW50ICVwKCVwKSwgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUiLCBjb2RlQmxvY2ssIGNvZGVCbG9j
ay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1
Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWls
Q291bnRlcigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTA5MzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDYgKzI3MCwx
MyBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoRXhlY1N0YXRlKiBleGVjKQogLy8gUmV0dXJucyB0
cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgogaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNl
dEhldXJpc3RpY3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgeworI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIGRhdGFMb2coIiAgICBKSVQgdGhyZXNob2xk
IHNob3VsZCBiZSBsaWZ0ZWQuXG4iKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgICAgICAKICAgICBDb2RlQmxvY2s6OkpJVENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCA9IGNvZGVCbG9jay0+aml0Q29tcGlsZShleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIHN3aXRj
aCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb2RlQmxvY2s6OkFscmVhZHlDb21waWxlZDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxMDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAt
MjczLDcgKzI3Myw3IEBAIGVuZAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFj
dGlvbikKICAgICBpZiBKSVRfRU5BQkxFRAogICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDAKLSAgICAgICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNv
dW50ZXJbdDBdLCAuY29udGludWUKKyAgICAgICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2Nr
OjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBd
LCAuY29udGludWUKICAgICAgICAgYWN0aW9uKCkKICAgICAuY29udGludWU6CiAgICAgZW5kCkBA
IC00MjksNyArNDI5LDcgQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxv
YwogICAgIGVuZAogICAgIGNvZGVCbG9ja0dldHRlcih0MSkKICAgICBpZiBKSVRfRU5BQkxFRAot
ICAgICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFdLCAu
Y29udGludWUKKyAgICAgICAgYmFkZGlzIDUsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3Vu
dGVyICsgRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCiAgICAgICAg
IGNDYWxsMihvc3JTbG93UGF0aCwgY2ZyLCBQQykKICAgICAgICAgbW92ZSB0MSwgY2ZyCiAgICAg
ICAgIGJ0cHogdDAsIC5yZWNvdmVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTA5MzI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhy
ZWFkRGF0YS5oPgogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAgLTIwMSw2ICsyMDIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU21hbGxTdHJpbmdzIHNtYWxsU3RyaW5nczsKICAg
ICAgICAgTnVtZXJpY1N0cmluZ3MgbnVtZXJpY1N0cmluZ3M7CiAgICAgICAgIERhdGVJbnN0YW5j
ZUNhY2hlIGRhdGVJbnN0YW5jZUNhY2hlOworICAgICAgICBXVEY6OlNpbXBsZVN0YXRzIG1hY2hp
bmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVDsKICAgICAgICAgVmVjdG9y
PENvZGVCbG9jayo+IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkOwogICAgICAgICB2b2lkIHN0YXJ0
ZWRDb21waWxpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAxMDkzMjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsMTUgKzUyLDEyIEBAIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVj
dElubGkKIAogdW5zaWduZWQgbWF4aW11bUlubGluaW5nRGVwdGg7CiAKLWludDMyX3QgZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9ySklUQWZ0ZXJXYXJtVXA7Ci1pbnQzMl90IGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvckRvbnRKSVRBbnl0aW1lU29vbjsKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlclZh
bHVlRm9ySklUU29vbjsKLQotaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6
ZUFmdGVyV2FybVVwOwotaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyTG9uZ1dhcm1VcDsKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9wdGlt
aXplQW55dGltZVNvb247Ci1pbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXpl
U29vbjsKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2Nh
dGlvbjsKK2ludDMyX3QgdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA7CitpbnQzMl90IHRocmVz
aG9sZEZvckpJVFNvb247CisKK2ludDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1V
cDsKK2ludDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7CitpbnQzMl90
IHRocmVzaG9sZEZvck9wdGltaXplU29vbjsKIAogaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5j
cmVtZW50Rm9yTG9vcDsKIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVy
bjsKQEAgLTE0MSwxNSArMTM4LDEyIEBAIHZvaWQgaW5pdGlhbGl6ZU9wdGlvbnMoKQogICAgIAog
ICAgIFNFVChtYXhpbXVtSW5saW5pbmdEZXB0aCwgNSk7CiAKLSAgICBTRVQoZXhlY3V0aW9uQ291
bnRlclZhbHVlRm9ySklUQWZ0ZXJXYXJtVXAsICAgICAtMTAwKTsKLSAgICBTRVQoZXhlY3V0aW9u
Q291bnRlclZhbHVlRm9yRG9udEpJVEFueXRpbWVTb29uLCBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptaW4oKSk7Ci0gICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckpJVFNvb24s
ICAgICAgICAgICAgLTEwMCk7Ci0KLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlcldhcm1VcCwgICAgIC0xMDAwKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZh
bHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAsIC01MDAwKTsKLSAgICBTRVQoZXhlY3V0aW9u
Q291bnRlclZhbHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb24sIHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1pbigpKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0
aW1pemVTb29uLCAgICAgICAgICAgIC0xMDAwKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZh
bHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbiwgIDApOworICAgIFNFVCh0aHJlc2hvbGRGb3JK
SVRBZnRlcldhcm1VcCwgICAgIDEwMCk7CisgICAgU0VUKHRocmVzaG9sZEZvckpJVFNvb24sICAg
ICAgICAgICAgMTAwKTsKKworICAgIFNFVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVw
LCAgICAgMTAwMCk7CisgICAgU0VUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
LCA1MDAwKTsKKyAgICBTRVQodGhyZXNob2xkRm9yT3B0aW1pemVTb29uLCAgICAgICAgICAgIDEw
MDApOwogCiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAgIDEpOwog
ICAgIFNFVChleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuLCAxNSk7CkBAIC0xOTUs
MTEgKzE4OSw5IEBAIHZvaWQgaW5pdGlhbGl6ZU9wdGlvbnMoKQogICAgIAogICAgIFNFVChudW1i
ZXJPZkdDTWFya2VycywgY3B1c1RvVXNlKTsKIAotICAgIEFTU0VSVChleGVjdXRpb25Db3VudGVy
VmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbiA8PSBleGVjdXRpb25Db3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCk7Ci0gICAgQVNTRVJUKGV4ZWN1dGlvbkNvdW50ZXJW
YWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwIDw9IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXApOwotICAgIEFTU0VSVChleGVjdXRpb25Db3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyV2FybVVwIDw9IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXpl
U29vbik7Ci0gICAgQVNTRVJUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJX
YXJtVXAgPCAwKTsKLSAgICBBU1NFUlQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVT
b29uIDw9IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24pOwor
ICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCA+PSB0aHJlc2hv
bGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKTsKKyAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlcldhcm1VcCA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb24pOworICAgIEFTU0VSVCh0
aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwID49IDApOwogICAgIAogICAgIC8vIENvbXB1
dGUgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIHJlb3B0aW1pemF0aW9uIHJldHJ5IGNvdW50ZXIu
IFRoaXMgaXMgc2ltcGx5CiAgICAgLy8gdGhlIGxhcmdlc3QgdmFsdWUgYXQgd2hpY2ggd2UgZG9u
J3Qgb3ZlcmZsb3cgdGhlIGV4ZWN1dGUgY291bnRlciwgd2hlbiB1c2luZyBpdApAQCAtMjA3LDEx
ICsxOTksMTEgQEAgdm9pZCBpbml0aWFsaXplT3B0aW9ucygpCiAgICAgLy8gdXAgYmVpbmcgMTgs
IHNvIHRoaXMgbG9vcCBpcyBub3Qgc28gdGVycmlibGU7IGl0IHByb2JhYmx5IHRha2VzIHVwIH4x
MDAgY3ljbGVzCiAgICAgLy8gdG90YWwgb24gYSAzMi1iaXQgcHJvY2Vzc29yLgogICAgIHJlb3B0
aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4ID0gMDsKLSAgICB3aGlsZSAoKHN0YXRpY19jYXN0PGlu
dDY0X3Q+KGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKSA8
PCAocmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXggKyAxKSkgPj0gc3RhdGljX2Nhc3Q8aW50
NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKQorICAgIHdoaWxlICgo
c3RhdGljX2Nhc3Q8aW50NjRfdD4odGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAp
IDw8IChyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCArIDEpKSA8PSBzdGF0aWNfY2FzdDxp
bnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCiAgICAgICAgIHJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4Kys7CiAgICAgCi0gICAgQVNTRVJUKChzdGF0aWNf
Y2FzdDxpbnQ2NF90PihleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpIDwgMCk7Ci0gICAgQVNTRVJU
KChzdGF0aWNfY2FzdDxpbnQ2NF90PihleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpID49IHN0YXRp
Y19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSk7Cisg
ICAgQVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpID4gMCk7CisgICAg
QVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9u
Z1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpIDw9IHN0YXRpY19jYXN0
PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpPcHRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxMDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE1ICszNywxMyBAQCBl
eHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RyCiAKIGV4dGVybiB1bnNpZ25l
ZCBtYXhpbXVtSW5saW5pbmdEZXB0aDsgLy8gRGVwdGggb2YgaW5saW5lIHN0YWNrLCBzbyAxID0g
bm8gaW5saW5pbmcsIDIgPSBvbmUgbGV2ZWwsIGV0Yy4KIAotZXh0ZXJuIGludDMyX3QgZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9ySklUQWZ0ZXJXYXJtVXA7Ci1leHRlcm4gaW50MzJfdCBleGVjdXRp
b25Db3VudGVyVmFsdWVGb3JEb250SklUQW55dGltZVNvb247Ci1leHRlcm4gaW50MzJfdCBleGVj
dXRpb25Db3VudGVyVmFsdWVGb3JKSVRTb29uOwotCi1leHRlcm4gaW50MzJfdCBleGVjdXRpb25D
b3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwOwotZXh0ZXJuIGludDMyX3QgZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7Ci1leHRlcm4gaW50MzJf
dCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKLWV4dGVy
biBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbjsKLWV4dGVybiBp
bnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb247Citl
eHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcDsKK2V4dGVybiBpbnQzMl90
IHRocmVzaG9sZEZvckpJVFNvb247CisKK2V4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJXYXJtVXA7CitleHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcDsKK2V4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplU29vbjsKK2V4
dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplTmV4dEludm9jYXRpb247CiAKIGV4dGVy
biBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wOwogZXh0ZXJuIGludDMy
X3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvU2ltcGxlU3RhdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1NpbXBsZVN0YXRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1NpbXBsZVN0YXRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
U2ltcGxlU3RhdHNfaAorI2RlZmluZSBTaW1wbGVTdGF0c19oCisKKyNpbmNsdWRlICJTdGRMaWJF
eHRyYXMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFNpbXBsZSBhbmQgY2hlYXAgd2F5IG9m
IHRyYWNraW5nIHN0YXRpc3RpY3MgaWYgeW91J3JlIG5vdCB3b3JyaWVkIGFib3V0IGNob3BwaW5n
IG9uCisvLyB0aGUgc3VtIG9mIHNxdWFyZXMgKGkuZS4gdGhlIHN1bSBvZiBzcXVhcmVzIGlzIHVu
bGlrZWx5IHRvIGV4Y2VlZCAyXjUyKS4KK2NsYXNzIFNpbXBsZVN0YXRzIHsKK3B1YmxpYzoKKyAg
ICBTaW1wbGVTdGF0cygpCisgICAgICAgIDogbV9jb3VudCgwKQorICAgICAgICAsIG1fc3VtKDAp
CisgICAgICAgICwgbV9zdW1PZlNxdWFyZXMoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZv
aWQgYWRkKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fY291bnQrKzsKKyAgICAgICAg
bV9zdW0gKz0gdmFsdWU7CisgICAgICAgIG1fc3VtT2ZTcXVhcmVzICs9IHZhbHVlICogdmFsdWU7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAhbV9jb3VudDsKKyAgICB9CisgICAgCisgICAgZG91YmxlIGNvdW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2NvdW50OworICAgIH0KKyAgICAKKyAgICBkb3VibGUg
c3VtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N1bTsKKyAgICB9CisgICAgCisg
ICAgZG91YmxlIHN1bU9mU3F1YXJlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9z
dW1PZlNxdWFyZXM7CisgICAgfQorICAgIAorICAgIGRvdWJsZSBtZWFuKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3N1bSAvIG1fY291bnQ7CisgICAgfQorICAgIAorICAgIC8vIE5C
LiBUaGlzIGdpdmVzIGEgYmlhc2VkIHZhcmlhbmNlIGFzIGl0IGRpdmlkZXMgYnkgdGhlIG51bWJl
ciBvZiBzYW1wbGVzIHJhdGhlcgorICAgIC8vIHRoYW4gdGhlIG51bWJlciBvZiBkZWdyZWVzIG9m
IGZyZWVkb20uIFRoaXMgaXMgZmluZSB3aGVuIHRoZSBjb3VudCBncm93cyBsYXJnZS4KKyAgICBk
b3VibGUgdmFyaWFuY2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fY291bnQgPCAyKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRlIDx4XjI+
IC0gPHg+XjIKKyAgICAgICAgZG91YmxlIHNlY29uZE1vbWVudCA9IG1fc3VtT2ZTcXVhcmVzIC8g
bV9jb3VudDsKKyAgICAgICAgZG91YmxlIGZpcnN0TW9tZW50ID0gbV9zdW0gLyBtX2NvdW50Owor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHNlY29uZE1vbWVudCAtIGZpcnN0TW9tZW50ICogZmly
c3RNb21lbnQ7CisgICAgfQorICAgIAorICAgIC8vIE5CLiBUaGlzIGdpdmVzIGEgYmlhc2VkIHN0
YW5kYXJkIGRldmlhdGlvbi4gU2VlIGFib3ZlLgorICAgIGRvdWJsZSBzdGFuZGFyZERldmlhdGlv
bigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3FydCh2YXJpYW5jZSgpKTsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIGRvdWJsZSBtX2NvdW50OworICAgIGRvdWJsZSBtX3N1bTsK
KyAgICBkb3VibGUgbV9zdW1PZlNxdWFyZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIFNpbXBsZVN0YXRzX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129758</attachid>
            <date>2012-03-01 15:32:34 -0800</date>
            <delta_ts>2012-03-04 01:37:02 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>hyperbolicjit_patch_2.diff</filename>
            <type>text/plain</type>
            <size>49147</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5NDQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBA
QAorMjAxMi0wMy0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpJVCBoZXVyaXN0aWNzIHNob3VsZCBiZSBoeXBlcmJvbGljCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDA1NQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMTA5MjIyNjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBBZGRlZCB0cmFja2luZyBvZiB0aGUgYW1vdW50IG9mIGV4ZWN1dGFibGUg
bWVtb3J5IHR5cGljYWxseSB1c2VkIGZvciBhIGJ5dGVjb2RlCisgICAgICAgIGluc3RydWN0aW9u
LiBNb2RpZmllZCB0aGUgZXhlY3V0aW9uIGNvdW50ZXIgc2NoZW1lIHRvIHVzZSB0aGlzLCBhbmQg
dGhlIGFtb3VudAorICAgICAgICBvZiBmcmVlIG1lbW9yeSwgdG8gZGV0ZXJtaW5lIGhvdyBsb25n
IHRvIHdhaXQgYmVmb3JlIGludm9raW5nIHRoZSBKSVQuCisgICAgICAgIAorICAgICAgICBUaGUg
cmVzdWx0IGlzIHRoYXQgZXZlbiBpZiB3ZSBib21iIHRoZSBWTSB3aXRoIG1vcmUgY29kZSB0aGFu
IGNhbiBmaXQgaW4gb3VyCisgICAgICAgIGV4ZWN1dGFibGUgbWVtb3J5IHBvb2wsIHdlIHN0aWxs
IGtlZXAgcnVubmluZyBhbmQgYWxtb3N0IG5ldmVyIHJ1biBvdXQgb2YKKyAgICAgICAgZXhlY3V0
YWJsZSBtZW1vcnkgLSB3aGljaCBlbnN1cmVzIHRoYXQgaWYgd2UgaGF2ZSB0byBKSVQgc29tZXRo
aW5nIGNyaXRpY2FsLCB0aGVuCisgICAgICAgIHdlJ2xsIGxpa2VseSBoYXZlIGVub3VnaCBtZW1v
cnkgdG8gZG8gc28uIFRoaXMgYWxzbyBkb2VzIG5vdCByZWdyZXNzIHBlcmZvcm1hbmNlCisgICAg
ICAgIG9uIHRoZSB0aHJlZSBtYWluIGJlbmNobWFya3MuCisgICAgICAgIAorICAgICAgICBXT1JL
IElOIFBST0dSRVNTLiBTdGlsbCBuZWVkIHRvIHdyaXRlIDY0LWJpdCBwYXJ0LCBuZWVkIHRvIGNs
ZWFuIHVwIHNvbWUgZGVidWcKKyAgICAgICAgc3R1ZmYsIGFuZCBmaXggYSBjcmFzaCBvbiBWOC9y
YXl0cmFjZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1c2VzT3Bjb2RlKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmRvbnRKSVRBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0QWZ0ZXJX
YXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdFNvb24pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcik6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0aW9uVG90YWxDb3VudCk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0RXhlY3V0ZUNvdW50ZXIpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpkb250T3B0aW1pemVBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6b3B0aW1pemVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
b3B0aW1pemVBZnRlckxvbmdXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGlt
aXplU29vbik6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6RXhlY3V0
aW9uQ291bnRlcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6OmNoZWNrSWZUaHJl
c2hvbGRDcm9zc2VkQW5kU2V0KToKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6c2V0
TmV3VGhyZXNob2xkKToKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6ZGVmZXJJbmRl
ZmluaXRlbHkpOgorICAgICAgICAoSlNDOjpFeGVjdXRpb25Db3VudGVyOjphcHBseU1lbW9yeVVz
YWdlSGV1cmlzdGljcyk6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVt
b3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KToKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6aGFzQ3Jvc3NlZFRocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGlv
bkNvdW50ZXI6OnNldFRocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6
OnJlc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEV4ZWN1dGlvbkNvdW50ZXIpOgorICAgICAgICAoSlND
OjpFeGVjdXRpb25Db3VudGVyOjpmb3JtYXR0ZWRUb3RhbENvdW50KToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGVO
ZXdTcGFjZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5
UHJlc3N1cmUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9j
YXRvcjo6bWVtb3J5UHJlc3N1cmVNdWx0aXBsaWVyKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5oOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3Vy
ZU11bHRpcGxpZXIpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGxs
aW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmppdENvbXBpbGVB
bmRTZXRIZXVyaXN0aWNzKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0ds
b2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChPcHRp
b25zKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6ZU9wdGlvbnMpOgorICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAoT3B0aW9ucyk6CisgICAgICAgICogd3Rm
L1NpbXBsZVN0YXRzLmg6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFNpbXBsZVN0
YXRzKToKKyAgICAgICAgKFdURjo6U2ltcGxlU3RhdHM6OlNpbXBsZVN0YXRzKToKKyAgICAgICAg
KFdURjo6U2ltcGxlU3RhdHM6OmFkZCk6CisgICAgICAgIChXVEY6OlNpbXBsZVN0YXRzOjpvcGVy
YXRvciEpOgorICAgICAgICAoV1RGOjpTaW1wbGVTdGF0czo6Y291bnQpOgorICAgICAgICAoV1RG
OjpTaW1wbGVTdGF0czo6c3VtKToKKyAgICAgICAgKFdURjo6U2ltcGxlU3RhdHM6OnN1bU9mU3F1
YXJlcyk6CisgICAgICAgIChXVEY6OlNpbXBsZVN0YXRzOjptZWFuKToKKyAgICAgICAgKFdURjo6
U2ltcGxlU3RhdHM6OnZhcmlhbmNlKToKKyAgICAgICAgKFdURjo6U2ltcGxlU3RhdHM6OnN0YW5k
YXJkRGV2aWF0aW9uKToKKwogMjAxMi0wMy0wMSAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFu
QGludGVsLmNvbT4KIAogICAgICAgICBERkcgbG9jYWwgQ1NFIGZvciBhIG5vZGUgY2FuIGJlIHRl
cm1pbmF0ZWQgZWFybGllcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDEwOTMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDkgQEAK
IAkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQxMTRCQkM1
RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5IC8q
IEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY1NUYwRjExNEQxMDYzNjAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwICovOyB9Owog
CQkwRjU1RjBGNTE0RDEwNjNDMDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NUYwRjIxNEQxMDYzNjAwQUM3NjQ5
IC8qIEFic3RyYWN0UEMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjU2QTFEMzE1MDAwRjM1MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NkExRDEx
NTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjU2QTFENTE1MDAxQ0Y0MDAyOTkyQjEg
LyogRXhlY3V0aW9uQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRl
ci5jcHAgKi87IH07CisJCTBGNTZBMUQ3MTUwMDI4QkIwMDI5OTJCMSAvKiBTaW1wbGVTdGF0cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NkExRDYx
NTAwMjhCOTAwMjk5MkIxIC8qIFNpbXBsZVN0YXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzIxNDNG
Q0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjIwMTc1MTQzRkNEMzcwMDY4Qjc3
QyAvKiBERkdPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk3NCw2ICs5Nzcs
OSBAQAogCQkwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIb3N0Q2FsbFJldHVyblZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTVGMEYxMTREMTA2MzYwMEFDNzY0OSAv
KiBBYnN0cmFjdFBDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFi
c3RyYWN0UEMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1RjBGMjE0RDEw
NjM2MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBYnN0cmFjdFBDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTZBMUQx
MTUwMDBGMzEwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGlvbkNvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY1NkExRDQxNTAwMUNGMjAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0aW9uQ291bnRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTZBMUQ2MTUwMDI4QjkwMDI5OTJC
MSAvKiBTaW1wbGVTdGF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1w
bGVTdGF0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVGMDhDQzE0NkJFNjAy
MDAwNDcyQTkgLyogREZHQnl0ZUNvZGVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdCeXRlQ29kZUNhY2hlLmg7IHBhdGggPSBkZmcvREZHQnl0ZUNvZGVDYWNoZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkg
LyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuY3BwOyBw
YXRoID0gZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjMxNCw2ICsyMzIwLDcgQEAKIAkJCQlBN0M0MEMwODEzMEIwNTdEMDBEMDAyQTEgLyog
U2VudGluZWxMaW5rZWRMaXN0LmggKi8sCiAJCQkJNzZGQjlGMTAxMkU4NTE5NjAwNTFBMkVCIC8q
IFNIQTEuY3BwICovLAogCQkJCTc2RkI5RjBFMTJFODUxODYwMDUxQTJFQiAvKiBTSEExLmggKi8s
CisJCQkJMEY1NkExRDYxNTAwMjhCOTAwMjk5MkIxIC8qIFNpbXBsZVN0YXRzLmggKi8sCiAJCQkJ
QTdDNDBDMDkxMzBCMDU3RDAwRDAwMkExIC8qIFNpbmdseUxpbmtlZExpc3QuaCAqLywKIAkJCQkw
QkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8sCiAJCQkJMEYyRTVC
RjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0cnVtLmggKi8sCkBAIC0yNzg4LDYgKzI3OTUsOCBA
QAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNTZBMUQ0MTUwMDFDRjIwMDI5OTJC
MSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCAqLywKKwkJCQkwRjU2QTFEMTE1MDAwRjMxMDAyOTky
QjEgLyogRXhlY3V0aW9uQ291bnRlci5oICovLAogCQkJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4
OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkI1NDY3QTE0
RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovLAogCQkJ
CTBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAg
Ki8sCkBAIC0zNDA5LDYgKzM0MTgsOCBAQAogCQkJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAv
KiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI1
NDY5MDE0RkFEQTdCMDAyQzI5ODkgLyogUmVmQ291bnRlZEFycmF5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25D
b3VudGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjU2QTFENzE1MDAyOEJCMDAyOTkyQjEgLyog
U2ltcGxlU3RhdHMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNDAxOCw2ICs0MDI5LDcgQEAKIAkJCQkw
RkZGQzk1RjE0RUY5MEJCMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3RDE0
RjVDRkQ2MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjU2QTFENTE1MDAxQ0Y0MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0Nyw3ICsy
NDQ3LDQxIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCiB9CiAjZW5kaWYK
IAotI2lmbmRlZiBOREVCVUcKK3NpemVfdCBDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVDb2Rl
U2l6ZSgpCit7CisgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBmcm9tIENvZGVCbG9jazo6Q29k
ZUJsb2NrIGJlZm9yZSBlaXRoZXIgbV9nbG9iYWxEYXRhIG9yIHRoZQorICAgIC8vIGluc3RydWN0
aW9ucyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuIEl0J3MgT0sgdG8gcmV0dXJuIDAgYmVjYXVzZSB3
aGF0IHdpbGwgcmVhbGx5CisgICAgLy8gbWF0dGVyIGlzIHRoZSByZWNvbXB1dGF0aW9uIG9mIHRo
aXMgdmFsdWUgd2hlbiB0aGUgc2xvdyBwYXRoIGlzIHRyaWdnZXJlZC4KKyAgICBpZiAoIW1fZ2xv
YmFsRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYgKCFtX2dsb2JhbERhdGEt
Pm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVCkKKyAgICAgICAg
cmV0dXJuIDA7IC8vIEl0J3MgYXMgZ29vZCBvZiBhIHByZWRpY3Rpb24gYXMgd2UnbGwgZ2V0Lgor
ICAgIAorICAgIC8vIEJlIGNvbnNlcnZhdGl2ZTogcmV0dXJuIGEgc2l6ZSB0aGF0IHdpbGwgYmUg
YW4gb3ZlcmVzdGltYXRpb24gODQlIG9mIHRoZSB0aW1lLgorICAgIGRvdWJsZSBtdWx0aXBsaWVy
ID0gbV9nbG9iYWxEYXRhLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxp
bmVKSVQubWVhbigpICsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT5tYWNoaW5lQ29kZUJ5dGVzUGVy
Qnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQuc3RhbmRhcmREZXZpYXRpb24oKTsKKyAgICAKKyAg
ICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coIk1hY2hpbmUgY29kZSBzaXplIHByZWRpY3Rp
b24gbXVsdGlwbGllciA9ICVsZlxuIiwgbXVsdGlwbGllcik7CisgICAgCisgICAgLy8gQmUgcGFy
YW5vaWQ6IHNpbGVudGx5IHJlamVjdCBib2d1cyBtdWx0aXBpZXJzLiBTaWxlbnRseSBkb2luZyB0
aGUgIndyb25nIiB0aGluZworICAgIC8vIGhlcmUgaXMgT0ssIHNpbmNlIHRoaXMgd2hvbGUgbWV0
aG9kIGlzIGp1c3QgYSBoZXVyaXN0aWMuCisgICAgaWYgKG11bHRpcGxpZXIgPCAwIHx8IG11bHRp
cGxpZXIgPiAxMDAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBkb3VibGUgZG91Ymxl
UmVzdWx0ID0gbXVsdGlwbGllciAqIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsKKyAgICAKKyAgICAv
LyBCZSBldmVuIG1vcmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCB2YWx1ZXMgdGhhdCB3b24n
dCBmaXQgaW50byBhIHNpemVfdC4gSWYKKyAgICAvLyB0aGUgZnVuY3Rpb24gaXMgc28gaHVnZSB0
aGF0IHdlIGNhbid0IGV2ZW4gZml0IGl0IGludG8gdmlydHVhbCBtZW1vcnkgdGhlbiB3ZQorICAg
IC8vIHNob3VsZCBwcm9iYWJseSBoYXZlIHNvbWUgb3RoZXIgZ3VhcmRzIGluIHBsYWNlIHRvIHBy
ZXZlbnQgdXMgZnJvbSBldmVuIGdldHRpbmcKKyAgICAvLyB0byB0aGlzIHBvaW50LgorICAgIGlm
IChkb3VibGVSZXN1bHQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90Pihkb3Vi
bGVSZXN1bHQpOworfQorCiBib29sIENvZGVCbG9jazo6dXNlc09wY29kZShPcGNvZGVJRCBvcGNv
ZGVJRCkKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBnbG9iYWxEYXRhKCktPmlu
dGVycHJldGVyOwpAQCAtMjQ3Miw2ICsyNTA2LDUgQEAgYm9vbCBDb2RlQmxvY2s6OnVzZXNPcGNv
ZGUoT3Bjb2RlSUQgb3BjbwogICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDEwOTMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2lu
Y2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUg
IkV2YWxDb2RlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVk
ZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUgIkdsb2JhbFJlc29sdmVJbmZvLmgi
CiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKQEAgLTM0NCw2ICszNDUsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25z
KCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgY29uc3QgUmVmQ291bnRlZEFy
cmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVj
dGlvbnM7IH0KICAgICAgICAgCisgICAgICAgIHNpemVfdCBwcmVkaWN0ZWRNYWNoaW5lQ29kZVNp
emUoKTsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgdXNlc09wY29kZShPcGNvZGVJRCk7CiAKICAg
ICAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25z
LnNpemUoKTsgfQpAQCAtODMyLDI0ICs4MzUsMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiBKSVR0aW5nIGtpY2tzIGluLCBpbiBh
IG1peGVkIG1vZGUKICAgICAgICAgLy8gZXhlY3V0aW9uIHdvcmxkLgogICAgICAgICAKKyAgICAg
ICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRB
bmRTZXQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZvaWQgZG9udEpJVEFu
eXRpbWVTb29uKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVy
ID0gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udEpJVEFueXRpbWVTb29uOwor
ICAgICAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSBPcHRpb25zOjpleGVjdXRp
b25Db3VudGVyVmFsdWVGb3JKSVRBZnRlcldhcm1VcDsKKyAgICAgICAgICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJX
YXJtVXAsIHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGppdFNvb24o
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSBPcHRpb25z
OjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JKSVRTb29uOworICAgICAgICAgICAgbV9sbGludEV4
ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29u
LCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaW50MzJfdCBsbGludEV4ZWN1
dGVDb3VudGVyKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fbGxpbnRF
eGVjdXRlQ291bnRlcjsKKyAgICAgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIu
bV9jb3VudGVyOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBGdW5jdGlvbnMgZm9y
IGNvbnRyb2xsaW5nIHdoZW4gdGllcmVkIGNvbXBpbGF0aW9uIGtpY2tzIGluLiBUaGlzCkBAIC04
ODgsMzEgKzg5Niw0MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGludDMy
X3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBPcHRpb25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CisgICAgICAgICAgICBy
ZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCA8PCByZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpbnQz
Ml90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CisgICAg
ICAgICAgICByZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJt
VXAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gJm1faml0RXhlY3V0ZUNvdW50ZXI7CisgICAgICAgICAgICBy
ZXR1cm4gJm1faml0RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVyOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKTsg
fQorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX2NvdW50ZXIpOyB9CisgICAgICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX2FjdGl2ZVRocmVzaG9sZCk7IH0K
KyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlvblRvdGFsQ291bnQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVy
KSArIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX3RvdGFsQ291bnQpOyB9CiAK
LSAgICAgICAgaW50MzJfdCBqaXRFeGVjdXRlQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1faml0
RXhlY3V0ZUNvdW50ZXI7IH0KKyAgICAgICAgaW50MzJfdCBqaXRFeGVjdXRlQ291bnRlcigpIGNv
bnN0IHsgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVyOyB9CiAgICAgICAgIAog
ICAgICAgICB1bnNpZ25lZCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSBjb25zdCB7IHJldHVy
biBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsgfQogICAgICAgICAKKyAgICAgICAgLy8gQ2hl
Y2sgaWYgdGhlIG9wdGltaXphdGlvbiB0aHJlc2hvbGQgaGFzIGJlZW4gcmVhY2hlZCwgYW5kIGlm
IG5vdCwKKyAgICAgICAgLy8gYWRqdXN0IHRoZSBoZXVyaXN0aWNzIGFjY29yZGluZ2x5LiBSZXR1
cm5zIHRydWUgaWYgdGhlIHRocmVzaG9sZCBoYXMKKyAgICAgICAgLy8gYmVlbiByZWFjaGVkLgor
ICAgICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8v
IENhbGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJl
LiBUaGlzIGlzCiAgICAgICAgIC8vIHJhcmVseSB3aXNlLCBzaW5jZSBvcHRpbWl6YXRpb24gdHJp
Z2dlcnMgYXJlIHR5cGljYWxseSBtb3JlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1
dGluZyBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24o
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyID0gT3B0aW9uczo6
ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbjsKKyAgICAgICAg
ICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVudCBvcHRpbWl6YXRp
b24gZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdApAQCAtOTIyLDcgKzk0MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAvLyB0aGUgZnV0dXJlIGFzIHdlbGwuCiAgICAgICAgIHZv
aWQgZG9udE9wdGltaXplQW55dGltZVNvb24oKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2pp
dEV4ZWN1dGVDb3VudGVyID0gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9w
dGltaXplQW55dGltZVNvb247CisgICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLmRlZmVy
SW5kZWZpbml0ZWx5KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhp
cyB0byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8gaXRzIHN0YXJ0aW5nIHN0YXRlLApAQCAt
OTMzLDE0ICs5NTEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGNvdW50ZXIgdGhh
dCB0aGlzIGNvcnJlc3BvbmRzIHRvIGlzIGFsc28gYXZhaWxhYmxlIGRpcmVjdGx5LgogICAgICAg
ICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2pp
dEV4ZWN1dGVDb3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpOwor
ICAgICAgICAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoY291bnRlclZh
bHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIGFuIG9wdGltaXphdGlvbiB0cmlnZ2VyIHRv
IGZpcmUgb25seSBhZnRlcgogICAgICAgICAvLyBhIGxvdCBvZiB3YXJtLXVwLgogICAgICAgICB2
b2lkIG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9q
aXRFeGVjdXRlQ291bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCk7CisgICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChjb3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpLCB0aGlzKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGNhdXNlIGFuIG9wdGltaXphdGlvbiB0
cmlnZ2VyIHRvIGZpcmUgc29vbiwgYnV0CkBAIC05NjMsNyArOTgxLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGlt
aXplU29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIgPSBP
cHRpb25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24gPDwgcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAgICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0
TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplU29vbiA8PCByZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigpLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgLy8gVGhlIHNwZWN1bGF0aXZlIEpJVCB0cmFja3MgaXRzIHN1Y2Nlc3MgcmF0ZSwgc28gdGhh
dCB3ZSBjYW4KQEAgLTEyMDMsMTMgKzEyMjEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAgICAgCi0gICAgICAgIGlu
dDMyX3QgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICBFeGVjdXRpb25Db3VudGVyIG1f
bGxpbnRFeGVjdXRlQ291bnRlcjsKICAgICAgICAgCi0gICAgICAgIGludDMyX3QgbV9qaXRFeGVj
dXRlQ291bnRlcjsKKyAgICAgICAgRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVy
OworICAgICAgICBpbnQzMl90IG1fdG90YWxKSVRFeGVjdXRpb25zOwogICAgICAgICB1aW50MzJf
dCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7CiAgICAgICAgIHVpbnQzMl90IG1fc3BlY3Vs
YXRpdmVGYWlsQ291bnRlcjsKLSAgICAgICAgdWludDhfdCBtX29wdGltaXphdGlvbkRlbGF5Q291
bnRlcjsKLSAgICAgICAgdWludDhfdCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOworICAg
ICAgICB1aW50MTZfdCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsKKyAgICAgICAgdWludDE2
X3QgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKICAgICAgICAgCiAgICAgICAgIHN0cnVj
dCBSYXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxv
Zy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworRXhlY3V0aW9uQ291bnRlcjo6RXhlY3V0aW9uQ291
bnRlcigpCit7CisgICAgcmVzZXQoKTsKK30KKworYm9vbCBFeGVjdXRpb25Db3VudGVyOjpjaGVj
a0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBp
ZiAoaGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICBpZiAoc2V0VGhyZXNob2xkKGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFeGVjdXRpb25Db3VudGVy
OjpzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayogY29kZUJsb2Nr
KQoreworICAgIHJlc2V0KCk7CisgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7Cisg
ICAgc2V0VGhyZXNob2xkKGNvZGVCbG9jayk7Cit9CisKK3ZvaWQgRXhlY3V0aW9uQ291bnRlcjo6
ZGVmZXJJbmRlZmluaXRlbHkoKQoreworICAgIG1fdG90YWxDb3VudCA9IDA7CisgICAgbV9hY3Rp
dmVUaHJlc2hvbGQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKTsKKyAgICBt
X2NvdW50ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKTsKK30KKworZG91
YmxlIEV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKGludDMyX3Qg
dmFsdWUsIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGRvdWJsZSBtdWx0aXBsaWVyID0K
KyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1cmVNdWx0aXBsaWVyKAor
ICAgICAgICAgICAgY29kZUJsb2NrLT5wcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKSk7CisgICAg
QVNTRVJUKG11bHRpcGxpZXIgPj0gMS4wKTsKKyAgICByZXR1cm4gbXVsdGlwbGllciAqIHZhbHVl
OworfQorCitpbnQzMl90IEV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0
aWNzQW5kQ29udmVydFRvSW50KAorICAgIGludDMyX3QgdmFsdWUsIENvZGVCbG9jayogY29kZUJs
b2NrKQoreworICAgIGRvdWJsZSBkb3VibGVSZXN1bHQgPSBhcHBseU1lbW9yeVVzYWdlSGV1cmlz
dGljcyh2YWx1ZSwgY29kZUJsb2NrKTsKKyAgICAKKyAgICBBU1NFUlQoZG91YmxlUmVzdWx0ID49
IDApOworICAgIAorICAgIGlmIChkb3VibGVSZXN1bHQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1heCgpOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pihkb3VibGVS
ZXN1bHQpOworfQorCitib29sIEV4ZWN1dGlvbkNvdW50ZXI6Omhhc0Nyb3NzZWRUaHJlc2hvbGQo
Q29kZUJsb2NrKiBjb2RlQmxvY2spIGNvbnN0Cit7CisgICAgLy8gVGhpcyBjaGVja3MgaWYgdGhl
IGN1cnJlbnQgY291bnQgcm91bmRlZCB1cCB0byB0aGUgdGhyZXNob2xkIHdlIHdlcmUgdGFyZ2V0
aW5nLgorICAgIC8vIEZvciBleGFtcGxlLCBpZiB3ZSBhcmUgdXNpbmcgaGFsZiBvZiBhdmFpbGFi
bGUgZXhlY3V0YWJsZSBtZW1vcnkgYW5kIGhhdmUKKyAgICAvLyBtX2FjdGl2ZVRocmVzaG9sZCA9
IDEwMDAsIGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKG1fYWN0aXZlVGhyZXNob2xkKSB3aWxs
IGJlCisgICAgLy8gMjAwMCwgYnV0IHdlIHdpbGwgcHJldGVuZCBhcyBpZiB0aGUgdGhyZXNob2xk
IHdhcyBjcm9zc2VkIGlmIHdlIHJlYWNoIDIwMDAgLQorICAgIC8vIDEwMDAgLyAyLCBvciAxNTAw
LiBUaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB3ZSB3YW50IHRvIGF2b2lkIHRocmFzaGluZy4g
SWYKKyAgICAvLyB0aGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlLCB0aGVuIHRoZSBKSVQncyB0aHJl
c2hvbGQgZm9yIHdoZW4gaXQgd2lsbCBhZ2FpbiBjYWxsCisgICAgLy8gaW50byB0aGUgc2xvdyBw
YXRoICh3aGljaCB3aWxsIGNhbGwgdGhpcyBtZXRob2QgYSBzZWNvbmQgdGltZSkgd2lsbCBiZSBz
ZXQKKyAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY3VycmVu
dCBjb3VudCBhbmQgdGhlIHRhcmdldCBjb3VudAorICAgIC8vIGFjY29yZGluZyB0byAqY3VycmVu
dCogbWVtb3J5IHVzYWdlLiBCdXQgYnkgdGhlIHRpbWUgd2UgY2FsbCBpbnRvIHRoaXMgYWdhaW4s
IHdlCisgICAgLy8gbWF5IGhhdmUgSklUJ2VkIG1vcmUgY29kZSwgYW5kIHNvIHRoZSB0YXJnZXQg
Y291bnQgd2lsbCBpbmNyZWFzZSBzbGlnaHRseS4gVGhpcworICAgIC8vIG1heSBsZWFkIHRvIGEg
cmVwZWF0aW5nIHBhdHRlcm4gd2hlcmUgdGhlIHRhcmdldCBjb3VudCBpcyBzbGlnaHRseSBpbmNy
ZW1lbnRlZCwKKyAgICAvLyB0aGUgSklUIGltbWVkaWF0ZWx5IG1hdGNoZXMgdGhhdCBpbmNyZWFz
ZSwgY2FsbHMgaW50byB0aGUgc2xvdyBwYXRoIGFnYWluLCBhbmQKKyAgICAvLyBhZ2FpbiB0aGUg
dGFyZ2V0IGNvdW50IGlzIHNsaWdodGx5IGluY3JlbWVudGVkLiBJbnN0ZWFkIG9mIGhhdmluZyB0
aGlzIHZpY2lvdXMKKyAgICAvLyBjeWNsZSwgd2UgZGVjbGFyZSB2aWN0b3J5IGEgYml0IGVhcmx5
IGlmIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQKKyAgICAvLyB0b3RhbCBhbmQg
b3VyIHRhcmdldCBhY2NvcmRpbmcgdG8gbWVtb3J5IGhldXJpc3RpY3MgaXMgc21hbGwuIE91ciBk
ZWZpbml0aW9uIG9mCisgICAgLy8gc21hbGwgaXMgYXJiaXRyYXJpbHkgcGlja2VkIHRvIGJlIGhh
bGYgb2YgdGhlIG9yaWdpbmFsIHRocmVzaG9sZCAoaS5lLgorICAgIC8vIG1fYWN0aXZlVGhyZXNo
b2xkKS4KKyAgICAKKyAgICBkb3VibGUgbW9kaWZpZWRUaHJlc2hvbGQgPSBhcHBseU1lbW9yeVVz
YWdlSGV1cmlzdGljcyhtX2FjdGl2ZVRocmVzaG9sZCwgY29kZUJsb2NrKTsKKyAgICAKKyAgICBp
ZiAoZmFsc2UpIHsKKyAgICAgICAgZGF0YUxvZygibV90b3RhbENvdW50ID0gJWxmLCBtX2NvdW50
ZXIgPSAlZCwgbW9kaWZpZWRUaHJlc2hvbGQgPSAlbGYsIG1fYWN0aXZlVGhyZXNob2xkID0gJWRc
biIsCisgICAgICAgICAgICAgICAgKGRvdWJsZSltX3RvdGFsQ291bnQsIG1fY291bnRlciwgbW9k
aWZpZWRUaHJlc2hvbGQsIG1fYWN0aXZlVGhyZXNob2xkKTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlciA+PQorICAg
ICAgICAgbW9kaWZpZWRUaHJlc2hvbGQgLSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fYWN0aXZlVGhy
ZXNob2xkKSAvIDI7Cit9CisKK2Jvb2wgRXhlY3V0aW9uQ291bnRlcjo6c2V0VGhyZXNob2xkKENv
ZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChtX2FjdGl2ZVRocmVzaG9sZCA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkgeworICAgICAgICBkZWZlckluZGVmaW5p
dGVseSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAgICBBU1NF
UlQoIWhhc0Nyb3NzZWRUaHJlc2hvbGQoY29kZUJsb2NrKSk7CisgICAgICAgIAorICAgIC8vIENv
bXB1dGUgdGhlIHRydWUgdG90YWwgY291bnQuCisgICAgZG91YmxlIHRydWVUb3RhbENvdW50ID0g
c3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyOworICAgICAgICAK
KyAgICAvLyBDb3JyZWN0IHRoZSB0aHJlc2hvbGQgZm9yIGN1cnJlbnQgbWVtb3J5IHVzYWdlLgor
ICAgIGRvdWJsZSB0aHJlc2hvbGQgPSBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljcyhtX2FjdGl2
ZVRocmVzaG9sZCwgY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgLy8gVGhyZXNob2xkIG11c3Qg
YmUgbm9uLW5lZ2F0aXZlIGFuZCBub3QgTmFOLgorICAgIEFTU0VSVCh0aHJlc2hvbGQgPj0gMCk7
CisgICAgICAgIAorICAgIC8vIEFkanVzdCB0aGUgdGhyZXNob2xkIGFjY29yZGluZyB0byB0aGUg
bnVtYmVyIG9mIGV4ZWN1dGlvbnMgd2UgaGF2ZSBhbHJlYWR5CisgICAgLy8gc2Vlbi4gVGhpcyBz
aG91bGRuJ3QgZ28gbmVnYXRpdmUsIGJ1dCBpdCBtaWdodCwgYmVjYXVzZSBvZiByb3VuZC1vZmYg
ZXJyb3JzLgorICAgIHRocmVzaG9sZCAtPSB0cnVlVG90YWxDb3VudDsKKyAgICAgICAgCisgICAg
aWYgKHRocmVzaG9sZCA8PSAwKSB7CisgICAgICAgIG1fY291bnRlciA9IDA7CisgICAgICAgIG1f
dG90YWxDb3VudCA9IHRydWVUb3RhbENvdW50OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAodGhyZXNob2xkID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4
KCkpCisgICAgICAgIHRocmVzaG9sZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1h
eCgpOworICAgICAgICAKKyAgICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhy
ZXNob2xkKTsKKyAgICAgICAgCisgICAgbV90b3RhbENvdW50ID0gdHJ1ZVRvdGFsQ291bnQgKyB0
aHJlc2hvbGQ7CisgICAgICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFeGVjdXRp
b25Db3VudGVyOjpyZXNldCgpCit7CisgICAgbV9jb3VudGVyID0gMDsKKyAgICBtX3RvdGFsQ291
bnQgPSAwOworICAgIG1fYWN0aXZlVGhyZXNob2xkID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3Vu
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1
dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBFeGVj
dXRpb25Db3VudGVyX2gKKyNkZWZpbmUgRXhlY3V0aW9uQ291bnRlcl9oCisKKyNpbmNsdWRlIDx3
dGYvU2ltcGxlU3RhdHMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsK
KworY2xhc3MgRXhlY3V0aW9uQ291bnRlciB7CitwdWJsaWM6CisgICAgRXhlY3V0aW9uQ291bnRl
cigpOworICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7
CisgICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayop
OworICAgIHZvaWQgZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICBzdGF0aWMgZG91YmxlIGFwcGx5
TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKGludDMyX3QgdmFsdWUsIENvZGVCbG9jayopOworICAgIHN0
YXRpYyBpbnQzMl90IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KGlu
dDMyX3QgdmFsdWUsIENvZGVCbG9jayopOworCisgICAgc3RhdGljIGludDMyX3QgZm9ybWF0dGVk
VG90YWxDb3VudChmbG9hdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAg
ICAgIGludDMyX3QgaTsKKyAgICAgICAgICAgIGZsb2F0IGY7CisgICAgICAgIH0gdTsKKyAgICAg
ICAgdS5mID0gdmFsdWU7CisgICAgICAgIHJldHVybiB1Lmk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBib29sIGhhc0Nyb3NzZWRUaHJlc2hvbGQoQ29kZUJsb2NrKikgY29uc3Q7CisgICAg
Ym9vbCBzZXRUaHJlc2hvbGQoQ29kZUJsb2NrKik7CisgICAgdm9pZCByZXNldCgpOworCitwdWJs
aWM6CisKKyAgICAvLyBOQi4gVGhlc2UgYXJlIGludGVudGlvbmFsbHkgcHVibGljIGJlY2F1c2Ug
aXQgd2lsbCBiZSBtb2RpZmllZCBmcm9tIG1hY2hpbmUgY29kZS4KKyAgICAKKyAgICAvLyBUaGlz
IGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYnkgdGhlIEpJVCBvciBMTEludC4gSXQgc3RhcnRzIG91
dCBuZWdhdGl2ZSBhbmQgaXMKKyAgICAvLyBjb3VudGVkIHVwIHVudGlsIGl0IGJlY29tZXMgbm9u
LW5lZ2F0aXZlLiBBdCB0aGUgc3RhcnQgb2YgYSBjb3VudGluZyBwZXJpb2QsCisgICAgLy8gdGhl
IHRocmVzaG9sZCB3ZSB3aXNoIHRvIHJlYWNoIGlzIG1fdG90YWxDb3VudCArIG1fY291bnRlciwg
aW4gdGhlIHNlbnNlIHRoYXQKKyAgICAvLyB3ZSB3aWxsIGFkZCBYIHRvIG1fdG90YWxDb3VudCBh
bmQgc3VidHJhY3QgWCBmcm9tIG1fY291bnRlci4KKyAgICBpbnQzMl90IG1fY291bnRlcjsKKwor
ICAgIC8vIENvdW50cyB0aGUgdG90YWwgbnVtYmVyIG9mIGV4ZWN1dGlvbnMgd2UgaGF2ZSBzZWVu
IHBsdXMgdGhlIG9uZXMgd2UndmUgc2V0IGEKKyAgICAvLyB0aHJlc2hvbGQgZm9yIGluIG1fY291
bnRlci4gQmVjYXVzZSBtX2NvdW50ZXIncyB0aHJlc2hvbGQgaXMgbmVnYXRpdmUsIHRoZQorICAg
IC8vIHRvdGFsIG51bWJlciBvZiBhY3R1YWwgZXhlY3V0aW9ucyBjYW4gYWx3YXlzIGJlIGNvbXB1
dGVkIGFzIG1fdG90YWxDb3VudCArCisgICAgLy8gbV9jb3VudGVyLgorICAgIGZsb2F0IG1fdG90
YWxDb3VudDsKKworICAgIC8vIFRoaXMgaXMgdGhlIHRocmVzaG9sZCB3ZSB3ZXJlIG9yaWdpbmFs
bHkgdGFyZ2V0dGluZywgd2l0aG91dCBhbnkgY29ycmVjdGlvbiBmb3IKKyAgICAvLyB0aGUgbWVt
b3J5IHVzYWdlIGhldXJpc3RpY3MuCisgICAgaW50MzJfdCBtX2FjdGl2ZVRocmVzaG9sZDsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRXhlY3V0aW9uQ291bnRlcl9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxMDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgx
LDEzICs1ODEsMjEgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAog
ICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBsb3dGYWlsUmF0ZSA9IG1faml0LmJyYW5jaDMyKEFz
c2VtYmx5SGVscGVyczo6QmVsb3dPckVxdWFsLCBHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVn
VDEpOwogICAgIAogICAgIC8vIFJlb3B0aW1pemUgYXMgc29vbiBhcyBwb3NzaWJsZS4KLSAgICBt
X2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291
bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbiksIEFzc2VtYmx5SGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVy
KCkpKTsKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoMCksIEFzc2Vt
Ymx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJ
VEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6
SW1tMzIoMCksIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGlvbkFjdGl2ZVRocmVzaG9sZCgpKSk7CiAgICAgQXNzZW1i
bHlIZWxwZXJzOjpKdW1wIGRvbmVBZGp1c3RpbmcgPSBtX2ppdC5qdW1wKCk7CiAgICAgCiAgICAg
ZmV3RmFpbHMubGluaygmbV9qaXQpOwogICAgIGxvd0ZhaWxSYXRlLmxpbmsoJm1faml0KTsKICAg
ICAKLSAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIobV9qaXQuYmFzZWxp
bmVDb2RlQmxvY2soKS0+Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSks
IEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICAvLyBBZGp1c3QgdGhlIGV4ZWN1dGlvbiBj
b3VudGVyIHN1Y2ggdGhhdCB0aGUgdGFyZ2V0IGlzIHRvIG9ubHkgb3B0aW1pemUgYWZ0ZXIgYSB3
aGlsZS4KKyAgICBpbnQzMl90IHRhcmdldFZhbHVlID0KKyAgICAgICAgRXhlY3V0aW9uQ291bnRl
cjo6YXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3NBbmRDb252ZXJ0VG9JbnQoCisgICAgICAgICAg
ICBtX2ppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcCgpLAorICAgICAgICAgICAgbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2soKSk7Cisg
ICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKC10YXJnZXRWYWx1ZSksIEFz
c2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVy
czo6SW1tMzIodGFyZ2V0VmFsdWUpLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQoKSkp
OworICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihFeGVjdXRpb25Db3Vu
dGVyOjpmb3JtYXR0ZWRUb3RhbENvdW50KHRhcmdldFZhbHVlKSksIEFzc2VtYmx5SGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGlvblRv
dGFsQ291bnQoKSkpOwogICAgIAogICAgIGRvbmVBZGp1c3RpbmcubGluaygmbV9qaXQpOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCShyZXZpc2lvbiAxMDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTcg
QEAKIAogI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpCiAjaW5jbHVkZSAi
Q29kZVByb2ZpbGluZy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3Rm
L01ldGFBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0aW9uLmg+CiAjaW5j
bHVkZSA8d3RmL1ZNVGFncy5oPgogI2VuZGlmCiAKKy8vIFVuY29tbWVudCB0byBjcmVhdGUgYW4g
YXJ0aWZpY2lhbCBleGVjdXRhYmxlIG1lbW9yeSB1c2FnZSBsaW1pdC4gVGhpcyBsaW1pdAorLy8g
aXMgaW1wZXJmZWN0IGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciB0ZXN0aW5nIHRoZSBWTSdz
IGFiaWxpdHkgdG8gaGFuZGxlCisvLyBvdXQtb2YtZXhlY3V0YWJsZS1tZW1vcnkgc2l0dWF0aW9u
cy4KKy8vICNkZWZpbmUgRVhFQ1VUQUJMRV9NRU1PUllfTElNSVQgMTAwMDAwMAorCiAjaWYgRU5B
QkxFKEFTU0VNQkxFUikKIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKQEAgLTY1LDYgKzcxLDExIEBA
IHByb3RlY3RlZDoKICAgICAgICAgCiAgICAgICAgIG51bVBhZ2VzID0gbmV3TnVtUGFnZXM7CiAg
ICAgICAgIAorI2lmZGVmIEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUCisgICAgICAgIGlmIChieXRl
c0FsbG9jYXRlZCgpID49IEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisjZW5kaWYKKyAgICAgICAgCiAgICAgICAgIFBhZ2VSZXNlcnZhdGlvbiByZXNlcnZh
dGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZShudW1QYWdlcyAqIHBhZ2VTaXplKCksIE9T
QWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVl
KTsKICAgICAgICAgaWYgKCFyZXNlcnZhdGlvbikKICAgICAgICAgICAgIENSQVNIKCk7CkBAIC0x
MDksNyArMTIwLDI5IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnMK
IAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKIHsKKyNp
ZmRlZiBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVAorICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVz
QWxsb2NhdGVkKCkgPiBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVCAvIDI7CisjZWxzZQogICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitkb3VibGUgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVt
b3J5UHJlc3N1cmVNdWx0aXBsaWVyKHNpemVfdCBhZGRlZE1lbW9yeVVzYWdlKQoreworI2lmZGVm
IEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUCisgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIGRhdGFM
b2coIkNvbXB1dGluZyBtZW1vcnkgcHJlc3N1cmUgbXVsdGlwbGllciB3aXRoIGJ5dGVzQWxsb2Nh
dGVkID0gJWx1LCBhZGRlZE1lbW9yeVVzYWdlID0gJWx1XG4iLAorICAgICAgICAgICAgICAgIGFs
bG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSwgYWRkZWRNZW1vcnlVc2FnZSk7CisgICAgfQorICAg
IHNpemVfdCBieXRlc0FsbG9jYXRlZCA9IGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSArIGFk
ZGVkTWVtb3J5VXNhZ2U7CisgICAgaWYgKGJ5dGVzQWxsb2NhdGVkID49IEVYRUNVVEFCTEVfTUVN
T1JZX0xJTUlUKQorICAgICAgICBieXRlc0FsbG9jYXRlZCA9IEVYRUNVVEFCTEVfTUVNT1JZX0xJ
TUlUOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KEVYRUNVVEFCTEVfTUVNT1JZX0xJ
TUlUKSAvCisgICAgICAgIChFWEVDVVRBQkxFX01FTU9SWV9MSU1JVCAtIGJ5dGVzQWxsb2NhdGVk
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFkZGVkTWVtb3J5VXNhZ2UpOworICAgIHJldHVy
biAxLjA7CisjZW5kaWYKIH0KIAogUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBF
eGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAko
cmV2aXNpb24gMTA5MzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOCBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgYm9vbCB1bmRlck1lbW9yeVByZXNzdXJlKCk7CiAgICAgCisgICAgc3RhdGlj
IGRvdWJsZSBtZW1vcnlQcmVzc3VyZU11bHRpcGxpZXIoc2l6ZV90IGFkZGVkTWVtb3J5VXNhZ2Up
OworICAgIAogI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQogICAgIHN0YXRpYyB2
b2lkIGR1bXBQcm9maWxlKCk7CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAko
cmV2aXNpb24gMTA5MzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDE3
IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmUKICAgICByZXR1cm4g
c3RhdGlzdGljcy5ieXRlc0FsbG9jYXRlZCA+IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCAvIDI7
CiB9CiAKK2RvdWJsZSBFeGVjdXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3VyZU11bHRpcGxp
ZXIoc2l6ZV90IGFkZGVkTWVtb3J5VXNhZ2UpCit7CisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlz
dGljcyBzdGF0aXN0aWNzID0gYWxsb2NhdG9yLT5jdXJyZW50U3RhdGlzdGljcygpOworICAgIEFT
U0VSVChzdGF0aXN0aWNzLmJ5dGVzQWxsb2NhdGVkIDw9IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZl
ZCk7CisgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkID0gc3RhdGlzdGljcy5ieXRlc0FsbG9jYXRl
ZCArIGFkZGVkTWVtb3J5VXNhZ2U7CisgICAgaWYgKGJ5dGVzQWxsb2NhdGVkID49IHN0YXRpc3Rp
Y3MuYnl0ZXNSZXNlcnZlZCkKKyAgICAgICAgYnl0ZXNBbGxvY2F0ZWQgPSBzdGF0aXN0aWNzLmJ5
dGVzUmVzZXJ2ZWQ7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhdGlzdGljcy5i
eXRlc1Jlc2VydmVkKSAvCisgICAgICAgIChzdGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQgLSBieXRl
c0FsbG9jYXRlZCk7Cit9CisKIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQpCiB7CiAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9j
YXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEwOTMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE1LDYgKzcxNSwxMCBAQCBKSVRDb2Rl
IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgCiAgICAgQ29kZVJlZiByZXN1
bHQgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAKKyAgICBtX2dsb2JhbERhdGEt
Pm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5hZGQoCisgICAg
ICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLworICAgICAgICBzdGF0aWNf
Y2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKKyAgICAK
ICNpZiBFTkFCTEUoSklUX1ZFUkJPU0UpCiAgICAgZGF0YUxvZygiSklUIGdlbmVyYXRlZCBjb2Rl
IGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5zdGFydCgpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAx
MDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkyOSwxMiArMTkyOSwxNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcHRpbWl6ZV9mcm9tCiAgICAgCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0Zy
YW1lLmNhbGxGcmFtZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5pbnQzMigpOwogCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJn
c1swXS5pbnQzMigpOworICAgIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgZGF0
YUxvZygiJXA6IEVudGVyZWQgb3B0aW1pemVfZnJvbV9sb29wIHdpdGggZXhlY3V0ZUNvdW50ZXIg
PSAlZCwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlD
b3VudGVyID0gJXVcbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigp
LCBjb2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksIGNvZGVCbG9jay0+b3B0
aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwogI2VuZGlmCiAKKyAgICBpZiAoIWNvZGVCbG9jay0+
Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewogI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGxvb3Ag
T1NSIGludG8gJXAoJXApIHdpdGggc3VjY2Vzcy9mYWlsICV1LyV1LlxuIiwgY29kZUJsb2NrLCBj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3Vs
YXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0
aXZlRmFpbENvdW50ZXIoKSk7CkBAIC0yMDMzLDYgKzIwMzcsOSBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgZGF0YUxvZygiRW50ZXJlZCBvcHRpbWl6ZV9m
cm9tX3JldCB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyID0gJXUsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICV1XG4iLCBjb2RlQmxvY2stPmpp
dEV4ZWN1dGVDb3VudGVyKCksIGNvZGVCbG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
KSwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSk7CiAjZW5kaWYKIAorICAg
IGlmICghY29kZUJsb2NrLT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgZGF0YUxvZygi
UmV0dXJuaW5nIGZyb20gb2xkIEpJVCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxhY2Vt
ZW50ICVwKCVwKSwgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUiLCBjb2RlQmxvY2ssIGNvZGVCbG9j
ay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1
Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWls
Q291bnRlcigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTA5MzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDYgKzI3MCwx
MyBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoRXhlY1N0YXRlKiBleGVjKQogLy8gUmV0dXJucyB0
cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgogaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNl
dEhldXJpc3RpY3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgeworI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIGRhdGFMb2coIiAgICBKSVQgdGhyZXNob2xk
IHNob3VsZCBiZSBsaWZ0ZWQuXG4iKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgICAgICAKICAgICBDb2RlQmxvY2s6OkpJVENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCA9IGNvZGVCbG9jay0+aml0Q29tcGlsZShleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIHN3aXRj
aCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb2RlQmxvY2s6OkFscmVhZHlDb21waWxlZDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxMDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAt
MjczLDcgKzI3Myw3IEBAIGVuZAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFj
dGlvbikKICAgICBpZiBKSVRfRU5BQkxFRAogICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDAKLSAgICAgICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNv
dW50ZXJbdDBdLCAuY29udGludWUKKyAgICAgICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2Nr
OjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBd
LCAuY29udGludWUKICAgICAgICAgYWN0aW9uKCkKICAgICAuY29udGludWU6CiAgICAgZW5kCkBA
IC00MjksNyArNDI5LDcgQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxv
YwogICAgIGVuZAogICAgIGNvZGVCbG9ja0dldHRlcih0MSkKICAgICBpZiBKSVRfRU5BQkxFRAot
ICAgICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFdLCAu
Y29udGludWUKKyAgICAgICAgYmFkZGlzIDUsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3Vu
dGVyICsgRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCiAgICAgICAg
IGNDYWxsMihvc3JTbG93UGF0aCwgY2ZyLCBQQykKICAgICAgICAgbW92ZSB0MSwgY2ZyCiAgICAg
ICAgIGJ0cHogdDAsIC5yZWNvdmVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTA5MzI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhy
ZWFkRGF0YS5oPgogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAgLTIwMSw2ICsyMDIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU21hbGxTdHJpbmdzIHNtYWxsU3RyaW5nczsKICAg
ICAgICAgTnVtZXJpY1N0cmluZ3MgbnVtZXJpY1N0cmluZ3M7CiAgICAgICAgIERhdGVJbnN0YW5j
ZUNhY2hlIGRhdGVJbnN0YW5jZUNhY2hlOworICAgICAgICBXVEY6OlNpbXBsZVN0YXRzIG1hY2hp
bmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVDsKICAgICAgICAgVmVjdG9y
PENvZGVCbG9jayo+IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkOwogICAgICAgICB2b2lkIHN0YXJ0
ZWRDb21waWxpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAxMDkzMjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsMTUgKzUyLDEyIEBAIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVj
dElubGkKIAogdW5zaWduZWQgbWF4aW11bUlubGluaW5nRGVwdGg7CiAKLWludDMyX3QgZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9ySklUQWZ0ZXJXYXJtVXA7Ci1pbnQzMl90IGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvckRvbnRKSVRBbnl0aW1lU29vbjsKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlclZh
bHVlRm9ySklUU29vbjsKLQotaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6
ZUFmdGVyV2FybVVwOwotaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyTG9uZ1dhcm1VcDsKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9wdGlt
aXplQW55dGltZVNvb247Ci1pbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXpl
U29vbjsKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2Nh
dGlvbjsKK2ludDMyX3QgdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA7CitpbnQzMl90IHRocmVz
aG9sZEZvckpJVFNvb247CisKK2ludDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1V
cDsKK2ludDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7CitpbnQzMl90
IHRocmVzaG9sZEZvck9wdGltaXplU29vbjsKIAogaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5j
cmVtZW50Rm9yTG9vcDsKIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVy
bjsKQEAgLTE0MSwxNSArMTM4LDEyIEBAIHZvaWQgaW5pdGlhbGl6ZU9wdGlvbnMoKQogICAgIAog
ICAgIFNFVChtYXhpbXVtSW5saW5pbmdEZXB0aCwgNSk7CiAKLSAgICBTRVQoZXhlY3V0aW9uQ291
bnRlclZhbHVlRm9ySklUQWZ0ZXJXYXJtVXAsICAgICAtMTAwKTsKLSAgICBTRVQoZXhlY3V0aW9u
Q291bnRlclZhbHVlRm9yRG9udEpJVEFueXRpbWVTb29uLCBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptaW4oKSk7Ci0gICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckpJVFNvb24s
ICAgICAgICAgICAgLTEwMCk7Ci0KLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlcldhcm1VcCwgICAgIC0xMDAwKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZh
bHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAsIC01MDAwKTsKLSAgICBTRVQoZXhlY3V0aW9u
Q291bnRlclZhbHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb24sIHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1pbigpKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0
aW1pemVTb29uLCAgICAgICAgICAgIC0xMDAwKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZh
bHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbiwgIDApOworICAgIFNFVCh0aHJlc2hvbGRGb3JK
SVRBZnRlcldhcm1VcCwgICAgIDEwMCk7CisgICAgU0VUKHRocmVzaG9sZEZvckpJVFNvb24sICAg
ICAgICAgICAgMTAwKTsKKworICAgIFNFVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVw
LCAgICAgMTAwMCk7CisgICAgU0VUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
LCA1MDAwKTsKKyAgICBTRVQodGhyZXNob2xkRm9yT3B0aW1pemVTb29uLCAgICAgICAgICAgIDEw
MDApOwogCiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAgIDEpOwog
ICAgIFNFVChleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuLCAxNSk7CkBAIC0xOTUs
MTEgKzE4OSw5IEBAIHZvaWQgaW5pdGlhbGl6ZU9wdGlvbnMoKQogICAgIAogICAgIFNFVChudW1i
ZXJPZkdDTWFya2VycywgY3B1c1RvVXNlKTsKIAotICAgIEFTU0VSVChleGVjdXRpb25Db3VudGVy
VmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbiA8PSBleGVjdXRpb25Db3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCk7Ci0gICAgQVNTRVJUKGV4ZWN1dGlvbkNvdW50ZXJW
YWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwIDw9IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXApOwotICAgIEFTU0VSVChleGVjdXRpb25Db3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyV2FybVVwIDw9IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXpl
U29vbik7Ci0gICAgQVNTRVJUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJX
YXJtVXAgPCAwKTsKLSAgICBBU1NFUlQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVT
b29uIDw9IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24pOwor
ICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCA+PSB0aHJlc2hv
bGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKTsKKyAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlcldhcm1VcCA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb24pOworICAgIEFTU0VSVCh0
aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwID49IDApOwogICAgIAogICAgIC8vIENvbXB1
dGUgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIHJlb3B0aW1pemF0aW9uIHJldHJ5IGNvdW50ZXIu
IFRoaXMgaXMgc2ltcGx5CiAgICAgLy8gdGhlIGxhcmdlc3QgdmFsdWUgYXQgd2hpY2ggd2UgZG9u
J3Qgb3ZlcmZsb3cgdGhlIGV4ZWN1dGUgY291bnRlciwgd2hlbiB1c2luZyBpdApAQCAtMjA3LDEx
ICsxOTksMTEgQEAgdm9pZCBpbml0aWFsaXplT3B0aW9ucygpCiAgICAgLy8gdXAgYmVpbmcgMTgs
IHNvIHRoaXMgbG9vcCBpcyBub3Qgc28gdGVycmlibGU7IGl0IHByb2JhYmx5IHRha2VzIHVwIH4x
MDAgY3ljbGVzCiAgICAgLy8gdG90YWwgb24gYSAzMi1iaXQgcHJvY2Vzc29yLgogICAgIHJlb3B0
aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4ID0gMDsKLSAgICB3aGlsZSAoKHN0YXRpY19jYXN0PGlu
dDY0X3Q+KGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKSA8
PCAocmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXggKyAxKSkgPj0gc3RhdGljX2Nhc3Q8aW50
NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKQorICAgIHdoaWxlICgo
c3RhdGljX2Nhc3Q8aW50NjRfdD4odGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAp
IDw8IChyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCArIDEpKSA8PSBzdGF0aWNfY2FzdDxp
bnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCiAgICAgICAgIHJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4Kys7CiAgICAgCi0gICAgQVNTRVJUKChzdGF0aWNf
Y2FzdDxpbnQ2NF90PihleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpIDwgMCk7Ci0gICAgQVNTRVJU
KChzdGF0aWNfY2FzdDxpbnQ2NF90PihleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpID49IHN0YXRp
Y19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSk7Cisg
ICAgQVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpID4gMCk7CisgICAg
QVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9u
Z1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpIDw9IHN0YXRpY19jYXN0
PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpPcHRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxMDkzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE1ICszNywxMyBAQCBl
eHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RyCiAKIGV4dGVybiB1bnNpZ25l
ZCBtYXhpbXVtSW5saW5pbmdEZXB0aDsgLy8gRGVwdGggb2YgaW5saW5lIHN0YWNrLCBzbyAxID0g
bm8gaW5saW5pbmcsIDIgPSBvbmUgbGV2ZWwsIGV0Yy4KIAotZXh0ZXJuIGludDMyX3QgZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9ySklUQWZ0ZXJXYXJtVXA7Ci1leHRlcm4gaW50MzJfdCBleGVjdXRp
b25Db3VudGVyVmFsdWVGb3JEb250SklUQW55dGltZVNvb247Ci1leHRlcm4gaW50MzJfdCBleGVj
dXRpb25Db3VudGVyVmFsdWVGb3JKSVRTb29uOwotCi1leHRlcm4gaW50MzJfdCBleGVjdXRpb25D
b3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwOwotZXh0ZXJuIGludDMyX3QgZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7Ci1leHRlcm4gaW50MzJf
dCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKLWV4dGVy
biBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbjsKLWV4dGVybiBp
bnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb247Citl
eHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcDsKK2V4dGVybiBpbnQzMl90
IHRocmVzaG9sZEZvckpJVFNvb247CisKK2V4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJXYXJtVXA7CitleHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcDsKK2V4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplU29vbjsKK2V4
dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplTmV4dEludm9jYXRpb247CiAKIGV4dGVy
biBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wOwogZXh0ZXJuIGludDMy
X3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvU2ltcGxlU3RhdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1NpbXBsZVN0YXRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1NpbXBsZVN0YXRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
U2ltcGxlU3RhdHNfaAorI2RlZmluZSBTaW1wbGVTdGF0c19oCisKKyNpbmNsdWRlICJTdGRMaWJF
eHRyYXMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFNpbXBsZSBhbmQgY2hlYXAgd2F5IG9m
IHRyYWNraW5nIHN0YXRpc3RpY3MgaWYgeW91J3JlIG5vdCB3b3JyaWVkIGFib3V0IGNob3BwaW5n
IG9uCisvLyB0aGUgc3VtIG9mIHNxdWFyZXMgKGkuZS4gdGhlIHN1bSBvZiBzcXVhcmVzIGlzIHVu
bGlrZWx5IHRvIGV4Y2VlZCAyXjUyKS4KK2NsYXNzIFNpbXBsZVN0YXRzIHsKK3B1YmxpYzoKKyAg
ICBTaW1wbGVTdGF0cygpCisgICAgICAgIDogbV9jb3VudCgwKQorICAgICAgICAsIG1fc3VtKDAp
CisgICAgICAgICwgbV9zdW1PZlNxdWFyZXMoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZv
aWQgYWRkKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fY291bnQrKzsKKyAgICAgICAg
bV9zdW0gKz0gdmFsdWU7CisgICAgICAgIG1fc3VtT2ZTcXVhcmVzICs9IHZhbHVlICogdmFsdWU7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAhbV9jb3VudDsKKyAgICB9CisgICAgCisgICAgZG91YmxlIGNvdW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2NvdW50OworICAgIH0KKyAgICAKKyAgICBkb3VibGUg
c3VtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N1bTsKKyAgICB9CisgICAgCisg
ICAgZG91YmxlIHN1bU9mU3F1YXJlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9z
dW1PZlNxdWFyZXM7CisgICAgfQorICAgIAorICAgIGRvdWJsZSBtZWFuKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3N1bSAvIG1fY291bnQ7CisgICAgfQorICAgIAorICAgIC8vIE5C
LiBUaGlzIGdpdmVzIGEgYmlhc2VkIHZhcmlhbmNlIGFzIGl0IGRpdmlkZXMgYnkgdGhlIG51bWJl
ciBvZiBzYW1wbGVzIHJhdGhlcgorICAgIC8vIHRoYW4gdGhlIGRlZ3JlZXMgb2YgZnJlZWRvbS4g
VGhpcyBpcyBmaW5lIG9uY2UgdGhlIGNvdW50IGdyb3dzIGxhcmdlLCB3aGljaCBpbgorICAgIC8v
IG91ciBjYXNlIHdpbGwgaGFwcGVuIHJhdGhlciBxdWlja2x5LgorICAgIGRvdWJsZSB2YXJpYW5j
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9jb3VudCA8IDIpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGUgPHheMj4gLSA8eD5eMgorICAg
ICAgICBkb3VibGUgc2Vjb25kTW9tZW50ID0gbV9zdW1PZlNxdWFyZXMgLyBtX2NvdW50OworICAg
ICAgICBkb3VibGUgZmlyc3RNb21lbnQgPSBtX3N1bSAvIG1fY291bnQ7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gc2Vjb25kTW9tZW50IC0gZmlyc3RNb21lbnQgKiBmaXJzdE1vbWVudDsKKyAg
ICB9CisgICAgCisgICAgLy8gTkIuIFRoaXMgZ2l2ZXMgYSBiaWFzZWQgc3RhbmRhcmQgZGV2aWF0
aW9uLiBTZWUgYWJvdmUuCisgICAgZG91YmxlIHN0YW5kYXJkRGV2aWF0aW9uKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBzcXJ0KHZhcmlhbmNlKCkpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgZG91YmxlIG1fY291bnQ7CisgICAgZG91YmxlIG1fc3VtOworICAgIGRvdWJsZSBt
X3N1bU9mU3F1YXJlczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gU2lt
cGxlU3RhdHNfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130019</attachid>
            <date>2012-03-04 01:37:02 -0800</date>
            <delta_ts>2012-03-04 01:58:47 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>hyperbolicjit_patch_1.diff</filename>
            <type>text/plain</type>
            <size>51721</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBA
QAorMjAxMi0wMy0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpJVCBoZXVyaXN0aWNzIHNob3VsZCBiZSBoeXBlcmJvbGljCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDA1NQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMTA5MjIyNjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBBZGRlZCB0cmFja2luZyBvZiB0aGUgYW1vdW50IG9mIGV4ZWN1dGFibGUg
bWVtb3J5IHR5cGljYWxseSB1c2VkIGZvciBhIGJ5dGVjb2RlCisgICAgICAgIGluc3RydWN0aW9u
LiBNb2RpZmllZCB0aGUgZXhlY3V0aW9uIGNvdW50ZXIgc2NoZW1lIHRvIHVzZSB0aGlzLCBhbmQg
dGhlIGFtb3VudAorICAgICAgICBvZiBmcmVlIG1lbW9yeSwgdG8gZGV0ZXJtaW5lIGhvdyBsb25n
IHRvIHdhaXQgYmVmb3JlIGludm9raW5nIHRoZSBKSVQuCisgICAgICAgIAorICAgICAgICBUaGUg
cmVzdWx0IGlzIHRoYXQgZXZlbiBpZiB3ZSBib21iIHRoZSBWTSB3aXRoIG1vcmUgY29kZSB0aGFu
IGNhbiBmaXQgaW4gb3VyCisgICAgICAgIGV4ZWN1dGFibGUgbWVtb3J5IHBvb2wsIHdlIHN0aWxs
IGtlZXAgcnVubmluZyBhbmQgYWxtb3N0IG5ldmVyIHJ1biBvdXQgb2YKKyAgICAgICAgZXhlY3V0
YWJsZSBtZW1vcnkgLSB3aGljaCBlbnN1cmVzIHRoYXQgaWYgd2UgaGF2ZSB0byBKSVQgc29tZXRo
aW5nIGNyaXRpY2FsLCB0aGVuCisgICAgICAgIHdlJ2xsIGxpa2VseSBoYXZlIGVub3VnaCBtZW1v
cnkgdG8gZG8gc28uIFRoaXMgYWxzbyBkb2VzIG5vdCByZWdyZXNzIHBlcmZvcm1hbmNlCisgICAg
ICAgIG9uIHRoZSB0aHJlZSBtYWluIGJlbmNobWFya3MuCisgICAgICAgIAorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNo
aW5lQ29kZVNpemUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1
c2VzT3Bjb2RlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKENv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZkpJVFRocmVzaG9sZFJl
YWNoZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRvbnRKSVRBbnl0aW1lU29vbik6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmppdFNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxsaW50RXhlY3V0
ZUNvdW50ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRy
ZXNzT2ZKSVRFeGVjdXRlQ291bnRlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0
T2ZKSVRFeGVjdXRlQ291bnRlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZK
SVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9m
ZnNldE9mSklURXhlY3V0aW9uVG90YWxDb3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
aml0RXhlY3V0ZUNvdW50ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZPcHRp
bWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkb250T3B0aW1p
emVBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlcldh
cm1VcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdXYXJtVXAp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplU29vbik6CisgICAgICAgICogYnl0
ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6RXhlY3V0aW9uQ291bnRlcik6CisgICAgICAgIChK
U0M6OkV4ZWN1dGlvbkNvdW50ZXI6OmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KToKKyAg
ICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6c2V0TmV3VGhyZXNob2xkKToKKyAgICAgICAg
KEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6ZGVmZXJJbmRlZmluaXRlbHkpOgorICAgICAgICAoSlND
OjpFeGVjdXRpb25Db3VudGVyOjphcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljcyk6CisgICAgICAg
IChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29u
dmVydFRvSW50KToKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6aGFzQ3Jvc3NlZFRo
cmVzaG9sZCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6OnNldFRocmVzaG9sZCk6
CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6OnJlc2V0KToKKyAgICAgICAgKiBieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEV4ZWN1dGlvbkNvdW50ZXIpOgorICAgICAgICAoSlNDOjpFeGVjdXRpb25Db3VudGVyOjpmb3Jt
YXR0ZWRUb3RhbENvdW50KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6CisgICAgICAgICogaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9y
OjphbGxvY2F0ZU5ld1NwYWNlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
dW5kZXJNZW1vcnlQcmVzc3VyZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3VyZU11bHRpcGxpZXIpOgorICAgICAgICAqIGpp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6Om1l
bW9yeVByZXNzdXJlTXVsdGlwbGllcik6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9K
SVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBq
aXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAg
ICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAg
ICAgICAgKE9wdGlvbnMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplT3B0aW9u
cyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIChPcHRpb25zKToKKyAg
ICAgICAgKiB3dGYvU2ltcGxlU3RhdHMuaDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAg
ICAoU2ltcGxlU3RhdHMpOgorICAgICAgICAoV1RGOjpTaW1wbGVTdGF0czo6U2ltcGxlU3RhdHMp
OgorICAgICAgICAoV1RGOjpTaW1wbGVTdGF0czo6YWRkKToKKyAgICAgICAgKFdURjo6U2ltcGxl
U3RhdHM6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6OlNpbXBsZVN0YXRzOjpjb3VudCk6Cisg
ICAgICAgIChXVEY6OlNpbXBsZVN0YXRzOjpzdW0pOgorICAgICAgICAoV1RGOjpTaW1wbGVTdGF0
czo6c3VtT2ZTcXVhcmVzKToKKyAgICAgICAgKFdURjo6U2ltcGxlU3RhdHM6Om1lYW4pOgorICAg
ICAgICAoV1RGOjpTaW1wbGVTdGF0czo6dmFyaWFuY2UpOgorICAgICAgICAoV1RGOjpTaW1wbGVT
dGF0czo6c3RhbmRhcmREZXZpYXRpb24pOgorCiAyMDEyLTAzLTA0ICBHYXZpbiBCYXJyYWNsb3Vn
aCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZp
eC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDk2NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw5IEBACiAJCTBGNDY4MEQ1MTRC
QkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyog
SG9zdENhbGxSZXR1cm5WYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNTVGMEY0MTREMTA2MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTVGMEYx
MTREMTA2MzYwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCAqLzsgfTsKIAkJMEY1NUYwRjUxNEQx
MDYzQzAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTVGMEYyMTREMTA2MzYwMEFDNzY0OSAvKiBBYnN0cmFjdFBD
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY1
NkExRDMxNTAwMEYzNTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTZBMUQxMTUwMDBGMzEwMDI5OTJC
MSAvKiBFeGVjdXRpb25Db3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY1NkExRDUxNTAwMUNGNDAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNv
dW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY1NkExRDQxNTAwMUNGMjAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuY3BwICovOyB9Owor
CQkwRjU2QTFENzE1MDAyOEJCMDAyOTkyQjEgLyogU2ltcGxlU3RhdHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTZBMUQ2MTUwMDI4QjkwMDI5OTJC
MSAvKiBTaW1wbGVTdGF0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNUYwOENGMTQ2Qzc2MzMwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjIwMTc0MTQz
RkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3NTE0M0ZDRDM3MDA2OEI3N0MgLyogREZHT3BlcmFu
ZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIw
MTcxMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NzQsNiArOTc3LDkgQEAKIAkJMEY0Njgw
RDExNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSG9zdENhbGxSZXR1cm5WYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjU1RjBGMTE0RDEwNjM2MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBYnN0cmFjdFBDLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NUYwRjIxNEQxMDYzNjAwQUM3NjQ5IC8q
IEFic3RyYWN0UEMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RQ
Qy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU2QTFEMTE1MDAwRjMxMDAyOTky
QjEgLyogRXhlY3V0aW9uQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFeGVjdXRpb25Db3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTZB
MUQ0MTUwMDFDRjIwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGlvbkNvdW50ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjU2QTFENjE1MDAyOEI5MDAyOTkyQjEgLyogU2ltcGxlU3Rh
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlU3RhdHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RjA4Q0MxNDZCRTYwMjAwMDQ3MkE5IC8qIERG
R0J5dGVDb2RlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQnl0
ZUNvZGVDYWNoZS5oOyBwYXRoID0gZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5jb25kaXRp
b25hbEZpbmFsaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE2RDE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdFN0YXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMTQsNiAr
MjMyMCw3IEBACiAJCQkJQTdDNDBDMDgxMzBCMDU3RDAwRDAwMkExIC8qIFNlbnRpbmVsTGlua2Vk
TGlzdC5oICovLAogCQkJCTc2RkI5RjEwMTJFODUxOTYwMDUxQTJFQiAvKiBTSEExLmNwcCAqLywK
IAkJCQk3NkZCOUYwRTEyRTg1MTg2MDA1MUEyRUIgLyogU0hBMS5oICovLAorCQkJCTBGNTZBMUQ2
MTUwMDI4QjkwMDI5OTJCMSAvKiBTaW1wbGVTdGF0cy5oICovLAogCQkJCUE3QzQwQzA5MTMwQjA1
N0QwMEQwMDJBMSAvKiBTaW5nbHlMaW5rZWRMaXN0LmggKi8sCiAJCQkJMEJGMjhBMjgxMUEzM0RD
MzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovLAogCQkJCTBGMkU1QkY1MTQ2MzU3RDIwMDNF
QjJFQiAvKiBTcGVjdHJ1bS5oICovLApAQCAtMjc4OCw2ICsyNzk1LDggQEAKIAkJOTY5QTA3OEYw
RUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQkwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9u
Q291bnRlci5jcHAgKi8sCisJCQkJMEY1NkExRDExNTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlv
bkNvdW50ZXIuaCAqLywKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5
IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkwRkI1NDY3ODE0RjVD
NDY4MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovLApAQCAtMzQwOSw2
ICszNDE4LDggQEAKIAkJCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2OTAxNEZBREE3QjAw
MkMyOTg5IC8qIFJlZkNvdW50ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNzc2QkYx
NEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjU2QTFEMzE1MDAwRjM1MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEY1NkExRDcxNTAwMjhCQjAwMjk5MkIxIC8qIFNpbXBsZVN0YXRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTQwMTgsNiArNDAyOSw3IEBACiAJCQkJMEZGRkM5NUYxNEVGOTBC
QjAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMyOTg5
IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEY1NkExRDUxNTAwMUNGNDAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NzMsNyArMjQ3MywzOCBAQCB2b2lk
IENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMoKQogfQogI2VuZGlmCiAKLSNpZm5kZWYgTkRF
QlVHCitzaXplX3QgQ29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKQoreworICAg
IC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgZnJvbSBDb2RlQmxvY2s6OkNvZGVCbG9jayBiZWZvcmUg
ZWl0aGVyIG1fZ2xvYmFsRGF0YSBvciB0aGUKKyAgICAvLyBpbnN0cnVjdGlvbnMgaGF2ZSBiZWVu
IGluaXRpYWxpemVkLiBJdCdzIE9LIHRvIHJldHVybiAwIGJlY2F1c2Ugd2hhdCB3aWxsIHJlYWxs
eQorICAgIC8vIG1hdHRlciBpcyB0aGUgcmVjb21wdXRhdGlvbiBvZiB0aGlzIHZhbHVlIHdoZW4g
dGhlIHNsb3cgcGF0aCBpcyB0cmlnZ2VyZWQuCisgICAgaWYgKCFtX2dsb2JhbERhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIGlmICghbV9nbG9iYWxEYXRhLT5tYWNoaW5lQ29kZUJ5
dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQpCisgICAgICAgIHJldHVybiAwOyAvLyBJ
dCdzIGFzIGdvb2Qgb2YgYSBwcmVkaWN0aW9uIGFzIHdlJ2xsIGdldC4KKyAgICAKKyAgICAvLyBC
ZSBjb25zZXJ2YXRpdmU6IHJldHVybiBhIHNpemUgdGhhdCB3aWxsIGJlIGFuIG92ZXJlc3RpbWF0
aW9uIDg0JSBvZiB0aGUgdGltZS4KKyAgICBkb3VibGUgbXVsdGlwbGllciA9IG1fZ2xvYmFsRGF0
YS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULm1lYW4oKSAr
CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZv
ckJhc2VsaW5lSklULnN0YW5kYXJkRGV2aWF0aW9uKCk7CisgICAgCisgICAgLy8gQmUgcGFyYW5v
aWQ6IHNpbGVudGx5IHJlamVjdCBib2d1cyBtdWx0aXBpZXJzLiBTaWxlbnRseSBkb2luZyB0aGUg
Indyb25nIiB0aGluZworICAgIC8vIGhlcmUgaXMgT0ssIHNpbmNlIHRoaXMgd2hvbGUgbWV0aG9k
IGlzIGp1c3QgYSBoZXVyaXN0aWMuCisgICAgaWYgKG11bHRpcGxpZXIgPCAwIHx8IG11bHRpcGxp
ZXIgPiAxMDAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBkb3VibGUgZG91YmxlUmVz
dWx0ID0gbXVsdGlwbGllciAqIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsKKyAgICAKKyAgICAvLyBC
ZSBldmVuIG1vcmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCB2YWx1ZXMgdGhhdCB3b24ndCBm
aXQgaW50byBhIHNpemVfdC4gSWYKKyAgICAvLyB0aGUgZnVuY3Rpb24gaXMgc28gaHVnZSB0aGF0
IHdlIGNhbid0IGV2ZW4gZml0IGl0IGludG8gdmlydHVhbCBtZW1vcnkgdGhlbiB3ZQorICAgIC8v
IHNob3VsZCBwcm9iYWJseSBoYXZlIHNvbWUgb3RoZXIgZ3VhcmRzIGluIHBsYWNlIHRvIHByZXZl
bnQgdXMgZnJvbSBldmVuIGdldHRpbmcKKyAgICAvLyB0byB0aGlzIHBvaW50LgorICAgIGlmIChk
b3VibGVSZXN1bHQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90Pihkb3VibGVS
ZXN1bHQpOworfQorCiBib29sIENvZGVCbG9jazo6dXNlc09wY29kZShPcGNvZGVJRCBvcGNvZGVJ
RCkKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBnbG9iYWxEYXRhKCktPmludGVy
cHJldGVyOwpAQCAtMjQ5OCw2ICsyNTI5LDUgQEAgYm9vbCBDb2RlQmxvY2s6OnVzZXNPcGNvZGUo
T3Bjb2RlSUQgb3BjbwogICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDEwOTY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1
ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkV2
YWxDb2RlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAi
RXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUgIkdsb2JhbFJlc29sdmVJbmZvLmgiCiAj
aW5jbHVkZSAiSGFuZGxlckluZm8uaCIKQEAgLTM0NCw2ICszNDUsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkg
eyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgY29uc3QgUmVmQ291bnRlZEFycmF5
PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlv
bnM7IH0KICAgICAgICAgCisgICAgICAgIHNpemVfdCBwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUo
KTsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgdXNlc09wY29kZShPcGNvZGVJRCk7CiAKICAgICAg
ICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNp
emUoKTsgfQpAQCAtODMyLDI0ICs4MzUsMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8v
IEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiBKSVR0aW5nIGtpY2tzIGluLCBpbiBhIG1p
eGVkIG1vZGUKICAgICAgICAgLy8gZXhlY3V0aW9uIHdvcmxkLgogICAgICAgICAKKyAgICAgICAg
Ym9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRT
ZXQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZvaWQgZG9udEpJVEFueXRp
bWVTb29uKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0g
T3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udEpJVEFueXRpbWVTb29uOworICAg
ICAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKQogICAgICAgICB7
Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSBPcHRpb25zOjpleGVjdXRpb25D
b3VudGVyVmFsdWVGb3JKSVRBZnRlcldhcm1VcDsKKyAgICAgICAgICAgIG1fbGxpbnRFeGVjdXRl
Q291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJt
VXAsIHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGppdFNvb24oKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSBPcHRpb25zOjpl
eGVjdXRpb25Db3VudGVyVmFsdWVGb3JKSVRTb29uOworICAgICAgICAgICAgbV9sbGludEV4ZWN1
dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29uLCB0
aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaW50MzJfdCBsbGludEV4ZWN1dGVD
b3VudGVyKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVj
dXRlQ291bnRlcjsKKyAgICAgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIubV9j
b3VudGVyOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBGdW5jdGlvbnMgZm9yIGNv
bnRyb2xsaW5nIHdoZW4gdGllcmVkIGNvbXBpbGF0aW9uIGtpY2tzIGluLiBUaGlzCkBAIC04ODgs
MzEgKzg5Niw0MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGludDMyX3Qg
Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBPcHRpb25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVy
V2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CisgICAgICAgICAgICByZXR1
cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCA8PCByZW9wdGltaXph
dGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpbnQzMl90
IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXpl
QWZ0ZXJMb25nV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CisgICAgICAg
ICAgICByZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAg
PDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaW50MzJfdCogYWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gJm1faml0RXhlY3V0ZUNvdW50ZXI7CisgICAgICAgICAgICByZXR1
cm4gJm1faml0RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVyOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKTsgfQor
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSArIE9C
SkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX2NvdW50ZXIpOyB9CisgICAgICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSArIE9C
SkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX2FjdGl2ZVRocmVzaG9sZCk7IH0KKyAg
ICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlvblRvdGFsQ291bnQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX3RvdGFsQ291bnQpOyB9CiAKLSAg
ICAgICAgaW50MzJfdCBqaXRFeGVjdXRlQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1faml0RXhl
Y3V0ZUNvdW50ZXI7IH0KKyAgICAgICAgaW50MzJfdCBqaXRFeGVjdXRlQ291bnRlcigpIGNvbnN0
IHsgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVyOyB9CiAgICAgICAgIAogICAg
ICAgICB1bnNpZ25lZCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSBjb25zdCB7IHJldHVybiBt
X29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsgfQogICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sg
aWYgdGhlIG9wdGltaXphdGlvbiB0aHJlc2hvbGQgaGFzIGJlZW4gcmVhY2hlZCwgYW5kIGlmIG5v
dCwKKyAgICAgICAgLy8gYWRqdXN0IHRoZSBoZXVyaXN0aWNzIGFjY29yZGluZ2x5LiBSZXR1cm5z
IHRydWUgaWYgdGhlIHRocmVzaG9sZCBoYXMKKyAgICAgICAgLy8gYmVlbiByZWFjaGVkLgorICAg
ICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9s
ZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIENh
bGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlLiBU
aGlzIGlzCiAgICAgICAgIC8vIHJhcmVseSB3aXNlLCBzaW5jZSBvcHRpbWl6YXRpb24gdHJpZ2dl
cnMgYXJlIHR5cGljYWxseSBtb3JlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1dGlu
ZyBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyID0gT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbjsKKyAgICAgICAgICAg
IG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVudCBvcHRpbWl6YXRpb24g
ZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdApAQCAtOTIyLDcgKzk0MCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAvLyB0aGUgZnV0dXJlIGFzIHdlbGwuCiAgICAgICAgIHZvaWQg
ZG9udE9wdGltaXplQW55dGltZVNvb24oKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2ppdEV4
ZWN1dGVDb3VudGVyID0gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9wdGlt
aXplQW55dGltZVNvb247CisgICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLmRlZmVySW5k
ZWZpbml0ZWx5KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0
byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8gaXRzIHN0YXJ0aW5nIHN0YXRlLApAQCAtOTMz
LDE0ICs5NTEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGNvdW50ZXIgdGhhdCB0
aGlzIGNvcnJlc3BvbmRzIHRvIGlzIGFsc28gYXZhaWxhYmxlIGRpcmVjdGx5LgogICAgICAgICB2
b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2ppdEV4
ZWN1dGVDb3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpOworICAg
ICAgICAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoY291bnRlclZhbHVl
Rm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIGFuIG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZp
cmUgb25seSBhZnRlcgogICAgICAgICAvLyBhIGxvdCBvZiB3YXJtLXVwLgogICAgICAgICB2b2lk
IG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9qaXRF
eGVjdXRlQ291bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCk7
CisgICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChjb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpLCB0aGlzKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGNhdXNlIGFuIG9wdGltaXphdGlvbiB0cmln
Z2VyIHRvIGZpcmUgc29vbiwgYnV0CkBAIC05NjMsNyArOTgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXpl
U29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIgPSBPcHRp
b25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24gPDwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIoKTsKKyAgICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplU29vbiA8PCByZW9wdGltaXph
dGlvblJldHJ5Q291bnRlcigpLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gVGhlIHNwZWN1bGF0aXZlIEpJVCB0cmFja3MgaXRzIHN1Y2Nlc3MgcmF0ZSwgc28gdGhhdCB3
ZSBjYW4KQEAgLTEyMDQsMTMgKzEyMjIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
T3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAgICAgCi0gICAgICAgIGludDMy
X3QgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICBFeGVjdXRpb25Db3VudGVyIG1fbGxp
bnRFeGVjdXRlQ291bnRlcjsKICAgICAgICAgCi0gICAgICAgIGludDMyX3QgbV9qaXRFeGVjdXRl
Q291bnRlcjsKKyAgICAgICAgRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVyOwor
ICAgICAgICBpbnQzMl90IG1fdG90YWxKSVRFeGVjdXRpb25zOwogICAgICAgICB1aW50MzJfdCBt
X3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7CiAgICAgICAgIHVpbnQzMl90IG1fc3BlY3VsYXRp
dmVGYWlsQ291bnRlcjsKLSAgICAgICAgdWludDhfdCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRl
cjsKLSAgICAgICAgdWludDhfdCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOworICAgICAg
ICB1aW50MTZfdCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsKKyAgICAgICAgdWludDE2X3Qg
bV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdCBS
YXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRp
b25Db3VudGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworRXhlY3V0aW9uQ291bnRlcjo6RXhlY3V0aW9uQ291bnRl
cigpCit7CisgICAgcmVzZXQoKTsKK30KKworYm9vbCBFeGVjdXRpb25Db3VudGVyOjpjaGVja0lm
VGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAo
aGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAKKyAgICBpZiAoc2V0VGhyZXNob2xkKGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFeGVjdXRpb25Db3VudGVyOjpz
ZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayogY29kZUJsb2NrKQor
eworICAgIHJlc2V0KCk7CisgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7CisgICAg
c2V0VGhyZXNob2xkKGNvZGVCbG9jayk7Cit9CisKK3ZvaWQgRXhlY3V0aW9uQ291bnRlcjo6ZGVm
ZXJJbmRlZmluaXRlbHkoKQoreworICAgIG1fdG90YWxDb3VudCA9IDA7CisgICAgbV9hY3RpdmVU
aHJlc2hvbGQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKTsKKyAgICBtX2Nv
dW50ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKTsKK30KKworZG91Ymxl
IEV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKGludDMyX3QgdmFs
dWUsIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGRvdWJsZSBtdWx0aXBsaWVyID0KKyAg
ICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1cmVNdWx0aXBsaWVyKAorICAg
ICAgICAgICAgY29kZUJsb2NrLT5wcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKSk7CisgICAgQVNT
RVJUKG11bHRpcGxpZXIgPj0gMS4wKTsKKyAgICByZXR1cm4gbXVsdGlwbGllciAqIHZhbHVlOwor
fQorCitpbnQzMl90IEV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNz
QW5kQ29udmVydFRvSW50KAorICAgIGludDMyX3QgdmFsdWUsIENvZGVCbG9jayogY29kZUJsb2Nr
KQoreworICAgIGRvdWJsZSBkb3VibGVSZXN1bHQgPSBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGlj
cyh2YWx1ZSwgY29kZUJsb2NrKTsKKyAgICAKKyAgICBBU1NFUlQoZG91YmxlUmVzdWx0ID49IDAp
OworICAgIAorICAgIGlmIChkb3VibGVSZXN1bHQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMy
X3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46
Om1heCgpOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pihkb3VibGVSZXN1
bHQpOworfQorCitib29sIEV4ZWN1dGlvbkNvdW50ZXI6Omhhc0Nyb3NzZWRUaHJlc2hvbGQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spIGNvbnN0Cit7CisgICAgLy8gVGhpcyBjaGVja3MgaWYgdGhlIGN1
cnJlbnQgY291bnQgcm91bmRlZCB1cCB0byB0aGUgdGhyZXNob2xkIHdlIHdlcmUgdGFyZ2V0aW5n
LgorICAgIC8vIEZvciBleGFtcGxlLCBpZiB3ZSBhcmUgdXNpbmcgaGFsZiBvZiBhdmFpbGFibGUg
ZXhlY3V0YWJsZSBtZW1vcnkgYW5kIGhhdmUKKyAgICAvLyBtX2FjdGl2ZVRocmVzaG9sZCA9IDEw
MDAsIGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKG1fYWN0aXZlVGhyZXNob2xkKSB3aWxsIGJl
CisgICAgLy8gMjAwMCwgYnV0IHdlIHdpbGwgcHJldGVuZCBhcyBpZiB0aGUgdGhyZXNob2xkIHdh
cyBjcm9zc2VkIGlmIHdlIHJlYWNoIDIwMDAgLQorICAgIC8vIDEwMDAgLyAyLCBvciAxNTAwLiBU
aGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB3ZSB3YW50IHRvIGF2b2lkIHRocmFzaGluZy4gSWYK
KyAgICAvLyB0aGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlLCB0aGVuIHRoZSBKSVQncyB0aHJlc2hv
bGQgZm9yIHdoZW4gaXQgd2lsbCBhZ2FpbiBjYWxsCisgICAgLy8gaW50byB0aGUgc2xvdyBwYXRo
ICh3aGljaCB3aWxsIGNhbGwgdGhpcyBtZXRob2QgYSBzZWNvbmQgdGltZSkgd2lsbCBiZSBzZXQK
KyAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY3VycmVudCBj
b3VudCBhbmQgdGhlIHRhcmdldCBjb3VudAorICAgIC8vIGFjY29yZGluZyB0byAqY3VycmVudCog
bWVtb3J5IHVzYWdlLiBCdXQgYnkgdGhlIHRpbWUgd2UgY2FsbCBpbnRvIHRoaXMgYWdhaW4sIHdl
CisgICAgLy8gbWF5IGhhdmUgSklUJ2VkIG1vcmUgY29kZSwgYW5kIHNvIHRoZSB0YXJnZXQgY291
bnQgd2lsbCBpbmNyZWFzZSBzbGlnaHRseS4gVGhpcworICAgIC8vIG1heSBsZWFkIHRvIGEgcmVw
ZWF0aW5nIHBhdHRlcm4gd2hlcmUgdGhlIHRhcmdldCBjb3VudCBpcyBzbGlnaHRseSBpbmNyZW1l
bnRlZCwKKyAgICAvLyB0aGUgSklUIGltbWVkaWF0ZWx5IG1hdGNoZXMgdGhhdCBpbmNyZWFzZSwg
Y2FsbHMgaW50byB0aGUgc2xvdyBwYXRoIGFnYWluLCBhbmQKKyAgICAvLyBhZ2FpbiB0aGUgdGFy
Z2V0IGNvdW50IGlzIHNsaWdodGx5IGluY3JlbWVudGVkLiBJbnN0ZWFkIG9mIGhhdmluZyB0aGlz
IHZpY2lvdXMKKyAgICAvLyBjeWNsZSwgd2UgZGVjbGFyZSB2aWN0b3J5IGEgYml0IGVhcmx5IGlm
IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQKKyAgICAvLyB0b3RhbCBhbmQgb3Vy
IHRhcmdldCBhY2NvcmRpbmcgdG8gbWVtb3J5IGhldXJpc3RpY3MgaXMgc21hbGwuIE91ciBkZWZp
bml0aW9uIG9mCisgICAgLy8gc21hbGwgaXMgYXJiaXRyYXJpbHkgcGlja2VkIHRvIGJlIGhhbGYg
b2YgdGhlIG9yaWdpbmFsIHRocmVzaG9sZCAoaS5lLgorICAgIC8vIG1fYWN0aXZlVGhyZXNob2xk
KS4KKyAgICAKKyAgICBkb3VibGUgbW9kaWZpZWRUaHJlc2hvbGQgPSBhcHBseU1lbW9yeVVzYWdl
SGV1cmlzdGljcyhtX2FjdGl2ZVRocmVzaG9sZCwgY29kZUJsb2NrKTsKKyAgICAKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyID49CisgICAg
ICAgICBtb2RpZmllZFRocmVzaG9sZCAtIHN0YXRpY19jYXN0PGRvdWJsZT4obV9hY3RpdmVUaHJl
c2hvbGQpIC8gMjsKK30KKworYm9vbCBFeGVjdXRpb25Db3VudGVyOjpzZXRUaHJlc2hvbGQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgaWYgKG1fYWN0aXZlVGhyZXNob2xkID09IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSB7CisgICAgICAgIGRlZmVySW5kZWZpbml0
ZWx5KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VS
VCghaGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKTsKKyAgICAgICAgCisgICAgLy8gQ29t
cHV0ZSB0aGUgdHJ1ZSB0b3RhbCBjb3VudC4KKyAgICBkb3VibGUgdHJ1ZVRvdGFsQ291bnQgPSBz
dGF0aWNfY2FzdDxkb3VibGU+KG1fdG90YWxDb3VudCkgKyBtX2NvdW50ZXI7CisgICAgICAgIAor
ICAgIC8vIENvcnJlY3QgdGhlIHRocmVzaG9sZCBmb3IgY3VycmVudCBtZW1vcnkgdXNhZ2UuCisg
ICAgZG91YmxlIHRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKG1fYWN0aXZl
VGhyZXNob2xkLCBjb2RlQmxvY2spOworICAgICAgICAKKyAgICAvLyBUaHJlc2hvbGQgbXVzdCBi
ZSBub24tbmVnYXRpdmUgYW5kIG5vdCBOYU4uCisgICAgQVNTRVJUKHRocmVzaG9sZCA+PSAwKTsK
KyAgICAgICAgCisgICAgLy8gQWRqdXN0IHRoZSB0aHJlc2hvbGQgYWNjb3JkaW5nIHRvIHRoZSBu
dW1iZXIgb2YgZXhlY3V0aW9ucyB3ZSBoYXZlIGFscmVhZHkKKyAgICAvLyBzZWVuLiBUaGlzIHNo
b3VsZG4ndCBnbyBuZWdhdGl2ZSwgYnV0IGl0IG1pZ2h0LCBiZWNhdXNlIG9mIHJvdW5kLW9mZiBl
cnJvcnMuCisgICAgdGhyZXNob2xkIC09IHRydWVUb3RhbENvdW50OworICAgICAgICAKKyAgICBp
ZiAodGhyZXNob2xkIDw9IDApIHsKKyAgICAgICAgbV9jb3VudGVyID0gMDsKKyAgICAgICAgbV90
b3RhbENvdW50ID0gdHJ1ZVRvdGFsQ291bnQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmICh0aHJlc2hvbGQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgo
KSkKKyAgICAgICAgdGhyZXNob2xkID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4
KCk7CisgICAgICAgIAorICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10aHJl
c2hvbGQpOworICAgICAgICAKKyAgICBtX3RvdGFsQ291bnQgPSB0cnVlVG90YWxDb3VudCArIHRo
cmVzaG9sZDsKKyAgICAgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEV4ZWN1dGlv
bkNvdW50ZXI6OnJlc2V0KCkKK3sKKyAgICBtX2NvdW50ZXIgPSAwOworICAgIG1fdG90YWxDb3Vu
dCA9IDA7CisgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0
aW9uQ291bnRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEV4ZWN1
dGlvbkNvdW50ZXJfaAorI2RlZmluZSBFeGVjdXRpb25Db3VudGVyX2gKKworI2luY2x1ZGUgPHd0
Zi9TaW1wbGVTdGF0cy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOwor
CitjbGFzcyBFeGVjdXRpb25Db3VudGVyIHsKK3B1YmxpYzoKKyAgICBFeGVjdXRpb25Db3VudGVy
KCk7CisgICAgYm9vbCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqKTsK
KyAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7
CisgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOworICAgIHN0YXRpYyBkb3VibGUgYXBwbHlN
ZW1vcnlVc2FnZUhldXJpc3RpY3MoaW50MzJfdCB2YWx1ZSwgQ29kZUJsb2NrKik7CisgICAgc3Rh
dGljIGludDMyX3QgYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3NBbmRDb252ZXJ0VG9JbnQoaW50
MzJfdCB2YWx1ZSwgQ29kZUJsb2NrKik7CisKKyAgICBzdGF0aWMgaW50MzJfdCBmb3JtYXR0ZWRU
b3RhbENvdW50KGZsb2F0IHZhbHVlKQorICAgIHsKKyAgICAgICAgdW5pb24geworICAgICAgICAg
ICAgaW50MzJfdCBpOworICAgICAgICAgICAgZmxvYXQgZjsKKyAgICAgICAgfSB1OworICAgICAg
ICB1LmYgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHUuaTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZChDb2RlQmxvY2sqKSBjb25zdDsKKyAgICBi
b29sIHNldFRocmVzaG9sZChDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHJlc2V0KCk7CisKK3B1Ymxp
YzoKKworICAgIC8vIE5CLiBUaGVzZSBhcmUgaW50ZW50aW9uYWxseSBwdWJsaWMgYmVjYXVzZSBp
dCB3aWxsIGJlIG1vZGlmaWVkIGZyb20gbWFjaGluZSBjb2RlLgorICAgIAorICAgIC8vIFRoaXMg
Y291bnRlciBpcyBpbmNyZW1lbnRlZCBieSB0aGUgSklUIG9yIExMSW50LiBJdCBzdGFydHMgb3V0
IG5lZ2F0aXZlIGFuZCBpcworICAgIC8vIGNvdW50ZWQgdXAgdW50aWwgaXQgYmVjb21lcyBub24t
bmVnYXRpdmUuIEF0IHRoZSBzdGFydCBvZiBhIGNvdW50aW5nIHBlcmlvZCwKKyAgICAvLyB0aGUg
dGhyZXNob2xkIHdlIHdpc2ggdG8gcmVhY2ggaXMgbV90b3RhbENvdW50ICsgbV9jb3VudGVyLCBp
biB0aGUgc2Vuc2UgdGhhdAorICAgIC8vIHdlIHdpbGwgYWRkIFggdG8gbV90b3RhbENvdW50IGFu
ZCBzdWJ0cmFjdCBYIGZyb20gbV9jb3VudGVyLgorICAgIGludDMyX3QgbV9jb3VudGVyOworCisg
ICAgLy8gQ291bnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgZXhlY3V0aW9ucyB3ZSBoYXZlIHNlZW4g
cGx1cyB0aGUgb25lcyB3ZSd2ZSBzZXQgYQorICAgIC8vIHRocmVzaG9sZCBmb3IgaW4gbV9jb3Vu
dGVyLiBCZWNhdXNlIG1fY291bnRlcidzIHRocmVzaG9sZCBpcyBuZWdhdGl2ZSwgdGhlCisgICAg
Ly8gdG90YWwgbnVtYmVyIG9mIGFjdHVhbCBleGVjdXRpb25zIGNhbiBhbHdheXMgYmUgY29tcHV0
ZWQgYXMgbV90b3RhbENvdW50ICsKKyAgICAvLyBtX2NvdW50ZXIuCisgICAgZmxvYXQgbV90b3Rh
bENvdW50OworCisgICAgLy8gVGhpcyBpcyB0aGUgdGhyZXNob2xkIHdlIHdlcmUgb3JpZ2luYWxs
eSB0YXJnZXR0aW5nLCB3aXRob3V0IGFueSBjb3JyZWN0aW9uIGZvcgorICAgIC8vIHRoZSBtZW1v
cnkgdXNhZ2UgaGV1cmlzdGljcy4KKyAgICBpbnQzMl90IG1fYWN0aXZlVGhyZXNob2xkOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFeGVjdXRpb25Db3VudGVyX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXIzMl82NC5jcHAJKHJldmlzaW9uIDEwOTY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODEs
MTMgKzU4MSwyMSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAg
ICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGxvd0ZhaWxSYXRlID0gbV9qaXQuYnJhbmNoMzIoQXNz
ZW1ibHlIZWxwZXJzOjpCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdU
MSk7CiAgICAgCiAgICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgotICAgIG1f
aml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIo
KSkpOworICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMigwKSwgQXNzZW1i
bHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklU
RXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJ
bW0zMigwKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURXhlY3V0aW9uQWN0aXZlVGhyZXNob2xkKCkpKTsKICAgICBBc3NlbWJs
eUhlbHBlcnM6Okp1bXAgZG9uZUFkanVzdGluZyA9IG1faml0Lmp1bXAoKTsKICAgICAKICAgICBm
ZXdGYWlscy5saW5rKCZtX2ppdCk7CiAgICAgbG93RmFpbFJhdGUubGluaygmbV9qaXQpOwogICAg
IAotICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihtX2ppdC5iYXNlbGlu
ZUNvZGVCbG9jaygpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwg
QXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNl
dE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIC8vIEFkanVzdCB0aGUgZXhlY3V0aW9uIGNv
dW50ZXIgc3VjaCB0aGF0IHRoZSB0YXJnZXQgaXMgdG8gb25seSBvcHRpbWl6ZSBhZnRlciBhIHdo
aWxlLgorICAgIGludDMyX3QgdGFyZ2V0VmFsdWUgPQorICAgICAgICBFeGVjdXRpb25Db3VudGVy
OjphcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljc0FuZENvbnZlcnRUb0ludCgKKyAgICAgICAgICAg
IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwKCksCisgICAgICAgICAgICBtX2ppdC5iYXNlbGluZUNvZGVCbG9jaygpKTsKKyAg
ICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoLXRhcmdldFZhbHVlKSwgQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
SklURXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJz
OjpJbW0zMih0YXJnZXRWYWx1ZSksIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGlvbkFjdGl2ZVRocmVzaG9sZCgpKSk7
CisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKEV4ZWN1dGlvbkNvdW50
ZXI6OmZvcm1hdHRlZFRvdGFsQ291bnQodGFyZ2V0VmFsdWUpKSwgQXNzZW1ibHlIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0aW9uVG90
YWxDb3VudCgpKSk7CiAgICAgCiAgICAgZG9uZUFkanVzdGluZy5saW5rKCZtX2ppdCk7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjY0LmNwcAkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2MCwxMyArNTYw
LDIxIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICBBc3Nl
bWJseUhlbHBlcnM6Okp1bXAgbG93RmFpbFJhdGUgPSBtX2ppdC5icmFuY2gzMihBc3NlbWJseUhl
bHBlcnM6OkJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QxKTsKICAg
ICAKICAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUuCi0gICAgbV9qaXQuc3Rv
cmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1
ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24pLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7Cisg
ICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKDApLCBBc3NlbWJseUhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRl
Q291bnRlcigpKSk7CisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKDAp
LCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQoKSkpOwogICAgIEFzc2VtYmx5SGVscGVy
czo6SnVtcCBkb25lQWRqdXN0aW5nID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIGZld0ZhaWxz
LmxpbmsoJm1faml0KTsKICAgICBsb3dGYWlsUmF0ZS5saW5rKCZtX2ppdCk7CiAgICAgCi0gICAg
bV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKG1faml0LmJhc2VsaW5lQ29kZUJs
b2NrKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCBBc3NlbWJs
eUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRF
eGVjdXRlQ291bnRlcigpKSk7CisgICAgLy8gQWRqdXN0IHRoZSBleGVjdXRpb24gY291bnRlciBz
dWNoIHRoYXQgdGhlIHRhcmdldCBpcyB0byBvbmx5IG9wdGltaXplIGFmdGVyIGEgd2hpbGUuCisg
ICAgaW50MzJfdCB0YXJnZXRWYWx1ZSA9CisgICAgICAgIEV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5
TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KAorICAgICAgICAgICAgbV9qaXQu
YmFzZWxpbmVDb2RlQmxvY2soKS0+Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJt
VXAoKSwKKyAgICAgICAgICAgIG1faml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpOworICAgIG1faml0
LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMigtdGFyZ2V0VmFsdWUpLCBBc3NlbWJseUhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVj
dXRlQ291bnRlcigpKSk7CisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMy
KHRhcmdldFZhbHVlKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0aW9uQWN0aXZlVGhyZXNob2xkKCkpKTsKKyAgICBt
X2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoRXhlY3V0aW9uQ291bnRlcjo6Zm9y
bWF0dGVkVG90YWxDb3VudCh0YXJnZXRWYWx1ZSkpLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRpb25Ub3RhbENvdW50
KCkpKTsKICAgICAKICAgICBkb25lQWRqdXN0aW5nLmxpbmsoJm1faml0KTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cAkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDE3IEBACiAKICNp
ZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQogI2luY2x1ZGUgIkNvZGVQcm9m
aWxpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9NZXRhQWxs
b2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9WTVRhZ3MuaD4KICNlbmRpZgogCisvLyBVbmNvbW1lbnQgdG8gY3JlYXRlIGFuIGFydGlmaWNp
YWwgZXhlY3V0YWJsZSBtZW1vcnkgdXNhZ2UgbGltaXQuIFRoaXMgbGltaXQKKy8vIGlzIGltcGVy
ZmVjdCBhbmQgaXMgcHJpbWFyaWx5IHVzZWZ1bCBmb3IgdGVzdGluZyB0aGUgVk0ncyBhYmlsaXR5
IHRvIGhhbmRsZQorLy8gb3V0LW9mLWV4ZWN1dGFibGUtbWVtb3J5IHNpdHVhdGlvbnMuCisvLyAj
ZGVmaW5lIEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUIDEwMDAwMDAKKwogI2lmIEVOQUJMRShBU1NF
TUJMRVIpCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC02NSw2ICs3MSwxMSBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIAogICAgICAgICBudW1QYWdlcyA9IG5ld051bVBhZ2VzOwogICAgICAgICAK
KyNpZmRlZiBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVAorICAgICAgICBpZiAoYnl0ZXNBbGxvY2F0
ZWQoKSA+PSBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVCkKKyAgICAgICAgICAgIHJldHVybiAwOwor
I2VuZGlmCisgICAgICAgIAogICAgICAgICBQYWdlUmVzZXJ2YXRpb24gcmVzZXJ2YXRpb24gPSBQ
YWdlUmVzZXJ2YXRpb246OnJlc2VydmUobnVtUGFnZXMgKiBwYWdlU2l6ZSgpLCBPU0FsbG9jYXRv
cjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CiAgICAg
ICAgIGlmICghcmVzZXJ2YXRpb24pCiAgICAgICAgICAgICBDUkFTSCgpOwpAQCAtMTA5LDcgKzEy
MCwyNSBAQCBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zCiAKIGJvb2wg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCiB7CisjaWZkZWYgRVhF
Q1VUQUJMRV9NRU1PUllfTElNSVQKKyAgICByZXR1cm4gYWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRl
ZCgpID4gRVhFQ1VUQUJMRV9NRU1PUllfTElNSVQgLyAyOworI2Vsc2UKICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKK30KKworZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNz
dXJlTXVsdGlwbGllcihzaXplX3QgYWRkZWRNZW1vcnlVc2FnZSkKK3sKKyNpZmRlZiBFWEVDVVRB
QkxFX01FTU9SWV9MSU1JVAorICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCA9IGFsbG9jYXRvci0+
Ynl0ZXNBbGxvY2F0ZWQoKSArIGFkZGVkTWVtb3J5VXNhZ2U7CisgICAgaWYgKGJ5dGVzQWxsb2Nh
dGVkID49IEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUKQorICAgICAgICBieXRlc0FsbG9jYXRlZCA9
IEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+
KEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUKSAvCisgICAgICAgIChFWEVDVVRBQkxFX01FTU9SWV9M
SU1JVCAtIGJ5dGVzQWxsb2NhdGVkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFkZGVkTWVt
b3J5VXNhZ2UpOworICAgIHJldHVybiAxLjA7CisjZW5kaWYKIH0KIAogUGFzc1JlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShKU0dsb2Jh
bERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2
ICsxMDgsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCB1bmRlck1lbW9yeVByZXNzdXJl
KCk7CiAgICAgCisgICAgc3RhdGljIGRvdWJsZSBtZW1vcnlQcmVzc3VyZU11bHRpcGxpZXIoc2l6
ZV90IGFkZGVkTWVtb3J5VXNhZ2UpOworICAgIAogI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9Q
Uk9GSUxFKQogICAgIHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlKCk7CiAjZWxzZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvckZpeGVkVk1Qb29sLmNwcAkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTUsNiArMTE1LDE3IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJN
ZW1vcnlQcmUKICAgICByZXR1cm4gc3RhdGlzdGljcy5ieXRlc0FsbG9jYXRlZCA+IHN0YXRpc3Rp
Y3MuYnl0ZXNSZXNlcnZlZCAvIDI7CiB9CiAKK2RvdWJsZSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpt
ZW1vcnlQcmVzc3VyZU11bHRpcGxpZXIoc2l6ZV90IGFkZGVkTWVtb3J5VXNhZ2UpCit7CisgICAg
TWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0aXN0aWNzID0gYWxsb2NhdG9yLT5jdXJyZW50
U3RhdGlzdGljcygpOworICAgIEFTU0VSVChzdGF0aXN0aWNzLmJ5dGVzQWxsb2NhdGVkIDw9IHN0
YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCk7CisgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkID0gc3Rh
dGlzdGljcy5ieXRlc0FsbG9jYXRlZCArIGFkZGVkTWVtb3J5VXNhZ2U7CisgICAgaWYgKGJ5dGVz
QWxsb2NhdGVkID49IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCkKKyAgICAgICAgYnl0ZXNBbGxv
Y2F0ZWQgPSBzdGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQ7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RhdGlzdGljcy5ieXRlc1Jlc2VydmVkKSAvCisgICAgICAgIChzdGF0aXN0aWNz
LmJ5dGVzUmVzZXJ2ZWQgLSBieXRlc0FsbG9jYXRlZCk7Cit9CisKIFBhc3NSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlE
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEwOTY3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE1
LDYgKzcxNSwxMCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAg
ICAgCiAgICAgQ29kZVJlZiByZXN1bHQgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAg
ICAKKyAgICBtX2dsb2JhbERhdGEtPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JC
YXNlbGluZUpJVC5hZGQoCisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUo
KSkgLworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5zaXplKCkpKTsKKyAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0UpCiAgICAgZGF0YUxv
ZygiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2Nr
LCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5lbmQoKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCShyZXZpc2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyOSwxMiArMTkyOSwxNiBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgCiAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOwogCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOworICAgIAogI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCiAgICAgZGF0YUxvZygiJXA6IEVudGVyZWQgb3B0aW1pemVfZnJvbV9sb29w
IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAl
dSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNvZGVCbG9jaywgY29kZUJsb2Nr
LT5qaXRFeGVjdXRlQ291bnRlcigpLCBjb2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyKCksIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwogI2VuZGlmCiAK
KyAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVw
bGFjZW1lbnQoKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgIGRhdGFM
b2coIkNvbnNpZGVyaW5nIGxvb3AgT1NSIGludG8gJXAoJXApIHdpdGggc3VjY2Vzcy9mYWlsICV1
LyV1LlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNvZGVCbG9jay0+
cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCktPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSk7CkBAIC0yMDMzLDYgKzIwMzcs
OSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgZGF0YUxv
ZygiRW50ZXJlZCBvcHRpbWl6ZV9mcm9tX3JldCB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJWQsIHJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gJXUsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9
ICV1XG4iLCBjb2RlQmxvY2stPmppdEV4ZWN1dGVDb3VudGVyKCksIGNvZGVCbG9jay0+cmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIoKSk7CiAjZW5kaWYKIAorICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmT3B0aW1pemF0aW9u
VGhyZXNob2xkUmVhY2hlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoY29kZUJsb2Nr
LT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKICAgICAgICAgZGF0YUxvZygiUmV0dXJuaW5nIGZyb20gb2xkIEpJVCBjYWxsIGZyYW1lIHdp
dGggb3B0aW1pemVkIHJlcGxhY2VtZW50ICVwKCVwKSwgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUi
LCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNl
bWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTA5Njc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcwLDYgKzI3MCwxMyBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoRXhlY1N0YXRl
KiBleGVjKQogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgogaW5saW5l
IGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9s
ZFJlYWNoZWQoKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIGRhdGFM
b2coIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuXG4iKTsKKyNlbmRpZgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKICAgICBDb2RlQmxvY2s6OkpJVENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVCbG9jay0+aml0Q29tcGlsZShleGVjLT5nbG9i
YWxEYXRhKCkpOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb2RlQmxvY2s6OkFs
cmVhZHlDb21waWxlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxMDk2NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIGVuZAogbWFjcm8gY2hlY2tTd2l0
Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBpZiBKSVRfRU5BQkxFRAogICAgICAgICBs
b2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICAgICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJs
b2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBdLCAuY29udGludWUKKyAgICAgICAgYmFkZGlz
IGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBFeGVjdXRpb25D
b3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICAgICAgYWN0aW9uKCkKICAgICAu
Y29udGludWU6CiAgICAgZW5kCkBAIC00MjksNyArNDI5LDcgQEAgbWFjcm8gcHJvbG9ndWUoY29k
ZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAgIGVuZAogICAgIGNvZGVCbG9ja0dldHRlcih0MSkK
ICAgICBpZiBKSVRfRU5BQkxFRAotICAgICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50
RXhlY3V0ZUNvdW50ZXJbdDFdLCAuY29udGludWUKKyAgICAgICAgYmFkZGlzIDUsIENvZGVCbG9j
azo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3Qx
XSwgLmNvbnRpbnVlCiAgICAgICAgIGNDYWxsMihvc3JTbG93UGF0aCwgY2ZyLCBQQykKICAgICAg
ICAgbW92ZSB0MSwgY2ZyCiAgICAgICAgIGJ0cHogdDAsIC5yZWNvdmVyCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTA5Njc0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4K
ICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lO
RykKQEAgLTIwMSw2ICsyMDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU21hbGxTdHJp
bmdzIHNtYWxsU3RyaW5nczsKICAgICAgICAgTnVtZXJpY1N0cmluZ3MgbnVtZXJpY1N0cmluZ3M7
CiAgICAgICAgIERhdGVJbnN0YW5jZUNhY2hlIGRhdGVJbnN0YW5jZUNhY2hlOworICAgICAgICBX
VEY6OlNpbXBsZVN0YXRzIG1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGlu
ZUpJVDsKICAgICAgICAgVmVjdG9yPENvZGVCbG9jayo+IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVk
OwogICAgICAgICB2b2lkIHN0YXJ0ZWRDb21waWxpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAg
ICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CShyZXZpc2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTUgKzUyLDEyIEBAIHVuc2lnbmVkIG1heGlt
dW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGkKIAogdW5zaWduZWQgbWF4aW11bUlubGluaW5nRGVw
dGg7CiAKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9ySklUQWZ0ZXJXYXJtVXA7Ci1p
bnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRKSVRBbnl0aW1lU29vbjsKLWludDMy
X3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9ySklUU29vbjsKLQotaW50MzJfdCBleGVjdXRpb25D
b3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwOwotaW50MzJfdCBleGVjdXRpb25Db3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKLWludDMyX3QgZXhlY3V0aW9uQ291
bnRlclZhbHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb247Ci1pbnQzMl90IGV4ZWN1dGlvbkNv
dW50ZXJWYWx1ZUZvck9wdGltaXplU29vbjsKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVl
Rm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbjsKK2ludDMyX3QgdGhyZXNob2xkRm9ySklUQWZ0ZXJX
YXJtVXA7CitpbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247CisKK2ludDMyX3QgdGhyZXNob2xk
Rm9yT3B0aW1pemVBZnRlcldhcm1VcDsKK2ludDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
ckxvbmdXYXJtVXA7CitpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplU29vbjsKIAogaW50MzJf
dCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcDsKIGludDMyX3QgZXhlY3V0aW9uQ291
bnRlckluY3JlbWVudEZvclJldHVybjsKQEAgLTE0MSwxNSArMTM4LDEyIEBAIHZvaWQgaW5pdGlh
bGl6ZU9wdGlvbnMoKQogICAgIAogICAgIFNFVChtYXhpbXVtSW5saW5pbmdEZXB0aCwgNSk7CiAK
LSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9ySklUQWZ0ZXJXYXJtVXAsICAgICAtMTAw
KTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udEpJVEFueXRpbWVTb29uLCBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7Ci0gICAgU0VUKGV4ZWN1dGlvbkNv
dW50ZXJWYWx1ZUZvckpJVFNvb24sICAgICAgICAgICAgLTEwMCk7Ci0KLSAgICBTRVQoZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCwgICAgIC0xMDAwKTsKLSAgICBT
RVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAsIC01MDAw
KTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9wdGltaXplQW55dGltZVNv
b24sIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKTsKLSAgICBTRVQoZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uLCAgICAgICAgICAgIC0xMDAwKTsKLSAgICBT
RVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbiwgIDApOwor
ICAgIFNFVCh0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCwgICAgIDEwMCk7CisgICAgU0VUKHRo
cmVzaG9sZEZvckpJVFNvb24sICAgICAgICAgICAgMTAwKTsKKworICAgIFNFVCh0aHJlc2hvbGRG
b3JPcHRpbWl6ZUFmdGVyV2FybVVwLCAgICAgMTAwMCk7CisgICAgU0VUKHRocmVzaG9sZEZvck9w
dGltaXplQWZ0ZXJMb25nV2FybVVwLCA1MDAwKTsKKyAgICBTRVQodGhyZXNob2xkRm9yT3B0aW1p
emVTb29uLCAgICAgICAgICAgIDEwMDApOwogCiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJJbmNy
ZW1lbnRGb3JMb29wLCAgIDEpOwogICAgIFNFVChleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
UmV0dXJuLCAxNSk7CkBAIC0xOTUsMTEgKzE4OSw5IEBAIHZvaWQgaW5pdGlhbGl6ZU9wdGlvbnMo
KQogICAgIAogICAgIFNFVChudW1iZXJPZkdDTWFya2VycywgY3B1c1RvVXNlKTsKIAotICAgIEFT
U0VSVChleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbiA8PSBl
eGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCk7Ci0gICAgQVNT
RVJUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwIDw9IGV4
ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXApOwotICAgIEFTU0VSVChl
eGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwIDw9IGV4ZWN1dGlvbkNv
dW50ZXJWYWx1ZUZvck9wdGltaXplU29vbik7Ci0gICAgQVNTRVJUKGV4ZWN1dGlvbkNvdW50ZXJW
YWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAgPCAwKTsKLSAgICBBU1NFUlQoZXhlY3V0aW9uQ291
bnRlclZhbHVlRm9yT3B0aW1pemVTb29uIDw9IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplTmV4dEludm9jYXRpb24pOworICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcCA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKTsKKyAgICBBU1NF
UlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6
ZVNvb24pOworICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwID49IDAp
OwogICAgIAogICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIHJlb3B0aW1p
emF0aW9uIHJldHJ5IGNvdW50ZXIuIFRoaXMgaXMgc2ltcGx5CiAgICAgLy8gdGhlIGxhcmdlc3Qg
dmFsdWUgYXQgd2hpY2ggd2UgZG9uJ3Qgb3ZlcmZsb3cgdGhlIGV4ZWN1dGUgY291bnRlciwgd2hl
biB1c2luZyBpdApAQCAtMjA3LDExICsxOTksMTEgQEAgdm9pZCBpbml0aWFsaXplT3B0aW9ucygp
CiAgICAgLy8gdXAgYmVpbmcgMTgsIHNvIHRoaXMgbG9vcCBpcyBub3Qgc28gdGVycmlibGU7IGl0
IHByb2JhYmx5IHRha2VzIHVwIH4xMDAgY3ljbGVzCiAgICAgLy8gdG90YWwgb24gYSAzMi1iaXQg
cHJvY2Vzc29yLgogICAgIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4ID0gMDsKLSAgICB3
aGlsZSAoKHN0YXRpY19jYXN0PGludDY0X3Q+KGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwKSA8PCAocmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXggKyAx
KSkgPj0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6
bWluKCkpKQorICAgIHdoaWxlICgoc3RhdGljX2Nhc3Q8aW50NjRfdD4odGhyZXNob2xkRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXApIDw8IChyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCAr
IDEpKSA8PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptYXgoKSkpCiAgICAgICAgIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4Kys7CiAgICAg
Ci0gICAgQVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90PihleGVjdXRpb25Db3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJN
YXgpIDwgMCk7Ci0gICAgQVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90PihleGVjdXRpb25Db3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXJNYXgpID49IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1pbigpKSk7CisgICAgQVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJl
c2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXJNYXgpID4gMCk7CisgICAgQVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hv
bGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXJNYXgpIDw9IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1heCgpKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpPcHRpb25zCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxMDk2NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDE1ICszNywxMyBAQCBleHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ29u
c3RyCiAKIGV4dGVybiB1bnNpZ25lZCBtYXhpbXVtSW5saW5pbmdEZXB0aDsgLy8gRGVwdGggb2Yg
aW5saW5lIHN0YWNrLCBzbyAxID0gbm8gaW5saW5pbmcsIDIgPSBvbmUgbGV2ZWwsIGV0Yy4KIAot
ZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9ySklUQWZ0ZXJXYXJtVXA7Ci1l
eHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250SklUQW55dGltZVNvb247
Ci1leHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JKSVRTb29uOwotCi1leHRl
cm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwOwot
ZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdX
YXJtVXA7Ci1leHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1p
emVBbnl0aW1lU29vbjsKLWV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9w
dGltaXplU29vbjsKLWV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplTmV4dEludm9jYXRpb247CitleHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JKSVRBZnRlcldh
cm1VcDsKK2V4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247CisKK2V4dGVybiBpbnQz
Ml90IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA7CitleHRlcm4gaW50MzJfdCB0aHJl
c2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKK2V4dGVybiBpbnQzMl90IHRocmVzaG9s
ZEZvck9wdGltaXplU29vbjsKK2V4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplTmV4
dEludm9jYXRpb247CiAKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRG
b3JMb29wOwogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVy
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2ltcGxlU3RhdHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NpbXBsZVN0YXRzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NpbXBsZVN0YXRzLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgU2ltcGxlU3RhdHNfaAorI2RlZmluZSBTaW1wbGVTdGF0c19o
CisKKyNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFNp
bXBsZSBhbmQgY2hlYXAgd2F5IG9mIHRyYWNraW5nIHN0YXRpc3RpY3MgaWYgeW91J3JlIG5vdCB3
b3JyaWVkIGFib3V0IGNob3BwaW5nIG9uCisvLyB0aGUgc3VtIG9mIHNxdWFyZXMgKGkuZS4gdGhl
IHN1bSBvZiBzcXVhcmVzIGlzIHVubGlrZWx5IHRvIGV4Y2VlZCAyXjUyKS4KK2NsYXNzIFNpbXBs
ZVN0YXRzIHsKK3B1YmxpYzoKKyAgICBTaW1wbGVTdGF0cygpCisgICAgICAgIDogbV9jb3VudCgw
KQorICAgICAgICAsIG1fc3VtKDApCisgICAgICAgICwgbV9zdW1PZlNxdWFyZXMoMCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IG1fY291bnQrKzsKKyAgICAgICAgbV9zdW0gKz0gdmFsdWU7CisgICAgICAgIG1fc3VtT2ZTcXVh
cmVzICs9IHZhbHVlICogdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9jb3VudDsKKyAgICB9CisgICAgCisgICAg
ZG91YmxlIGNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvdW50OworICAg
IH0KKyAgICAKKyAgICBkb3VibGUgc3VtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3N1bTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIHN1bU9mU3F1YXJlcygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9zdW1PZlNxdWFyZXM7CisgICAgfQorICAgIAorICAgIGRvdWJs
ZSBtZWFuKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N1bSAvIG1fY291bnQ7Cisg
ICAgfQorICAgIAorICAgIC8vIE5CLiBUaGlzIGdpdmVzIGEgYmlhc2VkIHZhcmlhbmNlIGFzIGl0
IGRpdmlkZXMgYnkgdGhlIG51bWJlciBvZiBzYW1wbGVzIHJhdGhlcgorICAgIC8vIHRoYW4gdGhl
IGRlZ3JlZXMgb2YgZnJlZWRvbS4gVGhpcyBpcyBmaW5lIG9uY2UgdGhlIGNvdW50IGdyb3dzIGxh
cmdlLCB3aGljaCBpbgorICAgIC8vIG91ciBjYXNlIHdpbGwgaGFwcGVuIHJhdGhlciBxdWlja2x5
LgorICAgIGRvdWJsZSB2YXJpYW5jZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9jb3Vu
dCA8IDIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1
dGUgPHheMj4gLSA8eD5eMgorICAgICAgICBkb3VibGUgc2Vjb25kTW9tZW50ID0gbV9zdW1PZlNx
dWFyZXMgLyBtX2NvdW50OworICAgICAgICBkb3VibGUgZmlyc3RNb21lbnQgPSBtX3N1bSAvIG1f
Y291bnQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4gc2Vjb25kTW9tZW50IC0gZmlyc3RNb21l
bnQgKiBmaXJzdE1vbWVudDsKKyAgICB9CisgICAgCisgICAgLy8gTkIuIFRoaXMgZ2l2ZXMgYSBi
aWFzZWQgc3RhbmRhcmQgZGV2aWF0aW9uLiBTZWUgYWJvdmUuCisgICAgZG91YmxlIHN0YW5kYXJk
RGV2aWF0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzcXJ0KHZhcmlhbmNlKCkp
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fY291bnQ7CisgICAgZG91Ymxl
IG1fc3VtOworICAgIGRvdWJsZSBtX3N1bU9mU3F1YXJlczsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gU2ltcGxlU3RhdHNfaAorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biAxMDk2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxMi0wMy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIEpJVCBoZXVyaXN0aWNzIHNob3VsZCBiZSBoeXBlcmJvbGljCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDA1NQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTA5MjIyNjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSB0aGVyZSdzIG5vIG5ldyBmdW5j
dGlvbmFsaXR5LgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NpbXBsZVN0YXRz
Lmg6IEFkZGVkLgorCiAyMDEyLTAzLTAzICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgdGhlIHVudXNlZCBmdW5jdGlvbiBXZWJDb3JlOjpw
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9TaW1wbGVTdGF0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3d0Zi9TaW1wbGVTdGF0cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NpbXBsZVN0YXRzLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9TaW1wbGVTdGF0c19oCisjZGVm
aW5lIFdlYkNvcmVfRldEX1NpbXBsZVN0YXRzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9T
aW1wbGVTdGF0cy5oPgorI2VuZGlmCg==
</data>
<flag name="commit-queue"
          id="132893"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130020</attachid>
            <date>2012-03-04 01:58:47 -0800</date>
            <delta_ts>2012-03-04 02:15:25 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>hyperbolicjit_patch_2.diff</filename>
            <type>text/plain</type>
            <size>54529</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBA
QAorMjAxMi0wMy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpJVCBoZXVyaXN0aWNzIHNob3VsZCBiZSBoeXBlcmJvbGljCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDA1NQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMTA5MjIyNjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBBZGRlZCB0cmFja2luZyBvZiB0aGUgYW1vdW50IG9mIGV4ZWN1dGFibGUg
bWVtb3J5IHR5cGljYWxseSB1c2VkIGZvciBhIGJ5dGVjb2RlCisgICAgICAgIGluc3RydWN0aW9u
LiBNb2RpZmllZCB0aGUgZXhlY3V0aW9uIGNvdW50ZXIgc2NoZW1lIHRvIHVzZSB0aGlzLCBhbmQg
dGhlIGFtb3VudAorICAgICAgICBvZiBmcmVlIG1lbW9yeSwgdG8gZGV0ZXJtaW5lIGhvdyBsb25n
IHRvIHdhaXQgYmVmb3JlIGludm9raW5nIHRoZSBKSVQuCisgICAgICAgIAorICAgICAgICBUaGUg
cmVzdWx0IGlzIHRoYXQgZXZlbiBpZiB3ZSBib21iIHRoZSBWTSB3aXRoIG1vcmUgY29kZSB0aGFu
IGNhbiBmaXQgaW4gb3VyCisgICAgICAgIGV4ZWN1dGFibGUgbWVtb3J5IHBvb2wsIHdlIHN0aWxs
IGtlZXAgcnVubmluZyBhbmQgYWxtb3N0IG5ldmVyIHJ1biBvdXQgb2YKKyAgICAgICAgZXhlY3V0
YWJsZSBtZW1vcnkgLSB3aGljaCBlbnN1cmVzIHRoYXQgaWYgd2UgaGF2ZSB0byBKSVQgc29tZXRo
aW5nIGNyaXRpY2FsLCB0aGVuCisgICAgICAgIHdlJ2xsIGxpa2VseSBoYXZlIGVub3VnaCBtZW1v
cnkgdG8gZG8gc28uIFRoaXMgYWxzbyBkb2VzIG5vdCByZWdyZXNzIHBlcmZvcm1hbmNlCisgICAg
ICAgIG9uIHRoZSB0aHJlZSBtYWluIGJlbmNobWFya3MuCisgICAgICAgIAorICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1c2VzT3Bjb2RlKToKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmRvbnRKSVRBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aml0QWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdFNvb24p
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXApOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25n
V2FybVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZKSVRFeGVjdXRlQ291
bnRlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRl
cik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVU
aHJlc2hvbGQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0aW9u
VG90YWxDb3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0RXhlY3V0ZUNvdW50ZXIp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRS
ZWFjaGVkKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9u
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkb250T3B0aW1pemVBbnl0aW1lU29vbik6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlcldhcm1VcCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdXYXJtVXApOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om9wdGltaXplU29vbik6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9u
Q291bnRlcjo6RXhlY3V0aW9uQ291bnRlcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50
ZXI6OmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KToKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6c2V0TmV3VGhyZXNob2xkKToKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291
bnRlcjo6ZGVmZXJJbmRlZmluaXRlbHkpOgorICAgICAgICAoSlNDOjpFeGVjdXRpb25Db3VudGVy
OjphcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljcyk6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNv
dW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KToKKyAgICAg
ICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6aGFzQ3Jvc3NlZFRocmVzaG9sZCk6CisgICAgICAg
IChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6OnNldFRocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkV4
ZWN1dGlvbkNvdW50ZXI6OnJlc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3Vu
dGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEV4ZWN1dGlvbkNvdW50ZXIp
OgorICAgICAgICAoSlNDOjpFeGVjdXRpb25Db3VudGVyOjpmb3JtYXR0ZWRUb3RhbENvdW50KToK
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdP
U1JFeGl0Q29tcGlsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdCk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZU5ld1NwYWNl
KToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3Vy
ZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpt
ZW1vcnlQcmVzc3VyZU11bHRpcGxpZXIpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmg6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6
CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNzdXJlTXVsdGlw
bGllcik6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhl
dXJpc3RpY3MpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKEpTR2xvYmFsRGF0
YSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKE9wdGlvbnMpOgor
ICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplT3B0aW9ucyk6CisgICAgICAgICogcnVu
dGltZS9PcHRpb25zLmg6CisgICAgICAgIChPcHRpb25zKToKKyAgICAgICAgKiB3dGYvU2ltcGxl
U3RhdHMuaDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAoU2ltcGxlU3RhdHMpOgor
ICAgICAgICAoV1RGOjpTaW1wbGVTdGF0czo6U2ltcGxlU3RhdHMpOgorICAgICAgICAoV1RGOjpT
aW1wbGVTdGF0czo6YWRkKToKKyAgICAgICAgKFdURjo6U2ltcGxlU3RhdHM6Om9wZXJhdG9yISk6
CisgICAgICAgIChXVEY6OlNpbXBsZVN0YXRzOjpjb3VudCk6CisgICAgICAgIChXVEY6OlNpbXBs
ZVN0YXRzOjpzdW0pOgorICAgICAgICAoV1RGOjpTaW1wbGVTdGF0czo6c3VtT2ZTcXVhcmVzKToK
KyAgICAgICAgKFdURjo6U2ltcGxlU3RhdHM6Om1lYW4pOgorICAgICAgICAoV1RGOjpTaW1wbGVT
dGF0czo6dmFyaWFuY2UpOgorICAgICAgICAoV1RGOjpTaW1wbGVTdGF0czo6c3RhbmRhcmREZXZp
YXRpb24pOgorCiAyMDEyLTAzLTA0ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEwOTY3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBA
QCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmNwcAogICAgIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHAKICAgICBieXRlY29kZS9ERkdFeGl0UHJv
ZmlsZS5jcHAKKyAgICBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAogICAgIGJ5dGVjb2Rl
L0dldEJ5SWRTdGF0dXMuY3BwCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmNwcAogICAgIGJ5dGVj
b2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwOTY3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5
NSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXZhbENvZGVDYWNoZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0aW9uQ291bnRlci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRpb25Db3VudGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeHByZXNz
aW9uUmFuZ2VJbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuaCBcCkBAIC03MTYsNiArNzE4LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TZW50aW5lbExpbmtlZExpc3QuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9TSEExLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9TSEExLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2ltcGxlU3RhdHMuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TaW5nbHlMaW5rZWRMaXN0LmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvU3BlY3RydW0uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9TdGFja0JvdW5kcy5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlz
aW9uIDEwOTY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmNwcCBcCiAgICAgYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBcCiAgICAgYnl0ZWNv
ZGUvREZHRXhpdFByb2ZpbGUuY3BwIFwKKyAgICBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNw
cCBcCiAgICAgYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgXAogICAgIGJ5dGVjb2RlL0p1bXBU
YWJsZS5jcHAgXAogICAgIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvagkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NzgsNiArMTQ3OCwxMCBAQAogCQkJTmFtZT0iYnl0ZWNvZGUi
CiAJCQk+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcRXhlY3V0
aW9uQ291bnRlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIgog
CQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw5IEBA
CiAJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBEMTE0QkJD
NUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTVGMEY0MTREMTA2MzkwMEFDNzY0OSAv
KiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNTVGMEYxMTREMTA2MzYwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCAqLzsgfTsK
IAkJMEY1NUYwRjUxNEQxMDYzQzAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTVGMEYyMTREMTA2MzYwMEFDNzY0
OSAvKiBBYnN0cmFjdFBDLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY1NkExRDMxNTAwMEYzNTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTZBMUQx
MTUwMDBGMzEwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY1NkExRDUxNTAwMUNGNDAwMjk5MkIx
IC8qIEV4ZWN1dGlvbkNvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY1NkExRDQxNTAwMUNGMjAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50
ZXIuY3BwICovOyB9OworCQkwRjU2QTFENzE1MDAyOEJCMDAyOTkyQjEgLyogU2ltcGxlU3RhdHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTZBMUQ2
MTUwMDI4QjkwMDI5OTJCMSAvKiBTaW1wbGVTdGF0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUYwOENGMTQ2Qzc2MzMwMDA0NzJBOSAvKiBV
bmNvbmRpdGlvbmFsRmluYWxpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZp
bmFsaXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcyMTQz
RkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3NTE0M0ZDRDM3MDA2OEI3
N0MgLyogREZHT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjIwMTcxMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NzQsNiArOTc3
LDkgQEAKIAkJMEY0NjgwRDExNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSG9zdENhbGxSZXR1cm5WYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1RjBGMTE0RDEwNjM2MDBBQzc2NDkg
LyogQWJzdHJhY3RQQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
YnN0cmFjdFBDLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NUYwRjIxNEQx
MDYzNjAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQWJzdHJhY3RQQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU2QTFE
MTE1MDAwRjMxMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFeGVjdXRpb25Db3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNTZBMUQ0MTUwMDFDRjIwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGlvbkNvdW50ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU2QTFENjE1MDAyOEI5MDAyOTky
QjEgLyogU2ltcGxlU3RhdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lt
cGxlU3RhdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RjA4Q0MxNDZCRTYw
MjAwMDQ3MkE5IC8qIERGR0J5dGVDb2RlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQnl0ZUNvZGVDYWNoZS5oOyBwYXRoID0gZGZnL0RGR0J5dGVDb2RlQ2FjaGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5
IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVW5jb25kaXRpb25hbEZpbmFsaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdFN0YXRlLmNwcDsg
cGF0aCA9IGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIzMTQsNiArMjMyMCw3IEBACiAJCQkJQTdDNDBDMDgxMzBCMDU3RDAwRDAwMkExIC8q
IFNlbnRpbmVsTGlua2VkTGlzdC5oICovLAogCQkJCTc2RkI5RjEwMTJFODUxOTYwMDUxQTJFQiAv
KiBTSEExLmNwcCAqLywKIAkJCQk3NkZCOUYwRTEyRTg1MTg2MDA1MUEyRUIgLyogU0hBMS5oICov
LAorCQkJCTBGNTZBMUQ2MTUwMDI4QjkwMDI5OTJCMSAvKiBTaW1wbGVTdGF0cy5oICovLAogCQkJ
CUE3QzQwQzA5MTMwQjA1N0QwMEQwMDJBMSAvKiBTaW5nbHlMaW5rZWRMaXN0LmggKi8sCiAJCQkJ
MEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovLAogCQkJCTBGMkU1
QkY1MTQ2MzU3RDIwMDNFQjJFQiAvKiBTcGVjdHJ1bS5oICovLApAQCAtMjc4OCw2ICsyNzk1LDgg
QEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjU2QTFENDE1MDAxQ0YyMDAyOTky
QjEgLyogRXhlY3V0aW9uQ291bnRlci5jcHAgKi8sCisJCQkJMEY1NkExRDExNTAwMEYzMTAwMjk5
MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCAqLywKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5
ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0Ex
NEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKIAkJ
CQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3Bw
ICovLApAQCAtMzQwOSw2ICszNDE4LDggQEAKIAkJCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
NTQ2OTAxNEZBREE3QjAwMkMyOTg5IC8qIFJlZkNvdW50ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYwNzc2QkYxNEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjU2QTFEMzE1MDAwRjM1MDAyOTkyQjEgLyogRXhlY3V0aW9u
Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1NkExRDcxNTAwMjhCQjAwMjk5MkIxIC8q
IFNpbXBsZVN0YXRzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQwMTgsNiArNDAyOSw3IEBACiAJCQkJ
MEZGRkM5NUYxNEVGOTBCQjAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2N0Qx
NEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEY1NkExRDUxNTAwMUNGNDAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NzMsNyAr
MjQ3MywzOCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMoKQogfQogI2VuZGlm
CiAKLSNpZm5kZWYgTkRFQlVHCitzaXplX3QgQ29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29k
ZVNpemUoKQoreworICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgZnJvbSBDb2RlQmxvY2s6OkNv
ZGVCbG9jayBiZWZvcmUgZWl0aGVyIG1fZ2xvYmFsRGF0YSBvciB0aGUKKyAgICAvLyBpbnN0cnVj
dGlvbnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLiBJdCdzIE9LIHRvIHJldHVybiAwIGJlY2F1c2Ug
d2hhdCB3aWxsIHJlYWxseQorICAgIC8vIG1hdHRlciBpcyB0aGUgcmVjb21wdXRhdGlvbiBvZiB0
aGlzIHZhbHVlIHdoZW4gdGhlIHNsb3cgcGF0aCBpcyB0cmlnZ2VyZWQuCisgICAgaWYgKCFtX2ds
b2JhbERhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmICghbV9nbG9iYWxEYXRh
LT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQpCisgICAgICAg
IHJldHVybiAwOyAvLyBJdCdzIGFzIGdvb2Qgb2YgYSBwcmVkaWN0aW9uIGFzIHdlJ2xsIGdldC4K
KyAgICAKKyAgICAvLyBCZSBjb25zZXJ2YXRpdmU6IHJldHVybiBhIHNpemUgdGhhdCB3aWxsIGJl
IGFuIG92ZXJlc3RpbWF0aW9uIDg0JSBvZiB0aGUgdGltZS4KKyAgICBkb3VibGUgbXVsdGlwbGll
ciA9IG1fZ2xvYmFsRGF0YS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2Vs
aW5lSklULm1lYW4oKSArCisgICAgICAgIG1fZ2xvYmFsRGF0YS0+bWFjaGluZUNvZGVCeXRlc1Bl
ckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULnN0YW5kYXJkRGV2aWF0aW9uKCk7CisgICAgCisg
ICAgLy8gQmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCBib2d1cyBtdWx0aXBpZXJzLiBTaWxl
bnRseSBkb2luZyB0aGUgIndyb25nIiB0aGluZworICAgIC8vIGhlcmUgaXMgT0ssIHNpbmNlIHRo
aXMgd2hvbGUgbWV0aG9kIGlzIGp1c3QgYSBoZXVyaXN0aWMuCisgICAgaWYgKG11bHRpcGxpZXIg
PCAwIHx8IG11bHRpcGxpZXIgPiAxMDAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBk
b3VibGUgZG91YmxlUmVzdWx0ID0gbXVsdGlwbGllciAqIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsK
KyAgICAKKyAgICAvLyBCZSBldmVuIG1vcmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCB2YWx1
ZXMgdGhhdCB3b24ndCBmaXQgaW50byBhIHNpemVfdC4gSWYKKyAgICAvLyB0aGUgZnVuY3Rpb24g
aXMgc28gaHVnZSB0aGF0IHdlIGNhbid0IGV2ZW4gZml0IGl0IGludG8gdmlydHVhbCBtZW1vcnkg
dGhlbiB3ZQorICAgIC8vIHNob3VsZCBwcm9iYWJseSBoYXZlIHNvbWUgb3RoZXIgZ3VhcmRzIGlu
IHBsYWNlIHRvIHByZXZlbnQgdXMgZnJvbSBldmVuIGdldHRpbmcKKyAgICAvLyB0byB0aGlzIHBv
aW50LgorICAgIGlmIChkb3VibGVSZXN1bHQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46
Om1heCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihkb3VibGVSZXN1bHQpOworfQorCiBib29sIENvZGVCbG9jazo6dXNlc09wY29kZShP
cGNvZGVJRCBvcGNvZGVJRCkKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBnbG9i
YWxEYXRhKCktPmludGVycHJldGVyOwpAQCAtMjQ5OCw2ICsyNTI5LDUgQEAgYm9vbCBDb2RlQmxv
Y2s6OnVzZXNPcGNvZGUoT3Bjb2RlSUQgb3BjbwogICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0K
LSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEwOTY3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiAr
NDEsNyBAQAogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5o
IgogI2luY2x1ZGUgIkV2YWxDb2RlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVy
LmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUgIkdsb2JhbFJl
c29sdmVJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKQEAgLTM0NCw2ICszNDUsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYg
aW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgY29uc3Qg
UmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgCisgICAgICAgIHNpemVfdCBwcmVkaWN0ZWRN
YWNoaW5lQ29kZVNpemUoKTsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgdXNlc09wY29kZShPcGNv
ZGVJRCk7CiAKICAgICAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIHsgcmV0dXJuIG1f
aW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQpAQCAtODMyLDI0ICs4MzUsMjkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiBKSVR0aW5nIGtp
Y2tzIGluLCBpbiBhIG1peGVkIG1vZGUKICAgICAgICAgLy8gZXhlY3V0aW9uIHdvcmxkLgogICAg
ICAgICAKKyAgICAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZv
aWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9sbGludEV4
ZWN1dGVDb3VudGVyID0gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udEpJVEFu
eXRpbWVTb29uOworICAgICAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZp
bml0ZWx5KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgaml0QWZ0ZXJXYXJt
VXAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSBPcHRp
b25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JKSVRBZnRlcldhcm1VcDsKKyAgICAgICAgICAg
IG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUQWZ0ZXJXYXJtVXAsIHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2
b2lkIGppdFNvb24oKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIgPSBPcHRpb25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JKSVRTb29uOworICAgICAgICAg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JKSVRTb29uLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaW50MzJf
dCBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgICAgIHJldHVybiBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIubV9jb3VudGVyOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBG
dW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHdoZW4gdGllcmVkIGNvbXBpbGF0aW9uIGtpY2tzIGlu
LiBUaGlzCkBAIC04ODgsMzEgKzg5Niw0MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAg
ICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7Cisg
ICAgICAgICAgICByZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1V
cCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJW
YWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyKCk7CisgICAgICAgICAgICByZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVB
ZnRlckxvbmdXYXJtVXAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIo
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gJm1faml0RXhlY3V0ZUNvdW50ZXI7Cisg
ICAgICAgICAgICByZXR1cm4gJm1faml0RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVyOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0
ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1
dGVDb3VudGVyKTsgfQorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0
ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1
dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX2NvdW50ZXIp
OyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVU
aHJlc2hvbGQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1
dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX2FjdGl2ZVRo
cmVzaG9sZCk7IH0KKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlv
blRvdGFsQ291bnQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4
ZWN1dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX3RvdGFs
Q291bnQpOyB9CiAKLSAgICAgICAgaW50MzJfdCBqaXRFeGVjdXRlQ291bnRlcigpIGNvbnN0IHsg
cmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXI7IH0KKyAgICAgICAgaW50MzJfdCBqaXRFeGVjdXRl
Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVyOyB9
CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSBj
b25zdCB7IHJldHVybiBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsgfQogICAgICAgICAKKyAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhlIG9wdGltaXphdGlvbiB0aHJlc2hvbGQgaGFzIGJlZW4gcmVh
Y2hlZCwgYW5kIGlmIG5vdCwKKyAgICAgICAgLy8gYWRqdXN0IHRoZSBoZXVyaXN0aWNzIGFjY29y
ZGluZ2x5LiBSZXR1cm5zIHRydWUgaWYgdGhlIHRocmVzaG9sZCBoYXMKKyAgICAgICAgLy8gYmVl
biByZWFjaGVkLgorICAgICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFj
aGVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIu
Y2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJp
Z2dlciB0byBmaXJlLiBUaGlzIGlzCiAgICAgICAgIC8vIHJhcmVseSB3aXNlLCBzaW5jZSBvcHRp
bWl6YXRpb24gdHJpZ2dlcnMgYXJlIHR5cGljYWxseSBtb3JlCiAgICAgICAgIC8vIGV4cGVuc2l2
ZSB0aGFuIGV4ZWN1dGluZyBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4
dEludm9jYXRpb24oKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVy
ID0gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlv
bjsKKyAgICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKDAsIHRo
aXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVu
dCBvcHRpbWl6YXRpb24gZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdApAQCAtOTIyLDcg
Kzk0MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyB0aGUgZnV0dXJlIGFzIHdlbGwu
CiAgICAgICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24oKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyID0gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlclZh
bHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb247CisgICAgICAgICAgICBtX2ppdEV4ZWN1dGVD
b3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IC8vIENhbGwgdGhpcyB0byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8gaXRzIHN0YXJ0aW5n
IHN0YXRlLApAQCAtOTMzLDE0ICs5NTEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8v
IGNvdW50ZXIgdGhhdCB0aGlzIGNvcnJlc3BvbmRzIHRvIGlzIGFsc28gYXZhaWxhYmxlIGRpcmVj
dGx5LgogICAgICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcCgpOworICAgICAgICAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hv
bGQoY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLCB0aGlzKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIGFuIG9wdGltaXphdGlv
biB0cmlnZ2VyIHRvIGZpcmUgb25seSBhZnRlcgogICAgICAgICAvLyBhIGxvdCBvZiB3YXJtLXVw
LgogICAgICAgICB2b2lkIG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKICAgICAgICAgewotICAg
ICAgICAgICAgbV9qaXRFeGVjdXRlQ291bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0
ZXJMb25nV2FybVVwKCk7CisgICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1Ro
cmVzaG9sZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpLCB0aGlzKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGNhdXNlIGFuIG9w
dGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUgc29vbiwgYnV0CkBAIC05NjMsNyArOTgxLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAgICAg
ICB2b2lkIG9wdGltaXplU29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1faml0RXhlY3V0
ZUNvdW50ZXIgPSBPcHRpb25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24g
PDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAgICAgICAgICAgIG1faml0RXhlY3V0
ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplU29v
biA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCB0aGlzKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgLy8gVGhlIHNwZWN1bGF0aXZlIEpJVCB0cmFja3MgaXRzIHN1Y2Nlc3Mg
cmF0ZSwgc28gdGhhdCB3ZSBjYW4KQEAgLTEyMDQsMTMgKzEyMjIsMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAgICAg
Ci0gICAgICAgIGludDMyX3QgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICBFeGVjdXRp
b25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKICAgICAgICAgCi0gICAgICAgIGludDMy
X3QgbV9qaXRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4
ZWN1dGVDb3VudGVyOworICAgICAgICBpbnQzMl90IG1fdG90YWxKSVRFeGVjdXRpb25zOwogICAg
ICAgICB1aW50MzJfdCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7CiAgICAgICAgIHVpbnQz
Ml90IG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsKLSAgICAgICAgdWludDhfdCBtX29wdGltaXph
dGlvbkRlbGF5Q291bnRlcjsKLSAgICAgICAgdWludDhfdCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyOworICAgICAgICB1aW50MTZfdCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsKKyAg
ICAgICAgdWludDE2X3QgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKICAgICAgICAgCiAg
ICAgICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKKworI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworRXhlY3V0aW9uQ291bnRlcjo6
RXhlY3V0aW9uQ291bnRlcigpCit7CisgICAgcmVzZXQoKTsKK30KKworYm9vbCBFeGVjdXRpb25D
b3VudGVyOjpjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICBpZiAoaGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoc2V0VGhyZXNob2xkKGNvZGVCbG9jaykpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFeGVj
dXRpb25Db3VudGVyOjpzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIHJlc2V0KCk7CisgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSB0
aHJlc2hvbGQ7CisgICAgc2V0VGhyZXNob2xkKGNvZGVCbG9jayk7Cit9CisKK3ZvaWQgRXhlY3V0
aW9uQ291bnRlcjo6ZGVmZXJJbmRlZmluaXRlbHkoKQoreworICAgIG1fdG90YWxDb3VudCA9IDA7
CisgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
YXgoKTsKKyAgICBtX2NvdW50ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4o
KTsKK30KKworZG91YmxlIEV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0
aWNzKGludDMyX3QgdmFsdWUsIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGRvdWJsZSBt
dWx0aXBsaWVyID0KKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1cmVN
dWx0aXBsaWVyKAorICAgICAgICAgICAgY29kZUJsb2NrLT5wcmVkaWN0ZWRNYWNoaW5lQ29kZVNp
emUoKSk7CisgICAgQVNTRVJUKG11bHRpcGxpZXIgPj0gMS4wKTsKKyAgICByZXR1cm4gbXVsdGlw
bGllciAqIHZhbHVlOworfQorCitpbnQzMl90IEV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVtb3J5
VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KAorICAgIGludDMyX3QgdmFsdWUsIENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIGRvdWJsZSBkb3VibGVSZXN1bHQgPSBhcHBseU1lbW9y
eVVzYWdlSGV1cmlzdGljcyh2YWx1ZSwgY29kZUJsb2NrKTsKKyAgICAKKyAgICBBU1NFUlQoZG91
YmxlUmVzdWx0ID49IDApOworICAgIAorICAgIGlmIChkb3VibGVSZXN1bHQgPiBzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50MzJfdD46Om1heCgpOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQz
Ml90Pihkb3VibGVSZXN1bHQpOworfQorCitib29sIEV4ZWN1dGlvbkNvdW50ZXI6Omhhc0Nyb3Nz
ZWRUaHJlc2hvbGQoQ29kZUJsb2NrKiBjb2RlQmxvY2spIGNvbnN0Cit7CisgICAgLy8gVGhpcyBj
aGVja3MgaWYgdGhlIGN1cnJlbnQgY291bnQgcm91bmRlZCB1cCB0byB0aGUgdGhyZXNob2xkIHdl
IHdlcmUgdGFyZ2V0aW5nLgorICAgIC8vIEZvciBleGFtcGxlLCBpZiB3ZSBhcmUgdXNpbmcgaGFs
ZiBvZiBhdmFpbGFibGUgZXhlY3V0YWJsZSBtZW1vcnkgYW5kIGhhdmUKKyAgICAvLyBtX2FjdGl2
ZVRocmVzaG9sZCA9IDEwMDAsIGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKG1fYWN0aXZlVGhy
ZXNob2xkKSB3aWxsIGJlCisgICAgLy8gMjAwMCwgYnV0IHdlIHdpbGwgcHJldGVuZCBhcyBpZiB0
aGUgdGhyZXNob2xkIHdhcyBjcm9zc2VkIGlmIHdlIHJlYWNoIDIwMDAgLQorICAgIC8vIDEwMDAg
LyAyLCBvciAxNTAwLiBUaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB3ZSB3YW50IHRvIGF2b2lk
IHRocmFzaGluZy4gSWYKKyAgICAvLyB0aGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlLCB0aGVuIHRo
ZSBKSVQncyB0aHJlc2hvbGQgZm9yIHdoZW4gaXQgd2lsbCBhZ2FpbiBjYWxsCisgICAgLy8gaW50
byB0aGUgc2xvdyBwYXRoICh3aGljaCB3aWxsIGNhbGwgdGhpcyBtZXRob2QgYSBzZWNvbmQgdGlt
ZSkgd2lsbCBiZSBzZXQKKyAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2Vl
biB0aGUgY3VycmVudCBjb3VudCBhbmQgdGhlIHRhcmdldCBjb3VudAorICAgIC8vIGFjY29yZGlu
ZyB0byAqY3VycmVudCogbWVtb3J5IHVzYWdlLiBCdXQgYnkgdGhlIHRpbWUgd2UgY2FsbCBpbnRv
IHRoaXMgYWdhaW4sIHdlCisgICAgLy8gbWF5IGhhdmUgSklUJ2VkIG1vcmUgY29kZSwgYW5kIHNv
IHRoZSB0YXJnZXQgY291bnQgd2lsbCBpbmNyZWFzZSBzbGlnaHRseS4gVGhpcworICAgIC8vIG1h
eSBsZWFkIHRvIGEgcmVwZWF0aW5nIHBhdHRlcm4gd2hlcmUgdGhlIHRhcmdldCBjb3VudCBpcyBz
bGlnaHRseSBpbmNyZW1lbnRlZCwKKyAgICAvLyB0aGUgSklUIGltbWVkaWF0ZWx5IG1hdGNoZXMg
dGhhdCBpbmNyZWFzZSwgY2FsbHMgaW50byB0aGUgc2xvdyBwYXRoIGFnYWluLCBhbmQKKyAgICAv
LyBhZ2FpbiB0aGUgdGFyZ2V0IGNvdW50IGlzIHNsaWdodGx5IGluY3JlbWVudGVkLiBJbnN0ZWFk
IG9mIGhhdmluZyB0aGlzIHZpY2lvdXMKKyAgICAvLyBjeWNsZSwgd2UgZGVjbGFyZSB2aWN0b3J5
IGEgYml0IGVhcmx5IGlmIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQKKyAgICAv
LyB0b3RhbCBhbmQgb3VyIHRhcmdldCBhY2NvcmRpbmcgdG8gbWVtb3J5IGhldXJpc3RpY3MgaXMg
c21hbGwuIE91ciBkZWZpbml0aW9uIG9mCisgICAgLy8gc21hbGwgaXMgYXJiaXRyYXJpbHkgcGlj
a2VkIHRvIGJlIGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRocmVzaG9sZCAoaS5lLgorICAgIC8vIG1f
YWN0aXZlVGhyZXNob2xkKS4KKyAgICAKKyAgICBkb3VibGUgbW9kaWZpZWRUaHJlc2hvbGQgPSBh
cHBseU1lbW9yeVVzYWdlSGV1cmlzdGljcyhtX2FjdGl2ZVRocmVzaG9sZCwgY29kZUJsb2NrKTsK
KyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9j
b3VudGVyID49CisgICAgICAgICBtb2RpZmllZFRocmVzaG9sZCAtIHN0YXRpY19jYXN0PGRvdWJs
ZT4obV9hY3RpdmVUaHJlc2hvbGQpIC8gMjsKK30KKworYm9vbCBFeGVjdXRpb25Db3VudGVyOjpz
ZXRUaHJlc2hvbGQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgaWYgKG1fYWN0aXZlVGhy
ZXNob2xkID09IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSB7CisgICAgICAg
IGRlZmVySW5kZWZpbml0ZWx5KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
ICAgIAorICAgIEFTU0VSVCghaGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKTsKKyAgICAg
ICAgCisgICAgLy8gQ29tcHV0ZSB0aGUgdHJ1ZSB0b3RhbCBjb3VudC4KKyAgICBkb3VibGUgdHJ1
ZVRvdGFsQ291bnQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdG90YWxDb3VudCkgKyBtX2NvdW50
ZXI7CisgICAgICAgIAorICAgIC8vIENvcnJlY3QgdGhlIHRocmVzaG9sZCBmb3IgY3VycmVudCBt
ZW1vcnkgdXNhZ2UuCisgICAgZG91YmxlIHRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVy
aXN0aWNzKG1fYWN0aXZlVGhyZXNob2xkLCBjb2RlQmxvY2spOworICAgICAgICAKKyAgICAvLyBU
aHJlc2hvbGQgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIG5vdCBOYU4uCisgICAgQVNTRVJUKHRo
cmVzaG9sZCA+PSAwKTsKKyAgICAgICAgCisgICAgLy8gQWRqdXN0IHRoZSB0aHJlc2hvbGQgYWNj
b3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgZXhlY3V0aW9ucyB3ZSBoYXZlIGFscmVhZHkKKyAgICAv
LyBzZWVuLiBUaGlzIHNob3VsZG4ndCBnbyBuZWdhdGl2ZSwgYnV0IGl0IG1pZ2h0LCBiZWNhdXNl
IG9mIHJvdW5kLW9mZiBlcnJvcnMuCisgICAgdGhyZXNob2xkIC09IHRydWVUb3RhbENvdW50Owor
ICAgICAgICAKKyAgICBpZiAodGhyZXNob2xkIDw9IDApIHsKKyAgICAgICAgbV9jb3VudGVyID0g
MDsKKyAgICAgICAgbV90b3RhbENvdW50ID0gdHJ1ZVRvdGFsQ291bnQ7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGlmICh0aHJlc2hvbGQgPiBzdGQ6Om51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgdGhyZXNob2xkID0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgIAorICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0
PGludDMyX3Q+KC10aHJlc2hvbGQpOworICAgICAgICAKKyAgICBtX3RvdGFsQ291bnQgPSB0cnVl
VG90YWxDb3VudCArIHRocmVzaG9sZDsKKyAgICAgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIEV4ZWN1dGlvbkNvdW50ZXI6OnJlc2V0KCkKK3sKKyAgICBtX2NvdW50ZXIgPSAwOwor
ICAgIG1fdG90YWxDb3VudCA9IDA7CisgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSAwOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGlvbkNvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEV4ZWN1dGlvbkNvdW50ZXJfaAorI2RlZmluZSBFeGVjdXRpb25Db3VudGVyX2gK
KworI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ29kZUJsb2NrOworCitjbGFzcyBFeGVjdXRpb25Db3VudGVyIHsKK3B1YmxpYzoKKyAgICBF
eGVjdXRpb25Db3VudGVyKCk7CisgICAgYm9vbCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNl
dChDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9s
ZCwgQ29kZUJsb2NrKik7CisgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOworICAgIHN0YXRp
YyBkb3VibGUgYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3MoaW50MzJfdCB2YWx1ZSwgQ29kZUJs
b2NrKik7CisgICAgc3RhdGljIGludDMyX3QgYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3NBbmRD
b252ZXJ0VG9JbnQoaW50MzJfdCB2YWx1ZSwgQ29kZUJsb2NrKik7CisKKyAgICBzdGF0aWMgaW50
MzJfdCBmb3JtYXR0ZWRUb3RhbENvdW50KGZsb2F0IHZhbHVlKQorICAgIHsKKyAgICAgICAgdW5p
b24geworICAgICAgICAgICAgaW50MzJfdCBpOworICAgICAgICAgICAgZmxvYXQgZjsKKyAgICAg
ICAgfSB1OworICAgICAgICB1LmYgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHUuaTsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZChDb2RlQmxvY2sq
KSBjb25zdDsKKyAgICBib29sIHNldFRocmVzaG9sZChDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHJl
c2V0KCk7CisKK3B1YmxpYzoKKworICAgIC8vIE5CLiBUaGVzZSBhcmUgaW50ZW50aW9uYWxseSBw
dWJsaWMgYmVjYXVzZSBpdCB3aWxsIGJlIG1vZGlmaWVkIGZyb20gbWFjaGluZSBjb2RlLgorICAg
IAorICAgIC8vIFRoaXMgY291bnRlciBpcyBpbmNyZW1lbnRlZCBieSB0aGUgSklUIG9yIExMSW50
LiBJdCBzdGFydHMgb3V0IG5lZ2F0aXZlIGFuZCBpcworICAgIC8vIGNvdW50ZWQgdXAgdW50aWwg
aXQgYmVjb21lcyBub24tbmVnYXRpdmUuIEF0IHRoZSBzdGFydCBvZiBhIGNvdW50aW5nIHBlcmlv
ZCwKKyAgICAvLyB0aGUgdGhyZXNob2xkIHdlIHdpc2ggdG8gcmVhY2ggaXMgbV90b3RhbENvdW50
ICsgbV9jb3VudGVyLCBpbiB0aGUgc2Vuc2UgdGhhdAorICAgIC8vIHdlIHdpbGwgYWRkIFggdG8g
bV90b3RhbENvdW50IGFuZCBzdWJ0cmFjdCBYIGZyb20gbV9jb3VudGVyLgorICAgIGludDMyX3Qg
bV9jb3VudGVyOworCisgICAgLy8gQ291bnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgZXhlY3V0aW9u
cyB3ZSBoYXZlIHNlZW4gcGx1cyB0aGUgb25lcyB3ZSd2ZSBzZXQgYQorICAgIC8vIHRocmVzaG9s
ZCBmb3IgaW4gbV9jb3VudGVyLiBCZWNhdXNlIG1fY291bnRlcidzIHRocmVzaG9sZCBpcyBuZWdh
dGl2ZSwgdGhlCisgICAgLy8gdG90YWwgbnVtYmVyIG9mIGFjdHVhbCBleGVjdXRpb25zIGNhbiBh
bHdheXMgYmUgY29tcHV0ZWQgYXMgbV90b3RhbENvdW50ICsKKyAgICAvLyBtX2NvdW50ZXIuCisg
ICAgZmxvYXQgbV90b3RhbENvdW50OworCisgICAgLy8gVGhpcyBpcyB0aGUgdGhyZXNob2xkIHdl
IHdlcmUgb3JpZ2luYWxseSB0YXJnZXR0aW5nLCB3aXRob3V0IGFueSBjb3JyZWN0aW9uIGZvcgor
ICAgIC8vIHRoZSBtZW1vcnkgdXNhZ2UgaGV1cmlzdGljcy4KKyAgICBpbnQzMl90IG1fYWN0aXZl
VGhyZXNob2xkOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFeGVjdXRp
b25Db3VudGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXIzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHJldmlzaW9uIDEwOTY3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01ODEsMTMgKzU4MSwyMSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQoY29uc3QgCiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGxvd0ZhaWxSYXRlID0gbV9q
aXQuYnJhbmNoMzIoQXNzZW1ibHlIZWxwZXJzOjpCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1Qy
LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgCiAgICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBv
c3NpYmxlLgotICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihPcHRpb25z
OjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uKSwgQXNzZW1i
bHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklU
RXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJ
bW0zMigwKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIG1faml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpJbW0zMigwKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0aW9uQWN0aXZlVGhyZXNob2xkKCkp
KTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgZG9uZUFkanVzdGluZyA9IG1faml0Lmp1bXAo
KTsKICAgICAKICAgICBmZXdGYWlscy5saW5rKCZtX2ppdCk7CiAgICAgbG93RmFpbFJhdGUubGlu
aygmbV9qaXQpOwogICAgIAotICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0z
MihtX2ppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIC8vIEFkanVzdCB0
aGUgZXhlY3V0aW9uIGNvdW50ZXIgc3VjaCB0aGF0IHRoZSB0YXJnZXQgaXMgdG8gb25seSBvcHRp
bWl6ZSBhZnRlciBhIHdoaWxlLgorICAgIGludDMyX3QgdGFyZ2V0VmFsdWUgPQorICAgICAgICBF
eGVjdXRpb25Db3VudGVyOjphcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljc0FuZENvbnZlcnRUb0lu
dCgKKyAgICAgICAgICAgIG1faml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCksCisgICAgICAgICAgICBtX2ppdC5iYXNlbGluZUNv
ZGVCbG9jaygpKTsKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoLXRh
cmdldFZhbHVlKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIG1faml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpJbW0zMih0YXJnZXRWYWx1ZSksIEFzc2VtYmx5SGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGlvbkFjdGl2
ZVRocmVzaG9sZCgpKSk7CisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMy
KEV4ZWN1dGlvbkNvdW50ZXI6OmZvcm1hdHRlZFRvdGFsQ291bnQodGFyZ2V0VmFsdWUpKSwgQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
SklURXhlY3V0aW9uVG90YWxDb3VudCgpKSk7CiAgICAgCiAgICAgZG9uZUFkanVzdGluZy5saW5r
KCZtX2ppdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2MCwxMyArNTYwLDIxIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChj
b25zdCAKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgbG93RmFpbFJhdGUgPSBtX2ppdC5icmFu
Y2gzMihBc3NlbWJseUhlbHBlcnM6OkJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEdQUklu
Zm86OnJlZ1QxKTsKICAgICAKICAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUu
Ci0gICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKE9wdGlvbnM6OmV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24pLCBBc3NlbWJseUhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRl
Q291bnRlcigpKSk7CisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKDAp
LCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OkltbTMyKDApLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAs
IENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQoKSkpOwogICAg
IEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25lQWRqdXN0aW5nID0gbV9qaXQuanVtcCgpOwogICAg
IAogICAgIGZld0ZhaWxzLmxpbmsoJm1faml0KTsKICAgICBsb3dGYWlsUmF0ZS5saW5rKCZtX2pp
dCk7CiAgICAgCi0gICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKG1faml0
LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKCkpLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9j
azo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CisgICAgLy8gQWRqdXN0IHRoZSBleGVj
dXRpb24gY291bnRlciBzdWNoIHRoYXQgdGhlIHRhcmdldCBpcyB0byBvbmx5IG9wdGltaXplIGFm
dGVyIGEgd2hpbGUuCisgICAgaW50MzJfdCB0YXJnZXRWYWx1ZSA9CisgICAgICAgIEV4ZWN1dGlv
bkNvdW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KAorICAg
ICAgICAgICAgbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Y291bnRlclZhbHVlRm9yT3B0aW1p
emVBZnRlckxvbmdXYXJtVXAoKSwKKyAgICAgICAgICAgIG1faml0LmJhc2VsaW5lQ29kZUJsb2Nr
KCkpOworICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMigtdGFyZ2V0VmFs
dWUpLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJs
eUhlbHBlcnM6OkltbTMyKHRhcmdldFZhbHVlKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0aW9uQWN0aXZlVGhyZXNo
b2xkKCkpKTsKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoRXhlY3V0
aW9uQ291bnRlcjo6Zm9ybWF0dGVkVG90YWxDb3VudCh0YXJnZXRWYWx1ZSkpLCBBc3NlbWJseUhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVj
dXRpb25Ub3RhbENvdW50KCkpKTsKICAgICAKICAgICBkb25lQWRqdXN0aW5nLmxpbmsoJm1faml0
KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEg
KzI5LDE3IEBACiAKICNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQogI2lu
Y2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1
ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KICNlbmRpZgogCisvLyBVbmNvbW1lbnQgdG8gY3Jl
YXRlIGFuIGFydGlmaWNpYWwgZXhlY3V0YWJsZSBtZW1vcnkgdXNhZ2UgbGltaXQuIFRoaXMgbGlt
aXQKKy8vIGlzIGltcGVyZmVjdCBhbmQgaXMgcHJpbWFyaWx5IHVzZWZ1bCBmb3IgdGVzdGluZyB0
aGUgVk0ncyBhYmlsaXR5IHRvIGhhbmRsZQorLy8gb3V0LW9mLWV4ZWN1dGFibGUtbWVtb3J5IHNp
dHVhdGlvbnMuCisvLyAjZGVmaW5lIEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUIDEwMDAwMDAKKwog
I2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC02NSw2ICs3
MSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIAogICAgICAgICBudW1QYWdlcyA9IG5ld051bVBh
Z2VzOwogICAgICAgICAKKyNpZmRlZiBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVAorICAgICAgICBp
ZiAoYnl0ZXNBbGxvY2F0ZWQoKSA+PSBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworI2VuZGlmCisgICAgICAgIAogICAgICAgICBQYWdlUmVzZXJ2YXRpb24g
cmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmUobnVtUGFnZXMgKiBwYWdlU2l6
ZSgpLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJM
RSwgdHJ1ZSk7CiAgICAgICAgIGlmICghcmVzZXJ2YXRpb24pCiAgICAgICAgICAgICBDUkFTSCgp
OwpAQCAtMTA5LDcgKzEyMCwyNSBAQCBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQo
KSBjb25zCiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgp
CiB7CisjaWZkZWYgRVhFQ1VUQUJMRV9NRU1PUllfTElNSVQKKyAgICByZXR1cm4gYWxsb2NhdG9y
LT5ieXRlc0FsbG9jYXRlZCgpID4gRVhFQ1VUQUJMRV9NRU1PUllfTElNSVQgLyAyOworI2Vsc2UK
ICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0
b3I6Om1lbW9yeVByZXNzdXJlTXVsdGlwbGllcihzaXplX3QgYWRkZWRNZW1vcnlVc2FnZSkKK3sK
KyNpZmRlZiBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVAorICAgIHNpemVfdCBieXRlc0FsbG9jYXRl
ZCA9IGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSArIGFkZGVkTWVtb3J5VXNhZ2U7CisgICAg
aWYgKGJ5dGVzQWxsb2NhdGVkID49IEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUKQorICAgICAgICBi
eXRlc0FsbG9jYXRlZCA9IEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxkb3VibGU+KEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUKSAvCisgICAgICAgIChFWEVD
VVRBQkxFX01FTU9SWV9MSU1JVCAtIGJ5dGVzQWxsb2NhdGVkKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGFkZGVkTWVtb3J5VXNhZ2UpOworICAgIHJldHVybiAxLjA7CisjZW5kaWYKIH0KIAog
UGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjph
bGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlE
LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMTA5Njc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOCw2ICsxMDgsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCB1bmRl
ck1lbW9yeVByZXNzdXJlKCk7CiAgICAgCisgICAgc3RhdGljIGRvdWJsZSBtZW1vcnlQcmVzc3Vy
ZU11bHRpcGxpZXIoc2l6ZV90IGFkZGVkTWVtb3J5VXNhZ2UpOworICAgIAogI2lmIEVOQUJMRShN
RVRBX0FMTE9DQVRPUl9QUk9GSUxFKQogICAgIHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlKCk7CiAj
ZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
Rml4ZWRWTVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkocmV2aXNpb24gMTA5Njc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDE3IEBAIGJvb2wgRXhlY3V0YWJsZUFs
bG9jYXRvcjo6dW5kZXJNZW1vcnlQcmUKICAgICByZXR1cm4gc3RhdGlzdGljcy5ieXRlc0FsbG9j
YXRlZCA+IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCAvIDI7CiB9CiAKK2RvdWJsZSBFeGVjdXRh
YmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3VyZU11bHRpcGxpZXIoc2l6ZV90IGFkZGVkTWVtb3J5
VXNhZ2UpCit7CisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0aXN0aWNzID0gYWxs
b2NhdG9yLT5jdXJyZW50U3RhdGlzdGljcygpOworICAgIEFTU0VSVChzdGF0aXN0aWNzLmJ5dGVz
QWxsb2NhdGVkIDw9IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCk7CisgICAgc2l6ZV90IGJ5dGVz
QWxsb2NhdGVkID0gc3RhdGlzdGljcy5ieXRlc0FsbG9jYXRlZCArIGFkZGVkTWVtb3J5VXNhZ2U7
CisgICAgaWYgKGJ5dGVzQWxsb2NhdGVkID49IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCkKKyAg
ICAgICAgYnl0ZXNBbGxvY2F0ZWQgPSBzdGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQ7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhdGlzdGljcy5ieXRlc1Jlc2VydmVkKSAvCisgICAg
ICAgIChzdGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQgLSBieXRlc0FsbG9jYXRlZCk7Cit9CisKIFBh
c3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxs
b2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQq
IG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUlu
Qnl0ZXMsIG93bmVyVUlEKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDEwOTY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzE1LDYgKzcxNSwxMCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUo
Q29kZVB0ciogZnVuCiAgICAgCiAgICAgQ29kZVJlZiByZXN1bHQgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKTsKICAgICAKKyAgICBtX2dsb2JhbERhdGEtPm1hY2hpbmVDb2RlQnl0ZXNQZXJC
eXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5hZGQoCisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJs
ZT4ocmVzdWx0LnNpemUoKSkgLworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKKyAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJP
U0UpCiAgICAgZGF0YUxvZygiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5c
biIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCByZXN1
bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyOSwxMiAr
MTkyOSwxNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAg
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOwogCisgICAgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOworICAgIAog
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgZGF0YUxvZygiJXA6IEVudGVyZWQgb3B0
aW1pemVfZnJvbV9sb29wIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNvZGVC
bG9jaywgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigpLCBjb2RlQmxvY2stPnJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCksIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
KCkpOwogI2VuZGlmCiAKKyAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRo
cmVzaG9sZFJlYWNoZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKGNvZGVCbG9jay0+
aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CiAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGxvb3AgT1NSIGludG8gJXAoJXApIHdpdGgg
c3VjY2Vzcy9mYWlsICV1LyV1LlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigp
LCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSk7CkBA
IC0yMDMzLDYgKzIwMzcsOSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9m
cm9tCiAgICAgZGF0YUxvZygiRW50ZXJlZCBvcHRpbWl6ZV9mcm9tX3JldCB3aXRoIGV4ZWN1dGVD
b3VudGVyID0gJWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gJXUsIG9wdGltaXphdGlv
bkRlbGF5Q291bnRlciA9ICV1XG4iLCBjb2RlQmxvY2stPmppdEV4ZWN1dGVDb3VudGVyKCksIGNv
ZGVCbG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgY29kZUJsb2NrLT5vcHRpbWl6
YXRpb25EZWxheUNvdW50ZXIoKSk7CiAjZW5kaWYKIAorICAgIGlmICghY29kZUJsb2NrLT5jaGVj
a0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgZGF0YUxvZygiUmV0dXJuaW5nIGZyb20gb2xkIEpJ
VCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxhY2VtZW50ICVwKCVwKSwgd2l0aCBzdWNj
ZXNzL2ZhaWwgJXUvJXUiLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgY29k
ZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDYgKzI3MCwxMyBAQCBpbmxpbmUgYm9vbCBzaG91
bGRKSVQoRXhlY1N0YXRlKiBleGVjKQogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkg
dG8gT1NSLgogaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBpZiAoIWNvZGVCbG9jay0+Y2hl
Y2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CisgICAgICAgIGRhdGFMb2coIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuXG4i
KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKICAgICBD
b2RlQmxvY2s6OkpJVENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVCbG9jay0+aml0Q29t
cGlsZShleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2Fz
ZSBDb2RlQmxvY2s6OkFscmVhZHlDb21waWxlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZp
c2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIGVuZAog
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBpZiBKSVRfRU5B
QkxFRAogICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICAgICAgYmFkZGlzIGlu
Y3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBdLCAuY29udGludWUK
KyAgICAgICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50
ZXIgKyBFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICAgICAg
YWN0aW9uKCkKICAgICAuY29udGludWU6CiAgICAgZW5kCkBAIC00MjksNyArNDI5LDcgQEAgbWFj
cm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAgIGVuZAogICAgIGNvZGVC
bG9ja0dldHRlcih0MSkKICAgICBpZiBKSVRfRU5BQkxFRAotICAgICAgICBiYWRkaXMgNSwgQ29k
ZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFdLCAuY29udGludWUKKyAgICAgICAgYmFk
ZGlzIDUsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgRXhlY3V0aW9uQ291bnRl
cjo6bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCiAgICAgICAgIGNDYWxsMihvc3JTbG93UGF0aCwg
Y2ZyLCBQQykKICAgICAgICAgbW92ZSB0MSwgY2ZyCiAgICAgICAgIGJ0cHogdDAsIC5yZWNvdmVy
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAko
cmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogI2lmIEVOQUJM
RShSRUdFWFBfVFJBQ0lORykKQEAgLTIwMSw2ICsyMDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgU21hbGxTdHJpbmdzIHNtYWxsU3RyaW5nczsKICAgICAgICAgTnVtZXJpY1N0cmluZ3Mg
bnVtZXJpY1N0cmluZ3M7CiAgICAgICAgIERhdGVJbnN0YW5jZUNhY2hlIGRhdGVJbnN0YW5jZUNh
Y2hlOworICAgICAgICBXVEY6OlNpbXBsZVN0YXRzIG1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29k
ZVdvcmRGb3JCYXNlbGluZUpJVDsKICAgICAgICAgVmVjdG9yPENvZGVCbG9jayo+IGNvZGVCbG9j
a3NCZWluZ0NvbXBpbGVkOwogICAgICAgICB2b2lkIHN0YXJ0ZWRDb21waWxpbmcoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTUgKzUyLDEyIEBA
IHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGkKIAogdW5zaWduZWQgbWF4
aW11bUlubGluaW5nRGVwdGg7CiAKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9ySklU
QWZ0ZXJXYXJtVXA7Ci1pbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRKSVRBbnl0
aW1lU29vbjsKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9ySklUU29vbjsKLQotaW50
MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwOwotaW50MzJf
dCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKLWludDMy
X3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb247Ci1pbnQz
Ml90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbjsKLWludDMyX3QgZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbjsKK2ludDMyX3QgdGhyZXNo
b2xkRm9ySklUQWZ0ZXJXYXJtVXA7CitpbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247CisKK2lu
dDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcDsKK2ludDMyX3QgdGhyZXNob2xk
Rm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7CitpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXpl
U29vbjsKIAogaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcDsKIGludDMy
X3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsKQEAgLTE0MSwxNSArMTM4LDEy
IEBAIHZvaWQgaW5pdGlhbGl6ZU9wdGlvbnMoKQogICAgIAogICAgIFNFVChtYXhpbXVtSW5saW5p
bmdEZXB0aCwgNSk7CiAKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9ySklUQWZ0ZXJX
YXJtVXAsICAgICAtMTAwKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udEpJ
VEFueXRpbWVTb29uLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7Ci0gICAg
U0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckpJVFNvb24sICAgICAgICAgICAgLTEwMCk7Ci0K
LSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCwgICAg
IC0xMDAwKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxv
bmdXYXJtVXAsIC01MDAwKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9w
dGltaXplQW55dGltZVNvb24sIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKTsK
LSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uLCAgICAgICAgICAg
IC0xMDAwKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52
b2NhdGlvbiwgIDApOworICAgIFNFVCh0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCwgICAgIDEw
MCk7CisgICAgU0VUKHRocmVzaG9sZEZvckpJVFNvb24sICAgICAgICAgICAgMTAwKTsKKworICAg
IFNFVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwLCAgICAgMTAwMCk7CisgICAgU0VU
KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCA1MDAwKTsKKyAgICBTRVQodGhy
ZXNob2xkRm9yT3B0aW1pemVTb29uLCAgICAgICAgICAgIDEwMDApOwogCiAgICAgU0VUKGV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAgIDEpOwogICAgIFNFVChleGVjdXRpb25Db3Vu
dGVySW5jcmVtZW50Rm9yUmV0dXJuLCAxNSk7CkBAIC0xOTUsMTEgKzE4OSw5IEBAIHZvaWQgaW5p
dGlhbGl6ZU9wdGlvbnMoKQogICAgIAogICAgIFNFVChudW1iZXJPZkdDTWFya2VycywgY3B1c1Rv
VXNlKTsKIAotICAgIEFTU0VSVChleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVB
bnl0aW1lU29vbiA8PSBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcCk7Ci0gICAgQVNTRVJUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwIDw9IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAp
OwotICAgIEFTU0VSVChleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVw
IDw9IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbik7Ci0gICAgQVNTRVJUKGV4
ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAgPCAwKTsKLSAgICBBU1NF
UlQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uIDw9IGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24pOworICAgIEFTU0VSVCh0aHJlc2hvbGRG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwKTsKKyAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCA+PSB0aHJl
c2hvbGRGb3JPcHRpbWl6ZVNvb24pOworICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFm
dGVyV2FybVVwID49IDApOwogICAgIAogICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gdmFsdWUg
b2YgdGhlIHJlb3B0aW1pemF0aW9uIHJldHJ5IGNvdW50ZXIuIFRoaXMgaXMgc2ltcGx5CiAgICAg
Ly8gdGhlIGxhcmdlc3QgdmFsdWUgYXQgd2hpY2ggd2UgZG9uJ3Qgb3ZlcmZsb3cgdGhlIGV4ZWN1
dGUgY291bnRlciwgd2hlbiB1c2luZyBpdApAQCAtMjA3LDExICsxOTksMTEgQEAgdm9pZCBpbml0
aWFsaXplT3B0aW9ucygpCiAgICAgLy8gdXAgYmVpbmcgMTgsIHNvIHRoaXMgbG9vcCBpcyBub3Qg
c28gdGVycmlibGU7IGl0IHByb2JhYmx5IHRha2VzIHVwIH4xMDAgY3ljbGVzCiAgICAgLy8gdG90
YWwgb24gYSAzMi1iaXQgcHJvY2Vzc29yLgogICAgIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
TWF4ID0gMDsKLSAgICB3aGlsZSAoKHN0YXRpY19jYXN0PGludDY0X3Q+KGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKSA8PCAocmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXJNYXggKyAxKSkgPj0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQzMl90Pjo6bWluKCkpKQorICAgIHdoaWxlICgoc3RhdGljX2Nhc3Q8aW50NjRfdD4o
dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXApIDw8IChyZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlck1heCArIDEpKSA8PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptYXgoKSkpCiAgICAgICAgIHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyTWF4Kys7CiAgICAgCi0gICAgQVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90PihleGVjdXRp
b25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXJNYXgpIDwgMCk7Ci0gICAgQVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90
PihleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpID49IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSk7CisgICAgQVNTRVJUKChzdGF0aWNfY2Fz
dDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpID4gMCk7CisgICAgQVNTRVJUKChzdGF0aWNfY2FzdDxp
bnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXJNYXgpIDw9IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50MzJfdD46Om1heCgpKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpP
cHRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZp
c2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDE1ICszNywxMyBAQCBleHRlcm4gdW5zaWduZWQgbWF4aW11
bUZ1bmN0aW9uRm9yQ29uc3RyCiAKIGV4dGVybiB1bnNpZ25lZCBtYXhpbXVtSW5saW5pbmdEZXB0
aDsgLy8gRGVwdGggb2YgaW5saW5lIHN0YWNrLCBzbyAxID0gbm8gaW5saW5pbmcsIDIgPSBvbmUg
bGV2ZWwsIGV0Yy4KIAotZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9ySklU
QWZ0ZXJXYXJtVXA7Ci1leHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250
SklUQW55dGltZVNvb247Ci1leHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JK
SVRTb29uOwotCi1leHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6
ZUFmdGVyV2FybVVwOwotZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXA7Ci1leHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFs
dWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKLWV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNv
dW50ZXJWYWx1ZUZvck9wdGltaXplU29vbjsKLWV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb247CitleHRlcm4gaW50MzJfdCB0aHJlc2hv
bGRGb3JKSVRBZnRlcldhcm1VcDsKK2V4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247
CisKK2V4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA7CitleHRl
cm4gaW50MzJfdCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKK2V4dGVybiBp
bnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplU29vbjsKK2V4dGVybiBpbnQzMl90IHRocmVzaG9s
ZEZvck9wdGltaXplTmV4dEludm9jYXRpb247CiAKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNv
dW50ZXJJbmNyZW1lbnRGb3JMb29wOwogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlcklu
Y3JlbWVudEZvclJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2ltcGxl
U3RhdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NpbXBsZVN0
YXRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NpbXBsZVN0
YXRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2ltcGxlU3RhdHNfaAorI2RlZmlu
ZSBTaW1wbGVTdGF0c19oCisKKyNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKKworbmFtZXNwYWNl
IFdURiB7CisKKy8vIFNpbXBsZSBhbmQgY2hlYXAgd2F5IG9mIHRyYWNraW5nIHN0YXRpc3RpY3Mg
aWYgeW91J3JlIG5vdCB3b3JyaWVkIGFib3V0IGNob3BwaW5nIG9uCisvLyB0aGUgc3VtIG9mIHNx
dWFyZXMgKGkuZS4gdGhlIHN1bSBvZiBzcXVhcmVzIGlzIHVubGlrZWx5IHRvIGV4Y2VlZCAyXjUy
KS4KK2NsYXNzIFNpbXBsZVN0YXRzIHsKK3B1YmxpYzoKKyAgICBTaW1wbGVTdGF0cygpCisgICAg
ICAgIDogbV9jb3VudCgwKQorICAgICAgICAsIG1fc3VtKDApCisgICAgICAgICwgbV9zdW1PZlNx
dWFyZXMoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkKGRvdWJsZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIG1fY291bnQrKzsKKyAgICAgICAgbV9zdW0gKz0gdmFsdWU7CisgICAg
ICAgIG1fc3VtT2ZTcXVhcmVzICs9IHZhbHVlICogdmFsdWU7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9jb3VudDsKKyAg
ICB9CisgICAgCisgICAgZG91YmxlIGNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2NvdW50OworICAgIH0KKyAgICAKKyAgICBkb3VibGUgc3VtKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3N1bTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIHN1bU9mU3F1YXJl
cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdW1PZlNxdWFyZXM7CisgICAgfQor
ICAgIAorICAgIGRvdWJsZSBtZWFuKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N1
bSAvIG1fY291bnQ7CisgICAgfQorICAgIAorICAgIC8vIE5CLiBUaGlzIGdpdmVzIGEgYmlhc2Vk
IHZhcmlhbmNlIGFzIGl0IGRpdmlkZXMgYnkgdGhlIG51bWJlciBvZiBzYW1wbGVzIHJhdGhlcgor
ICAgIC8vIHRoYW4gdGhlIGRlZ3JlZXMgb2YgZnJlZWRvbS4gVGhpcyBpcyBmaW5lIG9uY2UgdGhl
IGNvdW50IGdyb3dzIGxhcmdlLCB3aGljaCBpbgorICAgIC8vIG91ciBjYXNlIHdpbGwgaGFwcGVu
IHJhdGhlciBxdWlja2x5LgorICAgIGRvdWJsZSB2YXJpYW5jZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobV9jb3VudCA8IDIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisg
ICAgICAgIC8vIENvbXB1dGUgPHheMj4gLSA8eD5eMgorICAgICAgICBkb3VibGUgc2Vjb25kTW9t
ZW50ID0gbV9zdW1PZlNxdWFyZXMgLyBtX2NvdW50OworICAgICAgICBkb3VibGUgZmlyc3RNb21l
bnQgPSBtX3N1bSAvIG1fY291bnQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4gc2Vjb25kTW9t
ZW50IC0gZmlyc3RNb21lbnQgKiBmaXJzdE1vbWVudDsKKyAgICB9CisgICAgCisgICAgLy8gTkIu
IFRoaXMgZ2l2ZXMgYSBiaWFzZWQgc3RhbmRhcmQgZGV2aWF0aW9uLiBTZWUgYWJvdmUuCisgICAg
ZG91YmxlIHN0YW5kYXJkRGV2aWF0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBz
cXJ0KHZhcmlhbmNlKCkpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fY291
bnQ7CisgICAgZG91YmxlIG1fc3VtOworICAgIGRvdWJsZSBtX3N1bU9mU3F1YXJlczsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gU2ltcGxlU3RhdHNfaAorCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0wNCAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEpJVCBoZXVyaXN0aWNzIHNob3VsZCBiZSBoeXBl
cmJvbGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
MDA1NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5MjIyNjA+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSB0aGVy
ZSdzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL1NpbXBsZVN0YXRzLmg6IEFkZGVkLgorCiAyMDEyLTAzLTAzICBCZW5qYW1pbiBQb3VsYWlu
ICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgdGhlIHVudXNlZCBmdW5j
dGlvbiBXZWJDb3JlOjpwcm90b2NvbElzSW5IVFRQRmFtaWx5KCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TaW1wbGVTdGF0cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TaW1wbGVTdGF0cy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NpbXBsZVN0YXRz
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9TaW1w
bGVTdGF0c19oCisjZGVmaW5lIFdlYkNvcmVfRldEX1NpbXBsZVN0YXRzX2gKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9TaW1wbGVTdGF0cy5oPgorI2VuZGlmCg==
</data>
<flag name="commit-queue"
          id="132895"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130021</attachid>
            <date>2012-03-04 02:15:25 -0800</date>
            <delta_ts>2012-03-04 12:00:24 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>hyperbolicjit_patch_3.diff</filename>
            <type>text/plain</type>
            <size>54554</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBA
QAorMjAxMi0wMy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpJVCBoZXVyaXN0aWNzIHNob3VsZCBiZSBoeXBlcmJvbGljCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDA1NQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMTA5MjIyNjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBBZGRlZCB0cmFja2luZyBvZiB0aGUgYW1vdW50IG9mIGV4ZWN1dGFibGUg
bWVtb3J5IHR5cGljYWxseSB1c2VkIGZvciBhIGJ5dGVjb2RlCisgICAgICAgIGluc3RydWN0aW9u
LiBNb2RpZmllZCB0aGUgZXhlY3V0aW9uIGNvdW50ZXIgc2NoZW1lIHRvIHVzZSB0aGlzLCBhbmQg
dGhlIGFtb3VudAorICAgICAgICBvZiBmcmVlIG1lbW9yeSwgdG8gZGV0ZXJtaW5lIGhvdyBsb25n
IHRvIHdhaXQgYmVmb3JlIGludm9raW5nIHRoZSBKSVQuCisgICAgICAgIAorICAgICAgICBUaGUg
cmVzdWx0IGlzIHRoYXQgZXZlbiBpZiB3ZSBib21iIHRoZSBWTSB3aXRoIG1vcmUgY29kZSB0aGFu
IGNhbiBmaXQgaW4gb3VyCisgICAgICAgIGV4ZWN1dGFibGUgbWVtb3J5IHBvb2wsIHdlIHN0aWxs
IGtlZXAgcnVubmluZyBhbmQgYWxtb3N0IG5ldmVyIHJ1biBvdXQgb2YKKyAgICAgICAgZXhlY3V0
YWJsZSBtZW1vcnkgLSB3aGljaCBlbnN1cmVzIHRoYXQgaWYgd2UgaGF2ZSB0byBKSVQgc29tZXRo
aW5nIGNyaXRpY2FsLCB0aGVuCisgICAgICAgIHdlJ2xsIGxpa2VseSBoYXZlIGVub3VnaCBtZW1v
cnkgdG8gZG8gc28uIFRoaXMgYWxzbyBkb2VzIG5vdCByZWdyZXNzIHBlcmZvcm1hbmNlCisgICAg
ICAgIG9uIHRoZSB0aHJlZSBtYWluIGJlbmNobWFya3MuCisgICAgICAgIAorICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1c2VzT3Bjb2RlKToKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmRvbnRKSVRBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aml0QWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdFNvb24p
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXApOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25n
V2FybVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZKSVRFeGVjdXRlQ291
bnRlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRl
cik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVU
aHJlc2hvbGQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0aW9u
VG90YWxDb3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0RXhlY3V0ZUNvdW50ZXIp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRS
ZWFjaGVkKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9u
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkb250T3B0aW1pemVBbnl0aW1lU29vbik6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlcldhcm1VcCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdXYXJtVXApOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om9wdGltaXplU29vbik6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9u
Q291bnRlcjo6RXhlY3V0aW9uQ291bnRlcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50
ZXI6OmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KToKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6c2V0TmV3VGhyZXNob2xkKToKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291
bnRlcjo6ZGVmZXJJbmRlZmluaXRlbHkpOgorICAgICAgICAoSlNDOjpFeGVjdXRpb25Db3VudGVy
OjphcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljcyk6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNv
dW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KToKKyAgICAg
ICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6aGFzQ3Jvc3NlZFRocmVzaG9sZCk6CisgICAgICAg
IChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6OnNldFRocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkV4
ZWN1dGlvbkNvdW50ZXI6OnJlc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3Vu
dGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEV4ZWN1dGlvbkNvdW50ZXIp
OgorICAgICAgICAoSlNDOjpFeGVjdXRpb25Db3VudGVyOjpmb3JtYXR0ZWRUb3RhbENvdW50KToK
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdP
U1JFeGl0Q29tcGlsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdCk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZU5ld1NwYWNl
KToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3Vy
ZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpt
ZW1vcnlQcmVzc3VyZU11bHRpcGxpZXIpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmg6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6
CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNzdXJlTXVsdGlw
bGllcik6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhl
dXJpc3RpY3MpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKEpTR2xvYmFsRGF0
YSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKE9wdGlvbnMpOgor
ICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplT3B0aW9ucyk6CisgICAgICAgICogcnVu
dGltZS9PcHRpb25zLmg6CisgICAgICAgIChPcHRpb25zKToKKyAgICAgICAgKiB3dGYvU2ltcGxl
U3RhdHMuaDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAoU2ltcGxlU3RhdHMpOgor
ICAgICAgICAoV1RGOjpTaW1wbGVTdGF0czo6U2ltcGxlU3RhdHMpOgorICAgICAgICAoV1RGOjpT
aW1wbGVTdGF0czo6YWRkKToKKyAgICAgICAgKFdURjo6U2ltcGxlU3RhdHM6Om9wZXJhdG9yISk6
CisgICAgICAgIChXVEY6OlNpbXBsZVN0YXRzOjpjb3VudCk6CisgICAgICAgIChXVEY6OlNpbXBs
ZVN0YXRzOjpzdW0pOgorICAgICAgICAoV1RGOjpTaW1wbGVTdGF0czo6c3VtT2ZTcXVhcmVzKToK
KyAgICAgICAgKFdURjo6U2ltcGxlU3RhdHM6Om1lYW4pOgorICAgICAgICAoV1RGOjpTaW1wbGVT
dGF0czo6dmFyaWFuY2UpOgorICAgICAgICAoV1RGOjpTaW1wbGVTdGF0czo6c3RhbmRhcmREZXZp
YXRpb24pOgorCiAyMDEyLTAzLTA0ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEwOTY3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBA
QCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmNwcAogICAgIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHAKICAgICBieXRlY29kZS9ERkdFeGl0UHJv
ZmlsZS5jcHAKKyAgICBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAogICAgIGJ5dGVjb2Rl
L0dldEJ5SWRTdGF0dXMuY3BwCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmNwcAogICAgIGJ5dGVj
b2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwOTY3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5
NSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXZhbENvZGVDYWNoZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0aW9uQ291bnRlci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRpb25Db3VudGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeHByZXNz
aW9uUmFuZ2VJbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuaCBcCkBAIC03MTYsNiArNzE4LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TZW50aW5lbExpbmtlZExpc3QuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9TSEExLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9TSEExLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2ltcGxlU3RhdHMuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TaW5nbHlMaW5rZWRMaXN0LmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvU3BlY3RydW0uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9TdGFja0JvdW5kcy5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlz
aW9uIDEwOTY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmNwcCBcCiAgICAgYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBcCiAgICAgYnl0ZWNv
ZGUvREZHRXhpdFByb2ZpbGUuY3BwIFwKKyAgICBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNw
cCBcCiAgICAgYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgXAogICAgIGJ5dGVjb2RlL0p1bXBU
YWJsZS5jcHAgXAogICAgIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvagkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NzgsNiArMTQ3OCwxMCBAQAogCQkJTmFtZT0iYnl0ZWNvZGUi
CiAJCQk+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcRXhlY3V0
aW9uQ291bnRlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIgog
CQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw5IEBA
CiAJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBEMTE0QkJD
NUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTVGMEY0MTREMTA2MzkwMEFDNzY0OSAv
KiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNTVGMEYxMTREMTA2MzYwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCAqLzsgfTsK
IAkJMEY1NUYwRjUxNEQxMDYzQzAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTVGMEYyMTREMTA2MzYwMEFDNzY0
OSAvKiBBYnN0cmFjdFBDLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY1NkExRDMxNTAwMEYzNTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTZBMUQx
MTUwMDBGMzEwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY1NkExRDUxNTAwMUNGNDAwMjk5MkIx
IC8qIEV4ZWN1dGlvbkNvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY1NkExRDQxNTAwMUNGMjAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50
ZXIuY3BwICovOyB9OworCQkwRjU2QTFENzE1MDAyOEJCMDAyOTkyQjEgLyogU2ltcGxlU3RhdHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTZBMUQ2
MTUwMDI4QjkwMDI5OTJCMSAvKiBTaW1wbGVTdGF0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUYwOENGMTQ2Qzc2MzMwMDA0NzJBOSAvKiBV
bmNvbmRpdGlvbmFsRmluYWxpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZp
bmFsaXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcyMTQz
RkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3NTE0M0ZDRDM3MDA2OEI3
N0MgLyogREZHT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjIwMTcxMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NzQsNiArOTc3
LDkgQEAKIAkJMEY0NjgwRDExNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSG9zdENhbGxSZXR1cm5WYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1RjBGMTE0RDEwNjM2MDBBQzc2NDkg
LyogQWJzdHJhY3RQQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
YnN0cmFjdFBDLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NUYwRjIxNEQx
MDYzNjAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQWJzdHJhY3RQQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU2QTFE
MTE1MDAwRjMxMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFeGVjdXRpb25Db3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNTZBMUQ0MTUwMDFDRjIwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGlvbkNvdW50ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU2QTFENjE1MDAyOEI5MDAyOTky
QjEgLyogU2ltcGxlU3RhdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lt
cGxlU3RhdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RjA4Q0MxNDZCRTYw
MjAwMDQ3MkE5IC8qIERGR0J5dGVDb2RlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQnl0ZUNvZGVDYWNoZS5oOyBwYXRoID0gZGZnL0RGR0J5dGVDb2RlQ2FjaGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5
IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVW5jb25kaXRpb25hbEZpbmFsaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdFN0YXRlLmNwcDsg
cGF0aCA9IGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIzMTQsNiArMjMyMCw3IEBACiAJCQkJQTdDNDBDMDgxMzBCMDU3RDAwRDAwMkExIC8q
IFNlbnRpbmVsTGlua2VkTGlzdC5oICovLAogCQkJCTc2RkI5RjEwMTJFODUxOTYwMDUxQTJFQiAv
KiBTSEExLmNwcCAqLywKIAkJCQk3NkZCOUYwRTEyRTg1MTg2MDA1MUEyRUIgLyogU0hBMS5oICov
LAorCQkJCTBGNTZBMUQ2MTUwMDI4QjkwMDI5OTJCMSAvKiBTaW1wbGVTdGF0cy5oICovLAogCQkJ
CUE3QzQwQzA5MTMwQjA1N0QwMEQwMDJBMSAvKiBTaW5nbHlMaW5rZWRMaXN0LmggKi8sCiAJCQkJ
MEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovLAogCQkJCTBGMkU1
QkY1MTQ2MzU3RDIwMDNFQjJFQiAvKiBTcGVjdHJ1bS5oICovLApAQCAtMjc4OCw2ICsyNzk1LDgg
QEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjU2QTFENDE1MDAxQ0YyMDAyOTky
QjEgLyogRXhlY3V0aW9uQ291bnRlci5jcHAgKi8sCisJCQkJMEY1NkExRDExNTAwMEYzMTAwMjk5
MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCAqLywKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5
ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0Ex
NEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKIAkJ
CQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3Bw
ICovLApAQCAtMzQwOSw2ICszNDE4LDggQEAKIAkJCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
NTQ2OTAxNEZBREE3QjAwMkMyOTg5IC8qIFJlZkNvdW50ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYwNzc2QkYxNEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjU2QTFEMzE1MDAwRjM1MDAyOTkyQjEgLyogRXhlY3V0aW9u
Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1NkExRDcxNTAwMjhCQjAwMjk5MkIxIC8q
IFNpbXBsZVN0YXRzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQwMTgsNiArNDAyOSw3IEBACiAJCQkJ
MEZGRkM5NUYxNEVGOTBCQjAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2N0Qx
NEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEY1NkExRDUxNTAwMUNGNDAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NzMsNyAr
MjQ3MywzOCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMoKQogfQogI2VuZGlm
CiAKLSNpZm5kZWYgTkRFQlVHCitzaXplX3QgQ29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29k
ZVNpemUoKQoreworICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgZnJvbSBDb2RlQmxvY2s6OkNv
ZGVCbG9jayBiZWZvcmUgZWl0aGVyIG1fZ2xvYmFsRGF0YSBvciB0aGUKKyAgICAvLyBpbnN0cnVj
dGlvbnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLiBJdCdzIE9LIHRvIHJldHVybiAwIGJlY2F1c2Ug
d2hhdCB3aWxsIHJlYWxseQorICAgIC8vIG1hdHRlciBpcyB0aGUgcmVjb21wdXRhdGlvbiBvZiB0
aGlzIHZhbHVlIHdoZW4gdGhlIHNsb3cgcGF0aCBpcyB0cmlnZ2VyZWQuCisgICAgaWYgKCFtX2ds
b2JhbERhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmICghbV9nbG9iYWxEYXRh
LT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQpCisgICAgICAg
IHJldHVybiAwOyAvLyBJdCdzIGFzIGdvb2Qgb2YgYSBwcmVkaWN0aW9uIGFzIHdlJ2xsIGdldC4K
KyAgICAKKyAgICAvLyBCZSBjb25zZXJ2YXRpdmU6IHJldHVybiBhIHNpemUgdGhhdCB3aWxsIGJl
IGFuIG92ZXJlc3RpbWF0aW9uIDg0JSBvZiB0aGUgdGltZS4KKyAgICBkb3VibGUgbXVsdGlwbGll
ciA9IG1fZ2xvYmFsRGF0YS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2Vs
aW5lSklULm1lYW4oKSArCisgICAgICAgIG1fZ2xvYmFsRGF0YS0+bWFjaGluZUNvZGVCeXRlc1Bl
ckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULnN0YW5kYXJkRGV2aWF0aW9uKCk7CisgICAgCisg
ICAgLy8gQmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCBib2d1cyBtdWx0aXBpZXJzLiBTaWxl
bnRseSBkb2luZyB0aGUgIndyb25nIiB0aGluZworICAgIC8vIGhlcmUgaXMgT0ssIHNpbmNlIHRo
aXMgd2hvbGUgbWV0aG9kIGlzIGp1c3QgYSBoZXVyaXN0aWMuCisgICAgaWYgKG11bHRpcGxpZXIg
PCAwIHx8IG11bHRpcGxpZXIgPiAxMDAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBk
b3VibGUgZG91YmxlUmVzdWx0ID0gbXVsdGlwbGllciAqIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsK
KyAgICAKKyAgICAvLyBCZSBldmVuIG1vcmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCB2YWx1
ZXMgdGhhdCB3b24ndCBmaXQgaW50byBhIHNpemVfdC4gSWYKKyAgICAvLyB0aGUgZnVuY3Rpb24g
aXMgc28gaHVnZSB0aGF0IHdlIGNhbid0IGV2ZW4gZml0IGl0IGludG8gdmlydHVhbCBtZW1vcnkg
dGhlbiB3ZQorICAgIC8vIHNob3VsZCBwcm9iYWJseSBoYXZlIHNvbWUgb3RoZXIgZ3VhcmRzIGlu
IHBsYWNlIHRvIHByZXZlbnQgdXMgZnJvbSBldmVuIGdldHRpbmcKKyAgICAvLyB0byB0aGlzIHBv
aW50LgorICAgIGlmIChkb3VibGVSZXN1bHQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46
Om1heCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihkb3VibGVSZXN1bHQpOworfQorCiBib29sIENvZGVCbG9jazo6dXNlc09wY29kZShP
cGNvZGVJRCBvcGNvZGVJRCkKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBnbG9i
YWxEYXRhKCktPmludGVycHJldGVyOwpAQCAtMjQ5OCw2ICsyNTI5LDUgQEAgYm9vbCBDb2RlQmxv
Y2s6OnVzZXNPcGNvZGUoT3Bjb2RlSUQgb3BjbwogICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0K
LSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEwOTY3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiAr
NDEsNyBAQAogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5o
IgogI2luY2x1ZGUgIkV2YWxDb2RlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVy
LmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUgIkdsb2JhbFJl
c29sdmVJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKQEAgLTM0NCw2ICszNDUsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYg
aW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgY29uc3Qg
UmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgCisgICAgICAgIHNpemVfdCBwcmVkaWN0ZWRN
YWNoaW5lQ29kZVNpemUoKTsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgdXNlc09wY29kZShPcGNv
ZGVJRCk7CiAKICAgICAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIHsgcmV0dXJuIG1f
aW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQpAQCAtODMyLDI0ICs4MzUsMjkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiBKSVR0aW5nIGtp
Y2tzIGluLCBpbiBhIG1peGVkIG1vZGUKICAgICAgICAgLy8gZXhlY3V0aW9uIHdvcmxkLgogICAg
ICAgICAKKyAgICAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZv
aWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9sbGludEV4
ZWN1dGVDb3VudGVyID0gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udEpJVEFu
eXRpbWVTb29uOworICAgICAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZp
bml0ZWx5KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgaml0QWZ0ZXJXYXJt
VXAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSBPcHRp
b25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JKSVRBZnRlcldhcm1VcDsKKyAgICAgICAgICAg
IG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUQWZ0ZXJXYXJtVXAsIHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2
b2lkIGppdFNvb24oKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIgPSBPcHRpb25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JKSVRTb29uOworICAgICAgICAg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JKSVRTb29uLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaW50MzJf
dCBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgICAgIHJldHVybiBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIubV9jb3VudGVyOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBG
dW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHdoZW4gdGllcmVkIGNvbXBpbGF0aW9uIGtpY2tzIGlu
LiBUaGlzCkBAIC04ODgsMzEgKzg5Niw0MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAg
ICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7Cisg
ICAgICAgICAgICByZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1V
cCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJW
YWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyKCk7CisgICAgICAgICAgICByZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVB
ZnRlckxvbmdXYXJtVXAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIo
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gJm1faml0RXhlY3V0ZUNvdW50ZXI7Cisg
ICAgICAgICAgICByZXR1cm4gJm1faml0RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVyOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0
ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1
dGVDb3VudGVyKTsgfQorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0
ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1
dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX2NvdW50ZXIp
OyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVU
aHJlc2hvbGQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1
dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX2FjdGl2ZVRo
cmVzaG9sZCk7IH0KKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlv
blRvdGFsQ291bnQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4
ZWN1dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX3RvdGFs
Q291bnQpOyB9CiAKLSAgICAgICAgaW50MzJfdCBqaXRFeGVjdXRlQ291bnRlcigpIGNvbnN0IHsg
cmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXI7IH0KKyAgICAgICAgaW50MzJfdCBqaXRFeGVjdXRl
Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVyOyB9
CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSBj
b25zdCB7IHJldHVybiBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsgfQogICAgICAgICAKKyAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhlIG9wdGltaXphdGlvbiB0aHJlc2hvbGQgaGFzIGJlZW4gcmVh
Y2hlZCwgYW5kIGlmIG5vdCwKKyAgICAgICAgLy8gYWRqdXN0IHRoZSBoZXVyaXN0aWNzIGFjY29y
ZGluZ2x5LiBSZXR1cm5zIHRydWUgaWYgdGhlIHRocmVzaG9sZCBoYXMKKyAgICAgICAgLy8gYmVl
biByZWFjaGVkLgorICAgICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFj
aGVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIu
Y2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJp
Z2dlciB0byBmaXJlLiBUaGlzIGlzCiAgICAgICAgIC8vIHJhcmVseSB3aXNlLCBzaW5jZSBvcHRp
bWl6YXRpb24gdHJpZ2dlcnMgYXJlIHR5cGljYWxseSBtb3JlCiAgICAgICAgIC8vIGV4cGVuc2l2
ZSB0aGFuIGV4ZWN1dGluZyBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4
dEludm9jYXRpb24oKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVy
ID0gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlv
bjsKKyAgICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKDAsIHRo
aXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVu
dCBvcHRpbWl6YXRpb24gZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdApAQCAtOTIyLDcg
Kzk0MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyB0aGUgZnV0dXJlIGFzIHdlbGwu
CiAgICAgICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24oKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyID0gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlclZh
bHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb247CisgICAgICAgICAgICBtX2ppdEV4ZWN1dGVD
b3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IC8vIENhbGwgdGhpcyB0byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8gaXRzIHN0YXJ0aW5n
IHN0YXRlLApAQCAtOTMzLDE0ICs5NTEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8v
IGNvdW50ZXIgdGhhdCB0aGlzIGNvcnJlc3BvbmRzIHRvIGlzIGFsc28gYXZhaWxhYmxlIGRpcmVj
dGx5LgogICAgICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcCgpOworICAgICAgICAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hv
bGQoY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLCB0aGlzKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIGFuIG9wdGltaXphdGlv
biB0cmlnZ2VyIHRvIGZpcmUgb25seSBhZnRlcgogICAgICAgICAvLyBhIGxvdCBvZiB3YXJtLXVw
LgogICAgICAgICB2b2lkIG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKICAgICAgICAgewotICAg
ICAgICAgICAgbV9qaXRFeGVjdXRlQ291bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0
ZXJMb25nV2FybVVwKCk7CisgICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1Ro
cmVzaG9sZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpLCB0aGlzKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGNhdXNlIGFuIG9w
dGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUgc29vbiwgYnV0CkBAIC05NjMsNyArOTgxLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAgICAg
ICB2b2lkIG9wdGltaXplU29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1faml0RXhlY3V0
ZUNvdW50ZXIgPSBPcHRpb25zOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24g
PDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAgICAgICAgICAgIG1faml0RXhlY3V0
ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplU29v
biA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCB0aGlzKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgLy8gVGhlIHNwZWN1bGF0aXZlIEpJVCB0cmFja3MgaXRzIHN1Y2Nlc3Mg
cmF0ZSwgc28gdGhhdCB3ZSBjYW4KQEAgLTEyMDQsMTMgKzEyMjIsMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAgICAg
Ci0gICAgICAgIGludDMyX3QgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICBFeGVjdXRp
b25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKICAgICAgICAgCi0gICAgICAgIGludDMy
X3QgbV9qaXRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4
ZWN1dGVDb3VudGVyOworICAgICAgICBpbnQzMl90IG1fdG90YWxKSVRFeGVjdXRpb25zOwogICAg
ICAgICB1aW50MzJfdCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7CiAgICAgICAgIHVpbnQz
Ml90IG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsKLSAgICAgICAgdWludDhfdCBtX29wdGltaXph
dGlvbkRlbGF5Q291bnRlcjsKLSAgICAgICAgdWludDhfdCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyOworICAgICAgICB1aW50MTZfdCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsKKyAg
ICAgICAgdWludDE2X3QgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKICAgICAgICAgCiAg
ICAgICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKKworI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworRXhlY3V0aW9uQ291bnRlcjo6
RXhlY3V0aW9uQ291bnRlcigpCit7CisgICAgcmVzZXQoKTsKK30KKworYm9vbCBFeGVjdXRpb25D
b3VudGVyOjpjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICBpZiAoaGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoc2V0VGhyZXNob2xkKGNvZGVCbG9jaykpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFeGVj
dXRpb25Db3VudGVyOjpzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIHJlc2V0KCk7CisgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSB0
aHJlc2hvbGQ7CisgICAgc2V0VGhyZXNob2xkKGNvZGVCbG9jayk7Cit9CisKK3ZvaWQgRXhlY3V0
aW9uQ291bnRlcjo6ZGVmZXJJbmRlZmluaXRlbHkoKQoreworICAgIG1fdG90YWxDb3VudCA9IDA7
CisgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
YXgoKTsKKyAgICBtX2NvdW50ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4o
KTsKK30KKworZG91YmxlIEV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0
aWNzKGludDMyX3QgdmFsdWUsIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGRvdWJsZSBt
dWx0aXBsaWVyID0KKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1cmVN
dWx0aXBsaWVyKAorICAgICAgICAgICAgY29kZUJsb2NrLT5wcmVkaWN0ZWRNYWNoaW5lQ29kZVNp
emUoKSk7CisgICAgQVNTRVJUKG11bHRpcGxpZXIgPj0gMS4wKTsKKyAgICByZXR1cm4gbXVsdGlw
bGllciAqIHZhbHVlOworfQorCitpbnQzMl90IEV4ZWN1dGlvbkNvdW50ZXI6OmFwcGx5TWVtb3J5
VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KAorICAgIGludDMyX3QgdmFsdWUsIENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIGRvdWJsZSBkb3VibGVSZXN1bHQgPSBhcHBseU1lbW9y
eVVzYWdlSGV1cmlzdGljcyh2YWx1ZSwgY29kZUJsb2NrKTsKKyAgICAKKyAgICBBU1NFUlQoZG91
YmxlUmVzdWx0ID49IDApOworICAgIAorICAgIGlmIChkb3VibGVSZXN1bHQgPiBzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50MzJfdD46Om1heCgpOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQz
Ml90Pihkb3VibGVSZXN1bHQpOworfQorCitib29sIEV4ZWN1dGlvbkNvdW50ZXI6Omhhc0Nyb3Nz
ZWRUaHJlc2hvbGQoQ29kZUJsb2NrKiBjb2RlQmxvY2spIGNvbnN0Cit7CisgICAgLy8gVGhpcyBj
aGVja3MgaWYgdGhlIGN1cnJlbnQgY291bnQgcm91bmRlZCB1cCB0byB0aGUgdGhyZXNob2xkIHdl
IHdlcmUgdGFyZ2V0aW5nLgorICAgIC8vIEZvciBleGFtcGxlLCBpZiB3ZSBhcmUgdXNpbmcgaGFs
ZiBvZiBhdmFpbGFibGUgZXhlY3V0YWJsZSBtZW1vcnkgYW5kIGhhdmUKKyAgICAvLyBtX2FjdGl2
ZVRocmVzaG9sZCA9IDEwMDAsIGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKG1fYWN0aXZlVGhy
ZXNob2xkKSB3aWxsIGJlCisgICAgLy8gMjAwMCwgYnV0IHdlIHdpbGwgcHJldGVuZCBhcyBpZiB0
aGUgdGhyZXNob2xkIHdhcyBjcm9zc2VkIGlmIHdlIHJlYWNoIDIwMDAgLQorICAgIC8vIDEwMDAg
LyAyLCBvciAxNTAwLiBUaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB3ZSB3YW50IHRvIGF2b2lk
IHRocmFzaGluZy4gSWYKKyAgICAvLyB0aGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlLCB0aGVuIHRo
ZSBKSVQncyB0aHJlc2hvbGQgZm9yIHdoZW4gaXQgd2lsbCBhZ2FpbiBjYWxsCisgICAgLy8gaW50
byB0aGUgc2xvdyBwYXRoICh3aGljaCB3aWxsIGNhbGwgdGhpcyBtZXRob2QgYSBzZWNvbmQgdGlt
ZSkgd2lsbCBiZSBzZXQKKyAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2Vl
biB0aGUgY3VycmVudCBjb3VudCBhbmQgdGhlIHRhcmdldCBjb3VudAorICAgIC8vIGFjY29yZGlu
ZyB0byAqY3VycmVudCogbWVtb3J5IHVzYWdlLiBCdXQgYnkgdGhlIHRpbWUgd2UgY2FsbCBpbnRv
IHRoaXMgYWdhaW4sIHdlCisgICAgLy8gbWF5IGhhdmUgSklUJ2VkIG1vcmUgY29kZSwgYW5kIHNv
IHRoZSB0YXJnZXQgY291bnQgd2lsbCBpbmNyZWFzZSBzbGlnaHRseS4gVGhpcworICAgIC8vIG1h
eSBsZWFkIHRvIGEgcmVwZWF0aW5nIHBhdHRlcm4gd2hlcmUgdGhlIHRhcmdldCBjb3VudCBpcyBz
bGlnaHRseSBpbmNyZW1lbnRlZCwKKyAgICAvLyB0aGUgSklUIGltbWVkaWF0ZWx5IG1hdGNoZXMg
dGhhdCBpbmNyZWFzZSwgY2FsbHMgaW50byB0aGUgc2xvdyBwYXRoIGFnYWluLCBhbmQKKyAgICAv
LyBhZ2FpbiB0aGUgdGFyZ2V0IGNvdW50IGlzIHNsaWdodGx5IGluY3JlbWVudGVkLiBJbnN0ZWFk
IG9mIGhhdmluZyB0aGlzIHZpY2lvdXMKKyAgICAvLyBjeWNsZSwgd2UgZGVjbGFyZSB2aWN0b3J5
IGEgYml0IGVhcmx5IGlmIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQKKyAgICAv
LyB0b3RhbCBhbmQgb3VyIHRhcmdldCBhY2NvcmRpbmcgdG8gbWVtb3J5IGhldXJpc3RpY3MgaXMg
c21hbGwuIE91ciBkZWZpbml0aW9uIG9mCisgICAgLy8gc21hbGwgaXMgYXJiaXRyYXJpbHkgcGlj
a2VkIHRvIGJlIGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRocmVzaG9sZCAoaS5lLgorICAgIC8vIG1f
YWN0aXZlVGhyZXNob2xkKS4KKyAgICAKKyAgICBkb3VibGUgbW9kaWZpZWRUaHJlc2hvbGQgPSBh
cHBseU1lbW9yeVVzYWdlSGV1cmlzdGljcyhtX2FjdGl2ZVRocmVzaG9sZCwgY29kZUJsb2NrKTsK
KyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9j
b3VudGVyID49CisgICAgICAgICBtb2RpZmllZFRocmVzaG9sZCAtIHN0YXRpY19jYXN0PGRvdWJs
ZT4obV9hY3RpdmVUaHJlc2hvbGQpIC8gMjsKK30KKworYm9vbCBFeGVjdXRpb25Db3VudGVyOjpz
ZXRUaHJlc2hvbGQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgaWYgKG1fYWN0aXZlVGhy
ZXNob2xkID09IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSB7CisgICAgICAg
IGRlZmVySW5kZWZpbml0ZWx5KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
ICAgIAorICAgIEFTU0VSVCghaGFzQ3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKTsKKyAgICAg
ICAgCisgICAgLy8gQ29tcHV0ZSB0aGUgdHJ1ZSB0b3RhbCBjb3VudC4KKyAgICBkb3VibGUgdHJ1
ZVRvdGFsQ291bnQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdG90YWxDb3VudCkgKyBtX2NvdW50
ZXI7CisgICAgICAgIAorICAgIC8vIENvcnJlY3QgdGhlIHRocmVzaG9sZCBmb3IgY3VycmVudCBt
ZW1vcnkgdXNhZ2UuCisgICAgZG91YmxlIHRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVy
aXN0aWNzKG1fYWN0aXZlVGhyZXNob2xkLCBjb2RlQmxvY2spOworICAgICAgICAKKyAgICAvLyBU
aHJlc2hvbGQgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIG5vdCBOYU4uCisgICAgQVNTRVJUKHRo
cmVzaG9sZCA+PSAwKTsKKyAgICAgICAgCisgICAgLy8gQWRqdXN0IHRoZSB0aHJlc2hvbGQgYWNj
b3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgZXhlY3V0aW9ucyB3ZSBoYXZlIGFscmVhZHkKKyAgICAv
LyBzZWVuLiBUaGlzIHNob3VsZG4ndCBnbyBuZWdhdGl2ZSwgYnV0IGl0IG1pZ2h0LCBiZWNhdXNl
IG9mIHJvdW5kLW9mZiBlcnJvcnMuCisgICAgdGhyZXNob2xkIC09IHRydWVUb3RhbENvdW50Owor
ICAgICAgICAKKyAgICBpZiAodGhyZXNob2xkIDw9IDApIHsKKyAgICAgICAgbV9jb3VudGVyID0g
MDsKKyAgICAgICAgbV90b3RhbENvdW50ID0gdHJ1ZVRvdGFsQ291bnQ7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGlmICh0aHJlc2hvbGQgPiBzdGQ6Om51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgdGhyZXNob2xkID0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgIAorICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0
PGludDMyX3Q+KC10aHJlc2hvbGQpOworICAgICAgICAKKyAgICBtX3RvdGFsQ291bnQgPSB0cnVl
VG90YWxDb3VudCArIHRocmVzaG9sZDsKKyAgICAgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIEV4ZWN1dGlvbkNvdW50ZXI6OnJlc2V0KCkKK3sKKyAgICBtX2NvdW50ZXIgPSAwOwor
ICAgIG1fdG90YWxDb3VudCA9IDA7CisgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSAwOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGlvbkNvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEV4ZWN1dGlvbkNvdW50ZXJfaAorI2RlZmluZSBFeGVjdXRpb25Db3VudGVyX2gK
KworI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ29kZUJsb2NrOworCitjbGFzcyBFeGVjdXRpb25Db3VudGVyIHsKK3B1YmxpYzoKKyAgICBF
eGVjdXRpb25Db3VudGVyKCk7CisgICAgYm9vbCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNl
dChDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9s
ZCwgQ29kZUJsb2NrKik7CisgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOworICAgIHN0YXRp
YyBkb3VibGUgYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3MoaW50MzJfdCB2YWx1ZSwgQ29kZUJs
b2NrKik7CisgICAgc3RhdGljIGludDMyX3QgYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3NBbmRD
b252ZXJ0VG9JbnQoaW50MzJfdCB2YWx1ZSwgQ29kZUJsb2NrKik7CisKKyAgICBzdGF0aWMgaW50
MzJfdCBmb3JtYXR0ZWRUb3RhbENvdW50KGZsb2F0IHZhbHVlKQorICAgIHsKKyAgICAgICAgdW5p
b24geworICAgICAgICAgICAgaW50MzJfdCBpOworICAgICAgICAgICAgZmxvYXQgZjsKKyAgICAg
ICAgfSB1OworICAgICAgICB1LmYgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHUuaTsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZChDb2RlQmxvY2sq
KSBjb25zdDsKKyAgICBib29sIHNldFRocmVzaG9sZChDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHJl
c2V0KCk7CisKK3B1YmxpYzoKKworICAgIC8vIE5CLiBUaGVzZSBhcmUgaW50ZW50aW9uYWxseSBw
dWJsaWMgYmVjYXVzZSBpdCB3aWxsIGJlIG1vZGlmaWVkIGZyb20gbWFjaGluZSBjb2RlLgorICAg
IAorICAgIC8vIFRoaXMgY291bnRlciBpcyBpbmNyZW1lbnRlZCBieSB0aGUgSklUIG9yIExMSW50
LiBJdCBzdGFydHMgb3V0IG5lZ2F0aXZlIGFuZCBpcworICAgIC8vIGNvdW50ZWQgdXAgdW50aWwg
aXQgYmVjb21lcyBub24tbmVnYXRpdmUuIEF0IHRoZSBzdGFydCBvZiBhIGNvdW50aW5nIHBlcmlv
ZCwKKyAgICAvLyB0aGUgdGhyZXNob2xkIHdlIHdpc2ggdG8gcmVhY2ggaXMgbV90b3RhbENvdW50
ICsgbV9jb3VudGVyLCBpbiB0aGUgc2Vuc2UgdGhhdAorICAgIC8vIHdlIHdpbGwgYWRkIFggdG8g
bV90b3RhbENvdW50IGFuZCBzdWJ0cmFjdCBYIGZyb20gbV9jb3VudGVyLgorICAgIGludDMyX3Qg
bV9jb3VudGVyOworCisgICAgLy8gQ291bnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgZXhlY3V0aW9u
cyB3ZSBoYXZlIHNlZW4gcGx1cyB0aGUgb25lcyB3ZSd2ZSBzZXQgYQorICAgIC8vIHRocmVzaG9s
ZCBmb3IgaW4gbV9jb3VudGVyLiBCZWNhdXNlIG1fY291bnRlcidzIHRocmVzaG9sZCBpcyBuZWdh
dGl2ZSwgdGhlCisgICAgLy8gdG90YWwgbnVtYmVyIG9mIGFjdHVhbCBleGVjdXRpb25zIGNhbiBh
bHdheXMgYmUgY29tcHV0ZWQgYXMgbV90b3RhbENvdW50ICsKKyAgICAvLyBtX2NvdW50ZXIuCisg
ICAgZmxvYXQgbV90b3RhbENvdW50OworCisgICAgLy8gVGhpcyBpcyB0aGUgdGhyZXNob2xkIHdl
IHdlcmUgb3JpZ2luYWxseSB0YXJnZXR0aW5nLCB3aXRob3V0IGFueSBjb3JyZWN0aW9uIGZvcgor
ICAgIC8vIHRoZSBtZW1vcnkgdXNhZ2UgaGV1cmlzdGljcy4KKyAgICBpbnQzMl90IG1fYWN0aXZl
VGhyZXNob2xkOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFeGVjdXRp
b25Db3VudGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXIzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHJldmlzaW9uIDEwOTY3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01ODEsMTMgKzU4MSwyMSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQoY29uc3QgCiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGxvd0ZhaWxSYXRlID0gbV9q
aXQuYnJhbmNoMzIoQXNzZW1ibHlIZWxwZXJzOjpCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1Qy
LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgCiAgICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBv
c3NpYmxlLgotICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihPcHRpb25z
OjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uKSwgQXNzZW1i
bHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklU
RXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJ
bW0zMigwKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIG1faml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpJbW0zMigwKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0aW9uQWN0aXZlVGhyZXNob2xkKCkp
KTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgZG9uZUFkanVzdGluZyA9IG1faml0Lmp1bXAo
KTsKICAgICAKICAgICBmZXdGYWlscy5saW5rKCZtX2ppdCk7CiAgICAgbG93RmFpbFJhdGUubGlu
aygmbV9qaXQpOwogICAgIAotICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0z
MihtX2ppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIC8vIEFkanVzdCB0
aGUgZXhlY3V0aW9uIGNvdW50ZXIgc3VjaCB0aGF0IHRoZSB0YXJnZXQgaXMgdG8gb25seSBvcHRp
bWl6ZSBhZnRlciBhIHdoaWxlLgorICAgIGludDMyX3QgdGFyZ2V0VmFsdWUgPQorICAgICAgICBF
eGVjdXRpb25Db3VudGVyOjphcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljc0FuZENvbnZlcnRUb0lu
dCgKKyAgICAgICAgICAgIG1faml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCksCisgICAgICAgICAgICBtX2ppdC5iYXNlbGluZUNv
ZGVCbG9jaygpKTsKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoLXRh
cmdldFZhbHVlKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIG1faml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpJbW0zMih0YXJnZXRWYWx1ZSksIEFzc2VtYmx5SGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGlvbkFjdGl2
ZVRocmVzaG9sZCgpKSk7CisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMy
KEV4ZWN1dGlvbkNvdW50ZXI6OmZvcm1hdHRlZFRvdGFsQ291bnQodGFyZ2V0VmFsdWUpKSwgQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
SklURXhlY3V0aW9uVG90YWxDb3VudCgpKSk7CiAgICAgCiAgICAgZG9uZUFkanVzdGluZy5saW5r
KCZtX2ppdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2MCwxMyArNTYwLDIxIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChj
b25zdCAKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgbG93RmFpbFJhdGUgPSBtX2ppdC5icmFu
Y2gzMihBc3NlbWJseUhlbHBlcnM6OkJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEdQUklu
Zm86OnJlZ1QxKTsKICAgICAKICAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUu
Ci0gICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKE9wdGlvbnM6OmV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24pLCBBc3NlbWJseUhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRl
Q291bnRlcigpKSk7CisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKDAp
LCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OkltbTMyKDApLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAs
IENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQoKSkpOwogICAg
IEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25lQWRqdXN0aW5nID0gbV9qaXQuanVtcCgpOwogICAg
IAogICAgIGZld0ZhaWxzLmxpbmsoJm1faml0KTsKICAgICBsb3dGYWlsUmF0ZS5saW5rKCZtX2pp
dCk7CiAgICAgCi0gICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKG1faml0
LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKCkpLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9j
azo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CisgICAgLy8gQWRqdXN0IHRoZSBleGVj
dXRpb24gY291bnRlciBzdWNoIHRoYXQgdGhlIHRhcmdldCBpcyB0byBvbmx5IG9wdGltaXplIGFm
dGVyIGEgd2hpbGUuCisgICAgaW50MzJfdCB0YXJnZXRWYWx1ZSA9CisgICAgICAgIEV4ZWN1dGlv
bkNvdW50ZXI6OmFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KAorICAg
ICAgICAgICAgbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Y291bnRlclZhbHVlRm9yT3B0aW1p
emVBZnRlckxvbmdXYXJtVXAoKSwKKyAgICAgICAgICAgIG1faml0LmJhc2VsaW5lQ29kZUJsb2Nr
KCkpOworICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMigtdGFyZ2V0VmFs
dWUpLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJs
eUhlbHBlcnM6OkltbTMyKHRhcmdldFZhbHVlKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0aW9uQWN0aXZlVGhyZXNo
b2xkKCkpKTsKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoRXhlY3V0
aW9uQ291bnRlcjo6Zm9ybWF0dGVkVG90YWxDb3VudCh0YXJnZXRWYWx1ZSkpLCBBc3NlbWJseUhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVj
dXRpb25Ub3RhbENvdW50KCkpKTsKICAgICAKICAgICBkb25lQWRqdXN0aW5nLmxpbmsoJm1faml0
KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEg
KzI5LDE3IEBACiAKICNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQogI2lu
Y2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1
ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KICNlbmRpZgogCisvLyBVbmNvbW1lbnQgdG8gY3Jl
YXRlIGFuIGFydGlmaWNpYWwgZXhlY3V0YWJsZSBtZW1vcnkgdXNhZ2UgbGltaXQuIFRoaXMgbGlt
aXQKKy8vIGlzIGltcGVyZmVjdCBhbmQgaXMgcHJpbWFyaWx5IHVzZWZ1bCBmb3IgdGVzdGluZyB0
aGUgVk0ncyBhYmlsaXR5IHRvIGhhbmRsZQorLy8gb3V0LW9mLWV4ZWN1dGFibGUtbWVtb3J5IHNp
dHVhdGlvbnMuCisvLyAjZGVmaW5lIEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUIDEwMDAwMDAKKwog
I2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC02NSw2ICs3
MSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIAogICAgICAgICBudW1QYWdlcyA9IG5ld051bVBh
Z2VzOwogICAgICAgICAKKyNpZmRlZiBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVAorICAgICAgICBp
ZiAoYnl0ZXNBbGxvY2F0ZWQoKSA+PSBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworI2VuZGlmCisgICAgICAgIAogICAgICAgICBQYWdlUmVzZXJ2YXRpb24g
cmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmUobnVtUGFnZXMgKiBwYWdlU2l6
ZSgpLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJM
RSwgdHJ1ZSk7CiAgICAgICAgIGlmICghcmVzZXJ2YXRpb24pCiAgICAgICAgICAgICBDUkFTSCgp
OwpAQCAtMTA5LDcgKzEyMCwyNSBAQCBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQo
KSBjb25zCiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgp
CiB7CisjaWZkZWYgRVhFQ1VUQUJMRV9NRU1PUllfTElNSVQKKyAgICByZXR1cm4gYWxsb2NhdG9y
LT5ieXRlc0FsbG9jYXRlZCgpID4gRVhFQ1VUQUJMRV9NRU1PUllfTElNSVQgLyAyOworI2Vsc2UK
ICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0
b3I6Om1lbW9yeVByZXNzdXJlTXVsdGlwbGllcihzaXplX3QgYWRkZWRNZW1vcnlVc2FnZSkKK3sK
KyNpZmRlZiBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVAorICAgIHNpemVfdCBieXRlc0FsbG9jYXRl
ZCA9IGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSArIGFkZGVkTWVtb3J5VXNhZ2U7CisgICAg
aWYgKGJ5dGVzQWxsb2NhdGVkID49IEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUKQorICAgICAgICBi
eXRlc0FsbG9jYXRlZCA9IEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxkb3VibGU+KEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUKSAvCisgICAgICAgIChFWEVD
VVRBQkxFX01FTU9SWV9MSU1JVCAtIGJ5dGVzQWxsb2NhdGVkKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGFkZGVkTWVtb3J5VXNhZ2UpOworICAgIHJldHVybiAxLjA7CisjZW5kaWYKIH0KIAog
UGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjph
bGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlE
LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMTA5Njc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOCw2ICsxMDgsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCB1bmRl
ck1lbW9yeVByZXNzdXJlKCk7CiAgICAgCisgICAgc3RhdGljIGRvdWJsZSBtZW1vcnlQcmVzc3Vy
ZU11bHRpcGxpZXIoc2l6ZV90IGFkZGVkTWVtb3J5VXNhZ2UpOworICAgIAogI2lmIEVOQUJMRShN
RVRBX0FMTE9DQVRPUl9QUk9GSUxFKQogICAgIHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlKCk7CiAj
ZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
Rml4ZWRWTVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkocmV2aXNpb24gMTA5Njc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDE3IEBAIGJvb2wgRXhlY3V0YWJsZUFs
bG9jYXRvcjo6dW5kZXJNZW1vcnlQcmUKICAgICByZXR1cm4gc3RhdGlzdGljcy5ieXRlc0FsbG9j
YXRlZCA+IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCAvIDI7CiB9CiAKK2RvdWJsZSBFeGVjdXRh
YmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3VyZU11bHRpcGxpZXIoc2l6ZV90IGFkZGVkTWVtb3J5
VXNhZ2UpCit7CisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0aXN0aWNzID0gYWxs
b2NhdG9yLT5jdXJyZW50U3RhdGlzdGljcygpOworICAgIEFTU0VSVChzdGF0aXN0aWNzLmJ5dGVz
QWxsb2NhdGVkIDw9IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCk7CisgICAgc2l6ZV90IGJ5dGVz
QWxsb2NhdGVkID0gc3RhdGlzdGljcy5ieXRlc0FsbG9jYXRlZCArIGFkZGVkTWVtb3J5VXNhZ2U7
CisgICAgaWYgKGJ5dGVzQWxsb2NhdGVkID49IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCkKKyAg
ICAgICAgYnl0ZXNBbGxvY2F0ZWQgPSBzdGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQ7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhdGlzdGljcy5ieXRlc1Jlc2VydmVkKSAvCisgICAg
ICAgIChzdGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQgLSBieXRlc0FsbG9jYXRlZCk7Cit9CisKIFBh
c3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxs
b2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQq
IG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUlu
Qnl0ZXMsIG93bmVyVUlEKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDEwOTY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzE1LDYgKzcxNSwxMCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUo
Q29kZVB0ciogZnVuCiAgICAgCiAgICAgQ29kZVJlZiByZXN1bHQgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKTsKICAgICAKKyAgICBtX2dsb2JhbERhdGEtPm1hY2hpbmVDb2RlQnl0ZXNQZXJC
eXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5hZGQoCisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJs
ZT4ocmVzdWx0LnNpemUoKSkgLworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKKyAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJP
U0UpCiAgICAgZGF0YUxvZygiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5c
biIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCByZXN1
bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyOSwxMiAr
MTkyOSwxNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAg
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOwogCisgICAgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOworICAgIAog
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgZGF0YUxvZygiJXA6IEVudGVyZWQgb3B0
aW1pemVfZnJvbV9sb29wIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNvZGVC
bG9jaywgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigpLCBjb2RlQmxvY2stPnJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCksIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
KCkpOwogI2VuZGlmCiAKKyAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRo
cmVzaG9sZFJlYWNoZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKGNvZGVCbG9jay0+
aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CiAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGxvb3AgT1NSIGludG8gJXAoJXApIHdpdGgg
c3VjY2Vzcy9mYWlsICV1LyV1LlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigp
LCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSk7CkBA
IC0yMDMzLDYgKzIwMzcsOSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9m
cm9tCiAgICAgZGF0YUxvZygiRW50ZXJlZCBvcHRpbWl6ZV9mcm9tX3JldCB3aXRoIGV4ZWN1dGVD
b3VudGVyID0gJWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gJXUsIG9wdGltaXphdGlv
bkRlbGF5Q291bnRlciA9ICV1XG4iLCBjb2RlQmxvY2stPmppdEV4ZWN1dGVDb3VudGVyKCksIGNv
ZGVCbG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgY29kZUJsb2NrLT5vcHRpbWl6
YXRpb25EZWxheUNvdW50ZXIoKSk7CiAjZW5kaWYKIAorICAgIGlmICghY29kZUJsb2NrLT5jaGVj
a0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgZGF0YUxvZygiUmV0dXJuaW5nIGZyb20gb2xkIEpJ
VCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxhY2VtZW50ICVwKCVwKSwgd2l0aCBzdWNj
ZXNzL2ZhaWwgJXUvJXUiLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgY29k
ZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDYgKzI3MCwxMyBAQCBpbmxpbmUgYm9vbCBzaG91
bGRKSVQoRXhlY1N0YXRlKiBleGVjKQogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkg
dG8gT1NSLgogaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBpZiAoIWNvZGVCbG9jay0+Y2hl
Y2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CisgICAgICAgIGRhdGFMb2coIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuXG4i
KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKICAgICBD
b2RlQmxvY2s6OkpJVENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVCbG9jay0+aml0Q29t
cGlsZShleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2Fz
ZSBDb2RlQmxvY2s6OkFscmVhZHlDb21waWxlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZp
c2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIGVuZAog
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBpZiBKSVRfRU5B
QkxFRAogICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICAgICAgYmFkZGlzIGlu
Y3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBdLCAuY29udGludWUK
KyAgICAgICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50
ZXIgKyBFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICAgICAg
YWN0aW9uKCkKICAgICAuY29udGludWU6CiAgICAgZW5kCkBAIC00MjksNyArNDI5LDcgQEAgbWFj
cm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAgIGVuZAogICAgIGNvZGVC
bG9ja0dldHRlcih0MSkKICAgICBpZiBKSVRfRU5BQkxFRAotICAgICAgICBiYWRkaXMgNSwgQ29k
ZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFdLCAuY29udGludWUKKyAgICAgICAgYmFk
ZGlzIDUsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgRXhlY3V0aW9uQ291bnRl
cjo6bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCiAgICAgICAgIGNDYWxsMihvc3JTbG93UGF0aCwg
Y2ZyLCBQQykKICAgICAgICAgbW92ZSB0MSwgY2ZyCiAgICAgICAgIGJ0cHogdDAsIC5yZWNvdmVy
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAko
cmV2aXNpb24gMTA5Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogI2lmIEVOQUJM
RShSRUdFWFBfVFJBQ0lORykKQEAgLTIwMSw2ICsyMDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgU21hbGxTdHJpbmdzIHNtYWxsU3RyaW5nczsKICAgICAgICAgTnVtZXJpY1N0cmluZ3Mg
bnVtZXJpY1N0cmluZ3M7CiAgICAgICAgIERhdGVJbnN0YW5jZUNhY2hlIGRhdGVJbnN0YW5jZUNh
Y2hlOworICAgICAgICBXVEY6OlNpbXBsZVN0YXRzIG1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29k
ZVdvcmRGb3JCYXNlbGluZUpJVDsKICAgICAgICAgVmVjdG9yPENvZGVCbG9jayo+IGNvZGVCbG9j
a3NCZWluZ0NvbXBpbGVkOwogICAgICAgICB2b2lkIHN0YXJ0ZWRDb21waWxpbmcoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTUgKzUyLDEyIEBA
IHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGkKIAogdW5zaWduZWQgbWF4
aW11bUlubGluaW5nRGVwdGg7CiAKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9ySklU
QWZ0ZXJXYXJtVXA7Ci1pbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRKSVRBbnl0
aW1lU29vbjsKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9ySklUU29vbjsKLQotaW50
MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwOwotaW50MzJf
dCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKLWludDMy
X3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb247Ci1pbnQz
Ml90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbjsKLWludDMyX3QgZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbjsKK2ludDMyX3QgdGhyZXNo
b2xkRm9ySklUQWZ0ZXJXYXJtVXA7CitpbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247CisKK2lu
dDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcDsKK2ludDMyX3QgdGhyZXNob2xk
Rm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7CitpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXpl
U29vbjsKIAogaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcDsKIGludDMy
X3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsKQEAgLTE0MSwxNSArMTM4LDEy
IEBAIHZvaWQgaW5pdGlhbGl6ZU9wdGlvbnMoKQogICAgIAogICAgIFNFVChtYXhpbXVtSW5saW5p
bmdEZXB0aCwgNSk7CiAKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9ySklUQWZ0ZXJX
YXJtVXAsICAgICAtMTAwKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udEpJ
VEFueXRpbWVTb29uLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7Ci0gICAg
U0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckpJVFNvb24sICAgICAgICAgICAgLTEwMCk7Ci0K
LSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCwgICAg
IC0xMDAwKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxv
bmdXYXJtVXAsIC01MDAwKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9w
dGltaXplQW55dGltZVNvb24sIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKTsK
LSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uLCAgICAgICAgICAg
IC0xMDAwKTsKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52
b2NhdGlvbiwgIDApOworICAgIFNFVCh0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCwgICAgIDEw
MCk7CisgICAgU0VUKHRocmVzaG9sZEZvckpJVFNvb24sICAgICAgICAgICAgMTAwKTsKKworICAg
IFNFVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwLCAgICAgMTAwMCk7CisgICAgU0VU
KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCA1MDAwKTsKKyAgICBTRVQodGhy
ZXNob2xkRm9yT3B0aW1pemVTb29uLCAgICAgICAgICAgIDEwMDApOwogCiAgICAgU0VUKGV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAgIDEpOwogICAgIFNFVChleGVjdXRpb25Db3Vu
dGVySW5jcmVtZW50Rm9yUmV0dXJuLCAxNSk7CkBAIC0xOTUsMTEgKzE4OSw5IEBAIHZvaWQgaW5p
dGlhbGl6ZU9wdGlvbnMoKQogICAgIAogICAgIFNFVChudW1iZXJPZkdDTWFya2VycywgY3B1c1Rv
VXNlKTsKIAotICAgIEFTU0VSVChleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVB
bnl0aW1lU29vbiA8PSBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcCk7Ci0gICAgQVNTRVJUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwIDw9IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAp
OwotICAgIEFTU0VSVChleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVw
IDw9IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbik7Ci0gICAgQVNTRVJUKGV4
ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAgPCAwKTsKLSAgICBBU1NF
UlQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uIDw9IGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24pOworICAgIEFTU0VSVCh0aHJlc2hvbGRG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwKTsKKyAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCA+PSB0aHJl
c2hvbGRGb3JPcHRpbWl6ZVNvb24pOworICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFm
dGVyV2FybVVwID49IDApOwogICAgIAogICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gdmFsdWUg
b2YgdGhlIHJlb3B0aW1pemF0aW9uIHJldHJ5IGNvdW50ZXIuIFRoaXMgaXMgc2ltcGx5CiAgICAg
Ly8gdGhlIGxhcmdlc3QgdmFsdWUgYXQgd2hpY2ggd2UgZG9uJ3Qgb3ZlcmZsb3cgdGhlIGV4ZWN1
dGUgY291bnRlciwgd2hlbiB1c2luZyBpdApAQCAtMjA3LDExICsxOTksMTEgQEAgdm9pZCBpbml0
aWFsaXplT3B0aW9ucygpCiAgICAgLy8gdXAgYmVpbmcgMTgsIHNvIHRoaXMgbG9vcCBpcyBub3Qg
c28gdGVycmlibGU7IGl0IHByb2JhYmx5IHRha2VzIHVwIH4xMDAgY3ljbGVzCiAgICAgLy8gdG90
YWwgb24gYSAzMi1iaXQgcHJvY2Vzc29yLgogICAgIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
TWF4ID0gMDsKLSAgICB3aGlsZSAoKHN0YXRpY19jYXN0PGludDY0X3Q+KGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKSA8PCAocmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXJNYXggKyAxKSkgPj0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQzMl90Pjo6bWluKCkpKQorICAgIHdoaWxlICgoc3RhdGljX2Nhc3Q8aW50NjRfdD4o
dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXApIDw8IChyZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlck1heCArIDEpKSA8PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptYXgoKSkpCiAgICAgICAgIHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyTWF4Kys7CiAgICAgCi0gICAgQVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90PihleGVjdXRp
b25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXJNYXgpIDwgMCk7Ci0gICAgQVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90
PihleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpID49IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSk7CisgICAgQVNTRVJUKChzdGF0aWNfY2Fz
dDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpID4gMCk7CisgICAgQVNTRVJUKChzdGF0aWNfY2FzdDxp
bnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXJNYXgpIDw9IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50MzJfdD46Om1heCgpKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpP
cHRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZp
c2lvbiAxMDk2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDE1ICszNywxMyBAQCBleHRlcm4gdW5zaWduZWQgbWF4aW11
bUZ1bmN0aW9uRm9yQ29uc3RyCiAKIGV4dGVybiB1bnNpZ25lZCBtYXhpbXVtSW5saW5pbmdEZXB0
aDsgLy8gRGVwdGggb2YgaW5saW5lIHN0YWNrLCBzbyAxID0gbm8gaW5saW5pbmcsIDIgPSBvbmUg
bGV2ZWwsIGV0Yy4KIAotZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9ySklU
QWZ0ZXJXYXJtVXA7Ci1leHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250
SklUQW55dGltZVNvb247Ci1leHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JK
SVRTb29uOwotCi1leHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6
ZUFmdGVyV2FybVVwOwotZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXA7Ci1leHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFs
dWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKLWV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNv
dW50ZXJWYWx1ZUZvck9wdGltaXplU29vbjsKLWV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb247CitleHRlcm4gaW50MzJfdCB0aHJlc2hv
bGRGb3JKSVRBZnRlcldhcm1VcDsKK2V4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247
CisKK2V4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA7CitleHRl
cm4gaW50MzJfdCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKK2V4dGVybiBp
bnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplU29vbjsKK2V4dGVybiBpbnQzMl90IHRocmVzaG9s
ZEZvck9wdGltaXplTmV4dEludm9jYXRpb247CiAKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNv
dW50ZXJJbmNyZW1lbnRGb3JMb29wOwogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlcklu
Y3JlbWVudEZvclJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2ltcGxl
U3RhdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NpbXBsZVN0
YXRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NpbXBsZVN0
YXRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2ltcGxlU3RhdHNfaAorI2RlZmlu
ZSBTaW1wbGVTdGF0c19oCisKKyNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCisjaW5jbHVkZSAiU3Rk
TGliRXh0cmFzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBTaW1wbGUgYW5kIGNoZWFwIHdh
eSBvZiB0cmFja2luZyBzdGF0aXN0aWNzIGlmIHlvdSdyZSBub3Qgd29ycmllZCBhYm91dCBjaG9w
cGluZyBvbgorLy8gdGhlIHN1bSBvZiBzcXVhcmVzIChpLmUuIHRoZSBzdW0gb2Ygc3F1YXJlcyBp
cyB1bmxpa2VseSB0byBleGNlZWQgMl41MikuCitjbGFzcyBTaW1wbGVTdGF0cyB7CitwdWJsaWM6
CisgICAgU2ltcGxlU3RhdHMoKQorICAgICAgICA6IG1fY291bnQoMCkKKyAgICAgICAgLCBtX3N1
bSgwKQorICAgICAgICAsIG1fc3VtT2ZTcXVhcmVzKDApCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGFkZChkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBtX2NvdW50Kys7CisgICAg
ICAgIG1fc3VtICs9IHZhbHVlOworICAgICAgICBtX3N1bU9mU3F1YXJlcyArPSB2YWx1ZSAqIHZh
bHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gIW1fY291bnQ7CisgICAgfQorICAgIAorICAgIGRvdWJsZSBjb3VudCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb3VudDsKKyAgICB9CisgICAgCisgICAgZG91
YmxlIHN1bSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdW07CisgICAgfQorICAg
IAorICAgIGRvdWJsZSBzdW1PZlNxdWFyZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fc3VtT2ZTcXVhcmVzOworICAgIH0KKyAgICAKKyAgICBkb3VibGUgbWVhbigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9zdW0gLyBtX2NvdW50OworICAgIH0KKyAgICAKKyAgICAv
LyBOQi4gVGhpcyBnaXZlcyBhIGJpYXNlZCB2YXJpYW5jZSBhcyBpdCBkaXZpZGVzIGJ5IHRoZSBu
dW1iZXIgb2Ygc2FtcGxlcyByYXRoZXIKKyAgICAvLyB0aGFuIHRoZSBkZWdyZWVzIG9mIGZyZWVk
b20uIFRoaXMgaXMgZmluZSBvbmNlIHRoZSBjb3VudCBncm93cyBsYXJnZSwgd2hpY2ggaW4KKyAg
ICAvLyBvdXIgY2FzZSB3aWxsIGhhcHBlbiByYXRoZXIgcXVpY2tseS4KKyAgICBkb3VibGUgdmFy
aWFuY2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fY291bnQgPCAyKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRlIDx4XjI+IC0gPHg+XjIK
KyAgICAgICAgZG91YmxlIHNlY29uZE1vbWVudCA9IG1fc3VtT2ZTcXVhcmVzIC8gbV9jb3VudDsK
KyAgICAgICAgZG91YmxlIGZpcnN0TW9tZW50ID0gbV9zdW0gLyBtX2NvdW50OworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHNlY29uZE1vbWVudCAtIGZpcnN0TW9tZW50ICogZmlyc3RNb21lbnQ7
CisgICAgfQorICAgIAorICAgIC8vIE5CLiBUaGlzIGdpdmVzIGEgYmlhc2VkIHN0YW5kYXJkIGRl
dmlhdGlvbi4gU2VlIGFib3ZlLgorICAgIGRvdWJsZSBzdGFuZGFyZERldmlhdGlvbigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc3FydCh2YXJpYW5jZSgpKTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIGRvdWJsZSBtX2NvdW50OworICAgIGRvdWJsZSBtX3N1bTsKKyAgICBkb3Vi
bGUgbV9zdW1PZlNxdWFyZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IFNpbXBsZVN0YXRzX2gKKwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5Njc0KQorKysgU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTItMDMtMDQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBKSVQg
aGV1cmlzdGljcyBzaG91bGQgYmUgaHlwZXJib2xpYworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAwNTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEw
OTIyMjYwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgc2luY2UgdGhlcmUncyBubyBuZXcgZnVuY3Rpb25hbGl0eS4KKworICAg
ICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TaW1wbGVTdGF0cy5oOiBBZGRlZC4KKwogMjAx
Mi0wMy0wMyAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmVtb3ZlIHRoZSB1bnVzZWQgZnVuY3Rpb24gV2ViQ29yZTo6cHJvdG9jb2xJc0luSFRUUEZh
bWlseSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU2ltcGxl
U3RhdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvU2ltcGxlU3RhdHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9TaW1wbGVTdGF0cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAK
KyNpZm5kZWYgV2ViQ29yZV9GV0RfU2ltcGxlU3RhdHNfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9T
aW1wbGVTdGF0c19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlU3RhdHMuaD4KKyNl
bmRpZgo=
</data>
<flag name="review"
          id="132896"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="132897"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>