<?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>174696</bug_id>
          
          <creation_ts>2017-07-20 16:18:54 -0700</creation_ts>
          <short_desc>Create regression tests for the JIT probe.</short_desc>
          <delta_ts>2017-07-24 07:47:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174645</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1330819</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-20 16:18:54 -0700</bug_when>
    <thetext>We should test that:
1. the probe is able to read the value of all CPU registers.
2. the probe is able to write the value of all CPU registers.
3. special case of (2): the probe is able to change the value of the stack pointer.
4. special case of (2): the probe is able to change the value of the program counter (where to execute upon returning from the probe).

&lt;rdar://problem/33436922&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331217</commentid>
    <comment_count>1</comment_count>
      <attachid>316149</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-21 17:34:10 -0700</bug_when>
    <thetext>Created attachment 316149
work in progress.

This patch already passes the probe masm tests on x86, x86_64, and ARMv7.  ARM64 won&apos;t pass the tests until we fix https://bugs.webkit.org/show_bug.cgi?id=174697.

Still need to add fpr registers to the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331279</commentid>
    <comment_count>2</comment_count>
      <attachid>316168</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-21 21:43:04 -0700</bug_when>
    <thetext>Created attachment 316168
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331438</commentid>
    <comment_count>3</comment_count>
      <attachid>316168</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-07-23 11:41:34 -0700</bug_when>
    <thetext>Comment on attachment 316168
proposed patch.

Nice. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331443</commentid>
    <comment_count>4</comment_count>
      <attachid>316168</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-23 13:06:35 -0700</bug_when>
    <thetext>Comment on attachment 316168
proposed patch.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331452</commentid>
    <comment_count>5</comment_count>
      <attachid>316168</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-23 13:35:06 -0700</bug_when>
    <thetext>Comment on attachment 316168
proposed patch.

Clearing flags on attachment: 316168

Committed r219790: &lt;http://trac.webkit.org/changeset/219790&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331453</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-23 13:35:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331573</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-07-24 03:18:58 -0700</bug_when>
    <thetext>(In reply to WebKit Commit Bot from comment #5)
&gt; Comment on attachment 316168 [details]
&gt; proposed patch.
&gt; 
&gt; Clearing flags on attachment: 316168
&gt; 
&gt; Committed r219790: &lt;http://trac.webkit.org/changeset/219790&gt;

It broke the CLOOP build, see build.webkit.org for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331606</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-24 07:47:27 -0700</bug_when>
    <thetext>(In reply to Csaba Osztrogonác from comment #7)
&gt; (In reply to WebKit Commit Bot from comment #5)
&gt; &gt; Comment on attachment 316168 [details]
&gt; &gt; proposed patch.
&gt; &gt; 
&gt; &gt; Clearing flags on attachment: 316168
&gt; &gt; 
&gt; &gt; Committed r219790: &lt;http://trac.webkit.org/changeset/219790&gt;
&gt; 
&gt; It broke the CLOOP build, see build.webkit.org for details.

Thanks for the report.  Fix landed in r219821: &lt;http://trac.webkit.org/r219821&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316149</attachid>
            <date>2017-07-21 17:34:10 -0700</date>
            <delta_ts>2017-07-21 21:43:04 -0700</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-174696.patch</filename>
            <type>text/plain</type>
            <size>33318</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE5NzU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDE3LTA3LTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
cmVhdGUgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIEpJVCBwcm9iZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDY5NgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzM0MzY5MjI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIG5ldyB0ZXN0bWFzbSB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyAg
ICAgICAgMS4gdGhlIHByb2JlIGlzIGFibGUgdG8gcmVhZCB0aGUgdmFsdWUgb2YgQ1BVIHJlZ2lz
dGVycy4KKyAgICAgICAgMi4gdGhlIHByb2JlIGlzIGFibGUgdG8gd3JpdGUgdGhlIHZhbHVlIG9m
IENQVSByZWdpc3RlcnMuCisgICAgICAgIDMuIHRoZSBwcm9iZSBpcyBhYmxlIHRvIHByZXNlcnZl
IGFsbCBDUFUgcmVnaXN0ZXJzLgorICAgICAgICA0LiBzcGVjaWFsIGNhc2Ugb2YgKDIpOiB0aGUg
cHJvYmUgaXMgYWJsZSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBzdGFjayBwb2ludGVyLgor
ICAgICAgICA1LiBzcGVjaWFsIGNhc2Ugb2YgKDIpOiB0aGUgcHJvYmUgaXMgYWJsZSB0byBjaGFu
Z2UgdGhlIHZhbHVlIG9mIHRoZSBwcm9ncmFtIGNvdW50ZXIKKyAgICAgICAgICAgaS5lLiB0aGUg
cHJvYmUgY2FuIGNoYW5nZSB3aGVyZSB0aGUgY29kZSBjb250aW51ZXMgZXhlY3V0aW5nIHVwb24g
cmV0dXJuaW5nIGZyb20KKyAgICAgICAgICAgdGhlIHByb2JlLgorCisgICAgICAgICogQ29uZmln
dXJhdGlvbnMvVG9vbEV4ZWN1dGFibGUueGNjb25maWc6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNQVVN0YXRlOjpwYyk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZTo6ZnApOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q1BVU3RhdGU6OnNwKToKKyAgICAgICAgKEpTQzo6UHJvYmVD
b250ZXh0OjpwYyk6CisgICAgICAgIChKU0M6OlByb2JlQ29udGV4dDo6ZnApOgorICAgICAgICAo
SlNDOjpQcm9iZUNvbnRleHQ6OnNwKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5jcHA6CisgICAgICAgIChKU0M6OmFybTY0UHJvYmVUcmFtcG9saW5lKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
UHJpbnRlcjo6cHJpbnRQQ1JlZ2lzdGVyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKGhpZGRlblRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQp
OgorICAgICAgICAodXNhZ2UpOgorICAgICAgICAoSlNDOjpuZXh0SUQpOgorICAgICAgICAoSlND
Ojppc1BDKToKKyAgICAgICAgKEpTQzo6aXNTUCk6CisgICAgICAgIChKU0M6OmlzRlApOgorICAg
ICAgICAoSlNDOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6aW52b2tlKToKKyAgICAgICAgKEpT
Qzo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgIChKU0M6OnRlc3RTaW1wbGUpOgorICAgICAgICAo
SlNDOjp0ZXN0UHJvYmVSZWFkc0FyZ3VtZW50UmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6dGVz
dFByb2JlV3JpdGVzQXJndW1lbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjp0ZXN0RnVuY3Rp
b25Ub1RyYXNoUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6dGVzdFByb2JlUHJlc2VydmVzR1BS
Uyk6CisgICAgICAgIChKU0M6OnRlc3RQcm9iZU1vZGlmaWVzU3RhY2tQb2ludGVyKToKKyAgICAg
ICAgKEpTQzo6dGVzdFByb2JlTW9kaWZpZXNQcm9ncmFtQ291bnRlcik6CisgICAgICAgIChKU0M6
OnJ1bik6CisgICAgICAgIChydW4pOgorICAgICAgICAobWFpbik6CisgICAgICAgICogYjMvYWly
L3Rlc3RhaXIuY3BwOgorICAgICAgICAodXNhZ2UpOgorICAgICAgICAqIHNoZWxsL0NNYWtlTGlz
dHMudHh0OgorCiAyMDE3LTA3LTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZWZhY3RvciBNQVNNIHByb2JlIENQVVN0YXRlIHRvIHVzZSBhcnJheXMgZm9yIHJl
Z2lzdGVyIHN0b3JhZ2UuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlv
bnMvVG9vbEV4ZWN1dGFibGUueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NvbmZpZ3VyYXRpb25zL1Rvb2xFeGVjdXRhYmxlLnhjY29uZmlnCShyZXZpc2lvbiAy
MTk3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvVG9vbEV4ZWN1
dGFibGUueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAgQ09ERV9TSUdO
X0VOVElUTEVNRU5UU19pb3NfbWluaWRvbSA9IGVudAogQ09ERV9TSUdOX0VOVElUTEVNRU5UU19p
b3NfdGVzdGFpciA9IGVudGl0bGVtZW50cy5wbGlzdDsKIENPREVfU0lHTl9FTlRJVExFTUVOVFNf
aW9zX3Rlc3RhcGkgPSBlbnRpdGxlbWVudHMucGxpc3Q7CiBDT0RFX1NJR05fRU5USVRMRU1FTlRT
X2lvc190ZXN0YjMgPSBlbnRpdGxlbWVudHMucGxpc3Q7CitDT0RFX1NJR05fRU5USVRMRU1FTlRT
X2lvc190ZXN0bWFzbSA9IGVudGl0bGVtZW50cy5wbGlzdDsKIENPREVfU0lHTl9FTlRJVExFTUVO
VFNfaW9zX3Rlc3RXYXNtID0gZW50aXRsZW1lbnRzLnBsaXN0OwogQ09ERV9TSUdOX0VOVElUTEVN
RU5UU19pb3NfdGVzdFJlZ0V4cCA9IGVudGl0bGVtZW50cy5wbGlzdDsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxOTc0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAJCQlidWlsZFBoYXNlcyA9ICgKIAkJCSk7CiAJCQlk
ZXBlbmRlbmNpZXMgPSAoCisJCQkJRkU1MzNDQUYxRjIxN0VDNjAwMTZBMUZFIC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCiAJCQkJMEY2MTgzNDcxQzQ1RjY3QTAwNzI0NTBCIC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCiAJCQkJMEY5MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCiAJCQkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCkBAIC0yNDYyLDYgKzI0NjMsOSBAQAogCQlGRTRENTVCODFBRTcxNkNB
MDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRENTVCNzFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9u
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkU1MDY4NjUxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1MDY4NjQxQUUyNDYz
OTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNTA2ODY3MUFFMjVFMjgwMDA5REFCNyAvKiBE
ZWZlcnJlZFNvdXJjZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU1MDY4NjYxQUUyNUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVt
cC5jcHAgKi87IH07CisJCUZFNTMzQ0E1MUYyMTdEQjMwMDE2QTFGRSAvKiBGb3VuZGF0aW9uLmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsK
KwkJRkU1MzNDQTYxRjIxN0RCMzAwMTZBMUZFIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5
MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCUZF
NTMzQ0FEMUYyMTdFQTUwMDE2QTFGRSAvKiB0ZXN0bWFzbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTUzM0NBMDFGMjE3QzMxMDAxNkExRkUgLyog
dGVzdG1hc20uY3BwICovOyB9OwogCQlGRTU0REVGQjFFOEM2RDg4MDBBODkyQzUgLyogRGlzYWxs
b3dWTVJlZW50cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFNTRERUZBMUU4QzZENzIwMEE4OTJDNSAvKiBEaXNhbGxvd1ZNUmVlbnRyeS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNTRERUZEMUU4
QzZFMzcwMEE4OTJDNSAvKiBEaXNhbGxvd1ZNUmVlbnRyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU0REVGQzFFOEM2REZGMDBBODkyQzUgLyog
RGlzYWxsb3dWTVJlZW50cnkuY3BwICovOyB9OwogCQlGRTU0REVGRjFFOEQ3NkZBMDBBODkyQzUg
LyogRGlzYWxsb3dTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU1NERFRkUxRThENzQyODAwQTg5MkM1IC8qIERpc2FsbG93U2NvcGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjYxNSw2ICsy
NjE5LDEzIEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDkzMkY1QjNFMDgyMkExQzcwMDcz
Njk3NTsKIAkJCXJlbW90ZUluZm8gPSAiSmF2YVNjcmlwdENvcmUgKFVwZ3JhZGVkKSI7CiAJCX07
CisJCUZFNTMzQ0FFMUYyMTdFQzYwMDE2QTFGRSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8g
PSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwg
PSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94
eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSBGRTUzM0NBMTFGMjE3REIzMDAx
NkExRkU7CisJCQlyZW1vdGVJbmZvID0gdGVzdG1hc207CisJCX07CiAvKiBFbmQgUEJYQ29udGFp
bmVySXRlbVByb3h5IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCkBAIC01MTE0LDYgKzUxMjUsOCBAQAogCQlGRTRENTVCNzFBRTcxNkNBMDA1
MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEl0ZXJhdGlvblN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTUw
Njg2NDFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVtcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3Vy
Y2VEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVycmVk
U291cmNlRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNTMzQ0EwMUYy
MTdDMzEwMDE2QTFGRSAvKiB0ZXN0bWFzbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB0ZXN0bWFz
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNTMzQ0FDMUYyMTdEQjQwMDE2
QTFGRSAvKiB0ZXN0bWFzbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZp
bGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAw
OyBwYXRoID0gdGVzdG1hc207IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJ
CUZFNTRERUZBMUU4QzZENzIwMEE4OTJDNSAvKiBEaXNhbGxvd1ZNUmVlbnRyeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNhbGxvd1ZNUmVlbnRyeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTU0REVGQzFFOEM2REZGMDBBODkyQzUgLyogRGlzYWxsb3dW
TVJlZW50cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzYWxs
b3dWTVJlZW50cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU0REVGRTFF
OEQ3NDI4MDBBODkyQzUgLyogRGlzYWxsb3dTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEaXNhbGxvd1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC01MjQ2LDYgKzUyNTksMTUgQEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKKwkJRkU1MzNDQTQxRjIxN0RCMzAwMTZBMUZFIC8qIEZyYW1l
d29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlGRTUzM0NBNTFGMjE3
REIzMDAxNkExRkUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJ
CQlGRTUzM0NBNjFGMjE3REIzMDAxNkExRkUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CisJCX07CiAvKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwogCiAvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCkBAIC01MjYxLDYgKzUyODMsNyBAQAog
CQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJNjUxMTIzMDUx
NDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCiAJCQkJOTMyRjVCRDkwODIyQTFDNzAw
NzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLywKKwkJCQlGRTUzM0NBQzFGMjE3
REI0MDAxNkExRkUgLyogdGVzdG1hc20gKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTc2MTIsNiArNzYzNSw3IEBACiAJCQkJRkU2
M0RENTUxRUE5QkM1RDAwMTAzQTY5IC8qIFByaW50ZXIuY3BwICovLAogCQkJCUZFNjNERDUzMUVB
OUI2MEUwMDEwM0E2OSAvKiBQcmludGVyLmggKi8sCiAJCQkJOTY4OENCMTQwRUQxMkI0RTAwMUQ2
NDlGIC8qIFg4NkFzc2VtYmxlci5oICovLAorCQkJCUZFNTMzQ0EwMUYyMTdDMzEwMDE2QTFGRSAv
KiB0ZXN0bWFzbS5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IGFzc2VtYmxlcjsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC05NzQ2LDYgKzk3NzAsMjIgQEAKIAkJCXByb2R1Y3RSZWZl
cmVuY2UgPSA5MzJGNUJFMTA4MjJBMUM3MDA3MzY5NzUgLyoganNjICovOwogCQkJcHJvZHVjdFR5
cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKIAkJfTsKKwkJRkU1MzNDQTExRjIx
N0RCMzAwMTZBMUZFIC8qIHRlc3RtYXNtICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0
OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEZFNTMzQ0E3MUYyMTdEQjMwMDE2QTFGRSAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdG1hc20i
ICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJRkU1MzNDQTIxRjIxN0RCMzAwMTZBMUZFIC8q
IFNvdXJjZXMgKi8sCisJCQkJRkU1MzNDQTQxRjIxN0RCMzAwMTZBMUZFIC8qIEZyYW1ld29ya3Mg
Ki8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAo
CisJCQkpOworCQkJbmFtZSA9IHRlc3RtYXNtOworCQkJcHJvZHVjdE5hbWUgPSB0ZXN0YXBpOwor
CQkJcHJvZHVjdFJlZmVyZW5jZSA9IEZFNTMzQ0FDMUYyMTdEQjQwMDE2QTFGRSAvKiB0ZXN0bWFz
bSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7CisJ
CX07CiAvKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYUHJv
amVjdCBzZWN0aW9uICovCkBAIC05Nzg1LDYgKzk4MjUsNyBAQAogCQkJCTVENkIyQTQ3MTUyQjlF
MTcwMDUyMzFERSAvKiBUZXN0IFRvb2xzICovLAogCQkJCTBGOTMyNzRFMUMyMEJDQkEwMENGNjU2
NCAvKiBkeW5iZW5jaCAqLywKIAkJCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFp
ciAqLywKKwkJCQlGRTUzM0NBMTFGMjE3REIzMDAxNkExRkUgLyogdGVzdG1hc20gKi8sCiAJCQkp
OwogCQl9OwogLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwpAQCAtMTEwMzEsNiArMTEwNzIs
MTQgQEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKKwkJRkU1MzNDQTIxRjIxN0RCMzAwMTZBMUZFIC8qIFNvdXJjZXMgKi8gPSB7CisJCQlp
c2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlGRTUzM0NBRDFGMjE3RUE1MDAxNkExRkUgLyogdGVzdG1h
c20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CisJCX07CiAvKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlv
biAqLwogCiAvKiBCZWdpbiBQQlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KQEAgLTExMTE0
LDYgKzExMTYzLDExIEBACiAJCQl0YXJnZXQgPSA5MzJGNUIzRTA4MjJBMUM3MDA3MzY5NzUgLyog
SmF2YVNjcmlwdENvcmUgKi87CiAJCQl0YXJnZXRQcm94eSA9IDkzMkY1QkU2MDgyMkExQzcwMDcz
Njk3NSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CiAJCX07CisJCUZFNTMzQ0FGMUYyMTdF
QzYwMDE2QTFGRSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFy
Z2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IEZFNTMzQ0ExMUYyMTdEQjMwMDE2QTFGRSAvKiB0
ZXN0bWFzbSAqLzsKKwkJCXRhcmdldFByb3h5ID0gRkU1MzNDQUUxRjIxN0VDNjAwMTZBMUZFIC8q
IFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIC8qIEVuZCBQQlhUYXJnZXREZXBlbmRl
bmN5IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAq
LwpAQCAtMTE1NTYsNiArMTE2MTAsMzggQEAKIAkJCX07CiAJCQluYW1lID0gUHJvZmlsaW5nOwog
CQl9OworCQlGRTUzM0NBODFGMjE3REIzMDAxNkExRkUgLyogRGVidWcgKi8gPSB7CisJCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0g
QkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOwor
CQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSki
OworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJRkU1MzNDQTkxRjIxN0RCMzAwMTZB
MUZFIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJ
CWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8q
IFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQ
Uk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNl
OworCQl9OworCQlGRTUzM0NBQTFGMjE3REIzMDAxNkExRkUgLyogUHJvZmlsaW5nICovID0gewor
CQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVy
ZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZp
ZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VU
X05BTUUpIjsKKwkJCX07CisJCQluYW1lID0gUHJvZmlsaW5nOworCQl9OworCQlGRTUzM0NBQjFG
MjE3REIzMDAxNkExRkUgLyogUHJvZHVjdGlvbiAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkw
MEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRp
bmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7CisJCQl9OworCQkJ
bmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KQEAgLTEx
NzI0LDYgKzExODEwLDE3IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7
CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQlGRTUz
M0NBNzFGMjE3REIzMDAxNkExRkUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhO
YXRpdmVUYXJnZXQgInRlc3RtYXNtIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxp
c3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUZFNTMzQ0E4MUYyMTdEQjMwMDE2
QTFGRSAvKiBEZWJ1ZyAqLywKKwkJCQlGRTUzM0NBOTFGMjE3REIzMDAxNkExRkUgLyogUmVsZWFz
ZSAqLywKKwkJCQlGRTUzM0NBQTFGMjE3REIzMDAxNkExRkUgLyogUHJvZmlsaW5nICovLAorCQkJ
CUZFNTMzQ0FCMUYyMTdEQjMwMDE2QTFGRSAvKiBQcm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9u
TmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAvKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0
aW9uICovCiAJfTsKIAlyb290T2JqZWN0ID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFBy
b2plY3Qgb2JqZWN0ICovOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjE5NzQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODQ3LDcgKzE4NDcsNyBAQCBwdWJsaWM6CiAgICAgLy8gTWFjcm9Bc3NlbWJsZXIuCiAgICAgdm9p
ZCBwcm9iZShQcm9iZUZ1bmN0aW9uLCB2b2lkKiBhcmcpOwogCi0gICAgdm9pZCBwcm9iZShzdGQ6
OmZ1bmN0aW9uPHZvaWQoUHJvYmVDb250ZXh0Kik+KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHByb2JlKHN0ZDo6ZnVuY3Rpb248dm9pZChQcm9iZUNvbnRleHQqKT4pOwogI2VuZGlmIC8v
IEVOQUJMRShNQVNNX1BST0JFKQogCiAgICAgLy8gTGV0J3MgeW91IHByaW50IGZyb20geW91ciBK
SVQgZ2VuZXJhdGVkIGNvZGUuCkBAIC0xODY5LDkgKzE4NjksOSBAQCBzdHJ1Y3QgTWFjcm9Bc3Nl
bWJsZXI6OkNQVVN0YXRlIHsKICAgICBpbmxpbmUgdWludHB0cl90JiBzcHIoU1BSZWdpc3RlcklE
KTsKICAgICBpbmxpbmUgZG91YmxlJiBmcHIoRlBSZWdpc3RlcklEKTsKICAgICAKLSAgICBpbmxp
bmUgdWludHB0cl90JiBwYygpOwotICAgIGlubGluZSB1aW50cHRyX3QmIGZwKCk7Ci0gICAgaW5s
aW5lIHVpbnRwdHJfdCYgc3AoKTsKKyAgICBpbmxpbmUgdm9pZComIHBjKCk7CisgICAgaW5saW5l
IHZvaWQqJiBmcCgpOworICAgIGlubGluZSB2b2lkKiYgc3AoKTsKICAgICAKICAgICB1aW50cHRy
X3QgZ3Byc1tNYWNyb0Fzc2VtYmxlcjo6bnVtYmVyT2ZSZWdpc3RlcnMoKV07CiAgICAgdWludHB0
cl90IHNwcnNbTWFjcm9Bc3NlbWJsZXI6Om51bWJlck9mU1BSZWdpc3RlcnMoKV07CkBAIC0xODk2
LDE0ICsxODk2LDE0IEBAIGlubGluZSBkb3VibGUmIE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZToK
ICAgICByZXR1cm4gZnByc1tpZF07CiB9CiAKLWlubGluZSB1aW50cHRyX3QmIE1hY3JvQXNzZW1i
bGVyOjpDUFVTdGF0ZTo6cGMoKQoraW5saW5lIHZvaWQqJiBNYWNyb0Fzc2VtYmxlcjo6Q1BVU3Rh
dGU6OnBjKCkKIHsKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQotICAgIHJldHVybiBzcHIo
WDg2UmVnaXN0ZXJzOjplaXApOworICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KCZzcHIoWDg2UmVnaXN0ZXJzOjplaXApKTsKICNlbGlmIENQVShBUk02NCkKLSAgICByZXR1cm4g
c3ByKEFSTTY0UmVnaXN0ZXJzOjpwYyk7CisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJnNwcihBUk02NFJlZ2lzdGVyczo6cGMpKTsKICNlbGlmIENQVShBUk1fVEhVTUIyKSB8
fCBDUFUoQVJNX1RSQURJVElPTkFMKQotICAgIHJldHVybiBncHIoQVJNUmVnaXN0ZXJzOjpwYyk7
CisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmdwcihBUk1SZWdpc3RlcnM6
OnBjKSk7CiAjZWxpZiBDUFUoTUlQUykKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogI2Vsc2UKQEAgLTE5MTEsMzEgKzE5MTEsMzEgQEAgaW5saW5lIHVpbnRwdHJfdCYgTWFjcm9B
c3NlbWJsZXI6OkNQVVN0YQogI2VuZGlmCiB9CiAKLWlubGluZSB1aW50cHRyX3QmIE1hY3JvQXNz
ZW1ibGVyOjpDUFVTdGF0ZTo6ZnAoKQoraW5saW5lIHZvaWQqJiBNYWNyb0Fzc2VtYmxlcjo6Q1BV
U3RhdGU6OmZwKCkKIHsKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQotICAgIHJldHVybiBn
cHIoWDg2UmVnaXN0ZXJzOjplYnApOworICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZncHIoWDg2UmVnaXN0ZXJzOjplYnApKTsKICNlbGlmIENQVShBUk02NCkKLSAgICByZXR1
cm4gZ3ByKEFSTTY0UmVnaXN0ZXJzOjpmcCk7CisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJmdwcihBUk02NFJlZ2lzdGVyczo6ZnApKTsKICNlbGlmIENQVShBUk1fVEhVTUIy
KSB8fCBDUFUoQVJNX1RSQURJVElPTkFMKQotICAgIHJldHVybiBncHIoQVJNUmVnaXN0ZXJzOjpm
cCk7CisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmdwcihBUk1SZWdpc3Rl
cnM6OmZwKSk7CiAjZWxpZiBDUFUoTUlQUykKLSAgICByZXR1cm4gZ3ByKE1JUFNSZWdpc3RlcnM6
OmZwKTsKKyAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZ3ByKE1JUFNSZWdp
c3RlcnM6OmZwKSk7CiAjZWxzZQogI2Vycm9yICJVbnN1cHBvcnRlZCBDUFUiCiAjZW5kaWYKIH0K
IAotaW5saW5lIHVpbnRwdHJfdCYgTWFjcm9Bc3NlbWJsZXI6OkNQVVN0YXRlOjpzcCgpCitpbmxp
bmUgdm9pZComIE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZTo6c3AoKQogewogI2lmIENQVShYODYp
IHx8IENQVShYODZfNjQpCi0gICAgcmV0dXJuIGdwcihYODZSZWdpc3RlcnM6OmVzcCk7CisgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmdwcihYODZSZWdpc3RlcnM6OmVzcCkp
OwogI2VsaWYgQ1BVKEFSTTY0KQotICAgIHJldHVybiBncHIoQVJNNjRSZWdpc3RlcnM6OnNwKTsK
KyAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZ3ByKEFSTTY0UmVnaXN0ZXJz
OjpzcCkpOwogI2VsaWYgQ1BVKEFSTV9USFVNQjIpIHx8IENQVShBUk1fVFJBRElUSU9OQUwpCi0g
ICAgcmV0dXJuIGdwcihBUk1SZWdpc3RlcnM6OnNwKTsKKyAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmZ3ByKEFSTVJlZ2lzdGVyczo6c3ApKTsKICNlbGlmIENQVShNSVBTKQot
ICAgIHJldHVybiBncHIoTUlQU1JlZ2lzdGVyczo6c3ApOworICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKio+KCZncHIoTUlQU1JlZ2lzdGVyczo6c3ApKTsKICNlbHNlCiAjZXJyb3Ig
IlVuc3VwcG9ydGVkIENQVSIKICNlbmRpZgpAQCAtMTk0Niw3ICsxOTQ2LDcgQEAgc3RydWN0IFBy
b2JlQ29udGV4dCB7CiAgICAgdXNpbmcgUmVnaXN0ZXJJRCA9IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEOwogICAgIHVzaW5nIFNQUmVnaXN0ZXJJRCA9IE1hY3JvQXNzZW1ibGVyOjpTUFJlZ2lz
dGVySUQ7CiAgICAgdXNpbmcgRlBSZWdpc3RlcklEID0gTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0
ZXJJRDsKLQorICAgIAogICAgIFByb2JlRnVuY3Rpb24gcHJvYmVGdW5jdGlvbjsKICAgICB2b2lk
KiBhcmc7CiAgICAgQ1BVU3RhdGUgY3B1OwpAQCAtMTk1OCw3ICsxOTU4LDEyIEBAIHN0cnVjdCBQ
cm9iZUNvbnRleHQgewogICAgIGNvbnN0IGNoYXIqIGdwck5hbWUoUmVnaXN0ZXJJRCBpZCkgeyBy
ZXR1cm4gY3B1Lmdwck5hbWUoaWQpOyB9CiAgICAgY29uc3QgY2hhciogc3ByTmFtZShTUFJlZ2lz
dGVySUQgaWQpIHsgcmV0dXJuIGNwdS5zcHJOYW1lKGlkKTsgfQogICAgIGNvbnN0IGNoYXIqIGZw
ck5hbWUoRlBSZWdpc3RlcklEIGlkKSB7IHJldHVybiBjcHUuZnByTmFtZShpZCk7IH0KKworICAg
IHZvaWQqJiBwYygpIHsgcmV0dXJuIGNwdS5wYygpOyB9CisgICAgdm9pZComIGZwKCkgeyByZXR1
cm4gY3B1LmZwKCk7IH0KKyAgICB2b2lkKiYgc3AoKSB7IHJldHVybiBjcHUuc3AoKTsgfQogfTsK
KwogI2VuZGlmIC8vIEVOQUJMRShNQVNNX1BST0JFKQogICAgIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NC5jcHAJKHJldmlzaW9uIDIxOTc0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1Nyw4ICs0NTcsOCBAQCBhc20gKAogCiBzdGF0aWMgdm9pZCBhcm02NFByb2JlVHJhbXBv
bGluZShQcm9iZUNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgdWludHB0cl90IG9yaWdTUCA9IGNv
bnRleHQtPmNwdS5zcCgpOwotICAgIHVpbnRwdHJfdCBvcmlnUEMgPSBjb250ZXh0LT5jcHUucGMo
KTsKKyAgICB2b2lkKiBvcmlnU1AgPSBjb250ZXh0LT5jcHUuc3AoKTsKKyAgICB2b2lkKiBvcmln
UEMgPSBjb250ZXh0LT5jcHUucGMoKTsKICAgICAKICAgICBjb250ZXh0LT5wcm9iZUZ1bmN0aW9u
KGNvbnRleHQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcAkocmV2aXNpb24gMjE5NzQ1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw4IEBAIHZvaWQgcHJpbnRBbGxSZWdp
c3RlcnMoUHJpbnRTdHJlYW0mIG91dCwKIHZvaWQgcHJpbnRQQ1JlZ2lzdGVyKFByaW50U3RyZWFt
JiBvdXQsIENvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgYXV0byBjcHUgPSBjb250ZXh0LnByb2Jl
Q29udGV4dC5jcHU7Ci0gICAgaW50cHRyX3QgdmFsdWUgPSBjcHUucGMoKTsKLSAgICBvdXQucHJp
bnRmKCJwYzo8JXAgJWxkPiIsIGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWUpLCB2YWx1ZSk7Cisg
ICAgdm9pZCogdmFsdWUgPSBjcHUucGMoKTsKKyAgICBvdXQucHJpbnRmKCJwYzo8JXAgJWxkPiIs
IHZhbHVlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKSk7CiB9CiAKIHZvaWQgcHJpbnRS
ZWdpc3RlcklEKFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQmIGNvbnRleHQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKKyNpbmNsdWRlICJDUFUuaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVk
ZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNs
dWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0
Zi9OdW1iZXJPZkNvcmVzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisvLyBXZSBk
b24ndCBoYXZlIGEgTk9fUkVUVVJOX0RVRV9UT19FWElULCBub3Igc2hvdWxkIHdlLiBUaGF0J3Mg
cmlkaWN1bG91cy4KK3N0YXRpYyBib29sIGhpZGRlblRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVw
aWQoKSB7IHJldHVybiB0cnVlOyB9CisKK3N0YXRpYyB2b2lkIHVzYWdlKCkKK3sKKyAgICBkYXRh
TG9nKCJVc2FnZTogdGVzdG1hc20gWzxmaWx0ZXI+XVxuIik7CisgICAgaWYgKGhpZGRlblRydXRo
QmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQoKSkKKyAgICAgICAgZXhpdCgxKTsKK30KKworI2lmIEVO
QUJMRShKSVQpCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSB7CisKK1N0YXRp
Y0xvY2sgY3Jhc2hMb2NrOworCit0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChDQ2FsbEhlbHBl
cnMmKT4gR2VuZXJhdG9yOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIG5leHRJRChUIGlkKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxUPihpZCArIDEpOyB9CisKKyNkZWZpbmUgVEVTVFdPUkQ2NCAw
eGMwZGVmZWZlYmVlZjAwMDAKKyNkZWZpbmUgVEVTVFdPUkQzMiAweGJlZWYwMDAwCisKKyNkZWZp
bmUgdGVzdFdvcmQzMih4KSAoVEVTVFdPUkQzMiArICh4KSkKKyNkZWZpbmUgdGVzdFdvcmQ2NCh4
KSAoVEVTVFdPUkQ2NCArICh4KSkKKworI2lmIEVOQUJMRShKU1ZBTFVFNjQpCisjZGVmaW5lIHRl
c3RXb3JkKHgpIHRlc3RXb3JkNjQoeCkKKyNlbHNlCisjZGVmaW5lIHRlc3RXb3JkKHgpIHRlc3RX
b3JkMzIoeCkKKyNlbmRpZgorCisvLyBOb3RoaW5nIGZhbmN5IGZvciBub3c7IHdlIGp1c3QgdXNl
IHRoZSBleGlzdGluZyBXVEYgYXNzZXJ0aW9uIG1hY2hpbmVyeS4KKyNkZWZpbmUgQ0hFQ0soeCkg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgaWYgKCEhKHgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3Jhc2hMb2NrLmxv
Y2soKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9Q
UkVUVFlfRlVOQ1RJT04sICN4KTsgXAorICAgICAgICBDUkFTSCgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZh
bHNlKQorCitib29sIGlzUEMoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgaWQpCit7CisjaWYg
Q1BVKEFSTV9USFVNQjIpIHx8IENQVShBUk1fVFJBRElUSU9OQUwpCisgICAgcmV0dXJuIGlkID09
IEFSTVJlZ2lzdGVyczo6cGM7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpZCk7CisgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2Jvb2wgaXNTUChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBpZCkKK3sKKyAgICByZXR1cm4gaWQgPT0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyOworfQorCitib29sIGlzRlAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgaWQp
Cit7CisgICAgcmV0dXJuIGlkID09IE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
cjsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbXBpbGUoR2VuZXJhdG9yIGdlbmVyYXRl
KQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgZ2VuZXJhdGUoaml0KTsKKyAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShsaW5rQnVmZmVyLCAoInRlc3RtYXNtIGNvbXBpbGF0aW9uIikpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitUIGludm9rZShNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBUICgqZnVuY3Rp
b24pKEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihjb2Rl
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1l
bnRzLi4uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorVCBjb21waWxlQW5kUnVuKEdlbmVyYXRvciBnZW5lcmF0b3IsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCit7CisgICAgcmV0dXJuIGludm9rZTxUPihjb21waWxlKGdlbmVyYXRvciksIGFyZ3Vt
ZW50cy4uLik7Cit9CisKK3ZvaWQgdGVzdFNpbXBsZSgpCit7CisgICAgQ0hFQ0soY29tcGlsZUFu
ZFJ1bjxpbnQ+KFtdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICBqaXQuZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoNDIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5lbWl0RnVuY3Rp
b25FcGlsb2d1ZSgpOworICAgICAgICBqaXQucmV0KCk7CisgICAgfSkgPT0gNDIpOworfQorCit2
b2lkIHRlc3RQcm9iZVJlYWRzQXJndW1lbnRSZWdpc3RlcnMoKQoreworICAgIGJvb2wgc3VjY2Vz
cyA9IHRydWU7CisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihbJl0gKENDYWxsSGVscGVycyYgaml0
KSB7CisgICAgICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworI2lmIEVOQUJMRShKU1ZB
TFVFNjQpCisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHRlc3RX
b3JkKDApKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tNjQodGVzdFdvcmQoMSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCh0ZXN0V29yZCgy
KSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTY0KHRlc3RXb3JkKDMpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyNl
bHNlCisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHRlc3RXb3Jk
KDApKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIodGVzdFdvcmQoMSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih0ZXN0V29yZCgyKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHRlc3RXb3JkKDMpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyNlbmRp
ZgorCisgICAgICAgIGppdC5wcm9iZShbJl0gKFByb2JlQ29udGV4dCogY29udGV4dCkgeworICAg
ICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY29udGV4dC0+Z3ByKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkgPT0gdGVzdFdvcmQoMCk7CisgICAgICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAm
JiBjb250ZXh0LT5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSA9PSB0ZXN0V29yZCgxKTsKKyAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNvbnRleHQtPmdwcihHUFJJbmZvOjphcmd1
bWVudEdQUjIpID09IHRlc3RXb3JkKDIpOworICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3Mg
JiYgY29udGV4dC0+Z3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMykgPT0gdGVzdFdvcmQoMyk7Cisg
ICAgICAgIH0pOworICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAg
aml0LnJldCgpOworICAgIH0pOworICAgIENIRUNLKHN1Y2Nlc3MpOworfQorCit2b2lkIHRlc3RQ
cm9iZVdyaXRlc0FyZ3VtZW50UmVnaXN0ZXJzKCkKK3sKKyAgICAvLyBUaGlzIHRlc3QgcmVsaWVz
IG9uIHRlc3RQcm9iZVJlYWRzQXJndW1lbnRSZWdpc3RlcnMoKSBoYXZpbmcgYWxyZWFkeSB2YWxp
ZGF0ZWQKKyAgICAvLyB0aGF0IHdlIGNhbiByZWFkIGZyb20gYXJndW1lbnQgcmVnaXN0ZXJzLiBX
ZSdsbCB1c2UgdGhhdCBhYmlsaXR5IHRvIHZhbGlkYXRlCisgICAgLy8gdGhhdCBvdXIgd3JpdGVz
IGRpZCB0YWtlIGVmZmVjdC4KKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGNvbXBpbGVB
bmRSdW48dm9pZD4oWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICBqaXQuZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKKworICAgICAgICAvLyBQcmUtaW5pdGlhbGl6ZSB3aXRoIG5vbi1l
eHBlY3RlZCB2YWx1ZXMuCisjaWYgRU5BQkxFKEpTVkFMVUU2NCkKKyAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02
NCgwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tNjQoMCksIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisjZWxzZQorICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDApLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIz
KTsKKyNlbmRpZgorCisgICAgICAgIC8vIFdyaXRlIGV4cGVjdGVkIHZhbHVlcy4KKyAgICAgICAg
aml0LnByb2JlKFtdIChQcm9iZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0gdGVzdFdvcmQoMCk7CisgICAgICAgICAg
ICBjb250ZXh0LT5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSA9IHRlc3RXb3JkKDEpOworICAg
ICAgICAgICAgY29udGV4dC0+Z3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMikgPSB0ZXN0V29yZCgy
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjMpID0gdGVz
dFdvcmQoMyk7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgZXhwZWN0
ZWQgdmFsdWVzIHdlcmUgd3JpdHRlbi4KKyAgICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmVDb250
ZXh0KiBjb250ZXh0KSB7CisgICAgICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjb250ZXh0
LT5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9PSB0ZXN0V29yZCgwKTsKKyAgICAgICAgICAg
IHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNvbnRleHQtPmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjEp
ID09IHRlc3RXb3JkKDEpOworICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY29udGV4
dC0+Z3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMikgPT0gdGVzdFdvcmQoMik7CisgICAgICAgICAg
ICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjb250ZXh0LT5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIz
KSA9PSB0ZXN0V29yZCgzKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaml0LmVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsKKyAgICBDSEVDSyhzdWNj
ZXNzKTsKK30KKworc3RhdGljIE5FVkVSX0lOTElORSBOT1RfVEFJTF9DQUxMRUQgaW50IHRlc3RG
dW5jdGlvblRvVHJhc2hSZWdpc3RlcnMoaW50IGEsIGludCBiLCBpbnQgYywgaW50IGQsIGludCBl
LCBpbnQgZiwgaW50IGcsIGludCBoLCBpbnQgaSwgaW50IGopCit7CisgICAgaWYgKGogPiAwKQor
ICAgICAgICByZXR1cm4gdGVzdEZ1bmN0aW9uVG9UcmFzaFJlZ2lzdGVycyhhICsgMSwgYiArIGEs
IGMgKyBiLCBkICsgNSwgZSAtIGEsIGYgKiAxLjUsIGcgXiBhLCBoIC0gYiwgaSwgaiAtIDEpOwor
ICAgIHJldHVybiBhICsgMTsKK30KKwordm9pZCB0ZXN0UHJvYmVQcmVzZXJ2ZXNHUFJTKCkKK3sK
KyAgICAvLyBUaGlzIHRlc3QgcmVsaWVzIG9uIHRlc3RQcm9iZVJlYWRzQXJndW1lbnRSZWdpc3Rl
cnMoKSBhbmQgdGVzdFByb2JlV3JpdGVzQXJndW1lbnRSZWdpc3RlcnMoKQorICAgIC8vIGhhdmlu
ZyBhbHJlYWR5IHZhbGlkYXRlZCB0aGF0IHdlIGNhbiByZWFkIGFuZCB3cml0ZSBmcm9tIHJlZ2lz
dGVycy4gV2UnbGwgdXNlIHRoZXNlIGFiaWxpdGllcworICAgIC8vIHRvIHZhbGlkYXRlIHRoYXQg
dGhlIHByb2JlIHByZXNlcnZlcyByZWdpc3RlciB2YWx1ZXMuCisgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q1BVU3RhdGUgb3JpZ2luYWxTdGF0ZTsKKworICAg
IGNvbXBpbGVBbmRSdW48dm9pZD4oWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICBq
aXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworICAgICAgICAvLyBXcml0ZSBleHBlY3RlZCB2
YWx1ZXMgaW50byB0aGUgcmVnaXN0ZXJzIChleGNlcHQgZm9yIHNwLCBmcCwgYW5kIHBjKS4KKyAg
ICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmVDb250ZXh0KiBjb250ZXh0KSB7CisgICAgICAgICAg
ICBmb3IgKGF1dG8gaWQgPSBDQ2FsbEhlbHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsgaWQgPD0gQ0Nh
bGxIZWxwZXJzOjpsYXN0UmVnaXN0ZXIoKTsgaWQgPSBuZXh0SUQoaWQpKSB7CisgICAgICAgICAg
ICAgICAgb3JpZ2luYWxTdGF0ZS5ncHIoaWQpID0gY29udGV4dC0+Z3ByKGlkKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXNQQyhpZCkgfHwgaXNTUChpZCkgfHwgaXNGUChpZCkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmdwcihpZCkgPSB0
ZXN0V29yZChzdGF0aWNfY2FzdDxpbnQ+KGlkKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworCisgICAgICAgIC8vIEludm9rZSB0aGUgcHJvYmUgdG8gY2FsbCBhIGxvdCBvZiBmdW5jdGlv
bnMgYW5kIHRyYXNoIHJlZ2lzdGVyIHZhbHVlcy4KKyAgICAgICAgaml0LnByb2JlKFsmXSAoUHJv
YmVDb250ZXh0KikgeworICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgKHRlc3RGdW5j
dGlvblRvVHJhc2hSZWdpc3RlcnMoMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSkgPT0gMTAp
OworICAgICAgICB9KTsKKworICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSByZWdpc3RlcnMg
aGF2ZSB0aGUgZXhwZWN0ZWQgdmFsdWVzLgorICAgICAgICBqaXQucHJvYmUoWyZdIChQcm9iZUNv
bnRleHQqIGNvbnRleHQpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBpZCA9IENDYWxsSGVscGVy
czo6Zmlyc3RSZWdpc3RlcigpOyBpZCA8PSBDQ2FsbEhlbHBlcnM6Omxhc3RSZWdpc3RlcigpOyBp
ZCA9IG5leHRJRChpZCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQQyhpZCkpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChpc1NQKGlkKSB8fCBp
c0ZQKGlkKSkgeworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjb250
ZXh0LT5ncHIoaWQpID09IG9yaWdpbmFsU3RhdGUuZ3ByKGlkKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBzdWNjZXNzICYmIGNvbnRleHQtPmdwcihpZCkgPT0gdGVzdFdvcmQoc3RhdGljX2Nhc3Q8aW50
PihpZCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyBSZXN0b3Jl
IHRoZSBvcmlnaW5hbCBzdGF0ZS4KKyAgICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmVDb250ZXh0
KiBjb250ZXh0KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gaWQgPSBDQ2FsbEhlbHBlcnM6OmZp
cnN0UmVnaXN0ZXIoKTsgaWQgPD0gQ0NhbGxIZWxwZXJzOjpsYXN0UmVnaXN0ZXIoKTsgaWQgPSBu
ZXh0SUQoaWQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzUEMoaWQpIHx8IGlzU1AoaWQpIHx8
IGlzRlAoaWQpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5ncHIoaWQpID0gb3JpZ2luYWxTdGF0ZS5ncHIoaWQpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKworICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAg
ICAgICAgaml0LnJldCgpOworICAgIH0pOworICAgIENIRUNLKHN1Y2Nlc3MpOworfQorCit2b2lk
IHRlc3RQcm9iZU1vZGlmaWVzU3RhY2tQb2ludGVyKCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0
cnVlOworICAgIHVpbnQ4X3QqIG9yaWdpbmFsU1A7CisKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+
KFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xv
Z3VlKCk7CisKKyAgICAgICAgLy8gUHJlc2VydmUgb3JpZ2luYWwgc3RhY2sgcG9pbnRlciBhbmQg
bW9kaWZ5IHRoZSBzcC4KKyAgICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmVDb250ZXh0KiBjb250
ZXh0KSB7CisgICAgICAgICAgICBvcmlnaW5hbFNQID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oY29udGV4dC0+c3AoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zcCgpID0gb3JpZ2luYWxT
UCAtIDEgKiBLQjsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUg
c3RhY2sgcG9pbnRlciBoYXMgdGhlIGV4cGVjdGVkIHZhbHVlLCBhbmQgcmVzdG9yZSB0aGUgb3Jp
Z2luYWwuCisgICAgICAgIGppdC5wcm9iZShbJl0gKFByb2JlQ29udGV4dCogY29udGV4dCkgewor
ICAgICAgICAgICAgc3VjY2VzcyA9IChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihjb250ZXh0
LT5zcCgpKSA9PSAob3JpZ2luYWxTUCAtIDEgKiBLQikpOworICAgICAgICAgICAgY29udGV4dC0+
c3AoKSA9IG9yaWdpbmFsU1A7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFZhbGlkYXRlIHRo
YXQgdGhlIG9yaWdpbmFsIHN0YWNrIHBvaW50ZXIgd2FzIHJlc3RvcmVkLgorICAgICAgICBqaXQu
cHJvYmUoWyZdIChQcm9iZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3Mg
PSAoY29udGV4dC0+c3AoKSA9PSBvcmlnaW5hbFNQKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
aml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsK
KyAgICBDSEVDSyhzdWNjZXNzKTsKK30KKwordm9pZCB0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1D
b3VudGVyKCkKK3sKKyAgICAvLyBUaGlzIHRlc3QgcmVsaWVzIG9uIHRlc3RQcm9iZVJlYWRzQXJn
dW1lbnRSZWdpc3RlcnMoKSBhbmQgdGVzdFByb2JlV3JpdGVzQXJndW1lbnRSZWdpc3RlcnMoKQor
ICAgIC8vIGhhdmluZyBhbHJlYWR5IHZhbGlkYXRlZCB0aGF0IHdlIGNhbiByZWFkIGFuZCB3cml0
ZSBmcm9tIHJlZ2lzdGVycy4gV2UnbGwgdXNlIHRoZXNlIGFiaWxpdGllcworICAgIC8vIHRvIHZh
bGlkYXRlIHRoYXQgdGhlIHByb2JlIHByZXNlcnZlcyByZWdpc3RlciB2YWx1ZXMuCisgICAgYm9v
bCBzdWNjZXNzID0gZmFsc2U7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29udGludWF0
aW9uID0gY29tcGlsZShbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIC8vIFZhbGlk
YXRlIHRoYXQgd2UgcmVhY2hlZCB0aGUgY29udGludWF0aW9uLgorICAgICAgICBqaXQucHJvYmUo
WyZdIChQcm9iZUNvbnRleHQqKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAg
ICAgfSk7CisgICAgICAgIAorICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAg
ICAgICAgaml0LnJldCgpOworICAgIH0pOworCisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihbJl0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OworCisgICAgICAgIC8vIFdyaXRlIGV4cGVjdGVkIHZhbHVlcyBpbnRvIHRoZSByZWdpc3RlcnMu
CisgICAgICAgIGppdC5wcm9iZShbJl0gKFByb2JlQ29udGV4dCogY29udGV4dCkgeworICAgICAg
ICAgICAgY29udGV4dC0+cGMoKSA9IGNvbnRpbnVhdGlvbi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hv
dWxkIG5ldmVyIGdldCBoZXJlLgorICAgIH0pOworICAgIENIRUNLKHN1Y2Nlc3MpOworfQorCisj
ZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IGlmICghc2hvdWxkUnVuKCN0ZXN0KSkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRhc2tzLmFwcGVu
ZCggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBjcmVhdGVTaGFyZWRU
YXNrPHZvaWQoKT4oICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgWyZdICgpIHsgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coI3Rlc3QgIi4u
LlxuIik7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIHRlc3Q7ICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coI3Rlc3QgIjogT0shXG4iKTsgICBc
CisgICAgICAgICAgICAgICAgfSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
fSB3aGlsZSAoZmFsc2UpOworCit2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCit7CisgICAg
SlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisKKyAgICBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKCk+Pj4gdGFza3M7CisKKyAgICBhdXRvIHNob3VsZFJ1biA9IFsmXSAoY29uc3QgY2hh
ciogdGVzdE5hbWUpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gIWZpbHRlciB8fCAhIXN0cmNh
c2VzdHIodGVzdE5hbWUsIGZpbHRlcik7CisgICAgfTsKKworICAgIFJVTih0ZXN0U2ltcGxlKCkp
OworCisgICAgUlVOKHRlc3RQcm9iZVJlYWRzQXJndW1lbnRSZWdpc3RlcnMoKSk7CisgICAgUlVO
KHRlc3RQcm9iZVdyaXRlc0FyZ3VtZW50UmVnaXN0ZXJzKCkpOworICAgIFJVTih0ZXN0UHJvYmVQ
cmVzZXJ2ZXNHUFJTKCkpOworICAgIFJVTih0ZXN0UHJvYmVNb2RpZmllc1N0YWNrUG9pbnRlcigp
KTsKKyAgICBSVU4odGVzdFByb2JlTW9kaWZpZXNQcm9ncmFtQ291bnRlcigpKTsKKworICAgIGlm
ICh0YXNrcy5pc0VtcHR5KCkpCisgICAgICAgIHVzYWdlKCk7CisKKyAgICBMb2NrIGxvY2s7CisK
KyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7Cisg
ICAgICAgIHRocmVhZHMuYXBwZW5kKAorICAgICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCisgICAg
ICAgICAgICAgICAgInRlc3RtYXNtIHRocmVhZCIsCisgICAgICAgICAgICAgICAgWyZdICgpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFzazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihsb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFza3MuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGFzayA9IHRhc2tzLnRha2VGaXJzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLT5ydW4oKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0pKTsKKyAgICB9CisKKyAgICBmb3IgKFJlZlB0cjxU
aHJlYWQ+IHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRp
b24oKTsKKyAgICBjcmFzaExvY2subG9jaygpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKKworI2Vsc2UgLy8gRU5BQkxFKEpJVCkKKworc3RhdGljIHZvaWQgcnVuKGNvbnN0IGNoYXIq
KQoreworICAgIGRhdGFMb2coIkpJVCBpcyBub3QgZW5hYmxlZC5cbiIpOworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAg
IGNvbnN0IGNoYXIqIGZpbHRlciA9IG51bGxwdHI7CisgICAgc3dpdGNoIChhcmdjKSB7CisgICAg
Y2FzZSAxOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIGZpbHRlciA9IGFy
Z3ZbMV07CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHVzYWdlKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBydW4oZmlsdGVyKTsKKyAgICByZXR1cm4g
MDsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkocmV2
aXNpb24gMjE5NzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgYm9vbCBoaWRkZW5UcnV0
aEJlY2F1c2VOb1JldHVybklzCiAKIHN0YXRpYyB2b2lkIHVzYWdlKCkKIHsKLSAgICBkYXRhTG9n
KCJVc2FnZTogdGVzdGIzIFs8ZmlsdGVyPl1cbiIpOworICAgIGRhdGFMb2coIlVzYWdlOiB0ZXN0
YWlyIFs8ZmlsdGVyPl1cbiIpOwogICAgIGlmIChoaWRkZW5UcnV0aEJlY2F1c2VOb1JldHVybklz
U3R1cGlkKCkpCiAgICAgICAgIGV4aXQoMSk7CiB9CkBAIC0yMDI5LDcgKzIwMjksNyBAQCB2b2lk
IHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZmlsdGVyID8g
MSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7CiAgICAgICAgIHRocmVh
ZHMuYXBwZW5kKAogICAgICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAg
InRlc3RiMyB0aHJlYWQiLAorICAgICAgICAgICAgICAgICJ0ZXN0YWlyIHRocmVhZCIsCiAgICAg
ICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFzazsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9zaGVsbC9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvc2hlbGwvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDIxOTc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9zaGVsbC9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTAgQEAgaWYgKFRBUkdFVCBqc2NMaWIpCiBlbmRp
ZiAoKQogCiBpZiAoTk9UIFdJTjMyKQorICAgIHNldChURVNUTUFTTV9TT1VSQ0VTCisgICAgICAg
IC4uL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKKyAgICApCisKICAgICBzZXQoVEVTVEIzX1NPVVJD
RVMKICAgICAgICAgLi4vYjMvdGVzdGIzLmNwcAogICAgICkKQEAgLTY0LDYgKzY4LDkgQEAgaWYg
KE5PVCBXSU4zMikKICAgICAgICAgLi4vYjMvYWlyL3Rlc3RhaXIuY3BwCiAgICAgKQogCisgICAg
YWRkX2V4ZWN1dGFibGUodGVzdG1hc20gJHtURVNUTUFTTV9TT1VSQ0VTfSkKKyAgICB0YXJnZXRf
bGlua19saWJyYXJpZXModGVzdG1hc20gJHtKU0NfTElCUkFSSUVTfSkKKwogICAgIGFkZF9leGVj
dXRhYmxlKHRlc3RiMyAke1RFU1RCM19TT1VSQ0VTfSkKICAgICB0YXJnZXRfbGlua19saWJyYXJp
ZXModGVzdGIzICR7SlNDX0xJQlJBUklFU30pCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316168</attachid>
            <date>2017-07-21 21:43:04 -0700</date>
            <delta_ts>2017-07-23 13:35:06 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-174696.patch</filename>
            <type>text/plain</type>
            <size>35416</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE5NzU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDE3LTA3LTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
cmVhdGUgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIEpJVCBwcm9iZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDY5NgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzM0MzY5MjI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIG5ldyB0ZXN0bWFzbSB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyAg
ICAgICAgMS4gdGhlIHByb2JlIGlzIGFibGUgdG8gcmVhZCB0aGUgdmFsdWUgb2YgQ1BVIHJlZ2lz
dGVycy4KKyAgICAgICAgMi4gdGhlIHByb2JlIGlzIGFibGUgdG8gd3JpdGUgdGhlIHZhbHVlIG9m
IENQVSByZWdpc3RlcnMuCisgICAgICAgIDMuIHRoZSBwcm9iZSBpcyBhYmxlIHRvIHByZXNlcnZl
IGFsbCBDUFUgcmVnaXN0ZXJzLgorICAgICAgICA0LiBzcGVjaWFsIGNhc2Ugb2YgKDIpOiB0aGUg
cHJvYmUgaXMgYWJsZSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBzdGFjayBwb2ludGVyLgor
ICAgICAgICA1LiBzcGVjaWFsIGNhc2Ugb2YgKDIpOiB0aGUgcHJvYmUgaXMgYWJsZSB0byBjaGFu
Z2UgdGhlIHZhbHVlIG9mIHRoZSBwcm9ncmFtIGNvdW50ZXIKKyAgICAgICAgICAgaS5lLiB0aGUg
cHJvYmUgY2FuIGNoYW5nZSB3aGVyZSB0aGUgY29kZSBjb250aW51ZXMgZXhlY3V0aW5nIHVwb24g
cmV0dXJuaW5nIGZyb20KKyAgICAgICAgICAgdGhlIHByb2JlLgorCisgICAgICAgIEN1cnJlbnRs
eSwgdGhlIHg4NiwgeDg2XzY0LCBhbmQgQVJNdjcgcG9ydHMgcGFzc2VzIHRoZSB0ZXN0LiAgQVJN
NjQgZG9lcyBub3QKKyAgICAgICAgYmVjYXVzZSBpdCBkb2VzIG5vdCBzdXBwb3J0IGNoYW5naW5n
IHRoZSBzcCBhbmQgcGMgeWV0LiAgVGhlIEFSTTY0IHByb2JlCisgICAgICAgIGltcGxlbWVudGF0
aW9uIHdpbGwgYmUgZml4ZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NDY5NworICAgICAgICBsYXRlci4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL1Rv
b2xFeGVjdXRhYmxlLnhjY29uZmlnOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZTo6cGMpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q1BVU3RhdGU6OmZwKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXI6OkNQVVN0YXRlOjpzcCk6CisgICAgICAgIChKU0M6OlByb2JlQ29udGV4dDo6cGMp
OgorICAgICAgICAoSlNDOjpQcm9iZUNvbnRleHQ6OmZwKToKKyAgICAgICAgKEpTQzo6UHJvYmVD
b250ZXh0OjpzcCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuY3Bw
OgorICAgICAgICAoSlNDOjphcm02NFByb2JlVHJhbXBvbGluZSk6CisgICAgICAgICogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHA6CisgICAgICAgIChKU0M6OlByaW50ZXI6OnBy
aW50UENSZWdpc3Rlcik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDogQWRkZWQu
CisgICAgICAgIChoaWRkZW5UcnV0aEJlY2F1c2VOb1JldHVybklzU3R1cGlkKToKKyAgICAgICAg
KHVzYWdlKToKKyAgICAgICAgKEpTQzo6bmV4dElEKToKKyAgICAgICAgKEpTQzo6aXNQQyk6Cisg
ICAgICAgIChKU0M6OmlzU1ApOgorICAgICAgICAoSlNDOjppc0ZQKToKKyAgICAgICAgKEpTQzo6
Y29tcGlsZSk6CisgICAgICAgIChKU0M6Omludm9rZSk6CisgICAgICAgIChKU0M6OmNvbXBpbGVB
bmRSdW4pOgorICAgICAgICAoSlNDOjp0ZXN0U2ltcGxlKToKKyAgICAgICAgKEpTQzo6dGVzdFBy
b2JlUmVhZHNBcmd1bWVudFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OnRlc3RQcm9iZVdyaXRl
c0FyZ3VtZW50UmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6dGVzdEZ1bmN0aW9uVG9UcmFzaFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OnRlc3RQcm9iZVByZXNlcnZlc0dQUlMpOgorICAgICAg
ICAoSlNDOjp0ZXN0UHJvYmVNb2RpZmllc1N0YWNrUG9pbnRlcik6CisgICAgICAgIChKU0M6OnRl
c3RQcm9iZU1vZGlmaWVzUHJvZ3JhbUNvdW50ZXIpOgorICAgICAgICAoSlNDOjpydW4pOgorICAg
ICAgICAocnVuKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIGIzL2Fpci90ZXN0YWlyLmNw
cDoKKyAgICAgICAgKHVzYWdlKToKKyAgICAgICAgKiBzaGVsbC9DTWFrZUxpc3RzLnR4dDoKKwog
MjAxNy0wNy0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVm
YWN0b3IgTUFTTSBwcm9iZSBDUFVTdGF0ZSB0byB1c2UgYXJyYXlzIGZvciByZWdpc3RlciBzdG9y
YWdlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL1Rvb2xFeGVj
dXRhYmxlLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25m
aWd1cmF0aW9ucy9Ub29sRXhlY3V0YWJsZS54Y2NvbmZpZwkocmV2aXNpb24gMjE5NzQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL1Rvb2xFeGVjdXRhYmxlLnhjY29u
ZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIENPREVfU0lHTl9FTlRJVExFTUVO
VFNfaW9zX21pbmlkb20gPSBlbnQKIENPREVfU0lHTl9FTlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIg
PSBlbnRpdGxlbWVudHMucGxpc3Q7CiBDT0RFX1NJR05fRU5USVRMRU1FTlRTX2lvc190ZXN0YXBp
ID0gZW50aXRsZW1lbnRzLnBsaXN0OwogQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGIz
ID0gZW50aXRsZW1lbnRzLnBsaXN0OworQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdG1h
c20gPSBlbnRpdGxlbWVudHMucGxpc3Q7CiBDT0RFX1NJR05fRU5USVRMRU1FTlRTX2lvc190ZXN0
V2FzbSA9IGVudGl0bGVtZW50cy5wbGlzdDsKIENPREVfU0lHTl9FTlRJVExFTUVOVFNfaW9zX3Rl
c3RSZWdFeHAgPSBlbnRpdGxlbWVudHMucGxpc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMTk3NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAoCiAJCQkpOwogCQkJZGVwZW5kZW5jaWVz
ID0gKAorCQkJCUZFNTMzQ0FGMUYyMTdFQzYwMDE2QTFGRSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5
ICovLAogCQkJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUwQiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5
ICovLAogCQkJCTBGOTMyNzVEMUMyMEJGM0EwMENGNjU2NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5
ICovLAogCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5
ICovLApAQCAtMjQ2Miw2ICsyNDYzLDkgQEAKIAkJRkU0RDU1QjgxQUU3MTZDQTAwNTJFNDU5IC8q
IEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNTA2ODY1
MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTA2ODY0MUFFMjQ2MzkwMDA5REFCNyAv
KiBEZWZlcnJlZFNvdXJjZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTUwNjg2NzFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3Vy
Y2VEdW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFNTA2ODY2MUFFMjVFMjgwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwICovOyB9
OworCQlGRTUzM0NBNTFGMjE3REIzMDAxNkExRkUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1
Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCUZFNTMzQ0E2
MUYyMTdEQjMwMDE2QTFGRSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3
MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OworCQlGRTUzM0NBRDFGMjE3
RUE1MDAxNkExRkUgLyogdGVzdG1hc20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU1MzNDQTAxRjIxN0MzMTAwMTZBMUZFIC8qIHRlc3RtYXNtLmNw
cCAqLzsgfTsKIAkJRkU1NERFRkIxRThDNkQ4ODAwQTg5MkM1IC8qIERpc2FsbG93Vk1SZWVudHJ5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU0REVG
QTFFOEM2RDcyMDBBODkyQzUgLyogRGlzYWxsb3dWTVJlZW50cnkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTU0REVGRDFFOEM2RTM3MDBBODky
QzUgLyogRGlzYWxsb3dWTVJlZW50cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU1NERFRkMxRThDNkRGRjAwQTg5MkM1IC8qIERpc2FsbG93Vk1S
ZWVudHJ5LmNwcCAqLzsgfTsKIAkJRkU1NERFRkYxRThENzZGQTAwQTg5MkM1IC8qIERpc2FsbG93
U2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
NTRERUZFMUU4RDc0MjgwMEE4OTJDNSAvKiBEaXNhbGxvd1Njb3BlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI2MTUsNiArMjYxOSwxMyBAQAog
CQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSA5MzJGNUIzRTA4MjJBMUM3MDA3MzY5NzU7CiAJCQly
ZW1vdGVJbmZvID0gIkphdmFTY3JpcHRDb3JlIChVcGdyYWRlZCkiOwogCQl9OworCQlGRTUzM0NB
RTFGMjE3RUM2MDAxNkExRkUgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNh
ID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBG
RTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsK
KwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gRkU1MzNDQTExRjIxN0RCMzAwMTZBMUZFOworCQkJ
cmVtb3RlSW5mbyA9IHRlc3RtYXNtOworCQl9OwogLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwpAQCAtNTExNCw2ICs1MTI1LDggQEAKIAkJRkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0
ZXJhdGlvblN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRp
b25TdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU1MDY4NjQxQUUyNDYz
OTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEZWZlcnJlZFNvdXJjZUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU1MDY4NjYxQUUyNUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWZlcnJlZFNvdXJjZUR1bXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTUzM0NBMDFGMjE3QzMxMDAxNkEx
RkUgLyogdGVzdG1hc20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gdGVzdG1hc20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTUzM0NBQzFGMjE3REI0MDAxNkExRkUgLyogdGVz
dG1hc20gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJj
b21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRl
c3RtYXNtOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlGRTU0REVGQTFF
OEM2RDcyMDBBODkyQzUgLyogRGlzYWxsb3dWTVJlZW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGlzYWxsb3dWTVJlZW50cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkU1NERFRkMxRThDNkRGRjAwQTg5MkM1IC8qIERpc2FsbG93Vk1SZWVudHJ5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc2FsbG93Vk1SZWVudHJ5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU1NERFRkUxRThENzQyODAwQTg5
MkM1IC8qIERpc2FsbG93U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGlzYWxsb3dTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI0Niw2ICs1
MjU5LDE1IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CisJCUZFNTMzQ0E0MUYyMTdEQjMwMDE2QTFGRSAvKiBGcmFtZXdvcmtzICovID0g
eworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJRkU1MzNDQTUxRjIxN0RCMzAwMTZBMUZF
IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJRkU1MzNDQTYx
RjIxN0RCMzAwMTZBMUZFIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwor
CQl9OwogLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVn
aW4gUEJYR3JvdXAgc2VjdGlvbiAqLwpAQCAtNTI2MSw2ICs1MjgzLDcgQEAKIAkJCQkwRkVDODVB
RDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTY1MTEyMzA1MTQwNDZBNEMwMDJC
MTAxRCAvKiB0ZXN0UmVnRXhwICovLAogCQkJCTkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBK
YXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8sCisJCQkJRkU1MzNDQUMxRjIxN0RCNDAwMTZBMUZF
IC8qIHRlc3RtYXNtICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC03NjEyLDYgKzc2MzUsNyBAQAogCQkJCUZFNjNERDU1MUVBOUJD
NUQwMDEwM0E2OSAvKiBQcmludGVyLmNwcCAqLywKIAkJCQlGRTYzREQ1MzFFQTlCNjBFMDAxMDNB
NjkgLyogUHJpbnRlci5oICovLAogCQkJCTk2ODhDQjE0MEVEMTJCNEUwMDFENjQ5RiAvKiBYODZB
c3NlbWJsZXIuaCAqLywKKwkJCQlGRTUzM0NBMDFGMjE3QzMxMDAxNkExRkUgLyogdGVzdG1hc20u
Y3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBhc3NlbWJsZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtOTc0Niw2ICs5NzcwLDIyIEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0gOTMy
RjVCRTEwODIyQTFDNzAwNzM2OTc1IC8qIGpzYyAqLzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5h
cHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7CiAJCX07CisJCUZFNTMzQ0ExMUYyMTdEQjMwMDE2QTFG
RSAvKiB0ZXN0bWFzbSAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxk
Q29uZmlndXJhdGlvbkxpc3QgPSBGRTUzM0NBNzFGMjE3REIzMDAxNkExRkUgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRlc3RtYXNtIiAqLzsKKwkJCWJ1
aWxkUGhhc2VzID0gKAorCQkJCUZFNTMzQ0EyMUYyMTdEQjMwMDE2QTFGRSAvKiBTb3VyY2VzICov
LAorCQkJCUZFNTMzQ0E0MUYyMTdEQjMwMDE2QTFGRSAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsK
KwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJ
CW5hbWUgPSB0ZXN0bWFzbTsKKwkJCXByb2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJCXByb2R1Y3RS
ZWZlcmVuY2UgPSBGRTUzM0NBQzFGMjE3REI0MDAxNkExRkUgLyogdGVzdG1hc20gKi87CisJCQlw
cm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOworCQl9OwogLyogRW5k
IFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlv
biAqLwpAQCAtOTc4NSw2ICs5ODI1LDcgQEAKIAkJCQk1RDZCMkE0NzE1MkI5RTE3MDA1MjMxREUg
LyogVGVzdCBUb29scyAqLywKIAkJCQkwRjkzMjc0RTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVu
Y2ggKi8sCiAJCQkJMEY2MTgzMzgxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8sCisJCQkJ
RkU1MzNDQTExRjIxN0RCMzAwMTZBMUZFIC8qIHRlc3RtYXNtICovLAogCQkJKTsKIAkJfTsKIC8q
IEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KQEAgLTExMDMxLDYgKzExMDcyLDE0IEBACiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CisJCUZF
NTMzQ0EyMUYyMTdEQjMwMDE2QTFGRSAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJRkU1MzNDQUQxRjIxN0VBNTAwMTZBMUZFIC8qIHRlc3RtYXNtLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOworCQl9OwogLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyog
QmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCkBAIC0xMTExNCw2ICsxMTE2Mywx
MSBAQAogCQkJdGFyZ2V0ID0gOTMyRjVCM0UwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRD
b3JlICovOwogCQkJdGFyZ2V0UHJveHkgPSA5MzJGNUJFNjA4MjJBMUM3MDA3MzY5NzUgLyogUEJY
Q29udGFpbmVySXRlbVByb3h5ICovOwogCQl9OworCQlGRTUzM0NBRjFGMjE3RUM2MDAxNkExRkUg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVu
Y3k7CisJCQl0YXJnZXQgPSBGRTUzM0NBMTFGMjE3REIzMDAxNkExRkUgLyogdGVzdG1hc20gKi87
CisJCQl0YXJnZXRQcm94eSA9IEZFNTMzQ0FFMUYyMTdFQzYwMDE2QTFGRSAvKiBQQlhDb250YWlu
ZXJJdGVtUHJveHkgKi87CisJCX07CiAvKiBFbmQgUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KQEAgLTExNTU2
LDYgKzExNjEwLDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IFByb2ZpbGluZzsKIAkJfTsKKwkJRkU1
MzNDQTgxRjIxN0RCMzAwMTZBMUZFIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2
OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKKwkJCX07CisJ
CQluYW1lID0gRGVidWc7CisJCX07CisJCUZFNTMzQ0E5MUYyMTdEQjMwMDE2QTFGRSAvKiBSZWxl
YXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1F
ID0gIiQoVEFSR0VUX05BTUUpIjsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJ
RkU1MzNDQUExRjIxN0RCMzAwMTZBMUZFIC8qIFByb2ZpbGluZyAqLyA9IHsKKwkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAy
MUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7CisJ
CQl9OworCQkJbmFtZSA9IFByb2ZpbGluZzsKKwkJfTsKKwkJRkU1MzNDQUIxRjIxN0RCMzAwMTZB
MUZFIC8qIFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsK
KwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3
IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOworCQkJfTsKKwkJCW5hbWUgPSBQcm9k
dWN0aW9uOworCQl9OwogLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCkBAIC0xMTcyNCw2ICsxMTgx
MCwxNyBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJRkU1MzNDQTcxRjIxN0RC
MzAwMTZBMUZFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0
ICJ0ZXN0bWFzbSIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVp
bGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQlGRTUzM0NBODFGMjE3REIzMDAxNkExRkUgLyogRGVi
dWcgKi8sCisJCQkJRkU1MzNDQTkxRjIxN0RCMzAwMTZBMUZFIC8qIFJlbGVhc2UgKi8sCisJCQkJ
RkU1MzNDQUExRjIxN0RCMzAwMTZBMUZFIC8qIFByb2ZpbGluZyAqLywKKwkJCQlGRTUzM0NBQjFG
MjE3REIzMDAxNkExRkUgLyogUHJvZHVjdGlvbiAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9k
dWN0aW9uOworCQl9OwogLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwogCX07
CiAJcm9vdE9iamVjdCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVj
dCAqLzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxOTc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0Nyw3ICsxODQ3
LDcgQEAgcHVibGljOgogICAgIC8vIE1hY3JvQXNzZW1ibGVyLgogICAgIHZvaWQgcHJvYmUoUHJv
YmVGdW5jdGlvbiwgdm9pZCogYXJnKTsKIAotICAgIHZvaWQgcHJvYmUoc3RkOjpmdW5jdGlvbjx2
b2lkKFByb2JlQ29udGV4dCopPik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm9iZShz
dGQ6OmZ1bmN0aW9uPHZvaWQoUHJvYmVDb250ZXh0Kik+KTsKICNlbmRpZiAvLyBFTkFCTEUoTUFT
TV9QUk9CRSkKIAogICAgIC8vIExldCdzIHlvdSBwcmludCBmcm9tIHlvdXIgSklUIGdlbmVyYXRl
ZCBjb2RlLgpAQCAtMTg2OSw5ICsxODY5LDkgQEAgc3RydWN0IE1hY3JvQXNzZW1ibGVyOjpDUFVT
dGF0ZSB7CiAgICAgaW5saW5lIHVpbnRwdHJfdCYgc3ByKFNQUmVnaXN0ZXJJRCk7CiAgICAgaW5s
aW5lIGRvdWJsZSYgZnByKEZQUmVnaXN0ZXJJRCk7CiAgICAgCi0gICAgaW5saW5lIHVpbnRwdHJf
dCYgcGMoKTsKLSAgICBpbmxpbmUgdWludHB0cl90JiBmcCgpOwotICAgIGlubGluZSB1aW50cHRy
X3QmIHNwKCk7CisgICAgaW5saW5lIHZvaWQqJiBwYygpOworICAgIGlubGluZSB2b2lkKiYgZnAo
KTsKKyAgICBpbmxpbmUgdm9pZComIHNwKCk7CiAgICAgCiAgICAgdWludHB0cl90IGdwcnNbTWFj
cm9Bc3NlbWJsZXI6Om51bWJlck9mUmVnaXN0ZXJzKCldOwogICAgIHVpbnRwdHJfdCBzcHJzW01h
Y3JvQXNzZW1ibGVyOjpudW1iZXJPZlNQUmVnaXN0ZXJzKCldOwpAQCAtMTg5NiwxNCArMTg5Niwx
NCBAQCBpbmxpbmUgZG91YmxlJiBNYWNyb0Fzc2VtYmxlcjo6Q1BVU3RhdGU6CiAgICAgcmV0dXJu
IGZwcnNbaWRdOwogfQogCi1pbmxpbmUgdWludHB0cl90JiBNYWNyb0Fzc2VtYmxlcjo6Q1BVU3Rh
dGU6OnBjKCkKK2lubGluZSB2b2lkKiYgTWFjcm9Bc3NlbWJsZXI6OkNQVVN0YXRlOjpwYygpCiB7
CiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLSAgICByZXR1cm4gc3ByKFg4NlJlZ2lzdGVy
czo6ZWlwKTsKKyAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmc3ByKFg4NlJl
Z2lzdGVyczo6ZWlwKSk7CiAjZWxpZiBDUFUoQVJNNjQpCi0gICAgcmV0dXJuIHNwcihBUk02NFJl
Z2lzdGVyczo6cGMpOworICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZzcHIo
QVJNNjRSZWdpc3RlcnM6OnBjKSk7CiAjZWxpZiBDUFUoQVJNX1RIVU1CMikgfHwgQ1BVKEFSTV9U
UkFESVRJT05BTCkKLSAgICByZXR1cm4gZ3ByKEFSTVJlZ2lzdGVyczo6cGMpOworICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZncHIoQVJNUmVnaXN0ZXJzOjpwYykpOwogI2Vs
aWYgQ1BVKE1JUFMpCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbHNlCkBA
IC0xOTExLDMxICsxOTExLDMxIEBAIGlubGluZSB1aW50cHRyX3QmIE1hY3JvQXNzZW1ibGVyOjpD
UFVTdGEKICNlbmRpZgogfQogCi1pbmxpbmUgdWludHB0cl90JiBNYWNyb0Fzc2VtYmxlcjo6Q1BV
U3RhdGU6OmZwKCkKK2lubGluZSB2b2lkKiYgTWFjcm9Bc3NlbWJsZXI6OkNQVVN0YXRlOjpmcCgp
CiB7CiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLSAgICByZXR1cm4gZ3ByKFg4NlJlZ2lz
dGVyczo6ZWJwKTsKKyAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZ3ByKFg4
NlJlZ2lzdGVyczo6ZWJwKSk7CiAjZWxpZiBDUFUoQVJNNjQpCi0gICAgcmV0dXJuIGdwcihBUk02
NFJlZ2lzdGVyczo6ZnApOworICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZn
cHIoQVJNNjRSZWdpc3RlcnM6OmZwKSk7CiAjZWxpZiBDUFUoQVJNX1RIVU1CMikgfHwgQ1BVKEFS
TV9UUkFESVRJT05BTCkKLSAgICByZXR1cm4gZ3ByKEFSTVJlZ2lzdGVyczo6ZnApOworICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZncHIoQVJNUmVnaXN0ZXJzOjpmcCkpOwog
I2VsaWYgQ1BVKE1JUFMpCi0gICAgcmV0dXJuIGdwcihNSVBTUmVnaXN0ZXJzOjpmcCk7CisgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmdwcihNSVBTUmVnaXN0ZXJzOjpmcCkp
OwogI2Vsc2UKICNlcnJvciAiVW5zdXBwb3J0ZWQgQ1BVIgogI2VuZGlmCiB9CiAKLWlubGluZSB1
aW50cHRyX3QmIE1hY3JvQXNzZW1ibGVyOjpDUFVTdGF0ZTo6c3AoKQoraW5saW5lIHZvaWQqJiBN
YWNyb0Fzc2VtYmxlcjo6Q1BVU3RhdGU6OnNwKCkKIHsKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2
XzY0KQotICAgIHJldHVybiBncHIoWDg2UmVnaXN0ZXJzOjplc3ApOworICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZncHIoWDg2UmVnaXN0ZXJzOjplc3ApKTsKICNlbGlmIENQ
VShBUk02NCkKLSAgICByZXR1cm4gZ3ByKEFSTTY0UmVnaXN0ZXJzOjpzcCk7CisgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmdwcihBUk02NFJlZ2lzdGVyczo6c3ApKTsKICNl
bGlmIENQVShBUk1fVEhVTUIyKSB8fCBDUFUoQVJNX1RSQURJVElPTkFMKQotICAgIHJldHVybiBn
cHIoQVJNUmVnaXN0ZXJzOjpzcCk7CisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJmdwcihBUk1SZWdpc3RlcnM6OnNwKSk7CiAjZWxpZiBDUFUoTUlQUykKLSAgICByZXR1cm4g
Z3ByKE1JUFNSZWdpc3RlcnM6OnNwKTsKKyAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmZ3ByKE1JUFNSZWdpc3RlcnM6OnNwKSk7CiAjZWxzZQogI2Vycm9yICJVbnN1cHBvcnRl
ZCBDUFUiCiAjZW5kaWYKQEAgLTE5NTgsNiArMTk1OCwxMCBAQCBzdHJ1Y3QgUHJvYmVDb250ZXh0
IHsKICAgICBjb25zdCBjaGFyKiBncHJOYW1lKFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIGNwdS5n
cHJOYW1lKGlkKTsgfQogICAgIGNvbnN0IGNoYXIqIHNwck5hbWUoU1BSZWdpc3RlcklEIGlkKSB7
IHJldHVybiBjcHUuc3ByTmFtZShpZCk7IH0KICAgICBjb25zdCBjaGFyKiBmcHJOYW1lKEZQUmVn
aXN0ZXJJRCBpZCkgeyByZXR1cm4gY3B1LmZwck5hbWUoaWQpOyB9CisKKyAgICB2b2lkKiYgcGMo
KSB7IHJldHVybiBjcHUucGMoKTsgfQorICAgIHZvaWQqJiBmcCgpIHsgcmV0dXJuIGNwdS5mcCgp
OyB9CisgICAgdm9pZComIHNwKCkgeyByZXR1cm4gY3B1LnNwKCk7IH0KIH07CiAjZW5kaWYgLy8g
RU5BQkxFKE1BU01fUFJPQkUpCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5jcHAJKHJldmlzaW9uIDIx
OTc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Nyw4ICs0NTcsOCBAQCBhc20gKAogCiBzdGF0
aWMgdm9pZCBhcm02NFByb2JlVHJhbXBvbGluZShQcm9iZUNvbnRleHQqIGNvbnRleHQpCiB7Ci0g
ICAgdWludHB0cl90IG9yaWdTUCA9IGNvbnRleHQtPmNwdS5zcCgpOwotICAgIHVpbnRwdHJfdCBv
cmlnUEMgPSBjb250ZXh0LT5jcHUucGMoKTsKKyAgICB2b2lkKiBvcmlnU1AgPSBjb250ZXh0LT5j
cHUuc3AoKTsKKyAgICB2b2lkKiBvcmlnUEMgPSBjb250ZXh0LT5jcHUucGMoKTsKICAgICAKICAg
ICBjb250ZXh0LT5wcm9iZUZ1bmN0aW9uKGNvbnRleHQpOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmlu
dGVyLmNwcAkocmV2aXNpb24gMjE5NzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4
Miw4IEBAIHZvaWQgcHJpbnRBbGxSZWdpc3RlcnMoUHJpbnRTdHJlYW0mIG91dCwKIHZvaWQgcHJp
bnRQQ1JlZ2lzdGVyKFByaW50U3RyZWFtJiBvdXQsIENvbnRleHQmIGNvbnRleHQpCiB7CiAgICAg
YXV0byBjcHUgPSBjb250ZXh0LnByb2JlQ29udGV4dC5jcHU7Ci0gICAgaW50cHRyX3QgdmFsdWUg
PSBjcHUucGMoKTsKLSAgICBvdXQucHJpbnRmKCJwYzo8JXAgJWxkPiIsIGJpdHdpc2VfY2FzdDx2
b2lkKj4odmFsdWUpLCB2YWx1ZSk7CisgICAgdm9pZCogdmFsdWUgPSBjcHUucGMoKTsKKyAgICBv
dXQucHJpbnRmKCJwYzo8JXAgJWxkPiIsIHZhbHVlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZh
bHVlKSk7CiB9CiAKIHZvaWQgcHJpbnRSZWdpc3RlcklEKFByaW50U3RyZWFtJiBvdXQsIENvbnRl
eHQmIGNvbnRleHQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3Rt
YXNtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rl
c3RtYXNtLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL3Rlc3RtYXNtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDUFUuaCIKKyNpbmNs
dWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIkluaXRpYWxp
emVUaHJlYWRpbmcuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Nv
bXBpbGVyLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZD
b3Jlcy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworLy8gV2UgZG9uJ3QgaGF2ZSBh
IE5PX1JFVFVSTl9EVUVfVE9fRVhJVCwgbm9yIHNob3VsZCB3ZS4gVGhhdCdzIHJpZGljdWxvdXMu
CitzdGF0aWMgYm9vbCBoaWRkZW5UcnV0aEJlY2F1c2VOb1JldHVybklzU3R1cGlkKCkgeyByZXR1
cm4gdHJ1ZTsgfQorCitzdGF0aWMgdm9pZCB1c2FnZSgpCit7CisgICAgZGF0YUxvZygiVXNhZ2U6
IHRlc3RtYXNtIFs8ZmlsdGVyPl1cbiIpOworICAgIGlmIChoaWRkZW5UcnV0aEJlY2F1c2VOb1Jl
dHVybklzU3R1cGlkKCkpCisgICAgICAgIGV4aXQoMSk7Cit9CisKKyNpZiBFTkFCTEUoSklUKQor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgeworCitTdGF0aWNMb2NrIGNyYXNo
TG9jazsKKwordHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoQ0NhbGxIZWxwZXJzJik+IEdlbmVy
YXRvcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBuZXh0SUQoVCBpZCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VD4oaWQgKyAxKTsgfQorCisjZGVmaW5lIFRFU1RXT1JENjQgMHgwYzBkZWZlZmVi
ZWVmMDAwCisjZGVmaW5lIFRFU1RXT1JEMzIgMHgwYmVlZjAwMAorCisjZGVmaW5lIHRlc3RXb3Jk
MzIoeCkgKFRFU1RXT1JEMzIgKyBzdGF0aWNfY2FzdDx1aW50MzJfdD4oeCkpCisjZGVmaW5lIHRl
c3RXb3JkNjQoeCkgKFRFU1RXT1JENjQgKyBzdGF0aWNfY2FzdDx1aW50NjRfdD4oeCkpCisKKyNp
ZiBFTkFCTEUoSlNWQUxVRTY0KQorI2RlZmluZSB0ZXN0V29yZCh4KSB0ZXN0V29yZDY0KHgpCisj
ZWxzZQorI2RlZmluZSB0ZXN0V29yZCh4KSB0ZXN0V29yZDMyKHgpCisjZW5kaWYKKworLy8gTm90
aGluZyBmYW5jeSBmb3Igbm93OyB3ZSBqdXN0IHVzZSB0aGUgZXhpc3RpbmcgV1RGIGFzc2VydGlv
biBtYWNoaW5lcnkuCisjZGVmaW5lIENIRUNLKHgpIGRvIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghISh4KSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIGNyYXNoTG9jay5sb2NrKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZh
aWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjeCk7IFwKKyAg
ICAgICAgQ1JBU0goKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2lmIEVOQUJMRShNQVNNX1BS
T0JFKQorYm9vbCBpc1BDKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGlkKQoreworI2lmIENQ
VShBUk1fVEhVTUIyKSB8fCBDUFUoQVJNX1RSQURJVElPTkFMKQorICAgIHJldHVybiBpZCA9PSBB
Uk1SZWdpc3RlcnM6OnBjOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaWQpOworICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorfQorCitib29sIGlzU1AoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgaWQpCit7CisgICAgcmV0dXJuIGlkID09IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3RlcjsKK30KKworYm9vbCBpc0ZQKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGlkKQor
eworICAgIHJldHVybiBpZCA9PSBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXI7
Cit9CisjZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCisKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBjb21waWxlKEdlbmVyYXRvciBnZW5lcmF0ZSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owor
ICAgIGdlbmVyYXRlKGppdCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0
cik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJ0ZXN0bWFzbSBjb21w
aWxhdGlvbiIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorVCBpbnZva2UoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCit7CisgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9j
YXN0PFQoKikoQXJndW1lbnRzLi4uKT4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1QgY29tcGlsZUFuZFJ1bihHZW5lcmF0b3Ig
Z2VuZXJhdG9yLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIHJldHVybiBpbnZva2U8
VD4oY29tcGlsZShnZW5lcmF0b3IpLCBhcmd1bWVudHMuLi4pOworfQorCit2b2lkIHRlc3RTaW1w
bGUoKQoreworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50PihbXSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKKyAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgaml0LnJl
dCgpOworICAgIH0pID09IDQyKTsKK30KKworI2lmIEVOQUJMRShNQVNNX1BST0JFKQordm9pZCB0
ZXN0UHJvYmVSZWFkc0FyZ3VtZW50UmVnaXN0ZXJzKCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0
cnVlOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4oWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgewor
ICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih0ZXN0V29yZCgwKSksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMih0ZXN0V29yZCgxKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShHUFJJbmZvOjphcmd1bWVudEdQUjAsIEZQUklu
Zm86OmZwUmVnVDEpOworI2lmIEVOQUJMRShKU1ZBTFVFNjQpCisgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHRlc3RXb3JkKDApKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQodGVzdFdv
cmQoMSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW02NCh0ZXN0V29yZCgyKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7
CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHRlc3RXb3JkKDMp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyNlbHNlCisgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHRlc3RXb3JkKDApKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIodGVzdFdvcmQo
MSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMih0ZXN0V29yZCgyKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Cisg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHRlc3RXb3JkKDMpKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyNlbmRpZgorCisgICAgICAgIGppdC5wcm9iZShbJl0g
KFByb2JlQ29udGV4dCogY29udGV4dCkgeworICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3Mg
JiYgY29udGV4dC0+Z3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPT0gdGVzdFdvcmQoMCk7Cisg
ICAgICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjb250ZXh0LT5ncHIoR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKSA9PSB0ZXN0V29yZCgxKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNz
ICYmIGNvbnRleHQtPmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjIpID09IHRlc3RXb3JkKDIpOwor
ICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY29udGV4dC0+Z3ByKEdQUkluZm86OmFy
Z3VtZW50R1BSMykgPT0gdGVzdFdvcmQoMyk7CisKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNj
ZXNzICYmIGNvbnRleHQtPmZwcihGUFJJbmZvOjpmcFJlZ1QwKSA9PSB0ZXN0V29yZDMyKDApOwor
ICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY29udGV4dC0+ZnByKEZQUkluZm86OmZw
UmVnVDEpID09IHRlc3RXb3JkMzIoMSk7CisgICAgICAgIH0pOworICAgICAgICBqaXQuZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOworICAgIENIRUNL
KHN1Y2Nlc3MpOworfQorCit2b2lkIHRlc3RQcm9iZVdyaXRlc0FyZ3VtZW50UmVnaXN0ZXJzKCkK
K3sKKyAgICAvLyBUaGlzIHRlc3QgcmVsaWVzIG9uIHRlc3RQcm9iZVJlYWRzQXJndW1lbnRSZWdp
c3RlcnMoKSBoYXZpbmcgYWxyZWFkeSB2YWxpZGF0ZWQKKyAgICAvLyB0aGF0IHdlIGNhbiByZWFk
IGZyb20gYXJndW1lbnQgcmVnaXN0ZXJzLiBXZSdsbCB1c2UgdGhhdCBhYmlsaXR5IHRvIHZhbGlk
YXRlCisgICAgLy8gdGhhdCBvdXIgd3JpdGVzIGRpZCB0YWtlIGVmZmVjdC4KKyAgICBib29sIHN1
Y2Nlc3MgPSB0cnVlOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4oWyZdIChDQ2FsbEhlbHBlcnMm
IGppdCkgeworICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworICAgICAgICAv
LyBQcmUtaW5pdGlhbGl6ZSB3aXRoIG5vbi1leHBlY3RlZCB2YWx1ZXMuCisjaWYgRU5BQkxFKEpT
VkFMVUU2NCkKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTY0KDApLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsK
KyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMyk7CisjZWxzZQorICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyNlbmRpZgorICAgICAgICBqaXQuY29udmVy
dEludDMyVG9Eb3VibGUoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBGUFJJbmZvOjpmcFJlZ1QwKTsK
KyAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
RlBSSW5mbzo6ZnBSZWdUMSk7CisKKyAgICAgICAgLy8gV3JpdGUgZXhwZWN0ZWQgdmFsdWVzLgor
ICAgICAgICBqaXQucHJvYmUoW10gKFByb2JlQ29udGV4dCogY29udGV4dCkgeworICAgICAgICAg
ICAgY29udGV4dC0+Z3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPSB0ZXN0V29yZCgwKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjEpID0gdGVzdFdvcmQo
MSk7CisgICAgICAgICAgICBjb250ZXh0LT5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIyKSA9IHRl
c3RXb3JkKDIpOworICAgICAgICAgICAgY29udGV4dC0+Z3ByKEdQUkluZm86OmFyZ3VtZW50R1BS
MykgPSB0ZXN0V29yZCgzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29udGV4dC0+ZnBy
KEZQUkluZm86OmZwUmVnVDApID0gdGVzdFdvcmQzMigwKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmZwcihGUFJJbmZvOjpmcFJlZ1QxKSA9IHRlc3RXb3JkMzIoMSk7CisgICAgICAgIH0pOworCisg
ICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgZXhwZWN0ZWQgdmFsdWVzIHdlcmUgd3JpdHRlbi4KKyAg
ICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmVDb250ZXh0KiBjb250ZXh0KSB7CisgICAgICAgICAg
ICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjb250ZXh0LT5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIw
KSA9PSB0ZXN0V29yZCgwKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNvbnRl
eHQtPmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjEpID09IHRlc3RXb3JkKDEpOworICAgICAgICAg
ICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY29udGV4dC0+Z3ByKEdQUkluZm86OmFyZ3VtZW50R1BS
MikgPT0gdGVzdFdvcmQoMik7CisgICAgICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjb250
ZXh0LT5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIzKSA9PSB0ZXN0V29yZCgzKTsKKworICAgICAg
ICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY29udGV4dC0+ZnByKEZQUkluZm86OmZwUmVnVDAp
ID09IHRlc3RXb3JkMzIoMCk7CisgICAgICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjb250
ZXh0LT5mcHIoRlBSSW5mbzo6ZnBSZWdUMSkgPT0gdGVzdFdvcmQzMigxKTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgIGppdC5yZXQo
KTsKKyAgICB9KTsKKyAgICBDSEVDSyhzdWNjZXNzKTsKK30KKworc3RhdGljIE5FVkVSX0lOTElO
RSBOT1RfVEFJTF9DQUxMRUQgaW50IHRlc3RGdW5jdGlvblRvVHJhc2hHUFJzKGludCBhLCBpbnQg
YiwgaW50IGMsIGludCBkLCBpbnQgZSwgaW50IGYsIGludCBnLCBpbnQgaCwgaW50IGksIGludCBq
KQoreworICAgIGlmIChqID4gMCkKKyAgICAgICAgcmV0dXJuIHRlc3RGdW5jdGlvblRvVHJhc2hH
UFJzKGEgKyAxLCBiICsgYSwgYyArIGIsIGQgKyA1LCBlIC0gYSwgZiAqIDEuNSwgZyBeIGEsIGgg
LSBiLCBpLCBqIC0gMSk7CisgICAgcmV0dXJuIGEgKyAxOworfQorc3RhdGljIE5FVkVSX0lOTElO
RSBOT1RfVEFJTF9DQUxMRUQgZG91YmxlIHRlc3RGdW5jdGlvblRvVHJhc2hGUFJzKGRvdWJsZSBh
LCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYsIGRvdWJs
ZSBnLCBkb3VibGUgaCwgZG91YmxlIGksIGRvdWJsZSBqKQoreworICAgIGlmIChqID4gMCkKKyAg
ICAgICAgcmV0dXJuIHRlc3RGdW5jdGlvblRvVHJhc2hGUFJzKGEgKyAxLCBiICsgYSwgYyArIGIs
IGQgKyA1LCBlIC0gYSwgZiAqIDEuNSwgcG93KGcsIGEpLCBoIC0gYiwgaSwgaiAtIDEpOworICAg
IHJldHVybiBhICsgMTsKK30KKwordm9pZCB0ZXN0UHJvYmVQcmVzZXJ2ZXNHUFJTKCkKK3sKKyAg
ICAvLyBUaGlzIHRlc3QgcmVsaWVzIG9uIHRlc3RQcm9iZVJlYWRzQXJndW1lbnRSZWdpc3RlcnMo
KSBhbmQgdGVzdFByb2JlV3JpdGVzQXJndW1lbnRSZWdpc3RlcnMoKQorICAgIC8vIGhhdmluZyBh
bHJlYWR5IHZhbGlkYXRlZCB0aGF0IHdlIGNhbiByZWFkIGFuZCB3cml0ZSBmcm9tIHJlZ2lzdGVy
cy4gV2UnbGwgdXNlIHRoZXNlIGFiaWxpdGllcworICAgIC8vIHRvIHZhbGlkYXRlIHRoYXQgdGhl
IHByb2JlIHByZXNlcnZlcyByZWdpc3RlciB2YWx1ZXMuCisgICAgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q1BVU3RhdGUgb3JpZ2luYWxTdGF0ZTsKKworICAgIGNv
bXBpbGVBbmRSdW48dm9pZD4oWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICBqaXQu
ZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworICAgICAgICAvLyBXcml0ZSBleHBlY3RlZCB2YWx1
ZXMgaW50byB0aGUgcmVnaXN0ZXJzIChleGNlcHQgZm9yIHNwLCBmcCwgYW5kIHBjKS4KKyAgICAg
ICAgaml0LnByb2JlKFsmXSAoUHJvYmVDb250ZXh0KiBjb250ZXh0KSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8gaWQgPSBDQ2FsbEhlbHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsgaWQgPD0gQ0NhbGxI
ZWxwZXJzOjpsYXN0UmVnaXN0ZXIoKTsgaWQgPSBuZXh0SUQoaWQpKSB7CisgICAgICAgICAgICAg
ICAgb3JpZ2luYWxTdGF0ZS5ncHIoaWQpID0gY29udGV4dC0+Z3ByKGlkKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaXNQQyhpZCkgfHwgaXNTUChpZCkgfHwgaXNGUChpZCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmdwcihpZCkgPSB0ZXN0
V29yZChzdGF0aWNfY2FzdDxpbnQ+KGlkKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKGF1dG8gaWQgPSBDQ2FsbEhlbHBlcnM6OmZpcnN0RlBSZWdpc3RlcigpOyBpZCA8PSBDQ2Fs
bEhlbHBlcnM6Omxhc3RGUFJlZ2lzdGVyKCk7IGlkID0gbmV4dElEKGlkKSkgeworICAgICAgICAg
ICAgICAgIG9yaWdpbmFsU3RhdGUuZnByKGlkKSA9IGNvbnRleHQtPmZwcihpZCk7CisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZnByKGlkKSA9IHRlc3RXb3JkKGlkKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gSW52b2tlIHRoZSBwcm9iZSB0byBjYWxsIGEgbG90
IG9mIGZ1bmN0aW9ucyBhbmQgdHJhc2ggcmVnaXN0ZXIgdmFsdWVzLgorICAgICAgICBqaXQucHJv
YmUoWyZdIChQcm9iZUNvbnRleHQqKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAm
JiAodGVzdEZ1bmN0aW9uVG9UcmFzaEdQUnMoMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSkg
PT0gMTApOworICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgKHRlc3RGdW5jdGlvblRv
VHJhc2hGUFJzKDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkpID09IDEwKTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgcmVnaXN0ZXJzIGhhdmUgdGhlIGV4
cGVjdGVkIHZhbHVlcy4KKyAgICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmVDb250ZXh0KiBjb250
ZXh0KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gaWQgPSBDQ2FsbEhlbHBlcnM6OmZpcnN0UmVn
aXN0ZXIoKTsgaWQgPD0gQ0NhbGxIZWxwZXJzOjpsYXN0UmVnaXN0ZXIoKTsgaWQgPSBuZXh0SUQo
aWQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzUEMoaWQpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoaXNTUChpZCkgfHwgaXNGUChpZCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY29udGV4dC0+Z3ByKGlk
KSA9PSBvcmlnaW5hbFN0YXRlLmdwcihpZCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAm
JiBjb250ZXh0LT5ncHIoaWQpID09IHRlc3RXb3JkKGlkKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAoYXV0byBpZCA9IENDYWxsSGVscGVyczo6Zmlyc3RGUFJlZ2lzdGVyKCk7IGlk
IDw9IENDYWxsSGVscGVyczo6bGFzdEZQUmVnaXN0ZXIoKTsgaWQgPSBuZXh0SUQoaWQpKQorICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNvbnRleHQtPmZwcihpZCkgPT0gdGVz
dFdvcmQoaWQpOworICAgICAgICB9KTsKKworICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5h
bCBzdGF0ZS4KKyAgICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmVDb250ZXh0KiBjb250ZXh0KSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8gaWQgPSBDQ2FsbEhlbHBlcnM6OmZpcnN0UmVnaXN0ZXIo
KTsgaWQgPD0gQ0NhbGxIZWxwZXJzOjpsYXN0UmVnaXN0ZXIoKTsgaWQgPSBuZXh0SUQoaWQpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGlzUEMoaWQpIHx8IGlzU1AoaWQpIHx8IGlzRlAoaWQpKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5n
cHIoaWQpID0gb3JpZ2luYWxTdGF0ZS5ncHIoaWQpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZm9yIChhdXRvIGlkID0gQ0NhbGxIZWxwZXJzOjpmaXJzdEZQUmVnaXN0ZXIoKTsgaWQgPD0g
Q0NhbGxIZWxwZXJzOjpsYXN0RlBSZWdpc3RlcigpOyBpZCA9IG5leHRJRChpZCkpCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZnByKGlkKSA9IG9yaWdpbmFsU3RhdGUuZnByKGlkKTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgIGpp
dC5yZXQoKTsKKyAgICB9KTsKKyAgICBDSEVDSyhzdWNjZXNzKTsKK30KKwordm9pZCB0ZXN0UHJv
YmVNb2RpZmllc1N0YWNrUG9pbnRlcigpCit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAg
ICB1aW50OF90KiBvcmlnaW5hbFNQOworCisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihbJl0gKEND
YWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwor
CisgICAgICAgIC8vIFByZXNlcnZlIG9yaWdpbmFsIHN0YWNrIHBvaW50ZXIgYW5kIG1vZGlmeSB0
aGUgc3AuCisgICAgICAgIGppdC5wcm9iZShbJl0gKFByb2JlQ29udGV4dCogY29udGV4dCkgewor
ICAgICAgICAgICAgb3JpZ2luYWxTUCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNvbnRl
eHQtPnNwKCkpOworICAgICAgICAgICAgY29udGV4dC0+c3AoKSA9IG9yaWdpbmFsU1AgLSAxICog
S0I7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHN0YWNrIHBv
aW50ZXIgaGFzIHRoZSBleHBlY3RlZCB2YWx1ZSwgYW5kIHJlc3RvcmUgdGhlIG9yaWdpbmFsLgor
ICAgICAgICBqaXQucHJvYmUoWyZdIChQcm9iZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICAgICAg
ICAgIHN1Y2Nlc3MgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY29udGV4dC0+c3AoKSkg
PT0gKG9yaWdpbmFsU1AgLSAxICogS0IpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNwKCkgPSBv
cmlnaW5hbFNQOworICAgICAgICB9KTsKKworICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBv
cmlnaW5hbCBzdGFjayBwb2ludGVyIHdhcyByZXN0b3JlZC4KKyAgICAgICAgaml0LnByb2JlKFsm
XSAoUHJvYmVDb250ZXh0KiBjb250ZXh0KSB7CisgICAgICAgICAgICBzdWNjZXNzID0gKGNvbnRl
eHQtPnNwKCkgPT0gb3JpZ2luYWxTUCk7CisgICAgICAgIH0pOworCisgICAgICAgIGppdC5lbWl0
RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICBqaXQucmV0KCk7CisgICAgfSk7CisgICAgQ0hF
Q0soc3VjY2Vzcyk7Cit9CisKK3ZvaWQgdGVzdFByb2JlTW9kaWZpZXNQcm9ncmFtQ291bnRlcigp
Cit7CisgICAgLy8gVGhpcyB0ZXN0IHJlbGllcyBvbiB0ZXN0UHJvYmVSZWFkc0FyZ3VtZW50UmVn
aXN0ZXJzKCkgYW5kIHRlc3RQcm9iZVdyaXRlc0FyZ3VtZW50UmVnaXN0ZXJzKCkKKyAgICAvLyBo
YXZpbmcgYWxyZWFkeSB2YWxpZGF0ZWQgdGhhdCB3ZSBjYW4gcmVhZCBhbmQgd3JpdGUgZnJvbSBy
ZWdpc3RlcnMuIFdlJ2xsIHVzZSB0aGVzZSBhYmlsaXRpZXMKKyAgICAvLyB0byB2YWxpZGF0ZSB0
aGF0IHRoZSBwcm9iZSBwcmVzZXJ2ZXMgcmVnaXN0ZXIgdmFsdWVzLgorICAgIGJvb2wgc3VjY2Vz
cyA9IGZhbHNlOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbnRpbnVhdGlvbiA9IGNv
bXBpbGUoWyZdIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0
IHdlIHJlYWNoZWQgdGhlIGNvbnRpbnVhdGlvbi4KKyAgICAgICAgaml0LnByb2JlKFsmXSAoUHJv
YmVDb250ZXh0KikgeworICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0pOwor
CisgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICBqaXQucmV0KCk7
CisgICAgfSk7CisKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KFsmXSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKKyAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisKKyAgICAgICAgLy8g
V3JpdGUgZXhwZWN0ZWQgdmFsdWVzIGludG8gdGhlIHJlZ2lzdGVycy4KKyAgICAgICAgaml0LnBy
b2JlKFsmXSAoUHJvYmVDb250ZXh0KiBjb250ZXh0KSB7CisgICAgICAgICAgICBjb250ZXh0LT5w
YygpID0gY29udGludWF0aW9uLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICB9
KTsKKworICAgICAgICBqaXQuYnJlYWtwb2ludCgpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhl
cmUuCisgICAgfSk7CisgICAgQ0hFQ0soc3VjY2Vzcyk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKE1B
U01fUFJPQkUpCisKKyNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgdGFza3MuYXBwZW5kKCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPiggICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBb
Jl0gKCkgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygjdGVzdCAiLi4uXG4iKTsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGVzdDsgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygjdGVzdCAi
OiBPSyFcbiIpOyAgIFwKKyAgICAgICAgICAgICAgICB9KSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSk7CisKK3ZvaWQgcnVuKGNvbnN0IGNoYXIqIGZp
bHRlcikKK3sKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKworICAgIERlcXVlPFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiB0YXNrczsKKworICAgIGF1dG8gc2hvdWxkUnVuID0g
WyZdIChjb25zdCBjaGFyKiB0ZXN0TmFtZSkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiAhZmls
dGVyIHx8ICEhc3RyY2FzZXN0cih0ZXN0TmFtZSwgZmlsdGVyKTsKKyAgICB9OworCisgICAgUlVO
KHRlc3RTaW1wbGUoKSk7CisKKyNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKKyAgICBSVU4odGVzdFBy
b2JlUmVhZHNBcmd1bWVudFJlZ2lzdGVycygpKTsKKyAgICBSVU4odGVzdFByb2JlV3JpdGVzQXJn
dW1lbnRSZWdpc3RlcnMoKSk7CisgICAgUlVOKHRlc3RQcm9iZVByZXNlcnZlc0dQUlMoKSk7Cisg
ICAgUlVOKHRlc3RQcm9iZU1vZGlmaWVzU3RhY2tQb2ludGVyKCkpOworICAgIFJVTih0ZXN0UHJv
YmVNb2RpZmllc1Byb2dyYW1Db3VudGVyKCkpOworI2VuZGlmCisKKyAgICBpZiAodGFza3MuaXNF
bXB0eSgpKQorICAgICAgICB1c2FnZSgpOworCisgICAgTG9jayBsb2NrOworCisgICAgVmVjdG9y
PFJlZlB0cjxUaHJlYWQ+PiB0aHJlYWRzOworICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/
IDEgOiBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgeworICAgICAgICB0aHJl
YWRzLmFwcGVuZCgKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAorICAgICAgICAgICAgICAg
ICJ0ZXN0bWFzbSB0aHJlYWQiLAorICAgICAgICAgICAgICAgIFsmXSAoKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoKT4+IHRhc2s7CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobG9jayk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRhc2tzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sg
PSB0YXNrcy50YWtlRmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgdGFzay0+cnVuKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9KSk7CisgICAgfQorCisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJl
YWQgOiB0aHJlYWRzKQorICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAg
Y3Jhc2hMb2NrLmxvY2soKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKyNlbHNl
IC8vIG5vdCBFTkFCTEUoSklUKQorCitzdGF0aWMgdm9pZCBydW4oY29uc3QgY2hhciopCit7Cisg
ICAgZGF0YUxvZygiSklUIGlzIG5vdCBlbmFibGVkLlxuIik7Cit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoSklUKQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgY29uc3Qg
Y2hhciogZmlsdGVyID0gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKGFyZ2MpIHsKKyAgICBjYXNlIDE6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgZmlsdGVyID0gYXJndlsxXTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcnVuKGZpbHRlcik7CisgICAgcmV0dXJuIDA7Cit9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHJldmlzaW9uIDIxOTc0
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIGJvb2wgaGlkZGVuVHJ1dGhCZWNhdXNlTm9S
ZXR1cm5JcwogCiBzdGF0aWMgdm9pZCB1c2FnZSgpCiB7Ci0gICAgZGF0YUxvZygiVXNhZ2U6IHRl
c3RiMyBbPGZpbHRlcj5dXG4iKTsKKyAgICBkYXRhTG9nKCJVc2FnZTogdGVzdGFpciBbPGZpbHRl
cj5dXG4iKTsKICAgICBpZiAoaGlkZGVuVHJ1dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCgpKQog
ICAgICAgICBleGl0KDEpOwogfQpAQCAtMjAyOSw3ICsyMDI5LDcgQEAgdm9pZCBydW4oY29uc3Qg
Y2hhciogZmlsdGVyKQogICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51
bWJlck9mUHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgewogICAgICAgICB0aHJlYWRzLmFwcGVuZCgK
ICAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICJ0ZXN0YjMgdGhy
ZWFkIiwKKyAgICAgICAgICAgICAgICAidGVzdGFpciB0aHJlYWQiLAogICAgICAgICAgICAgICAg
IFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvc2hlbGwvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3NoZWxsL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMTk3NDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvc2hlbGwvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDYgKzU2LDEwIEBAIGlmIChUQVJHRVQganNjTGliKQogZW5kaWYgKCkKIAogaWYg
KE5PVCBXSU4zMikKKyAgICBzZXQoVEVTVE1BU01fU09VUkNFUworICAgICAgICAuLi9hc3NlbWJs
ZXIvdGVzdG1hc20uY3BwCisgICAgKQorCiAgICAgc2V0KFRFU1RCM19TT1VSQ0VTCiAgICAgICAg
IC4uL2IzL3Rlc3RiMy5jcHAKICAgICApCkBAIC02NCw2ICs2OCw5IEBAIGlmIChOT1QgV0lOMzIp
CiAgICAgICAgIC4uL2IzL2Fpci90ZXN0YWlyLmNwcAogICAgICkKIAorICAgIGFkZF9leGVjdXRh
YmxlKHRlc3RtYXNtICR7VEVTVE1BU01fU09VUkNFU30pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFy
aWVzKHRlc3RtYXNtICR7SlNDX0xJQlJBUklFU30pCisKICAgICBhZGRfZXhlY3V0YWJsZSh0ZXN0
YjMgJHtURVNUQjNfU09VUkNFU30pCiAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RiMyAk
e0pTQ19MSUJSQVJJRVN9KQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>