<?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>147856</bug_id>
          
          <creation_ts>2015-08-10 17:15:24 -0700</creation_ts>
          <short_desc>Start beating UnlinkedCodeBlock.h/.cpp with the &quot;One Class per File&quot; stick</short_desc>
          <delta_ts>2015-08-10 18:26:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1116413</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-10 17:15:24 -0700</bug_when>
    <thetext>Start beating UnlinkedCodeBlock.h/.cpp with the &quot;One Class per File&quot; stick</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116414</commentid>
    <comment_count>1</comment_count>
      <attachid>258676</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-10 17:16:28 -0700</bug_when>
    <thetext>Created attachment 258676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116415</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-10 17:18:39 -0700</bug_when>
    <thetext>Attachment 258676 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116417</commentid>
    <comment_count>3</comment_count>
      <attachid>258676</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-10 17:27:36 -0700</bug_when>
    <thetext>Comment on attachment 258676
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116427</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-10 18:26:47 -0700</bug_when>
    <thetext>Committed r188242: &lt;http://trac.webkit.org/changeset/188242&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258676</attachid>
            <date>2015-08-10 17:16:28 -0700</date>
            <delta_ts>2015-08-10 17:27:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147856-20150810171614.patch</filename>
            <type>text/plain</type>
            <size>183497</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MjM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOSBA
QAorMjAxNS0wOC0xMCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFN0YXJ0IGJlYXRpbmcgVW5saW5rZWRDb2RlQmxvY2suaC8uY3BwIHdpdGggdGhlICJPbmUg
Q2xhc3MgcGVyIEZpbGUiIHN0aWNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc4NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTcGxpdCBvdXQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaC8uY3Bw
IGFuZCBFeGVjdXRhYmxlSW5mby5oIGludG8gc2VwYXJhdGUgZmlsZXMuCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRhYmxlSW5mby5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaC4KKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUluZm86OkV4ZWN1dGFibGVJbmZvKToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRTdHJpbmdKdW1wVGFibGU6Om9mZnNldEZvclZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRTaW1wbGVKdW1wVGFibGU6OmFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkSW5zdHJ1Y3Rpb246OlVubGlua2VkSW5zdHJ1
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25z
dHJ1Y3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppc1N0
cmljdE1vZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dXNl
c0V2YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bmVlZHNG
dWxsU2NvcGVDaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpoYXNFeHByZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjpzZXRUaGlzUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6c2V0U2NvcGVSZWdpc3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpzZXRBY3RpdmF0aW9uUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dXNlc0dsb2JhbE9iamVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXRHbG9iYWxPYmplY3RSZWdpc3Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpnbG9iYWxPYmplY3RS
ZWdpc3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzZXRO
dW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
OmFkZFBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpudW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmFkZFJlZ0V4cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpudW1iZXJPZlJlZ0V4cHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6cmVnZXhwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
Om51bWJlck9mSWRlbnRpZmllcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6YWRkSWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjppZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OmlkZW50aWZpZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OmFkZENvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OnJlZ2lzdGVySW5kZXhGb3JMaW5rVGltZUNvbnN0YW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXJzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mSnVtcFRhcmdldHMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkSnVtcFRhcmdldCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpqdW1wVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omxhc3RKdW1wVGFyZ2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQnVpbHRpbkZ1bmN0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0cnVjdG9yS2luZCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZlN3aXRjaEp1
bXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRk
U3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OnN3aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjpudW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRGdW5j
dGlvbkRlY2wpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZnVu
Y3Rpb25EZWNsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51
bWJlck9mRnVuY3Rpb25EZWNscyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjphZGRGdW5jdGlvbkV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6ZnVuY3Rpb25FeHByKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6Om51bWJlck9mRnVuY3Rpb25FeHBycyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEV4Y2VwdGlvbkhhbmRsZXIp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZXhjZXB0aW9uSGFu
ZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2bSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZBcnJh
eVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFk
ZEFycmF5QWxsb2NhdGlvblByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6bnVtYmVyT2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlcyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZk9i
amVjdEFsbG9jYXRpb25Qcm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjphZGRWYWx1ZVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZExMSW50Q2FsbExpbmtJbmZvKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mTExpbnRDYWxsTGlua0lu
Zm9zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvZGVUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnRoaXNSZWdpc3Rl
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzY29wZVJlZ2lz
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFjdGl2YXRp
b25SZWdpc3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpo
YXNBY3RpdmF0aW9uUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZlByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnByb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OmNvbnN0YW50QnVmZmVyQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6YWRkQ29uc3RhbnRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFzUmFyZURhdGEpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6cmVjb3JkUGFyc2UpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29kZUZlYXR1cmVzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0NhcHR1cmVkVmFyaWFibGVzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmZpcnN0TGluZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpsaW5lQ291bnQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c3RhcnRDb2x1bW4pOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZW5kQ29sdW1uKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZE9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNv
ZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6b3BQ
cm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpVbmxpbmtlZEdsb2Jh
bENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bGluayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjb2RlQmxvY2tGb3IpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVJbmZvOjpFeGVjdXRhYmxlSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVJbmZvOjpuZWVkc0FjdGl2YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpFeGVjdXRhYmxlSW5mbzo6dXNlc0V2YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlSW5mbzo6aXNTdHJpY3RNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXhlY3V0
YWJsZUluZm86OmlzQ29uc3RydWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRh
YmxlSW5mbzo6aXNCdWlsdGluRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlSW5mbzo6Y29uc3RydWN0b3JLaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAuCisgICAgICAgIChKU0M6
OmdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmdldExpbmVBbmRDb2x1bW4pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpkdW1wTGluZUNvbHVtbkVudHJ5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5
dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
OmFkZEV4cHJlc3Npb25JbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OnR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkVHlwZVByb2ZpbGVyRXhw
cmVzc2lvbkluZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2s6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6flVubGlua2VkQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRFdmFsQ29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNldEluc3RydWN0aW9ucyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnMpOiBEZWxldGVkLgor
ICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oLgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlSW5mbzo6RXhlY3V0YWJsZUluZm8pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlSW5mbzo6bmVlZHNBY3RpdmF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUluZm86OnVzZXNFdmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RXhlY3V0YWJsZUluZm86OmlzU3RyaWN0TW9kZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkV4ZWN1dGFibGVJbmZvOjppc0NvbnN0cnVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6RXhlY3V0YWJsZUluZm86OmlzQnVpbHRpbkZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RXhlY3V0YWJsZUluZm86OmNvbnN0cnVjdG9yS2luZCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjpvZmZzZXRGb3JWYWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkU2ltcGxlSnVtcFRhYmxlOjphZGQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpVbmxpbmtlZEluc3RydWN0aW9uOjpVbmxpbmtlZEluc3RydWN0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQ29uc3RydWN0
b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aXNTdHJpY3RN
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnVzZXNFdmFs
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om5lZWRzRnVsbFNj
b3BlQ2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFz
RXhwcmVzc2lvbkluZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6c2V0VGhpc1JlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OnNldFNjb3BlUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6c2V0QWN0aXZhdGlvblJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OnVzZXNHbG9iYWxPYmplY3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2V0R2xvYmFsT2JqZWN0UmVnaXN0ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Z2xvYmFsT2JqZWN0UmVnaXN0
ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2V0TnVtUGFy
YW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRQ
YXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVt
UGFyYW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjph
ZGRSZWdFeHApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVt
YmVyT2ZSZWdFeHBzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
OnJlZ2V4cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1i
ZXJPZklkZW50aWZpZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmFkZElkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6aWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjppZGVudGlmaWVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjphZGRDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjpyZWdpc3RlckluZGV4Rm9yTGlua1RpbWVDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpudW1iZXJPZkp1bXBUYXJnZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEp1bXBUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6anVtcFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpsYXN0SnVtcFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjppc0J1aWx0aW5GdW5jdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdHJ1Y3RvcktpbmQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2hyaW5rVG9GaXQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZTd2l0Y2hKdW1wVGFi
bGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFN3aXRj
aEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpz
d2l0Y2hKdW1wVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpzdHJpbmdTd2l0Y2hKdW1wVGFibGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkRnVuY3Rpb25E
ZWNsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmZ1bmN0aW9u
RGVjbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJP
ZkZ1bmN0aW9uRGVjbHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6YWRkRnVuY3Rpb25FeHByKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OmZ1bmN0aW9uRXhwcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjpudW1iZXJPZkZ1bmN0aW9uRXhwcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRFeGNlcHRpb25IYW5kbGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4Y2VwdGlvbkhhbmRsZXIp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dm0pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkQXJyYXlQcm9maWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mQXJyYXlQcm9m
aWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRBcnJh
eUFsbG9jYXRpb25Qcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6Om51bWJlck9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6YWRkVmFsdWVQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6Om51bWJlck9mVmFsdWVQcm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjphZGRMTEludENhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkxMaW50Q2FsbExpbmtJbmZvcyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb2RlVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp0aGlzUmVnaXN0ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2NvcGVSZWdpc3Rlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphY3RpdmF0aW9uUmVn
aXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFzQWN0
aXZhdGlvblJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpwcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
Ojpjb25zdGFudEJ1ZmZlckNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OmFkZENvbnN0YW50QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6Omhhc1JhcmVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OnJlY29yZFBhcnNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmNvZGVGZWF0dXJlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpoYXNDYXB0dXJlZFZhcmlhYmxlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpmaXJzdExpbmUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGluZUNvdW50KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnN0YXJ0Q29sdW1uKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmVuZENvbHVtbik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zm
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om9wUHJvZmls
ZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZEdsb2JhbENvZGVCbG9jazo6VW5saW5rZWRHbG9iYWxDb2Rl
QmxvY2spOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorCiAyMDE1
LTA4LTEwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZhY3Rv
ciBMaXZlT2JqZWN0TGlzdCBhbmQgTGl2ZU9iamVjdERhdGEgaW50byB0aGVpciBvd24gZmlsZXMu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODgyMzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTExNSw2ICsxMTUsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVj
b2RlL1RvVGhpc1N0YXR1cy5jcHAKICAgICBieXRlY29kZS9UcmFja2VkUmVmZXJlbmNlcy5jcHAK
ICAgICBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKyAgICBieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKICAgICBieXRlY29kZS9VbmxpbmtlZEluc3RydWN0aW9u
U3RyZWFtLmNwcAogICAgIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCiAgICAgYnl0ZWNvZGUv
VmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4ODIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTM1NSw2ICszNTUsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcVG9UaGlzU3RhdHVzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFRyYWNrZWRSZWZlcmVuY2VzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFVubGlua2VkQ29kZUJsb2NrLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJl
YW0uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFsdWVSZWNv
dmVyeS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbC5jcHAiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODgyMzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw2ICsyMTksOSBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRDb2RlQmxvY2suY3BwIj4KICAgICAg
IDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcCI+
CisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFt
LmNwcCI+CiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg4MjM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc3MCw2ICs3NzAsOSBAQAogCQkxNDBEMTdENzBFOEFE
NEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVBy
aXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNDEyMTEzMTBBNDg3OTREMDA0ODAyNTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkw
ODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJMTQx
MjExMzQwQTQ4Nzk1ODAwNDgwMjU1IC8qIG1pbmlkb20uYyBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTIxMTAyMEE0ODc4MDkwMDQ4MDI1NSAvKiBtaW5p
ZG9tLmMgKi87IH07CisJCTE0MTQyRTUxMUI3OTZFQ0UwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQxNDJFNTAxQjc5NkVDRTAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MTQxNDJFNTMxQjc5NkVERDAwRjRCRjRCIC8qIEV4ZWN1dGFibGVJbmZvLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE0MkU1MjFCNzk2RUREMDBGNEJG
NEIgLyogRXhlY3V0YWJsZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkxNDE0MkU1NTFCNzk3M0MwMDBGNEJGNEIgLyogVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQxNDJFNTQxQjc5NzNDMDAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcCAqLzsgfTsKIAkJMTQxNDQ4Q0IxM0ExNzZFQzAwRjVCQTFBIC8qIE1hcmtlZEJs
b2NrU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDE0NDhDQTEzQTE3NkVDMDBGNUJBMUEgLyogTWFya2VkQmxvY2tTZXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDE0NDhDRDEzQTE3ODM3MDBG
NUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmls
dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE1MDEzMjE1NEJCMTNGMDA1RDhD
OTggLyogV2Vha1NldElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMjU1MCw2ICsyNTUzLDkgQEAKIAkJMTQxMjExMDIwQTQ4NzgwOTAw
NDgwMjU1IC8qIG1pbmlkb20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbWlu
aWRvbS5jOyBwYXRoID0gdGVzdHMvbWluaWRvbS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUgLyogbWluaWRvbS5qcyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IG1pbmlkb20uanM7IHBhdGggPSB0ZXN0cy9taW5p
ZG9tLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEyMTEyMDBBNDg3OTNDMDA0
ODAyNTUgLyogbWluaWRvbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZp
bGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAw
OyBwYXRoID0gbWluaWRvbTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJ
MTQxNDJFNTAxQjc5NkVDRTAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MTQyRTUyMUI3OTZFREQwMEY0
QkY0QiAvKiBFeGVjdXRhYmxlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFeGVjdXRhYmxlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDE0MkU1
NDFCNzk3M0MwMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDE0NDhDQTEzQTE3NkVDMDBG
NUJBMUEgLyogTWFya2VkQmxvY2tTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWFya2VkQmxvY2tTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxNDQ4
Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUaW55Qmxvb21GaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQxNTAxMzIxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtTZXRJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDI4LDYgKzU0MzQsNyBAQAogCQkJCTBGQkMwQUU0MTQ5
NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCQzBBRTUxNDk2
QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8sCiAJCQkJOTY5QTA3OTIwRUQxRDNB
RTAwRjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCAqLywKKwkJCQkxNDE0MkU1MjFCNzk2RUREMDBG
NEJGNEIgLyogRXhlY3V0YWJsZUluZm8uaCAqLywKIAkJCQkwRjU2QTFENDE1MDAxQ0YyMDAyOTky
QjEgLyogRXhlY3V0aW9uQ291bnRlci5jcHAgKi8sCiAJCQkJMEY1NkExRDExNTAwMEYzMTAwMjk5
MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCAqLywKIAkJCQkwRjAzMzJCRjE4QURGQUUxMDA1Rjk3
OUEgLyogRXhpdGluZ0pJVFR5cGUuY3BwICovLApAQCAtNTQ5NSw2ICs1NTAyLDggQEAKIAkJCQkw
RjJENERFNzE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmggKi8sCiAJCQkJQTc5RTc4
MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmNwcCAqLywKIAkJCQlBNzlF
NzgxRjE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suaCAqLywKKwkJCQkxNDE0
MkU1MDFCNzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCAqLywK
KwkJCQkxNDE0MkU1NDFCNzk3M0MwMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUuY3BwICovLAogCQkJCUI1OUY4OTM4MTg5MUFEQjUwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3Ry
dWN0aW9uU3RyZWFtLmNwcCAqLywKIAkJCQlCNTlGODkzNzE4OTFBRDMzMDBENUNDREMgLyogVW5s
aW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oICovLAogCQkJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlC
MiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKQEAgLTYwODMsMTIgKzYwOTIsMTQgQEAKIAkJCQkwRkRE
QkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdW
YXJpYWJsZUV2ZW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDE0MkU1MTFCNzk2RUNF
MDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRkZDOTYwMTRFRjkwQkQwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzk3RjQyMTgyMDIxMTkwMDJDOUIyNiAv
KiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRC
MkNFODE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjQyNzMxMTU4RUJENTQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MDQ0N0VFMTdBMEJENzAwMEY1ODk4RSAvKiBEdW1wQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTlFNDVBMjQxOEExQjI1OTAwMjZEODhGIC8qIEVtcHR5SW5wdXRDdXJzb3Iu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0MTQyRTUzMUI3OTZFREQwMEY0QkY0QiAvKiBFeGVjdXRh
YmxlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjYxOEExQjI1OTAwMjZEODhGIC8q
IEVuY29kZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODc0RUUxOTRGRUIxMjAwQUFC
MkMxIC8qIERGR01heUV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzA0NjA3MEUxRjQ5N0Yw
MDMyMzJDRiAvKiBFcnJvci5oIGluIEhlYWRlcnMgKi8sCkBAIC03NjQ2LDYgKzc2NTcsNyBAQAog
CQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5NUFCODM0MjBEQTQzMjI1MDBCQzgzRjMgLyogTGVnYWN5
UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4RjIxQjAxMDdFQzU0MTAwNDJFQzJD
IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0MTQyRTU1MUI3OTczQzAwMEY0QkY0
QiAvKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY0Mjc1NzE1OTE0QTIwMDA0Q0I5RkYgLyogTGlua0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0UyRUE2QzBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRhYmxlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlSW5mby5oCShyZXZpc2lvbiAxODgyMTkpCShmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOjE4ODIxOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFVubGlua2VkQ29kZUJsb2NrX2gKKyNkZWZpbmUgVW5saW5rZWRD
b2RlQmxvY2tfaAorCisjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgorI2luY2x1ZGUg
IkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKKyNpbmNsdWRlICJDb2RlVHlwZS5oIgorI2luY2x1
ZGUgIkNvbnN0cnVjdEFiaWxpdHkuaCIKKyNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgi
CisjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKKyNpbmNsdWRlICJJZGVudGlmaWVyLmgiCisjaW5j
bHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJQYXJzZXJN
b2Rlcy5oIgorI2luY2x1ZGUgIlJlZ0V4cC5oIgorI2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgi
CisjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJWYXJpYWJsZUVudmlyb25tZW50
LmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZEFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgRGVidWdnZXI7CitjbGFzcyBGdW5jdGlvbk1ldGFkYXRhTm9kZTsKK2NsYXNzIEZ1
bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEpTU2NvcGU7CitjbGFzcyBQYXJzZXJFcnJvcjsKK2Ns
YXNzIFNjcmlwdEV4ZWN1dGFibGU7CitjbGFzcyBTb3VyY2VDb2RlOworY2xhc3MgU291cmNlUHJv
dmlkZXI7CitjbGFzcyBTeW1ib2xUYWJsZTsKK2NsYXNzIFVubGlua2VkQ29kZUJsb2NrOworY2xh
c3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKK2NsYXNzIFVubGlua2VkSW5zdHJ1Y3Rpb25T
dHJlYW07CisKK3R5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRWYWx1ZVByb2ZpbGU7Cit0eXBlZGVm
IHVuc2lnbmVkIFVubGlua2VkQXJyYXlQcm9maWxlOwordHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtl
ZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7Cit0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU7Cit0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkTExJbnRDYWxsTGlu
a0luZm87CisKK3N0cnVjdCBFeGVjdXRhYmxlSW5mbyB7CisgICAgRXhlY3V0YWJsZUluZm8oYm9v
bCBuZWVkc0FjdGl2YXRpb24sIGJvb2wgdXNlc0V2YWwsIGJvb2wgaXNTdHJpY3RNb2RlLCBib29s
IGlzQ29uc3RydWN0b3IsIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24sIENvbnN0cnVjdG9yS2luZCBj
b25zdHJ1Y3RvcktpbmQpCisgICAgICAgIDogbV9uZWVkc0FjdGl2YXRpb24obmVlZHNBY3RpdmF0
aW9uKQorICAgICAgICAsIG1fdXNlc0V2YWwodXNlc0V2YWwpCisgICAgICAgICwgbV9pc1N0cmlj
dE1vZGUoaXNTdHJpY3RNb2RlKQorICAgICAgICAsIG1faXNDb25zdHJ1Y3Rvcihpc0NvbnN0cnVj
dG9yKQorICAgICAgICAsIG1faXNCdWlsdGluRnVuY3Rpb24oaXNCdWlsdGluRnVuY3Rpb24pCisg
ICAgICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvbnN0cnVj
dG9yS2luZCkpCisgICAgeworICAgICAgICBBU1NFUlQobV9jb25zdHJ1Y3RvcktpbmQgPT0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvbnN0cnVjdG9yS2luZCkpOworICAgIH0KKworICAgIGJvb2wg
bmVlZHNBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0FjdGl2YXRpb247IH0KKyAg
ICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRXZhbDsgfQorICAgIGJvb2wg
aXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0cmljdE1vZGU7IH0KKyAgICBib29s
IGlzQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2lzQ29uc3RydWN0b3I7IH0KKyAgICBi
b29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1aWx0aW5GdW5jdGlv
bjsgfQorICAgIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxDb25zdHJ1Y3RvcktpbmQ+KG1fY29uc3RydWN0b3JLaW5kKTsgfQorCitw
cml2YXRlOgorICAgIHVuc2lnbmVkIG1fbmVlZHNBY3RpdmF0aW9uIDogMTsKKyAgICB1bnNpZ25l
ZCBtX3VzZXNFdmFsIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzU3RyaWN0TW9kZSA6IDE7CisgICAg
dW5zaWduZWQgbV9pc0NvbnN0cnVjdG9yIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzQnVpbHRpbkZ1
bmN0aW9uIDogMTsKKyAgICB1bnNpZ25lZCBtX2NvbnN0cnVjdG9yS2luZCA6IDI7Cit9OworCitl
bnVtIFVubGlua2VkRnVuY3Rpb25LaW5kIHsKKyAgICBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLAor
ICAgIFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uLAorfTsKKworY2xhc3MgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICBmcmllbmQg
Y2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOworICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7Cisg
ICAgZnJpZW5kIGNsYXNzIFZNOworCisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIGNyZWF0ZShWTSogdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25N
ZXRhZGF0YU5vZGUqIG5vZGUsIFVubGlua2VkRnVuY3Rpb25LaW5kIHVubGlua2VkRnVuY3Rpb25L
aW5kLCBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxpdHksIFZhcmlhYmxlRW52aXJvbm1l
bnQmIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBSZWZQdHI8U291cmNlUHJvdmlkZXI+JiYgc291
cmNlT3ZlcnJpZGUgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUu
Z2V0KCksIHNvdXJjZSwgV1RGOjptb3ZlKHNvdXJjZU92ZXJyaWRlKSwgbm9kZSwgdW5saW5rZWRG
dW5jdGlvbktpbmQsIGNvbnN0cnVjdEFiaWxpdHksIHBhcmVudFNjb3BlVERaVmFyaWFibGVzKTsK
KyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKKyAgICB9CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3QgSWRlbnRpZmllciYgaW5mZXJyZWROYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWU7IH0KKyAgICBKU1N0cmluZyogbmFtZVZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lVmFsdWUuZ2V0KCk7IH0KKyAgICB1bnNpZ25lZCBwYXJhbWV0
ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnQ7IH07CisgICAgRnVuY3Rp
b25QYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZU1vZGU7IH07Cisg
ICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblN0cmljdENv
bnRleHQ7IH0KKyAgICBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8RnVuY3Rpb25Nb2RlPihtX2Z1bmN0aW9uTW9kZSk7IH0KKyAgICBDb25zdHJ1
Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29u
c3RydWN0b3JLaW5kPihtX2NvbnN0cnVjdG9yS2luZCk7IH0KKworICAgIHVuc2lnbmVkIHVubGlu
a2VkRnVuY3Rpb25OYW1lU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRnVuY3Rpb25O
YW1lU3RhcnQ7IH0KKyAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlTdGFydENvbHVtbigpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW47IH0KKyAgICB1bnNpZ25lZCB1bmxp
bmtlZEJvZHlFbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQm9keUVuZENvbHVt
bjsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9m
ZnNldDsgfQorICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCgpIHsgcmV0dXJuIG1fc291cmNlTGVu
Z3RoOyB9CisgICAgdW5zaWduZWQgcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCB0eXBlUHJvZmlsaW5n
U3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldDsg
fQorICAgIHVuc2lnbmVkIHR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7IH0KKworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIGNvZGVCbG9ja0ZvcigKKyAgICAgICAgVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIAorICAgICAgICBQ
YXJzZXJFcnJvciYpOworCisgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBm
cm9tR2xvYmFsQ29kZSgKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYsIEV4ZWNTdGF0ZSYsIGNv
bnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdComIGV4Y2VwdGlvbiwgCisgICAgICAgIGludCBvdmVy
cmlkZUxpbmVOdW1iZXIpOworCisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBsaW5rKFZNJiwgY29u
c3QgU291cmNlQ29kZSYsIGludCBvdmVycmlkZUxpbmVOdW1iZXIgPSAtMSk7CisKKyAgICB2b2lk
IGNsZWFyQ29kZUZvclJlY29tcGlsYXRpb24oKQorICAgIHsKKyAgICAgICAgbV9jb2RlQmxvY2tG
b3JDYWxsLmNsZWFyKCk7CisgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmNsZWFyKCk7
CisgICAgfQorCisgICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJv
b2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMpCisgICAgeworICAgICAgICBtX2ZlYXR1cmVzID0gZmVh
dHVyZXM7CisgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlh
YmxlczsKKyAgICB9CisKKyAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVy
biBtX2ZlYXR1cmVzOyB9CisgICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7IH0KKworICAgIHN0YXRpYyBjb25zdCBib29s
IG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CisKKyAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1
aWx0aW5GdW5jdGlvbjsgfQorICAgIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbnN0cnVjdEFiaWxpdHk+KG1fY29uc3RydWN0
QWJpbGl0eSk7IH0KKyAgICBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gY29uc3RydWN0b3JLaW5kKCkgIT0gQ29uc3RydWN0b3JLaW5kOjpOb25lOyB9Cisg
ICAgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCogcGFyZW50U2NvcGVURFpWYXJpYWJsZXMoKSBj
b25zdCB7IHJldHVybiAmbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlczsgfQorCitwcml2YXRlOgor
ICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291
cmNlQ29kZSYsIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4mJiBzb3VyY2VPdmVycmlkZSwgRnVuY3Rp
b25NZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwg
VmFyaWFibGVFbnZpcm9ubWVudCYpOworICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CisgICAgV3JpdGVCYXJyaWVyPFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OworCisgICAgSWRlbnRp
ZmllciBtX25hbWU7CisgICAgSWRlbnRpZmllciBtX2luZmVycmVkTmFtZTsKKyAgICBXcml0ZUJh
cnJpZXI8SlNTdHJpbmc+IG1fbmFtZVZhbHVlOworICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4g
bV9zb3VyY2VPdmVycmlkZTsKKyAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fcGFyZW50U2NvcGVU
RFpWYXJpYWJsZXM7CisgICAgdW5zaWduZWQgbV9maXJzdExpbmVPZmZzZXQ7CisgICAgdW5zaWdu
ZWQgbV9saW5lQ291bnQ7CisgICAgdW5zaWduZWQgbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0
OworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW47CisgICAgdW5zaWduZWQg
bV91bmxpbmtlZEJvZHlFbmRDb2x1bW47CisgICAgdW5zaWduZWQgbV9zdGFydE9mZnNldDsKKyAg
ICB1bnNpZ25lZCBtX3NvdXJjZUxlbmd0aDsKKyAgICB1bnNpZ25lZCBtX3BhcmFtZXRlcnNTdGFy
dE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldDsKKyAgICB1
bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9wYXJhbWV0
ZXJDb3VudDsKKyAgICBGdW5jdGlvblBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKKworICAgIENvZGVG
ZWF0dXJlcyBtX2ZlYXR1cmVzOworCisgICAgdW5zaWduZWQgbV9pc0luU3RyaWN0Q29udGV4dCA6
IDE7CisgICAgdW5zaWduZWQgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CisgICAgdW5zaWdu
ZWQgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgdW5zaWduZWQgbV9jb25zdHJ1Y3RBYmls
aXR5OiAxOworICAgIHVuc2lnbmVkIG1fY29uc3RydWN0b3JLaW5kIDogMjsKKyAgICB1bnNpZ25l
ZCBtX2Z1bmN0aW9uTW9kZSA6IDE7IC8vIEZ1bmN0aW9uTW9kZQorCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIG1fbmFtZVZhbHVlLnNldCh2bSwgdGhpcywganNTdHJpbmco
JnZtLCBuYW1lKCkuc3RyaW5nKCkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOworfTsKKworc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBpbnQzMl90PiBTdHJpbmdP
ZmZzZXRUYWJsZTsKKyAgICBTdHJpbmdPZmZzZXRUYWJsZSBvZmZzZXRUYWJsZTsKKworICAgIGlu
bGluZSBpbnQzMl90IG9mZnNldEZvclZhbHVlKFN0cmluZ0ltcGwqIHZhbHVlLCBpbnQzMl90IGRl
ZmF1bHRPZmZzZXQpCisgICAgeworICAgICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gb2Zmc2V0VGFibGUuZW5kKCk7CisgICAgICAgIFN0cmluZ09mZnNldFRhYmxl
Ojpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKKyAgICAgICAg
aWYgKGxvYyA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdE9mZnNldDsKKyAgICAg
ICAgcmV0dXJuIGxvYy0+dmFsdWU7CisgICAgfQorCit9OworCitzdHJ1Y3QgVW5saW5rZWRTaW1w
bGVKdW1wVGFibGUgeworICAgIFZlY3RvcjxpbnQzMl90PiBicmFuY2hPZmZzZXRzOworICAgIGlu
dDMyX3QgbWluOworCisgICAgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShpbnQzMl90IHZhbHVlLCBp
bnQzMl90IGRlZmF1bHRPZmZzZXQpOworICAgIHZvaWQgYWRkKGludDMyX3Qga2V5LCBpbnQzMl90
IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghYnJhbmNoT2Zmc2V0c1trZXldKQorICAgICAg
ICAgICAgYnJhbmNoT2Zmc2V0c1trZXldID0gb2Zmc2V0OworICAgIH0KK307CisKK3N0cnVjdCBV
bmxpbmtlZEluc3RydWN0aW9uIHsKKyAgICBVbmxpbmtlZEluc3RydWN0aW9uKCkgeyB1Lm9wZXJh
bmQgPSAwOyB9CisgICAgVW5saW5rZWRJbnN0cnVjdGlvbihPcGNvZGVJRCBvcGNvZGUpIHsgdS5v
cGNvZGUgPSBvcGNvZGU7IH0KKyAgICBVbmxpbmtlZEluc3RydWN0aW9uKGludCBvcGVyYW5kKSB7
IHUub3BlcmFuZCA9IG9wZXJhbmQ7IH0KKyAgICB1bmlvbiB7CisgICAgICAgIE9wY29kZUlEIG9w
Y29kZTsKKyAgICAgICAgaW50MzJfdCBvcGVyYW5kOworICAgICAgICB1bnNpZ25lZCBpbmRleDsK
KyAgICB9IHU7Cit9OworCitjbGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwg
eworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKworICAgIGVudW0geyBDYWxs
RnVuY3Rpb24sIEFwcGx5RnVuY3Rpb24gfTsKKworICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvcjsgfQorICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1N0cmljdE1vZGU7IH0KKyAgICBib29sIHVzZXNFdmFsKCkgY29u
c3QgeyByZXR1cm4gbV91c2VzRXZhbDsgfQorCisgICAgYm9vbCBuZWVkc0Z1bGxTY29wZUNoYWlu
KCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0Z1bGxTY29wZUNoYWluOyB9CisKKyAgICB2b2lkIGFk
ZEV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCBpbnQgZGl2b3QsCisg
ICAgICAgIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5z
aWduZWQgY29sdW1uKTsKKworICAgIHZvaWQgYWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8o
dW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVk
IGVuZERpdm90KTsKKworICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4
cHJlc3Npb25JbmZvLnNpemUoKTsgfQorCisgICAgLy8gU3BlY2lhbCByZWdpc3RlcnMKKyAgICB2
b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhp
c1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CisgICAgdm9pZCBzZXRTY29wZVJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7IG1fc2NvcGVSZWdpc3RlciA9IHNjb3BlUmVn
aXN0ZXI7IH0KKyAgICB2b2lkIHNldEFjdGl2YXRpb25SZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
YWN0aXZhdGlvblJlZ2lzdGVyKSB7IG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIgPSBhY3Rp
dmF0aW9uUmVnaXN0ZXI7IH0KKworICAgIGJvb2wgdXNlc0dsb2JhbE9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIuaXNWYWxpZCgpOyB9CisgICAgdm9pZCBzZXRH
bG9iYWxPYmplY3RSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIp
IHsgbV9nbG9iYWxPYmplY3RSZWdpc3RlciA9IGdsb2JhbE9iamVjdFJlZ2lzdGVyOyB9CisgICAg
VmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9iamVjdFJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9n
bG9iYWxPYmplY3RSZWdpc3RlcjsgfQorCisgICAgLy8gUGFyYW1ldGVyIGluZm9ybWF0aW9uCisg
ICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSkgeyBtX251bVBhcmFtZXRlcnMg
PSBuZXdWYWx1ZTsgfQorICAgIHZvaWQgYWRkUGFyYW1ldGVyKCkgeyBtX251bVBhcmFtZXRlcnMr
KzsgfQorICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBh
cmFtZXRlcnM7IH0KKworICAgIHVuc2lnbmVkIGFkZFJlZ0V4cChSZWdFeHAqIHIpCisgICAgewor
ICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIHVuc2lnbmVkIHNp
emUgPSBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOworICAgICAgICBtX3JhcmVEYXRhLT5t
X3JlZ2V4cHMuYXBwZW5kKFdyaXRlQmFycmllcjxSZWdFeHA+KCptX3ZtLCB0aGlzLCByKSk7Cisg
ICAgICAgIHJldHVybiBzaXplOworICAgIH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ0V4cHMo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOworICAg
IH0KKyAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgQVNTRVJUKG1fcmFyZURh
dGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzW2luZGV4XS5nZXQoKTsgfQorCisgICAg
Ly8gQ29uc3RhbnQgUG9vbHMKKworICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9pZGVudGlmaWVycy5zaXplKCk7IH0KKyAgICB2b2lkIGFkZElkZW50aWZp
ZXIoY29uc3QgSWRlbnRpZmllciYgaSkgeyByZXR1cm4gbV9pZGVudGlmaWVycy5hcHBlbmQoaSk7
IH0KKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKGludCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyc1tpbmRleF07IH0KKyAgICBjb25zdCBWZWN0b3I8SWRlbnRpZmll
cj4mIGlkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyczsgfQorCisgICAg
dW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24g
c291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhl
cikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMu
c2l6ZSgpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8
VW5rbm93bj4oKSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldCgqbV92
bSwgdGhpcywgdik7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
LmFwcGVuZChzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudChMaW5rVGltZUNvbnN0YW50IHR5cGUp
CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNp
emUoKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpOworICAgICAgICBBU1NFUlQoaW5kZXggPCBMaW5r
VGltZUNvbnN0YW50Q291bnQpOworICAgICAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW2luZGV4XSA9
IHJlc3VsdDsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVy
PFVua25vd24+KCkpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIHVuc2lnbmVkIHJlZ2lzdGVySW5kZXhGb3JMaW5rVGltZUNv
bnN0YW50KExpbmtUaW1lQ29uc3RhbnQgdHlwZSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpOworICAgICAgICBBU1NFUlQoaW5kZXgg
PCBMaW5rVGltZUNvbnN0YW50Q291bnQpOworICAgICAgICByZXR1cm4gbV9saW5rVGltZUNvbnN0
YW50c1tpbmRleF07CisgICAgfQorICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93
bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0K
KyAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9j
b25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KKworICAgIC8vIEp1bXBzCisgICAg
c2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRz
LnNpemUoKTsgfQorICAgIHZvaWQgYWRkSnVtcFRhcmdldCh1bnNpZ25lZCBqdW1wVGFyZ2V0KSB7
IG1fanVtcFRhcmdldHMuYXBwZW5kKGp1bXBUYXJnZXQpOyB9CisgICAgdW5zaWduZWQganVtcFRh
cmdldChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHNbaW5kZXhdOyB9Cisg
ICAgdW5zaWduZWQgbGFzdEp1bXBUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRz
Lmxhc3QoKTsgfQorCisgICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1faXNCdWlsdGluRnVuY3Rpb247IH0KKworICAgIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3Rv
cktpbmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb25zdHJ1Y3RvcktpbmQ+KG1fY29u
c3RydWN0b3JLaW5kKTsgfQorCisgICAgdm9pZCBzaHJpbmtUb0ZpdCgpCisgICAgeworICAgICAg
ICBtX2p1bXBUYXJnZXRzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1faWRlbnRpZmllcnMuc2hy
aW5rVG9GaXQoKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5zaHJpbmtUb0ZpdCgp
OworICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9mdW5j
dGlvbkV4cHJzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9leHByZXNzaW9uSW5mby5zaHJpbmtUb0Zp
dCgpOworCisjaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQorICAgICAgICBtX2J5dGVjb2Rl
Q29tbWVudHMuc2hyaW5rVG9GaXQoKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9yYXJlRGF0YSkg
eworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaHJpbmtUb0Zp
dCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNocmlua1RvRml0KCk7Cisg
ICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7
CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5r
VG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQb3Np
dGlvbnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0SW5z
dHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtPik7Cisg
ICAgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7
CisKKyAgICBpbnQgbV9udW1WYXJzOworICAgIGludCBtX251bUNhcHR1cmVkVmFyczsKKyAgICBp
bnQgbV9udW1DYWxsZWVSZWdpc3RlcnM7CisKKyAgICAvLyBKdW1wIFRhYmxlcworCisgICAgc2l6
ZV90IG51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEg
PyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQorICAgIFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiBhZGRTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRh
SWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRh
Ymxlcy5sYXN0KCk7IH0KKyAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgc3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURh
dGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQorCisgICAgc2l6ZV90IG51bWJl
ck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBt
X3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQorICAgIFVu
bGlua2VkU3RyaW5nSnVtcFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0
ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzLmFwcGVuZChVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KKyAgICBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVCht
X3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsgfQorCisgICAgdW5zaWduZWQgYWRkRnVuY3Rpb25EZWNsKFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBuKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVu
Y3Rpb25EZWNscy5zaXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBlbmQoV3JpdGVC
YXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKKyAgICAgICAgbV9mdW5jdGlv
bkRlY2xzLmxhc3QoKS5zZXQoKm1fdm0sIHRoaXMsIG4pOworICAgICAgICByZXR1cm4gc2l6ZTsK
KyAgICB9CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQg
aW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBzaXpl
X3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUo
KTsgfQorICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRXhwcihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogbikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRXhwcnMu
c2l6ZSgpOworICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5sYXN0
KCkuc2V0KCptX3ZtLCB0aGlzLCBuKTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4KSB7IHJl
dHVybiBtX2Z1bmN0aW9uRXhwcnNbaW5kZXhdLmdldCgpOyB9CisgICAgc2l6ZV90IG51bWJlck9m
RnVuY3Rpb25FeHBycygpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHBycy5zaXplKCk7IH0KKworICAg
IC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CisgICAgc2l6ZV90IG51bWJlck9mRXhjZXB0
aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9l
eGNlcHRpb25IYW5kbGVycy5zaXplKCkgOiAwOyB9CisgICAgdm9pZCBhZGRFeGNlcHRpb25IYW5k
bGVyKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIpIHsgY3JlYXRlUmFyZURhdGFJ
Zk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5hcHBl
bmQoaGFuZGxlcik7IH0KKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVy
KGludCBpbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4
Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQorCisgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4g
bV92bTsgfQorCisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYWRkQXJyYXlQcm9maWxlKCkgeyBy
ZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJh
eVByb2ZpbGVzKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudDsgfQorICAgIFVubGlua2Vk
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSBhZGRBcnJheUFsbG9jYXRpb25Qcm9maWxlKCkgeyByZXR1
cm4gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQrKzsgfQorICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMoKSB7IHJldHVybiBtX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGVDb3VudDsgfQorICAgIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUgYWRkT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSB7IHJldHVybiBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
Q291bnQrKzsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVz
KCkgeyByZXR1cm4gbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50OyB9CisgICAgVW5saW5r
ZWRWYWx1ZVByb2ZpbGUgYWRkVmFsdWVQcm9maWxlKCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVD
b3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4g
bV92YWx1ZVByb2ZpbGVDb3VudDsgfQorCisgICAgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbyBh
ZGRMTEludENhbGxMaW5rSW5mbygpIHsgcmV0dXJuIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudCsr
OyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZMTGludENhbGxMaW5rSW5mb3MoKSB7IHJldHVybiBt
X2xsaW50Q2FsbExpbmtJbmZvQ291bnQ7IH0KKworICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQorCisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdp
c3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0KKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYWN0aXZhdGlvblJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9s
ZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcjsgfQorICAgIGJvb2wgaGFzQWN0aXZhdGlvblJlZ2lz
dGVyKCkgY29uc3QgeyByZXR1cm4gbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci5pc1ZhbGlk
KCk7IH0KKworICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbih1bnNpZ25lZCBw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgbV9wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9ucy5hcHBlbmQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbik7CisgICAgfQor
CisgICAgc2l6ZV90IG51bWJlck9mUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKSBjb25zdCB7
IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQorICAgIGNvbnN0
IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsgfQorCisgICAgdHlwZWRlZiBWZWN0
b3I8SlNWYWx1ZT4gQ29uc3RhbnRCdWZmZXI7CisKKyAgICBzaXplX3QgY29uc3RhbnRCdWZmZXJD
b3VudCgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFu
dEJ1ZmZlcnMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnRCdWZmZXIodW5zaWdu
ZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwor
ICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6
ZSgpOworICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5hcHBlbmQoVmVjdG9y
PEpTVmFsdWU+KGxlbmd0aCkpOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisKKyAgICBj
b25zdCBDb25zdGFudEJ1ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBtX3Jh
cmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpbmRleF07CisgICAgfQorCisgICAgQ29uc3RhbnRC
dWZmZXImIGNvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fcmFyZURhdGEpOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1
ZmZlcnNbaW5kZXhdOworICAgIH0KKworICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7IHJl
dHVybiBtX3JhcmVEYXRhLmdldCgpOyB9CisKKyAgICBpbnQgbGluZU51bWJlckZvckJ5dGVjb2Rl
T2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKworICAgIHZvaWQgZXhwcmVzc2lvblJh
bmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3Qs
CisgICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGlu
ZSwgdW5zaWduZWQmIGNvbHVtbik7CisKKyAgICBib29sIHR5cGVQcm9maWxlckV4cHJlc3Npb25J
bmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkJiBz
dGFydERpdm90LCB1bnNpZ25lZCYgZW5kRGl2b3QpOworCisgICAgdm9pZCByZWNvcmRQYXJzZShD
b2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIHVuc2lnbmVk
IGZpcnN0TGluZSwgdW5zaWduZWQgbGluZUNvdW50LCB1bnNpZ25lZCBlbmRDb2x1bW4pCisgICAg
eworICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7CisgICAgICAgIG1faGFzQ2FwdHVyZWRW
YXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKKyAgICAgICAgbV9maXJzdExpbmUgPSBm
aXJzdExpbmU7CisgICAgICAgIG1fbGluZUNvdW50ID0gbGluZUNvdW50OworICAgICAgICAvLyBG
b3IgdGhlIFVubGlua2VkQ29kZUJsb2NrLCBzdGFydENvbHVtbiBpcyBhbHdheXMgMC4KKyAgICAg
ICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47CisgICAgfQorCisgICAgQ29kZUZlYXR1cmVzIGNv
ZGVGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KKyAgICBib29sIGhhc0Nh
cHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsg
fQorICAgIHVuc2lnbmVkIGZpcnN0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lOyB9
CisgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4g
MDsgfQorICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1u
OyB9CisKKyAgICB2b2lkIGFkZE9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXQoc2l6
ZV90IG9mZnNldCkgeyBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmFwcGVu
ZChvZmZzZXQpOyB9CisgICAgY29uc3QgVmVjdG9yPHNpemVfdD4mIG9wUHJvZmlsZUNvbnRyb2xG
bG93Qnl0ZWNvZGVPZmZzZXRzKCkgY29uc3QgeyByZXR1cm4gbV9vcFByb2ZpbGVDb250cm9sRmxv
d0J5dGVjb2RlT2Zmc2V0czsgfQorCisgICAgdm9pZCBkdW1wRXhwcmVzc2lvblJhbmdlSW5mbygp
OyAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seS4KKworcHJvdGVjdGVkOgorICAgIFVubGlu
a2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJik7CisgICAgflVubGlua2VkQ29kZUJsb2NrKCk7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gR2xvYmFsQ29kZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIFN5bWJvbFRhYmxlOjpjcmVhdGUo
dm0pKTsKKyAgICB9CisKK3ByaXZhdGU6CisKKyAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNl
c3NhcnkoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICAgICAgbV9y
YXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAgfQorCisgICAgdm9p
ZCBnZXRMaW5lQW5kQ29sdW1uKEV4cHJlc3Npb25SYW5nZUluZm8mLCB1bnNpZ25lZCYgbGluZSwg
dW5zaWduZWQmIGNvbHVtbik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5saW5rZWRJbnN0cnVj
dGlvblN0cmVhbT4gbV91bmxpbmtlZEluc3RydWN0aW9uczsKKworICAgIGludCBtX251bVBhcmFt
ZXRlcnM7CisgICAgVk0qIG1fdm07CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0
ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKKworICAgIHVuc2lnbmVkIG1fbmVlZHNGdWxsU2NvcGVD
aGFpbiA6IDE7CisgICAgdW5zaWduZWQgbV91c2VzRXZhbCA6IDE7CisgICAgdW5zaWduZWQgbV9p
c1N0cmljdE1vZGUgOiAxOworICAgIHVuc2lnbmVkIG1faXNDb25zdHJ1Y3RvciA6IDE7CisgICAg
dW5zaWduZWQgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CisgICAgdW5zaWduZWQgbV9pc0J1
aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgdW5zaWduZWQgbV9jb25zdHJ1Y3RvcktpbmQgOiAyOwor
CisgICAgdW5zaWduZWQgbV9maXJzdExpbmU7CisgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7Cisg
ICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CisKKyAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsK
KyAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2p1bXBU
YXJnZXRzOworCisgICAgLy8gQ29uc3RhbnQgUG9vbHMKKyAgICBWZWN0b3I8SWRlbnRpZmllcj4g
bV9pZGVudGlmaWVyczsKKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0
YW50UmVnaXN0ZXJzOworICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOworICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQs
IExpbmtUaW1lQ29uc3RhbnRDb3VudD4gbV9saW5rVGltZUNvbnN0YW50czsKKyAgICB0eXBlZGVm
IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBGdW5jdGlv
bkV4cHJlc3Npb25WZWN0b3I7CisgICAgRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rp
b25EZWNsczsKKyAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkV4cHJzOwor
CisgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOworCisgICAgVmVj
dG9yPHVuc2lnbmVkPiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOworCisjaWYgRU5BQkxF
KEJZVEVDT0RFX0NPTU1FTlRTKQorICAgIFZlY3RvcjxDb21tZW50PiAgbV9ieXRlY29kZUNvbW1l
bnRzOworICAgIHNpemVfdCBtX2J5dGVjb2RlQ29tbWVudEl0ZXJhdG9yOworI2VuZGlmCisKKyAg
ICB1bnNpZ25lZCBtX2FycmF5UHJvZmlsZUNvdW50OworICAgIHVuc2lnbmVkIG1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZUNvdW50OworICAgIHVuc2lnbmVkIG1fb2JqZWN0QWxsb2NhdGlvblByb2Zp
bGVDb3VudDsKKyAgICB1bnNpZ25lZCBtX3ZhbHVlUHJvZmlsZUNvdW50OworICAgIHVuc2lnbmVk
IG1fbGxpbnRDYWxsTGlua0luZm9Db3VudDsKKworcHVibGljOgorICAgIHN0cnVjdCBSYXJlRGF0
YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAg
ICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CisKKyAg
ICAgICAgLy8gUmFyZSBDb25zdGFudHMKKyAgICAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxSZWdF
eHA+PiBtX3JlZ2V4cHM7CisKKyAgICAgICAgLy8gQnVmZmVycyB1c2VkIGZvciBsYXJnZSBhcnJh
eSBsaXRlcmFscworICAgICAgICBWZWN0b3I8Q29uc3RhbnRCdWZmZXI+IG1fY29uc3RhbnRCdWZm
ZXJzOworCisgICAgICAgIC8vIEp1bXAgVGFibGVzCisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBWZWN0b3I8VW5saW5r
ZWRTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBW
ZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24+IG1fZXhwcmVzc2lvbkluZm9G
YXRQb3NpdGlvbnM7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFy
ZURhdGE+IG1fcmFyZURhdGE7CisgICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhw
cmVzc2lvbkluZm87CisgICAgc3RydWN0IFR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSB7Cisg
ICAgICAgIHVuc2lnbmVkIG1fc3RhcnREaXZvdDsKKyAgICAgICAgdW5zaWduZWQgbV9lbmREaXZv
dDsKKyAgICB9OworICAgIEhhc2hNYXA8dW5zaWduZWQsIFR5cGVQcm9maWxlckV4cHJlc3Npb25S
YW5nZT4gbV90eXBlUHJvZmlsZXJJbmZvTWFwOworICAgIFZlY3RvcjxzaXplX3Q+IG1fb3BQcm9m
aWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK3B1YmxpYzoKKyAg
ICBERUNMQVJFX0lORk87Cit9OworCitjbGFzcyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayA6IHB1
YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZENv
ZGVCbG9jayBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2so
Vk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4
ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5
cGUsIGluZm8pCisgICAgeworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKK307CisKK2NsYXNz
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENv
ZGVCbG9jayB7Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7CisgICAgc3Rh
dGljIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mIGluZm8pCisgICAgeworICAgICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sq
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbyk7CisgICAgICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAg
fQorCitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CisKKyAgICB2b2lkIHNldFZhcmlhYmxlRGVjbGFyYXRpb25zKGNvbnN0IFZhcmlh
YmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50KSB7IG1fdmFyRGVjbGFyYXRpb25zID0gZW52aXJv
bm1lbnQ7IH0KKyAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJpYWJsZURlY2xhcmF0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyRGVjbGFyYXRpb25zOyB9CisKKyAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6Cisg
ICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSwgR2xvYmFsQ29kZSwgaW5mbykKKyAgICB7CisgICAgfQorCisgICAgVmFyaWFibGVFbnZpcm9u
bWVudCBtX3ZhckRlY2xhcmF0aW9uczsKKworcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1R5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87
Cit9OworCitjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2sgeworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hl
OworCisgICAgc3RhdGljIFVubGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgeworICAgICAgICBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFs
Q29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkRXZhbENvZGVCbG9jayh2bSwgdm0tPnVubGlu
a2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbyk7CisgICAgICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQor
CitwdWJsaWM6CisgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJpYWJsZSh1bnNpZ25lZCBpbmRleCkg
eyByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbnVtVmFyaWFibGVz
KCkgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgdm9pZCBhZG9wdFZhcmlhYmxl
cyhWZWN0b3I8SWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiB2YXJpYWJsZXMp
CisgICAgeworICAgICAgICBBU1NFUlQobV92YXJpYWJsZXMuaXNFbXB0eSgpKTsKKyAgICAgICAg
bV92YXJpYWJsZXMuc3dhcCh2YXJpYWJsZXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBVbmxp
bmtlZEV2YWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhl
Y3V0YWJsZUluZm8mIGluZm8pCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBFdmFsQ29k
ZSwgaW5mbykKKyAgICB7CisgICAgfQorCisgICAgVmVjdG9yPElkZW50aWZpZXIsIDAsIFVuc2Fm
ZVZlY3Rvck92ZXJmbG93PiBtX3ZhcmlhYmxlczsKKworcHVibGljOgorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRXZhbENvZGVCbG9j
a1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lO
Rk87Cit9OworCitjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrIGZpbmFsIDogcHVibGlj
IFVubGlua2VkQ29kZUJsb2NrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkQ29kZUJs
b2NrIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGljIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvZGVUeXBlIGNvZGVUeXBl
LCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY29k
ZVR5cGUsIGluZm8pOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKKyAg
ICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CisKK3ByaXZhdGU6CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mIGluZm8pCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwg
aW5mbykKKyAgICB7CisgICAgfQorICAgIAorcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZP
OworfTsKKworfQorCisjZW5kaWYgLy8gVW5saW5rZWRDb2RlQmxvY2tfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVJbmZvLmgJKHdvcmtpbmcg
Y29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw0OSArMjMsMTMgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBVbmxpbmtlZENvZGVCbG9ja19oCi0jZGVmaW5lIFVubGlua2VkQ29kZUJsb2Nr
X2gKKyNpZm5kZWYgRXhlY3V0YWJsZUluZm9faAorI2RlZmluZSBFeGVjdXRhYmxlSW5mb19oCiAK
LSNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCi0jaW5jbHVkZSAiQ29kZVNwZWNpYWxp
emF0aW9uS2luZC5oIgotI2luY2x1ZGUgIkNvZGVUeXBlLmgiCi0jaW5jbHVkZSAiQ29uc3RydWN0
QWJpbGl0eS5oIgotI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIKLSNpbmNsdWRlICJI
YW5kbGVySW5mby5oIgotI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJKU0NlbGwu
aCIKLSNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIlBhcnNlck1vZGVzLmgiCi0jaW5j
bHVkZSAiUmVnRXhwLmgiCi0jaW5jbHVkZSAiU3BlY2lhbFBvaW50ZXIuaCIKLSNpbmNsdWRlICJT
eW1ib2xUYWJsZS5oIgotI2luY2x1ZGUgIlZhcmlhYmxlRW52aXJvbm1lbnQuaCIKLSNpbmNsdWRl
ICJWaXJ0dWFsUmVnaXN0ZXIuaCIKLQotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBEZWJ1
Z2dlcjsKLWNsYXNzIEZ1bmN0aW9uTWV0YWRhdGFOb2RlOwotY2xhc3MgRnVuY3Rpb25FeGVjdXRh
YmxlOwotY2xhc3MgSlNTY29wZTsKLWNsYXNzIFBhcnNlckVycm9yOwotY2xhc3MgU2NyaXB0RXhl
Y3V0YWJsZTsKLWNsYXNzIFNvdXJjZUNvZGU7Ci1jbGFzcyBTb3VyY2VQcm92aWRlcjsKLWNsYXNz
IFN5bWJvbFRhYmxlOwotY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7Ci1jbGFzcyBVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrOwotY2xhc3MgVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbTsKLQotdHlw
ZWRlZiB1bnNpZ25lZCBVbmxpbmtlZFZhbHVlUHJvZmlsZTsKLXR5cGVkZWYgdW5zaWduZWQgVW5s
aW5rZWRBcnJheVByb2ZpbGU7Ci10eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZTsKLXR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZTsKLXR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbzsKLQogc3Ry
dWN0IEV4ZWN1dGFibGVJbmZvIHsKICAgICBFeGVjdXRhYmxlSW5mbyhib29sIG5lZWRzQWN0aXZh
dGlvbiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBpc1N0cmljdE1vZGUsIGJvb2wgaXNDb25zdHJ1Y3Rv
ciwgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbiwgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2lu
ZCkKICAgICAgICAgOiBtX25lZWRzQWN0aXZhdGlvbihuZWVkc0FjdGl2YXRpb24pCkBAIC05NCw2
NDQgKzU4LDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2NvbnN0cnVjdG9yS2luZCA6IDI7
CiB9OwogCi1lbnVtIFVubGlua2VkRnVuY3Rpb25LaW5kIHsKLSAgICBVbmxpbmtlZE5vcm1hbEZ1
bmN0aW9uLAotICAgIFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uLAotfTsKLQotY2xhc3MgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKLXB1YmxpYzoKLSAg
ICBmcmllbmQgY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwotICAgIGZyaWVuZCBjbGFzcyBDb2Rl
Q2FjaGU7Ci0gICAgZnJpZW5kIGNsYXNzIFZNOwotCi0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0KLSAgICBzdGF0aWMgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShWTSogdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
RnVuY3Rpb25NZXRhZGF0YU5vZGUqIG5vZGUsIFVubGlua2VkRnVuY3Rpb25LaW5kIHVubGlua2Vk
RnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxpdHksIFZhcmlhYmxl
RW52aXJvbm1lbnQmIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBSZWZQdHI8U291cmNlUHJvdmlk
ZXI+JiYgc291cmNlT3ZlcnJpZGUgPSBudWxscHRyKQotICAgIHsKLSAgICAgICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVT
dHJ1Y3R1cmUuZ2V0KCksIHNvdXJjZSwgV1RGOjptb3ZlKHNvdXJjZU92ZXJyaWRlKSwgbm9kZSwg
dW5saW5rZWRGdW5jdGlvbktpbmQsIGNvbnN0cnVjdEFiaWxpdHksIHBhcmVudFNjb3BlVERaVmFy
aWFibGVzKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7Ci0gICAgICAg
IHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaW5mZXJyZWRO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWU7IH0KLSAgICBKU1N0cmluZyogbmFt
ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lVmFsdWUuZ2V0KCk7IH0KLSAgICB1bnNpZ25l
ZCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnQ7IH07Ci0g
ICAgRnVuY3Rpb25QYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZU1v
ZGU7IH07Ci0gICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJ
blN0cmljdENvbnRleHQ7IH0KLSAgICBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Nb2RlPihtX2Z1bmN0aW9uTW9kZSk7IH0KLSAg
ICBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q29uc3RydWN0b3JLaW5kPihtX2NvbnN0cnVjdG9yS2luZCk7IH0KLQotICAgIHVuc2ln
bmVkIHVubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
RnVuY3Rpb25OYW1lU3RhcnQ7IH0KLSAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlTdGFydENvbHVt
bigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW47IH0KLSAgICB1bnNp
Z25lZCB1bmxpbmtlZEJvZHlFbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQm9k
eUVuZENvbHVtbjsgfQotICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zdGFydE9mZnNldDsgfQotICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCgpIHsgcmV0dXJuIG1f
c291cmNlTGVuZ3RoOyB9Ci0gICAgdW5zaWduZWQgcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7IH0KLSAgICB1bnNpZ25lZCB0eXBl
UHJvZmlsaW5nU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGVQcm9maWxpbmdTdGFy
dE9mZnNldDsgfQotICAgIHVuc2lnbmVkIHR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7IH0KLQotICAgIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sqIGNvZGVCbG9ja0ZvcigKLSAgICAgICAgVk0mLCBjb25zdCBTb3VyY2VDb2Rl
JiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIAot
ICAgICAgICBQYXJzZXJFcnJvciYpOwotCi0gICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBmcm9tR2xvYmFsQ29kZSgKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciYsIEV4ZWNT
dGF0ZSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdComIGV4Y2VwdGlvbiwgCi0gICAgICAg
IGludCBvdmVycmlkZUxpbmVOdW1iZXIpOwotCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBsaW5r
KFZNJiwgY29uc3QgU291cmNlQ29kZSYsIGludCBvdmVycmlkZUxpbmVOdW1iZXIgPSAtMSk7Ci0K
LSAgICB2b2lkIGNsZWFyQ29kZUZvclJlY29tcGlsYXRpb24oKQotICAgIHsKLSAgICAgICAgbV9j
b2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7Ci0gICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0
LmNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVh
dHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMpCi0gICAgewotICAgICAgICBtX2ZlYXR1
cmVzID0gZmVhdHVyZXM7Ci0gICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0
dXJlZFZhcmlhYmxlczsKLSAgICB9Ci0KLSAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMoKSBjb25z
dCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9Ci0gICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcygp
IGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7IH0KLQotICAgIHN0YXRpYyBj
b25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7Ci0KLSAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9pc0J1aWx0aW5GdW5jdGlvbjsgfQotICAgIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0
QWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbnN0cnVjdEFiaWxpdHk+KG1f
Y29uc3RydWN0QWJpbGl0eSk7IH0KLSAgICBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9u
KCkgY29uc3QgeyByZXR1cm4gY29uc3RydWN0b3JLaW5kKCkgIT0gQ29uc3RydWN0b3JLaW5kOjpO
b25lOyB9Ci0gICAgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCogcGFyZW50U2NvcGVURFpWYXJp
YWJsZXMoKSBjb25zdCB7IHJldHVybiAmbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlczsgfQotCi1w
cml2YXRlOgotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiwgU3RydWN0dXJlKiwg
Y29uc3QgU291cmNlQ29kZSYsIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4mJiBzb3VyY2VPdmVycmlk
ZSwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0
QWJpbGl0eSwgVmFyaWFibGVFbnZpcm9ubWVudCYpOwotICAgIFdyaXRlQmFycmllcjxVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7Ci0gICAgV3JpdGVCYXJyaWVy
PFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwotCi0g
ICAgSWRlbnRpZmllciBtX25hbWU7Ci0gICAgSWRlbnRpZmllciBtX2luZmVycmVkTmFtZTsKLSAg
ICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fbmFtZVZhbHVlOwotICAgIFJlZlB0cjxTb3VyY2VQ
cm92aWRlcj4gbV9zb3VyY2VPdmVycmlkZTsKLSAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fcGFy
ZW50U2NvcGVURFpWYXJpYWJsZXM7Ci0gICAgdW5zaWduZWQgbV9maXJzdExpbmVPZmZzZXQ7Ci0g
ICAgdW5zaWduZWQgbV9saW5lQ291bnQ7Ci0gICAgdW5zaWduZWQgbV91bmxpbmtlZEZ1bmN0aW9u
TmFtZVN0YXJ0OwotICAgIHVuc2lnbmVkIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW47Ci0gICAg
dW5zaWduZWQgbV91bmxpbmtlZEJvZHlFbmRDb2x1bW47Ci0gICAgdW5zaWduZWQgbV9zdGFydE9m
ZnNldDsKLSAgICB1bnNpZ25lZCBtX3NvdXJjZUxlbmd0aDsKLSAgICB1bnNpZ25lZCBtX3BhcmFt
ZXRlcnNTdGFydE9mZnNldDsKLSAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNl
dDsKLSAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7Ci0gICAgdW5zaWduZWQg
bV9wYXJhbWV0ZXJDb3VudDsKLSAgICBGdW5jdGlvblBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKLQot
ICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwotCi0gICAgdW5zaWduZWQgbV9pc0luU3RyaWN0
Q29udGV4dCA6IDE7Ci0gICAgdW5zaWduZWQgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7Ci0g
ICAgdW5zaWduZWQgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7Ci0gICAgdW5zaWduZWQgbV9jb25z
dHJ1Y3RBYmlsaXR5OiAxOwotICAgIHVuc2lnbmVkIG1fY29uc3RydWN0b3JLaW5kIDogMjsKLSAg
ICB1bnNpZ25lZCBtX2Z1bmN0aW9uTW9kZSA6IDE7IC8vIEZ1bmN0aW9uTW9kZQotCi1wcm90ZWN0
ZWQ6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi0gICAgewotICAgICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIG1fbmFtZVZhbHVlLnNldCh2bSwgdGhpcywg
anNTdHJpbmcoJnZtLCBuYW1lKCkuc3RyaW5nKCkpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLXB1YmxpYzoKLSAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0K
LSAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwotfTsKLQotc3RydWN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlIHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBpbnQzMl90
PiBTdHJpbmdPZmZzZXRUYWJsZTsKLSAgICBTdHJpbmdPZmZzZXRUYWJsZSBvZmZzZXRUYWJsZTsK
LQotICAgIGlubGluZSBpbnQzMl90IG9mZnNldEZvclZhbHVlKFN0cmluZ0ltcGwqIHZhbHVlLCBp
bnQzMl90IGRlZmF1bHRPZmZzZXQpCi0gICAgewotICAgICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gb2Zmc2V0VGFibGUuZW5kKCk7Ci0gICAgICAgIFN0cmluZ09m
ZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBvZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsK
LSAgICAgICAgaWYgKGxvYyA9PSBlbmQpCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdE9mZnNl
dDsKLSAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWU7Ci0gICAgfQotCi19OwotCi1zdHJ1Y3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUgewotICAgIFZlY3RvcjxpbnQzMl90PiBicmFuY2hPZmZzZXRz
OwotICAgIGludDMyX3QgbWluOwotCi0gICAgaW50MzJfdCBvZmZzZXRGb3JWYWx1ZShpbnQzMl90
IHZhbHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpOwotICAgIHZvaWQgYWRkKGludDMyX3Qga2V5
LCBpbnQzMl90IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIGlmICghYnJhbmNoT2Zmc2V0c1trZXld
KQotICAgICAgICAgICAgYnJhbmNoT2Zmc2V0c1trZXldID0gb2Zmc2V0OwotICAgIH0KLX07Ci0K
LXN0cnVjdCBVbmxpbmtlZEluc3RydWN0aW9uIHsKLSAgICBVbmxpbmtlZEluc3RydWN0aW9uKCkg
eyB1Lm9wZXJhbmQgPSAwOyB9Ci0gICAgVW5saW5rZWRJbnN0cnVjdGlvbihPcGNvZGVJRCBvcGNv
ZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7IH0KLSAgICBVbmxpbmtlZEluc3RydWN0aW9uKGludCBv
cGVyYW5kKSB7IHUub3BlcmFuZCA9IG9wZXJhbmQ7IH0KLSAgICB1bmlvbiB7Ci0gICAgICAgIE9w
Y29kZUlEIG9wY29kZTsKLSAgICAgICAgaW50MzJfdCBvcGVyYW5kOwotICAgICAgICB1bnNpZ25l
ZCBpbmRleDsKLSAgICB9IHU7Ci19OwotCi1jbGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1Ymxp
YyBKU0NlbGwgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7Ci0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7Ci0K
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKLQotICAgIGVu
dW0geyBDYWxsRnVuY3Rpb24sIEFwcGx5RnVuY3Rpb24gfTsKLQotICAgIGJvb2wgaXNDb25zdHJ1
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvcjsgfQotICAgIGJvb2wgaXNTdHJp
Y3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0cmljdE1vZGU7IH0KLSAgICBib29sIHVzZXNF
dmFsKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRXZhbDsgfQotCi0gICAgYm9vbCBuZWVkc0Z1bGxT
Y29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0Z1bGxTY29wZUNoYWluOyB9Ci0KLSAg
ICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCBpbnQg
ZGl2b3QsCi0gICAgICAgIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgdW5zaWduZWQg
bGluZSwgdW5zaWduZWQgY29sdW1uKTsKLQotICAgIHZvaWQgYWRkVHlwZVByb2ZpbGVyRXhwcmVz
c2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3Qs
IHVuc2lnbmVkIGVuZERpdm90KTsKLQotICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJl
dHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQotCi0gICAgLy8gU3BlY2lhbCByZWdpc3Rl
cnMKLSAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVy
KSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9Ci0gICAgdm9pZCBzZXRTY29wZVJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7IG1fc2NvcGVSZWdpc3RlciA9
IHNjb3BlUmVnaXN0ZXI7IH0KLSAgICB2b2lkIHNldEFjdGl2YXRpb25SZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgYWN0aXZhdGlvblJlZ2lzdGVyKSB7IG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0
ZXIgPSBhY3RpdmF0aW9uUmVnaXN0ZXI7IH0KLQotICAgIGJvb2wgdXNlc0dsb2JhbE9iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIuaXNWYWxpZCgpOyB9Ci0gICAg
dm9pZCBzZXRHbG9iYWxPYmplY3RSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0
UmVnaXN0ZXIpIHsgbV9nbG9iYWxPYmplY3RSZWdpc3RlciA9IGdsb2JhbE9iamVjdFJlZ2lzdGVy
OyB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9iamVjdFJlZ2lzdGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsgfQotCi0gICAgLy8gUGFyYW1ldGVyIGluZm9y
bWF0aW9uCi0gICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSkgeyBtX251bVBh
cmFtZXRlcnMgPSBuZXdWYWx1ZTsgfQotICAgIHZvaWQgYWRkUGFyYW1ldGVyKCkgeyBtX251bVBh
cmFtZXRlcnMrKzsgfQotICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVy
biBtX251bVBhcmFtZXRlcnM7IH0KLQotICAgIHVuc2lnbmVkIGFkZFJlZ0V4cChSZWdFeHAqIHIp
Ci0gICAgewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHVu
c2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOwotICAgICAgICBtX3Jh
cmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKFdyaXRlQmFycmllcjxSZWdFeHA+KCptX3ZtLCB0aGlz
LCByKSk7Ci0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLSAgICB1bnNpZ25lZCBudW1iZXJP
ZlJlZ0V4cHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6
ZSgpOwotICAgIH0KLSAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgQVNTRVJU
KG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzW2luZGV4XS5nZXQoKTsg
fQotCi0gICAgLy8gQ29uc3RhbnQgUG9vbHMKLQotICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZp
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVycy5zaXplKCk7IH0KLSAgICB2b2lkIGFk
ZElkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYgaSkgeyByZXR1cm4gbV9pZGVudGlmaWVycy5h
cHBlbmQoaSk7IH0KLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyc1tpbmRleF07IH0KLSAgICBjb25zdCBWZWN0b3I8
SWRlbnRpZmllcj4mIGlkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyczsg
fQotCi0gICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOjpPdGhlcikKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRS
ZWdpc3RlcnMuc2l6ZSgpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0
ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgp
LnNldCgqbV92bSwgdGhpcywgdik7Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uLmFwcGVuZChzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLSAgICB1bnNpZ25lZCBhZGRDb25zdGFudChMaW5rVGltZUNvbnN0
YW50IHR5cGUpCi0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVn
aXN0ZXJzLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpOwotICAgICAgICBBU1NFUlQoaW5k
ZXggPCBMaW5rVGltZUNvbnN0YW50Q291bnQpOwotICAgICAgICBtX2xpbmtUaW1lQ29uc3RhbnRz
W2luZGV4XSA9IHJlc3VsdDsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3Jp
dGVCYXJyaWVyPFVua25vd24+KCkpOwotICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHVuc2lnbmVkIHJlZ2lzdGVySW5kZXhGb3JM
aW5rVGltZUNvbnN0YW50KExpbmtUaW1lQ29uc3RhbnQgdHlwZSkKLSAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpOwotICAgICAgICBBU1NF
UlQoaW5kZXggPCBMaW5rVGltZUNvbnN0YW50Q291bnQpOwotICAgICAgICByZXR1cm4gbV9saW5r
VGltZUNvbnN0YW50c1tpbmRleF07Ci0gICAgfQotICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnM7IH0KLSAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0
ZXIoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KLSAgICBjb25zdCBWZWN0b3I8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyBy
ZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KLQotICAgIC8vIEp1
bXBzCi0gICAgc2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX2p1
bXBUYXJnZXRzLnNpemUoKTsgfQotICAgIHZvaWQgYWRkSnVtcFRhcmdldCh1bnNpZ25lZCBqdW1w
VGFyZ2V0KSB7IG1fanVtcFRhcmdldHMuYXBwZW5kKGp1bXBUYXJnZXQpOyB9Ci0gICAgdW5zaWdu
ZWQganVtcFRhcmdldChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHNbaW5k
ZXhdOyB9Ci0gICAgdW5zaWduZWQgbGFzdEp1bXBUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2p1
bXBUYXJnZXRzLmxhc3QoKTsgfQotCi0gICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1faXNCdWlsdGluRnVuY3Rpb247IH0KLQotICAgIENvbnN0cnVjdG9yS2luZCBj
b25zdHJ1Y3RvcktpbmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb25zdHJ1Y3Rvcktp
bmQ+KG1fY29uc3RydWN0b3JLaW5kKTsgfQotCi0gICAgdm9pZCBzaHJpbmtUb0ZpdCgpCi0gICAg
ewotICAgICAgICBtX2p1bXBUYXJnZXRzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1faWRlbnRp
ZmllcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5zaHJpbmtU
b0ZpdCgpOwotICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5zaHJp
bmtUb0ZpdCgpOwotICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuc2hyaW5rVG9GaXQoKTsKLSAgICAg
ICAgbV9mdW5jdGlvbkV4cHJzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fcHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9leHByZXNzaW9uSW5mby5z
aHJpbmtUb0ZpdCgpOwotCi0jaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQotICAgICAgICBt
X2J5dGVjb2RlQ29tbWVudHMuc2hyaW5rVG9GaXQoKTsKLSNlbmRpZgotICAgICAgICBpZiAobV9y
YXJlRGF0YSkgewotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5z
aHJpbmtUb0ZpdCgpOwotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNocmlua1Rv
Rml0KCk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaHJpbmtU
b0ZpdCgpOwotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNocmlu
a1RvRml0KCk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbklu
Zm9GYXRQb3NpdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZv
aWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxVbmxpbmtlZEluc3RydWN0aW9uU3Ry
ZWFtPik7Ci0gICAgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25z
KCkgY29uc3Q7Ci0KLSAgICBpbnQgbV9udW1WYXJzOwotICAgIGludCBtX251bUNhcHR1cmVkVmFy
czsKLSAgICBpbnQgbV9udW1DYWxsZWVSZWdpc3RlcnM7Ci0KLSAgICAvLyBKdW1wIFRhYmxlcwot
Ci0gICAgc2l6ZV90IG51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
cmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQot
ICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBhZGRTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0
ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmFw
cGVuZChVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dp
dGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KLSAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgc3dp
dGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJu
IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQotCi0gICAgc2l6
ZV90IG51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsg
fQotICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
KSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzLmFwcGVuZChVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSgpKTsgcmV0dXJuIG1f
cmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KLSAgICBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7
IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsgfQotCi0gICAgdW5zaWduZWQgYWRkRnVuY3Rpb25EZWNsKFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBuKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgc2l6
ZSA9IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBl
bmQoV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKLSAgICAgICAg
bV9mdW5jdGlvbkRlY2xzLmxhc3QoKS5zZXQoKm1fdm0sIHRoaXMsIG4pOwotICAgICAgICByZXR1
cm4gc2l6ZTsKLSAgICB9Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0K
LSAgICBzaXplX3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRl
Y2xzLnNpemUoKTsgfQotICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRXhwcihVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogbikKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0
aW9uRXhwcnMuc2l6ZSgpOwotICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuYXBwZW5kKFdyaXRlQmFy
cmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25F
eHBycy5sYXN0KCkuc2V0KCptX3ZtLCB0aGlzLCBuKTsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0g
ICAgfQotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4cHIoaW50IGlu
ZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNbaW5kZXhdLmdldCgpOyB9Ci0gICAgc2l6ZV90
IG51bWJlck9mRnVuY3Rpb25FeHBycygpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHBycy5zaXplKCk7
IH0KLQotICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0Ci0gICAgc2l6ZV90IG51bWJl
ck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJl
RGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkgOiAwOyB9Ci0gICAgdm9pZCBhZGRFeGNl
cHRpb25IYW5kbGVyKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIpIHsgY3JlYXRl
UmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVycy5hcHBlbmQoaGFuZGxlcik7IH0KLSAgICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBleGNlcHRp
b25IYW5kbGVyKGludCBpbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVE
YXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQotCi0gICAgVk0qIHZtKCkgY29uc3Qg
eyByZXR1cm4gbV92bTsgfQotCi0gICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYWRkQXJyYXlQcm9m
aWxlKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudCsrOyB9Ci0gICAgdW5zaWduZWQgbnVt
YmVyT2ZBcnJheVByb2ZpbGVzKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudDsgfQotICAg
IFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSBhZGRBcnJheUFsbG9jYXRpb25Qcm9maWxl
KCkgeyByZXR1cm4gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQrKzsgfQotICAgIHVuc2ln
bmVkIG51bWJlck9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMoKSB7IHJldHVybiBtX2FycmF5QWxs
b2NhdGlvblByb2ZpbGVDb3VudDsgfQotICAgIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUgYWRkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSB7IHJldHVybiBtX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlQ291bnQrKzsgfQotICAgIHVuc2lnbmVkIG51bWJlck9mT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGVzKCkgeyByZXR1cm4gbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50OyB9Ci0g
ICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgYWRkVmFsdWVQcm9maWxlKCkgeyByZXR1cm4gbV92YWx1
ZVByb2ZpbGVDb3VudCsrOyB9Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkg
eyByZXR1cm4gbV92YWx1ZVByb2ZpbGVDb3VudDsgfQotCi0gICAgVW5saW5rZWRMTEludENhbGxM
aW5rSW5mbyBhZGRMTEludENhbGxMaW5rSW5mbygpIHsgcmV0dXJuIG1fbGxpbnRDYWxsTGlua0lu
Zm9Db3VudCsrOyB9Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZMTGludENhbGxMaW5rSW5mb3MoKSB7
IHJldHVybiBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQ7IH0KLQotICAgIENvZGVUeXBlIGNvZGVU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQotCi0gICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlUmVnaXN0
ZXI7IH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYWN0aXZhdGlvblJlZ2lzdGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcjsgfQotICAgIGJvb2wgaGFzQWN0aXZh
dGlvblJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rl
ci5pc1ZhbGlkKCk7IH0KLQotICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbih1
bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKQotICAgIHsKLSAgICAgICAgbV9wcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5hcHBlbmQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbik7
Ci0gICAgfQotCi0gICAgc2l6ZV90IG51bWJlck9mUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMo
KSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQot
ICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uczsgfQotCi0gICAgdHlw
ZWRlZiBWZWN0b3I8SlNWYWx1ZT4gQ29uc3RhbnRCdWZmZXI7Ci0KLSAgICBzaXplX3QgY29uc3Rh
bnRCdWZmZXJDb3VudCgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+
bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgYWRkQ29uc3RhbnRCdWZm
ZXIodW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vz
c2FyeSgpOwotICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1
ZmZlcnMuc2l6ZSgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5hcHBl
bmQoVmVjdG9yPEpTVmFsdWU+KGxlbmd0aCkpOwotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9
Ci0KLSAgICBjb25zdCBDb25zdGFudEJ1ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5k
ZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7Ci0gICAgICAgIHJl
dHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpbmRleF07Ci0gICAgfQotCi0gICAg
Q29uc3RhbnRCdWZmZXImIGNvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9j
b25zdGFudEJ1ZmZlcnNbaW5kZXhdOwotICAgIH0KLQotICAgIGJvb2wgaGFzUmFyZURhdGEoKSBj
b25zdCB7IHJldHVybiBtX3JhcmVEYXRhLmdldCgpOyB9Ci0KLSAgICBpbnQgbGluZU51bWJlckZv
ckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgIHZvaWQgZXhw
cmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGlu
dCYgZGl2b3QsCi0gICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNp
Z25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7Ci0KLSAgICBib29sIHR5cGVQcm9maWxlckV4
cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVu
c2lnbmVkJiBzdGFydERpdm90LCB1bnNpZ25lZCYgZW5kRGl2b3QpOwotCi0gICAgdm9pZCByZWNv
cmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMs
IHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGluZUNvdW50LCB1bnNpZ25lZCBlbmRDb2x1
bW4pCi0gICAgewotICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0gICAgICAgIG1faGFz
Q2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKLSAgICAgICAgbV9maXJz
dExpbmUgPSBmaXJzdExpbmU7Ci0gICAgICAgIG1fbGluZUNvdW50ID0gbGluZUNvdW50OwotICAg
ICAgICAvLyBGb3IgdGhlIFVubGlua2VkQ29kZUJsb2NrLCBzdGFydENvbHVtbiBpcyBhbHdheXMg
MC4KLSAgICAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47Ci0gICAgfQotCi0gICAgQ29kZUZl
YXR1cmVzIGNvZGVGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KLSAgICBi
b29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZh
cmlhYmxlczsgfQotICAgIHVuc2lnbmVkIGZpcnN0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmly
c3RMaW5lOyB9Ci0gICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5l
Q291bnQ7IH0KLSAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQotICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5kQ29sdW1uOyB9Ci0KLSAgICB2b2lkIGFkZE9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVP
ZmZzZXQoc2l6ZV90IG9mZnNldCkgeyBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZz
ZXRzLmFwcGVuZChvZmZzZXQpOyB9Ci0gICAgY29uc3QgVmVjdG9yPHNpemVfdD4mIG9wUHJvZmls
ZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkgY29uc3QgeyByZXR1cm4gbV9vcFByb2ZpbGVD
b250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsgfQotCi0gICAgdm9pZCBkdW1wRXhwcmVzc2lvblJh
bmdlSW5mbygpOyAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seS4KLQotcHJvdGVjdGVkOgot
ICAgIFVubGlua2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4
ZWN1dGFibGVJbmZvJik7Ci0gICAgflVubGlua2VkQ29kZUJsb2NrKCk7Ci0KLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKLSAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKLSAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gR2xvYmFsQ29kZSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIFN5bWJvbFRhYmxl
OjpjcmVhdGUodm0pKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0KLSAgICB2b2lkIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQotICAgICAg
ICAgICAgbV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7Ci0gICAgfQot
Ci0gICAgdm9pZCBnZXRMaW5lQW5kQ29sdW1uKEV4cHJlc3Npb25SYW5nZUluZm8mLCB1bnNpZ25l
ZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5saW5r
ZWRJbnN0cnVjdGlvblN0cmVhbT4gbV91bmxpbmtlZEluc3RydWN0aW9uczsKLQotICAgIGludCBt
X251bVBhcmFtZXRlcnM7Ci0gICAgVk0qIG1fdm07Ci0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90
aGlzUmVnaXN0ZXI7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcjsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKLQotICAgIHVuc2lnbmVkIG1fbmVlZHNG
dWxsU2NvcGVDaGFpbiA6IDE7Ci0gICAgdW5zaWduZWQgbV91c2VzRXZhbCA6IDE7Ci0gICAgdW5z
aWduZWQgbV9pc1N0cmljdE1vZGUgOiAxOwotICAgIHVuc2lnbmVkIG1faXNDb25zdHJ1Y3RvciA6
IDE7Ci0gICAgdW5zaWduZWQgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7Ci0gICAgdW5zaWdu
ZWQgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7Ci0gICAgdW5zaWduZWQgbV9jb25zdHJ1Y3Rvcktp
bmQgOiAyOwotCi0gICAgdW5zaWduZWQgbV9maXJzdExpbmU7Ci0gICAgdW5zaWduZWQgbV9saW5l
Q291bnQ7Ci0gICAgdW5zaWduZWQgbV9lbmRDb2x1bW47Ci0KLSAgICBDb2RlRmVhdHVyZXMgbV9m
ZWF0dXJlczsKLSAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwotCi0gICAgVmVjdG9yPHVuc2lnbmVk
PiBtX2p1bXBUYXJnZXRzOwotCi0gICAgLy8gQ29uc3RhbnQgUG9vbHMKLSAgICBWZWN0b3I8SWRl
bnRpZmllcj4gbV9pZGVudGlmaWVyczsKLSAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+
PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwotICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwotICAgIHN0ZDo6YXJyYXk8
dW5zaWduZWQsIExpbmtUaW1lQ29uc3RhbnRDb3VudD4gbV9saW5rVGltZUNvbnN0YW50czsKLSAg
ICB0eXBlZGVmIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+
PiBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I7Ci0gICAgRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9y
IG1fZnVuY3Rpb25EZWNsczsKLSAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlv
bkV4cHJzOwotCi0gICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOwot
Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOwotCi0j
aWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQotICAgIFZlY3RvcjxDb21tZW50PiAgbV9ieXRl
Y29kZUNvbW1lbnRzOwotICAgIHNpemVfdCBtX2J5dGVjb2RlQ29tbWVudEl0ZXJhdG9yOwotI2Vu
ZGlmCi0KLSAgICB1bnNpZ25lZCBtX2FycmF5UHJvZmlsZUNvdW50OwotICAgIHVuc2lnbmVkIG1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50OwotICAgIHVuc2lnbmVkIG1fb2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVDb3VudDsKLSAgICB1bnNpZ25lZCBtX3ZhbHVlUHJvZmlsZUNvdW50OwotICAg
IHVuc2lnbmVkIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudDsKLQotcHVibGljOgotICAgIHN0cnVj
dCBSYXJlRGF0YSB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1Ymxp
YzoKLSAgICAgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxl
cnM7Ci0KLSAgICAgICAgLy8gUmFyZSBDb25zdGFudHMKLSAgICAgICAgVmVjdG9yPFdyaXRlQmFy
cmllcjxSZWdFeHA+PiBtX3JlZ2V4cHM7Ci0KLSAgICAgICAgLy8gQnVmZmVycyB1c2VkIGZvciBs
YXJnZSBhcnJheSBsaXRlcmFscwotICAgICAgICBWZWN0b3I8Q29uc3RhbnRCdWZmZXI+IG1fY29u
c3RhbnRCdWZmZXJzOwotCi0gICAgICAgIC8vIEp1bXAgVGFibGVzCi0gICAgICAgIFZlY3RvcjxV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBWZWN0
b3I8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLQot
ICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24+IG1fZXhwcmVz
c2lvbkluZm9GYXRQb3NpdGlvbnM7Ci0gICAgfTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7Ci0gICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUlu
Zm8+IG1fZXhwcmVzc2lvbkluZm87Ci0gICAgc3RydWN0IFR5cGVQcm9maWxlckV4cHJlc3Npb25S
YW5nZSB7Ci0gICAgICAgIHVuc2lnbmVkIG1fc3RhcnREaXZvdDsKLSAgICAgICAgdW5zaWduZWQg
bV9lbmREaXZvdDsKLSAgICB9OwotICAgIEhhc2hNYXA8dW5zaWduZWQsIFR5cGVQcm9maWxlckV4
cHJlc3Npb25SYW5nZT4gbV90eXBlUHJvZmlsZXJJbmZvTWFwOwotICAgIFZlY3RvcjxzaXplX3Q+
IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7Ci0KLXByb3RlY3RlZDoKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLXB1
YmxpYzoKLSAgICBERUNMQVJFX0lORk87Ci19OwotCi1jbGFzcyBVbmxpbmtlZEdsb2JhbENvZGVC
bG9jayA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBV
bmxpbmtlZENvZGVCbG9jayBCYXNlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgVW5saW5rZWRHbG9iYWxD
b2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUs
IGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQotICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSwgY29kZVR5cGUsIGluZm8pCi0gICAgewotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLX07
Ci0KLWNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtl
ZEdsb2JhbENvZGVCbG9jayB7Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7
Ci0gICAgc3RhdGljIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCi0gICAgewotICAgICAgICBVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayh2bSwg
dm0tPnVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbyk7Ci0gICAg
ICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwotICAgICAgICByZXR1cm4gaW5zdGFu
Y2U7Ci0gICAgfQotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9j
ayBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKLQotICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICB2b2lkIHNldFZhcmlhYmxlRGVjbGFyYXRpb25zKGNv
bnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50KSB7IG1fdmFyRGVjbGFyYXRpb25z
ID0gZW52aXJvbm1lbnQ7IH0KLSAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJpYWJs
ZURlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyRGVjbGFyYXRpb25zOyB9Ci0KLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLXBy
aXZhdGU6Ci0gICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQotICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgR2xvYmFsQ29kZSwgaW5mbykKLSAgICB7Ci0gICAgfQotCi0gICAgVmFyaWFi
bGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0aW9uczsKLQotcHVibGljOgotICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG8pCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNM
QVJFX0lORk87Ci19OwotCi1jbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJs
aWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3Mg
Q29kZUNhY2hlOwotCi0gICAgc3RhdGljIFVubGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRlKFZN
KiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCi0gICAgewotICAgICAgICBVbmxpbmtl
ZEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5s
aW5rZWRFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkRXZhbENvZGVCbG9jayh2bSwg
dm0tPnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbyk7Ci0gICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7
Ci0gICAgfQotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBC
YXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKLQotICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7Ci0KLSAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJpYWJsZSh1bnNpZ25l
ZCBpbmRleCkgeyByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXhdOyB9Ci0gICAgdW5zaWduZWQgbnVt
VmFyaWFibGVzKCkgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9Ci0gICAgdm9pZCBhZG9w
dFZhcmlhYmxlcyhWZWN0b3I8SWRlbnRpZmllciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiB2
YXJpYWJsZXMpCi0gICAgewotICAgICAgICBBU1NFUlQobV92YXJpYWJsZXMuaXNFbXB0eSgpKTsK
LSAgICAgICAgbV92YXJpYWJsZXMuc3dhcCh2YXJpYWJsZXMpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCi0gICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
LCBFdmFsQ29kZSwgaW5mbykKLSAgICB7Ci0gICAgfQotCi0gICAgVmVjdG9yPElkZW50aWZpZXIs
IDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhcmlhYmxlczsKLQotcHVibGljOgotICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRXZh
bENvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBE
RUNMQVJFX0lORk87Ci19OwotCi1jbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrIGZpbmFs
IDogcHVibGljIFVubGlua2VkQ29kZUJsb2NrIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIFVubGlu
a2VkQ29kZUJsb2NrIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAg
c3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvZGVUeXBl
IGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKLSAgICB7Ci0gICAgICAgIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5n
ZXQoKSwgY29kZVR5cGUsIGluZm8pOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
KnZtKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7Ci0KLXByaXZhdGU6Ci0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCi0gICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBj
b2RlVHlwZSwgaW5mbykKLSAgICB7Ci0gICAgfQotICAgIAotcHVibGljOgotICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG8pCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAgREVD
TEFSRV9JTkZPOwotfTsKLQotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBVbmxp
bmtlZENvZGVCbG9ja19oCisjZW5kaWYgLy8gRXhlY3V0YWJsZUluZm9faApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAxODgyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZvLmgiCiAjaW5jbHVkZSAiRnVuY3Rp
b25PdmVycmlkZXMuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKQEAgLTQzLDE3OSArNDQsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpY19h
c3NlcnQoc2l6ZW9mKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKSA8PSAyNTYsICJVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSBzaG91bGQgZml0IGluIGEgMjU2LWJ5dGUgY2VsbC4iKTsKLQot
Y29uc3QgQ2xhc3NJbmZvIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpIH07CiBjb25zdCBDbGFzc0luZm8gVW5saW5rZWRDb2Rl
QmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkQ29kZUJsb2NrIiwgMCwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShVbmxpbmtlZENvZGVCbG9jaykgfTsKIGNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEds
b2JhbENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRHbG9iYWxDb2RlQmxvY2siLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkR2xvYmFsQ29kZUJsb2Nr
KSB9OwogY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6c19pbmZvID0g
eyAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2spIH07CiBjb25zdCBDbGFzc0luZm8g
VW5saW5rZWRFdmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZEV2YWxDb2RlQmxvY2si
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRXZhbENvZGVC
bG9jaykgfTsKIGNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpzX2lu
Zm8gPSB7ICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKSB9OwogCi1zdGF0aWMg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9jaygKLSAg
ICBWTSYgdm0sIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBEZWJ1
Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLAotICAgIFVu
bGlua2VkRnVuY3Rpb25LaW5kIGZ1bmN0aW9uS2luZCwgUGFyc2VyRXJyb3ImIGVycm9yKQotewot
ICAgIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUgPSBleGVjdXRhYmxlLT5pc0J1aWx0
aW5GdW5jdGlvbigpID8gSlNQYXJzZXJCdWlsdGluTW9kZTo6QnVpbHRpbiA6IEpTUGFyc2VyQnVp
bHRpbk1vZGU6Ok5vdEJ1aWx0aW47Ci0gICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUg
PSBleGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4dCgpID8gSlNQYXJzZXJTdHJpY3RNb2RlOjpT
dHJpY3QgOiBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdDsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8RnVuY3Rpb25Ob2RlPiBmdW5jdGlvbiA9IHBhcnNlPEZ1bmN0aW9uTm9kZT4oCi0gICAgICAg
ICZ2bSwgc291cmNlLCBleGVjdXRhYmxlLT5uYW1lKCksIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2Rl
LCAKLSAgICAgICAgSlNQYXJzZXJDb2RlVHlwZTo6RnVuY3Rpb24sIGVycm9yLCBudWxscHRyLCBl
eGVjdXRhYmxlLT5wYXJzZU1vZGUoKSk7Ci0KLSAgICBpZiAoIWZ1bmN0aW9uKSB7Ci0gICAgICAg
IEFTU0VSVChlcnJvci5pc1ZhbGlkKCkpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbi0+ZmluaXNoUGFyc2luZyhleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1
dGFibGUtPmZ1bmN0aW9uTW9kZSgpKTsKLSAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJzZShmdW5j
dGlvbi0+ZmVhdHVyZXMoKSwgZnVuY3Rpb24tPmhhc0NhcHR1cmVkVmFyaWFibGVzKCkpOwotICAg
IAotICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s6OmNyZWF0ZSgmdm0sIEZ1bmN0aW9uQ29kZSwKLSAgICAgICAgRXhlY3V0YWJs
ZUluZm8oZnVuY3Rpb24tPm5lZWRzQWN0aXZhdGlvbigpLCBmdW5jdGlvbi0+dXNlc0V2YWwoKSwg
ZnVuY3Rpb24tPmlzU3RyaWN0TW9kZSgpLCBraW5kID09IENvZGVGb3JDb25zdHJ1Y3QsIGZ1bmN0
aW9uS2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbiwgZXhlY3V0YWJsZS0+Y29uc3RydWN0
b3JLaW5kKCkpKTsKLSAgICBhdXRvIGdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEJ5dGVjb2Rl
R2VuZXJhdG9yPih2bSwgZnVuY3Rpb24uZ2V0KCksIHJlc3VsdCwgZGVidWdnZXJNb2RlLCBwcm9m
aWxlck1vZGUsIGV4ZWN1dGFibGUtPnBhcmVudFNjb3BlVERaVmFyaWFibGVzKCkpKTsKLSAgICBl
cnJvciA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKLSAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBSZWZQdHI8U291
cmNlUHJvdmlkZXI+JiYgc291cmNlT3ZlcnJpZGUsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBub2Rl
LCBVbmxpbmtlZEZ1bmN0aW9uS2luZCBraW5kLCBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFi
aWxpdHksIFZhcmlhYmxlRW52aXJvbm1lbnQmIHBhcmVudFNjb3BlVERaVmFyaWFibGVzKQotICAg
IDogQmFzZSgqdm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fbmFtZShub2RlLT5pZGVudCgpKQotICAg
ICwgbV9pbmZlcnJlZE5hbWUobm9kZS0+aW5mZXJyZWROYW1lKCkpCi0gICAgLCBtX3NvdXJjZU92
ZXJyaWRlKFdURjo6bW92ZShzb3VyY2VPdmVycmlkZSkpCi0gICAgLCBtX2ZpcnN0TGluZU9mZnNl
dChub2RlLT5maXJzdExpbmUoKSAtIHNvdXJjZS5maXJzdExpbmUoKSkKLSAgICAsIG1fbGluZUNv
dW50KG5vZGUtPmxhc3RMaW5lKCkgLSBub2RlLT5maXJzdExpbmUoKSkKLSAgICAsIG1fdW5saW5r
ZWRGdW5jdGlvbk5hbWVTdGFydChub2RlLT5mdW5jdGlvbk5hbWVTdGFydCgpIC0gc291cmNlLnN0
YXJ0T2Zmc2V0KCkpCi0gICAgLCBtX3VubGlua2VkQm9keVN0YXJ0Q29sdW1uKG5vZGUtPnN0YXJ0
Q29sdW1uKCkpCi0gICAgLCBtX3VubGlua2VkQm9keUVuZENvbHVtbihtX2xpbmVDb3VudCA/IG5v
ZGUtPmVuZENvbHVtbigpIDogbm9kZS0+ZW5kQ29sdW1uKCkgLSBub2RlLT5zdGFydENvbHVtbigp
KQotICAgICwgbV9zdGFydE9mZnNldChub2RlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpIC0gc291
cmNlLnN0YXJ0T2Zmc2V0KCkpCi0gICAgLCBtX3NvdXJjZUxlbmd0aChub2RlLT5zb3VyY2UoKS5s
ZW5ndGgoKSkKLSAgICAsIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KG5vZGUtPnBhcmFtZXRlcnNT
dGFydCgpKQotICAgICwgbV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQobm9kZS0+ZnVuY3Rpb25L
ZXl3b3JkU3RhcnQoKSkKLSAgICAsIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldChub2RlLT5zdGFy
dFN0YXJ0T2Zmc2V0KCkgKyBub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDEpCi0gICAgLCBtX3Bh
cmFtZXRlckNvdW50KG5vZGUtPnBhcmFtZXRlckNvdW50KCkpCi0gICAgLCBtX3BhcnNlTW9kZShu
b2RlLT5wYXJzZU1vZGUoKSkKLSAgICAsIG1fZmVhdHVyZXMoMCkKLSAgICAsIG1faXNJblN0cmlj
dENvbnRleHQobm9kZS0+aXNJblN0cmljdENvbnRleHQoKSkKLSAgICAsIG1faGFzQ2FwdHVyZWRW
YXJpYWJsZXMoZmFsc2UpCi0gICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGtpbmQgPT0gVW5saW5r
ZWRCdWlsdGluRnVuY3Rpb24pCi0gICAgLCBtX2NvbnN0cnVjdEFiaWxpdHkoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNvbnN0cnVjdEFiaWxpdHkpKQotICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG5vZGUtPmNvbnN0cnVjdG9yS2luZCgpKSkKLSAgICAsIG1fZnVu
Y3Rpb25Nb2RlKG5vZGUtPmZ1bmN0aW9uTW9kZSgpKQotewotICAgIEFTU0VSVChtX2NvbnN0cnVj
dG9yS2luZCA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obm9kZS0+Y29uc3RydWN0b3JLaW5kKCkp
KTsKLSAgICBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzLnN3YXAocGFyZW50U2NvcGVURFpWYXJp
YWJsZXMpOwotfQotCi12b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsKTsK
LSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qp
OwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25hbWVWYWx1ZSk7Ci19Ci0KLUZ1
bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmsoVk0mIHZt
LCBjb25zdCBTb3VyY2VDb2RlJiBvd25lclNvdXJjZSwgaW50IG92ZXJyaWRlTGluZU51bWJlcikK
LXsKLSAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1fc291cmNlT3ZlcnJpZGUgPyBTb3VyY2VDb2Rl
KG1fc291cmNlT3ZlcnJpZGUpIDogb3duZXJTb3VyY2U7Ci0gICAgdW5zaWduZWQgZmlyc3RMaW5l
ID0gc291cmNlLmZpcnN0TGluZSgpICsgbV9maXJzdExpbmVPZmZzZXQ7Ci0gICAgdW5zaWduZWQg
c3RhcnRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSArIG1fc3RhcnRPZmZzZXQ7Ci0gICAg
dW5zaWduZWQgbGluZUNvdW50ID0gbV9saW5lQ291bnQ7Ci0KLSAgICAvLyBBZGp1c3QgdG8gb25l
LWJhc2VkIGluZGV4aW5nLgotICAgIGJvb2wgc3RhcnRDb2x1bW5Jc09uRmlyc3RTb3VyY2VMaW5l
ID0gIW1fZmlyc3RMaW5lT2Zmc2V0OwotICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gbV91bmxp
bmtlZEJvZHlTdGFydENvbHVtbiArIChzdGFydENvbHVtbklzT25GaXJzdFNvdXJjZUxpbmUgPyBz
b3VyY2Uuc3RhcnRDb2x1bW4oKSA6IDEpOwotICAgIGJvb2wgZW5kQ29sdW1uSXNPblN0YXJ0TGlu
ZSA9ICFsaW5lQ291bnQ7Ci0gICAgdW5zaWduZWQgZW5kQ29sdW1uID0gbV91bmxpbmtlZEJvZHlF
bmRDb2x1bW4gKyAoZW5kQ29sdW1uSXNPblN0YXJ0TGluZSA/IHN0YXJ0Q29sdW1uIDogMSk7Ci0K
LSAgICBTb3VyY2VDb2RlIGNvZGUoc291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFy
dE9mZnNldCArIG1fc291cmNlTGVuZ3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKLSAgICBG
dW5jdGlvbk92ZXJyaWRlczo6T3ZlcnJpZGVJbmZvIG92ZXJyaWRlSW5mbzsKLSAgICBib29sIGhh
c0Z1bmN0aW9uT3ZlcnJpZGUgPSBmYWxzZTsKLQotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpm
dW5jdGlvbk92ZXJyaWRlcygpKSkgewotICAgICAgICBoYXNGdW5jdGlvbk92ZXJyaWRlID0gRnVu
Y3Rpb25PdmVycmlkZXM6OmluaXRpYWxpemVPdmVycmlkZUZvcihjb2RlLCBvdmVycmlkZUluZm8p
OwotICAgICAgICBpZiAoaGFzRnVuY3Rpb25PdmVycmlkZSkgewotICAgICAgICAgICAgZmlyc3RM
aW5lID0gb3ZlcnJpZGVJbmZvLmZpcnN0TGluZTsKLSAgICAgICAgICAgIGxpbmVDb3VudCA9IG92
ZXJyaWRlSW5mby5saW5lQ291bnQ7Ci0gICAgICAgICAgICBzdGFydENvbHVtbiA9IG92ZXJyaWRl
SW5mby5zdGFydENvbHVtbjsKLSAgICAgICAgICAgIGVuZENvbHVtbiA9IG92ZXJyaWRlSW5mby5l
bmRDb2x1bW47Ci0gICAgICAgICAgICBjb2RlID0gb3ZlcnJpZGVJbmZvLnNvdXJjZUNvZGU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIHJlc3VsdCA9IEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKHZtLCBjb2RlLCB0aGlzLCBmaXJzdExpbmUsIGZpcnN0TGlu
ZSArIGxpbmVDb3VudCwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7Ci0gICAgaWYgKG92ZXJyaWRl
TGluZU51bWJlciAhPSAtMSkKLSAgICAgICAgcmVzdWx0LT5zZXRPdmVycmlkZUxpbmVOdW1iZXIo
b3ZlcnJpZGVMaW5lTnVtYmVyKTsKLQotICAgIGlmIChVTkxJS0VMWShoYXNGdW5jdGlvbk92ZXJy
aWRlKSkgewotICAgICAgICByZXN1bHQtPm92ZXJyaWRlUGFyYW1ldGVyQW5kVHlwZVByb2ZpbGlu
Z1N0YXJ0RW5kT2Zmc2V0cygKLSAgICAgICAgICAgIG92ZXJyaWRlSW5mby5wYXJhbWV0ZXJzU3Rh
cnRPZmZzZXQsCi0gICAgICAgICAgICBvdmVycmlkZUluZm8udHlwZVByb2ZpbGluZ1N0YXJ0T2Zm
c2V0LAotICAgICAgICAgICAgb3ZlcnJpZGVJbmZvLnR5cGVQcm9maWxpbmdFbmRPZmZzZXQpOwot
ICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCi0gICAgY29u
c3QgSWRlbnRpZmllciYgbmFtZSwgRXhlY1N0YXRlJiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIAotICAgIEpTT2JqZWN0KiYgZXhjZXB0aW9uLCBpbnQgb3ZlcnJpZGVMaW5lTnVtYmVy
KQotewotICAgIFBhcnNlckVycm9yIGVycm9yOwotICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKLSAg
ICBDb2RlQ2FjaGUqIGNvZGVDYWNoZSA9IHZtLmNvZGVDYWNoZSgpOwotICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUNhY2hlLT5nZXRGdW5jdGlvbkV4ZWN1
dGFibGVGcm9tR2xvYmFsQ29kZSh2bSwgbmFtZSwgc291cmNlLCBlcnJvcik7Ci0KLSAgICBhdXRv
JiBnbG9iYWxPYmplY3QgPSAqZXhlYy5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKGds
b2JhbE9iamVjdC5oYXNEZWJ1Z2dlcigpKQotICAgICAgICBnbG9iYWxPYmplY3QuZGVidWdnZXIo
KS0+c291cmNlUGFyc2VkKCZleGVjLCBzb3VyY2UucHJvdmlkZXIoKSwgZXJyb3IubGluZSgpLCBl
cnJvci5tZXNzYWdlKCkpOwotCi0gICAgaWYgKGVycm9yLmlzVmFsaWQoKSkgewotICAgICAgICBl
eGNlcHRpb24gPSBlcnJvci50b0Vycm9yT2JqZWN0KCZnbG9iYWxPYmplY3QsIHNvdXJjZSwgb3Zl
cnJpZGVMaW5lTnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGV4ZWN1dGFibGU7Ci19Ci0KLVVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjb2RlQmxvY2tGb3IoCi0gICAgVk0mIHZtLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25L
aW5kLCAKLSAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmls
ZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCi17Ci0gICAgc3dpdGNoIChzcGVjaWFsaXphdGlv
bktpbmQpIHsKLSAgICBjYXNlIENvZGVGb3JDYWxsOgotICAgICAgICBpZiAoVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2Rl
Rm9yQ29uc3RydWN0OgotICAgICAgICBpZiAoVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCkpCi0gICAgICAgICAgICByZXR1
cm4gY29kZUJsb2NrOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKAotICAgICAg
ICB2bSwgdGhpcywgc291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2VyTW9kZSwgcHJv
ZmlsZXJNb2RlLCAKLSAgICAgICAgaXNCdWlsdGluRnVuY3Rpb24oKSA/IFVubGlua2VkQnVpbHRp
bkZ1bmN0aW9uIDogVW5saW5rZWROb3JtYWxGdW5jdGlvbiwgCi0gICAgICAgIGVycm9yKTsKLSAg
ICAKLSAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIHN3aXRjaCAoc3BlY2lhbGl6YXRpb25LaW5kKSB7Ci0gICAgY2FzZSBDb2RlRm9yQ2FsbDoK
LSAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLnNldCh2bSwgdGhpcywgcmVzdWx0KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgotICAgICAgICBtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdC5zZXQodm0sIHRoaXMsIHJlc3VsdCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRD
b2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUs
IGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQogICAgIDogQmFzZSgqdm0sIHN0cnVjdHVyZSkK
ICAgICAsIG1fbnVtVmFycygwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE4ODIzOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw5ICszOSw5IEBACiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAjaW5jbHVkZSAiU3Bl
Y2lhbFBvaW50ZXIuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgIlVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVFbnZpcm9ubWVudC5o
IgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgotCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNTgsNyArNTgsOSBAQCBj
bGFzcyBTb3VyY2VQcm92aWRlcjsKIGNsYXNzIFN5bWJvbFRhYmxlOwogY2xhc3MgVW5saW5rZWRD
b2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOworY2xhc3MgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiBjbGFzcyBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtOwor
c3RydWN0IEV4ZWN1dGFibGVJbmZvOwogCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFsdWVQ
cm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKQEAgLTY2LDE1
NyArNjgsNiBAQCB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uCiB0eXBl
ZGVmIHVuc2lnbmVkIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBlZGVmIHVu
c2lnbmVkIFVubGlua2VkTExJbnRDYWxsTGlua0luZm87CiAKLXN0cnVjdCBFeGVjdXRhYmxlSW5m
byB7Ci0gICAgRXhlY3V0YWJsZUluZm8oYm9vbCBuZWVkc0FjdGl2YXRpb24sIGJvb2wgdXNlc0V2
YWwsIGJvb2wgaXNTdHJpY3RNb2RlLCBib29sIGlzQ29uc3RydWN0b3IsIGJvb2wgaXNCdWlsdGlu
RnVuY3Rpb24sIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQpCi0gICAgICAgIDogbV9u
ZWVkc0FjdGl2YXRpb24obmVlZHNBY3RpdmF0aW9uKQotICAgICAgICAsIG1fdXNlc0V2YWwodXNl
c0V2YWwpCi0gICAgICAgICwgbV9pc1N0cmljdE1vZGUoaXNTdHJpY3RNb2RlKQotICAgICAgICAs
IG1faXNDb25zdHJ1Y3Rvcihpc0NvbnN0cnVjdG9yKQotICAgICAgICAsIG1faXNCdWlsdGluRnVu
Y3Rpb24oaXNCdWlsdGluRnVuY3Rpb24pCi0gICAgICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvbnN0cnVjdG9yS2luZCkpCi0gICAgewotICAgICAgICBBU1NF
UlQobV9jb25zdHJ1Y3RvcktpbmQgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvbnN0cnVjdG9y
S2luZCkpOwotICAgIH0KLQotICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9uZWVkc0FjdGl2YXRpb247IH0KLSAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1
cm4gbV91c2VzRXZhbDsgfQotICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9pc1N0cmljdE1vZGU7IH0KLSAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVy
biBtX2lzQ29uc3RydWN0b3I7IH0KLSAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0J1aWx0aW5GdW5jdGlvbjsgfQotICAgIENvbnN0cnVjdG9yS2luZCBjb25z
dHJ1Y3RvcktpbmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb25zdHJ1Y3RvcktpbmQ+
KG1fY29uc3RydWN0b3JLaW5kKTsgfQotCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fbmVlZHNB
Y3RpdmF0aW9uIDogMTsKLSAgICB1bnNpZ25lZCBtX3VzZXNFdmFsIDogMTsKLSAgICB1bnNpZ25l
ZCBtX2lzU3RyaWN0TW9kZSA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0NvbnN0cnVjdG9yIDogMTsK
LSAgICB1bnNpZ25lZCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKLSAgICB1bnNpZ25lZCBtX2Nv
bnN0cnVjdG9yS2luZCA6IDI7Ci19OwotCi1lbnVtIFVubGlua2VkRnVuY3Rpb25LaW5kIHsKLSAg
ICBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLAotICAgIFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uLAot
fTsKLQotY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgSlND
ZWxsIHsKLXB1YmxpYzoKLSAgICBmcmllbmQgY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwotICAg
IGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7Ci0gICAgZnJpZW5kIGNsYXNzIFZNOwotCi0gICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0KLSAgICBz
dGF0aWMgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShWTSogdm0sIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG5vZGUsIFVubGlua2VkRnVu
Y3Rpb25LaW5kIHVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVj
dEFiaWxpdHksIFZhcmlhYmxlRW52aXJvbm1lbnQmIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBS
ZWZQdHI8U291cmNlUHJvdmlkZXI+JiYgc291cmNlT3ZlcnJpZGUgPSBudWxscHRyKQotICAgIHsK
LSAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLT5oZWFwKSkK
LSAgICAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKHZtLCB2bS0+dW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHNvdXJjZSwgV1RGOjptb3ZlKHNvdXJj
ZU92ZXJyaWRlKSwgbm9kZSwgdW5saW5rZWRGdW5jdGlvbktpbmQsIGNvbnN0cnVjdEFiaWxpdHks
IHBhcmVudFNjb3BlVERaVmFyaWFibGVzKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0
aW9uKCp2bSk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgY29uc3QgSWRl
bnRpZmllciYgaW5mZXJyZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9pbmZlcnJlZE5hbWU7IH0K
LSAgICBKU1N0cmluZyogbmFtZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lVmFsdWUuZ2V0
KCk7IH0KLSAgICB1bnNpZ25lZCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
YW1ldGVyQ291bnQ7IH07Ci0gICAgRnVuY3Rpb25QYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJzZU1vZGU7IH07Ci0gICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNJblN0cmljdENvbnRleHQ7IH0KLSAgICBGdW5jdGlvbk1vZGUgZnVu
Y3Rpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Nb2RlPihtX2Z1
bmN0aW9uTW9kZSk7IH0KLSAgICBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29uc3RydWN0b3JLaW5kPihtX2NvbnN0cnVjdG9yS2lu
ZCk7IH0KLQotICAgIHVuc2lnbmVkIHVubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQoKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7IH0KLSAgICB1bnNpZ25lZCB1bmxp
bmtlZEJvZHlTdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRCb2R5U3RhcnRD
b2x1bW47IH0KLSAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlFbmRDb2x1bW4oKSBjb25zdCB7IHJl
dHVybiBtX3VubGlua2VkQm9keUVuZENvbHVtbjsgfQotICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQotICAgIHVuc2lnbmVkIHNvdXJjZUxl
bmd0aCgpIHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9Ci0gICAgdW5zaWduZWQgcGFyYW1ldGVy
c1N0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7IH0K
LSAgICB1bnNpZ25lZCB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGVQcm9maWxpbmdTdGFydE9mZnNldDsgfQotICAgIHVuc2lnbmVkIHR5cGVQcm9maWxpbmdF
bmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQ7IH0KLQot
ICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9ja0ZvcigKLSAgICAgICAgVk0m
LCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgRGVidWdnZXJNb2Rl
LCBQcm9maWxlck1vZGUsIAotICAgICAgICBQYXJzZXJFcnJvciYpOwotCi0gICAgc3RhdGljIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmcm9tR2xvYmFsQ29kZSgKLSAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYsIEV4ZWNTdGF0ZSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdComIGV4
Y2VwdGlvbiwgCi0gICAgICAgIGludCBvdmVycmlkZUxpbmVOdW1iZXIpOwotCi0gICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBsaW5rKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIGludCBvdmVycmlkZUxp
bmVOdW1iZXIgPSAtMSk7Ci0KLSAgICB2b2lkIGNsZWFyQ29kZUZvclJlY29tcGlsYXRpb24oKQot
ICAgIHsKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7Ci0gICAgICAgIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LmNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRQYXJz
ZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMpCi0gICAg
ewotICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0gICAgICAgIG1faGFzQ2FwdHVyZWRW
YXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKLSAgICB9Ci0KLSAgICBDb2RlRmVhdHVy
ZXMgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9Ci0gICAgYm9vbCBoYXND
YXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXM7
IH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwotICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICBib29sIGlzQnVpbHRpbkZ1bmN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1aWx0aW5GdW5jdGlvbjsgfQotICAgIENvbnN0cnVj
dEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENv
bnN0cnVjdEFiaWxpdHk+KG1fY29uc3RydWN0QWJpbGl0eSk7IH0KLSAgICBib29sIGlzQ2xhc3ND
b25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gY29uc3RydWN0b3JLaW5kKCkgIT0g
Q29uc3RydWN0b3JLaW5kOjpOb25lOyB9Ci0gICAgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCog
cGFyZW50U2NvcGVURFpWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiAmbV9wYXJlbnRTY29wZVRE
WlZhcmlhYmxlczsgfQotCi1wcml2YXRlOgotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIFJlZlB0cjxTb3VyY2VQcm92aWRl
cj4mJiBzb3VyY2VPdmVycmlkZSwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0
aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgVmFyaWFibGVFbnZpcm9ubWVudCYpOwotICAgIFdy
aXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7
Ci0gICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0OwotCi0gICAgSWRlbnRpZmllciBtX25hbWU7Ci0gICAgSWRlbnRpZmllciBt
X2luZmVycmVkTmFtZTsKLSAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fbmFtZVZhbHVlOwot
ICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gbV9zb3VyY2VPdmVycmlkZTsKLSAgICBWYXJpYWJs
ZUVudmlyb25tZW50IG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXM7Ci0gICAgdW5zaWduZWQgbV9m
aXJzdExpbmVPZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9saW5lQ291bnQ7Ci0gICAgdW5zaWduZWQg
bV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0OwotICAgIHVuc2lnbmVkIG1fdW5saW5rZWRCb2R5
U3RhcnRDb2x1bW47Ci0gICAgdW5zaWduZWQgbV91bmxpbmtlZEJvZHlFbmRDb2x1bW47Ci0gICAg
dW5zaWduZWQgbV9zdGFydE9mZnNldDsKLSAgICB1bnNpZ25lZCBtX3NvdXJjZUxlbmd0aDsKLSAg
ICB1bnNpZ25lZCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsKLSAgICB1bnNpZ25lZCBtX3R5cGVQ
cm9maWxpbmdTdGFydE9mZnNldDsKLSAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdFbmRPZmZz
ZXQ7Ci0gICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJDb3VudDsKLSAgICBGdW5jdGlvblBhcnNlTW9k
ZSBtX3BhcnNlTW9kZTsKLQotICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwotCi0gICAgdW5z
aWduZWQgbV9pc0luU3RyaWN0Q29udGV4dCA6IDE7Ci0gICAgdW5zaWduZWQgbV9oYXNDYXB0dXJl
ZFZhcmlhYmxlcyA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7Ci0g
ICAgdW5zaWduZWQgbV9jb25zdHJ1Y3RBYmlsaXR5OiAxOwotICAgIHVuc2lnbmVkIG1fY29uc3Ry
dWN0b3JLaW5kIDogMjsKLSAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uTW9kZSA6IDE7IC8vIEZ1bmN0
aW9uTW9kZQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi0g
ICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIG1fbmFtZVZh
bHVlLnNldCh2bSwgdGhpcywganNTdHJpbmcoJnZtLCBuYW1lKCkuc3RyaW5nKCkpKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBU
eXBlSW5mbyhVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwotfTsKLQogc3RydWN0
IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0
cmluZ0ltcGw+LCBpbnQzMl90PiBTdHJpbmdPZmZzZXRUYWJsZTsKICAgICBTdHJpbmdPZmZzZXRU
YWJsZSBvZmZzZXRUYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNp
b24gMTg4MjE5KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suY3BwOjE4ODIxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9j
ay5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJDbGFzc0lu
Zm8uaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisj
aW5jbHVkZSAiRnVuY3Rpb25PdmVycmlkZXMuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJTb3Vy
Y2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgIlN5bWJvbFRh
YmxlLmgiCisjaW5jbHVkZSAiVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oIgorI2luY2x1ZGUg
PHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWNfYXNzZXJ0KHNpemVv
ZihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSkgPD0gMjU2LCAiVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUgc2hvdWxkIGZpdCBpbiBhIDI1Ni1ieXRlIGNlbGwuIik7CisKK2NvbnN0IENsYXNz
SW5mbyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZvID0geyAiVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKSB9OworY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkQ29kZUJsb2NrOjpzX2lu
Zm8gPSB7ICJVbmxpbmtlZENvZGVCbG9jayIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5s
aW5rZWRDb2RlQmxvY2spIH07Citjb25zdCBDbGFzc0luZm8gVW5saW5rZWRHbG9iYWxDb2RlQmxv
Y2s6OnNfaW5mbyA9IHsgIlVubGlua2VkR2xvYmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEdsb2JhbENvZGVCbG9jaykgfTsKK2NvbnN0
IENsYXNzSW5mbyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKSB9OworY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkRXZh
bENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRFdmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEV2YWxDb2RlQmxvY2spIH07Citj
b25zdCBDbGFzc0luZm8gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6c19pbmZvID0geyAiVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaykgfTsKKworc3RhdGljIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2sqIGdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2soCisgICAgVk0mIHZtLCBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgRGVidWdnZXJNb2RlIGRl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwKKyAgICBVbmxpbmtlZEZ1bmN0
aW9uS2luZCBmdW5jdGlvbktpbmQsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICBKU1BhcnNl
ckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlID0gZXhlY3V0YWJsZS0+aXNCdWlsdGluRnVuY3Rpb24o
KSA/IEpTUGFyc2VyQnVpbHRpbk1vZGU6OkJ1aWx0aW4gOiBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpO
b3RCdWlsdGluOworICAgIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlID0gZXhlY3V0YWJs
ZS0+aXNJblN0cmljdENvbnRleHQoKSA/IEpTUGFyc2VyU3RyaWN0TW9kZTo6U3RyaWN0IDogSlNQ
YXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Tm9kZT4gZnVuY3Rpb24gPSBwYXJzZTxGdW5jdGlvbk5vZGU+KAorICAgICAgICAmdm0sIHNvdXJj
ZSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgCisgICAgICAg
IEpTUGFyc2VyQ29kZVR5cGU6OkZ1bmN0aW9uLCBlcnJvciwgbnVsbHB0ciwgZXhlY3V0YWJsZS0+
cGFyc2VNb2RlKCkpOworCisgICAgaWYgKCFmdW5jdGlvbikgeworICAgICAgICBBU1NFUlQoZXJy
b3IuaXNWYWxpZCgpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgZnVu
Y3Rpb24tPmZpbmlzaFBhcnNpbmcoZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5mdW5j
dGlvbk1vZGUoKSk7CisgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2UoZnVuY3Rpb24tPmZlYXR1
cmVzKCksIGZ1bmN0aW9uLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKTsKKyAgICAKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
OjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUsCisgICAgICAgIEV4ZWN1dGFibGVJbmZvKGZ1bmN0
aW9uLT5uZWVkc0FjdGl2YXRpb24oKSwgZnVuY3Rpb24tPnVzZXNFdmFsKCksIGZ1bmN0aW9uLT5p
c1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0LCBmdW5jdGlvbktpbmQgPT0g
VW5saW5rZWRCdWlsdGluRnVuY3Rpb24sIGV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yS2luZCgpKSk7
CisgICAgYXV0byBnZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxCeXRlY29kZUdlbmVyYXRvcj4o
dm0sIGZ1bmN0aW9uLmdldCgpLCByZXN1bHQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBl
eGVjdXRhYmxlLT5wYXJlbnRTY29wZVREWlZhcmlhYmxlcygpKSk7CisgICAgZXJyb3IgPSBnZW5l
cmF0b3ItPmdlbmVyYXRlKCk7CisgICAgaWYgKGVycm9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUmVmUHRyPFNvdXJjZVByb3ZpZGVy
PiYmIHNvdXJjZU92ZXJyaWRlLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSogbm9kZSwgVW5saW5rZWRG
dW5jdGlvbktpbmQga2luZCwgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5LCBWYXJp
YWJsZUVudmlyb25tZW50JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcykKKyAgICA6IEJhc2UoKnZt
LCBzdHJ1Y3R1cmUpCisgICAgLCBtX25hbWUobm9kZS0+aWRlbnQoKSkKKyAgICAsIG1faW5mZXJy
ZWROYW1lKG5vZGUtPmluZmVycmVkTmFtZSgpKQorICAgICwgbV9zb3VyY2VPdmVycmlkZShXVEY6
Om1vdmUoc291cmNlT3ZlcnJpZGUpKQorICAgICwgbV9maXJzdExpbmVPZmZzZXQobm9kZS0+Zmly
c3RMaW5lKCkgLSBzb3VyY2UuZmlyc3RMaW5lKCkpCisgICAgLCBtX2xpbmVDb3VudChub2RlLT5s
YXN0TGluZSgpIC0gbm9kZS0+Zmlyc3RMaW5lKCkpCisgICAgLCBtX3VubGlua2VkRnVuY3Rpb25O
YW1lU3RhcnQobm9kZS0+ZnVuY3Rpb25OYW1lU3RhcnQoKSAtIHNvdXJjZS5zdGFydE9mZnNldCgp
KQorICAgICwgbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbihub2RlLT5zdGFydENvbHVtbigpKQor
ICAgICwgbV91bmxpbmtlZEJvZHlFbmRDb2x1bW4obV9saW5lQ291bnQgPyBub2RlLT5lbmRDb2x1
bW4oKSA6IG5vZGUtPmVuZENvbHVtbigpIC0gbm9kZS0+c3RhcnRDb2x1bW4oKSkKKyAgICAsIG1f
c3RhcnRPZmZzZXQobm9kZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKSAtIHNvdXJjZS5zdGFydE9m
ZnNldCgpKQorICAgICwgbV9zb3VyY2VMZW5ndGgobm9kZS0+c291cmNlKCkubGVuZ3RoKCkpCisg
ICAgLCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldChub2RlLT5wYXJhbWV0ZXJzU3RhcnQoKSkKKyAg
ICAsIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KG5vZGUtPmZ1bmN0aW9uS2V5d29yZFN0YXJ0
KCkpCisgICAgLCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQobm9kZS0+c3RhcnRTdGFydE9mZnNl
dCgpICsgbm9kZS0+c291cmNlKCkubGVuZ3RoKCkgLSAxKQorICAgICwgbV9wYXJhbWV0ZXJDb3Vu
dChub2RlLT5wYXJhbWV0ZXJDb3VudCgpKQorICAgICwgbV9wYXJzZU1vZGUobm9kZS0+cGFyc2VN
b2RlKCkpCisgICAgLCBtX2ZlYXR1cmVzKDApCisgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KG5v
ZGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGZh
bHNlKQorICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihraW5kID09IFVubGlua2VkQnVpbHRpbkZ1
bmN0aW9uKQorICAgICwgbV9jb25zdHJ1Y3RBYmlsaXR5KHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
b25zdHJ1Y3RBYmlsaXR5KSkKKyAgICAsIG1fY29uc3RydWN0b3JLaW5kKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihub2RlLT5jb25zdHJ1Y3RvcktpbmQoKSkpCisgICAgLCBtX2Z1bmN0aW9uTW9kZShu
b2RlLT5mdW5jdGlvbk1vZGUoKSkKK3sKKyAgICBBU1NFUlQobV9jb25zdHJ1Y3RvcktpbmQgPT0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5vZGUtPmNvbnN0cnVjdG9yS2luZCgpKSk7CisgICAgbV9w
YXJlbnRTY29wZVREWlZhcmlhYmxlcy5zd2FwKHBhcmVudFNjb3BlVERaVmFyaWFibGVzKTsKK30K
Kwordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4o
Y2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9uYW1lVmFsdWUpOworfQorCitGdW5jdGlvbkV4ZWN1
dGFibGUqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5rKFZNJiB2bSwgY29uc3QgU291
cmNlQ29kZSYgb3duZXJTb3VyY2UsIGludCBvdmVycmlkZUxpbmVOdW1iZXIpCit7CisgICAgU291
cmNlQ29kZSBzb3VyY2UgPSBtX3NvdXJjZU92ZXJyaWRlID8gU291cmNlQ29kZShtX3NvdXJjZU92
ZXJyaWRlKSA6IG93bmVyU291cmNlOworICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IHNvdXJjZS5m
aXJzdExpbmUoKSArIG1fZmlyc3RMaW5lT2Zmc2V0OworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
ID0gc291cmNlLnN0YXJ0T2Zmc2V0KCkgKyBtX3N0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVkIGxp
bmVDb3VudCA9IG1fbGluZUNvdW50OworCisgICAgLy8gQWRqdXN0IHRvIG9uZS1iYXNlZCBpbmRl
eGluZy4KKyAgICBib29sIHN0YXJ0Q29sdW1uSXNPbkZpcnN0U291cmNlTGluZSA9ICFtX2ZpcnN0
TGluZU9mZnNldDsKKyAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IG1fdW5saW5rZWRCb2R5U3Rh
cnRDb2x1bW4gKyAoc3RhcnRDb2x1bW5Jc09uRmlyc3RTb3VyY2VMaW5lID8gc291cmNlLnN0YXJ0
Q29sdW1uKCkgOiAxKTsKKyAgICBib29sIGVuZENvbHVtbklzT25TdGFydExpbmUgPSAhbGluZUNv
dW50OworICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IG1fdW5saW5rZWRCb2R5RW5kQ29sdW1uICsg
KGVuZENvbHVtbklzT25TdGFydExpbmUgPyBzdGFydENvbHVtbiA6IDEpOworCisgICAgU291cmNl
Q29kZSBjb2RlKHNvdXJjZS5wcm92aWRlcigpLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBt
X3NvdXJjZUxlbmd0aCwgZmlyc3RMaW5lLCBzdGFydENvbHVtbik7CisgICAgRnVuY3Rpb25PdmVy
cmlkZXM6Ok92ZXJyaWRlSW5mbyBvdmVycmlkZUluZm87CisgICAgYm9vbCBoYXNGdW5jdGlvbk92
ZXJyaWRlID0gZmFsc2U7CisKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZnVuY3Rpb25PdmVy
cmlkZXMoKSkpIHsKKyAgICAgICAgaGFzRnVuY3Rpb25PdmVycmlkZSA9IEZ1bmN0aW9uT3ZlcnJp
ZGVzOjppbml0aWFsaXplT3ZlcnJpZGVGb3IoY29kZSwgb3ZlcnJpZGVJbmZvKTsKKyAgICAgICAg
aWYgKGhhc0Z1bmN0aW9uT3ZlcnJpZGUpIHsKKyAgICAgICAgICAgIGZpcnN0TGluZSA9IG92ZXJy
aWRlSW5mby5maXJzdExpbmU7CisgICAgICAgICAgICBsaW5lQ291bnQgPSBvdmVycmlkZUluZm8u
bGluZUNvdW50OworICAgICAgICAgICAgc3RhcnRDb2x1bW4gPSBvdmVycmlkZUluZm8uc3RhcnRD
b2x1bW47CisgICAgICAgICAgICBlbmRDb2x1bW4gPSBvdmVycmlkZUluZm8uZW5kQ29sdW1uOwor
ICAgICAgICAgICAgY29kZSA9IG92ZXJyaWRlSW5mby5zb3VyY2VDb2RlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiByZXN1bHQgPSBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZSh2bSwgY29kZSwgdGhpcywgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291
bnQsIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pOworICAgIGlmIChvdmVycmlkZUxpbmVOdW1iZXIg
IT0gLTEpCisgICAgICAgIHJlc3VsdC0+c2V0T3ZlcnJpZGVMaW5lTnVtYmVyKG92ZXJyaWRlTGlu
ZU51bWJlcik7CisKKyAgICBpZiAoVU5MSUtFTFkoaGFzRnVuY3Rpb25PdmVycmlkZSkpIHsKKyAg
ICAgICAgcmVzdWx0LT5vdmVycmlkZVBhcmFtZXRlckFuZFR5cGVQcm9maWxpbmdTdGFydEVuZE9m
ZnNldHMoCisgICAgICAgICAgICBvdmVycmlkZUluZm8ucGFyYW1ldGVyc1N0YXJ0T2Zmc2V0LAor
ICAgICAgICAgICAgb3ZlcnJpZGVJbmZvLnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCwKKyAgICAg
ICAgICAgIG92ZXJyaWRlSW5mby50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKAorICAgIGNvbnN0IElkZW50aWZp
ZXImIG5hbWUsIEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKKyAg
ICBKU09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlcikKK3sKKyAgICBQ
YXJzZXJFcnJvciBlcnJvcjsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgQ29kZUNhY2hl
KiBjb2RlQ2FjaGUgPSB2bS5jb2RlQ2FjaGUoKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGNvZGVDYWNoZS0+Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUds
b2JhbENvZGUodm0sIG5hbWUsIHNvdXJjZSwgZXJyb3IpOworCisgICAgYXV0byYgZ2xvYmFsT2Jq
ZWN0ID0gKmV4ZWMubGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIGlmIChnbG9iYWxPYmplY3Qu
aGFzRGVidWdnZXIoKSkKKyAgICAgICAgZ2xvYmFsT2JqZWN0LmRlYnVnZ2VyKCktPnNvdXJjZVBh
cnNlZCgmZXhlYywgc291cmNlLnByb3ZpZGVyKCksIGVycm9yLmxpbmUoKSwgZXJyb3IubWVzc2Fn
ZSgpKTsKKworICAgIGlmIChlcnJvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0g
ZXJyb3IudG9FcnJvck9iamVjdCgmZ2xvYmFsT2JqZWN0LCBzb3VyY2UsIG92ZXJyaWRlTGluZU51
bWJlcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBleGVj
dXRhYmxlOworfQorCitVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y29kZUJsb2NrRm9yKAorICAgIFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgCisgICAg
RGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFy
c2VyRXJyb3ImIGVycm9yKQoreworICAgIHN3aXRjaCAoc3BlY2lhbGl6YXRpb25LaW5kKSB7Cisg
ICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgaWYgKFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBjb2RlQmxvY2s7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVj
dDoKKyAgICAgICAgaWYgKFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVCbG9j
azsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ayogcmVzdWx0ID0gZ2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9jaygKKyAgICAgICAgdm0sIHRoaXMs
IHNvdXJjZSwgc3BlY2lhbGl6YXRpb25LaW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwg
CisgICAgICAgIGlzQnVpbHRpbkZ1bmN0aW9uKCkgPyBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbiA6
IFVubGlua2VkTm9ybWFsRnVuY3Rpb24sIAorICAgICAgICBlcnJvcik7CisgICAgCisgICAgaWYg
KGVycm9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzd2l0Y2gg
KHNwZWNpYWxpemF0aW9uS2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgIG1f
Y29kZUJsb2NrRm9yQ2FsbC5zZXQodm0sIHRoaXMsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3Quc2V0KHZtLCB0aGlzLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbykKKyAgICA6IEJhc2UoKnZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX251
bVZhcnMoMCkKKyAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCisgICAgLCBtX251bVBhcmFt
ZXRlcnMoMCkKKyAgICAsIG1fdm0odm0pCisgICAgLCBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlcigpKQorICAgICwgbV9uZWVkc0Z1bGxTY29wZUNoYWluKGluZm8ubmVlZHNB
Y3RpdmF0aW9uKCkpCisgICAgLCBtX3VzZXNFdmFsKGluZm8udXNlc0V2YWwoKSkKKyAgICAsIG1f
aXNTdHJpY3RNb2RlKGluZm8uaXNTdHJpY3RNb2RlKCkpCisgICAgLCBtX2lzQ29uc3RydWN0b3Io
aW5mby5pc0NvbnN0cnVjdG9yKCkpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGZhbHNl
KQorICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihpbmZvLmlzQnVpbHRpbkZ1bmN0aW9uKCkpCisg
ICAgLCBtX2NvbnN0cnVjdG9yS2luZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5jb25zdHJ1
Y3RvcktpbmQoKSkpCisgICAgLCBtX2ZpcnN0TGluZSgwKQorICAgICwgbV9saW5lQ291bnQoMCkK
KyAgICAsIG1fZW5kQ29sdW1uKFVJTlRfTUFYKQorICAgICwgbV9mZWF0dXJlcygwKQorICAgICwg
bV9jb2RlVHlwZShjb2RlVHlwZSkKKyAgICAsIG1fYXJyYXlQcm9maWxlQ291bnQoMCkKKyAgICAs
IG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50KDApCisgICAgLCBtX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlQ291bnQoMCkKKyAgICAsIG1fdmFsdWVQcm9maWxlQ291bnQoMCkKKyAgICAsIG1f
bGxpbnRDYWxsTGlua0luZm9Db3VudCgwKQorI2lmIEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykK
KyAgICAsIG1fYnl0ZWNvZGVDb21tZW50SXRlcmF0b3IoMCkKKyNlbmRpZgoreworICAgIGZvciAo
YXV0byYgY29uc3RhbnRSZWdpc3RlckluZGV4IDogbV9saW5rVGltZUNvbnN0YW50cykKKyAgICAg
ICAgY29uc3RhbnRSZWdpc3RlckluZGV4ID0gMDsKKyAgICBBU1NFUlQobV9jb25zdHJ1Y3Rvcktp
bmQgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8uY29uc3RydWN0b3JLaW5kKCkpKTsKK30K
Kwordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVubGlua2VkQ29kZUJsb2NrKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
c3ltYm9sVGFibGUpOworICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRv
ciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuYmVnaW4oKSwgZW5kID0gdGhpc09i
amVjdC0+bV9mdW5jdGlvbkRlY2xzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKKyAgICAgICAg
dmlzaXRvci5hcHBlbmQocHRyKTsKKyAgICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZlY3Rvcjo6
aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmJlZ2luKCksIGVuZCA9
IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5lbmQoKTsgcHRyICE9IGVuZDsgKytwdHIpCisg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKHB0cik7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhp
c09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIHRoaXNPYmplY3QtPm1fY29uc3Rh
bnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5kID0gdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+
bV9yZWdleHBzLnNpemUoKTsgaSAhPSBlbmQ7IGkrKykKKyAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaV0pOworICAgIH0KK30KKwor
aW50IFVubGlua2VkQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1
Y3Rpb25zKCkuY291bnQoKSk7CisgICAgaW50IGRpdm90OworICAgIGludCBzdGFydE9mZnNldDsK
KyAgICBpbnQgZW5kT2Zmc2V0OworICAgIHVuc2lnbmVkIGxpbmU7CisgICAgdW5zaWduZWQgY29s
dW1uOworICAgIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0
LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAgICByZXR1
cm4gbGluZTsKK30KKworaW5saW5lIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmdldExpbmVBbmRD
b2x1bW4oRXhwcmVzc2lvblJhbmdlSW5mbyYgaW5mbywKKyAgICB1bnNpZ25lZCYgbGluZSwgdW5z
aWduZWQmIGNvbHVtbikKK3sKKyAgICBzd2l0Y2ggKGluZm8ubW9kZSkgeworICAgIGNhc2UgRXhw
cmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6CisgICAgICAgIGluZm8uZGVjb2RlRmF0TGlu
ZU1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9u
UmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgorICAgICAgICBpbmZvLmRlY29kZUZhdENvbHVtbk1v
ZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFu
Z2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTogeworICAgICAgICB1bnNpZ25lZCBmYXRJbmRl
eCA9IGluZm8ucG9zaXRpb247CisgICAgICAgIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0
aW9uJiBmYXRQb3MgPSBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zW2Zh
dEluZGV4XTsKKyAgICAgICAgbGluZSA9IGZhdFBvcy5saW5lOworICAgICAgICBjb2x1bW4gPSBm
YXRQb3MuY29sdW1uOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfSAvLyBzd2l0Y2gKK30K
KworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyB2b2lkIGR1bXBMaW5lQ29sdW1uRW50cnkoc2l6ZV90
IGluZGV4LCBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVh
bSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNv
bHVtbikKK3sKKyAgICBjb25zdCBhdXRvJiBpbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvblN0cmVh
bS51bnBhY2tGb3JEZWJ1Z2dpbmcoKTsKKyAgICBPcGNvZGVJRCBvcGNvZGUgPSBpbnN0cnVjdGlv
bnNbaW5zdHJ1Y3Rpb25PZmZzZXRdLnUub3Bjb2RlOworICAgIGNvbnN0IGNoYXIqIGV2ZW50ID0g
IiI7CisgICAgaWYgKG9wY29kZSA9PSBvcF9kZWJ1ZykgeworICAgICAgICBzd2l0Y2ggKGluc3Ry
dWN0aW9uc1tpbnN0cnVjdGlvbk9mZnNldCArIDFdLnUub3BlcmFuZCkgeworICAgICAgICBjYXNl
IFdpbGxFeGVjdXRlUHJvZ3JhbTogZXZlbnQgPSAiIFdpbGxFeGVjdXRlUHJvZ3JhbSI7IGJyZWFr
OworICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFtOiBldmVudCA9ICIgRGlkRXhlY3V0ZVBy
b2dyYW0iOyBicmVhazsKKyAgICAgICAgY2FzZSBEaWRFbnRlckNhbGxGcmFtZTogZXZlbnQgPSAi
IERpZEVudGVyQ2FsbEZyYW1lIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRGlkUmVhY2hCcmVha3Bv
aW50OiBldmVudCA9ICIgRGlkUmVhY2hCcmVha3BvaW50IjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2lsbExlYXZlQ2FsbEZyYW1lOiBldmVudCA9ICIgV2lsbExlYXZlQ2FsbEZyYW1lIjsgYnJlYWs7
CisgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6IGV2ZW50ID0gIiBXaWxsRXhlY3V0
ZVN0YXRlbWVudCI7IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGRhdGFMb2dGKCIgIFsl
enVdIHBjICV1IEAgbGluZSAldSBjb2wgJXUgOiAlcyVzXG4iLCBpbmRleCwgaW5zdHJ1Y3Rpb25P
ZmZzZXQsIGxpbmUsIGNvbHVtbiwgb3Bjb2RlTmFtZXNbb3Bjb2RlXSwgZXZlbnQpOworfQorCit2
b2lkIFVubGlua2VkQ29kZUJsb2NrOjpkdW1wRXhwcmVzc2lvblJhbmdlSW5mbygpCit7CisgICAg
VmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lv
bkluZm87CisKKyAgICBzaXplX3Qgc2l6ZSA9IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOworICAg
IGRhdGFMb2dGKCJVbmxpbmtlZENvZGVCbG9jayAlcCBleHByZXNzaW9uUmFuZ2VJbmZvWyV6dV0g
e1xuIiwgdGhpcywgc2l6ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKysp
IHsKKyAgICAgICAgRXhwcmVzc2lvblJhbmdlSW5mbyYgaW5mbyA9IGV4cHJlc3Npb25JbmZvW2ld
OworICAgICAgICB1bnNpZ25lZCBsaW5lOworICAgICAgICB1bnNpZ25lZCBjb2x1bW47CisgICAg
ICAgIGdldExpbmVBbmRDb2x1bW4oaW5mbywgbGluZSwgY29sdW1uKTsKKyAgICAgICAgZHVtcExp
bmVDb2x1bW5FbnRyeShpLCBpbnN0cnVjdGlvbnMoKSwgaW5mby5pbnN0cnVjdGlvbk9mZnNldCwg
bGluZSwgY29sdW1uKTsKKyAgICB9CisgICAgZGF0YUxvZygifVxuIik7Cit9CisjZW5kaWYKKwor
dm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsCisgICAgaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNl
dCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKQorewor
ICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLmNvdW50KCkpOworCisg
ICAgaWYgKCFtX2V4cHJlc3Npb25JbmZvLnNpemUoKSkgeworICAgICAgICBzdGFydE9mZnNldCA9
IDA7CisgICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAgICAgIGRpdm90ID0gMDsKKyAgICAgICAg
bGluZSA9IDA7CisgICAgICAgIGNvbHVtbiA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9leHBy
ZXNzaW9uSW5mbzsKKworICAgIGludCBsb3cgPSAwOworICAgIGludCBoaWdoID0gZXhwcmVzc2lv
bkluZm8uc2l6ZSgpOworICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7CisgICAgICAgIGludCBtaWQg
PSBsb3cgKyAoaGlnaCAtIGxvdykgLyAyOworICAgICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlk
XS5pbnN0cnVjdGlvbk9mZnNldCA8PSBieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIGxvdyA9
IG1pZCArIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhpZ2ggPSBtaWQ7CisgICAgfQor
CisgICAgaWYgKCFsb3cpCisgICAgICAgIGxvdyA9IDE7CisKKyAgICBFeHByZXNzaW9uUmFuZ2VJ
bmZvJiBpbmZvID0gZXhwcmVzc2lvbkluZm9bbG93IC0gMV07CisgICAgc3RhcnRPZmZzZXQgPSBp
bmZvLnN0YXJ0T2Zmc2V0OworICAgIGVuZE9mZnNldCA9IGluZm8uZW5kT2Zmc2V0OworICAgIGRp
dm90ID0gaW5mby5kaXZvdFBvaW50OworICAgIGdldExpbmVBbmRDb2x1bW4oaW5mbywgbGluZSwg
Y29sdW1uKTsKK30KKwordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWRkRXhwcmVzc2lvbkluZm8o
dW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsCisgICAgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZz
ZXQsIGludCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbikKK3sKKyAg
ICBpZiAoZGl2b3QgPiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhEaXZvdCkgeworICAgICAgICAv
LyBPdmVyZmxvdyBoYXMgb2NjdXJyZWQsIHdlIGNhbiBvbmx5IGdpdmUgbGluZSBudW1iZXIgaW5m
byBmb3IgZXJyb3JzIGZvciB0aGlzIHJlZ2lvbgorICAgICAgICBkaXZvdCA9IDA7CisgICAgICAg
IHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICB9IGVsc2UgaWYg
KHN0YXJ0T2Zmc2V0ID4gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4T2Zmc2V0KSB7CisgICAgICAg
IC8vIElmIHRoZSBzdGFydCBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kcyB3ZSBjbGVhciBib3RoIG9m
ZnNldHMKKyAgICAgICAgLy8gc28gd2Ugb25seSBnZXQgdGhlIGRpdm90IG1hcmtlci4gRXJyb3Ig
bWVzc2FnZSB3aWxsIGhhdmUgdG8gYmUgcmVkdWNlZAorICAgICAgICAvLyB0byBsaW5lIGFuZCBj
aGFyUG9zaXRpb24gbnVtYmVyLgorICAgICAgICBzdGFydE9mZnNldCA9IDA7CisgICAgICAgIGVu
ZE9mZnNldCA9IDA7CisgICAgfSBlbHNlIGlmIChlbmRPZmZzZXQgPiBFeHByZXNzaW9uUmFuZ2VJ
bmZvOjpNYXhPZmZzZXQpIHsKKyAgICAgICAgLy8gVGhlIGVuZCBvZmZzZXQgaXMgb25seSB1c2Vk
IGZvciBhZGRpdGlvbmFsIGNvbnRleHQsIGFuZCBpcyBtdWNoIG1vcmUgbGlrZWx5CisgICAgICAg
IC8vIHRvIG92ZXJmbG93IChlZy4gZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMpIHNvIHdlIGFyZSB3
aWxsaW5nIHRvIGRyb3AgaXQgd2l0aG91dAorICAgICAgICAvLyBkcm9wcGluZyB0aGUgcmVzdCBv
ZiB0aGUgcmFuZ2UuCisgICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgcG9zaXRpb25Nb2RlID0KKyAgICAgICAgKGxpbmUgPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6
TWF4RmF0TGluZU1vZGVMaW5lICYmIGNvbHVtbiA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhG
YXRMaW5lTW9kZUNvbHVtbikgCisgICAgICAgID8gRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGlu
ZU1vZGUKKyAgICAgICAgOiAobGluZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRDb2x1
bW5Nb2RlTGluZSAmJiBjb2x1bW4gPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0Q29sdW1u
TW9kZUNvbHVtbikKKyAgICAgICAgPyBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2Rl
CisgICAgICAgIDogRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZUFuZENvbHVtbk1vZGU7CisK
KyAgICBFeHByZXNzaW9uUmFuZ2VJbmZvIGluZm87CisgICAgaW5mby5pbnN0cnVjdGlvbk9mZnNl
dCA9IGluc3RydWN0aW9uT2Zmc2V0OworICAgIGluZm8uZGl2b3RQb2ludCA9IGRpdm90OworICAg
IGluZm8uc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldDsKKyAgICBpbmZvLmVuZE9mZnNldCA9IGVu
ZE9mZnNldDsKKworICAgIGluZm8ubW9kZSA9IHBvc2l0aW9uTW9kZTsKKyAgICBzd2l0Y2ggKHBv
c2l0aW9uTW9kZSkgeworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6
CisgICAgICAgIGluZm8uZW5jb2RlRmF0TGluZU1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgorICAg
ICAgICBpbmZvLmVuY29kZUZhdENvbHVtbk1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTog
eworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIHVuc2lnbmVk
IGZhdEluZGV4ID0gbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5zaXpl
KCk7CisgICAgICAgIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9uIGZhdFBvcyA9IHsg
bGluZSwgY29sdW1uIH07CisgICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQ
b3NpdGlvbnMuYXBwZW5kKGZhdFBvcyk7CisgICAgICAgIGluZm8ucG9zaXRpb24gPSBmYXRJbmRl
eDsKKyAgICB9CisgICAgfSAvLyBzd2l0Y2gKKworICAgIG1fZXhwcmVzc2lvbkluZm8uYXBwZW5k
KGluZm8pOworfQorCitib29sIFVubGlua2VkQ29kZUJsb2NrOjp0eXBlUHJvZmlsZXJFeHByZXNz
aW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCB1bnNpZ25l
ZCYgc3RhcnREaXZvdCwgdW5zaWduZWQmIGVuZERpdm90KQoreworICAgIHN0YXRpYyBjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKKyAgICBhdXRvIGl0ZXIgPSBtX3R5cGVQcm9maWxlckluZm9N
YXAuZmluZChieXRlY29kZU9mZnNldCk7CisgICAgaWYgKGl0ZXIgPT0gbV90eXBlUHJvZmlsZXJJ
bmZvTWFwLmVuZCgpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
Z0YoIkRvbid0IGhhdmUgYXNzaWdubWVudCBpbmZvIGZvciBvZmZzZXQ6JXVcbiIsIGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICAgICAgc3RhcnREaXZvdCA9IFVJTlRfTUFYOworICAgICAgICBlbmREaXZv
dCA9IFVJTlRfTUFYOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIFR5
cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSYgcmFuZ2UgPSBpdGVyLT52YWx1ZTsKKyAgICBzdGFy
dERpdm90ID0gcmFuZ2UubV9zdGFydERpdm90OworICAgIGVuZERpdm90ID0gcmFuZ2UubV9lbmRE
aXZvdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWRk
VHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVu
c2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KQoreworICAgIFR5cGVQcm9maWxl
ckV4cHJlc3Npb25SYW5nZSByYW5nZTsKKyAgICByYW5nZS5tX3N0YXJ0RGl2b3QgPSBzdGFydERp
dm90OworICAgIHJhbmdlLm1fZW5kRGl2b3QgPSBlbmREaXZvdDsKKyAgICBtX3R5cGVQcm9maWxl
ckluZm9NYXAuc2V0KGluc3RydWN0aW9uT2Zmc2V0LCByYW5nZSk7ICAKK30KKwordm9pZCBVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cit9CisKK1VubGlua2VkQ29kZUJsb2NrOjp+
VW5saW5rZWRDb2RlQmxvY2soKQoreworfQorCit2b2lkIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
azo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jayo+KGNlbGwpLT5+VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKCk7Cit9CisKK3ZvaWQg
VW5saW5rZWRFdmFsQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nh
c3Q8VW5saW5rZWRFdmFsQ29kZUJsb2NrKj4oY2VsbCktPn5VbmxpbmtlZEV2YWxDb2RlQmxvY2so
KTsKK30KKwordm9pZCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayo+KGNlbGwpLT5+
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaygpOworfQorCit2b2lkIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKS0+flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7
Cit9CisKK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnNldEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1
ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4gaW5zdHJ1Y3Rpb25zKQoreworICAgIG1f
dW5saW5rZWRJbnN0cnVjdGlvbnMgPSBXVEY6Om1vdmUoaW5zdHJ1Y3Rpb25zKTsKK30KKworY29u
c3QgVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbSYgVW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0
aW9ucygpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fdW5saW5rZWRJbnN0cnVjdGlvbnMuZ2V0KCkp
OworICAgIHJldHVybiAqbV91bmxpbmtlZEluc3RydWN0aW9uczsKK30KKworfQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDEzICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLQot
I2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRXhlY3V0
YWJsZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZvLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25P
dmVycmlkZXMuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKQEAgLTQ2LDExICs0Niw2IEBAIG5hbWVzcGFjZSBKU0Mgewogc3RhdGljX2Fzc2VydChzaXpl
b2YoVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpIDw9IDI1NiwgIlVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlIHNob3VsZCBmaXQgaW4gYSAyNTYtYnl0ZSBjZWxsLiIpOwogCiBjb25zdCBDbGFz
c0luZm8gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIlVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSkgfTsKLWNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZENvZGVCbG9jazo6c19p
bmZvID0geyAiVW5saW5rZWRDb2RlQmxvY2siLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVu
bGlua2VkQ29kZUJsb2NrKSB9OwotY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkR2xvYmFsQ29kZUJs
b2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZEdsb2JhbENvZGVCbG9jayIsICZCYXNlOjpzX2luZm8s
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRHbG9iYWxDb2RlQmxvY2spIH07Ci1jb25z
dCBDbGFzc0luZm8gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaykgfTsKLWNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEV2
YWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkRXZhbENvZGVCbG9jayIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRFdmFsQ29kZUJsb2NrKSB9Owot
Y29uc3QgQ2xhc3NJbmZvIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spIH07CiAKIHN0YXRpYyBVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKAogICAgIFZNJiB2bSwg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwKQEAgLTIxNiwyODEgKzIxMSw0IEBAIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sq
IFVubGlua2VkRnVuY3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1VbmxpbmtlZENvZGVCbG9j
azo6VW5saW5rZWRDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5
cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQotICAgIDogQmFzZSgqdm0s
IHN0cnVjdHVyZSkKLSAgICAsIG1fbnVtVmFycygwKQotICAgICwgbV9udW1DYWxsZWVSZWdpc3Rl
cnMoMCkKLSAgICAsIG1fbnVtUGFyYW1ldGVycygwKQotICAgICwgbV92bSh2bSkKLSAgICAsIG1f
Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCi0gICAgLCBtX25lZWRzRnVs
bFNjb3BlQ2hhaW4oaW5mby5uZWVkc0FjdGl2YXRpb24oKSkKLSAgICAsIG1fdXNlc0V2YWwoaW5m
by51c2VzRXZhbCgpKQotICAgICwgbV9pc1N0cmljdE1vZGUoaW5mby5pc1N0cmljdE1vZGUoKSkK
LSAgICAsIG1faXNDb25zdHJ1Y3RvcihpbmZvLmlzQ29uc3RydWN0b3IoKSkKLSAgICAsIG1faGFz
Q2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCi0gICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGluZm8u
aXNCdWlsdGluRnVuY3Rpb24oKSkKLSAgICAsIG1fY29uc3RydWN0b3JLaW5kKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbmZvLmNvbnN0cnVjdG9yS2luZCgpKSkKLSAgICAsIG1fZmlyc3RMaW5lKDAp
Ci0gICAgLCBtX2xpbmVDb3VudCgwKQotICAgICwgbV9lbmRDb2x1bW4oVUlOVF9NQVgpCi0gICAg
LCBtX2ZlYXR1cmVzKDApCi0gICAgLCBtX2NvZGVUeXBlKGNvZGVUeXBlKQotICAgICwgbV9hcnJh
eVByb2ZpbGVDb3VudCgwKQotICAgICwgbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQoMCkK
LSAgICAsIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudCgwKQotICAgICwgbV92YWx1ZVBy
b2ZpbGVDb3VudCgwKQotICAgICwgbV9sbGludENhbGxMaW5rSW5mb0NvdW50KDApCi0jaWYgRU5B
QkxFKEJZVEVDT0RFX0NPTU1FTlRTKQotICAgICwgbV9ieXRlY29kZUNvbW1lbnRJdGVyYXRvcigw
KQotI2VuZGlmCi17Ci0gICAgZm9yIChhdXRvJiBjb25zdGFudFJlZ2lzdGVySW5kZXggOiBtX2xp
bmtUaW1lQ29uc3RhbnRzKQotICAgICAgICBjb25zdGFudFJlZ2lzdGVySW5kZXggPSAwOwotICAg
IEFTU0VSVChtX2NvbnN0cnVjdG9yS2luZCA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5j
b25zdHJ1Y3RvcktpbmQoKSkpOwotfQotCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVW5saW5r
ZWRDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPihjZWxs
KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0g
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7Ci0gICAgZm9yIChGdW5jdGlvbkV4
cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNs
cy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuZW5kKCk7IHB0ciAh
PSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZChwdHIpOwotICAgIGZvciAoRnVu
Y3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0
aW9uRXhwcnMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmVuZCgp
OyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQocHRyKTsKLSAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0ZXJzLmRhdGEo
KSwgdGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAgIGlmICh0aGlz
T2JqZWN0LT5tX3JhcmVEYXRhKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBlbmQgPSB0
aGlzT2JqZWN0LT5tX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOyBpICE9IGVuZDsgaSsrKQot
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmFyZURhdGEtPm1fcmVn
ZXhwc1tpXSk7Ci0gICAgfQotfQotCi1pbnQgVW5saW5rZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJG
b3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBBU1NFUlQo
Ynl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5jb3VudCgpKTsKLSAgICBpbnQgZGl2b3Q7
Ci0gICAgaW50IHN0YXJ0T2Zmc2V0OwotICAgIGludCBlbmRPZmZzZXQ7Ci0gICAgdW5zaWduZWQg
bGluZTsKLSAgICB1bnNpZ25lZCBjb2x1bW47Ci0gICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBs
aW5lLCBjb2x1bW4pOwotICAgIHJldHVybiBsaW5lOwotfQotCi1pbmxpbmUgdm9pZCBVbmxpbmtl
ZENvZGVCbG9jazo6Z2V0TGluZUFuZENvbHVtbihFeHByZXNzaW9uUmFuZ2VJbmZvJiBpbmZvLAot
ICAgIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKQotewotICAgIHN3aXRjaCAoaW5m
by5tb2RlKSB7Ci0gICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZToKLSAg
ICAgICAgaW5mby5kZWNvZGVGYXRMaW5lTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdENvbHVtbk1vZGU6Ci0gICAgICAg
IGluZm8uZGVjb2RlRmF0Q29sdW1uTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2RlOiB7Ci0g
ICAgICAgIHVuc2lnbmVkIGZhdEluZGV4ID0gaW5mby5wb3NpdGlvbjsKLSAgICAgICAgRXhwcmVz
c2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24mIGZhdFBvcyA9IG1fcmFyZURhdGEtPm1fZXhwcmVz
c2lvbkluZm9GYXRQb3NpdGlvbnNbZmF0SW5kZXhdOwotICAgICAgICBsaW5lID0gZmF0UG9zLmxp
bmU7Ci0gICAgICAgIGNvbHVtbiA9IGZhdFBvcy5jb2x1bW47Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICB9IC8vIHN3aXRjaAotfQotCi0jaWZuZGVmIE5ERUJVRwotc3RhdGljIHZvaWQgZHVt
cExpbmVDb2x1bW5FbnRyeShzaXplX3QgaW5kZXgsIGNvbnN0IFVubGlua2VkSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9uU3RyZWFtLCB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5z
aWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQotewotICAgIGNvbnN0IGF1dG8mIGluc3RydWN0
aW9ucyA9IGluc3RydWN0aW9uU3RyZWFtLnVucGFja0ZvckRlYnVnZ2luZygpOwotICAgIE9wY29k
ZUlEIG9wY29kZSA9IGluc3RydWN0aW9uc1tpbnN0cnVjdGlvbk9mZnNldF0udS5vcGNvZGU7Ci0g
ICAgY29uc3QgY2hhciogZXZlbnQgPSAiIjsKLSAgICBpZiAob3Bjb2RlID09IG9wX2RlYnVnKSB7
Ci0gICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb25zW2luc3RydWN0aW9uT2Zmc2V0ICsgMV0udS5v
cGVyYW5kKSB7Ci0gICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVQcm9ncmFtOiBldmVudCA9ICIgV2ls
bEV4ZWN1dGVQcm9ncmFtIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRGlkRXhlY3V0ZVByb2dyYW06
IGV2ZW50ID0gIiBEaWRFeGVjdXRlUHJvZ3JhbSI7IGJyZWFrOwotICAgICAgICBjYXNlIERpZEVu
dGVyQ2FsbEZyYW1lOiBldmVudCA9ICIgRGlkRW50ZXJDYWxsRnJhbWUiOyBicmVhazsKLSAgICAg
ICAgY2FzZSBEaWRSZWFjaEJyZWFrcG9pbnQ6IGV2ZW50ID0gIiBEaWRSZWFjaEJyZWFrcG9pbnQi
OyBicmVhazsKLSAgICAgICAgY2FzZSBXaWxsTGVhdmVDYWxsRnJhbWU6IGV2ZW50ID0gIiBXaWxs
TGVhdmVDYWxsRnJhbWUiOyBicmVhazsKLSAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVN0YXRlbWVu
dDogZXZlbnQgPSAiIFdpbGxFeGVjdXRlU3RhdGVtZW50IjsgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZGF0YUxvZ0YoIiAgWyV6dV0gcGMgJXUgQCBsaW5lICV1IGNvbCAldSA6ICVzJXNc
biIsIGluZGV4LCBpbnN0cnVjdGlvbk9mZnNldCwgbGluZSwgY29sdW1uLCBvcGNvZGVOYW1lc1tv
cGNvZGVdLCBldmVudCk7Ci19Ci0KLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmR1bXBFeHByZXNz
aW9uUmFuZ2VJbmZvKCkKLXsKLSAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJl
c3Npb25JbmZvID0gbV9leHByZXNzaW9uSW5mbzsKLQotICAgIHNpemVfdCBzaXplID0gbV9leHBy
ZXNzaW9uSW5mby5zaXplKCk7Ci0gICAgZGF0YUxvZ0YoIlVubGlua2VkQ29kZUJsb2NrICVwIGV4
cHJlc3Npb25SYW5nZUluZm9bJXp1XSB7XG4iLCB0aGlzLCBzaXplKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBFeHByZXNzaW9uUmFuZ2VJbmZvJiBp
bmZvID0gZXhwcmVzc2lvbkluZm9baV07Ci0gICAgICAgIHVuc2lnbmVkIGxpbmU7Ci0gICAgICAg
IHVuc2lnbmVkIGNvbHVtbjsKLSAgICAgICAgZ2V0TGluZUFuZENvbHVtbihpbmZvLCBsaW5lLCBj
b2x1bW4pOwotICAgICAgICBkdW1wTGluZUNvbHVtbkVudHJ5KGksIGluc3RydWN0aW9ucygpLCBp
bmZvLmluc3RydWN0aW9uT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwotICAgIH0KLSAgICBkYXRhTG9n
KCJ9XG4iKTsKLX0KLSNlbmRpZgotCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9u
UmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwKLSAgICBpbnQm
IGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUs
IHVuc2lnbmVkJiBjb2x1bW4pCi17Ci0gICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1
Y3Rpb25zKCkuY291bnQoKSk7Ci0KLSAgICBpZiAoIW1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpKSB7
Ci0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAgICAg
ICAgZGl2b3QgPSAwOwotICAgICAgICBsaW5lID0gMDsKLSAgICAgICAgY29sdW1uID0gMDsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYg
ZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJlc3Npb25JbmZvOwotCi0gICAgaW50IGxvdyA9IDA7Ci0g
ICAgaW50IGhpZ2ggPSBleHByZXNzaW9uSW5mby5zaXplKCk7Ci0gICAgd2hpbGUgKGxvdyA8IGhp
Z2gpIHsKLSAgICAgICAgaW50IG1pZCA9IGxvdyArIChoaWdoIC0gbG93KSAvIDI7Ci0gICAgICAg
IGlmIChleHByZXNzaW9uSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5dGVjb2RlT2Zm
c2V0KQotICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgaGlnaCA9IG1pZDsKLSAgICB9Ci0KLSAgICBpZiAoIWxvdykKLSAgICAgICAgbG93ID0gMTsK
LQotICAgIEV4cHJlc3Npb25SYW5nZUluZm8mIGluZm8gPSBleHByZXNzaW9uSW5mb1tsb3cgLSAx
XTsKLSAgICBzdGFydE9mZnNldCA9IGluZm8uc3RhcnRPZmZzZXQ7Ci0gICAgZW5kT2Zmc2V0ID0g
aW5mby5lbmRPZmZzZXQ7Ci0gICAgZGl2b3QgPSBpbmZvLmRpdm90UG9pbnQ7Ci0gICAgZ2V0TGlu
ZUFuZENvbHVtbihpbmZvLCBsaW5lLCBjb2x1bW4pOwotfQotCi12b2lkIFVubGlua2VkQ29kZUJs
b2NrOjphZGRFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwKLSAgICBp
bnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwg
dW5zaWduZWQgY29sdW1uKQotewotICAgIGlmIChkaXZvdCA+IEV4cHJlc3Npb25SYW5nZUluZm86
Ok1heERpdm90KSB7Ci0gICAgICAgIC8vIE92ZXJmbG93IGhhcyBvY2N1cnJlZCwgd2UgY2FuIG9u
bHkgZ2l2ZSBsaW5lIG51bWJlciBpbmZvIGZvciBlcnJvcnMgZm9yIHRoaXMgcmVnaW9uCi0gICAg
ICAgIGRpdm90ID0gMDsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBlbmRPZmZz
ZXQgPSAwOwotICAgIH0gZWxzZSBpZiAoc3RhcnRPZmZzZXQgPiBFeHByZXNzaW9uUmFuZ2VJbmZv
OjpNYXhPZmZzZXQpIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IG9mZnNldCBpcyBvdXQgb2Yg
Ym91bmRzIHdlIGNsZWFyIGJvdGggb2Zmc2V0cwotICAgICAgICAvLyBzbyB3ZSBvbmx5IGdldCB0
aGUgZGl2b3QgbWFya2VyLiBFcnJvciBtZXNzYWdlIHdpbGwgaGF2ZSB0byBiZSByZWR1Y2VkCi0g
ICAgICAgIC8vIHRvIGxpbmUgYW5kIGNoYXJQb3NpdGlvbiBudW1iZXIuCi0gICAgICAgIHN0YXJ0
T2Zmc2V0ID0gMDsKLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAgICB9IGVsc2UgaWYgKGVuZE9m
ZnNldCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heE9mZnNldCkgewotICAgICAgICAvLyBUaGUg
ZW5kIG9mZnNldCBpcyBvbmx5IHVzZWQgZm9yIGFkZGl0aW9uYWwgY29udGV4dCwgYW5kIGlzIG11
Y2ggbW9yZSBsaWtlbHkKLSAgICAgICAgLy8gdG8gb3ZlcmZsb3cgKGVnLiBmdW5jdGlvbiBjYWxs
IGFyZ3VtZW50cykgc28gd2UgYXJlIHdpbGxpbmcgdG8gZHJvcCBpdCB3aXRob3V0Ci0gICAgICAg
IC8vIGRyb3BwaW5nIHRoZSByZXN0IG9mIHRoZSByYW5nZS4KLSAgICAgICAgZW5kT2Zmc2V0ID0g
MDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBwb3NpdGlvbk1vZGUgPQotICAgICAgICAobGluZSA8
PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRMaW5lTW9kZUxpbmUgJiYgY29sdW1uIDw9IEV4
cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdExpbmVNb2RlQ29sdW1uKSAKLSAgICAgICAgPyBFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZQotICAgICAgICA6IChsaW5lIDw9IEV4cHJlc3Np
b25SYW5nZUluZm86Ok1heEZhdENvbHVtbk1vZGVMaW5lICYmIGNvbHVtbiA8PSBFeHByZXNzaW9u
UmFuZ2VJbmZvOjpNYXhGYXRDb2x1bW5Nb2RlQ29sdW1uKQotICAgICAgICA/IEV4cHJlc3Npb25S
YW5nZUluZm86OkZhdENvbHVtbk1vZGUKLSAgICAgICAgOiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpG
YXRMaW5lQW5kQ29sdW1uTW9kZTsKLQotICAgIEV4cHJlc3Npb25SYW5nZUluZm8gaW5mbzsKLSAg
ICBpbmZvLmluc3RydWN0aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgaW5mby5k
aXZvdFBvaW50ID0gZGl2b3Q7Ci0gICAgaW5mby5zdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0Owot
ICAgIGluZm8uZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwotCi0gICAgaW5mby5tb2RlID0gcG9zaXRp
b25Nb2RlOwotICAgIHN3aXRjaCAocG9zaXRpb25Nb2RlKSB7Ci0gICAgY2FzZSBFeHByZXNzaW9u
UmFuZ2VJbmZvOjpGYXRMaW5lTW9kZToKLSAgICAgICAgaW5mby5lbmNvZGVGYXRMaW5lTW9kZShs
aW5lLCBjb2x1bW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4cHJlc3Npb25SYW5nZUlu
Zm86OkZhdENvbHVtbk1vZGU6Ci0gICAgICAgIGluZm8uZW5jb2RlRmF0Q29sdW1uTW9kZShsaW5l
LCBjb2x1bW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4cHJlc3Npb25SYW5nZUluZm86
OkZhdExpbmVBbmRDb2x1bW5Nb2RlOiB7Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nh
cnkoKTsKLSAgICAgICAgdW5zaWduZWQgZmF0SW5kZXggPSBtX3JhcmVEYXRhLT5tX2V4cHJlc3Np
b25JbmZvRmF0UG9zaXRpb25zLnNpemUoKTsKLSAgICAgICAgRXhwcmVzc2lvblJhbmdlSW5mbzo6
RmF0UG9zaXRpb24gZmF0UG9zID0geyBsaW5lLCBjb2x1bW4gfTsKLSAgICAgICAgbV9yYXJlRGF0
YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5hcHBlbmQoZmF0UG9zKTsKLSAgICAgICAg
aW5mby5wb3NpdGlvbiA9IGZhdEluZGV4OwotICAgIH0KLSAgICB9IC8vIHN3aXRjaAotCi0gICAg
bV9leHByZXNzaW9uSW5mby5hcHBlbmQoaW5mbyk7Ci19Ci0KLWJvb2wgVW5saW5rZWRDb2RlQmxv
Y2s6OnR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkJiBzdGFydERpdm90LCB1bnNpZ25lZCYgZW5kRGl2b3Qp
Ci17Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotICAgIGF1dG8gaXRl
ciA9IG1fdHlwZVByb2ZpbGVySW5mb01hcC5maW5kKGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBpZiAo
aXRlciA9PSBtX3R5cGVQcm9maWxlckluZm9NYXAuZW5kKCkpIHsKLSAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nRigiRG9uJ3QgaGF2ZSBhc3NpZ25tZW50IGluZm8gZm9y
IG9mZnNldDoldVxuIiwgYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBzdGFydERpdm90ID0gVUlO
VF9NQVg7Ci0gICAgICAgIGVuZERpdm90ID0gVUlOVF9NQVg7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgCi0gICAgVHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlJiByYW5nZSA9
IGl0ZXItPnZhbHVlOwotICAgIHN0YXJ0RGl2b3QgPSByYW5nZS5tX3N0YXJ0RGl2b3Q7Ci0gICAg
ZW5kRGl2b3QgPSByYW5nZS5tX2VuZERpdm90OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFVubGlua2VkQ29kZUJsb2NrOjphZGRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyh1bnNpZ25l
ZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5zaWduZWQgc3RhcnREaXZvdCwgdW5zaWduZWQgZW5kRGl2
b3QpCi17Ci0gICAgVHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlIHJhbmdlOwotICAgIHJhbmdl
Lm1fc3RhcnREaXZvdCA9IHN0YXJ0RGl2b3Q7Ci0gICAgcmFuZ2UubV9lbmREaXZvdCA9IGVuZERp
dm90OwotICAgIG1fdHlwZVByb2ZpbGVySW5mb01hcC5zZXQoaW5zdHJ1Y3Rpb25PZmZzZXQsIHJh
bmdlKTsgIAotfQotCi12b2lkIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2sqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLX0K
LQotVW5saW5rZWRDb2RlQmxvY2s6On5VbmxpbmtlZENvZGVCbG9jaygpCi17Ci19Ci0KLXZvaWQg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBq
c0Nhc3Q8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCktPn5VbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2soKTsKLX0KLQotdm9pZCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxVbmxpbmtlZEV2YWxDb2RlQmxvY2sqPihjZWxsKS0+
flVubGlua2VkRXZhbENvZGVCbG9jaygpOwotfQotCi12b2lkIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKCk7Ci19Ci0K
LXZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQot
ewotICAgIGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5+VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUoKTsKLX0KLQotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6c2V0
SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtPiBp
bnN0cnVjdGlvbnMpCi17Ci0gICAgbV91bmxpbmtlZEluc3RydWN0aW9ucyA9IFdURjo6bW92ZShp
bnN0cnVjdGlvbnMpOwotfQotCi1jb25zdCBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtJiBVbmxp
bmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV91bmxp
bmtlZEluc3RydWN0aW9ucy5nZXQoKSk7Ci0gICAgcmV0dXJuICptX3VubGlua2VkSW5zdHJ1Y3Rp
b25zOwotfQotCi19Ci0KK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmgJKHJldmlzaW9uIDE4ODIxOSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmg6MTg4MjE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgVW5saW5rZWRDb2RlQmxvY2tfaAorI2RlZmluZSBVbmxpbmtlZENv
ZGVCbG9ja19oCisKKyNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAi
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1ZGUgIkNvZGVUeXBlLmgiCisjaW5jbHVk
ZSAiQ29uc3RydWN0QWJpbGl0eS5oIgorI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIK
KyNpbmNsdWRlICJIYW5kbGVySW5mby5oIgorI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNpbmNs
dWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIlBhcnNlck1v
ZGVzLmgiCisjaW5jbHVkZSAiUmVnRXhwLmgiCisjaW5jbHVkZSAiU3BlY2lhbFBvaW50ZXIuaCIK
KyNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgIlZhcmlhYmxlRW52aXJvbm1lbnQu
aCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBEZWJ1Z2dlcjsKK2NsYXNzIEZ1bmN0aW9uTWV0YWRhdGFOb2RlOworY2xhc3MgRnVu
Y3Rpb25FeGVjdXRhYmxlOworY2xhc3MgSlNTY29wZTsKK2NsYXNzIFBhcnNlckVycm9yOworY2xh
c3MgU2NyaXB0RXhlY3V0YWJsZTsKK2NsYXNzIFNvdXJjZUNvZGU7CitjbGFzcyBTb3VyY2VQcm92
aWRlcjsKK2NsYXNzIFN5bWJvbFRhYmxlOworY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CitjbGFz
cyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRJbnN0cnVjdGlvblN0
cmVhbTsKKwordHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZFZhbHVlUHJvZmlsZTsKK3R5cGVkZWYg
dW5zaWduZWQgVW5saW5rZWRBcnJheVByb2ZpbGU7Cit0eXBlZGVmIHVuc2lnbmVkIFVubGlua2Vk
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKK3R5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTsKK3R5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxMaW5r
SW5mbzsKKworc3RydWN0IEV4ZWN1dGFibGVJbmZvIHsKKyAgICBFeGVjdXRhYmxlSW5mbyhib29s
IG5lZWRzQWN0aXZhdGlvbiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBpc1N0cmljdE1vZGUsIGJvb2wg
aXNDb25zdHJ1Y3RvciwgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbiwgQ29uc3RydWN0b3JLaW5kIGNv
bnN0cnVjdG9yS2luZCkKKyAgICAgICAgOiBtX25lZWRzQWN0aXZhdGlvbihuZWVkc0FjdGl2YXRp
b24pCisgICAgICAgICwgbV91c2VzRXZhbCh1c2VzRXZhbCkKKyAgICAgICAgLCBtX2lzU3RyaWN0
TW9kZShpc1N0cmljdE1vZGUpCisgICAgICAgICwgbV9pc0NvbnN0cnVjdG9yKGlzQ29uc3RydWN0
b3IpCisgICAgICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihpc0J1aWx0aW5GdW5jdGlvbikKKyAg
ICAgICAgLCBtX2NvbnN0cnVjdG9yS2luZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29uc3RydWN0
b3JLaW5kKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NvbnN0cnVjdG9yS2luZCA9PSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oY29uc3RydWN0b3JLaW5kKSk7CisgICAgfQorCisgICAgYm9vbCBu
ZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX25lZWRzQWN0aXZhdGlvbjsgfQorICAg
IGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3VzZXNFdmFsOyB9CisgICAgYm9vbCBp
c1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2lzU3RyaWN0TW9kZTsgfQorICAgIGJvb2wg
aXNDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvcjsgfQorICAgIGJv
b2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1bmN0aW9u
OyB9CisgICAgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PENvbnN0cnVjdG9yS2luZD4obV9jb25zdHJ1Y3RvcktpbmQpOyB9CisKK3By
aXZhdGU6CisgICAgdW5zaWduZWQgbV9uZWVkc0FjdGl2YXRpb24gOiAxOworICAgIHVuc2lnbmVk
IG1fdXNlc0V2YWwgOiAxOworICAgIHVuc2lnbmVkIG1faXNTdHJpY3RNb2RlIDogMTsKKyAgICB1
bnNpZ25lZCBtX2lzQ29uc3RydWN0b3IgOiAxOworICAgIHVuc2lnbmVkIG1faXNCdWlsdGluRnVu
Y3Rpb24gOiAxOworICAgIHVuc2lnbmVkIG1fY29uc3RydWN0b3JLaW5kIDogMjsKK307CisKK2Vu
dW0gVW5saW5rZWRGdW5jdGlvbktpbmQgeworICAgIFVubGlua2VkTm9ybWFsRnVuY3Rpb24sCisg
ICAgVW5saW5rZWRCdWlsdGluRnVuY3Rpb24sCit9OworCitjbGFzcyBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIGZyaWVuZCBj
bGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7CisgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKKyAg
ICBmcmllbmQgY2xhc3MgVk07CisKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
U3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogY3JlYXRlKFZNKiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbk1l
dGFkYXRhTm9kZSogbm9kZSwgVW5saW5rZWRGdW5jdGlvbktpbmQgdW5saW5rZWRGdW5jdGlvbktp
bmQsIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSwgVmFyaWFibGVFbnZpcm9ubWVu
dCYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4mJiBzb3Vy
Y2VPdmVycmlkZSA9IG51bGxwdHIpCisgICAgeworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZT4odm0tPmhlYXApKQorICAgICAgICAgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUodm0sIHZtLT51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5n
ZXQoKSwgc291cmNlLCBXVEY6Om1vdmUoc291cmNlT3ZlcnJpZGUpLCBub2RlLCB1bmxpbmtlZEZ1
bmN0aW9uS2luZCwgY29uc3RydWN0QWJpbGl0eSwgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMpOwor
ICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKKyAgICAgICAgcmV0dXJuIGlu
c3RhbmNlOworICAgIH0KKworICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX25hbWU7IH0KKyAgICBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2luZmVycmVkTmFtZTsgfQorICAgIEpTU3RyaW5nKiBuYW1lVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWVWYWx1ZS5nZXQoKTsgfQorICAgIHVuc2lnbmVkIHBhcmFtZXRl
ckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudDsgfTsKKyAgICBGdW5jdGlv
blBhcnNlTW9kZSBwYXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlTW9kZTsgfTsKKyAg
ICBib29sIGlzSW5TdHJpY3RDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0Q29u
dGV4dDsgfQorICAgIEZ1bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxGdW5jdGlvbk1vZGU+KG1fZnVuY3Rpb25Nb2RlKTsgfQorICAgIENvbnN0cnVj
dG9yS2luZCBjb25zdHJ1Y3RvcktpbmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb25z
dHJ1Y3RvcktpbmQ+KG1fY29uc3RydWN0b3JLaW5kKTsgfQorCisgICAgdW5zaWduZWQgdW5saW5r
ZWRGdW5jdGlvbk5hbWVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRGdW5jdGlvbk5h
bWVTdGFydDsgfQorICAgIHVuc2lnbmVkIHVubGlua2VkQm9keVN0YXJ0Q29sdW1uKCkgY29uc3Qg
eyByZXR1cm4gbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbjsgfQorICAgIHVuc2lnbmVkIHVubGlu
a2VkQm9keUVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRCb2R5RW5kQ29sdW1u
OyB9CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zm
c2V0OyB9CisgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoKCkgeyByZXR1cm4gbV9zb3VyY2VMZW5n
dGg7IH0KKyAgICB1bnNpZ25lZCBwYXJhbWV0ZXJzU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIHR5cGVQcm9maWxpbmdT
dGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OyB9
CisgICAgdW5zaWduZWQgdHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZVByb2ZpbGluZ0VuZE9mZnNldDsgfQorCisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ayogY29kZUJsb2NrRm9yKAorICAgICAgICBWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgCisgICAgICAgIFBh
cnNlckVycm9yJik7CisKKyAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZy
b21HbG9iYWxDb2RlKAorICAgICAgICBjb25zdCBJZGVudGlmaWVyJiwgRXhlY1N0YXRlJiwgY29u
c3QgU291cmNlQ29kZSYsIEpTT2JqZWN0KiYgZXhjZXB0aW9uLCAKKyAgICAgICAgaW50IG92ZXJy
aWRlTGluZU51bWJlcik7CisKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGxpbmsoVk0mLCBjb25z
dCBTb3VyY2VDb2RlJiwgaW50IG92ZXJyaWRlTGluZU51bWJlciA9IC0xKTsKKworICAgIHZvaWQg
Y2xlYXJDb2RlRm9yUmVjb21waWxhdGlvbigpCisgICAgeworICAgICAgICBtX2NvZGVCbG9ja0Zv
ckNhbGwuY2xlYXIoKTsKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIoKTsK
KyAgICB9CisKKyAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9v
bCBoYXNDYXB0dXJlZFZhcmlhYmxlcykKKyAgICB7CisgICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0
dXJlczsKKyAgICAgICAgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGhhc0NhcHR1cmVkVmFyaWFi
bGVzOworICAgIH0KKworICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJu
IG1fZmVhdHVyZXM7IH0KKyAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsgfQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKKworICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVp
bHRpbkZ1bmN0aW9uOyB9CisgICAgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5KCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29uc3RydWN0QWJpbGl0eT4obV9jb25zdHJ1Y3RB
YmlsaXR5KTsgfQorICAgIGJvb2wgaXNDbGFzc0NvbnN0cnVjdG9yRnVuY3Rpb24oKSBjb25zdCB7
IHJldHVybiBjb25zdHJ1Y3RvcktpbmQoKSAhPSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmU7IH0KKyAg
ICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcygpIGNv
bnN0IHsgcmV0dXJuICZtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzOyB9CisKK3ByaXZhdGU6Cisg
ICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiYmIHNvdXJjZU92ZXJyaWRlLCBGdW5jdGlv
bk1ldGFkYXRhTm9kZSosIFVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBW
YXJpYWJsZUVudmlyb25tZW50Jik7CisgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisKKyAgICBJZGVudGlm
aWVyIG1fbmFtZTsKKyAgICBJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOworICAgIFdyaXRlQmFy
cmllcjxKU1N0cmluZz4gbV9uYW1lVmFsdWU7CisgICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBt
X3NvdXJjZU92ZXJyaWRlOworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV9wYXJlbnRTY29wZVRE
WlZhcmlhYmxlczsKKyAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZU9mZnNldDsKKyAgICB1bnNpZ25l
ZCBtX2xpbmVDb3VudDsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7
CisgICAgdW5zaWduZWQgbV91bmxpbmtlZEJvZHlTdGFydENvbHVtbjsKKyAgICB1bnNpZ25lZCBt
X3VubGlua2VkQm9keUVuZENvbHVtbjsKKyAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0OworICAg
IHVuc2lnbmVkIG1fc291cmNlTGVuZ3RoOworICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0
T2Zmc2V0OworICAgIHVuc2lnbmVkIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OworICAgIHVu
c2lnbmVkIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX3BhcmFtZXRl
ckNvdW50OworICAgIEZ1bmN0aW9uUGFyc2VNb2RlIG1fcGFyc2VNb2RlOworCisgICAgQ29kZUZl
YXR1cmVzIG1fZmVhdHVyZXM7CisKKyAgICB1bnNpZ25lZCBtX2lzSW5TdHJpY3RDb250ZXh0IDog
MTsKKyAgICB1bnNpZ25lZCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKKyAgICB1bnNpZ25l
ZCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyAgICB1bnNpZ25lZCBtX2NvbnN0cnVjdEFiaWxp
dHk6IDE7CisgICAgdW5zaWduZWQgbV9jb25zdHJ1Y3RvcktpbmQgOiAyOworICAgIHVuc2lnbmVk
IG1fZnVuY3Rpb25Nb2RlIDogMTsgLy8gRnVuY3Rpb25Nb2RlCisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICAgICAgbV9uYW1lVmFsdWUuc2V0KHZtLCB0aGlzLCBqc1N0cmluZygm
dm0sIG5hbWUoKS5zdHJpbmcoKSkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHVibGljOgorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87Cit9OworCitzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewor
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIGludDMyX3Q+IFN0cmluZ09m
ZnNldFRhYmxlOworICAgIFN0cmluZ09mZnNldFRhYmxlIG9mZnNldFRhYmxlOworCisgICAgaW5s
aW5lIGludDMyX3Qgb2Zmc2V0Rm9yVmFsdWUoU3RyaW5nSW1wbCogdmFsdWUsIGludDMyX3QgZGVm
YXVsdE9mZnNldCkKKyAgICB7CisgICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBvZmZzZXRUYWJsZS5lbmQoKTsKKyAgICAgICAgU3RyaW5nT2Zmc2V0VGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGxvYyA9IG9mZnNldFRhYmxlLmZpbmQodmFsdWUpOworICAgICAgICBp
ZiAobG9jID09IGVuZCkKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0T2Zmc2V0OworICAgICAg
ICByZXR1cm4gbG9jLT52YWx1ZTsKKyAgICB9CisKK307CisKK3N0cnVjdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSB7CisgICAgVmVjdG9yPGludDMyX3Q+IGJyYW5jaE9mZnNldHM7CisgICAgaW50
MzJfdCBtaW47CisKKyAgICBpbnQzMl90IG9mZnNldEZvclZhbHVlKGludDMyX3QgdmFsdWUsIGlu
dDMyX3QgZGVmYXVsdE9mZnNldCk7CisgICAgdm9pZCBhZGQoaW50MzJfdCBrZXksIGludDMyX3Qg
b2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFicmFuY2hPZmZzZXRzW2tleV0pCisgICAgICAg
ICAgICBicmFuY2hPZmZzZXRzW2tleV0gPSBvZmZzZXQ7CisgICAgfQorfTsKKworc3RydWN0IFVu
bGlua2VkSW5zdHJ1Y3Rpb24geworICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3BlcmFu
ZCA9IDA7IH0KKyAgICBVbmxpbmtlZEluc3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1Lm9w
Y29kZSA9IG9wY29kZTsgfQorICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQpIHsg
dS5vcGVyYW5kID0gb3BlcmFuZDsgfQorICAgIHVuaW9uIHsKKyAgICAgICAgT3Bjb2RlSUQgb3Bj
b2RlOworICAgICAgICBpbnQzMl90IG9wZXJhbmQ7CisgICAgICAgIHVuc2lnbmVkIGluZGV4Owor
ICAgIH0gdTsKK307CisKK2NsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRp
YyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworCisgICAgZW51bSB7IENhbGxG
dW5jdGlvbiwgQXBwbHlGdW5jdGlvbiB9OworCisgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9pc0NvbnN0cnVjdG9yOyB9CisgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBj
b25zdCB7IHJldHVybiBtX2lzU3RyaWN0TW9kZTsgfQorICAgIGJvb2wgdXNlc0V2YWwoKSBjb25z
dCB7IHJldHVybiBtX3VzZXNFdmFsOyB9CisKKyAgICBib29sIG5lZWRzRnVsbFNjb3BlQ2hhaW4o
KSBjb25zdCB7IHJldHVybiBtX25lZWRzRnVsbFNjb3BlQ2hhaW47IH0KKworICAgIHZvaWQgYWRk
RXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIGludCBkaXZvdCwKKyAg
ICAgICAgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNp
Z25lZCBjb2x1bW4pOworCisgICAgdm9pZCBhZGRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyh1
bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5zaWduZWQgc3RhcnREaXZvdCwgdW5zaWduZWQg
ZW5kRGl2b3QpOworCisgICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhw
cmVzc2lvbkluZm8uc2l6ZSgpOyB9CisKKyAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycworICAgIHZv
aWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlz
UmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KKyAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdp
c3RlcjsgfQorICAgIHZvaWQgc2V0QWN0aXZhdGlvblJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBh
Y3RpdmF0aW9uUmVnaXN0ZXIpIHsgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlciA9IGFjdGl2
YXRpb25SZWdpc3RlcjsgfQorCisgICAgYm9vbCB1c2VzR2xvYmFsT2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3Rlci5pc1ZhbGlkKCk7IH0KKyAgICB2b2lkIHNldEds
b2JhbE9iamVjdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBnbG9iYWxPYmplY3RSZWdpc3Rlcikg
eyBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyID0gZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7IH0KKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ds
b2JhbE9iamVjdFJlZ2lzdGVyOyB9CisKKyAgICAvLyBQYXJhbWV0ZXIgaW5mb3JtYXRpb24KKyAg
ICB2b2lkIHNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKSB7IG1fbnVtUGFyYW1ldGVycyA9
IG5ld1ZhbHVlOyB9CisgICAgdm9pZCBhZGRQYXJhbWV0ZXIoKSB7IG1fbnVtUGFyYW1ldGVycysr
OyB9CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFy
YW1ldGVyczsgfQorCisgICAgdW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikKKyAgICB7Cisg
ICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgdW5zaWduZWQgc2l6
ZSA9IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1f
cmVnZXhwcy5hcHBlbmQoV3JpdGVCYXJyaWVyPFJlZ0V4cD4oKm1fdm0sIHRoaXMsIHIpKTsKKyAg
ICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnRXhwcygp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7CisgICAg
fQorICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyBBU1NFUlQobV9yYXJlRGF0
YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaW5kZXhdLmdldCgpOyB9CisKKyAgICAv
LyBDb25zdGFudCBQb29scworCisgICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXJzLnNpemUoKTsgfQorICAgIHZvaWQgYWRkSWRlbnRpZmll
cihjb25zdCBJZGVudGlmaWVyJiBpKSB7IHJldHVybiBtX2lkZW50aWZpZXJzLmFwcGVuZChpKTsg
fQorICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXJzW2luZGV4XTsgfQorICAgIGNvbnN0IFZlY3RvcjxJZGVudGlmaWVy
PiYgaWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzOyB9CisKKyAgICB1
bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBz
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVy
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5z
aXplKCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxV
bmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KCptX3Zt
LCB0aGlzLCB2KTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24u
YXBwZW5kKHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KExpbmtUaW1lQ29uc3RhbnQgdHlwZSkK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6
ZSgpOworICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSk7CisgICAgICAgIEFTU0VSVChpbmRleCA8IExpbmtU
aW1lQ29uc3RhbnRDb3VudCk7CisgICAgICAgIG1fbGlua1RpbWVDb25zdGFudHNbaW5kZXhdID0g
cmVzdWx0OworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8
VW5rbm93bj4oKSk7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
LmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgdW5zaWduZWQgcmVnaXN0ZXJJbmRleEZvckxpbmtUaW1lQ29u
c3RhbnQoTGlua1RpbWVDb25zdGFudCB0eXBlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5k
ZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSk7CisgICAgICAgIEFTU0VSVChpbmRleCA8
IExpbmtUaW1lQ29uc3RhbnRDb3VudCk7CisgICAgICAgIHJldHVybiBtX2xpbmtUaW1lQ29uc3Rh
bnRzW2luZGV4XTsKKyAgICB9CisgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3du
Pj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQor
ICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQorCisgICAgLy8gSnVtcHMKKyAgICBz
aXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMu
c2l6ZSgpOyB9CisgICAgdm9pZCBhZGRKdW1wVGFyZ2V0KHVuc2lnbmVkIGp1bXBUYXJnZXQpIHsg
bV9qdW1wVGFyZ2V0cy5hcHBlbmQoanVtcFRhcmdldCk7IH0KKyAgICB1bnNpZ25lZCBqdW1wVGFy
Z2V0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0c1tpbmRleF07IH0KKyAg
ICB1bnNpZ25lZCBsYXN0SnVtcFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMu
bGFzdCgpOyB9CisKKyAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9pc0J1aWx0aW5GdW5jdGlvbjsgfQorCisgICAgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9y
S2luZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbnN0cnVjdG9yS2luZD4obV9jb25z
dHJ1Y3RvcktpbmQpOyB9CisKKyAgICB2b2lkIHNocmlua1RvRml0KCkKKyAgICB7CisgICAgICAg
IG1fanVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9pZGVudGlmaWVycy5zaHJp
bmtUb0ZpdCgpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7Cisg
ICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNocmlua1RvRml0KCk7
CisgICAgICAgIG1fZnVuY3Rpb25EZWNscy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2Z1bmN0
aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2V4cHJlc3Npb25JbmZvLnNocmlua1RvRml0
KCk7CisKKyNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMpCisgICAgICAgIG1fYnl0ZWNvZGVD
b21tZW50cy5zaHJpbmtUb0ZpdCgpOworI2VuZGlmCisgICAgICAgIGlmIChtX3JhcmVEYXRhKSB7
CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNocmlua1RvRml0
KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNocmlua1RvRml0KCk7Cisg
ICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsK
KyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtU
b0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0
aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzZXRJbnN0
cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRyPFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0+KTsKKyAg
ICBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsK
KworICAgIGludCBtX251bVZhcnM7CisgICAgaW50IG1fbnVtQ2FwdHVyZWRWYXJzOworICAgIGlu
dCBtX251bUNhbGxlZVJlZ2lzdGVyczsKKworICAgIC8vIEp1bXAgVGFibGVzCisKKyAgICBzaXpl
X3QgbnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/
IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9CisgICAgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIGFkZFN3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJ
Zk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFi
bGVzLmxhc3QoKTsgfQorICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0
YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAgICBzaXplX3QgbnVtYmVy
T2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1f
cmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9CisgICAgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIGFkZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRl
UmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMuYXBwZW5kKFVubGlua2VkU3RyaW5nSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgQVNTRVJUKG1f
cmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOyB9CisKKyAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkRlY2woVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIG4pCisgICAgeworICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9mdW5j
dGlvbkRlY2xzLnNpemUoKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzLmFwcGVuZChXcml0ZUJh
cnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOworICAgICAgICBtX2Z1bmN0aW9u
RGVjbHMubGFzdCgpLnNldCgqbV92bSwgdGhpcywgbik7CisgICAgICAgIHJldHVybiBzaXplOwor
ICAgIH0KKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBp
bmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQorICAgIHNpemVf
dCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgp
OyB9CisgICAgdW5zaWduZWQgYWRkRnVuY3Rpb25FeHByKFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBuKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25FeHBycy5z
aXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzLmxhc3Qo
KS5zZXQoKm1fdm0sIHRoaXMsIG4pOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisgICAg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhwcihpbnQgaW5kZXgpIHsgcmV0
dXJuIG1fZnVuY3Rpb25FeHByc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZG
dW5jdGlvbkV4cHJzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzLnNpemUoKTsgfQorCisgICAg
Ly8gRXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKKyAgICBzaXplX3QgbnVtYmVyT2ZFeGNlcHRp
b25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2V4
Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA6IDA7IH0KKyAgICB2b2lkIGFkZEV4Y2VwdGlvbkhhbmRs
ZXIoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlcikgeyBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVu
ZChoYW5kbGVyKTsgfQorICAgIFVubGlua2VkSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhhbmRsZXIo
aW50IGluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXhj
ZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9CisKKyAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBt
X3ZtOyB9CisKKyAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhZGRBcnJheVByb2ZpbGUoKSB7IHJl
dHVybiBtX2FycmF5UHJvZmlsZUNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkFycmF5
UHJvZmlsZXMoKSB7IHJldHVybiBtX2FycmF5UHJvZmlsZUNvdW50OyB9CisgICAgVW5saW5rZWRB
cnJheUFsbG9jYXRpb25Qcm9maWxlIGFkZEFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSB7IHJldHVy
biBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVDb3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlcygpIHsgcmV0dXJuIG1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZUNvdW50OyB9CisgICAgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSBhZGRPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZSgpIHsgcmV0dXJuIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVD
b3VudCsrOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZXMo
KSB7IHJldHVybiBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlQ291bnQ7IH0KKyAgICBVbmxpbmtl
ZFZhbHVlUHJvZmlsZSBhZGRWYWx1ZVByb2ZpbGUoKSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZUNv
dW50Kys7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBt
X3ZhbHVlUHJvZmlsZUNvdW50OyB9CisKKyAgICBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvIGFk
ZExMSW50Q2FsbExpbmtJbmZvKCkgeyByZXR1cm4gbV9sbGludENhbGxMaW5rSW5mb0NvdW50Kys7
IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkxMaW50Q2FsbExpbmtJbmZvcygpIHsgcmV0dXJuIG1f
bGxpbnRDYWxsTGlua0luZm9Db3VudDsgfQorCisgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25z
dCB7IHJldHVybiBtX2NvZGVUeXBlOyB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lz
dGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGVSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVSZWdpc3RlcjsgfQorICAg
IFZpcnR1YWxSZWdpc3RlciBhY3RpdmF0aW9uUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2xl
eGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyOyB9CisgICAgYm9vbCBoYXNBY3RpdmF0aW9uUmVnaXN0
ZXIoKSBjb25zdCB7IHJldHVybiBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyLmlzVmFsaWQo
KTsgfQorCisgICAgdm9pZCBhZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKHVuc2lnbmVkIHBy
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBtX3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zLmFwcGVuZChwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKTsKKyAgICB9CisK
KyAgICBzaXplX3QgbnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpOyB9CisgICAgY29uc3Qg
VmVjdG9yPHVuc2lnbmVkPiYgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zOyB9CisKKyAgICB0eXBlZGVmIFZlY3Rv
cjxKU1ZhbHVlPiBDb25zdGFudEJ1ZmZlcjsKKworICAgIHNpemVfdCBjb25zdGFudEJ1ZmZlckNv
dW50KCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0YW50
QnVmZmVycy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudEJ1ZmZlcih1bnNpZ25l
ZCBsZW5ndGgpCisgICAgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Cisg
ICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaXpl
KCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLmFwcGVuZChWZWN0b3I8
SlNWYWx1ZT4obGVuZ3RoKSk7CisgICAgICAgIHJldHVybiBzaXplOworICAgIH0KKworICAgIGNv
bnN0IENvbnN0YW50QnVmZmVyJiBjb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBpbmRleCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsKKyAgICB9CisKKyAgICBDb25zdGFudEJ1
ZmZlciYgY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NF
UlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVm
ZmVyc1tpbmRleF07CisgICAgfQorCisgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmFyZURhdGEuZ2V0KCk7IH0KKworICAgIGludCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworCisgICAgdm9pZCBleHByZXNzaW9uUmFu
Z2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwK
KyAgICAgICAgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5l
LCB1bnNpZ25lZCYgY29sdW1uKTsKKworICAgIGJvb2wgdHlwZVByb2ZpbGVyRXhwcmVzc2lvbklu
Zm9Gb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgdW5zaWduZWQmIHN0
YXJ0RGl2b3QsIHVuc2lnbmVkJiBlbmREaXZvdCk7CisKKyAgICB2b2lkIHJlY29yZFBhcnNlKENv
ZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcywgdW5zaWduZWQg
Zmlyc3RMaW5lLCB1bnNpZ25lZCBsaW5lQ291bnQsIHVuc2lnbmVkIGVuZENvbHVtbikKKyAgICB7
CisgICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJlczsKKyAgICAgICAgbV9oYXNDYXB0dXJlZFZh
cmlhYmxlcyA9IGhhc0NhcHR1cmVkVmFyaWFibGVzOworICAgICAgICBtX2ZpcnN0TGluZSA9IGZp
cnN0TGluZTsKKyAgICAgICAgbV9saW5lQ291bnQgPSBsaW5lQ291bnQ7CisgICAgICAgIC8vIEZv
ciB0aGUgVW5saW5rZWRDb2RlQmxvY2ssIHN0YXJ0Q29sdW1uIGlzIGFsd2F5cyAwLgorICAgICAg
ICBtX2VuZENvbHVtbiA9IGVuZENvbHVtbjsKKyAgICB9CisKKyAgICBDb2RlRmVhdHVyZXMgY29k
ZUZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQorICAgIGJvb2wgaGFzQ2Fw
dHVyZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFyaWFibGVzOyB9
CisgICAgdW5zaWduZWQgZmlyc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmU7IH0K
KyAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQor
ICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiAw
OyB9CisgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47
IH0KKworICAgIHZvaWQgYWRkT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldChzaXpl
X3Qgb2Zmc2V0KSB7IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuYXBwZW5k
KG9mZnNldCk7IH0KKyAgICBjb25zdCBWZWN0b3I8c2l6ZV90PiYgb3BQcm9maWxlQ29udHJvbEZs
b3dCeXRlY29kZU9mZnNldHMoKSBjb25zdCB7IHJldHVybiBtX29wUHJvZmlsZUNvbnRyb2xGbG93
Qnl0ZWNvZGVPZmZzZXRzOyB9CisKKyAgICB2b2lkIGR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKCk7
IC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZSBvbmx5LgorCitwcm90ZWN0ZWQ6CisgICAgVW5saW5r
ZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUlu
Zm8mKTsKKyAgICB+VW5saW5rZWRDb2RlQmxvY2soKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAg
ICAgICBpZiAoY29kZVR5cGUoKSA9PSBHbG9iYWxDb2RlKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgU3ltYm9sVGFibGU6OmNyZWF0ZSh2
bSkpOworICAgIH0KKworcHJpdmF0ZToKKworICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJZk5lY2Vz
c2FyeSgpCisgICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICBtX3Jh
cmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICB9CisKKyAgICB2b2lk
IGdldExpbmVBbmRDb2x1bW4oRXhwcmVzc2lvblJhbmdlSW5mbyYsIHVuc2lnbmVkJiBsaW5lLCB1
bnNpZ25lZCYgY29sdW1uKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbmxpbmtlZEluc3RydWN0
aW9uU3RyZWFtPiBtX3VubGlua2VkSW5zdHJ1Y3Rpb25zOworCisgICAgaW50IG1fbnVtUGFyYW1l
dGVyczsKKyAgICBWTSogbV92bTsKKworICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3Rl
cjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdp
c3RlciBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBt
X2dsb2JhbE9iamVjdFJlZ2lzdGVyOworCisgICAgdW5zaWduZWQgbV9uZWVkc0Z1bGxTY29wZUNo
YWluIDogMTsKKyAgICB1bnNpZ25lZCBtX3VzZXNFdmFsIDogMTsKKyAgICB1bnNpZ25lZCBtX2lz
U3RyaWN0TW9kZSA6IDE7CisgICAgdW5zaWduZWQgbV9pc0NvbnN0cnVjdG9yIDogMTsKKyAgICB1
bnNpZ25lZCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzQnVp
bHRpbkZ1bmN0aW9uIDogMTsKKyAgICB1bnNpZ25lZCBtX2NvbnN0cnVjdG9yS2luZCA6IDI7CisK
KyAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZTsKKyAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKKyAg
ICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKKworICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwor
ICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fanVtcFRh
cmdldHM7CisKKyAgICAvLyBDb25zdGFudCBQb29scworICAgIFZlY3RvcjxJZGVudGlmaWVyPiBt
X2lkZW50aWZpZXJzOworICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3Rh
bnRSZWdpc3RlcnM7CisgICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247CisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwg
TGlua1RpbWVDb25zdGFudENvdW50PiBtX2xpbmtUaW1lQ29uc3RhbnRzOworICAgIHR5cGVkZWYg
VmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0aW9u
RXhwcmVzc2lvblZlY3RvcjsKKyAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlv
bkRlY2xzOworICAgIEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvciBtX2Z1bmN0aW9uRXhwcnM7CisK
KyAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CisKKyAgICBWZWN0
b3I8dW5zaWduZWQ+IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnM7CisKKyNpZiBFTkFCTEUo
QllURUNPREVfQ09NTUVOVFMpCisgICAgVmVjdG9yPENvbW1lbnQ+ICBtX2J5dGVjb2RlQ29tbWVu
dHM7CisgICAgc2l6ZV90IG1fYnl0ZWNvZGVDb21tZW50SXRlcmF0b3I7CisjZW5kaWYKKworICAg
IHVuc2lnbmVkIG1fYXJyYXlQcm9maWxlQ291bnQ7CisgICAgdW5zaWduZWQgbV9hcnJheUFsbG9j
YXRpb25Qcm9maWxlQ291bnQ7CisgICAgdW5zaWduZWQgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZUNvdW50OworICAgIHVuc2lnbmVkIG1fdmFsdWVQcm9maWxlQ291bnQ7CisgICAgdW5zaWduZWQg
bV9sbGludENhbGxMaW5rSW5mb0NvdW50OworCitwdWJsaWM6CisgICAgc3RydWN0IFJhcmVEYXRh
IHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAg
ICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKKworICAg
ICAgICAvLyBSYXJlIENvbnN0YW50cworICAgICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFJlZ0V4
cD4+IG1fcmVnZXhwczsKKworICAgICAgICAvLyBCdWZmZXJzIHVzZWQgZm9yIGxhcmdlIGFycmF5
IGxpdGVyYWxzCisgICAgICAgIFZlY3RvcjxDb25zdGFudEJ1ZmZlcj4gbV9jb25zdGFudEJ1ZmZl
cnM7CisKKyAgICAgICAgLy8gSnVtcCBUYWJsZXMKKyAgICAgICAgVmVjdG9yPFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIFZlY3RvcjxVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIFZl
Y3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbj4gbV9leHByZXNzaW9uSW5mb0Zh
dFBvc2l0aW9uczsKKyAgICB9OworCitwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJl
RGF0YT4gbV9yYXJlRGF0YTsKKyAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHBy
ZXNzaW9uSW5mbzsKKyAgICBzdHJ1Y3QgVHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlIHsKKyAg
ICAgICAgdW5zaWduZWQgbV9zdGFydERpdm90OworICAgICAgICB1bnNpZ25lZCBtX2VuZERpdm90
OworICAgIH07CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgVHlwZVByb2ZpbGVyRXhwcmVzc2lvblJh
bmdlPiBtX3R5cGVQcm9maWxlckluZm9NYXA7CisgICAgVmVjdG9yPHNpemVfdD4gbV9vcFByb2Zp
bGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHVibGljOgorICAg
IERFQ0xBUkVfSU5GTzsKK307CisKK2NsYXNzIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIDogcHVi
bGljIFVubGlua2VkQ29kZUJsb2NrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkQ29k
ZUJsb2NrIEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayhW
TSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhl
Y3V0YWJsZUluZm8mIGluZm8pCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlw
ZSwgaW5mbykKKyAgICB7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworfTsKKworY2xhc3Mg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29k
ZUJsb2NrIHsKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKKyAgICBzdGF0
aWMgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBFeGVjdXRh
YmxlSW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvKTsKKyAgICAgICAgaW5zdGFu
Y2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9
CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKKworICAgIHZvaWQgc2V0VmFyaWFibGVEZWNsYXJhdGlvbnMoY29uc3QgVmFyaWFi
bGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQpIHsgbV92YXJEZWNsYXJhdGlvbnMgPSBlbnZpcm9u
bWVudDsgfQorICAgIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhcmlhYmxlRGVjbGFyYXRp
b25zKCkgY29uc3QgeyByZXR1cm4gbV92YXJEZWNsYXJhdGlvbnM7IH0KKworICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHJpdmF0ZToKKyAg
ICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
LCBHbG9iYWxDb2RlLCBpbmZvKQorICAgIHsKKyAgICB9CisKKyAgICBWYXJpYWJsZUVudmlyb25t
ZW50IG1fdmFyRGVjbGFyYXRpb25zOworCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsK
K307CisKK2NsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtl
ZEdsb2JhbENvZGVCbG9jayB7Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7
CisKKyAgICBzdGF0aWMgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25z
dCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIFVubGlua2VkRXZhbENvZGVC
bG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2YWxD
b2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5r
ZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvKTsKKyAgICAgICAgaW5zdGFuY2Ut
PmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKKworICAgIGNvbnN0IElkZW50aWZpZXImIHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7
IHJldHVybiBtX3ZhcmlhYmxlc1tpbmRleF07IH0KKyAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMo
KSB7IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICB2b2lkIGFkb3B0VmFyaWFibGVz
KFZlY3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIHZhcmlhYmxlcykK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5pc0VtcHR5KCkpOworICAgICAgICBt
X3ZhcmlhYmxlcy5zd2FwKHZhcmlhYmxlcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFVubGlu
a2VkRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbykKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEV2YWxDb2Rl
LCBpbmZvKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IG1fdmFyaWFibGVzOworCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRFdmFsQ29kZUJsb2Nr
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIERFQ0xBUkVfSU5G
TzsKK307CisKK2NsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sgZmluYWwgOiBwdWJsaWMg
VW5saW5rZWRDb2RlQmxvY2sgeworcHVibGljOgorICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxv
Y2sgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBzdGF0aWMgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29kZVR5cGUgY29kZVR5cGUs
IGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgIHsKKyAgICAgICAgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sodm0sIHZtLT51bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjb2Rl
VHlwZSwgaW5mbyk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAg
ICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKKworcHJpdmF0ZToKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRh
YmxlSW5mbyYgaW5mbykKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBp
bmZvKQorICAgIHsKKyAgICB9CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1R5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87
Cit9OworCit9CisKKyNlbmRpZiAvLyBVbmxpbmtlZENvZGVCbG9ja19oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBVbmxpbmtlZENvZGVC
bG9ja19oCi0jZGVmaW5lIFVubGlua2VkQ29kZUJsb2NrX2gKKyNpZm5kZWYgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGVfaAorI2RlZmluZSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZV9oCiAK
ICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxp
emF0aW9uS2luZC5oIgpAQCAtMzgsNjEgKzM4LDE5IEBACiAjaW5jbHVkZSAiUGFyc2VyTW9kZXMu
aCIKICNpbmNsdWRlICJSZWdFeHAuaCIKICNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgotI2lu
Y2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVFbnZpcm9ubWVudC5oIgog
I2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgotCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRB
cnJheS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIERlYnVnZ2VyOwogY2xhc3MgRnVuY3Rpb25NZXRhZGF0YU5vZGU7CiBjbGFzcyBGdW5jdGlv
bkV4ZWN1dGFibGU7Ci1jbGFzcyBKU1Njb3BlOwogY2xhc3MgUGFyc2VyRXJyb3I7Ci1jbGFzcyBT
Y3JpcHRFeGVjdXRhYmxlOwogY2xhc3MgU291cmNlQ29kZTsKIGNsYXNzIFNvdXJjZVByb3ZpZGVy
OwotY2xhc3MgU3ltYm9sVGFibGU7Ci1jbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7Ci1jbGFzcyBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFt
OwotCi10eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkVmFsdWVQcm9maWxlOwotdHlwZWRlZiB1bnNp
Z25lZCBVbmxpbmtlZEFycmF5UHJvZmlsZTsKLXR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJh
eUFsbG9jYXRpb25Qcm9maWxlOwotdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOwotdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZv
OwotCi1zdHJ1Y3QgRXhlY3V0YWJsZUluZm8gewotICAgIEV4ZWN1dGFibGVJbmZvKGJvb2wgbmVl
ZHNBY3RpdmF0aW9uLCBib29sIHVzZXNFdmFsLCBib29sIGlzU3RyaWN0TW9kZSwgYm9vbCBpc0Nv
bnN0cnVjdG9yLCBib29sIGlzQnVpbHRpbkZ1bmN0aW9uLCBDb25zdHJ1Y3RvcktpbmQgY29uc3Ry
dWN0b3JLaW5kKQotICAgICAgICA6IG1fbmVlZHNBY3RpdmF0aW9uKG5lZWRzQWN0aXZhdGlvbikK
LSAgICAgICAgLCBtX3VzZXNFdmFsKHVzZXNFdmFsKQotICAgICAgICAsIG1faXNTdHJpY3RNb2Rl
KGlzU3RyaWN0TW9kZSkKLSAgICAgICAgLCBtX2lzQ29uc3RydWN0b3IoaXNDb25zdHJ1Y3RvcikK
LSAgICAgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGlzQnVpbHRpbkZ1bmN0aW9uKQotICAgICAg
ICAsIG1fY29uc3RydWN0b3JLaW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb25zdHJ1Y3Rvcktp
bmQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY29uc3RydWN0b3JLaW5kID09IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihjb25zdHJ1Y3RvcktpbmQpKTsKLSAgICB9Ci0KLSAgICBib29sIG5lZWRz
QWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNBY3RpdmF0aW9uOyB9Ci0gICAgYm9v
bCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0V2YWw7IH0KLSAgICBib29sIGlzU3Ry
aWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpY3RNb2RlOyB9Ci0gICAgYm9vbCBpc0Nv
bnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnN0cnVjdG9yOyB9Ci0gICAgYm9vbCBp
c0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNCdWlsdGluRnVuY3Rpb247IH0K
LSAgICBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q29uc3RydWN0b3JLaW5kPihtX2NvbnN0cnVjdG9yS2luZCk7IH0KLQotcHJpdmF0
ZToKLSAgICB1bnNpZ25lZCBtX25lZWRzQWN0aXZhdGlvbiA6IDE7Ci0gICAgdW5zaWduZWQgbV91
c2VzRXZhbCA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc1N0cmljdE1vZGUgOiAxOwotICAgIHVuc2ln
bmVkIG1faXNDb25zdHJ1Y3RvciA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0J1aWx0aW5GdW5jdGlv
biA6IDE7Ci0gICAgdW5zaWduZWQgbV9jb25zdHJ1Y3RvcktpbmQgOiAyOwotfTsKIAogZW51bSBV
bmxpbmtlZEZ1bmN0aW9uS2luZCB7CiAgICAgVW5saW5rZWROb3JtYWxGdW5jdGlvbiwKQEAgLTIx
Nyw1MjEgKzE3NSw2IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogfTsKIAot
c3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVm
UHRyPFN0cmluZ0ltcGw+LCBpbnQzMl90PiBTdHJpbmdPZmZzZXRUYWJsZTsKLSAgICBTdHJpbmdP
ZmZzZXRUYWJsZSBvZmZzZXRUYWJsZTsKLQotICAgIGlubGluZSBpbnQzMl90IG9mZnNldEZvclZh
bHVlKFN0cmluZ0ltcGwqIHZhbHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpCi0gICAgewotICAg
ICAgICBTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2Zmc2V0VGFibGUu
ZW5kKCk7Ci0gICAgICAgIFN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBsb2MgPSBv
ZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKLSAgICAgICAgaWYgKGxvYyA9PSBlbmQpCi0gICAgICAg
ICAgICByZXR1cm4gZGVmYXVsdE9mZnNldDsKLSAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWU7Ci0g
ICAgfQotCi19OwotCi1zdHJ1Y3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUgewotICAgIFZlY3Rv
cjxpbnQzMl90PiBicmFuY2hPZmZzZXRzOwotICAgIGludDMyX3QgbWluOwotCi0gICAgaW50MzJf
dCBvZmZzZXRGb3JWYWx1ZShpbnQzMl90IHZhbHVlLCBpbnQzMl90IGRlZmF1bHRPZmZzZXQpOwot
ICAgIHZvaWQgYWRkKGludDMyX3Qga2V5LCBpbnQzMl90IG9mZnNldCkKLSAgICB7Ci0gICAgICAg
IGlmICghYnJhbmNoT2Zmc2V0c1trZXldKQotICAgICAgICAgICAgYnJhbmNoT2Zmc2V0c1trZXld
ID0gb2Zmc2V0OwotICAgIH0KLX07Ci0KLXN0cnVjdCBVbmxpbmtlZEluc3RydWN0aW9uIHsKLSAg
ICBVbmxpbmtlZEluc3RydWN0aW9uKCkgeyB1Lm9wZXJhbmQgPSAwOyB9Ci0gICAgVW5saW5rZWRJ
bnN0cnVjdGlvbihPcGNvZGVJRCBvcGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7IH0KLSAgICBV
bmxpbmtlZEluc3RydWN0aW9uKGludCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9IG9wZXJhbmQ7IH0K
LSAgICB1bmlvbiB7Ci0gICAgICAgIE9wY29kZUlEIG9wY29kZTsKLSAgICAgICAgaW50MzJfdCBv
cGVyYW5kOwotICAgICAgICB1bnNpZ25lZCBpbmRleDsKLSAgICB9IHU7Ci19OwotCi1jbGFzcyBV
bmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewotcHVibGljOgotICAgIHR5cGVkZWYg
SlNDZWxsIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3M7Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKLQotICAgIGVudW0geyBDYWxsRnVuY3Rpb24sIEFwcGx5RnVuY3Rpb24g
fTsKLQotICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faXNDb25zdHJ1
Y3RvcjsgfQotICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0cmlj
dE1vZGU7IH0KLSAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRXZhbDsg
fQotCi0gICAgYm9vbCBuZWVkc0Z1bGxTY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9uZWVk
c0Z1bGxTY29wZUNoYWluOyB9Ci0KLSAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKHVuc2lnbmVk
IGluc3RydWN0aW9uT2Zmc2V0LCBpbnQgZGl2b3QsCi0gICAgICAgIGludCBzdGFydE9mZnNldCwg
aW50IGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKTsKLQotICAgIHZv
aWQgYWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZz
ZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KTsKLQotICAgIGJvb2wg
aGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQot
Ci0gICAgLy8gU3BlY2lhbCByZWdpc3RlcnMKLSAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVy
OyB9Ci0gICAgdm9pZCBzZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lz
dGVyKSB7IG1fc2NvcGVSZWdpc3RlciA9IHNjb3BlUmVnaXN0ZXI7IH0KLSAgICB2b2lkIHNldEFj
dGl2YXRpb25SZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgYWN0aXZhdGlvblJlZ2lzdGVyKSB7IG1f
bGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIgPSBhY3RpdmF0aW9uUmVnaXN0ZXI7IH0KLQotICAg
IGJvb2wgdXNlc0dsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVn
aXN0ZXIuaXNWYWxpZCgpOyB9Ci0gICAgdm9pZCBzZXRHbG9iYWxPYmplY3RSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIpIHsgbV9nbG9iYWxPYmplY3RSZWdpc3Rl
ciA9IGdsb2JhbE9iamVjdFJlZ2lzdGVyOyB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9i
amVjdFJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsgfQot
Ci0gICAgLy8gUGFyYW1ldGVyIGluZm9ybWF0aW9uCi0gICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJz
KGludCBuZXdWYWx1ZSkgeyBtX251bVBhcmFtZXRlcnMgPSBuZXdWYWx1ZTsgfQotICAgIHZvaWQg
YWRkUGFyYW1ldGVyKCkgeyBtX251bVBhcmFtZXRlcnMrKzsgfQotICAgIHVuc2lnbmVkIG51bVBh
cmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KLQotICAgIHVuc2ln
bmVkIGFkZFJlZ0V4cChSZWdFeHAqIHIpCi0gICAgewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KCk7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX3JlZ2V4
cHMuc2l6ZSgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKFdyaXRlQmFy
cmllcjxSZWdFeHA+KCptX3ZtLCB0aGlzLCByKSk7Ci0gICAgICAgIHJldHVybiBzaXplOwotICAg
IH0KLSAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ0V4cHMoKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKCFtX3JhcmVEYXRhKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBt
X3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOwotICAgIH0KLSAgICBSZWdFeHAqIHJlZ2V4cChp
bnQgaW5kZXgpIGNvbnN0IHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+
bV9yZWdleHBzW2luZGV4XS5nZXQoKTsgfQotCi0gICAgLy8gQ29uc3RhbnQgUG9vbHMKLQotICAg
IHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVy
cy5zaXplKCk7IH0KLSAgICB2b2lkIGFkZElkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYgaSkg
eyByZXR1cm4gbV9pZGVudGlmaWVycy5hcHBlbmQoaSk7IH0KLSAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyc1tpbmRl
eF07IH0KLSAgICBjb25zdCBWZWN0b3I8SWRlbnRpZmllcj4mIGlkZW50aWZpZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9pZGVudGlmaWVyczsgfQotCi0gICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNW
YWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9u
ID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcikKLSAgICB7Ci0gICAgICAgIHVuc2ln
bmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwotICAgICAgICBtX2NvbnN0
YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldCgqbV92bSwgdGhpcywgdik7Ci0gICAgICAgIG1f
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChzb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24pOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICB1bnNpZ25lZCBh
ZGRDb25zdGFudChMaW5rVGltZUNvbnN0YW50IHR5cGUpCi0gICAgewotICAgICAgICB1bnNpZ25l
ZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKHJl
c3VsdCk7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5
cGUpOwotICAgICAgICBBU1NFUlQoaW5kZXggPCBMaW5rVGltZUNvbnN0YW50Q291bnQpOwotICAg
ICAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW2luZGV4XSA9IHJlc3VsdDsKLSAgICAgICAgbV9jb25z
dGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwotICAgICAgICBt
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpPdGhlcik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHVu
c2lnbmVkIHJlZ2lzdGVySW5kZXhGb3JMaW5rVGltZUNvbnN0YW50KExpbmtUaW1lQ29uc3RhbnQg
dHlwZSkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHR5cGUpOwotICAgICAgICBBU1NFUlQoaW5kZXggPCBMaW5rVGltZUNvbnN0YW50Q291bnQp
OwotICAgICAgICByZXR1cm4gbV9saW5rVGltZUNvbnN0YW50c1tpbmRleF07Ci0gICAgfQotICAg
IGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygp
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KLSAgICBjb25zdCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0g
ICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KLSAg
ICBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb247IH0KLQotICAgIC8vIEp1bXBzCi0gICAgc2l6ZV90IG51bWJlck9mSnVtcFRhcmdl
dHMoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLnNpemUoKTsgfQotICAgIHZvaWQgYWRk
SnVtcFRhcmdldCh1bnNpZ25lZCBqdW1wVGFyZ2V0KSB7IG1fanVtcFRhcmdldHMuYXBwZW5kKGp1
bXBUYXJnZXQpOyB9Ci0gICAgdW5zaWduZWQganVtcFRhcmdldChpbnQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fanVtcFRhcmdldHNbaW5kZXhdOyB9Ci0gICAgdW5zaWduZWQgbGFzdEp1bXBUYXJn
ZXQoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLmxhc3QoKTsgfQotCi0gICAgYm9vbCBp
c0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNCdWlsdGluRnVuY3Rpb247IH0K
LQotICAgIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxDb25zdHJ1Y3RvcktpbmQ+KG1fY29uc3RydWN0b3JLaW5kKTsgfQotCi0gICAg
dm9pZCBzaHJpbmtUb0ZpdCgpCi0gICAgewotICAgICAgICBtX2p1bXBUYXJnZXRzLnNocmlua1Rv
Rml0KCk7Ci0gICAgICAgIG1faWRlbnRpZmllcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9j
b25zdGFudFJlZ2lzdGVycy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbi5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2Z1bmN0aW9uRGVj
bHMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9mdW5jdGlvbkV4cHJzLnNocmlua1RvRml0KCk7
Ci0gICAgICAgIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgbV9leHByZXNzaW9uSW5mby5zaHJpbmtUb0ZpdCgpOwotCi0jaWYgRU5BQkxFKEJZVEVD
T0RFX0NPTU1FTlRTKQotICAgICAgICBtX2J5dGVjb2RlQ29tbWVudHMuc2hyaW5rVG9GaXQoKTsK
LSNlbmRpZgotICAgICAgICBpZiAobV9yYXJlRGF0YSkgewotICAgICAgICAgICAgbV9yYXJlRGF0
YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICAgICAgbV9yYXJl
RGF0YS0+bV9yZWdleHBzLnNocmlua1RvRml0KCk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5t
X2NvbnN0YW50QnVmZmVycy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICAgICAgbV9yYXJlRGF0YS0+
bV9zd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRh
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIG1f
cmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0
cjxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtPik7Ci0gICAgY29uc3QgVW5saW5rZWRJbnN0cnVj
dGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7Ci0KLSAgICBpbnQgbV9udW1WYXJzOwot
ICAgIGludCBtX251bUNhcHR1cmVkVmFyczsKLSAgICBpbnQgbV9udW1DYWxsZWVSZWdpc3RlcnM7
Ci0KLSAgICAvLyBKdW1wIFRhYmxlcwotCi0gICAgc2l6ZV90IG51bWJlck9mU3dpdGNoSnVtcFRh
YmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQotICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBhZGRT
d2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0
YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSgpKTsg
cmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KLSAgICBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgc3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFT
U0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsgfQotCi0gICAgc2l6ZV90IG51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQotICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBh
ZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsg
bV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
cy5sYXN0KCk7IH0KLSAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVt
cFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQotCi0gICAgdW5z
aWduZWQgYWRkRnVuY3Rpb25EZWNsKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBuKQotICAg
IHsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7Ci0gICAg
ICAgIG1fZnVuY3Rpb25EZWNscy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlPigpKTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xzLmxhc3QoKS5zZXQoKm1fdm0s
IHRoaXMsIG4pOwotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0gICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rp
b25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xz
KCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQotICAgIHVuc2lnbmVkIGFkZEZ1
bmN0aW9uRXhwcihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikKLSAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOwotICAgICAgICBtX2Z1bmN0
aW9uRXhwcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4o
KSk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHBycy5sYXN0KCkuc2V0KCptX3ZtLCB0aGlzLCBuKTsK
LSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNbaW5k
ZXhdLmdldCgpOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25FeHBycygpIHsgcmV0dXJu
IG1fZnVuY3Rpb25FeHBycy5zaXplKCk7IH0KLQotICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBz
dXBwb3J0Ci0gICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJl
dHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkg
OiAwOyB9Ci0gICAgdm9pZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IFVubGlua2VkSGFuZGxl
ckluZm8mIGhhbmRsZXIpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9y
YXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoaGFuZGxlcik7IH0KLSAgICBVbmxp
bmtlZEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkgeyBBU1NFUlQobV9y
YXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsg
fQotCi0gICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQotCi0gICAgVW5saW5rZWRB
cnJheVByb2ZpbGUgYWRkQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3Vu
dCsrOyB9Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2ZpbGVzKCkgeyByZXR1cm4gbV9h
cnJheVByb2ZpbGVDb3VudDsgfQotICAgIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSBh
ZGRBcnJheUFsbG9jYXRpb25Qcm9maWxlKCkgeyByZXR1cm4gbV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlQ291bnQrKzsgfQotICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZXMoKSB7IHJldHVybiBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVDb3VudDsgfQotICAgIFVubGlu
a2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUgYWRkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSB7
IHJldHVybiBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlQ291bnQrKzsgfQotICAgIHVuc2lnbmVk
IG51bWJlck9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzKCkgeyByZXR1cm4gbV9vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZUNvdW50OyB9Ci0gICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgYWRkVmFsdWVQ
cm9maWxlKCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVDb3VudCsrOyB9Ci0gICAgdW5zaWduZWQg
bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVDb3VudDsgfQot
Ci0gICAgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbyBhZGRMTEludENhbGxMaW5rSW5mbygpIHsg
cmV0dXJuIG1fbGxpbnRDYWxsTGlua0luZm9Db3VudCsrOyB9Ci0gICAgdW5zaWduZWQgbnVtYmVy
T2ZMTGludENhbGxMaW5rSW5mb3MoKSB7IHJldHVybiBtX2xsaW50Q2FsbExpbmtJbmZvQ291bnQ7
IH0KLQotICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlVHlwZTsg
fQotCi0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1f
dGhpc1JlZ2lzdGVyOyB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25z
dCB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYWN0aXZh
dGlvblJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rl
cjsgfQotICAgIGJvb2wgaGFzQWN0aXZhdGlvblJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9s
ZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci5pc1ZhbGlkKCk7IH0KLQotICAgIHZvaWQgYWRkUHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbih1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
KQotICAgIHsKLSAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5hcHBlbmQocHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbik7Ci0gICAgfQotCi0gICAgc2l6ZV90IG51bWJlck9mUHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uczsgfQotCi0gICAgdHlwZWRlZiBWZWN0b3I8SlNWYWx1ZT4gQ29uc3RhbnRCdWZm
ZXI7Ci0KLSAgICBzaXplX3QgY29uc3RhbnRCdWZmZXJDb3VudCgpIHsgQVNTRVJUKG1fcmFyZURh
dGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOyB9Ci0gICAg
dW5zaWduZWQgYWRkQ29uc3RhbnRCdWZmZXIodW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAg
ICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICB1bnNpZ25lZCBzaXplID0g
bV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOwotICAgICAgICBtX3JhcmVEYXRh
LT5tX2NvbnN0YW50QnVmZmVycy5hcHBlbmQoVmVjdG9yPEpTVmFsdWU+KGxlbmd0aCkpOwotICAg
ICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBDb25zdGFudEJ1ZmZlciYgY29u
c3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQo
bV9yYXJlRGF0YSk7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVy
c1tpbmRleF07Ci0gICAgfQotCi0gICAgQ29uc3RhbnRCdWZmZXImIGNvbnN0YW50QnVmZmVyKHVu
c2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOwotICAgICAg
ICByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnNbaW5kZXhdOwotICAgIH0KLQot
ICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhLmdldCgpOyB9
Ci0KLSAgICBpbnQgbGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0KTsKLQotICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCi0gICAgICAgIGludCYgc3RhcnRPZmZz
ZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7Ci0K
LSAgICBib29sIHR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkJiBzdGFydERpdm90LCB1bnNpZ25lZCYgZW5k
RGl2b3QpOwotCi0gICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJv
b2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGlu
ZUNvdW50LCB1bnNpZ25lZCBlbmRDb2x1bW4pCi0gICAgewotICAgICAgICBtX2ZlYXR1cmVzID0g
ZmVhdHVyZXM7Ci0gICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZh
cmlhYmxlczsKLSAgICAgICAgbV9maXJzdExpbmUgPSBmaXJzdExpbmU7Ci0gICAgICAgIG1fbGlu
ZUNvdW50ID0gbGluZUNvdW50OwotICAgICAgICAvLyBGb3IgdGhlIFVubGlua2VkQ29kZUJsb2Nr
LCBzdGFydENvbHVtbiBpcyBhbHdheXMgMC4KLSAgICAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1
bW47Ci0gICAgfQotCi0gICAgQ29kZUZlYXR1cmVzIGNvZGVGZWF0dXJlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZmVhdHVyZXM7IH0KLSAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsgfQotICAgIHVuc2lnbmVkIGZpcnN0TGlu
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lOyB9Ci0gICAgdW5zaWduZWQgbGluZUNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KLSAgICBBTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHVuc2lnbmVkIGVuZENv
bHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9Ci0KLSAgICB2b2lkIGFkZE9wUHJv
ZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXQoc2l6ZV90IG9mZnNldCkgeyBtX29wUHJvZmls
ZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmFwcGVuZChvZmZzZXQpOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPHNpemVfdD4mIG9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkgY29u
c3QgeyByZXR1cm4gbV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsgfQotCi0g
ICAgdm9pZCBkdW1wRXhwcmVzc2lvblJhbmdlSW5mbygpOyAvLyBGb3IgZGVidWdnaW5nIHB1cnBv
c2Ugb25seS4KLQotcHJvdGVjdGVkOgotICAgIFVubGlua2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0
dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJik7Ci0gICAgflVubGlua2VkQ29k
ZUJsb2NrKCk7Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLSAgICB7Ci0gICAg
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0g
R2xvYmFsQ29kZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zeW1ib2xUYWJsZS5z
ZXQodm0sIHRoaXMsIFN5bWJvbFRhYmxlOjpjcmVhdGUodm0pKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0KLSAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKQotICAgIHsKLSAgICAgICAg
aWYgKCFtX3JhcmVEYXRhKQotICAgICAgICAgICAgbV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlx
dWU8UmFyZURhdGE+KCk7Ci0gICAgfQotCi0gICAgdm9pZCBnZXRMaW5lQW5kQ29sdW1uKEV4cHJl
c3Npb25SYW5nZUluZm8mLCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbT4gbV91bmxpbmtlZElu
c3RydWN0aW9uczsKLQotICAgIGludCBtX251bVBhcmFtZXRlcnM7Ci0gICAgVk0qIG1fdm07Ci0K
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IG1fc2NvcGVSZWdpc3RlcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sZXhpY2FsRW52aXJvbm1l
bnRSZWdpc3RlcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsK
LQotICAgIHVuc2lnbmVkIG1fbmVlZHNGdWxsU2NvcGVDaGFpbiA6IDE7Ci0gICAgdW5zaWduZWQg
bV91c2VzRXZhbCA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc1N0cmljdE1vZGUgOiAxOwotICAgIHVu
c2lnbmVkIG1faXNDb25zdHJ1Y3RvciA6IDE7Ci0gICAgdW5zaWduZWQgbV9oYXNDYXB0dXJlZFZh
cmlhYmxlcyA6IDE7Ci0gICAgdW5zaWduZWQgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7Ci0gICAg
dW5zaWduZWQgbV9jb25zdHJ1Y3RvcktpbmQgOiAyOwotCi0gICAgdW5zaWduZWQgbV9maXJzdExp
bmU7Ci0gICAgdW5zaWduZWQgbV9saW5lQ291bnQ7Ci0gICAgdW5zaWduZWQgbV9lbmRDb2x1bW47
Ci0KLSAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKLSAgICBDb2RlVHlwZSBtX2NvZGVUeXBl
OwotCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBtX2p1bXBUYXJnZXRzOwotCi0gICAgLy8gQ29uc3Rh
bnQgUG9vbHMKLSAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKLSAgICBWZWN0
b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwotICAgIFZlY3Rv
cjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOwotICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIExpbmtUaW1lQ29uc3RhbnRDb3VudD4g
bV9saW5rVGltZUNvbnN0YW50czsKLSAgICB0eXBlZGVmIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I7Ci0gICAg
RnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25EZWNsczsKLSAgICBGdW5jdGlvbkV4
cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkV4cHJzOwotCi0gICAgV3JpdGVCYXJyaWVyPFN5bWJv
bFRhYmxlPiBtX3N5bWJvbFRhYmxlOwotCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBtX3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zOwotCi0jaWYgRU5BQkxFKEJZVEVDT0RFX0NPTU1FTlRTKQotICAg
IFZlY3RvcjxDb21tZW50PiAgbV9ieXRlY29kZUNvbW1lbnRzOwotICAgIHNpemVfdCBtX2J5dGVj
b2RlQ29tbWVudEl0ZXJhdG9yOwotI2VuZGlmCi0KLSAgICB1bnNpZ25lZCBtX2FycmF5UHJvZmls
ZUNvdW50OwotICAgIHVuc2lnbmVkIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUNvdW50OwotICAg
IHVuc2lnbmVkIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVDb3VudDsKLSAgICB1bnNpZ25lZCBt
X3ZhbHVlUHJvZmlsZUNvdW50OwotICAgIHVuc2lnbmVkIG1fbGxpbnRDYWxsTGlua0luZm9Db3Vu
dDsKLQotcHVibGljOgotICAgIHN0cnVjdCBSYXJlRGF0YSB7Ci0gICAgICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgVmVjdG9yPFVubGlua2VkSGFuZGxl
ckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7Ci0KLSAgICAgICAgLy8gUmFyZSBDb25zdGFudHMK
LSAgICAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxSZWdFeHA+PiBtX3JlZ2V4cHM7Ci0KLSAgICAg
ICAgLy8gQnVmZmVycyB1c2VkIGZvciBsYXJnZSBhcnJheSBsaXRlcmFscwotICAgICAgICBWZWN0
b3I8Q29uc3RhbnRCdWZmZXI+IG1fY29uc3RhbnRCdWZmZXJzOwotCi0gICAgICAgIC8vIEp1bXAg
VGFibGVzCi0gICAgICAgIFZlY3RvcjxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hK
dW1wVGFibGVzOwotICAgICAgICBWZWN0b3I8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+IG1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlczsKLQotICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5m
bzo6RmF0UG9zaXRpb24+IG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7Ci0gICAgfTsKLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7Ci0gICAg
VmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87Ci0gICAgc3RydWN0
IFR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSB7Ci0gICAgICAgIHVuc2lnbmVkIG1fc3RhcnRE
aXZvdDsKLSAgICAgICAgdW5zaWduZWQgbV9lbmREaXZvdDsKLSAgICB9OwotICAgIEhhc2hNYXA8
dW5zaWduZWQsIFR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZT4gbV90eXBlUHJvZmlsZXJJbmZv
TWFwOwotICAgIFZlY3RvcjxzaXplX3Q+IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9m
ZnNldHM7Ci0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7Ci0KLXB1YmxpYzoKLSAgICBERUNMQVJFX0lORk87Ci19OwotCi1j
bGFzcyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQotICAg
ICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8pCi0gICAgewotICAgIH0K
LQotICAgIERFQ0xBUkVfSU5GTzsKLX07Ci0KLWNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayBmaW5hbCA6IHB1YmxpYyBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayB7Ci1wcml2YXRlOgotICAg
IGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7Ci0gICAgc3RhdGljIFVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCi0gICAgewot
ICAgICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVj
dHVyZS5nZXQoKSwgaW5mbyk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0p
OwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi1wdWJsaWM6Ci0gICAgdHlwZWRl
ZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICB2b2lkIHNl
dFZhcmlhYmxlRGVjbGFyYXRpb25zKGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25t
ZW50KSB7IG1fdmFyRGVjbGFyYXRpb25zID0gZW52aXJvbm1lbnQ7IH0KLSAgICBjb25zdCBWYXJp
YWJsZUVudmlyb25tZW50JiB2YXJpYWJsZURlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFyRGVjbGFyYXRpb25zOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7Ci0KLXByaXZhdGU6Ci0gICAgVW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBp
bmZvKQotICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgR2xvYmFsQ29kZSwgaW5mbykKLSAg
ICB7Ci0gICAgfQotCi0gICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0aW9uczsK
LQotcHVibGljOgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCi0gICAgewotICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5
cGVJbmZvKFVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci19OwotCi1jbGFzcyBVbmxpbmtlZEV2
YWxDb2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewotcHJp
dmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOwotCi0gICAgc3RhdGljIFVubGlua2Vk
RXZhbENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8p
Ci0gICAgewotICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVu
bGlua2VkRXZhbENvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVy
ZS5nZXQoKSwgaW5mbyk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwot
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBV
bmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRh
bDsKLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICBjb25zdCBJZGVu
dGlmaWVyJiB2YXJpYWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YXJpYWJsZXNbaW5k
ZXhdOyB9Ci0gICAgdW5zaWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gbV92YXJpYWJsZXMu
c2l6ZSgpOyB9Ci0gICAgdm9pZCBhZG9wdFZhcmlhYmxlcyhWZWN0b3I8SWRlbnRpZmllciwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiB2YXJpYWJsZXMpCi0gICAgewotICAgICAgICBBU1NFUlQo
bV92YXJpYWJsZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgbV92YXJpYWJsZXMuc3dhcCh2YXJpYWJs
ZXMpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCi0gICAg
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBFdmFsQ29kZSwgaW5mbykKLSAgICB7Ci0gICAgfQot
Ci0gICAgVmVjdG9yPElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3Zhcmlh
YmxlczsKLQotcHVibGljOgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCi0gICAg
ewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG8sIFR5cGVJbmZvKFVubGlua2VkRXZhbENvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci19OwotCi1jbGFzcyBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrIGZpbmFsIDogcHVibGljIFVubGlua2VkQ29kZUJsb2NrIHsKLXB1
YmxpYzoKLSAgICB0eXBlZGVmIFVubGlua2VkQ29kZUJsb2NrIEJhc2U7Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1
Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sq
IGNyZWF0ZShWTSogdm0sIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYg
aW5mbykKLSAgICB7Ci0gICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4o
dm0tPmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY29kZVR5cGUsIGluZm8pOwotICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLXByaXZhdGU6Ci0g
ICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCi0gICAgICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbykKLSAgICB7Ci0gICAgfQotICAg
IAotcHVibGljOgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCi0gICAgewotICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5
cGVJbmZvKFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotfTsKLQotfQorfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKLSNlbmRpZiAvLyBVbmxpbmtlZENvZGVCbG9ja19oCisjZW5kaWYgLy8gVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTg4MjM5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIkNvbXBpbGF0
aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVJ
bmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVl
LmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtNDEsNiArNDIsNyBAQAogI2luY2x1ZGUgIlNv
dXJjZUNvZGUuaCIKICNpbmNsdWRlICJUeXBlU2V0LmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIAo=
</data>
<flag name="review"
          id="283861"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>