<?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>127435</bug_id>
          
          <creation_ts>2014-01-22 11:11:51 -0800</creation_ts>
          <short_desc>Basic framework for a modern jsc CLI</short_desc>
          <delta_ts>2014-02-12 14:49:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          <dependson>127488</dependson>
          <blocked>127432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>970782</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-22 11:11:51 -0800</bug_when>
    <thetext>The most basic components of a modern jsc command line interface consist of the following:

- A simple REPL to enter commands and receive results
- The ability to define a module (which consists of various internal methods as well as a set of externally visible methods)
- The ability to load other modules at runtime
- The ability to interact with the underlying platform to perform various &quot;privileged&quot; functions (e.g. opening files, printing to the stdout, etc.)

The basic architecture will look something like the following:
- If the tool is run in REPL mode (i.e. no command line arguments), it will start the REPL on the main thread and start a secondary thread with a run loop to handle various inputs from the REPL thread.
- If the tool is given a script to run, it will evaluate that script (and any scripts that it might transitively load) within the run loop on the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970841</commentid>
    <comment_count>1</comment_count>
      <attachid>221896</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-22 13:03:36 -0800</bug_when>
    <thetext>Created attachment 221896
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970846</commentid>
    <comment_count>2</comment_count>
      <attachid>221896</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-01-22 13:16:34 -0800</bug_when>
    <thetext>Comment on attachment 221896
Patch

the existing jsc prompt supports multiline input which this does not appear to :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970851</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-22 13:35:07 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 221896 [details])
&gt; the existing jsc prompt supports multiline input which this does not appear to :(

I&apos;ll file a bug for it. This will probably never replace the old jsc since other platforms can&apos;t compile Objective-C.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970855</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-22 13:48:53 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 221896 [details] [details])
&gt; &gt; the existing jsc prompt supports multiline input which this does not appear to :(
&gt; 
&gt; I&apos;ll file a bug for it. This will probably never replace the old jsc since other platforms can&apos;t compile Objective-C.

I sort of skipped a sentence there. I meant to also say that this will probably not replace jsc on our own platforms for some time until the new jsc-cli reaches feature parity with the old jsc. In addition, the old jsc will probably stick around indefinitely anyways due to the absence of Objective-C on other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971035</commentid>
    <comment_count>5</comment_count>
      <attachid>221896</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-22 22:36:37 -0800</bug_when>
    <thetext>Comment on attachment 221896
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971151</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-23 08:39:50 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 221896 [details])
&gt; the existing jsc prompt supports multiline input which this does not appear to :(

I filed bug 127484 to track this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971158</commentid>
    <comment_count>7</comment_count>
      <attachid>221896</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-23 09:04:33 -0800</bug_when>
    <thetext>Comment on attachment 221896
Patch

Clearing flags on attachment: 221896

Committed r162612: &lt;http://trac.webkit.org/changeset/162612&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971159</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-23 09:04:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971161</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-23 09:12:22 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 127488</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971177</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-23 09:21:48 -0800</bug_when>
    <thetext>Had to roll it back out because I forgot that EWS doesn&apos;t test changes to the Tools directory, and thus this patch broke several platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980024</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-02-12 14:49:26 -0800</bug_when>
    <thetext>Committed r163991: &lt;http://trac.webkit.org/changeset/163991&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221896</attachid>
            <date>2014-01-22 13:03:36 -0800</date>
            <delta_ts>2014-01-23 09:04:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127435-20140122130336.patch</filename>
            <type>text/plain</type>
            <size>61836</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE2MjU1MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEwNCBAQAorMjAxNC0wMS0yMiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEJhc2ljIGZyYW1ld29yayBmb3IgYSBtb2Rlcm4ganNjIENMSQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NDM1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG1vc3Qg
YmFzaWMgY29tcG9uZW50cyBvZiBhIG1vZGVybiBqc2MgY29tbWFuZCBsaW5lIGludGVyZmFjZSBj
b25zaXN0IG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgLSBBIHNpbXBsZSBSRVBMIHRvIGVu
dGVyIGNvbW1hbmRzIGFuZCByZWNlaXZlIHJlc3VsdHMKKyAgICAgICAgLSBUaGUgYWJpbGl0eSB0
byBkZWZpbmUgYSBtb2R1bGUgKHdoaWNoIGNvbnNpc3RzIG9mIHZhcmlvdXMgaW50ZXJuYWwgbWV0
aG9kcyBhcyB3ZWxsIGFzIGEgCisgICAgICAgICAgc2V0IG9mIGV4dGVybmFsbHkgdmlzaWJsZSBt
ZXRob2RzKQorICAgICAgICAtIFRoZSBhYmlsaXR5IHRvIGxvYWQgb3RoZXIgbW9kdWxlcyBhdCBy
dW50aW1lCisgICAgICAgIC0gVGhlIGFiaWxpdHkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJs
eWluZyBwbGF0Zm9ybSB0byBwZXJmb3JtIHZhcmlvdXMgInByaXZpbGVnZWQiIAorICAgICAgICAg
IGZ1bmN0aW9ucyAoZS5nLiBvcGVuaW5nIGZpbGVzLCBwcmludGluZyB0byB0aGUgc3Rkb3V0LCBl
dGMuKQorICAgICAgICAKKyAgICAgICAgVGhlIGJhc2ljIGFyY2hpdGVjdHVyZSB3aWxsIGxvb2sg
c29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgLSBJZiB0aGUgdG9vbCBpcyBy
dW4gaW4gUkVQTCBtb2RlIChpLmUuIG5vIGNvbW1hbmQgbGluZSBhcmd1bWVudHMpLCBpdCB3aWxs
IHN0YXJ0IHRoZSBSRVBMIAorICAgICAgICAgIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgc3RhcnQg
YSBzZWNvbmRhcnkgdGhyZWFkIHdpdGggYSBydW4gbG9vcCB0byBoYW5kbGUgdmFyaW91cyBpbnB1
dHMgCisgICAgICAgICAgZnJvbSB0aGUgUkVQTCB0aHJlYWQuCisgICAgICAgIC0gSWYgdGhlIHRv
b2wgaXMgZ2l2ZW4gYSBzY3JpcHQgdG8gcnVuLCBpdCB3aWxsIGV2YWx1YXRlIHRoYXQgc2NyaXB0
IChhbmQgYW55IHNjcmlwdHMgdGhhdCAKKyAgICAgICAgICBpdCBtaWdodCB0cmFuc2l0aXZlbHkg
bG9hZCkgd2l0aGluIHRoZSBydW4gbG9vcCBvbiB0aGUgc2Vjb25kYXJ5IHRocmVhZCB3aGlsZSB0
aGUgbWFpbiAKKyAgICAgICAgICB0aHJlYWQgYmxvY2tzIHVudGlsIGl0IGhhcyBjb21wbGV0ZWQu
CisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLWpzYzoKKyAgICAgICAgKiBqc2MtY2xpOiBBZGRl
ZC4KKyAgICAgICAgKiBqc2MtY2xpL2pzYy1jbGk6IEFkZGVkLgorICAgICAgICAqIGpzYy1jbGkv
anNjLWNsaS54Y29kZXByb2o6IEFkZGVkLgorICAgICAgICAqIGpzYy1jbGkvanNjLWNsaS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZC4KKyAgICAgICAgKiBqc2MtY2xpL2pzYy1jbGkv
Q0xJSW5zdGFuY2UuaDogQWRkZWQuCisgICAgICAgICoganNjLWNsaS9qc2MtY2xpL0NMSUluc3Rh
bmNlLm06IEFkZGVkLgorICAgICAgICAoLVtDTElJbnN0YW5jZSBpbml0XSk6CisgICAgICAgICgt
W0NMSUluc3RhbmNlIGxvYWRGaWxlOl0pOgorICAgICAgICAoLVtDTElJbnN0YW5jZSBydW5dKToK
KyAgICAgICAgKiBqc2MtY2xpL2pzYy1jbGkvSlNNb2R1bGUuaDogQWRkZWQuCisgICAgICAgICog
anNjLWNsaS9qc2MtY2xpL0pTTW9kdWxlLm06IEFkZGVkLgorICAgICAgICAoY29yZU1vZHVsZXMp
OgorICAgICAgICAoaXNDb3JlTW9kdWxlKToKKyAgICAgICAgKGNsYXNzRm9yTW9kdWxlKToKKyAg
ICAgICAgKGNvcmVNb2R1bGVGdWxsUGF0aCk6CisgICAgICAgIChyZXNvbHZlTW9kdWxlQXNGaWxl
KToKKyAgICAgICAgKHJlc29sdmVNb2R1bGVBc0RpcmVjdG9yeSk6CisgICAgICAgIChub2RlTW9k
dWxlUGF0aHMpOgorICAgICAgICAocmVzb2x2ZUFzTm9kZU1vZHVsZSk6CisgICAgICAgICgrW0pT
TW9kdWxlIHJlc29sdmU6YXRQYXRoOl0pOgorICAgICAgICAoZ2xvYmFsTW9kdWxlQ2FjaGUpOgor
ICAgICAgICAoaXNDYWNoZWQpOgorICAgICAgICAoY2FjaGVkTW9kdWxlKToKKyAgICAgICAgKGNh
Y2hlTW9kdWxlKToKKyAgICAgICAgKCtbSlNNb2R1bGUgcmVxdWlyZTphdFBhdGg6XSk6CisgICAg
ICAgICgrW0pTTW9kdWxlIHJlcXVpcmU6YXRQYXRoOmluQ29udGV4dDpdKToKKyAgICAgICAgKC1b
SlNNb2R1bGUgcGxhdGZvcm1PYmplY3RJbkNvbnRleHQ6XSk6CisgICAgICAgICgtW0pTTW9kdWxl
IGluaXRXaXRoSWQ6ZmlsZW5hbWU6Y29udGV4dDpdKToKKyAgICAgICAgKC1bSlNNb2R1bGUgZGVh
bGxvY10pOgorICAgICAgICAoLVtKU01vZHVsZSBkaWRTdGFydExvYWRpbmddKToKKyAgICAgICAg
KC1bSlNNb2R1bGUgZGlkRmluaXNoTG9hZGluZ10pOgorICAgICAgICAoLVtKU01vZHVsZSByZXF1
aXJlOl0pOgorICAgICAgICAoLVtKU01vZHVsZSBleHBvcnRzXSk6CisgICAgICAgICoganNjLWNs
aS9qc2MtY2xpL0pTUnVuTG9vcFRocmVhZC5oOiBBZGRlZC4KKyAgICAgICAgKiBqc2MtY2xpL2pz
Yy1jbGkvSlNSdW5Mb29wVGhyZWFkLm06IEFkZGVkLgorICAgICAgICAoanNUaHJlYWRNYWluKToK
KyAgICAgICAgKCtbSlNSdW5Mb29wVGhyZWFkIHRocmVhZE1haW5dKToKKyAgICAgICAgKC1bSlNS
dW5Mb29wVGhyZWFkIGluaXRXaXRoRmlsZXM6YW5kQ29udGV4dDpdKToKKyAgICAgICAgKC1bSlNS
dW5Mb29wVGhyZWFkIHN0YXJ0UnVuTG9vcF0pOgorICAgICAgICAoLVtKU1J1bkxvb3BUaHJlYWQg
c3RhcnRdKToKKyAgICAgICAgKC1bSlNSdW5Mb29wVGhyZWFkIGpvaW5dKToKKyAgICAgICAgKC1b
SlNSdW5Mb29wVGhyZWFkIGRpZFJlY2VpdmVJbnB1dDpdKToKKyAgICAgICAgKC1bSlNSdW5Mb29w
VGhyZWFkIHBlcmZvcm1DYWxsYmFjazp3aXRoRXJyb3I6XSk6CisgICAgICAgICgtW0pTUnVuTG9v
cFRocmVhZCBwZXJmb3JtQ2FsbGJhY2s6d2l0aEFyZ3VtZW50czpdKToKKyAgICAgICAgKC1bSlNS
dW5Mb29wVGhyZWFkIGRpZEZpbmlzaFJ1bkxvb3BJbml0aWFsaXphdGlvbl0pOgorICAgICAgICAq
IGpzYy1jbGkvanNjLWNsaS9SZWFkRXZhbFByaW50TG9vcC5oOiBBZGRlZC4KKyAgICAgICAgKiBq
c2MtY2xpL2pzYy1jbGkvUmVhZEV2YWxQcmludExvb3AubTogQWRkZWQuCisgICAgICAgICgtW1Jl
YWRFdmFsUHJpbnRMb29wIGluaXRXaXRoSlNUaHJlYWQ6XSk6CisgICAgICAgIChwcm9tcHQpOgor
ICAgICAgICAoZXNjYXBlU3RyaW5nRm9yT3V0cHV0KToKKyAgICAgICAgKC1bUmVhZEV2YWxQcmlu
dExvb3AgcHJvY2Vzc05leHRJbnB1dF0pOgorICAgICAgICAoLVtSZWFkRXZhbFByaW50TG9vcCBy
dW5dKToKKyAgICAgICAgKiBqc2MtY2xpL2pzYy1jbGkvUnVuTG9vcFRocmVhZC5oOiBBZGRlZC4K
KyAgICAgICAgKiBqc2MtY2xpL2pzYy1jbGkvUnVuTG9vcFRocmVhZC5tOiBBZGRlZC4KKyAgICAg
ICAgKCtbUnVuTG9vcFRocmVhZCB0aHJlYWRNYWluXSk6CisgICAgICAgICgtW1J1bkxvb3BUaHJl
YWQgaW5pdF0pOgorICAgICAgICAoLVtSdW5Mb29wVGhyZWFkIGRlYWxsb2NdKToKKyAgICAgICAg
KC1bUnVuTG9vcFRocmVhZCBkaWRGaW5pc2hSdW5Mb29wSW5pdGlhbGl6YXRpb25dKToKKyAgICAg
ICAgKC1bUnVuTG9vcFRocmVhZCBzdGFydF0pOgorICAgICAgICAoLVtSdW5Mb29wVGhyZWFkIGpv
aW5dKToKKyAgICAgICAgKiBqc2MtY2xpL2pzYy1jbGkvU2NyaXB0SW5wdXRTb3VyY2UuaDogQWRk
ZWQuCisgICAgICAgICoganNjLWNsaS9qc2MtY2xpL1NjcmlwdElucHV0U291cmNlLm06IEFkZGVk
LgorICAgICAgICAoc2NyaXB0SW5wdXRTb3VyY2VTY2hlZHVsZVJvdXRpbmUpOgorICAgICAgICAo
c2NyaXB0SW5wdXRTb3VyY2VQZXJmb3JtUm91dGluZSk6CisgICAgICAgIChzY3JpcHRJbnB1dFNv
dXJjZUNhbmNlbFJvdXRpbmUpOgorICAgICAgICAoLVtTY3JpcHRJbnB1dFNvdXJjZSBpbml0V2l0
aENvbnRleHQ6XSk6CisgICAgICAgICgtW1NjcmlwdElucHV0U291cmNlIGRlYWxsb2NdKToKKyAg
ICAgICAgKC1bU2NyaXB0SW5wdXRTb3VyY2UgYWRkVG9DdXJyZW50UnVuTG9vcF0pOgorICAgICAg
ICAoLVtTY3JpcHRJbnB1dFNvdXJjZSByZW1vdmVGcm9tUmVtb3RlUnVuTG9vcF0pOgorICAgICAg
ICAoLVtTY3JpcHRJbnB1dFNvdXJjZSBkaWRSZWNlaXZlU2NyaXB0Ol0pOgorICAgICAgICAoLVtT
Y3JpcHRJbnB1dFNvdXJjZSBkaWRSZWNlaXZlU2lnbmFsXSk6CisgICAgICAgICgtW1NjcmlwdElu
cHV0U291cmNlIHJ1blNjcmlwdFJlbW90ZWx5Ol0pOgorICAgICAgICAoLVtTY3JpcHRJbnB1dFNv
dXJjZSBmaW5pc2hBc3luY0NhbGxiYWNrOndpdGhSZXN1bHQ6XSk6CisgICAgICAgICoganNjLWNs
aS9qc2MtY2xpL21haW4ubTogQWRkZWQuCisgICAgICAgIChtYWluKToKKwogMjAxNC0wMS0xNSAg
TWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11b
Q01ha2VdIGJ1aWxkLXdlYmtpdCBzaG91bGQgdHJ5IGhhcmRlciB0byBhdm9pZCByZS1ydW5uaW5n
IGNtYWtlCkluZGV4OiBUb29scy9TY3JpcHRzL2J1aWxkLWpzYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2J1aWxkLWpzYwkocmV2aXNpb24gMTYyNTIwKQorKysgVG9vbHMvU2NyaXB0cy9i
dWlsZC1qc2MJKHdvcmtpbmcgY29weSkKQEAgLTExOCwzICsxMTgsNCBAQCBzdWIgYnVpbGRNeVBy
b2plY3QKIAogYnVpbGRNeVByb2plY3QoIlNvdXJjZS9XVEYiLCAiV1RGIik7CiBidWlsZE15UHJv
amVjdCgiU291cmNlL0phdmFTY3JpcHRDb3JlIiwgIkphdmFTY3JpcHRDb3JlIik7CitidWlsZE15
UHJvamVjdCgiVG9vbHMvanNjLWNsaSIsICJqc2MtY2xpIik7CkluZGV4OiBUb29scy9qc2MtY2xp
L2pzYy1jbGkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9q
c2MtY2xpL2pzYy1jbGkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMCkKKysr
IFRvb2xzL2pzYy1jbGkvanNjLWNsaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzA4IEBACisvLyAhJCpVVEY4KiQhCit7CisJYXJjaGl2ZVZlcnNp
b24gPSAxOworCWNsYXNzZXMgPSB7CisJfTsKKwlvYmplY3RWZXJzaW9uID0gNDY7CisJb2JqZWN0
cyA9IHsKKworLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJQzI0NjU5MDUxODkw
MkFDRTAwMjkwOTJFIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzI0NjU5MDQxODkwMkFDRTAwMjkwOTJFIC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OworCQlDMjQ2NTkwODE4OTAyQUNFMDAyOTA5MkUg
LyogbWFpbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzI0NjU5MDcxODkwMkFDRTAwMjkwOTJFIC8qIG1haW4ubSAqLzsgfTsKKwkJQzI0NjU5MTQxODkw
MkI5MTAwMjkwOTJFIC8qIENMSUluc3RhbmNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMjQ2NTkxMzE4OTAyQjkxMDAyOTA5MkUgLyogQ0xJSW5zdGFu
Y2UubSAqLzsgfTsKKwkJQzI0NjU5MTcxODkwMkM0MjAwMjkwOTJFIC8qIEpTTW9kdWxlLm0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjQ2NTkxNjE4OTAy
QzQyMDAyOTA5MkUgLyogSlNNb2R1bGUubSAqLzsgfTsKKwkJQzI0NjU5MUExODkwMkNDQzAwMjkw
OTJFIC8qIEpTUnVuTG9vcFRocmVhZC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzI0NjU5MTkxODkwMkNDQzAwMjkwOTJFIC8qIEpTUnVuTG9vcFRocmVh
ZC5tICovOyB9OworCQlDMjQ2NTkxRDE4OTAyRDEwMDAyOTA5MkUgLyogUnVuTG9vcFRocmVhZC5t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzI0NjU5MUMx
ODkwMkQxMDAwMjkwOTJFIC8qIFJ1bkxvb3BUaHJlYWQubSAqLzsgfTsKKwkJQzI0NjU5MjAxODkw
MkUxNTAwMjkwOTJFIC8qIFJlYWRFdmFsUHJpbnRMb29wLm0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjQ2NTkxRjE4OTAyRTE1MDAyOTA5MkUgLyogUmVh
ZEV2YWxQcmludExvb3AubSAqLzsgfTsKKwkJQzI0NjU5MjMxODkwMkVBNDAwMjkwOTJFIC8qIFNj
cmlwdElucHV0U291cmNlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMjQ2NTkyMjE4OTAyRUE0MDAyOTA5MkUgLyogU2NyaXB0SW5wdXRTb3VyY2UubSAq
LzsgfTsKKwkJQzI0NjU5MkMxODkwNUZDMTAwMjkwOTJFIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMy
NDY1OTJCMTg5MDVGQzEwMDI5MDkyRSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07
CisvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYQ29weUZpbGVz
QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUMyNDY1OEZGMTg5MDJBQ0UwMDI5MDkyRSAvKiBDb3B5
IEZpbGVzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKKwkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlkc3RQYXRoID0gL3Vzci9zaGFyZS9tYW4vbWFu
MS87CisJCQlkc3RTdWJmb2xkZXJTcGVjID0gMDsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCW5h
bWUgPSAiQ29weSBGaWxlcyI7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMTsKKwkJfTsKKy8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwor
LyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisJCUMyNDY1OTAxMTg5MDJBQ0Uw
MDI5MDkyRSAvKiBqc2MtY2xpICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSAianNjLWNsaSI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CisJCUMyNDY1OTA0MTg5MDJBQ0UwMDI5MDkyRSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gRm91bmRhdGlvbi5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFy
eS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsg
fTsKKwkJQzI0NjU5MDcxODkwMkFDRTAwMjkwOTJFIC8qIG1haW4ubSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRo
ID0gbWFpbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjQ2NTkxMjE4OTAyQjkx
MDAyOTA5MkUgLyogQ0xJSW5zdGFuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ0xJSW5zdGFuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI0NjU5MTMx
ODkwMkI5MTAwMjkwOTJFIC8qIENMSUluc3RhbmNlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
b2JqYzsgcGF0aCA9IENMSUluc3RhbmNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyNDY1OTE1MTg5MDJDNDIwMDI5MDkyRSAvKiBKU01vZHVsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU01vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMjQ2NTkxNjE4OTAyQzQyMDAyOTA5MkUgLyogSlNNb2R1bGUubSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5vYmpjOyBwYXRoID0gSlNNb2R1bGUubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzI0NjU5MTgxODkwMkNDQzAwMjkwOTJFIC8qIEpTUnVuTG9vcFRocmVhZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1J1bkxvb3BUaHJlYWQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI0NjU5MTkxODkwMkNDQzAwMjkwOTJFIC8qIEpTUnVuTG9v
cFRocmVhZC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBKU1J1bkxvb3BU
aHJlYWQubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI0NjU5MUIxODkwMkQxMDAw
MjkwOTJFIC8qIFJ1bkxvb3BUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUnVuTG9vcFRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjQ2NTkx
QzE4OTAyRDEwMDAyOTA5MkUgLyogUnVuTG9vcFRocmVhZC5tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLm9iamM7IHBhdGggPSBSdW5Mb29wVGhyZWFkLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyNDY1OTFFMTg5MDJFMTUwMDI5MDkyRSAvKiBSZWFkRXZhbFByaW50TG9vcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkRXZhbFByaW50TG9vcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjQ2NTkxRjE4OTAyRTE1MDAyOTA5MkUgLyogUmVh
ZEV2YWxQcmludExvb3AubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gUmVh
ZEV2YWxQcmludExvb3AubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI0NjU5MjEx
ODkwMkVBNDAwMjkwOTJFIC8qIFNjcmlwdElucHV0U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNjcmlwdElucHV0U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyNDY1OTIyMTg5MDJFQTQwMDI5MDkyRSAvKiBTY3JpcHRJbnB1dFNvdXJjZS5t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBTY3JpcHRJbnB1dFNvdXJjZS5t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjQ2NTkyQjE4OTA1RkMxMDAyOTA5MkUg
LyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGggPSBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisvKiBF
bmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJQzI0NjU4RkUxODkwMkFDRTAwMjkwOTJFIC8qIEZyYW1l
d29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlDMjQ2NTkyQzE4OTA1
RkMxMDAyOTA5MkUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8s
CisJCQkJQzI0NjU5MDUxODkwMkFDRTAwMjkwOTJFIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LworCisvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCisJCUMyNDY1OEY4MTg5MDJBQ0UwMDI5
MDkyRSA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQzI0NjU5
MDYxODkwMkFDRTAwMjkwOTJFIC8qIGpzYy1jbGkgKi8sCisJCQkJQzI0NjU5MDMxODkwMkFDRTAw
MjkwOTJFIC8qIEZyYW1ld29ya3MgKi8sCisJCQkJQzI0NjU5MDIxODkwMkFDRTAwMjkwOTJFIC8q
IFByb2R1Y3RzICovLAorCQkJKTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJ
CUMyNDY1OTAyMTg5MDJBQ0UwMDI5MDkyRSAvKiBQcm9kdWN0cyAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQzI0NjU5MDExODkwMkFDRTAwMjkwOTJFIC8q
IGpzYy1jbGkgKi8sCisJCQkpOworCQkJbmFtZSA9IFByb2R1Y3RzOworCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQzI0NjU5MDMxODkwMkFDRTAwMjkwOTJFIC8qIEZyYW1ld29y
a3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUMyNDY1
OTJCMTg5MDVGQzEwMDI5MDkyRSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8sCisJCQkJ
QzI0NjU5MDQxODkwMkFDRTAwMjkwOTJFIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovLAorCQkJ
KTsKKwkJCW5hbWUgPSBGcmFtZXdvcmtzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKKwkJQzI0NjU5MDYxODkwMkFDRTAwMjkwOTJFIC8qIGpzYy1jbGkgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUMyNDY1OTA3MTg5MDJBQ0UwMDI5MDky
RSAvKiBtYWluLm0gKi8sCisJCQkJQzI0NjU5MTIxODkwMkI5MTAwMjkwOTJFIC8qIENMSUluc3Rh
bmNlLmggKi8sCisJCQkJQzI0NjU5MTMxODkwMkI5MTAwMjkwOTJFIC8qIENMSUluc3RhbmNlLm0g
Ki8sCisJCQkJQzI0NjU5MTUxODkwMkM0MjAwMjkwOTJFIC8qIEpTTW9kdWxlLmggKi8sCisJCQkJ
QzI0NjU5MTYxODkwMkM0MjAwMjkwOTJFIC8qIEpTTW9kdWxlLm0gKi8sCisJCQkJQzI0NjU5MTgx
ODkwMkNDQzAwMjkwOTJFIC8qIEpTUnVuTG9vcFRocmVhZC5oICovLAorCQkJCUMyNDY1OTE5MTg5
MDJDQ0MwMDI5MDkyRSAvKiBKU1J1bkxvb3BUaHJlYWQubSAqLywKKwkJCQlDMjQ2NTkxQjE4OTAy
RDEwMDAyOTA5MkUgLyogUnVuTG9vcFRocmVhZC5oICovLAorCQkJCUMyNDY1OTFDMTg5MDJEMTAw
MDI5MDkyRSAvKiBSdW5Mb29wVGhyZWFkLm0gKi8sCisJCQkJQzI0NjU5MUUxODkwMkUxNTAwMjkw
OTJFIC8qIFJlYWRFdmFsUHJpbnRMb29wLmggKi8sCisJCQkJQzI0NjU5MUYxODkwMkUxNTAwMjkw
OTJFIC8qIFJlYWRFdmFsUHJpbnRMb29wLm0gKi8sCisJCQkJQzI0NjU5MjExODkwMkVBNDAwMjkw
OTJFIC8qIFNjcmlwdElucHV0U291cmNlLmggKi8sCisJCQkJQzI0NjU5MjIxODkwMkVBNDAwMjkw
OTJFIC8qIFNjcmlwdElucHV0U291cmNlLm0gKi8sCisJCQkpOworCQkJcGF0aCA9ICJqc2MtY2xp
IjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisvKiBFbmQgUEJYR3JvdXAgc2Vj
dGlvbiAqLworCisvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCQlDMjQ2NTkw
MDE4OTAyQUNFMDAyOTA5MkUgLyoganNjLWNsaSAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRh
cmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBDMjQ2NTkwRjE4OTAyQUNFMDAyOTA5
MkUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImpzYy1j
bGkiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJQzI0NjU4RkQxODkwMkFDRTAwMjkwOTJF
IC8qIFNvdXJjZXMgKi8sCisJCQkJQzI0NjU4RkUxODkwMkFDRTAwMjkwOTJFIC8qIEZyYW1ld29y
a3MgKi8sCisJCQkJQzI0NjU4RkYxODkwMkFDRTAwMjkwOTJFIC8qIENvcHkgRmlsZXMgKi8sCisJ
CQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkp
OworCQkJbmFtZSA9ICJqc2MtY2xpIjsKKwkJCXByb2R1Y3ROYW1lID0gImpzYy1jbGkiOworCQkJ
cHJvZHVjdFJlZmVyZW5jZSA9IEMyNDY1OTAxMTg5MDJBQ0UwMDI5MDkyRSAvKiBqc2MtY2xpICov
OworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKKwkJfTsK
Ky8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhQcm9qZWN0
IHNlY3Rpb24gKi8KKwkJQzI0NjU4RjkxODkwMkFDRTAwMjkwOTJFIC8qIFByb2plY3Qgb2JqZWN0
ICovID0geworCQkJaXNhID0gUEJYUHJvamVjdDsKKwkJCWF0dHJpYnV0ZXMgPSB7CisJCQkJTGFz
dFVwZ3JhZGVDaGVjayA9IDA1MDA7CisJCQkJT1JHQU5JWkFUSU9OTkFNRSA9ICJNYXJrIEhhaG5l
bmJlcmciOworCQkJfTsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBDMjQ2NThGQzE4OTAy
QUNFMDAyOTA5MkUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJq
c2MtY2xpIiAqLzsKKwkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMiI7CisJCQlk
ZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CisJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0g
MDsKKwkJCWtub3duUmVnaW9ucyA9ICgKKwkJCQllbiwKKwkJCSk7CisJCQltYWluR3JvdXAgPSBD
MjQ2NThGODE4OTAyQUNFMDAyOTA5MkU7CisJCQlwcm9kdWN0UmVmR3JvdXAgPSBDMjQ2NTkwMjE4
OTAyQUNFMDAyOTA5MkUgLyogUHJvZHVjdHMgKi87CisJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwor
CQkJcHJvamVjdFJvb3QgPSAiIjsKKwkJCXRhcmdldHMgPSAoCisJCQkJQzI0NjU5MDAxODkwMkFD
RTAwMjkwOTJFIC8qIGpzYy1jbGkgKi8sCisJCQkpOworCQl9OworLyogRW5kIFBCWFByb2plY3Qg
c2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJ
CUMyNDY1OEZEMTg5MDJBQ0UwMDI5MDkyRSAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJY
U291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJ
ZmlsZXMgPSAoCisJCQkJQzI0NjU5MUExODkwMkNDQzAwMjkwOTJFIC8qIEpTUnVuTG9vcFRocmVh
ZC5tIGluIFNvdXJjZXMgKi8sCisJCQkJQzI0NjU5MjAxODkwMkUxNTAwMjkwOTJFIC8qIFJlYWRF
dmFsUHJpbnRMb29wLm0gaW4gU291cmNlcyAqLywKKwkJCQlDMjQ2NTkyMzE4OTAyRUE0MDAyOTA5
MkUgLyogU2NyaXB0SW5wdXRTb3VyY2UubSBpbiBTb3VyY2VzICovLAorCQkJCUMyNDY1OTA4MTg5
MDJBQ0UwMDI5MDkyRSAvKiBtYWluLm0gaW4gU291cmNlcyAqLywKKwkJCQlDMjQ2NTkxNDE4OTAy
QjkxMDAyOTA5MkUgLyogQ0xJSW5zdGFuY2UubSBpbiBTb3VyY2VzICovLAorCQkJCUMyNDY1OTFE
MTg5MDJEMTAwMDI5MDkyRSAvKiBSdW5Mb29wVGhyZWFkLm0gaW4gU291cmNlcyAqLywKKwkJCQlD
MjQ2NTkxNzE4OTAyQzQyMDAyOTA5MkUgLyogSlNNb2R1bGUubSBpbiBTb3VyY2VzICovLAorCQkJ
KTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyog
RW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gWENCdWlsZENv
bmZpZ3VyYXRpb24gc2VjdGlvbiAqLworCQlDMjQ2NTkwRDE4OTAyQUNFMDAyOTA5MkUgLyogRGVi
dWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGlu
Z3MgPSB7CisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ0xBTkdfQ1hY
X0xBTkdVQUdFX1NUQU5EQVJEID0gImdudSsrMHgiOworCQkJCUNMQU5HX0NYWF9MSUJSQVJZID0g
ImxpYmMrKyI7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNMQU5HX1dB
Uk5fQk9PTF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQ09OU1RBTlRfQ09OVkVS
U0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0RJUkVDVF9PQkpDX0lTQV9VU0FHRSA9IFlFU19F
UlJPUjsKKwkJCQlDTEFOR19XQVJOX0VNUFRZX0JPRFkgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9F
TlVNX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9JTlRfQ09OVkVSU0lPTiA9IFlF
UzsKKwkJCQlDTEFOR19XQVJOX09CSkNfUk9PVF9DTEFTUyA9IFlFU19FUlJPUjsKKwkJCQlDTEFO
R19XQVJOX19EVVBMSUNBVEVfTUVUSE9EX01BVENIID0gWUVTOworCQkJCUNPUFlfUEhBU0VfU1RS
SVAgPSBOTzsKKwkJCQlHQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCA9IGdudTk5OworCQkJCUdDQ19E
WU5BTUlDX05PX1BJQyA9IE5POworCQkJCUdDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TID0gWUVT
OworCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOworCQkJCUdDQ19QUkVQUk9DRVNTT1Jf
REVGSU5JVElPTlMgPSAoCisJCQkJCSJERUJVRz0xIiwKKwkJCQkJIiQoaW5oZXJpdGVkKSIsCisJ
CQkJKTsKKwkJCQlHQ0NfU1lNQk9MU19QUklWQVRFX0VYVEVSTiA9IE5POworCQkJCUdDQ19XQVJO
XzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVS
Tl9UWVBFID0gWUVTX0VSUk9SOworCQkJCUdDQ19XQVJOX1VOREVDTEFSRURfU0VMRUNUT1IgPSBZ
RVM7CisJCQkJR0NDX1dBUk5fVU5JTklUSUFMSVpFRF9BVVRPUyA9IFlFUzsKKwkJCQlHQ0NfV0FS
Tl9VTlVTRURfRlVOQ1RJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0g
WUVTOworCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjk7CisJCQkJT05MWV9BQ1RJ
VkVfQVJDSCA9IFlFUzsKKwkJCQlTREtST09UID0gbWFjb3N4OworCQkJfTsKKwkJCW5hbWUgPSBE
ZWJ1ZzsKKwkJfTsKKwkJQzI0NjU5MEUxODkwMkFDRTAwMjkwOTJFIC8qIFJlbGVhc2UgKi8gPSB7
CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJ
CQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ0xBTkdfQ1hYX0xBTkdVQUdF
X1NUQU5EQVJEID0gImdudSsrMHgiOworCQkJCUNMQU5HX0NYWF9MSUJSQVJZID0gImxpYmMrKyI7
CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQk9PTF9D
T05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQ09OU1RBTlRfQ09OVkVSU0lPTiA9IFlF
UzsKKwkJCQlDTEFOR19XQVJOX0RJUkVDVF9PQkpDX0lTQV9VU0FHRSA9IFlFU19FUlJPUjsKKwkJ
CQlDTEFOR19XQVJOX0VNUFRZX0JPRFkgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9FTlVNX0NPTlZF
UlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9JTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlD
TEFOR19XQVJOX09CSkNfUk9PVF9DTEFTUyA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX19E
VVBMSUNBVEVfTUVUSE9EX01BVENIID0gWUVTOworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7
CisJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3YXJmLXdpdGgtZHN5bSI7CisJCQkJ
RU5BQkxFX05TX0FTU0VSVElPTlMgPSBOTzsKKwkJCQlHQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCA9
IGdudTk5OworCQkJCUdDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TID0gWUVTOworCQkJCUdDQ19X
QVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUdDQ19XQVJOX0FCT1VUX1JF
VFVSTl9UWVBFID0gWUVTX0VSUk9SOworCQkJCUdDQ19XQVJOX1VOREVDTEFSRURfU0VMRUNUT1Ig
PSBZRVM7CisJCQkJR0NDX1dBUk5fVU5JTklUSUFMSVpFRF9BVVRPUyA9IFlFUzsKKwkJCQlHQ0Nf
V0FSTl9VTlVTRURfRlVOQ1RJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxF
ID0gWUVTOworCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjk7CisJCQkJU0RLUk9P
VCA9IG1hY29zeDsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJQzI0NjU5MTAx
ODkwMkFDRTAwMjkwOTJFIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRI
UyA9IFlFUzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3lt
IjsKKwkJCQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gIiQoaW5oZXJpdGVkKSI7CisJCQkJR0ND
X1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9
ICIiOworCQkJCUxEX1JVTlBBVEhfU0VBUkNIX1BBVEhTID0gIlwiQGxvYWRlcl9wYXRoLy5cIiI7
CisJCQkJTElOS0VSX0RJU1BMQVlTX01BTkdMRURfTkFNRVMgPSBZRVM7CisJCQkJT1RIRVJfQ0ZM
QUdTID0gKAorCQkJCQkiLWlmcmFtZXdvcmsiLAorCQkJCQkiJChTREtST09UKSQoU1lTVEVNX0xJ
QlJBUllfRElSKS9GcmFtZXdvcmtzLyIsCisJCQkJKTsKKwkJCQlPVEhFUl9MREZMQUdTID0gIi1s
ZWRpdCI7CisJCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKKwkJCQlTREtST09U
ID0gbWFjb3N4LmludGVybmFsOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJQzI0
NjU5MTExODkwMkFDRTAwMjkwOTJFIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQUxXQVlTX1NFQVJDSF9V
U0VSX1BBVEhTID0gWUVTOworCQkJCURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9ICJkd2FyZi13
aXRoLWRzeW0iOworCQkJCUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAiJChpbmhlcml0ZWQpIjsK
KwkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTOworCQkJCUdDQ19QUkVGSVhf
SEVBREVSID0gIiI7CisJCQkJTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAiXCJAbG9hZGVyX3Bh
dGgvLlwiIjsKKwkJCQlMSU5LRVJfRElTUExBWVNfTUFOR0xFRF9OQU1FUyA9IFlFUzsKKwkJCQlP
VEhFUl9DRkxBR1MgPSAoCisJCQkJCSItaWZyYW1ld29yayIsCisJCQkJCSIkKFNES1JPT1QpJChT
WVNURU1fTElCUkFSWV9ESVIpL0ZyYW1ld29ya3MvIiwKKwkJCQkpOworCQkJCU9USEVSX0xERkxB
R1MgPSAiLWxlZGl0IjsKKwkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOworCQkJ
CVNES1JPT1QgPSBtYWNvc3guaW50ZXJuYWw7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJ
CX07CisvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLworCisvKiBCZWdpbiBY
Q0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwkJQzI0NjU4RkMxODkwMkFDRTAwMjkwOTJF
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAianNjLWNsaSIgKi8g
PSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9u
cyA9ICgKKwkJCQlDMjQ2NTkwRDE4OTAyQUNFMDAyOTA5MkUgLyogRGVidWcgKi8sCisJCQkJQzI0
NjU5MEUxODkwMkFDRTAwMjkwOTJFIC8qIFJlbGVhc2UgKi8sCisJCQkpOworCQkJZGVmYXVsdENv
bmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0g
UmVsZWFzZTsKKwkJfTsKKwkJQzI0NjU5MEYxODkwMkFDRTAwMjkwOTJFIC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJqc2MtY2xpIiAqLyA9IHsKKwkJCWlz
YSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJ
CUMyNDY1OTEwMTg5MDJBQ0UwMDI5MDkyRSAvKiBEZWJ1ZyAqLywKKwkJCQlDMjQ2NTkxMTE4OTAy
QUNFMDAyOTA5MkUgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlv
bklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOwor
CQl9OworLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCX07CisJcm9vdE9i
amVjdCA9IEMyNDY1OEY5MTg5MDJBQ0UwMDI5MDkyRSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKK30K
SW5kZXg6IFRvb2xzL2pzYy1jbGkvanNjLWNsaS9DTElJbnN0YW5jZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL2pzYy1jbGkvanNjLWNsaS9DTElJbnN0YW5jZS5oCShyZXZpc2lvbiAwKQorKysgVG9v
bHMvanNjLWNsaS9qc2MtY2xpL0NMSUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgor
CisjaWZuZGVmIENMSUluc3RhbmNlX2gKKyNkZWZpbmUgQ0xJSW5zdGFuY2VfaAorCitAaW50ZXJm
YWNlIENMSUluc3RhbmNlIDogTlNPYmplY3QKKworLSh2b2lkKWxvYWRGaWxlOihOU1N0cmluZyAq
KXBhdGg7CistKHZvaWQpcnVuOworCitAZW5kCisKKyNlbmRpZiAvLyBDTEluc3RhbmNlX2gKSW5k
ZXg6IFRvb2xzL2pzYy1jbGkvanNjLWNsaS9DTElJbnN0YW5jZS5tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL2pzYy1jbGkvanNjLWNsaS9DTElJbnN0YW5jZS5tCShyZXZpc2lvbiAwKQorKysgVG9vbHMv
anNjLWNsaS9qc2MtY2xpL0NMSUluc3RhbmNlLm0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIkNMSUluc3RhbmNlLmgiCisKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKKyNpbXBvcnQgIkpTTW9kdWxlLmgiCisj
aW1wb3J0ICJKU1J1bkxvb3BUaHJlYWQuaCIKKyNpbXBvcnQgIkNMSUluc3RhbmNlLmgiCisjaW1w
b3J0ICJSZWFkRXZhbFByaW50TG9vcC5oIgorCitAaW1wbGVtZW50YXRpb24gQ0xJSW5zdGFuY2Ug
eworICAgIEpTTW9kdWxlICpfbW9kdWxlTG9hZGVyOworICAgIE5TU3RyaW5nICpfYmFzZUZpbGU7
CisgICAgSlNDb250ZXh0ICpfY29udGV4dDsKKyAgICAKKyAgICBKU1J1bkxvb3BUaHJlYWQgKl9q
c1RocmVhZDsKK30KKworLSAoaWQpaW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9iYXNlRmlsZSA9
IG5pbDsKKyAgICBfbW9kdWxlTG9hZGVyID0gW1tKU01vZHVsZSBhbGxvY10gaW5pdF07CisgICAg
X2NvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAgCisgICAgX2NvbnRleHRb
QCJyZXF1aXJlIl0gPSBeKE5TU3RyaW5nICphcmcpIHsKKyAgICAgICAgSlNNb2R1bGUgKm1vZHVs
ZSA9IFtKU01vZHVsZSByZXF1aXJlOmFyZyBhdFBhdGg6W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSBjdXJyZW50RGlyZWN0b3J5UGF0aF1dOworICAgICAgICBpZiAoIW1vZHVsZSkgewor
ICAgICAgICAgICAgW1tKU0NvbnRleHQgY3VycmVudENvbnRleHRdIGV2YWx1YXRlU2NyaXB0OkAi
dGhyb3cgJ25vdCBmb3VuZCciXTsKKyAgICAgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdp
dGhVbmRlZmluZWRJbkNvbnRleHQ6W0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF1dOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0czsKKyAgICB9OworICAgIAorICAgIF9q
c1RocmVhZCA9IFtbSlNSdW5Mb29wVGhyZWFkIGFsbG9jXSBpbml0V2l0aEZpbGVzOkBbXSBhbmRD
b250ZXh0Ol9jb250ZXh0XTsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCls
b2FkRmlsZTooTlNTdHJpbmcgKilwYXRoCit7CisgICAgX2Jhc2VGaWxlID0gcGF0aDsKK30KKwor
LSAodm9pZClydW4KK3sKKyAgICBbX2pzVGhyZWFkIHN0YXJ0XTsKKyAgICAKKyAgICBpZiAoIV9i
YXNlRmlsZSkgeworICAgICAgICBSZWFkRXZhbFByaW50TG9vcCAqcmVwbCA9IFtbUmVhZEV2YWxQ
cmludExvb3AgYWxsb2NdIGluaXRXaXRoSlNUaHJlYWQ6X2pzVGhyZWFkXTsKKyAgICAgICAgW3Jl
cGwgcnVuXTsKKyAgICB9CisKKyAgICBbX2pzVGhyZWFkIGpvaW5dOworfQorCitAZW5kCkluZGV4
OiBUb29scy9qc2MtY2xpL2pzYy1jbGkvSlNNb2R1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9q
c2MtY2xpL2pzYy1jbGkvSlNNb2R1bGUuaAkocmV2aXNpb24gMCkKKysrIFRvb2xzL2pzYy1jbGkv
anNjLWNsaS9KU01vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2lmbmRlZiBKU01v
ZHVsZV9oCisjZGVmaW5lIEpTTW9kdWxlX2gKKworQGNsYXNzIEpTQ29udGV4dDsKK0BjbGFzcyBK
U1ZhbHVlOworCitAaW50ZXJmYWNlIEpTTW9kdWxlIDogTlNPYmplY3QKKworQHByb3BlcnR5IChy
ZWFkb25seSkgSlNWYWx1ZSAqZXhwb3J0czsKKworKyAoSlNNb2R1bGUgKilyZXF1aXJlOihOU1N0
cmluZyAqKW1vZHVsZSBhdFBhdGg6KE5TU3RyaW5nICopcGF0aCBpbkNvbnRleHQ6KEpTQ29udGV4
dCAqKWNvbnRleHQ7CisrIChKU01vZHVsZSAqKXJlcXVpcmU6KE5TU3RyaW5nICopbW9kdWxlIGF0
UGF0aDooTlNTdHJpbmcgKilwYXRoOworKyAoTlNTdHJpbmcgKilyZXNvbHZlOihOU1N0cmluZyAq
KW1vZHVsZSBhdFBhdGg6KE5TU3RyaW5nICopcGF0aDsKKworLSAoSlNNb2R1bGUgKilyZXF1aXJl
OihOU1N0cmluZyAqKW1vZHVsZTsKKworLSAoSlNWYWx1ZSAqKXBsYXRmb3JtT2JqZWN0SW5Db250
ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworCitAZW5kCisKKyNlbmRpZiAvLyBKU01vZHVsZV9o
CisKSW5kZXg6IFRvb2xzL2pzYy1jbGkvanNjLWNsaS9KU01vZHVsZS5tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL2pzYy1jbGkvanNjLWNsaS9KU01vZHVsZS5tCShyZXZpc2lvbiAwKQorKysgVG9vbHMv
anNjLWNsaS9qc2MtY2xpL0pTTW9kdWxlLm0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJKU01vZHVsZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKworQGltcGxlbWVudGF0aW9uIEpTTW9kdWxlIHsKKyAg
ICBKU01hbmFnZWRWYWx1ZSAqX2V4cG9ydHM7CisgICAgTlNTdHJpbmcgKl9pZDsKKyAgICBOU1N0
cmluZyAqX2ZpbGVuYW1lOworICAgIGJvb2wgX2xvYWRlZDsKKyAgICBfX3dlYWsgSlNNb2R1bGUg
Kl9wYXJlbnQ7CisgICAgTlNNdXRhYmxlQXJyYXkgKl9jaGlsZHJlbjsKK30KKworLy8gVE9ETzog
R2V0IGxpYiBpbiB0aGUgcmlnaHQgcGxhY2UuIFJpZ2h0IG5vdyB3ZSBjb3B5IGl0IHRvIHRoZSBi
dWlsZCByZXN1bHRzIGRpcmVjdG9yeS4KK3N0YXRpYyBOU0RpY3Rpb25hcnkgKmNvcmVNb2R1bGVz
KCkKK3sKKyAgICBzdGF0aWMgTlNEaWN0aW9uYXJ5ICptb2R1bGVzID0gMDsKKyAgICBpZiAoIW1v
ZHVsZXMpIHsKKyAgICAgICAgLy8gUHV0IGxvY2F0aW9uIG9mIGJ1aWx0LWluIG1vZHVsZXMgaGVy
ZS4KKyAgICAgICAgbW9kdWxlcyA9IEB7CisgICAgICAgICAgICAvL0AidXRpbCI6IFtsaWJEaXIg
c3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAidXRpbC5qcyJdLAorICAgICAgICB9Owor
ICAgIH0KKyAgICByZXR1cm4gbW9kdWxlczsKK30KKworc3RhdGljIGJvb2wgaXNDb3JlTW9kdWxl
KE5TU3RyaW5nICptb2R1bGVOYW1lKQoreworICAgIHJldHVybiAhIVtjb3JlTW9kdWxlcygpIG9i
amVjdEZvcktleTptb2R1bGVOYW1lXTsKK30KKworc3RhdGljIENsYXNzIGNsYXNzRm9yTW9kdWxl
KE5TU3RyaW5nICptb2R1bGVOYW1lKQoreworICAgIHN0YXRpYyBOU0RpY3Rpb25hcnkgKm1vZHVs
ZUNsYXNzZXMgPSAwOworICAgIGlmICghbW9kdWxlQ2xhc3NlcykgeworICAgICAgICAvLyBQdXQg
Y2xhc3NlcyBmb3IgYnVpbHQtaW4gbW9kdWxlcyBoZXJlLgorICAgICAgICBtb2R1bGVDbGFzc2Vz
ID0gQHsKKyAgICAgICAgICAgIC8vQCJ1dGlsIjogW0pTVXRpbE1vZHVsZSBjbGFzc10sCisgICAg
ICAgIH07CisgICAgfQorICAgIAorICAgIGlmIChpc0NvcmVNb2R1bGUobW9kdWxlTmFtZSkpCisg
ICAgICAgIHJldHVybiBbbW9kdWxlQ2xhc3NlcyBvYmplY3RGb3JLZXk6bW9kdWxlTmFtZV07Cisg
ICAgcmV0dXJuIFtKU01vZHVsZSBjbGFzc107Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqY29yZU1v
ZHVsZUZ1bGxQYXRoKE5TU3RyaW5nICptb2R1bGVOYW1lKQoreworICAgIGFzc2VydChpc0NvcmVN
b2R1bGUobW9kdWxlTmFtZSkpOworICAgIHJldHVybiBbY29yZU1vZHVsZXMoKSBvYmplY3RGb3JL
ZXk6bW9kdWxlTmFtZV07Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqcmVzb2x2ZU1vZHVsZUFzRmls
ZShOU1N0cmluZyAqbW9kdWxlUGF0aCkKK3sKKyAgICBpZiAoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm1vZHVsZVBhdGhdKQorICAgICAgICByZXR1cm4g
bW9kdWxlUGF0aDsKKyAgICAKKyAgICBpZiAoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSBmaWxlRXhpc3RzQXRQYXRoOlttb2R1bGVQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aEV4dGVu
c2lvbjpAImpzIl1dKQorICAgICAgICByZXR1cm4gW21vZHVsZVBhdGggc3RyaW5nQnlBcHBlbmRp
bmdQYXRoRXh0ZW5zaW9uOkAianMiXTsKKyAgICAKKyAgICByZXR1cm4gbmlsOworfQorCitzdGF0
aWMgTlNTdHJpbmcgKnJlc29sdmVNb2R1bGVBc0RpcmVjdG9yeShOU1N0cmluZyAqbW9kdWxlUGF0
aCkKK3sKKyAgICBpZiAoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3Rz
QXRQYXRoOlttb2R1bGVQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAInBhY2th
Z2UuanNvbiJdXSkgeworICAgICAgICBOU1N0cmluZyAqcGF0aCA9IFttb2R1bGVQYXRoIHN0cmlu
Z0J5QXBwZW5kaW5nU3RyaW5nOkAicGFja2FnZS5qc29uIl07CisgICAgICAgIE5TU3RyaW5nICpm
aWxlQ29udGVudHMgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOnBhdGggZW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKKyAgICAgICAgSlNDb250ZXh0
ICp0ZW1wQ29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgTlNTdHJp
bmcgKnNjcmlwdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSlNPTi5wYXJzZSglQCki
LCBmaWxlQ29udGVudHNdOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbdGVtcENvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6c2NyaXB0XTsKKyAgICAgICAgaWYgKCFbcmVzdWx0W0AibWFpbiJdIGlz
VW5kZWZpbmVkXSkKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlTW9kdWxlQXNGaWxlKFtyZXN1
bHRbQCJtYWluIl0gdG9TdHJpbmddKTsKKyAgICB9CisgICAgCisgICAgaWYgKFtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpbbW9kdWxlUGF0aCBzdHJpbmdC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJpbmRleC5qcyJdXSkKKyAgICAgICAgcmV0dXJuIFtt
b2R1bGVQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImluZGV4LmpzIl07Cisg
ICAgCisgICAgcmV0dXJuIG5pbDsKK30KKworc3RhdGljIE5TQXJyYXkgKm5vZGVNb2R1bGVQYXRo
cyhOU1N0cmluZyAqc3RhcnQpCit7CisgICAgTlNBcnJheSAqcGFydHMgPSBbc3RhcnQgcGF0aENv
bXBvbmVudHNdOworICAgIE5TVUludGVnZXIgcm9vdCA9IFtwYXJ0cyBpbmRleE9mT2JqZWN0OkAi
bm9kZV9tb2R1bGVzIl07CisgICAgaWYgKHJvb3QgPT0gTlNOb3RGb3VuZCkKKyAgICAgICAgcm9v
dCA9IDA7CisgICAgCisgICAgTlNVSW50ZWdlciBpID0gW3BhcnRzIGNvdW50XSAtIDE7CisgICAg
TlNNdXRhYmxlQXJyYXkgKmRpcnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAg
ICB3aGlsZSAoaSA+IHJvb3QpIHsKKyAgICAgICAgTlNTdHJpbmcgKmNvbXBvbmVudCA9IFtwYXJ0
cyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBpZiAoW2NvbXBvbmVudCBpc0VxdWFsVG9TdHJp
bmc6QCJub2RlX21vZHVsZXMiXSkgeworICAgICAgICAgICAgaSAtPSAxOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgW2RpcnMgYWRkT2JqZWN0OltOU1N0cmluZyBw
YXRoV2l0aENvbXBvbmVudHM6W3BhcnRzIHN1YmFycmF5V2l0aFJhbmdlOk5TTWFrZVJhbmdlKDAs
IGkpXV1dOworICAgICAgICBpIC09IDE7CisgICAgfQorICAgIAorICAgIHJldHVybiBkaXJzOwor
fQorCitzdGF0aWMgTlNTdHJpbmcgKnJlc29sdmVBc05vZGVNb2R1bGUoTlNTdHJpbmcgKm1vZHVs
ZU5hbWUsIE5TU3RyaW5nKiBzdGFydCkKK3sKKyAgICBOU0FycmF5ICpkaXJzID0gbm9kZU1vZHVs
ZVBhdGhzKHN0YXJ0KTsKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBbZGlycyBjb3Vu
dF07IGkrKykgeworICAgICAgICBOU1N0cmluZyAqZGlyID0gW2RpcnMgb2JqZWN0QXRJbmRleDpp
XTsKKyAgICAgICAgTlNTdHJpbmcgKnJlc3VsdCA9IHJlc29sdmVNb2R1bGVBc0ZpbGUoW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC8lQCIsIGRpciwgbW9kdWxlTmFtZV0pOworICAgICAg
ICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAg
ICAgIHJlc3VsdCA9IHJlc29sdmVNb2R1bGVBc0RpcmVjdG9yeShbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIiVALyVAIiwgZGlyLCBtb2R1bGVOYW1lXSk7CisgICAgICAgIGlmIChyZXN1bHQp
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQor
CisrIChOU1N0cmluZyAqKXJlc29sdmU6KE5TU3RyaW5nICopbW9kdWxlIGF0UGF0aDooTlNTdHJp
bmcgKilwYXRoCit7CisgICAgaWYgKGlzQ29yZU1vZHVsZShtb2R1bGUpKQorICAgICAgICByZXR1
cm4gY29yZU1vZHVsZUZ1bGxQYXRoKG1vZHVsZSk7CisgICAgCisgICAgTlNTdHJpbmcgKnJlc3Vs
dDsKKyAgICBpZiAoW21vZHVsZSBoYXNQcmVmaXg6QCIuLyJdIHx8IFttb2R1bGUgaGFzUHJlZml4
OkAiLyJdIHx8IFttb2R1bGUgaGFzUHJlZml4OkAiLi4vIl0pIHsKKyAgICAgICAgcmVzdWx0ID0g
cmVzb2x2ZU1vZHVsZUFzRmlsZShbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVALyVAIiwg
cGF0aCwgbW9kdWxlXSk7CisgICAgICAgIAorICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IHJlc29sdmVNb2R1
bGVBc0RpcmVjdG9yeShbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVALyVAIiwgcGF0aCwg
bW9kdWxlXSk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzb2x2ZUFzTm9kZU1vZHVsZShtb2R1bGUsIFtw
YXRoIHN0cmluZ0J5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF0pOworfQorCitzdGF0aWMgTlNN
YXBUYWJsZSAqZ2xvYmFsTW9kdWxlQ2FjaGUoKQoreworICAgIHN0YXRpYyBOU01hcFRhYmxlICpt
b2R1bGVDYWNoZSA9IG5pbDsKKyAgICBpZiAoIW1vZHVsZUNhY2hlKQorICAgICAgICBtb2R1bGVD
YWNoZSA9IFtOU01hcFRhYmxlIHN0cm9uZ1RvU3Ryb25nT2JqZWN0c01hcFRhYmxlXTsKKyAgICBy
ZXR1cm4gbW9kdWxlQ2FjaGU7Cit9CisKK3N0YXRpYyBib29sIGlzQ2FjaGVkKE5TU3RyaW5nICpm
dWxsTW9kdWxlUGF0aCkKK3sKKyAgICByZXR1cm4gISFbZ2xvYmFsTW9kdWxlQ2FjaGUoKSBvYmpl
Y3RGb3JLZXk6ZnVsbE1vZHVsZVBhdGhdOworfQorCitzdGF0aWMgSlNNb2R1bGUgKmNhY2hlZE1v
ZHVsZShOU1N0cmluZyAqZnVsbE1vZHVsZVBhdGgpCit7CisgICAgYXNzZXJ0KGlzQ2FjaGVkKGZ1
bGxNb2R1bGVQYXRoKSk7CisgICAgcmV0dXJuIFtnbG9iYWxNb2R1bGVDYWNoZSgpIG9iamVjdEZv
cktleTpmdWxsTW9kdWxlUGF0aF07Cit9CisKK3N0YXRpYyB2b2lkIGNhY2hlTW9kdWxlKE5TU3Ry
aW5nICpmdWxsTW9kdWxlUGF0aCwgSlNNb2R1bGUgKm1vZHVsZSkKK3sKKyAgICBhc3NlcnQoIWlz
Q2FjaGVkKGZ1bGxNb2R1bGVQYXRoKSk7CisgICAgW2dsb2JhbE1vZHVsZUNhY2hlKCkgc2V0T2Jq
ZWN0Om1vZHVsZSBmb3JLZXk6ZnVsbE1vZHVsZVBhdGhdOworfQorCitzdGF0aWMgSlNNb2R1bGUg
KmN1cnJlbnRMb2FkaW5nTW9kdWxlID0gbmlsOworCisrIChKU01vZHVsZSAqKXJlcXVpcmU6KE5T
U3RyaW5nICopbW9kdWxlIGF0UGF0aDooTlNTdHJpbmcgKilwYXRoCit7CisgICAgcmV0dXJuIFtK
U01vZHVsZSByZXF1aXJlOm1vZHVsZSBhdFBhdGg6cGF0aCBpbkNvbnRleHQ6W0pTQ29udGV4dCBj
dXJyZW50Q29udGV4dF1dOworfQorCisrIChKU01vZHVsZSAqKXJlcXVpcmU6KE5TU3RyaW5nICop
bW9kdWxlIGF0UGF0aDooTlNTdHJpbmcgKilwYXRoIGluQ29udGV4dDooSlNDb250ZXh0ICopY29u
dGV4dAoreworICAgIGFzc2VydChjb250ZXh0KTsKKyAgICBOU1N0cmluZyAqZnVsbE1vZHVsZVBh
dGggPSBbSlNNb2R1bGUgcmVzb2x2ZTptb2R1bGUgYXRQYXRoOnBhdGhdOworICAgIAorICAgIGlm
ICghZnVsbE1vZHVsZVBhdGgpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgaWYgKGlz
Q2FjaGVkKGZ1bGxNb2R1bGVQYXRoKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZE1vZHVsZShmdWxs
TW9kdWxlUGF0aCk7CisgICAgCisgICAgQ2xhc3MgbW9kdWxlQ2xhc3MgPSBjbGFzc0Zvck1vZHVs
ZShtb2R1bGUpOworICAgIEpTTW9kdWxlICpuZXdNb2R1bGUgPSBbW21vZHVsZUNsYXNzIGFsbG9j
XSBpbml0V2l0aElkOmZ1bGxNb2R1bGVQYXRoIGZpbGVuYW1lOmZ1bGxNb2R1bGVQYXRoIGNvbnRl
eHQ6Y29udGV4dF07CisgICAgY2FjaGVNb2R1bGUoZnVsbE1vZHVsZVBhdGgsIG5ld01vZHVsZSk7
CisgICAgCisgICAgTlNTdHJpbmcgKnNjcmlwdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVu
dHNPZkZpbGU6ZnVsbE1vZHVsZVBhdGggZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJy
b3I6bmlsXTsKKyAgICAKKyAgICBbbmV3TW9kdWxlIGRpZFN0YXJ0TG9hZGluZ107CisgICAgCisg
ICAgSlNWYWx1ZSAqc2F2ZWRFeHBvcnRzID0gY29udGV4dFtAImV4cG9ydHMiXTsKKyAgICBjb250
ZXh0W0AiZXhwb3J0cyJdID0gW25ld01vZHVsZSBleHBvcnRzXTsKKworICAgIEpTVmFsdWUgKnNh
dmVkTW9kdWxlID0gY29udGV4dFtAIm1vZHVsZSJdOworICAgIGNvbnRleHRbQCJtb2R1bGUiXSA9
IG5ld01vZHVsZTsKKyAgICBjb250ZXh0W0AibW9kdWxlIl1bQCJleHBvcnRzIl0gPSBbbmV3TW9k
dWxlIGV4cG9ydHNdOworICAgIAorICAgIEpTVmFsdWUgKnNhdmVkUGxhdGZvcm1PYmplY3QgPSBj
b250ZXh0W0AicGxhdGZvcm0iXTsKKyAgICBjb250ZXh0W0AicGxhdGZvcm0iXSA9IFtuZXdNb2R1
bGUgcGxhdGZvcm1PYmplY3RJbkNvbnRleHQ6Y29udGV4dF07CisgICAgCisgICAgLy8gTG9hZCB0
aGUgbW9kdWxlLgorICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OnNjcmlwdF07CisgICAgCisg
ICAgW2NvbnRleHQudmlydHVhbE1hY2hpbmUgcmVtb3ZlTWFuYWdlZFJlZmVyZW5jZTpuZXdNb2R1
bGUtPl9leHBvcnRzIHdpdGhPd25lcjpzZWxmXTsKKyAgICBuZXdNb2R1bGUtPl9leHBvcnRzID0g
W0pTTWFuYWdlZFZhbHVlIG1hbmFnZWRWYWx1ZVdpdGhWYWx1ZTpjb250ZXh0W0AibW9kdWxlIl1b
QCJleHBvcnRzIl1dOworICAgIFtjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZl
cmVuY2U6bmV3TW9kdWxlLT5fZXhwb3J0cyB3aXRoT3duZXI6c2VsZl07CisgICAgCisgICAgY29u
dGV4dFtAInBsYXRmb3JtIl0gPSBzYXZlZFBsYXRmb3JtT2JqZWN0OworICAgIGNvbnRleHRbQCJt
b2R1bGUiXSA9IHNhdmVkTW9kdWxlOworICAgIGNvbnRleHRbQCJleHBvcnRzIl0gPSBzYXZlZEV4
cG9ydHM7CisKKyAgICBbbmV3TW9kdWxlIGRpZEZpbmlzaExvYWRpbmddOworCisgICAgcmV0dXJu
IG5ld01vZHVsZTsKK30KKworLSAoSlNWYWx1ZSAqKXBsYXRmb3JtT2JqZWN0SW5Db250ZXh0OihK
U0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgLy8gT3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4gc3Vi
Y2xhc3NlcyBvZiBKU01vZHVsZSB0byByZXR1cm4gYSBwbGF0Zm9ybSBvYmplY3QKKyAgICAvLyB3
aXRoIHdoYXRldmVyIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoYXQgbW9k
dWxlLgorICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhVbmRlZmluZWRJbkNvbnRleHQ6Y29u
dGV4dF07Cit9CisKKy0gKGlkKWluaXRXaXRoSWQ6KE5TU3RyaW5nICopbXlJZCBmaWxlbmFtZToo
TlNTdHJpbmcgKilmaWxlbmFtZSBjb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgCisgICAgX2V4cG9ydHMgPSBbSlNNYW5hZ2VkVmFsdWUgbWFuYWdlZFZhbHVlV2l0aFZh
bHVlOltKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpjb250ZXh0XV07CisgICAg
W2NvbnRleHQudmlydHVhbE1hY2hpbmUgYWRkTWFuYWdlZFJlZmVyZW5jZTpfZXhwb3J0cyB3aXRo
T3duZXI6c2VsZl07CisgICAgX2lkID0gbXlJZDsKKyAgICBfZmlsZW5hbWUgPSBmaWxlbmFtZTsK
KyAgICBfbG9hZGVkID0gZmFsc2U7CisgICAgX3BhcmVudCA9IG5pbDsKKyAgICBfY2hpbGRyZW4g
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgSlNWYWx1ZSAqZXhwb3J0cyA9IFtfZXhwb3J0
cyB2YWx1ZV07CisgICAgaWYgKGV4cG9ydHMpCisgICAgICAgIFtleHBvcnRzLmNvbnRleHQudmly
dHVhbE1hY2hpbmUgcmVtb3ZlTWFuYWdlZFJlZmVyZW5jZTpfZXhwb3J0cyB3aXRoT3duZXI6c2Vs
Zl07Cit9CisKKy0gKHZvaWQpZGlkU3RhcnRMb2FkaW5nCit7CisgICAgX3BhcmVudCA9IGN1cnJl
bnRMb2FkaW5nTW9kdWxlOworICAgIGlmIChjdXJyZW50TG9hZGluZ01vZHVsZSkKKyAgICAgICAg
W2N1cnJlbnRMb2FkaW5nTW9kdWxlLT5fY2hpbGRyZW4gYWRkT2JqZWN0OnNlbGZdOworICAgIGN1
cnJlbnRMb2FkaW5nTW9kdWxlID0gc2VsZjsKK30KKworLSAodm9pZClkaWRGaW5pc2hMb2FkaW5n
Cit7CisgICAgX2xvYWRlZCA9IHRydWU7CisgICAgY3VycmVudExvYWRpbmdNb2R1bGUgPSBfcGFy
ZW50OworfQorCistIChKU01vZHVsZSAqKXJlcXVpcmU6KE5TU3RyaW5nICopbW9kdWxlCit7Cisg
ICAgLy8gVE9ETworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKEpTVmFsdWUgKilleHBvcnRzCit7
CisgICAgcmV0dXJuIFtfZXhwb3J0cyB2YWx1ZV07Cit9CisKK0BlbmQKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBUb29scy9qc2MtY2xpL2pzYy1jbGkvSlNSdW5Mb29wVGhyZWFk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvanNjLWNsaS9qc2MtY2xpL0pTUnVuTG9vcFRocmVhZC5o
CShyZXZpc2lvbiAwKQorKysgVG9vbHMvanNjLWNsaS9qc2MtY2xpL0pTUnVuTG9vcFRocmVhZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgIlJ1bkxvb3BUaHJlYWQuaCIKKworI2lm
bmRlZiBKU1J1bkxvb3BUaHJlYWRfaAorI2RlZmluZSBKU1J1bkxvb3BUaHJlYWRfaAorCitAY2xh
c3MgSlNDb250ZXh0OworQGNsYXNzIEpTVmFsdWU7CisKK0BpbnRlcmZhY2UgSlNSdW5Mb29wVGhy
ZWFkIDogUnVuTG9vcFRocmVhZAorCisrIChUaHJlYWRNYWluVHlwZSl0aHJlYWRNYWluOworCitA
cHJvcGVydHkgZGlzcGF0Y2hfcXVldWVfdCBhc3luY1F1ZXVlOworCistIChpZClpbml0V2l0aEZp
bGVzOihOU0FycmF5ICopZmlsZXMgYW5kQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy0g
KHZvaWQpc3RhcnQ7CistICh2b2lkKWpvaW47CistIChKU1ZhbHVlICopZGlkUmVjZWl2ZUlucHV0
OihOU1N0cmluZyAqKWlucHV0OworLSAodm9pZClwZXJmb3JtQ2FsbGJhY2s6KEpTVmFsdWUgKilj
YWxsYmFjayB3aXRoRXJyb3I6KE5TU3RyaW5nICopZXJyb3JNZXNzYWdlOworLSAodm9pZClwZXJm
b3JtQ2FsbGJhY2s6KEpTVmFsdWUgKiljYWxsYmFjayB3aXRoQXJndW1lbnRzOihOU0FycmF5ICop
YXJndW1lbnRzOworLSAodm9pZClkaWRGaW5pc2hSdW5Mb29wSW5pdGlhbGl6YXRpb247CisKK0Bl
bmQKKworI2VuZGlmIC8vIEpTUnVuTG9vcFRocmVhZF9oCisKSW5kZXg6IFRvb2xzL2pzYy1jbGkv
anNjLWNsaS9KU1J1bkxvb3BUaHJlYWQubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9qc2MtY2xpL2pz
Yy1jbGkvSlNSdW5Mb29wVGhyZWFkLm0JKHJldmlzaW9uIDApCisrKyBUb29scy9qc2MtY2xpL2pz
Yy1jbGkvSlNSdW5Mb29wVGhyZWFkLm0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgor
I2ltcG9ydCAiSlNSdW5Mb29wVGhyZWFkLmgiCisjaW1wb3J0ICJTY3JpcHRJbnB1dFNvdXJjZS5o
IgorI2ltcG9ydCA8cHRocmVhZC5oPgorCitAaW1wbGVtZW50YXRpb24gSlNSdW5Mb29wVGhyZWFk
IHsKKyAgICBOU0FycmF5ICptX2ZpbGVzVG9SdW47CisgICAgQ0ZSdW5Mb29wUmVmIG1fcnVuTG9v
cDsKKyAgICBTY3JpcHRJbnB1dFNvdXJjZSAqbV9zY3JpcHRTb3VyY2U7CisgICAgSlNDb250ZXh0
ICptX2NvbnRleHQ7CisgICAgZGlzcGF0Y2hfcXVldWVfdCBtX2FzeW5jUXVldWU7Cit9CisKK3N0
YXRpYyB2b2lkKiBqc1RocmVhZE1haW4odm9pZCogY29udGV4dCkKK3sKKyAgICBKU1J1bkxvb3BU
aHJlYWQgKnRocmVhZCA9IChfX2JyaWRnZSBKU1J1bkxvb3BUaHJlYWQgKikoY29udGV4dCk7Cisg
ICAgW3RocmVhZCBzdGFydFJ1bkxvb3BdOworICAgIHJldHVybiAwOworfQorCisrIChUaHJlYWRN
YWluVHlwZSl0aHJlYWRNYWluCit7CisgICAgcmV0dXJuIGpzVGhyZWFkTWFpbjsKK30KKworLSAo
aWQpaW5pdFdpdGhGaWxlczooTlNBcnJheSAqKWZpbGVzIGFuZENvbnRleHQ6KEpTQ29udGV4dCAq
KWNvbnRleHQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBtX2ZpbGVzVG9SdW4gPSBmaWxlczsKKyAgICBt
X2NvbnRleHQgPSBjb250ZXh0OworICAgIG1fc2NyaXB0U291cmNlID0gW1tTY3JpcHRJbnB1dFNv
dXJjZSBhbGxvY10gaW5pdFdpdGhDb250ZXh0OmNvbnRleHRdOworICAgIG1fYXN5bmNRdWV1ZSA9
IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgibm9kZS5qc2MgYXN5bmMgcXVldWUiLCBESVNQQVRDSF9R
VUVVRV9DT05DVVJSRU5UKTsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClz
dGFydFJ1bkxvb3AKK3sKKyAgICBtX3J1bkxvb3AgPSBDRlJ1bkxvb3BHZXRDdXJyZW50KCk7Cisg
ICAgW21fc2NyaXB0U291cmNlIGFkZFRvQ3VycmVudFJ1bkxvb3BdOworICAgIAorICAgIFtzZWxm
IGRpZEZpbmlzaFJ1bkxvb3BJbml0aWFsaXphdGlvbl07CisgICAgCisgICAgQ0ZSdW5Mb29wUnVu
KCk7Cit9CisKKy0gKHZvaWQpc3RhcnQKK3sKKyAgICBbc3VwZXIgc3RhcnRdOworICAgIAorICAg
IGlmICghW21fZmlsZXNUb1J1biBjb3VudF0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBm
b3IgKE5TU3RyaW5nICpmaWxlIGluIG1fZmlsZXNUb1J1bikgeworICAgICAgICBOU1N0cmluZyAq
c2NyaXB0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpmaWxlIGVuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CisgICAgICAgIFttX3NjcmlwdFNvdXJj
ZSBydW5TY3JpcHRSZW1vdGVseTpzY3JpcHRdOworICAgIH0KK30KKworLSAodm9pZClqb2luCit7
CisgICAgW21fc2NyaXB0U291cmNlIHJlbW92ZUZyb21SZW1vdGVSdW5Mb29wXTsKKyAgICBDRlJ1
bkxvb3BTdG9wKG1fcnVuTG9vcCk7CisgICAgCisgICAgW3N1cGVyIGpvaW5dOworfQorCistIChK
U1ZhbHVlICopZGlkUmVjZWl2ZUlucHV0OihOU1N0cmluZyAqKWlucHV0Cit7CisgICAgcmV0dXJu
IFttX3NjcmlwdFNvdXJjZSBydW5TY3JpcHRSZW1vdGVseTppbnB1dF07Cit9CisKKy0gKHZvaWQp
cGVyZm9ybUNhbGxiYWNrOihKU1ZhbHVlICopY2FsbGJhY2sgd2l0aEVycm9yOihOU1N0cmluZyAq
KWVycm9yTWVzc2FnZQoreworfQorCistICh2b2lkKXBlcmZvcm1DYWxsYmFjazooSlNWYWx1ZSAq
KWNhbGxiYWNrIHdpdGhBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKK3sKK30KKworLSAo
dm9pZClkaWRGaW5pc2hSdW5Mb29wSW5pdGlhbGl6YXRpb24KK3sKKyAgICBOU011dGFibGVEaWN0
aW9uYXJ5ICp0aHJlYWRTdG9yYWdlID0gW1tOU1RocmVhZCBjdXJyZW50VGhyZWFkXSB0aHJlYWRE
aWN0aW9uYXJ5XTsKKyAgICBbdGhyZWFkU3RvcmFnZSBzZXRPYmplY3Q6c2VsZiBmb3JLZXk6QCJj
dXJyZW50SlNUaHJlYWQiXTsgICAgCisgICAgW3N1cGVyIGRpZEZpbmlzaFJ1bkxvb3BJbml0aWFs
aXphdGlvbl07Cit9CisKK0BlbmQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBU
b29scy9qc2MtY2xpL2pzYy1jbGkvUmVhZEV2YWxQcmludExvb3AuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9qc2MtY2xpL2pzYy1jbGkvUmVhZEV2YWxQcmludExvb3AuaAkocmV2aXNpb24gMCkKKysr
IFRvb2xzL2pzYy1jbGkvanNjLWNsaS9SZWFkRXZhbFByaW50TG9vcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KKworI2lmbmRlZiBSZWFkRXZhbFByaW50TG9vcF9oCisjZGVmaW5lIFJlYWRFdmFs
UHJpbnRMb29wX2gKKworQGNsYXNzIEpTUnVuTG9vcFRocmVhZDsKKworQGludGVyZmFjZSBSZWFk
RXZhbFByaW50TG9vcCA6IE5TT2JqZWN0CisKKy0gKGlkKWluaXRXaXRoSlNUaHJlYWQ6KEpTUnVu
TG9vcFRocmVhZCAqKWluc3RhbmNlOworCistICh2b2lkKXJ1bjsKKworQGVuZAorCisjZW5kaWYg
Ly8gUmVhZEV2YWxQcmludExvb3BfaAorCkluZGV4OiBUb29scy9qc2MtY2xpL2pzYy1jbGkvUmVh
ZEV2YWxQcmludExvb3AubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9qc2MtY2xpL2pzYy1jbGkvUmVh
ZEV2YWxQcmludExvb3AubQkocmV2aXNpb24gMCkKKysrIFRvb2xzL2pzYy1jbGkvanNjLWNsaS9S
ZWFkRXZhbFByaW50TG9vcC5tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiUmVhZEV2YWxQcmludExvb3AuaCIKKworI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKyNpbXBvcnQgPGhpc3RlZGl0Lmg+CisKKyNpbXBv
cnQgIkpTUnVuTG9vcFRocmVhZC5oIgorCitAaW1wbGVtZW50YXRpb24gUmVhZEV2YWxQcmludExv
b3AgeworICAgIEpTUnVuTG9vcFRocmVhZCogX2pzVGhyZWFkOworICAgIEVkaXRMaW5lKiBfZWRp
dExpbmU7CisgICAgSGlzdG9yeSogX2hpc3Rvcnk7CisgICAgSGlzdEV2ZW50IF9oaXN0RXZlbnQ7
Cit9CisKKy0gKGlkKWluaXRXaXRoSlNUaHJlYWQ6KEpTUnVuTG9vcFRocmVhZCAqKWpzVGhyZWFk
Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgCisgICAgX2pzVGhyZWFkID0ganNUaHJlYWQ7CisgICAgCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBwcm9tcHQoRWRpdExpbmUqIGVkaXRM
aW5lKQoreworICAgIHJldHVybiAiPj4gIjsKK30KKworc3RhdGljIE5TU3RyaW5nICplc2NhcGVT
dHJpbmdGb3JPdXRwdXQoTlNTdHJpbmcgKmlucHV0KQoreworICAgIHJldHVybiBbaW5wdXQgc3Ry
aW5nQnlSZXBsYWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nOkAiXG4iIHdpdGhTdHJpbmc6QCJcXG4i
XTsKK30KKworLSAoYm9vbClwcm9jZXNzTmV4dElucHV0Cit7CisgICAgaW50IGNvdW50OworICAg
IGNoYXIqIGxpbmUgPSAoY2hhciAqKWVsX2dldHMoX2VkaXRMaW5lLCAmY291bnQpOworICAgIGlm
ICghY291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgbGluZVtjb3Vu
dCAtIDFdID0gMDsKKyAgICAgICAgCisgICAgTlNTdHJpbmcgKmlucHV0U3RyaW5nID0gW1tOU1N0
cmluZyBhbGxvY10gaW5pdFdpdGhDU3RyaW5nOmxpbmUgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5j
b2RpbmddOworICAgICAgICAKKyAgICBKU1ZhbHVlICpyZXN1bHQgPSBbX2pzVGhyZWFkIGRpZFJl
Y2VpdmVJbnB1dDppbnB1dFN0cmluZ107CisgICAgaWYgKFtyZXN1bHQgaXNTdHJpbmddKSB7Cisg
ICAgICAgIHByaW50ZigiPT4gJyVzJ1xuXG4iLCBbZXNjYXBlU3RyaW5nRm9yT3V0cHV0KFtyZXN1
bHQgdG9TdHJpbmddKSBVVEY4U3RyaW5nXSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRm
KCI9PiAlc1xuXG4iLCBbW3Jlc3VsdCB0b1N0cmluZ10gVVRGOFN0cmluZ10pOworICAgIH0KKyAg
ICAgICAgCisgICAgaWYgKGNvdW50KQorICAgICAgICBoaXN0b3J5KF9oaXN0b3J5LCAmX2hpc3RF
dmVudCwgSF9FTlRFUiwgbGluZSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy0gKHZv
aWQpcnVuCit7ICAgIAorICAgIF9lZGl0TGluZSA9IGVsX2luaXQoIm5vZGUuanNjIiwgc3RkaW4s
IHN0ZG91dCwgc3RkZXJyKTsKKyAgICBlbF9zZXQoX2VkaXRMaW5lLCBFTF9QUk9NUFQsICZwcm9t
cHQpOworICAgIAorICAgIF9oaXN0b3J5ID0gaGlzdG9yeV9pbml0KCk7CisgICAgaGlzdG9yeShf
aGlzdG9yeSwgJl9oaXN0RXZlbnQsIEhfU0VUU0laRSwgMTAwMCk7CisgICAgZWxfc2V0KF9lZGl0
TGluZSwgRUxfSElTVCwgaGlzdG9yeSwgX2hpc3RvcnkpOworICAgIAorICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAgICAgaWYgKCFbc2VsZiBw
cm9jZXNzTmV4dElucHV0XSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICAgICAgCisgICAgaGlzdG9yeV9lbmQoX2hpc3RvcnkpOworICAgIGVsX2VuZChfZWRp
dExpbmUpOworfQorCitAZW5kClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogVG9v
bHMvanNjLWNsaS9qc2MtY2xpL1J1bkxvb3BUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9q
c2MtY2xpL2pzYy1jbGkvUnVuTG9vcFRocmVhZC5oCShyZXZpc2lvbiAwKQorKysgVG9vbHMvanNj
LWNsaS9qc2MtY2xpL1J1bkxvb3BUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNp
Zm5kZWYgUnVuTG9vcFRocmVhZF9oCisjZGVmaW5lIFJ1bkxvb3BUaHJlYWRfaAorCitAaW50ZXJm
YWNlIFJ1bkxvb3BUaHJlYWQgOiBOU09iamVjdAorCit0eXBlZGVmIHZvaWQqICgqVGhyZWFkTWFp
blR5cGUpKHZvaWQqKTsKKysgKFRocmVhZE1haW5UeXBlKXRocmVhZE1haW47CisKKy0gKHZvaWQp
ZGlkRmluaXNoUnVuTG9vcEluaXRpYWxpemF0aW9uOworLSAodm9pZClzdGFydDsKKy0gKHZvaWQp
am9pbjsKKworQGVuZAorCisjZW5kaWYgLy8gUnVuTG9vcFRocmVhZF9oCisKSW5kZXg6IFRvb2xz
L2pzYy1jbGkvanNjLWNsaS9SdW5Mb29wVGhyZWFkLm0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvanNj
LWNsaS9qc2MtY2xpL1J1bkxvb3BUaHJlYWQubQkocmV2aXNpb24gMCkKKysrIFRvb2xzL2pzYy1j
bGkvanNjLWNsaS9SdW5Mb29wVGhyZWFkLm0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgIlJ1bkxvb3BUaHJlYWQuaCIKKyNpbXBvcnQgPHB0aHJl
YWQuaD4KKworQGltcGxlbWVudGF0aW9uIFJ1bkxvb3BUaHJlYWQgeworICAgIHB0aHJlYWRfdCBt
X3RocmVhZDsKKyAgICBwdGhyZWFkX211dGV4X3QgbV9sb2NrOworICAgIHB0aHJlYWRfY29uZF90
IG1fY29uZGl0aW9uOworICAgIGJvb2wgbV9sb29wSW5pdGlhbGl6ZWQ7Cit9CisKKysgKFRocmVh
ZE1haW5UeXBlKXRocmVhZE1haW4KK3sKKyAgICByZXR1cm4gMDsKK30KKworLSAoaWQpaW5pdAor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIAorICAgIG1fbG9vcEluaXRpYWxpemVkID0gZmFsc2U7CisgICAgICAgIAor
ICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmbV9sb2NrLCBOVUxMKTsKKyAgICBwdGhyZWFkX2NvbmRf
aW5pdCgmbV9jb25kaXRpb24sIE5VTEwpOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKWRlYWxsb2MKK3sKKyAgICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm1fbG9jayk7Cisg
ICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJm1fY29uZGl0aW9uKTsKK30KKworLSAodm9pZClkaWRG
aW5pc2hSdW5Mb29wSW5pdGlhbGl6YXRpb24KK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJm1f
bG9jayk7CisgICAgbV9sb29wSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIHB0aHJlYWRfY29uZF9z
aWduYWwoJm1fY29uZGl0aW9uKTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbV9sb2NrKTsK
K30KKworLSAodm9pZClzdGFydAoreworICAgIHB0aHJlYWRfY3JlYXRlKCZtX3RocmVhZCwgTlVM
TCwgW1tzZWxmIGNsYXNzXSB0aHJlYWRNYWluXSwgKF9fYnJpZGdlIHZvaWQgKikoc2VsZikpOwor
ICAgIAorICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbV9sb2NrKTsKKyAgICB3aGlsZSAoIW1fbG9v
cEluaXRpYWxpemVkKQorICAgICAgICBwdGhyZWFkX2NvbmRfd2FpdCgmbV9jb25kaXRpb24sICZt
X2xvY2spOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX2xvY2spOworfQorCistICh2b2lk
KWpvaW4KK3sKKyAgICB2b2lkKiByZXN1bHQ7CisgICAgcHRocmVhZF9qb2luKG1fdGhyZWFkLCAm
cmVzdWx0KTsKK30KKworQGVuZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFRv
b2xzL2pzYy1jbGkvanNjLWNsaS9TY3JpcHRJbnB1dFNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL2pzYy1jbGkvanNjLWNsaS9TY3JpcHRJbnB1dFNvdXJjZS5oCShyZXZpc2lvbiAwKQorKysg
VG9vbHMvanNjLWNsaS9qc2MtY2xpL1NjcmlwdElucHV0U291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgorCisjaWZuZGVmIFNjcmlwdElucHV0U291cmNlX2gKKyNkZWZpbmUgU2NyaXB0SW5w
dXRTb3VyY2VfaAorCitAY2xhc3MgSlNDb250ZXh0OworQGNsYXNzIEpTVmFsdWU7CisKK0BpbnRl
cmZhY2UgU2NyaXB0SW5wdXRTb3VyY2UgOiBOU09iamVjdAorCistIChpZClpbml0V2l0aENvbnRl
eHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CistICh2b2lkKWFkZFRvQ3VycmVudFJ1bkxvb3A7Cist
ICh2b2lkKXJlbW92ZUZyb21SZW1vdGVSdW5Mb29wOworLSAoSlNWYWx1ZSAqKXJ1blNjcmlwdFJl
bW90ZWx5OihOU1N0cmluZyAqKXNjcmlwdDsKKy0gKHZvaWQpZmluaXNoQXN5bmNDYWxsYmFjazoo
SlNWYWx1ZSAqKWNhbGxiYWNrIHdpdGhSZXN1bHQ6KGludClyZXN1bHQ7CistICh2b2lkKWRpZFJl
Y2VpdmVTaWduYWw7CisKK0BlbmQKKworI2VuZGlmIC8vIFNjcmlwdElucHV0U291cmNlX2gKKwpJ
bmRleDogVG9vbHMvanNjLWNsaS9qc2MtY2xpL1NjcmlwdElucHV0U291cmNlLm0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvanNjLWNsaS9qc2MtY2xpL1NjcmlwdElucHV0U291cmNlLm0JKHJldmlzaW9u
IDApCisrKyBUb29scy9qc2MtY2xpL2pzYy1jbGkvU2NyaXB0SW5wdXRTb3VyY2UubQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIlNjcmlwdElu
cHV0U291cmNlLmgiCisKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+
CisjaW1wb3J0IDxwdGhyZWFkLmg+CisKK3ZvaWQgc2NyaXB0SW5wdXRTb3VyY2VTY2hlZHVsZVJv
dXRpbmUgKHZvaWQgKmluZm8sIENGUnVuTG9vcFJlZiBydW5Mb29wLCBDRlN0cmluZ1JlZiBtb2Rl
KQoreworfQorCit2b2lkIHNjcmlwdElucHV0U291cmNlUGVyZm9ybVJvdXRpbmUgKHZvaWQgKmlu
Zm8pCit7CisgICAgU2NyaXB0SW5wdXRTb3VyY2UqICBzb3VyY2UgPSAoX19icmlkZ2UgU2NyaXB0
SW5wdXRTb3VyY2UgKilpbmZvOworICAgIFtzb3VyY2UgZGlkUmVjZWl2ZVNpZ25hbF07Cit9CisK
K3ZvaWQgc2NyaXB0SW5wdXRTb3VyY2VDYW5jZWxSb3V0aW5lICh2b2lkICppbmZvLCBDRlJ1bkxv
b3BSZWYgcnVuTG9vcCwgQ0ZTdHJpbmdSZWYgbW9kZSkKK3sKK30KKworQGltcGxlbWVudGF0aW9u
IFNjcmlwdElucHV0U291cmNlIHsKKyAgICBDRlJ1bkxvb3BTb3VyY2VSZWYgbV9zb3VyY2U7Cisg
ICAgQ0ZSdW5Mb29wUmVmIG1fcnVuTG9vcDsKKyAgICBOU011dGFibGVBcnJheSAqbV9pbnB1dFF1
ZXVlOworICAgIHB0aHJlYWRfbXV0ZXhfdCBtX2lucHV0TG9jazsKKyAgICAKKyAgICBOU011dGFi
bGVBcnJheSAqbV9vdXRwdXRRdWV1ZTsKKyAgICBwdGhyZWFkX211dGV4X3QgbV9vdXRwdXRMb2Nr
OworICAgIHB0aHJlYWRfY29uZF90IG1fb3V0cHV0Q29uZGl0aW9uOworICAgIAorICAgIEpTQ29u
dGV4dCAqbV9jb250ZXh0OworfQorCistIChpZClpbml0V2l0aENvbnRleHQ6KEpTQ29udGV4dCAq
KWNvbnRleHQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBDRlJ1bkxvb3BTb3VyY2VDb250ZXh0IHNvdXJj
ZUNvbnRleHQgPSB7CisgICAgICAgIDAsCisgICAgICAgIChfX2JyaWRnZSB2b2lkICopKHNlbGYp
LAorICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgICAgICBzY3JpcHRJ
bnB1dFNvdXJjZVNjaGVkdWxlUm91dGluZSwKKyAgICAgICAgc2NyaXB0SW5wdXRTb3VyY2VDYW5j
ZWxSb3V0aW5lLAorICAgICAgICBzY3JpcHRJbnB1dFNvdXJjZVBlcmZvcm1Sb3V0aW5lCisgICAg
fTsKKyAgICBtX3NvdXJjZSA9IENGUnVuTG9vcFNvdXJjZUNyZWF0ZShOVUxMLCAwLCAmc291cmNl
Q29udGV4dCk7CisgICAgCisgICAgbV9pbnB1dFF1ZXVlID0gW05TTXV0YWJsZUFycmF5IGFycmF5
XTsKKyAgICBtX291dHB1dFF1ZXVlID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICAKKyAg
ICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmbV9pbnB1dExv
Y2ssIE5VTEwpOworICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmbV9vdXRwdXRMb2NrLCBOVUxMKTsK
KyAgICBwdGhyZWFkX2NvbmRfaW5pdCgmbV9vdXRwdXRDb25kaXRpb24sIE5VTEwpOworICAgIAor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBwdGhyZWFkX211
dGV4X2Rlc3Ryb3koJm1faW5wdXRMb2NrKTsKKyAgICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm1f
b3V0cHV0TG9jayk7CisgICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJm1fb3V0cHV0Q29uZGl0aW9u
KTsKK30KKworLSAodm9pZClhZGRUb0N1cnJlbnRSdW5Mb29wCit7CisgICAgbV9ydW5Mb29wID0g
Q0ZSdW5Mb29wR2V0Q3VycmVudCgpOworICAgIENGUnVuTG9vcEFkZFNvdXJjZShtX3J1bkxvb3As
IG1fc291cmNlLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworfQorCistICh2b2lkKXJlbW92ZUZy
b21SZW1vdGVSdW5Mb29wCit7CisgICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKG1fcnVuTG9vcCwg
bV9zb3VyY2UsIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Cit9CisKKy0gKHZvaWQpZGlkUmVjZWl2
ZVNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQKK3sKKyAgICBKU1ZhbHVlICpyZXN1bHQgPSBbbV9j
b250ZXh0IGV2YWx1YXRlU2NyaXB0OnNjcmlwdF07CisgICAgCisgICAgaWYgKG1fY29udGV4dC5l
eGNlcHRpb24pIHsKKyAgICAgICAgcmVzdWx0ID0gbV9jb250ZXh0LmV4Y2VwdGlvbjsKKyAgICAg
ICAgbV9jb250ZXh0LmV4Y2VwdGlvbiA9IG5pbDsKKyAgICB9CisgICAgCisgICAgcHRocmVhZF9t
dXRleF9sb2NrKCZtX291dHB1dExvY2spOworICAgIFttX291dHB1dFF1ZXVlIGFkZE9iamVjdDpy
ZXN1bHRdOworICAgIHB0aHJlYWRfY29uZF9zaWduYWwoJm1fb3V0cHV0Q29uZGl0aW9uKTsKKyAg
ICBwdGhyZWFkX211dGV4X3VubG9jaygmbV9vdXRwdXRMb2NrKTsKK30KKworLSAodm9pZClkaWRS
ZWNlaXZlU2lnbmFsCit7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtX2lucHV0TG9jayk7Cisg
ICAgd2hpbGUgKFttX2lucHV0UXVldWUgY291bnRdKSB7CisgICAgICAgIE5TU3RyaW5nICpuZXh0
U2NyaXB0ID0gW21faW5wdXRRdWV1ZSBvYmplY3RBdEluZGV4OjBdOworICAgICAgICBbbV9pbnB1
dFF1ZXVlIHJlbW92ZU9iamVjdEF0SW5kZXg6MF07CisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZtX2lucHV0TG9jayk7CisgICAgICAgIAorICAgICAgICBbc2VsZiBkaWRSZWNlaXZlU2Ny
aXB0Om5leHRTY3JpcHRdOworICAgICAgICAKKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZt
X2lucHV0TG9jayk7CisgICAgfQorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX2lucHV0TG9j
ayk7Cit9CisKKy0gKEpTVmFsdWUgKilydW5TY3JpcHRSZW1vdGVseTooTlNTdHJpbmcgKilzY3Jp
cHQKK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJm1faW5wdXRMb2NrKTsKKyAgICBbbV9pbnB1
dFF1ZXVlIGFkZE9iamVjdDpzY3JpcHRdOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX2lu
cHV0TG9jayk7CisgICAgCisgICAgQ0ZSdW5Mb29wU291cmNlU2lnbmFsKG1fc291cmNlKTsKKyAg
ICBDRlJ1bkxvb3BXYWtlVXAobV9ydW5Mb29wKTsKKyAgICAKKyAgICBwdGhyZWFkX211dGV4X2xv
Y2soJm1fb3V0cHV0TG9jayk7CisgICAgd2hpbGUgKCFbbV9vdXRwdXRRdWV1ZSBjb3VudF0pCisg
ICAgICAgIHB0aHJlYWRfY29uZF93YWl0KCZtX291dHB1dENvbmRpdGlvbiwgJm1fb3V0cHV0TG9j
ayk7CisgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW21fb3V0cHV0UXVldWUgb2JqZWN0QXRJbmRleDow
XTsKKyAgICBbbV9vdXRwdXRRdWV1ZSByZW1vdmVPYmplY3RBdEluZGV4OjBdOworICAgIHB0aHJl
YWRfbXV0ZXhfdW5sb2NrKCZtX291dHB1dExvY2spOworICAgIAorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKKy0gKHZvaWQpZmluaXNoQXN5bmNDYWxsYmFjazooSlNWYWx1ZSAqKWNhbGxiYWNrIHdp
dGhSZXN1bHQ6KGludClyZXN1bHQKK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJm1faW5wdXRM
b2NrKTsKKyAgICBbbV9pbnB1dFF1ZXVlIGFkZE9iamVjdDpeeworICAgICAgICBpZiAocmVzdWx0
KSB7CisgICAgICAgICAgICBbY2FsbGJhY2sgY2FsbFdpdGhBcmd1bWVudHM6QFtdXTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBbY2FsbGJhY2sgY2FsbFdpdGhBcmd1
bWVudHM6QFtdXTsKKyAgICB9XTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbV9pbnB1dExv
Y2spOworICAgIAorICAgIENGUnVuTG9vcFNvdXJjZVNpZ25hbChtX3NvdXJjZSk7CisgICAgQ0ZS
dW5Mb29wV2FrZVVwKG1fcnVuTG9vcCk7Cit9CisKK0BlbmQKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCkluZGV4OiBUb29scy9qc2MtY2xpL2pzYy1jbGkvbWFpbi5tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL2pzYy1jbGkvanNjLWNsaS9tYWluLm0JKHJldmlzaW9uIDApCisrKyBUb29scy9qc2Mt
Y2xpL2pzYy1jbGkvbWFpbi5tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCAiQ0xJ
SW5zdGFuY2UuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCit7
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIENMSUluc3RhbmNlICppbnN0YW5jZSA9
IFtbQ0xJSW5zdGFuY2UgYWxsb2NdIGluaXRdOworICAgICAgICAKKyAgICAgICAgLy8gVE9ETzog
QWRkIHJlYWwgYXJndW1lbnRzIGhhbmRsaW5nLgorICAgICAgICBpZiAoYXJnYyA+IDEpCisgICAg
ICAgICAgICBbaW5zdGFuY2UgbG9hZEZpbGU6W05TU3RyaW5nIHN0cmluZ1dpdGhDU3RyaW5nOmFy
Z3ZbMV0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKKyAgICAgICAgICAgIAorICAg
ICAgICBbaW5zdGFuY2UgcnVuXTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
</data>

          </attachment>
      

    </bug>

</bugzilla>