<?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>228538</bug_id>
          
          <creation_ts>2021-07-27 23:52:36 -0700</creation_ts>
          <short_desc>[ARM64] Add Pre/Post-Indexed Address Mode to Air for ARM64 (Store Instruction)</short_desc>
          <delta_ts>2021-08-16 18:59:00 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yijia Huang">yijia_huang</reporter>
          <assigned_to name="Yijia Huang">yijia_huang</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1779965</commentid>
    <comment_count>0</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-27 23:52:36 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779969</commentid>
    <comment_count>1</comment_count>
      <attachid>434407</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-28 00:04:44 -0700</bug_when>
    <thetext>Created attachment 434407
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781180</commentid>
    <comment_count>2</comment_count>
      <attachid>434731</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-01 19:23:27 -0700</bug_when>
    <thetext>Created attachment 434731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781310</commentid>
    <comment_count>3</comment_count>
      <attachid>434769</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-02 10:52:30 -0700</bug_when>
    <thetext>Created attachment 434769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781414</commentid>
    <comment_count>4</comment_count>
      <attachid>434792</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-02 15:09:46 -0700</bug_when>
    <thetext>Created attachment 434792
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781543</commentid>
    <comment_count>5</comment_count>
      <attachid>434818</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-02 22:49:17 -0700</bug_when>
    <thetext>Created attachment 434818
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781552</commentid>
    <comment_count>6</comment_count>
      <attachid>434820</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-02 23:41:16 -0700</bug_when>
    <thetext>Created attachment 434820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781838</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-03 23:53:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/81500926&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782452</commentid>
    <comment_count>8</comment_count>
      <attachid>435056</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-06 00:33:13 -0700</bug_when>
    <thetext>Created attachment 435056
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782541</commentid>
    <comment_count>9</comment_count>
      <attachid>434820</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-06 12:08:44 -0700</bug_when>
    <thetext>Comment on attachment 434820
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=434820&amp;action=review

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        , which benefits loop program. Here, this patch adds the corresponding mode for Store

this comma should be on the previous line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782679</commentid>
    <comment_count>10</comment_count>
      <attachid>435124</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-07 02:37:22 -0700</bug_when>
    <thetext>Created attachment 435124
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1783093</commentid>
    <comment_count>11</comment_count>
      <attachid>435238</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-09 20:18:40 -0700</bug_when>
    <thetext>Created attachment 435238
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1783177</commentid>
    <comment_count>12</comment_count>
      <attachid>435261</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-10 08:47:19 -0700</bug_when>
    <thetext>Created attachment 435261
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784395</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-15 10:41:10 -0700</bug_when>
    <thetext>Committed r281062 (240524@main): &lt;https://commits.webkit.org/240524@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 435261.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784716</commentid>
    <comment_count>14</comment_count>
      <attachid>435261</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-16 18:59:00 -0700</bug_when>
    <thetext>Comment on attachment 435261
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=435261&amp;action=review

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:103
&gt; +            //     memory = Store(value, base, offset)

I don&apos;t understand this comment since we&apos;re skipping things with offsets below.

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:112
&gt; +                if (memory-&gt;child(0)-&gt;hasInt() || memory-&gt;offset())

Why do we care about &quot;memory-&gt;child(0)-&gt;hasInt()&quot; here? Doesn&apos;t that just mean that we&apos;re storing a constant?

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:145
&gt; +            tryAddpostIndexCandidates();

I think the &quot;p&quot; should be capitalized here

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:165
&gt; +    // This search is expensive. However, due to the greedy pattern
&gt; +    // matching, no better method can be proposed at present.

I don&apos;t get this comment. We know what items we look up here. We also know their index when we are traversing the basic block. We could easily keep a table of these records (e.g, when we see an add, keep a table of add/memory-&gt;index in block)

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:173
&gt;          return index;

If we don&apos;t do above, this should be a RELEASE_ASSERT_NOT_REACHED, and the index value can be local to the block it&apos;s in.

&gt; Source/JavaScriptCore/b3/B3CanonicalizePrePostIncrements.cpp:184
&gt; +        // address = Add(base, offset)       address = Add(base, offset)
&gt; +        // ...                          --&gt;  newMemory = Load(base, offset)
&gt; +        // ...                               ...
&gt; +        // memory = Load(base, offset)       memory = Identity(newMemory)

This looks super wrong. What if the &quot;...&quot; contains a store to a memory location that aliases? Moving the load above the store is semantically incorrect because it&apos;s not identical to the behavior of the original program.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434407</attachid>
            <date>2021-07-28 00:04:44 -0700</date>
            <delta_ts>2021-08-01 19:23:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228538-20210728020443.patch</filename>
            <type>text/plain</type>
            <size>48079</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi45NzZkNDBmOGVhMmZjYTBj
YmU2NDdhODkyZTk2NTJiMmM1N2E5Yzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAyMS0wNy0yOCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQgKFZlcnNpb24gNSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyODUzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAg
ICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzOjpQcmVJbmRl
eEFkZHJlc3MpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpQb3N0SW5k
ZXhBZGRyZXNzOjpQb3N0SW5kZXhBZGRyZXNzKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2Fk
NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk02NDo6c3RvcmUzMik6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNt
LmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdFN0b3JlUHJlUG9zdEluZGV4MzIpOgorICAgICAgICAo
SlNDOjp0ZXN0U3RvcmVQcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChKU0M6OnRlc3RMb2FkUHJl
UG9zdEluZGV4MzIpOgorICAgICAgICAoSlNDOjp0ZXN0TG9hZFByZVBvc3RJbmRleDY0KToKKyAg
ICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIzL0IzVmFsdWVLZXkuaDoK
KyAgICAgICAgKiBiMy9CM1ZhbHVlS2V5SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWVLZXk6OlZhbHVlS2V5KToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjpqc0hhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmR1bXAgY29uc3QpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9haXIvQWlyQXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cHJlSW5k
ZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnBvc3RJbmRleCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNQcmVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aXNQb3N0SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmlzTWVtb3J5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpvZmZzZXQgY29uc3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OmlzR1AgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmlzRlAgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRQcmVJ
bmRleEZvcm0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRQb3N0SW5kZXhG
b3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkRm9ybSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmFzUHJlSW5kZXhBZGRyZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjph
c1Bvc3RJbmRleEFkZHJlc3MgY29uc3QpOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0Lmg6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OnJlcGxhY2VJbmRlbnRpdHkpOgorICAgICAgICAq
IGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVy
YXRvci5yYjoKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5j
cHA6CisgICAgICAgICh0ZXN0TG9hZFByZUluZGV4MzIpOgorICAgICAgICAodGVzdExvYWRQcmVJ
bmRleDY0KToKKyAgICAgICAgKHRlc3RMb2FkUG9zdEluZGV4MzIpOgorICAgICAgICAodGVzdExv
YWRQb3N0SW5kZXg2NCk6CisgICAgICAgIChhZGRTaHJUZXN0cyk6CisgICAgICAgICogaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpqaXRXcml0ZVRodW5rR2VuZXJh
dG9yKToKKwogMjAyMS0wNy0yNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIEFkZCBUZW1wb3JhbCB0byBmZWF0dXJlcy5qc29uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCmlu
ZGV4IDNkMTk0OWE0MDc4NWQ5OWNhNjE1OTVhYWIwNGJlNmYxZDBkOTZiYTMuLjIzNTRjNDUzNjhj
N2MwZDVjZTkwMThhY2ZmMjg0YzRhMGEwNDMxYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCkBAIC0yNDUs
NiArMjQ1LDM0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH07CiAKKyAgICAvLyBQcmVJbmRl
eEFkZHJlc3M6CisgICAgLy8KKyAgICAvLyBEZXNjcmliZXMgYW4gYWRkcmVzcyB3aXRoIGJhc2Ug
YWRkcmVzcyBhbmQgcHJlLWluY3JlbWVudC9kZWNyZW1lbnQgaW5kZXguCisgICAgc3RydWN0IFBy
ZUluZGV4QWRkcmVzcyB7CisgICAgICAgIFByZUluZGV4QWRkcmVzcyhSZWdpc3RlcklEIGJhc2Us
IGludCBpbmRleCkKKyAgICAgICAgICAgIDogYmFzZShiYXNlKQorICAgICAgICAgICAgLCBpbmRl
eChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBiYXNl
OworICAgICAgICBpbnQgaW5kZXg7CisgICAgfTsKKworICAgIC8vIFBvc3RJbmRleEFkZHJlc3M6
CisgICAgLy8KKyAgICAvLyBEZXNjcmliZXMgYW4gYWRkcmVzcyB3aXRoIGJhc2UgYWRkcmVzcyBh
bmQgcG9zdC1pbmNyZW1lbnQvZGVjcmVtZW50IGluZGV4LgorICAgIHN0cnVjdCBQb3N0SW5kZXhB
ZGRyZXNzIHsKKyAgICAgICAgUG9zdEluZGV4QWRkcmVzcyhSZWdpc3RlcklEIGJhc2UsIGludCBp
bmRleCkKKyAgICAgICAgICAgIDogYmFzZShiYXNlKQorICAgICAgICAgICAgLCBpbmRleChpbmRl
eCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBiYXNlOworICAg
ICAgICBpbnQgaW5kZXg7CisgICAgfTsKKwogICAgIC8vIEFic29sdXRlQWRkcmVzczoKICAgICAv
LwogICAgIC8vIERlc2NyaWJlcyBhbiBtZW1vcnkgb3BlcmFuZCBnaXZlbiBieSBhIHBvaW50ZXIu
ICBGb3IgcmVndWxhciBsb2FkICYgc3RvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggZmUzMGQ5Yzg0ZDM1Mjdl
ZWIxNmZjZDA2ZTExNWZjNjhkNjkwOTBmZC4uMmE5MTJkMGRkMjY2MjZiZDc0ZTEwM2JlZjk2NWYy
YmFkZmNlMGJkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAgLTE0NDUsOSArMTQ0NSwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIGxvYWQ8NjQ+KGFkZHJlc3MsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgbG9hZDY0
KFJlZ2lzdGVySUQgc3JjLCBQb3N0SW5kZXggc2ltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZv
aWQgbG9hZDY0KFByZUluZGV4QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0g
ICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLCBzaW1tKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubGRyPDY0PihkZXN0LCBzcmMuYmFzZSwgUHJlSW5kZXgoc3JjLmluZGV4KSk7Cisg
ICAgfQorCisgICAgdm9pZCBsb2FkNjQoUG9zdEluZGV4QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwgc3JjLmJhc2Us
IFBvc3RJbmRleChzcmMuaW5kZXgpKTsKICAgICB9CiAKICAgICBEYXRhTGFiZWwzMiBsb2FkNjRX
aXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQpA
QCAtMTU0NCw2ICsxNTQ5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDwzMj4oYWRkcmVzcywg
ZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBsb2FkMzIoUHJlSW5kZXhBZGRyZXNzIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihkZXN0LCBz
cmMuYmFzZSwgUHJlSW5kZXgoc3JjLmluZGV4KSk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIo
UG9zdEluZGV4QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxkcjwzMj4oZGVzdCwgc3JjLmJhc2UsIFBvc3RJbmRleChzcmMuaW5kZXgpKTsK
KyAgICB9CisKICAgICBEYXRhTGFiZWwzMiBsb2FkMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFk
ZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgRGF0YUxhYmVs
MzIgbGFiZWwodGhpcyk7CkBAIC0xNzMzLDcgKzE3NDgsMTcgQEAgcHVibGljOgogICAgICAgICBt
X2Fzc2VtYmxlci5hZGQ8NjQ+KG1lbW9yeVRlbXBSZWdpc3RlciwgbWVtb3J5VGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmluZGV4LCBpbmRleEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUp
OwogICAgICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgYWRkcmVzcy5iYXNlLCBtZW1vcnlU
ZW1wUmVnaXN0ZXIpOwogICAgIH0KLSAgICAKKworICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklE
IHNyYywgUHJlSW5kZXhBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5z
dHI8NjQ+KHNyYywgZGVzdC5iYXNlLCBQcmVJbmRleChkZXN0LmluZGV4KSk7CisgICAgfQorCisg
ICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBQb3N0SW5kZXhBZGRyZXNzIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgZGVzdC5iYXNlLCBQb3N0SW5k
ZXgoZGVzdC5pbmRleCkpOworICAgIH0KKwogICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNy
YywgY29uc3Qgdm9pZCogYWRkcmVzcykKICAgICB7CiAgICAgICAgIHN0b3JlPDY0PihzcmMsIGFk
ZHJlc3MpOwpAQCAtMTc3NywxMSArMTgwMiw2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmU2NChk
YXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlNjQoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgUG9zdEluZGV4IHNpbW0pCi0gICAgewotICAg
ICAgICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgZGVzdCwgc2ltbSk7Ci0gICAgfQotICAgIAog
ICAgIERhdGFMYWJlbDMyIHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQg
c3JjLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0
aGlzKTsKQEAgLTE4NzksNiArMTg5OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0
YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lz
dGVySUQgc3JjLCBQcmVJbmRleEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnN0cjwzMj4oc3JjLCBkZXN0LmJhc2UsIFByZUluZGV4KGRlc3QuaW5kZXgpKTsKKyAgICB9
CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFBvc3RJbmRleEFkZHJlc3MgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0cjwzMj4oc3JjLCBkZXN0LmJhc2UsIFBv
c3RJbmRleChkZXN0LmluZGV4KSk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgc3RvcmUzMldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKICAg
ICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAppbmRleCBmMjJiZmZjZTE1NTRiMDJjMjI2YzIx
NDkyYWIwNjdiYWIzOGM0MGI1Li43MDdhYmIwNTJiMzgzMjgxODU5ODQ1YzJjNTk0OWM5Y2M3NWJm
MDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNt
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApA
QCAtMjIxMiw2ICsyMjEyLDE3NiBAQCB2b2lkIHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNo
aWZ0NjQoKQogICAgICAgICB9CiAgICAgfQogfQorCit2b2lkIHRlc3RTdG9yZVByZVBvc3RJbmRl
eDMyKCkKK3sKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludHB0cl90
IGFkZHIgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZudW1zWzFdKTsKKyAgICBpbnQzMl90IGlu
ZGV4ID0gc2l6ZW9mKGludDMyX3QpOworCisgICAgYXV0byB0ZXN0MSA9IFsmXSAoaW50MzJfdCBz
cmMpIHsKKyAgICAgICAgYXV0byBzdG9yZSA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAg
ICAgLy8gKisrcDEgPSA0OyByZXR1cm4gcDE7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJ
bmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6UHJlSW5kZXhBZGRyZXNzKEdQUkluZm86
OmFyZ3VtZW50R1BSMSwgaW5kZXgpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFy
Z3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0
RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9
KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7Cisg
ICAgfTsKKworICAgIGludDMyX3QqIHAxID0gYml0d2lzZV9jYXN0PGludDMyX3QqPih0ZXN0MSg0
KSk7CisgICAgQ0hFQ0tfRVEoKnAxLCA0KTsKKyAgICBDSEVDS19FUSgqLS1wMSwgbnVtc1sxXSk7
CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChpbnQzMl90IHNyYykgeworICAgICAgICBhdXRvIHN0
b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0
RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAvLyAqcDIrKyA9IDU7IHJldHVy
biBwMjsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgQ0Nh
bGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgaW5kZXgp
KTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQp
OworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGlu
dm9rZTxpbnRwdHJfdD4oc3RvcmUsIHNyYywgYWRkcik7CisgICAgfTsKKworICAgIGludDMyX3Qq
IHAyID0gYml0d2lzZV9jYXN0PGludDMyX3QqPih0ZXN0Mig1KSk7CisgICAgQ0hFQ0tfRVEoKnAy
LCA0KTsKKyAgICBDSEVDS19FUSgqLS1wMiwgNSk7Cit9CisKK3ZvaWQgdGVzdFN0b3JlUHJlUG9z
dEluZGV4NjQoKQoreworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50
cHRyX3QgYWRkciA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJm51bXNbMV0pOworICAgIGludDMy
X3QgaW5kZXggPSBzaXplb2YoaW50NjRfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZdIChpbnQ2
NF90IHNyYykgeworICAgICAgICBhdXRvIHN0b3JlID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVy
cyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAg
ICAgICAgICAvLyAqKytwMSA9IDQ7IHJldHVybiBwMTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BS
SW5mbzo6YXJndW1lbnRHUFIxLCBpbmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5m
bzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAg
IGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAg
ICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRy
KTsKKyAgICB9OworCisgICAgaW50NjRfdCogcDEgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHRl
c3QxKDQpKTsKKyAgICBDSEVDS19FUSgqcDEsIDQpOworICAgIENIRUNLX0VRKCotLXAxLCBudW1z
WzFdKTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3Qgc3JjKSB7CisgICAgICAgIGF1
dG8gc3RvcmUgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAg
IGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgIC8vICpwMisrID0gNTsg
cmV0dXJuIHAyOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBp
bmRleCkpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gaW52b2tlPGludHB0cl90PihzdG9yZSwgc3JjLCBhZGRyKTsKKyAgICB9OworCisgICAgaW50
NjRfdCogcDIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHRlc3QyKDUpKTsKKyAgICBDSEVDS19F
USgqcDIsIDQpOworICAgIENIRUNLX0VRKCotLXAyLCA1KTsKK30KKwordm9pZCB0ZXN0TG9hZFBy
ZVBvc3RJbmRleDMyKCkKK3sKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAg
IGludDMyX3QgaW5kZXggPSBzaXplb2YoaW50MzJfdCk7CisKKyAgICBhdXRvIHRlc3QxID0gWyZd
IChpbnQzMl90IHJlcGxhY2UpIHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKEND
YWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQp
OworCisgICAgICAgICAgICAvLyByZXMgPSAqKytwMTsgKnAxID0gNDsgcmV0dXJuIHJlczsKKyAg
ICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpQcmVJbmRleEFkZHJlc3MoR1BSSW5m
bzo6YXJndW1lbnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAg
ICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZXBsYWNlKSwgQ0Nh
bGxIZWxwZXJzOjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAg
ICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAg
ICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50
MzJfdD4obG9hZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0MSg0KSwg
Myk7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgNCk7CisKKyAgICBhdXRvIHRlc3QyID0gWyZdIChp
bnQzMl90IHJlcGxhY2UpIHsKKyAgICAgICAgYXV0byBsb2FkID0gY29tcGlsZShbPV0gKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOwor
CisgICAgICAgICAgICAvLyByZXMgPSAqcDIrKzsgKnAyID0gNTsgcmV0dXJuIHJlczsKKyAgICAg
ICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpQb3N0SW5kZXhBZGRyZXNzKEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgaW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAg
ICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVwbGFjZSksIENDYWxs
SGVscGVyczo6SW1wbGljaXRBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAg
ICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAg
ICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW52b2tlPGludDMy
X3Q+KGxvYWQsICZudW1zWzFdKTsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEodGVzdDIoNSksIDIp
OworICAgIENIRUNLX0VRKG51bXNbMl0sIDUpOworfQorCit2b2lkIHRlc3RMb2FkUHJlUG9zdElu
ZGV4NjQoKQoreworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJf
dCBpbmRleCA9IHNpemVvZihpbnQ2NF90KTsKKworICAgIGF1dG8gdGVzdDEgPSBbJl0gKGludDY0
X3QgcmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAg
ICAgICAgICAgIC8vIHJlcyA9ICorK3AxOyAqcDEgPSA0OyByZXR1cm4gcmVzOworICAgICAgICAg
ICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OlByZUluZGV4QWRkcmVzcyhHUFJJbmZvOjphcmd1
bWVudEdQUjAsIGluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KHJlcGxhY2UpLCBDQ2FsbEhlbHBl
cnM6OkltcGxpY2l0QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgICAg
IGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworCisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAg
aml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90Pihs
b2FkLCAmbnVtc1sxXSk7CisgICAgfTsKKworICAgIENIRUNLX0VRKHRlc3QxKDQpLCAzKTsKKyAg
ICBDSEVDS19FUShudW1zWzJdLCA0KTsKKworICAgIGF1dG8gdGVzdDIgPSBbJl0gKGludDY0X3Qg
cmVwbGFjZSkgeworICAgICAgICBhdXRvIGxvYWQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAg
ICAgICAgIC8vIHJlcyA9ICpwMisrOyAqcDIgPSA1OyByZXR1cm4gcmVzOworICAgICAgICAgICAg
aml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OlBvc3RJbmRleEFkZHJlc3MoR1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBpbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQu
c3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChyZXBsYWNlKSwgQ0NhbGxIZWxwZXJz
OjpJbXBsaWNpdEFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgICAgICBq
aXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGpp
dC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4obG9h
ZCwgJm51bXNbMV0pOworICAgIH07CisKKyAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CisgICAg
Q0hFQ0tfRVEobnVtc1syXSwgNSk7Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShY
ODZfNjQpIHx8IENQVShBUk02NCkKQEAgLTQ0NzUsNiArNDY0NSwxMSBAQCB2b2lkIHJ1bihjb25z
dCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBS
VU4odGVzdFhvck5vdFdpdGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFhvck5vdFdpdGhS
aWdodFNoaWZ0NjQoKSk7CiAgICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0
NjQoKSk7CisKKyAgICBSVU4odGVzdFN0b3JlUHJlUG9zdEluZGV4MzIoKSk7CisgICAgUlVOKHRl
c3RTdG9yZVByZVBvc3RJbmRleDY0KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDMy
KCkpOworICAgIFJVTih0ZXN0TG9hZFByZVBvc3RJbmRleDY0KCkpOwogI2VuZGlmCiAKICNpZiBD
UFUoQVJNNjRFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRl
eCBkNWZjMzE2NDY1OTY4ZWI3MzcxYjZmZjFjYzZmODMxN2ZlY2RlNTJlLi4zYmVhMDc3MDU3N2U3
YmRjYTU1NGM4ZWUwNWE3ZGRkMmJlOTA0ODNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlclRvQWlyLmNwcApAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIkIzVXBzaWxvblZh
bHVlLmgiCiAjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5l
cy5oIgorI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYXJpYWJs
ZS5oIgogI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5oIgogI2luY2x1ZGUgIkIzV2FzbUFkZHJl
c3NWYWx1ZS5oIgpAQCAtMjA3LDcgKzIwOCw4IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgZmlu
aXNoQXBwZW5kaW5nSW5zdHJ1Y3Rpb25zKG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSk7CiAgICAgICAg
IH0KLSAgICAgICAgCisKKyAgICAgICAgZGV0ZWN0UHJlUG9zdEluZGV4QWRkcmVzcygpOwogICAg
ICAgICBtX2Jsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKIAogICAgICAgICBBaXI6Okluc2Vy
dGlvblNldCBpbnNlcnRpb25TZXQobV9jb2RlKTsKQEAgLTIxNyw2ICsyMTksMTc2IEBAIHB1Ymxp
YzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgdm9pZCBkZXRlY3RQcmVQb3N0SW5kZXhBZGRyZXNz
KCkKKyAgICB7CisgICAgICAgIGlmIChtX3Byb2NlZHVyZS5vcHRMZXZlbCgpIDwgMiB8fCAhaXNB
Uk02NCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB1c2luZyBuYW1lc3BhY2UgQWly
OworCisgICAgICAgIHVpbnQzMl90IGxvYyA9IDA7CisgICAgICAgIEhhc2hNYXA8VmFsdWUqLCBJ
bnN0Kj4gdmFsdWVUb0luc3Q7CisgICAgICAgIEhhc2hNYXA8VmFsdWUqLCB1aW50MzJfdD4gdmFs
dWVUb0xvYzsKKyAgICAgICAgSGFzaE1hcDxUbXAsIFZlY3Rvcjx1aW50MzJfdD4+IHRtcFRvTG9j
czsKKyAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmVjdG9yPFZhbHVlKj4+IGJhc2VPZmZzZXRU
b0FkZHJlc3NlczsKKyAgICAgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcHJlSW5k
ZXhDYW5kaWRhdGVzOworICAgICAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVl
Kj4+IGJhc2VUb01lbW9yaWVzOworICAgICAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUq
PiBwb3N0SW5kZXhDYW5kaWRhdGVzOworICAgICAgICBJbmRleFNldDxWYWx1ZSo+IGlnbm9yZWRW
YWx1ZXM7CisKKyAgICAgICAgYXV0byB0cnlQcmVQb3N0SW5kZXggPSBbJl0gKFZhbHVlKiB2YWx1
ZSwgSW5zdCYgaW5zdCwgdWludDMyX3QgbG9jKSB7CisgICAgICAgICAgICBhdXRvIHVwZGF0ZVZh
bGlkVmFsdWUgPSBbJl0gKCkgeworICAgICAgICAgICAgICAgIHZhbHVlVG9JbnN0LmFkZCh2YWx1
ZSwgJmluc3QpOworICAgICAgICAgICAgICAgIHZhbHVlVG9Mb2MuYWRkKHZhbHVlLCBsb2MpOwor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgTG9hZDogeworICAgICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisKKyAgICAgICAgICAgICAgICAvLyBQ
cmUtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IGFkZChi
YXNlLCBvZmZzZXQpCisgICAgICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IGxvYWQoYmFzZSwg
b2Zmc2V0KQorICAgICAgICAgICAgICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKKyAgICAgICAg
ICAgICAgICAvLyAgICAgbWVtb3J5ID0gbG9hZChiYXNlLCAwKQorICAgICAgICAgICAgICAgIC8v
ICAgICBhZGRyZXNzID0gYWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICBhdXRvIHRy
eVByZVBvc3RJbmRleE1lbW9yeSA9IFsmXSAoKSB7CisgICAgICAgICAgICAgICAgICAgIEFpcjo6
T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92
ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBlKCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpQcmVJbmRleCwgQXJnOjpUbXApKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWxp
ZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXko
bWVtb3J5LT5jaGlsZCgwKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250
YWlucyhiYXNlT2Zmc2V0a2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
VmFsdWUqIGFkZHJlc3MgOiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuZ2V0KGJhc2VPZmZzZXRrZXkp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleENhbmRpZGF0ZXMuYWRk
KG1lbW9yeSwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVRvTWVtb3JpZXMu
YWRkKG1lbW9yeS0+Y2hpbGQoMCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAg
ICAgdHJ5UHJlUG9zdEluZGV4TWVtb3J5KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgQWRkOiB7CisgICAgICAgICAgICAgICAgVmFs
dWUqIGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIHJpZ2h0
ID0gdmFsdWUtPmNoaWxkKDEpOworCisgICAgICAgICAgICAgICAgYXV0byB0cnlQb3RlbnRpYWxQ
b3N0SW5kZXhBZGRyZXNzID0gWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyaWdo
dC0+aGFzSW50UHRyKCkgfHwgdmFsdWUtPnR5cGUoKSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0g
cmlnaHQtPmFzSW50UHRyKCk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBl
IHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFyZzo6aXNW
YWxpZFBvc3RJbmRleEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICAvLyBzbyBmYXIgdGhpcyBBZGQgdmFsdWUgaXMg
YSB2YWxpZCBhZGRyZXNzIGNhbmRpZGF0ZSBmb3IgYm90aCBwcmVmaXggYW5kIHBvc3RmaXggcGF0
dGVybgorICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWxpZFZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShsZWZ0LCBzdGF0aWNf
Y2FzdDxpbnQ2NF90PihzbWFsbE9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICBiYXNlT2Zm
c2V0VG9BZGRyZXNzZXMuYWRkKGJhc2VPZmZzZXRrZXksIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJh
dG9yLT52YWx1ZS5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZVRv
TWVtb3JpZXMuY29udGFpbnMobGVmdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
TWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VUb01lbW9yaWVzLmdldChsZWZ0KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwb3N0SW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgICAgICB0cnlQb3RlbnRpYWxQb3N0SW5kZXhBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byB1
cGRhdGVBbmFseXNpc0RhdGEgPSBbJl0gKEluc3QmIGluc3QpIHsKKyAgICAgICAgICAgICsrbG9j
OworICAgICAgICAgICAgdHJ5UHJlUG9zdEluZGV4KGluc3Qub3JpZ2luLCBpbnN0LCBsb2MpOwor
ICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xl
LCBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUp
KSB7CisgICAgICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdChbJl0gKFRtcCYgdG1w
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXBUb0xvY3MuYWRkKHRtcCwgVmVjdG9yPHVp
bnQzMl90PigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGxvYyk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9Owor
CisgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGIzYmxvY2sgOiBtX3Byb2NlZHVyZS5ibG9j
a3NJblByZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IG1fYmxvY2tU
b0Jsb2NrW2IzYmxvY2tdLT5pbnN0cygpKQorICAgICAgICAgICAgICAgIHVwZGF0ZUFuYWx5c2lz
RGF0YShpbnN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gbGFzdFVzZUxvY2F0aW9uID0g
WyZdIChUbXAmIHRtcCkgLT4gdWludDMyX3QgeworICAgICAgICAgICAgcmV0dXJuIHRtcFRvTG9j
cy5jb250YWlucyh0bXApID8gdG1wVG9Mb2NzLmdldCh0bXApLmxhc3QoKSA6IDA7CisgICAgICAg
IH07CisKKyAgICAgICAgZm9yIChhdXRvIGl0ciA9IHByZUluZGV4Q2FuZGlkYXRlcy5iZWdpbigp
OyBpdHIgIT0gcHJlSW5kZXhDYW5kaWRhdGVzLmVuZCgpOyArK2l0cikgeworICAgICAgICAgICAg
TWVtb3J5VmFsdWUqIG1lbW9yeSA9IGl0ci0+a2V5OworICAgICAgICAgICAgVmFsdWUqIGFkZHJl
c3MgPSBpdHItPnZhbHVlOworICAgICAgICAgICAgVmFsdWUqIGJhc2UgPSBhZGRyZXNzLT5jaGls
ZCgwKTsKKyAgICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwg
aWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgVG1wJiBtZW1vcnlUbXAgPSBtX3ZhbHVlVG9UbXBbbWVtb3J5XTsK
KyAgICAgICAgICAgIFRtcCYgYWRkcmVzc1RtcCA9IG1fdmFsdWVUb1RtcFthZGRyZXNzXTsKKyAg
ICAgICAgICAgIFRtcCYgYmFzZVRtcCA9IG1fdmFsdWVUb1RtcFtiYXNlXTsKKyAgICAgICAgICAg
IGlmICghbWVtb3J5VG1wIHx8ICFhZGRyZXNzVG1wIHx8ICFiYXNlVG1wKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGxhc3RVc2VMb2NhdGlvbihhZGRyZXNzVG1w
KSA8PSB2YWx1ZVRvTG9jLmdldChtZW1vcnkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAvLyBiYXNlID0gWFhYICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSA9
IFhYWCAKKyAgICAgICAgICAgIC8vIGFkZHJlc3MgPSBhZGQoYmFzZSwgb2Zmc2V0KSAgLS0+ICBh
ZGRyZXNzID0gYmFzZQorICAgICAgICAgICAgLy8gbWVtb3J5ID0gbG9hZChiYXNlLCBvZmZzZXQp
ICAgICAgIG1lbW9yeSA9IGxvYWQoYWRkcmVzcywgcHJlZml4KG9mZnNldCkpCisgICAgICAgICAg
ICBJbnN0KiBhZGRyZXNzSW5zdCA9IHZhbHVlVG9JbnN0LmdldChhZGRyZXNzKTsKKyAgICAgICAg
ICAgIGFkZHJlc3NJbnN0LT5yZXBsYWNlSW5kZW50aXR5KHJlbGF4ZWRNb3ZlRm9yVHlwZShhZGRy
ZXNzLT50eXBlKCkpLCBiYXNlVG1wLCBhZGRyZXNzVG1wKTsKKworICAgICAgICAgICAgSW5zdCog
bWVtb3J5SW5zdCA9IHZhbHVlVG9JbnN0LmdldChtZW1vcnkpOworICAgICAgICAgICAgQWlyOjpP
cGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVudDMyLCBNb3Zl
V2l0aEluY3JlbWVudDY0LCBtZW1vcnktPnR5cGUoKSk7CisgICAgICAgICAgICBtZW1vcnlJbnN0
LT5yZXBsYWNlSW5kZW50aXR5KG9wY29kZSwgQXJnOjpwcmVJbmRleChhZGRyZXNzVG1wLCBtZW1v
cnktPm9mZnNldCgpKSwgbWVtb3J5VG1wKTsKKworICAgICAgICAgICAgaWdub3JlZFZhbHVlcy5h
ZGQoYWRkcmVzcyk7CisgICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChtZW1vcnkpOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byBiZWZvcmVMYXN0VXNlTG9jYXRpb24gPSBbJl0gKFRtcCYg
dG1wKSAtPiB1aW50MzJfdCB7CisgICAgICAgICAgICBpZiAodG1wVG9Mb2NzLmNvbnRhaW5zKHRt
cCkpIHsKKyAgICAgICAgICAgICAgICBWZWN0b3I8dWludDMyX3Q+IGxvY3MgPSB0bXBUb0xvY3Mu
Z2V0KHRtcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxvY3Muc2l6ZSgpID4gMSA/IGxvY3Mu
YXQobG9jcy5zaXplKCkgLSAyKSA6IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGF1dG8gaXRyID0gcG9zdEluZGV4Q2Fu
ZGlkYXRlcy5iZWdpbigpOyBpdHIgIT0gcG9zdEluZGV4Q2FuZGlkYXRlcy5lbmQoKTsgKytpdHIp
IHsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBpdHItPmtleTsKKyAgICAgICAg
ICAgIFZhbHVlKiBhZGRyZXNzID0gaXRyLT52YWx1ZTsKKyAgICAgICAgICAgIFZhbHVlKiBiYXNl
ID0gYWRkcmVzcy0+Y2hpbGQoMCk7CisgICAgICAgICAgICBpZiAoaWdub3JlZFZhbHVlcy5jb250
YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFRtcCYgbWVtb3J5VG1wID0gbV92YWx1
ZVRvVG1wW21lbW9yeV07CisgICAgICAgICAgICBUbXAmIGFkZHJlc3NUbXAgPSBtX3ZhbHVlVG9U
bXBbYWRkcmVzc107CisgICAgICAgICAgICBUbXAmIGJhc2VUbXAgPSBtX3ZhbHVlVG9UbXBbYmFz
ZV07CisgICAgICAgICAgICBpZiAoIW1lbW9yeVRtcCB8fCAhYWRkcmVzc1RtcCB8fCAhYmFzZVRt
cCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChiZWZvcmVMYXN0
VXNlTG9jYXRpb24oYmFzZVRtcCkgPiB2YWx1ZVRvTG9jLmdldChtZW1vcnkpIHx8IGxhc3RVc2VM
b2NhdGlvbihhZGRyZXNzVG1wKSA8PSB2YWx1ZVRvTG9jLmdldChhZGRyZXNzKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gYmFzZSA9IFhYWCAgICAgICAgICAg
ICAgICAgICAgICAgIGJhc2UgPSBYWFgKKyAgICAgICAgICAgIC8vIG1lbW9yeSA9IGxvYWQoYmFz
ZSwgMCkgICAgICAgLS0+ICBtZW1vcnkgPSBsb2FkKGJhc2UsIHByZWZpeChvZmZzZXQpKQorICAg
ICAgICAgICAgLy8gYWRkcmVzcyA9IGFkZChiYXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBi
YXNlCisgICAgICAgICAgICBJbnN0KiBtZW1vcnlJbnN0ID0gdmFsdWVUb0luc3QuZ2V0KG1lbW9y
eSk7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBlKE1v
dmVXaXRoSW5jcmVtZW50MzIsIE1vdmVXaXRoSW5jcmVtZW50NjQsIG1lbW9yeS0+dHlwZSgpKTsK
KyAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8
VmFsdWU6Ok9mZnNldFR5cGU+KGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludFB0cigpKTsKKyAgICAg
ICAgICAgIG1lbW9yeUluc3QtPnJlcGxhY2VJbmRlbnRpdHkob3Bjb2RlLCBBcmc6OnBvc3RJbmRl
eChiYXNlVG1wLCBzbWFsbE9mZnNldCksIG1lbW9yeVRtcCk7CisKKyAgICAgICAgICAgIEluc3Qq
IGFkZHJlc3NJbnN0ID0gdmFsdWVUb0luc3QuZ2V0KGFkZHJlc3MpOworICAgICAgICAgICAgYWRk
cmVzc0luc3QtPnJlcGxhY2VJbmRlbnRpdHkocmVsYXhlZE1vdmVGb3JUeXBlKGFkZHJlc3MtPnR5
cGUoKSksIGJhc2VUbXAsIGFkZHJlc3NUbXApOworCisgICAgICAgICAgICBpZ25vcmVkVmFsdWVz
LmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKG1lbW9yeSk7Cisg
ICAgICAgIH0KKyAgICB9CisKICAgICBib29sIHNob3VsZENvcHlQcm9wYWdhdGUoVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKQEAgLTU0Niw3
ICs3MTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICAgICAgcmV0dXJuIHNjYWxlOwogICAgIH0KLSAgICAKKwogICAgIC8vIFRoaXMgdHVybnMgdGhl
IGdpdmVuIG9wZXJhbmQgaW50byBhbiBhZGRyZXNzLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIElu
dCwgdHlwZW5hbWUgPSBWYWx1ZTo6SXNMZWdhbE9mZnNldDxJbnQ+PgogICAgIEFyZyBlZmZlY3Rp
dmVBZGRyKFZhbHVlKiBhZGRyZXNzLCBJbnQgb2Zmc2V0LCBXaWR0aCB3aWR0aCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCmluZGV4IGIzMzQ5N2FhMmRjYjQ4NWZmNWYxMWEzMGNj
ZGNlMmJmMTBhMjhhNmQuLjQ2ZjQ0MGM1MmZkNGUwY2U5ZGYwOTY1OThjZDVjYzA2ZjM5OTUxYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaApAQCAtNTYsNiArNTYsOCBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIFZhbHVlS2V5KFZhbHVlKiBjaGlsZCwgaW50NjRf
dCB2YWx1ZSk7CisKICAgICBWYWx1ZUtleShLaW5kLCBUeXBlLCBWYWx1ZSogY2hpbGQpOwogCiAg
ICAgVmFsdWVLZXkoS2luZCwgVHlwZSwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleUlubGluZXMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCmluZGV4IDE0MTU4ZDUw
MWY3M2ZjYmY3MGQ3NTczZjgwMGViMjBiNjJmYjlhYWYuLmUxODY2MTk0OTI2MjE0MDY2ZmU4OWU1
YzcxYjJkMDc3ODA1NDcwMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlS2V5SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
S2V5SW5saW5lcy5oCkBAIC0zMyw2ICszMywxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKIAoraW5saW5lIFZhbHVlS2V5OjpWYWx1ZUtleShWYWx1ZSogY2hpbGQsIGludDY0
X3QgdmFsdWUpCit7CisgICAgbV9raW5kID0gT29wczsKKyAgICBtX3R5cGUgPSBWb2lkOworICAg
IHUuaW5kaWNlc1swXSA9IGNoaWxkLT5pbmRleCgpOworICAgIHUudmFsdWUgPSB2YWx1ZTsKK30K
KwogaW5saW5lIFZhbHVlS2V5OjpWYWx1ZUtleShLaW5kIGtpbmQsIFR5cGUgdHlwZSwgVmFsdWUq
IGNoaWxkKQogICAgIDogbV9raW5kKGtpbmQpCiAgICAgLCBtX3R5cGUodHlwZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAppbmRleCAxMDNjNmVjY2EzZDMxNGJiNGVkOGMw
MmE0ZDJmMDA5Y2E2NDFkMDAxLi43N2VlODQyNTEyNGI5ZDhiOGM1ODJmMzlmZjk2OWY2MGZkMTZj
YzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCkBAIC0xMzAsNiAr
MTMwLDExIEBAIHVuc2lnbmVkIEFyZzo6anNIYXNoKCkgY29uc3QKICAgICAgICAgcmVzdWx0ICs9
IG1fYmFzZS5pbnRlcm5hbFZhbHVlKCk7CiAgICAgICAgIHJlc3VsdCArPSBtX2luZGV4LmludGVy
bmFsVmFsdWUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcmVJbmRleDoKKyAgICBjYXNl
IFBvc3RJbmRleDoKKyAgICAgICAgcmVzdWx0ICs9IG1fb2Zmc2V0OworICAgICAgICByZXN1bHQg
Kz0gbV9iYXNlLmludGVybmFsVmFsdWUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdGFj
azoKICAgICAgICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3NjYWxlKTsKICAg
ICAgICAgcmVzdWx0ICs9IHN0YWNrU2xvdCgpLT5pbmRleCgpOwpAQCAtMTYxLDcgKzE2Niw3IEBA
IHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmlu
dGYoIiQweCVsbHgiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KG1fb2Zmc2V0KSk7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFplcm9SZWc6Ci0gICAgICAgIG91dC5wcmludCgi
JSV4enIiKTsKKyAgICAgICAgb3V0LnByaW50KCIleHpyIik7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIFNpbXBsZUFkZHI6CiAgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsK
QEAgLTE4MCw2ICsxODUsMTIgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKICAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkpOwogICAgICAgICBvdXQucHJp
bnQoIikiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIG91
dC5wcmludCgiKCIsIGJhc2UoKSwgIixQcmUoJCIsIG9mZnNldCgpLCAiKSkiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUG9zdEluZGV4OgorICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNl
KCksICIsUG9zdCgkIiwgb2Zmc2V0KCksICIpKSIpOworICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBTdGFjazoKICAgICAgICAgaWYgKG9mZnNldCgpKQogICAgICAgICAgICAgb3V0LnByaW50KG9m
ZnNldCgpKTsKQEAgLTI2MSw2ICsyNzIsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIEFyZzo6S2luZCBraW5kKQogICAgIGNhc2UgQXJnOjpJbmRleDoKICAgICAgICAg
b3V0LnByaW50KCJJbmRleCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlByZUlu
ZGV4OgorICAgICAgICBvdXQucHJpbnQoIlByZUluZGV4Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFyZzo6UG9zdEluZGV4OgorICAgICAgICBvdXQucHJpbnQoIlBvc3RJbmRleCIpOwor
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OlJlbENvbmQ6CiAgICAgICAgIG91dC5wcmlu
dCgiUmVsQ29uZCIpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBcmcuaAppbmRleCBjZTVhNGU3Mzc5YWQ2NDQ0NWYwYzNhYmQxMjlmMzI5Yjk0N2ZlODEyLi4x
ZWJmNTJhMjE3MmEzYjI5M2ZiOWVlMjYyNGVhMDUyYTRhY2U0OGQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgKQEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAgICAgICBT
dGFjaywKICAgICAgICAgQ2FsbEFyZywKICAgICAgICAgSW5kZXgsCisgICAgICAgIFByZUluZGV4
LAorICAgICAgICBQb3N0SW5kZXgsCiAKICAgICAgICAgLy8gSW1tZWRpYXRlIG9wZXJhbmRzIHRo
YXQgY3VzdG9taXplIHRoZSBiZWhhdmlvciBvZiBhbiBvcGVyYXRpb24uIFlvdSBjYW4gdGhpbmsg
b2YgdGhlbSBhcwogICAgICAgICAvLyBzZWNvbmRhcnkgb3Bjb2Rlcy4gVGhleSBhcmUgYWx3YXlz
ICJVc2UiJ2QuCkBAIC02NDksNiArNjUxLDMwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFy
Zzo6aW5kZXgoYmFzZSwgaW5kZXgsIHNjYWxlLCAwKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJbnQsIHR5cGVuYW1lID0gVmFsdWU6OklzTGVnYWxPZmZzZXQ8SW50Pj4KKyAgICBz
dGF0aWMgQXJnIHByZUluZGV4KEFpcjo6VG1wIGJhc2UsIEludCBpbmRleCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc0ludDkoaW5kZXgpKTsK
KyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFByZUluZGV4Owor
ICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
aW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+CisgICAgc3Rh
dGljIEFyZyBwb3N0SW5kZXgoQWlyOjpUbXAgYmFzZSwgSW50IGluZGV4KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzSW50OShpbmRleCkpOwor
ICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUG9zdEluZGV4Owor
ICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
aW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgc3RhdGljIEFyZyBy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKICAg
ICB7CiAgICAgICAgIEFyZyByZXN1bHQ7CkBAIC03OTksNiArODI1LDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAKKyAgICBib29sIGlzUHJlSW5k
ZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBQcmVJbmRleDsKKyAg
ICB9CisKKyAgICBib29sIGlzUG9zdEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBraW5kKCkgPT0gUG9zdEluZGV4OworICAgIH0KKwogICAgIGJvb2wgaXNNZW1vcnkoKSBjb25z
dAogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKQEAgLTgwOCw2ICs4NDQsOCBAQCBw
dWJsaWM6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAg
ICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0
SW5kZXg6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk3Miw3ICsxMDEwLDcgQEAgcHVibGljOgogCiAgICAg
QWlyOjpUbXAgYmFzZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNp
bXBsZUFkZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRk
ciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNpbXBsZUFk
ZHIgfHwga2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEV4dGVuZGVkT2Zmc2V0QWRkciB8fCBr
aW5kKCkgPT0gSW5kZXggfHwga2luZCgpID09IFByZUluZGV4IHx8IGtpbmQoKSA9PSBQb3N0SW5k
ZXgpOwogICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0KIApAQCAtOTgyLDcgKzEwMjAsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoa2luZCgpID09IFN0YWNrKQogICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihtX3NjYWxlKTsKLSAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIg
fHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBFeHRlbmRlZE9mZnNldEFkZHIgfHwga2luZCgp
ID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4IHx8IGtpbmQoKSA9PSBQcmVJbmRleCB8fCBr
aW5kKCkgPT0gUG9zdEluZGV4KTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlOjpP
ZmZzZXRUeXBlPihtX29mZnNldCk7CiAgICAgfQogCkBAIC0xMDQ0LDYgKzEwODIsOCBAQCBwdWJs
aWM6CiAgICAgICAgIGNhc2UgQWRkcjoKICAgICAgICAgY2FzZSBFeHRlbmRlZE9mZnNldEFkZHI6
CiAgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgUHJlSW5kZXg6CisgICAgICAgIGNh
c2UgUG9zdEluZGV4OgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6
CiAgICAgICAgIGNhc2UgUmVsQ29uZDoKQEAgLTEwODEsNiArMTEyMSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKICAgICAg
ICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0
SW5kZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAgICAgIGNhc2UgQ2FsbEFyZzoKICAgICAg
ICAgY2FzZSBCaWdJbW06IC8vIFllcywgd2UgYWxsb3cgQmlnSW1tIGFzIGEgZG91YmxlIGltbWVk
aWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVudGluZyBzdGFja21hcHMuCkBAIC0xMjM3LDYg
KzEyNzksMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PElu
dD4+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFByZUluZGV4Rm9ybShJbnQgb2Zmc2V0KQorICAg
IHsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkU2ln
bmVkSW1tOShvZmZzZXQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IFZhbHVlOjpJc0xlZ2FsT2Zmc2V0PEludD4+
CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFBvc3RJbmRleEZvcm0oSW50IG9mZnNldCkKKyAgICB7
CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFNpZ25l
ZEltbTkob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIC8vIElm
IHlvdSBkb24ndCBwYXNzIGEgd2lkdGggdGhlbiB0aGlzIG9wdGltaXN0aWNhbGx5IGFzc3VtZXMg
dGhhdCB5b3UncmUgdXNpbmcgdGhlIHJpZ2h0IHdpZHRoLiBCdXQKICAgICAvLyB0aGUgd2lkdGgg
aXMgcmVsZXZhbnQgdG8gdmFsaWRpdHksIHNvIHBhc3NpbmcgYSBudWxsIHdpZHRoIGlzIG9ubHkg
dXNlZnVsIGZvciBhc3NlcnRpb25zLiBEb24ndAogICAgIC8vIHBhc3MgbnVsbCB3aWR0aHMgd2hl
biBjYXNjYWRpbmcgdGhyb3VnaCBBcmdzIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciEKQEAg
LTEyNjUsNiArMTMyMywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEFk
ZHJGb3JtKG9mZnNldCgpLCB3aWR0aCk7CiAgICAgICAgIGNhc2UgSW5kZXg6CiAgICAgICAgICAg
ICByZXR1cm4gaXNWYWxpZEluZGV4Rm9ybShzY2FsZSgpLCBvZmZzZXQoKSwgd2lkdGgpOworICAg
ICAgICBjYXNlIFByZUluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRQcmVJbmRleEZv
cm0ob2Zmc2V0KCkpOworICAgICAgICBjYXNlIFBvc3RJbmRleDoKKyAgICAgICAgICAgIHJldHVy
biBpc1ZhbGlkUG9zdEluZGV4Rm9ybShvZmZzZXQoKSk7CiAgICAgICAgIGNhc2UgUmVsQ29uZDoK
ICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CkBAIC0xMjg0
LDYgKzEzNDYsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU2ltcGxlQWRkcjoKICAgICAgICAg
Y2FzZSBBZGRyOgogICAgICAgICBjYXNlIEV4dGVuZGVkT2Zmc2V0QWRkcjoKKyAgICAgICAgY2Fz
ZSBQcmVJbmRleDoKKyAgICAgICAgY2FzZSBQb3N0SW5kZXg6CiAgICAgICAgICAgICBmdW5jdG9y
KG1fYmFzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmRleDoKQEAgLTEz
MjYsNiArMTM5MCw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTaW1wbGVBZGRyOgogICAgICAg
ICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2UgRXh0ZW5kZWRPZmZzZXRBZGRyOgorICAgICAgICBj
YXNlIFByZUluZGV4OgorICAgICAgICBjYXNlIFBvc3RJbmRleDoKICAgICAgICAgICAgIGZ1bmN0
b3IobV9iYXNlLCBVc2UsIEdQLCBhcmdSb2xlID09IFVzZUFkZHIgPyBhcmdXaWR0aCA6IHBvaW50
ZXJXaWR0aCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEluZGV4OgpAQCAt
MTM4Myw2ICsxNDQ5LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFZhbHVl
OjpPZmZzZXRUeXBlPihtX29mZnNldCksIG1fZXh0ZW5kKTsKICAgICB9CiAKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6UHJlSW5kZXhBZGRyZXNzIGFzUHJlSW5kZXhBZGRyZXNzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc1ByZUluZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXI6OlByZUluZGV4QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIG9mZnNldCgpKTsKKyAgICB9CisK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6UG9zdEluZGV4QWRkcmVzcyBhc1Bvc3RJbmRleEFkZHJlc3Mo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUG9zdEluZGV4KCkpOworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MobV9iYXNlLmdwcigpLCBvZmZz
ZXQoKSk7CisgICAgfQorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24g
YXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1Jl
bENvbmQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCmluZGV4IGU4MjU4
MmJiNWVkMDIyMmZmNzQ0M2VlYTI2MjM4MzQxNTk4YTU1ZTguLmExNTljOGIzMjgzZWZlMjBiMzJj
ZmFkZjMxZmRkOGI2ZjFkYjRlMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dC5oCkBAIC05Miw2ICs5MiwxNSBAQCBzdHJ1Y3QgSW5zdCB7CiAgICAgICAgIGFwcGVuZChhcmd1
bWVudHMuLi4pOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICB2b2lkIHJlcGxhY2VJbmRlbnRpdHkoS2luZCBraW5kLCBBcmcgYXJnLCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgdGhpcy0+a2luZCA9IGtpbmQ7CisgICAgICAg
IGFyZ3MuY2xlYXIoKTsKKyAgICAgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICAgICAgYXBwZW5k
KGFyZ3VtZW50cy4uLik7CisgICAgfQorCiAgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0b3Jz
IGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2FudCB0byB1c2UgdGhlbSBmb3Ig
dGhpbmdzIHRoYXQKICAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFudCB0byBiZSBlZGl0ZWQ7IGlm
IHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYiIHRoZW4geW91J3JlCiAgICAg
Ly8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRleCA2NjFlYWRkMjM3M2M1NGE0YmJhOTQ3YTU0YmRh
MjU1N2JkYjhhZTRhLi40OWZlZDFhYWExOWFmNmRkY2Q5MmMzMzlmNzBiNTc2ZDBkMzk1ZGRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAg
LTY2MSw2ICs2NjEsMTIgQEAgeDg2XzY0OiBTd2FwNjQgVUQ6Rzo2NCwgVUQ6Rzo2NAogICAgIFRt
cCwgVG1wCiAgICAgVG1wLCBBZGRyCiAKK2FybTY0OiBNb3ZlV2l0aEluY3JlbWVudDY0IFVEOkc6
NjQsIEQ6Rzo2NAorICAgIFByZUluZGV4LCBUbXAgYXMgbG9hZDY0CisgICAgUG9zdEluZGV4LCBU
bXAgYXMgbG9hZDY0CisgICAgVG1wLCBQcmVJbmRleCBhcyBzdG9yZTY0CisgICAgVG1wLCBQb3N0
SW5kZXggYXMgc3RvcmU2NAorCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyCiAgICAgVG1wLCBUbXAg
YXMgemVyb0V4dGVuZDMyVG9Xb3JkCiAgICAgQWRkciwgVG1wIGFzIGxvYWQzMgpAQCAtNjcxLDYg
KzY3NywxMiBAQCBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyCiAgICAgeDg2OiBJbW0sIEFkZHIgYXMg
c3RvcmUzMgogICAgIHg4NjogSW1tLCBJbmRleCBhcyBzdG9yZTMyCiAKK2FybTY0OiBNb3ZlV2l0
aEluY3JlbWVudDMyIFVEOkc6MzIsIFpEOkc6MzIKKyAgICBQcmVJbmRleCwgVG1wIGFzIGxvYWQz
MgorICAgIFBvc3RJbmRleCwgVG1wIGFzIGxvYWQzMgorICAgIFRtcCwgUHJlSW5kZXggYXMgc3Rv
cmUzMgorICAgIFRtcCwgUG9zdEluZGV4IGFzIHN0b3JlMzIKKwogIyBUaGlzIGlzIGZvciBtb3Zp
bmcgYmV0d2VlbiBzcGlsbCBzbG90cy4KIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIsIFM6RzozMgog
ICAgIEFkZHIsIEFkZHIsIFRtcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9v
cGNvZGVfZ2VuZXJhdG9yLnJiCmluZGV4IDM3NDBlZmRiZGQxNDZhMzdmNmVkZTlkZGJjMjNkZGJh
MDNiMDc2NDYuLmYxYmYxYTQ2Y2ZjODg5ZWMxOTM0NmYyYzA2YjdjZjUwZjllM2RlMGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKQEAg
LTIyOSw3ICsyMjksNyBAQCBkZWYgaXNHRih0b2tlbikKIGVuZAogCiBkZWYgaXNLaW5kKHRva2Vu
KQotICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1t
NjQpfChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChFeHRlbmRlZE9mZnNldEFkZHIpfChJ
bmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCl8KFN0YXR1c0NvbmQpKVxaLwor
ICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoQmlnSW1tKXwoQml0SW1tKXwoQml0SW1tNjQp
fChaZXJvUmVnKXwoU2ltcGxlQWRkcil8KEFkZHIpfChFeHRlbmRlZE9mZnNldEFkZHIpfChJbmRl
eCl8KFByZUluZGV4KXwoUG9zdEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25k
KXwoU3RhdHVzQ29uZCkpXFovCiBlbmQKIAogZGVmIGlzQXJjaCh0b2tlbikKQEAgLTMwMyw3ICsz
MDMsNyBAQCBjbGFzcyBQYXJzZXIKIAogICAgIGRlZiBjb25zdW1lS2luZAogICAgICAgICByZXN1
bHQgPSB0b2tlbi5zdHJpbmcKLSAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1t
LCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFplcm9SZWcsIFRtcCwgU2ltcGxlQWRkciwgQWRk
ciwgRXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91YmxlQ29u
ZCwgb3IgU3RhdHVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgcGFyc2VF
cnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBCaWdJbW0sIEJpdEltbSwgQml0SW1tNjQsIFplcm9S
ZWcsIFRtcCwgU2ltcGxlQWRkciwgQWRkciwgRXh0ZW5kZWRPZmZzZXRBZGRyLCBJbmRleCwgUHJl
SW5kZXgsIFBvc3RJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgRG91YmxlQ29uZCwgb3IgU3RhdHVz
Q29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKICAgICAgICAgYWR2YW5jZQogICAgICAgICBy
ZXN1bHQKICAgICBlbmQKQEAgLTkyOSw2ICs5MjksMTIgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0
ZWQiKSB7CiAgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgiCiAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbmRleEZvcm0oYXJnc1sje2luZGV4fV0uc2Nh
bGUoKSwgYXJnc1sje2luZGV4fV0ub2Zmc2V0KCksICN7YXJnLndpZHRoQ29kZX0pKSIKICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAg
ICAgICAgICB3aGVuICJQcmVJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJp
ZiAoIUFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAg
ICAgICAgICAgICAgIHdoZW4gIlBvc3RJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJpZiAoIUFyZzo6aXNWYWxpZFBvc3RJbmRleEZvcm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0
KCkpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2Up
OyIKICAgICAgICAgICAgICAgICB3aGVuICJCaWdJbW0iCiAgICAgICAgICAgICAgICAgd2hlbiAi
UmVsQ29uZCIKICAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgpAQCAtMTIzNSw2ICsxMjQx
LDEwIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKICAgICAgICAgICAgICAgICB3
aGVuICJJbmRleCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4
fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJQcmVJbmRleCIKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNQcmVJbmRleEFkZHJl
c3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJQb3N0SW5kZXgiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUG9zdEluZGV4QWRkcmVzcygpIgogICAg
ICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJp
bnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigpIgogICAgICAgICAgICAg
ICAgIHdoZW4gIlJlc0NvbmQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggYzcwMzJl
YzA4NGRkZmRkOTM1ZTU1MjdmYWFlOTM1NjgxOTg0ODE3OS4uNzIxZWIzYWRkNjI3NDhlMmZiMDJk
ZGY0MjU1N2NjNTlkNWQ4ODBlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMTE0
MCw0ICsxMTQwLDkgQEAgdm9pZCBhZGRDb3B5VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1
ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mKTsKIAogYm9vbCBzaG91bGRSdW4oY29uc3Qg
Y2hhciogZmlsdGVyLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSk7CiAKK3ZvaWQgdGVzdExvYWRQcmVJ
bmRleDMyKCk7Cit2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpOwordm9pZCB0ZXN0TG9hZFBvc3RJ
bmRleDMyKCk7Cit2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQoKTsKKwogI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAppbmRleCA0YzUyYWRh
OWNjNDAyZGRlNTM5ODhjYzhmMmY1ZTllMGRkZTJlMTFjLi5iODliMDE5ZmQ4YmY1ZjA3MTJmNDY2
ODY1MGY2MWNkZjgxZGE0YzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAK
QEAgLTI4LDYgKzI4LDMwMCBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorCit2b2lkIHRlc3RM
b2FkUHJlSW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkg
PCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMywg
NCwgNSwgNiwgNywgOCwgOSwgMTAgfTsKKyAgICBpbnQzMl90KiBwdHIgPSBudW1zOworCisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBsb29wVGVzdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0g
cHJvYy5hZGRCbG9jaygpOworCisgICAgVmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKElu
dDMyKTsKKyAgICBWYXJpYWJsZSogcCA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAg
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAg
Ly8gVXBzaWxvbihyMSwgXnIyKQorICAgIC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEs
IF5wMikKKyAgICBWYWx1ZSogcjEgPSByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmln
aW4oKSwgSW50MzIsIDApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9j
LCBCMzo6U2V0LCBPcmlnaW4oKSwgciwgcjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwg
T3JpZ2luKCksIHAsIHAxKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
SnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBMb29wX1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8v
IHAyID0gUGhpKCkKKyAgICAvLyByMiA9IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBk
b25lCisgICAgVmFsdWUqIHIyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihw
cm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAg
VmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFs
LCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgMTApKTsKKyAgICBsb29wVGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IEJyYW5jaCwgT3JpZ2luKCksIGNvbmQsIEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRl
ZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3Bf
Qm9keV9CbG9jaworICAgIC8vIHAzID0gcDIgKyAxCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQor
ICAgIC8vIHIzID0gcjIgKyBsb2FkKHAzKQorICAgIC8vIFVwc2lsb24ocjMsIF5yMikKKyAgICAv
LyBnb3RvIGxvb3AKKyAgICBWYWx1ZSogcDMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBBZGQsIE9yaWdpbigpLCBwMiwgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KHByb2MsIE9yaWdpbigpLCA0KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAgIFZhbHVlKiByMyA9IGxv
b3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9k
eS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHAz
KSk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0
LCBPcmlnaW4oKSwgciwgcjMpOworICAgIGxvb3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
cHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAg
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAv
LyByZXR1cm4gcjIKKyAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcjIpOworCisgICAgcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZh
bGlkYXRlKHByb2MpOworICAgIGZpeFNTQShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCAiIzRdISIpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGludDMy
X3QgeworICAgICAgICBpbnQzMl90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKQorICAg
ICAgICAgICAgciArPSAqKytwdHI7CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAgICBD
SEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRy
KSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCkKK3sKKyAgICBpZiAo
T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAg
IGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAg
IGludDY0X3QqIHB0ciA9IG51bXM7CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0g
cHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJp
YWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworICAgIFZhcmlhYmxlKiBwID0gcHJv
Yy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJv
b3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAgICAvLyBVcHNpbG9uKHIxLCBecjIpCisgICAgLy8g
cDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihwMSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3Qt
PmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQ2NCwgMCk7CisgICAgcm9vdC0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7
CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJs
b2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVz
dF9CbG9jaworICAgIC8vIGxvb3A6CisgICAgLy8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhp
KCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3RvIGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVz
dC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsK
KyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2Ms
IEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAgICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJl
cXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9vcF9Cb2R5X0Jsb2NrCisgICAgLy8gcDMgPSBwMiAr
IDEKKyAgICAvLyBVcHNpbG9uKHAzLCBecDIpCisgICAgLy8gcjMgPSByMiArIGxvYWQocDMpCisg
ICAgLy8gVXBzaWxvbihyMywgXnIyKQorICAgIC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiBwMyA9
IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29w
Qm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgpKTsKKyAgICBs
b29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigp
LCBwLCBwMyk7CisgICAgVmFsdWUqIHIzID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQWRkLCBPcmlnaW4oKSwgcjIsIGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHBy
b2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwgcDMpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMyk7CisgICAgbG9v
cEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVl
bnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERv
bmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAgIC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByMik7CisKKyAgICBwcm9j
LnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgdmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHBy
b2MpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJN
NjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICIjOF0hIik7CisKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKCkgLT4gaW50NjRfdCB7CisgICAgICAgIGludDY0X3QgciA9IDA7
CisgICAgICAgIHdoaWxlIChyIDwgMTApCisgICAgICAgICAgICByICs9ICorK3B0cjsKKyAgICAg
ICAgcmV0dXJuIHI7CisgICAgfTsKKworICAgIENIRUNLX0VRKGludm9rZTxpbnQ2NF90PigqY29k
ZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKK30KKwordm9pZCB0ZXN0
TG9hZFBvc3RJbmRleDMyKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwo
KSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCB9OworICAgIGludDMyX3QqIHB0ciA9IG51bXM7CisKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIGxvb3BUZXN0ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGRvbmUg
PSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYXJpYWJsZSogciA9IHByb2MuYWRkVmFyaWFibGUo
SW50MzIpOworICAgIFZhcmlhYmxlKiBwID0gcHJvYy5hZGRWYXJpYWJsZShJbnQ2NCk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJvb3RfQmxvY2sKKyAgICAvLyByMSA9IDAKKyAg
ICAvLyBVcHNpbG9uKHIxLCBecjIpCisgICAgLy8gcDEgPSBhZGRyCisgICAgLy8gVXBzaWxvbihw
MSwgXnAyKQorICAgIFZhbHVlKiByMSA9IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9y
aWdpbigpLCBJbnQzMiwgMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHBy
b2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMSk7CisgICAgVmFsdWUqIHAxID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0
LCBPcmlnaW4oKSwgcCwgcDEpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAgICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfVGVzdF9CbG9jaworICAgIC8vIGxvb3A6CisgICAg
Ly8gcDIgPSBQaGkoKQorICAgIC8vIHIyID0gUGhpKCkKKyAgICAvLyBpZiByMiA+PSAxMCBnb3Rv
IGRvbmUKKyAgICBWYWx1ZSogcjIgPSBsb29wVGVzdC0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByKTsKKyAgICBWYWx1ZSogcDIgPSBsb29wVGVzdC0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBwKTsKKyAg
ICBWYWx1ZSogY29uZCA9IGxvb3BUZXN0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlRXF1
YWwsIE9yaWdpbigpLCByMiwgbG9vcFRlc3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAxMCkpOworICAgIGxvb3BUZXN0LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJv
YywgQnJhbmNoLCBPcmlnaW4oKSwgY29uZCwgRnJlcXVlbnRlZEJsb2NrKGRvbmUpLCBGcmVxdWVu
dGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9v
cF9Cb2R5X0Jsb2NrCisgICAgLy8gcjMgPSByMiArIGxvYWQocDIpCisgICAgLy8gcDMgPSBwMiAr
IDEKKyAgICAvLyBVcHNpbG9uKHIzLCBecjIpCisgICAgLy8gVXBzaWxvbihwMywgXnAyKQorICAg
IC8vIGdvdG8gbG9vcAorICAgIFZhbHVlKiByMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEFkZCwgT3JpZ2luKCksIHIyLCBsb29wQm9keS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
Pihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHAyKSk7CisgICAgVmFsdWUqIHAzID0gbG9v
cEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcDIsIGxvb3BCb2R5
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCkpOworICAgIGxvb3BC
b2R5LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHIs
IHIzKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KHByb2MsIEIzOjpT
ZXQsIE9yaWdpbigpLCBwLCBwMyk7CisgICAgbG9vcEJvZHktPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0KSk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmVfQmxvY2sKKyAgICAvLyBkb25lOgorICAg
IC8vIHJldHVybiByMgorICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCByMik7CisKKyAgICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAg
dmFsaWRhdGUocHJvYyk7CisgICAgZml4U1NBKHByb2MpOworCisgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5z
dHJ1Y3Rpb24oKmNvZGUsICJdLCAjNCIpOworCisgICAgYXV0byB0ZXN0ID0gWyZdICgpIC0+IGlu
dDMyX3QgeworICAgICAgICBpbnQzMl90IHIgPSAwOworICAgICAgICB3aGlsZSAociA8IDEwKQor
ICAgICAgICAgICAgciArPSAqcHRyKys7CisgICAgICAgIHJldHVybiByOworICAgIH07CisKKyAg
ICBDSEVDS19FUShpbnZva2U8aW50MzJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
cHRyKSksIHRlc3QoKSk7Cit9CisKK3ZvaWQgdGVzdExvYWRQb3N0SW5kZXg2NCgpCit7CisgICAg
aWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisK
KyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAgfTsK
KyAgICBpbnQ2NF90KiBwdHIgPSBudW1zOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wVGVz
dCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAg
VmFyaWFibGUqIHIgPSBwcm9jLmFkZFZhcmlhYmxlKEludDY0KTsKKyAgICBWYXJpYWJsZSogcCA9
IHByb2MuYWRkVmFyaWFibGUoSW50NjQpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBSb290X0Jsb2NrCisgICAgLy8gcjEgPSAwCisgICAgLy8gVXBzaWxvbihyMSwgXnIyKQorICAg
IC8vIHAxID0gYWRkcgorICAgIC8vIFVwc2lsb24ocDEsIF5wMikKKyAgICBWYWx1ZSogcjEgPSBy
b290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50NjQsIDApOworICAgIHJv
b3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgciwg
cjEpOworICAgIFZhbHVlKiBwMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmRO
ZXc8VmFyaWFibGVWYWx1ZT4ocHJvYywgQjM6OlNldCwgT3JpZ2luKCksIHAsIHAxKTsKKyAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50
ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29w
X1Rlc3RfQmxvY2sKKyAgICAvLyBsb29wOgorICAgIC8vIHAyID0gUGhpKCkKKyAgICAvLyByMiA9
IFBoaSgpCisgICAgLy8gaWYgcjIgPj0gMTAgZ290byBkb25lCisgICAgVmFsdWUqIHIyID0gbG9v
cFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwg
cik7CisgICAgVmFsdWUqIHAyID0gbG9vcFRlc3QtPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihw
cm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgcCk7CisgICAgVmFsdWUqIGNvbmQgPSBsb29wVGVzdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgcjIsIGxvb3BUZXN0
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTApKTsKKyAgICBsb29w
VGVzdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIGNvbmQs
IEZyZXF1ZW50ZWRCbG9jayhkb25lKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisKKyAg
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvb3BfQm9keV9CbG9jaworICAgIC8vIHIzID0g
cjIgKyBsb2FkKHAyKQorICAgIC8vIHAzID0gcDIgKyAxCisgICAgLy8gVXBzaWxvbihyMywgXnIy
KQorICAgIC8vIFVwc2lsb24ocDMsIF5wMikKKyAgICAvLyBnb3RvIGxvb3AKKyAgICBWYWx1ZSog
cjMgPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCByMiwg
bG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdp
bigpLCBwMikpOworICAgIFZhbHVlKiBwMyA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEFkZCwgT3JpZ2luKCksIHAyLCBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDgpKTsKKyAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhcmlhYmxlVmFs
dWU+KHByb2MsIEIzOjpTZXQsIE9yaWdpbigpLCByLCByMyk7CisgICAgbG9vcEJvZHktPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihwcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgcCwgcDMpOworICAg
IGxvb3BCb2R5LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZy
ZXF1ZW50ZWRCbG9jayhsb29wVGVzdCkpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBEb25lX0Jsb2NrCisgICAgLy8gZG9uZToKKyAgICAvLyByZXR1cm4gcjIKKyAgICBkb25lLT5h
cHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcjIpOworCisgICAg
cHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2MpOworICAgIGZpeFNT
QShwcm9jKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChp
c0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzgiKTsK
KworICAgIGF1dG8gdGVzdCA9IFsmXSAoKSAtPiBpbnQ2NF90IHsKKyAgICAgICAgaW50NjRfdCBy
ID0gMDsKKyAgICAgICAgd2hpbGUgKHIgPCAxMCkKKyAgICAgICAgICAgIHIgKz0gKnB0cisrOwor
ICAgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgQ0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+
KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOworfQorCisKIHZv
aWQgdGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIoKQogewogICAgIGlmIChKU0M6Ok9w
dGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQpAQCAtMzY5Nyw2ICszOTkxLDExIEBAIHZv
aWQgYWRkU2hyVGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0WlNockFyZ0ltbTMyKDB4ZmZmZmZmZmYs
IDApKTsKICAgICBSVU4odGVzdFpTaHJBcmdJbW0zMigweGZmZmZmZmZmLCAxKSk7CiAgICAgUlVO
KHRlc3RaU2hyQXJnSW1tMzIoMHhmZmZmZmZmZiwgNjMpKTsKKworICAgIFJVTih0ZXN0TG9hZFBy
ZUluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsKKyAgICBSVU4odGVz
dExvYWRQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdExvYWRQb3N0SW5kZXg2NCgpKTsKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAppbmRleCA2M2UyNjY3ODg1MjAxOGE3NjgwY2E1
ZjA3MTQ2OTY4MTA1ODg0YjNiLi42OWJiNmIyYmU4MTg3MGI1OTgzMzM2N2FmMjY3NWI3ZjRlZjA1
NmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHAKQEAgLTIzMyw4ICsyMzMsOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0bwogICAg
IGppdC5yZXQoKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb2NhbDAgPSBqaXQubGFi
ZWwoKTsKLSAgICBqaXQubG9hZDY0KHgxLCBQb3N0SW5kZXgoOCksIHg2KTsKLSAgICBqaXQuc3Rv
cmU2NCh4NiwgeDMsIFBvc3RJbmRleCg4KSk7CisgICAgaml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxl
cjo6UG9zdEluZGV4QWRkcmVzcyh4MSwgOCksIHg2KTsKKyAgICBqaXQuc3RvcmU2NCh4NiwgTWFj
cm9Bc3NlbWJsZXI6OlBvc3RJbmRleEFkZHJlc3MoeDMsIDgpKTsKICAgICBzbWFsbENvcHkubGlu
aygmaml0KTsKICAgICBqaXQuYnJhbmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgVHJ1c3RlZEltbTMyKDgpLCB4MikubGlua1RvKGxvY2FsMCwgJmppdCk7CiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbG9jYWwyID0gaml0LmJyYW5jaEFkZDY0KE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4Mik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434731</attachid>
            <date>2021-08-01 19:23:27 -0700</date>
            <delta_ts>2021-08-02 10:52:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228538-20210801212325.patch</filename>
            <type>text/plain</type>
            <size>21815</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
N2M5NTU4ZWFiZGIxNjY0YzU2YWQyZGU0YWQzNGQ3ZDA3Y2UxNzI1Li44YTNjN2IyYzQxMWMzMjk3
ZDcxZTdlZDEyMTMzZTk5YThjNTU3MTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzAgQEAKKzIwMjEtMDgtMDEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIg
Zm9yIEFSTTY0IChTdG9yZSBJbnN0cnVjdGlvbikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODUzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZSBwcmV2aW91cyBwYXRjaCBoYXMgaW50cm9kdWNlZCB0
aGUgcHJlL3Bvc3QtaW5kZXggYWRkcmVzcyBtb2RlIGZvciBMb2FkIGluc3RydWN0aW9uIAorICAg
ICAgICAsIHdoaWNoIGJlbmVmaXRzIGxvb3AgcHJvZ3JhbS4gSGVyZSwgdGhpcyBwYXRjaCBhZGRz
IHRoZSBjb3JyZXNwb25kaW5nIG1vZGUgZm9yIFN0b3JlIAorICAgICAgICBpbnN0cnVjdGlvbi4g
U3RvcmUgUmVnaXN0ZXIgKGltbWVkaWF0ZSkgc3RvcmVzIGEgd29yZCBvciBhIGRvdWJsZXdvcmQg
ZnJvbSBhIHJlZ2lzdGVyIAorICAgICAgICB0byBtZW1vcnkuIFRoZSBhZGRyZXNzIHRoYXQgaXMg
dXNlZCBmb3IgdGhlIHN0b3JlIGlzIGNhbGN1bGF0ZWQgZnJvbSBhIGJhc2UgcmVnaXN0ZXIgCisg
ICAgICAgIGFuZCBhbiBpbW1lZGlhdGUgb2Zmc2V0LgorCisgICAgICAgICMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFByZS1JbmRleCBBZGRyZXNzIE1v
ZGUgRm9yIFN0b3JlICMjCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCisKKyAgICAgICAgU1RSIFd0LCBbWG4sICNpbW1dIQorCisgICAgICAgIEluIEIzIFJl
ZHVjdGlvbiBTdHJlbmd0aCwgc2luY2Ugd2UgaGF2ZSB0aGlzIHJlZHVjdGlvbiBydWxlOgorICAg
ICAgICAgICAgVHVybnMgdGhpczogU3RvcmUodmFsdWUsIEFkZChhZGRyZXNzLCBvZmZzZXQxKSwg
b2Zmc2V0ID0gb2Zmc2V0MikKKyAgICAgICAgICAgIEludG8gdGhpczogU3RvcmUodmFsdWUsIGFk
ZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorCisgICAgICAgIFRoZW4sIHRoZSBl
cXVpdmFsZW50IHBhdHRlcm4gaXM6CisgICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9m
ZnNldCkKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUs
IGJhc2UsIG9mZnNldCkKKworICAgICAgICBGaXJzdCwgd2UgY29udmVydCBpdCB0byB0aGUgY2Fu
b25pY2FsIGZvcm06CisgICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAg
ICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGFkZHJlc3Ms
IG9mZnNldCkKKworICAgICAgICBOZXh0LCBsb3dlciB0byBBaXI6CisgICAgICAgICAgICBNb3Zl
ICViYXNlLCAlYWRkcmVzcworICAgICAgICAgICAgTW92ZSAldmFsdWUsICglYWRkcmVzcywgcHJl
Zml4KG9mZnNldCkpCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKKyAgICAgICAgIyMgUG9zdC1JbmRleCBBZGRyZXNzIE1vZGUgRm9yIExvYWQgIyMKKyAg
ICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICBT
VFIgV3QsIFtYbl0sICNpbW0KKworICAgICAgICBUaGVuLCB0aGUgZXF1aXZhbGVudCBwYXR0ZXJu
IGlzOgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCisgICAgICAg
ICAgICAuLi4KKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorCisgICAg
ICAgIEZpcnN0LCB3ZSBjb252ZXJ0IGl0IHRvIHRoZSBjYW5vbmljYWwgZm9ybToKKyAgICAgICAg
ICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJh
c2UsIG9mZnNldCkKKyAgICAgICAgICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBuZXdBZGRyZXNz
LCAwKSAvLyBtb3ZlIHRoZSBvZmZzZXQgYW5kIGFkZHJlc3MgdG8ganVzdCBiZWZvcmUgdGhlIG1l
bW9yeQorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBvZmZzZXQgPSBJZGVudGl0eShuZXdP
ZmZzZXQpCisgICAgICAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykKKworICAg
ICAgICBOZXh0LCBsb3dlciB0byBBaXI6CisgICAgICAgICAgICBNb3ZlICViYXNlLCAlbmV3QWRk
cmVzcworICAgICAgICAgICAgTW92ZSAldmFsdWUsICglbmV3QWRkcmVzcywgcG9zdGZpeChvZmZz
ZXQpKQorCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKKyAgICAgICAgIyMgVGVzdCBmb3IgUHJlL1Bvc3QtSW5jcmVtZW50IEFkZHJlc3MgTW9k
ZSAjIworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCisKKyAgICAgICAgQjMgSVI6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBJbnQgIEAwID0gQXJndW1lbnRS
ZWcoJXgwKQorICAgICAgICBJbnQgIEAxID0gQ29uc3Q2NCg4KQorICAgICAgICBJbnQgIEAyID0g
QWRkKGJAMCwgJDgoQDEpKQorICAgICAgICBJbnQgIEAzID0gQ29uc3Q2NCg0KQorICAgICAgICBW
b2lkIEA0ID0gU3RvcmUoJDQoQDMpLCBAMiwgQ29udHJvbERlcGVuZGVudHxXcml0ZXM6VG9wKQor
ICAgICAgICBWb2lkIEA1ID0gUmV0dXJuKEAyLCBUZXJtaW5hbCkKKyAgICAgICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAg
Vy9PIFByZS1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgTW92ZSAleDAs
ICV4MSwgICAgICBAMAorICAgICAgICBBZGQgICAkOCwgJXgxLCAleDAsIEAyCisgICAgICAgIE1v
dmUgICQ0LCAleDIsICAgICAgQDMKKyAgICAgICAgTW92ZSAleDIsIDgoJXgxKSwgICBANAorICAg
ICAgICBSZXQgICV4MCwgICAgICAgICAgIEA1CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvIFByZS1JbmNy
ZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgTW92ZSAgICAgICAgICAgICAgICAk
NCwgICAgICAgICAgICV4MSwgQDMKKyAgICAgICAgTW92ZVdpdGhJbmNyZW1lbnQgICV4MSwgKCV4
MCxQcmUoJDgpKSwgQDQKKyAgICAgICAgUmV0ICAgICAgICAgICAgICAgICV4MCwgICAgICAgICAg
ICAgICAgQDUKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKworICAgICAgICBCMyBJUjoKKyAgICAgICAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEludCAg
QDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCAgQDEgPSBDb25zdDY0KDQpCisgICAg
ICAgIFZvaWQgQDIgPSBTdG9yZSgkNChiQDEpLCBAMCwgQ29udHJvbERlcGVuZGVudHxXcml0ZXM6
VG9wKQorICAgICAgICBJbnQgIEAzID0gQ29uc3Q2NCg4KQorICAgICAgICBJbnQgIEA0ID0gQWRk
KEAwLCAkOChAMykpCisgICAgICAgIFZvaWQgQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFsKQorICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgICAgICBXL08gUG9zdC1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAgICAgTW92ZSAgJDQsICAgJXgxLCAgICAgIEAxCisgICAgICAgIE1vdmUgJXgxLCAoJXgwKSwg
ICAgICBAMgorICAgICAgICBBZGQgICAkOCwgICAleDAsICV4MCwgQDQKKyAgICAgICAgUmV0ICAl
eDAsICAgICAgICAgICAgIEA1CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvIFBvc3QtSW5jcmVtZW50IEFk
ZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIE1vdmUgICAgICAgICAgICAgICAgJDQsICAgICAg
ICAgICAgJXgxLCBAMQorICAgICAgICBNb3ZlV2l0aEluY3JlbWVudCAgJXgxLCAoJXgwLFBvc3Qo
JDgpKSwgQDIKKyAgICAgICAgUmV0ICAgICAgICAgICAgICAgICV4MCwgICAgICAgICAgICAgICAg
IEA1CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgICAgICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50
cy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyk6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoK
KyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDMy
KToKKyAgICAgICAgKHRlc3RTdG9yZVByZUluZGV4NjQpOgorICAgICAgICAodGVzdFN0b3JlUG9z
dEluZGV4MzIpOgorICAgICAgICAodGVzdFN0b3JlUG9zdEluZGV4NjQpOgorICAgICAgICAoYWRk
U2hyVGVzdHMpOgorCiAyMDIxLTA3LTMwICBZaWppYSBIdWFuZyAgPHlpamlhX2h1YW5nQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgUHJlL1Bvc3QtSW5kZXhlZCBBZGRyZXNzIE1vZGUgdG8gQWly
IGZvciBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25p
Y2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCmluZGV4IDgyYzlhZjFkOWI4OWFkNTdm
Nzc3MzY5YzllMTdkZWU2NzZiOGIyNWUuLmFjODk1OTA0NDFlZDNiYzJmNmIxODBkOTc3ODYwNDJj
ZDlmZjYzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNh
bGl6ZVByZVBvc3RJbmNyZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKQEAgLTU4LDI2ICs1OCwzMSBAQCBi
b29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICBE
b21pbmF0b3JzJiBkb21pbmF0b3JzID0gcHJvYy5kb21pbmF0b3JzKCk7CiAgICAgQmFja3dhcmRz
RG9taW5hdG9ycyYgYmFja3dhcmRzRG9taW5hdG9ycyA9IHByb2MuYmFja3dhcmRzRG9taW5hdG9y
cygpOwogCisgICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9M
b2FkOworICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHByZUluZGV4TG9hZENhbmRp
ZGF0ZXM7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4TG9hZENh
bmRpZGF0ZXM7CisKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJh
c2VUb1N0b3JlOworICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHByZUluZGV4U3Rv
cmVDYW5kaWRhdGVzOworICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRl
eFN0b3JlQ2FuZGlkYXRlczsKKwogICAgIEhhc2hNYXA8VmFsdWVLZXksIFZlY3RvcjxWYWx1ZSo+
PiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVl
Kj4gcHJlSW5kZXhDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5
VmFsdWUqPj4gYmFzZVRvTWVtb3JpZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVl
Kj4gcG9zdEluZGV4Q2FuZGlkYXRlczsKICAgICBIYXNoTWFwPFZhbHVlKiwgdW5zaWduZWQ+IHZh
bHVlVG9JbmRleDsKICAgICBJbmRleFNldDxWYWx1ZSo+IGlnbm9yZWRWYWx1ZXM7CiAKLSAgICAv
LyBQcmUtSW5kZXggUGF0dGVybjoKLSAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpCi0gICAgLy8gICAgIC4uLgotICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNl
dCkKLSAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46Ci0gICAgLy8gICAgIG1lbW9yeSA9IExvYWQo
YmFzZSwgMCkKLSAgICAvLyAgICAgLi4uCi0gICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KQogICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4ID0gWyZdIChWYWx1ZSogdmFsdWUpIHsK
ICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKICAgICAgICAgY2FzZSBMb2FkOiB7
CiAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVl
PigpOwogCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgIC8v
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC8vICAgICAuLi4K
KyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKKyAgICAgICAg
ICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBM
b2FkKGJhc2UsIDApCisgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAgICAgICAvLyAgICAg
YWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCiAgICAgICAgICAgICBhdXRvIHRyeVByZVBvc3RJ
bmRleE1lbW9yeSA9IFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+dHlwZSgp
ICE9IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IEludDY0KQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CkBAIC04OCw5ICs5Myw0MCBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNy
ZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlT2Zm
c2V0VG9BZGRyZXNzZXMuY29udGFpbnMoYmFzZU9mZnNldGtleSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGFkZHJlc3Mg
OiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuZ2V0KGJhc2VPZmZzZXRrZXkpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcHJlSW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnksIGFkZHJlc3MpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcy5hZGQobWVtb3J5LCBh
ZGRyZXNzKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFz
ZVRvTWVtb3JpZXMuYWRkKG1lbW9yeS0+Y2hpbGQoMCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkp
Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgYmFz
ZVRvTG9hZC5hZGQobWVtb3J5LT5sYXN0Q2hpbGQoKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOworICAgICAgICAgICAgICAgIHZhbHVlVG9J
bmRleC5hZGQodmFsdWUsIGluZGV4KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHRy
eVByZVBvc3RJbmRleE1lbW9yeSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIFN0b3JlOiB7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0g
dmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0
dGVybjoKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAg
ICAgICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2
YWx1ZSwgYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJuOgor
ICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKQorICAgICAg
ICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KQorICAgICAgICAgICAgYXV0byB0cnlQcmVQb3N0SW5kZXhNZW1vcnkgPSBbJl0gKCkg
eworICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPmNoaWxkKDApLT50eXBlKCkgIT0gSW50MzIg
JiYgbWVtb3J5LT5jaGlsZCgwKS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzVmFsaWRQcmVJbmRleEZvcm0obWVtb3J5LT5vZmZz
ZXQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShtZW1vcnktPmNoaWxkKDApLCBz
dGF0aWNfY2FzdDxpbnQ2NF90PihtZW1vcnktPm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghYmFzZU9mZnNldFRvQWRkcmVzc2VzLmNvbnRhaW5zKGJhc2VPZmZzZXRrZXkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBmb3Ig
KFZhbHVlKiBhZGRyZXNzIDogYmFzZU9mZnNldFRvQWRkcmVzc2VzLmdldChiYXNlT2Zmc2V0a2V5
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZUluZGV4U3RvcmVDYW5kaWRhdGVzLmFkZCht
ZW1vcnksIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICBiYXNlVG9TdG9yZS5hZGQobWVtb3J5LT5jaGlsZCgxKSwgVmVjdG9yPE1lbW9yeVZhbHVl
Kj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwogICAgICAgICAgICAgICAgIHZh
bHVlVG9JbmRleC5hZGQodmFsdWUsIGluZGV4KTsKICAgICAgICAgICAgIH07CiAKQEAgLTExMywx
MCArMTQ5LDE0IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJl
JiBwcm9jKQogICAgICAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtl
eShsZWZ0LCBzdGF0aWNfY2FzdDxpbnQ2NF90PihzbWFsbE9mZnNldCkpOwogICAgICAgICAgICAg
ICAgIGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5hZGQoYmFzZU9mZnNldGtleSwgVmVjdG9yPFZhbHVl
Kj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFs
dWVUb0luZGV4LmFkZCh2YWx1ZSwgaW5kZXgpOwotICAgICAgICAgICAgICAgIGlmICghYmFzZVRv
TWVtb3JpZXMuY29udGFpbnMobGVmdCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9NZW1vcmllcy5n
ZXQobGVmdCkpCi0gICAgICAgICAgICAgICAgICAgIHBvc3RJbmRleENhbmRpZGF0ZXMuYWRkKG1l
bW9yeSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChiYXNlVG9Mb2FkLmNvbnRhaW5zKGxl
ZnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJh
c2VUb0xvYWQuZ2V0KGxlZnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4TG9h
ZENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoYmFzZVRvU3RvcmUuY29udGFpbnMobGVmdCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvU3RvcmUuZ2V0KGxlZnQp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzLmFkZCht
ZW1vcnksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogCiAgICAg
ICAgICAgICB0cnlQb3RlbnRpYWxQb3N0SW5kZXhBZGRyZXNzKCk7CkBAIC0xNDEsMTQgKzE4MSwx
NCBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykK
ICAgICAgICAgICAgIHx8IChkb21pbmF0b3JzLmRvbWluYXRlcyh2Mi0+b3duZXIsIHYxLT5vd25l
cikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5kb21pbmF0ZXModjEtPm93bmVyLCB2Mi0+b3duZXIp
KTsKICAgICB9OwogCi0gICAgYXV0byBkZXRlY3QgPSBbJl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUq
LCBWYWx1ZSo+IGNhbmRpZGF0ZXMpIHsKKyAgICBhdXRvIGRldGVjdEluY3JlbWVudExvYWQgPSBb
Jl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IGNhbmRpZGF0ZXMpIHsKICAgICAgICAg
Zm9yIChhdXRvIGl0ciA9IGNhbmRpZGF0ZXMuYmVnaW4oKTsgaXRyICE9IGNhbmRpZGF0ZXMuZW5k
KCk7ICsraXRyKSB7CiAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gaXRyLT5rZXk7
CiAgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IGl0ci0+dmFsdWU7CiAgICAgICAgICAgICBp
ZiAoaWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFp
bnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzID09IHBy
ZUluZGV4Q2FuZGlkYXRlcykgeworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMgPT0gcHJlSW5k
ZXhMb2FkQ2FuZGlkYXRlcykgewogICAgICAgICAgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFz
ZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9h
ZChiYXNlLCBvZmZzZXQpCiAgICAgICAgICAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC4uLgpAQCAtMTc3LDggKzIxNyw0MSBAQCBib29sIGNhbm9uaWNhbGl6ZVBy
ZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBkZXRlY3QocHJlSW5kZXhDYW5kaWRhdGVzKTsKLSAgICBkZXRlY3QocG9zdEluZGV4Q2FuZGlk
YXRlcyk7CisgICAgZGV0ZWN0SW5jcmVtZW50TG9hZChwcmVJbmRleExvYWRDYW5kaWRhdGVzKTsK
KyAgICBkZXRlY3RJbmNyZW1lbnRMb2FkKHBvc3RJbmRleExvYWRDYW5kaWRhdGVzKTsKKworICAg
IC8vIGF1dG8gZGV0ZWN0SW5jcmVtZW50U3RvcmUgPSBbJl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUq
LCBWYWx1ZSo+IGNhbmRpZGF0ZXMpIHsKKyAgICAvLyAgICAgZm9yIChhdXRvIGl0ciA9IGNhbmRp
ZGF0ZXMuYmVnaW4oKTsgaXRyICE9IGNhbmRpZGF0ZXMuZW5kKCk7ICsraXRyKSB7CisgICAgLy8g
ICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gaXRyLT5rZXk7CisgICAgLy8gICAgICAgICBW
YWx1ZSogYWRkcmVzcyA9IGl0ci0+dmFsdWU7CisgICAgLy8gICAgICAgICBpZiAoaWdub3JlZFZh
bHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykg
fHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgLy8gICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAvLyAgICAgICAgIGlmIChjYW5kaWRhdGVzID09IHByZUluZGV4
U3RvcmVDYW5kaWRhdGVzKSB7CisgICAgLy8gICAgICAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChi
YXNlLCBvZmZzZXQpICAgICAgICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisg
ICAgLy8gICAgICAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0tPiAgLi4uCisgICAgLy8gICAgICAgICAgICAgLy8gbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJh
c2UsIG9mZnNldCkgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGFkZHJlc3MsIG9mZnNldCkK
KyAgICAvLyAgICAgICAgICAgICBtZW1vcnktPmNoaWxkKDEpID0gYWRkcmVzczsKKyAgICAvLyAg
ICAgICAgIH0gZWxzZSB7CisgICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgLy8gICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFz
ZSwgbmV3T2Zmc2V0KQorICAgIC8vICAgICAgICAgICAgIC8vIG1lbW9yeSA9IFN0b3JlKHZhbHVl
LCBiYXNlLCAwKSAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgbmV3QWRkcmVzcywgMCkKKyAgICAv
LyAgICAgICAgICAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgLi4uCisg
ICAgLy8gICAgICAgICAgICAgLy8gb2Zmc2V0ID0gQ29uc3RhbnQgICAgICAgICAgICAgICAgIG9m
ZnNldCA9IElkZW50aXR5KG5ld09mZnNldCkKKyAgICAvLyAgICAgICAgICAgICAvLyBhZGRyZXNz
ID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3Mp
CisgICAgLy8gICAgICAgICAgICAgdW5zaWduZWQgbWVtb3J5SW5kZXggPSB2YWx1ZVRvSW5kZXgu
Z2V0KG1lbW9yeSk7CisgICAgLy8gICAgICAgICAgICAgVmFsdWUqIG5ld09mZnNldCA9IGluc2Vy
dGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihtZW1vcnlJbmRleCwgbWVtb3J5LT5vcmlnaW4o
KSwgYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50KCkpOworICAgIC8vICAgICAgICAgICAgIFZhbHVl
KiBuZXdBZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obWVtb3J5SW5kZXgsIEFk
ZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09mZnNldCk7CisgICAg
Ly8gICAgICAgICAgICAgbWVtb3J5LT5jaGlsZCgxKSA9IG5ld0FkZHJlc3M7CisgICAgLy8gICAg
ICAgICAgICAgYWRkcmVzcy0+Y2hpbGQoMSktPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3T2Zmc2V0
KTsKKyAgICAvLyAgICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld0Fk
ZHJlc3MpOworICAgIC8vICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKG1lbW9yeS0+
b3duZXIpOworICAgIC8vICAgICAgICAgfQorICAgIC8vICAgICB9CisgICAgLy8gfTsKKworICAg
IC8vIGRldGVjdEluY3JlbWVudFN0b3JlKHByZUluZGV4U3RvcmVDYW5kaWRhdGVzKTsKKyAgICAv
LyBkZXRlY3RJbmNyZW1lbnRTdG9yZShwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXMpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CmluZGV4IGViYjAzNTJjYjMwODAzZGJjMWZlODE4ZTM5OTBiYTM3NDU3MDY2MzcuLjljZjgyZDg5
OTEyZTgzMWYwZmM3MjZkMzliZTlmN2JkOGQ2NzVmMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0yNTY0LDggKzI1NjQsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFzZSwgb2Zmc2V0KQogICAgICAgICAgICAg
Ly8gICAgIG1lbW9yeSA9IGxvYWQoYmFzZSwgb2Zmc2V0KQogICAgICAgICAgICAgLy8gUG9zdC1J
bmRleCBDYW5vbmljYWwgRm9ybToKLSAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBsb2FkKGJh
c2UsIDApCiAgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IGFkZChiYXNlLCBvZmZzZXQpCisg
ICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gbG9hZChiYXNlLCAwKQogICAgICAgICAgICAgYXV0
byB0cnlBcHBlbmRJbmNyZW1lbnRBZGRyZXNzID0gWyZdICgpIC0+IGJvb2wgewogICAgICAgICAg
ICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNy
ZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBlKCkpOwogICAgICAgICAg
ICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlByZUluZGV4LCBBcmc6OlRtcCkg
fHwgIW1faW5kZXgpCkBAIC0zNDQzLDYgKzM0NDMsNDQgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIFByZS1JbmRleCBDYW5vbmlj
YWwgRm9ybToKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIE9mZnNldCkK
KyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYWRkcmVzcywgT2Zmc2V0
KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBDYW5vbmljYWwgRm9ybToKKyAgICAgICAgICAg
IC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIE9mZnNldCkKKyAgICAgICAgICAgIC8vICAgICBt
ZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYWRkcmVzcywgMCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBw
ZW5kSW5jcmVtZW50QWRkcmVzcyA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBN
ZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAg
ICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aElu
Y3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1vcnktPmNoaWxkKDApLT50eXBlKCkp
OworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlByZUluZGV4
LCBBcmc6OlRtcCkgfHwgIW1faW5kZXgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IG1lbW9yeS0+bGFzdENoaWxkKCk7
CisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm9wY29kZSgpICE9IEFkZCB8fCBhZGRyZXNz
LT50eXBlKCkgIT0gSW50NjQgfHwgIWFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGludHB0cl90
IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludFB0cigpOworICAgICAgICAgICAgICAg
IFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNl
dFR5cGU+KG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNl
dCB8fCAhQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIEFyZyBpbmNyZW1lbnRB
cmcgPSBBcmcoKTsKKyAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgPT0gbWVtb3J5LT5vZmZzZXQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFyZzo6cHJlSW5kZXgodG1wKGFk
ZHJlc3MpLCBzbWFsbE9mZnNldCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFyZzo6cG9zdEluZGV4KHRtcChhZGRyZXNzKSwgc21h
bGxPZmZzZXQpOworCisgICAgICAgICAgICAgICAgaWYgKGluY3JlbWVudEFyZykgeworICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGFkZHJlc3MtPnR5cGUoKSks
IHRtcChhZGRyZXNzLT5jaGlsZCgwKSksIHRtcChhZGRyZXNzKSk7CisgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZChvcGNvZGUsIHRtcChtZW1vcnktPmNoaWxkKDApKSwgaW5jcmVtZW50QXJnKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9sb2NrZWQuYWRkKGFkZHJlc3MpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVu
ZEluY3JlbWVudEFkZHJlc3MoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAg
ICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUsIGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggNzIxZWIzYWRk
NjI3NDhlMmZiMDJkZGY0MjU1N2NjNTlkNWQ4ODBlYi4uMzYyODA3MWY5OTIwMGE4OTA2OWE4NDhk
MWNjZjQxODNiMTYwYjE5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMTE0NSw0
ICsxMTQ1LDkgQEAgdm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKTsKIHZvaWQgdGVzdExvYWRQb3N0
SW5kZXgzMigpOwogdm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCk7CiAKK3ZvaWQgdGVzdFN0b3Jl
UHJlSW5kZXgzMigpOwordm9pZCB0ZXN0U3RvcmVQcmVJbmRleDY0KCk7Cit2b2lkIHRlc3RTdG9y
ZVBvc3RJbmRleDMyKCk7Cit2b2lkIHRlc3RTdG9yZVBvc3RJbmRleDY0KCk7CisKICNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiM18zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXgg
Yjg5YjAxOWZkOGJmNWYwNzEyZjQ2Njg2NTBmNjFjZGY4MWRhNGM4My4uODczOWM4MzUxMDFiOTgw
YjJjYjQwYTljMzdmOWQwOGYyNGQ5M2RlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiM18zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
XzMuY3BwCkBAIC0zMjEsNiArMzIxLDEwNyBAQCB2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQoKQog
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ2NF90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90
PihwdHIpKSwgdGVzdCgpKTsKIH0KIAordm9pZCB0ZXN0U3RvcmVQcmVJbmRleDMyKCkKK3sKKyAg
ICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsK
KworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCogcHRyID0g
Jm51bXNbMV07CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIGFkZHJlc3MgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgVmFsdWUqIGNvbnN0NCA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCA0KTsKKyAgICBWYWx1ZSogcHJlSW5jcmVtZW50ID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhZGRyZXNzLCBjb25zdDQpOworICAgIHJvb3Qt
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLCByb290LT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCksIHByZUluY3JlbWVudCk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBy
ZUluY3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBp
ZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIiM0XSEi
KTsKKyAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KHB0cikpOworICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVz
KTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVJ
bmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisg
ICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAg
aW50NjRfdCogcHRyID0gJm51bXNbMV07CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIGFkZHJlc3MgPSBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGNvbnN0OCA9IHJvb3QtPmFwcGVuZE5ldzxDb25z
dDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KTsKKyAgICBWYWx1ZSogcHJlSW5jcmVtZW50ID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhZGRyZXNzLCBjb25z
dDgpOworICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdp
bigpLCByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCksIHBy
ZUluY3JlbWVudCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVy
biwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKKyAgICAvLyBpZiAoaXNBUk02NCgpKQorICAgIC8vICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgIiM4XSEiKTsKKyAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRy
X3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpOworICAgIHB0ciA9IGJpdHdp
c2VfY2FzdDxpbnQ2NF90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKK30K
Kwordm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNb
XSA9IHsgMSwgMiwgMyB9OworICAgIGludDMyX3QqIHB0ciA9ICZudW1zWzFdOworCisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKwor
ICAgIFZhbHVlKiBhZGRyZXNzID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCksIGFkZHJlc3MpOworICAgIFZhbHVlKiBvZmZz
ZXQgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCk7Cisg
ICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRk
LCBPcmlnaW4oKSwgYWRkcmVzcywgb2Zmc2V0KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9s
VmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcHJlSW5jcmVtZW50KTsKKworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzQiKTsKKyAgICBpbnRwdHJfdCByZXMgPSBp
bnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpOworICAg
IHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShudW1zWzFd
LCA0KTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKK30KKwordm9pZCB0ZXN0U3RvcmVQ
b3N0SW5kZXg2NCgpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAy
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMyB9Owor
ICAgIGludDY0X3QqIHB0ciA9ICZudW1zWzFdOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiBhZGRyZXNz
ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJv
YywgU3RvcmUsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgNCksIGFkZHJlc3MpOworICAgIFZhbHVlKiBvZmZzZXQgPSByb290LT5hcHBlbmRO
ZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCk7CisgICAgVmFsdWUqIHByZUluY3Jl
bWVudCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVz
cywgb2Zmc2V0KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcHJlSW5jcmVtZW50KTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOworICAgIC8vIGlmIChpc0FSTTY0KCkpCisgICAgLy8gICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCAiXSwgIzgiKTsKKyAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRy
X3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpOworICAgIHB0ciA9IGJpdHdp
c2VfY2FzdDxpbnQ2NF90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShudW1zWzFdLCA0KTsKKyAgICBD
SEVDS19FUShudW1zWzJdLCAqcHRyKTsKK30KIAogdm9pZCB0ZXN0SW5zZXJ0U2lnbmVkQml0Zmll
bGRJblplcm8zMigpCiB7CkBAIC0zOTk2LDYgKzQwOTcsMTEgQEAgdm9pZCBhZGRTaHJUZXN0cyhj
b25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFz
a3MpCiAgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsKICAgICBSVU4odGVzdExvYWRQb3N0
SW5kZXgzMigpKTsKICAgICBSVU4odGVzdExvYWRQb3N0SW5kZXg2NCgpKTsKKworICAgIFJVTih0
ZXN0U3RvcmVQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDY0KCkpOwor
ICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdFN0b3JlUG9zdElu
ZGV4NjQoKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434769</attachid>
            <date>2021-08-02 10:52:30 -0700</date>
            <delta_ts>2021-08-02 15:09:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228538-20210802125229.patch</filename>
            <type>text/plain</type>
            <size>21713</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
N2M5NTU4ZWFiZGIxNjY0YzU2YWQyZGU0YWQzNGQ3ZDA3Y2UxNzI1Li44YTNjN2IyYzQxMWMzMjk3
ZDcxZTdlZDEyMTMzZTk5YThjNTU3MTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzAgQEAKKzIwMjEtMDgtMDEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIg
Zm9yIEFSTTY0IChTdG9yZSBJbnN0cnVjdGlvbikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODUzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZSBwcmV2aW91cyBwYXRjaCBoYXMgaW50cm9kdWNlZCB0
aGUgcHJlL3Bvc3QtaW5kZXggYWRkcmVzcyBtb2RlIGZvciBMb2FkIGluc3RydWN0aW9uIAorICAg
ICAgICAsIHdoaWNoIGJlbmVmaXRzIGxvb3AgcHJvZ3JhbS4gSGVyZSwgdGhpcyBwYXRjaCBhZGRz
IHRoZSBjb3JyZXNwb25kaW5nIG1vZGUgZm9yIFN0b3JlIAorICAgICAgICBpbnN0cnVjdGlvbi4g
U3RvcmUgUmVnaXN0ZXIgKGltbWVkaWF0ZSkgc3RvcmVzIGEgd29yZCBvciBhIGRvdWJsZXdvcmQg
ZnJvbSBhIHJlZ2lzdGVyIAorICAgICAgICB0byBtZW1vcnkuIFRoZSBhZGRyZXNzIHRoYXQgaXMg
dXNlZCBmb3IgdGhlIHN0b3JlIGlzIGNhbGN1bGF0ZWQgZnJvbSBhIGJhc2UgcmVnaXN0ZXIgCisg
ICAgICAgIGFuZCBhbiBpbW1lZGlhdGUgb2Zmc2V0LgorCisgICAgICAgICMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFByZS1JbmRleCBBZGRyZXNzIE1v
ZGUgRm9yIFN0b3JlICMjCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCisKKyAgICAgICAgU1RSIFd0LCBbWG4sICNpbW1dIQorCisgICAgICAgIEluIEIzIFJl
ZHVjdGlvbiBTdHJlbmd0aCwgc2luY2Ugd2UgaGF2ZSB0aGlzIHJlZHVjdGlvbiBydWxlOgorICAg
ICAgICAgICAgVHVybnMgdGhpczogU3RvcmUodmFsdWUsIEFkZChhZGRyZXNzLCBvZmZzZXQxKSwg
b2Zmc2V0ID0gb2Zmc2V0MikKKyAgICAgICAgICAgIEludG8gdGhpczogU3RvcmUodmFsdWUsIGFk
ZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorCisgICAgICAgIFRoZW4sIHRoZSBl
cXVpdmFsZW50IHBhdHRlcm4gaXM6CisgICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9m
ZnNldCkKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUs
IGJhc2UsIG9mZnNldCkKKworICAgICAgICBGaXJzdCwgd2UgY29udmVydCBpdCB0byB0aGUgY2Fu
b25pY2FsIGZvcm06CisgICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAg
ICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGFkZHJlc3Ms
IG9mZnNldCkKKworICAgICAgICBOZXh0LCBsb3dlciB0byBBaXI6CisgICAgICAgICAgICBNb3Zl
ICViYXNlLCAlYWRkcmVzcworICAgICAgICAgICAgTW92ZSAldmFsdWUsICglYWRkcmVzcywgcHJl
Zml4KG9mZnNldCkpCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKKyAgICAgICAgIyMgUG9zdC1JbmRleCBBZGRyZXNzIE1vZGUgRm9yIExvYWQgIyMKKyAg
ICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICBT
VFIgV3QsIFtYbl0sICNpbW0KKworICAgICAgICBUaGVuLCB0aGUgZXF1aXZhbGVudCBwYXR0ZXJu
IGlzOgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCisgICAgICAg
ICAgICAuLi4KKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorCisgICAg
ICAgIEZpcnN0LCB3ZSBjb252ZXJ0IGl0IHRvIHRoZSBjYW5vbmljYWwgZm9ybToKKyAgICAgICAg
ICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJh
c2UsIG9mZnNldCkKKyAgICAgICAgICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBuZXdBZGRyZXNz
LCAwKSAvLyBtb3ZlIHRoZSBvZmZzZXQgYW5kIGFkZHJlc3MgdG8ganVzdCBiZWZvcmUgdGhlIG1l
bW9yeQorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBvZmZzZXQgPSBJZGVudGl0eShuZXdP
ZmZzZXQpCisgICAgICAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykKKworICAg
ICAgICBOZXh0LCBsb3dlciB0byBBaXI6CisgICAgICAgICAgICBNb3ZlICViYXNlLCAlbmV3QWRk
cmVzcworICAgICAgICAgICAgTW92ZSAldmFsdWUsICglbmV3QWRkcmVzcywgcG9zdGZpeChvZmZz
ZXQpKQorCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKKyAgICAgICAgIyMgVGVzdCBmb3IgUHJlL1Bvc3QtSW5jcmVtZW50IEFkZHJlc3MgTW9k
ZSAjIworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCisKKyAgICAgICAgQjMgSVI6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBJbnQgIEAwID0gQXJndW1lbnRS
ZWcoJXgwKQorICAgICAgICBJbnQgIEAxID0gQ29uc3Q2NCg4KQorICAgICAgICBJbnQgIEAyID0g
QWRkKGJAMCwgJDgoQDEpKQorICAgICAgICBJbnQgIEAzID0gQ29uc3Q2NCg0KQorICAgICAgICBW
b2lkIEA0ID0gU3RvcmUoJDQoQDMpLCBAMiwgQ29udHJvbERlcGVuZGVudHxXcml0ZXM6VG9wKQor
ICAgICAgICBWb2lkIEA1ID0gUmV0dXJuKEAyLCBUZXJtaW5hbCkKKyAgICAgICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAg
Vy9PIFByZS1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgTW92ZSAleDAs
ICV4MSwgICAgICBAMAorICAgICAgICBBZGQgICAkOCwgJXgxLCAleDAsIEAyCisgICAgICAgIE1v
dmUgICQ0LCAleDIsICAgICAgQDMKKyAgICAgICAgTW92ZSAleDIsIDgoJXgxKSwgICBANAorICAg
ICAgICBSZXQgICV4MCwgICAgICAgICAgIEA1CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvIFByZS1JbmNy
ZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgTW92ZSAgICAgICAgICAgICAgICAk
NCwgICAgICAgICAgICV4MSwgQDMKKyAgICAgICAgTW92ZVdpdGhJbmNyZW1lbnQgICV4MSwgKCV4
MCxQcmUoJDgpKSwgQDQKKyAgICAgICAgUmV0ICAgICAgICAgICAgICAgICV4MCwgICAgICAgICAg
ICAgICAgQDUKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKworICAgICAgICBCMyBJUjoKKyAgICAgICAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEludCAg
QDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCAgQDEgPSBDb25zdDY0KDQpCisgICAg
ICAgIFZvaWQgQDIgPSBTdG9yZSgkNChiQDEpLCBAMCwgQ29udHJvbERlcGVuZGVudHxXcml0ZXM6
VG9wKQorICAgICAgICBJbnQgIEAzID0gQ29uc3Q2NCg4KQorICAgICAgICBJbnQgIEA0ID0gQWRk
KEAwLCAkOChAMykpCisgICAgICAgIFZvaWQgQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFsKQorICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgICAgICBXL08gUG9zdC1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAgICAgTW92ZSAgJDQsICAgJXgxLCAgICAgIEAxCisgICAgICAgIE1vdmUgJXgxLCAoJXgwKSwg
ICAgICBAMgorICAgICAgICBBZGQgICAkOCwgICAleDAsICV4MCwgQDQKKyAgICAgICAgUmV0ICAl
eDAsICAgICAgICAgICAgIEA1CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvIFBvc3QtSW5jcmVtZW50IEFk
ZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIE1vdmUgICAgICAgICAgICAgICAgJDQsICAgICAg
ICAgICAgJXgxLCBAMQorICAgICAgICBNb3ZlV2l0aEluY3JlbWVudCAgJXgxLCAoJXgwLFBvc3Qo
JDgpKSwgQDIKKyAgICAgICAgUmV0ICAgICAgICAgICAgICAgICV4MCwgICAgICAgICAgICAgICAg
IEA1CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgICAgICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50
cy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyk6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoK
KyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDMy
KToKKyAgICAgICAgKHRlc3RTdG9yZVByZUluZGV4NjQpOgorICAgICAgICAodGVzdFN0b3JlUG9z
dEluZGV4MzIpOgorICAgICAgICAodGVzdFN0b3JlUG9zdEluZGV4NjQpOgorICAgICAgICAoYWRk
U2hyVGVzdHMpOgorCiAyMDIxLTA3LTMwICBZaWppYSBIdWFuZyAgPHlpamlhX2h1YW5nQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgUHJlL1Bvc3QtSW5kZXhlZCBBZGRyZXNzIE1vZGUgdG8gQWly
IGZvciBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25p
Y2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCmluZGV4IDgyYzlhZjFkOWI4OWFkNTdm
Nzc3MzY5YzllMTdkZWU2NzZiOGIyNWUuLjY5OGI4ZTAyMGYxMjdhODFhOTNkZjhkODI0YTI5YTc1
OTk0MTQ5MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNh
bGl6ZVByZVBvc3RJbmNyZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKQEAgLTU4LDI2ICs1OCwzMSBAQCBi
b29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICBE
b21pbmF0b3JzJiBkb21pbmF0b3JzID0gcHJvYy5kb21pbmF0b3JzKCk7CiAgICAgQmFja3dhcmRz
RG9taW5hdG9ycyYgYmFja3dhcmRzRG9taW5hdG9ycyA9IHByb2MuYmFja3dhcmRzRG9taW5hdG9y
cygpOwogCisgICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9M
b2FkOworICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHByZUluZGV4TG9hZENhbmRp
ZGF0ZXM7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4TG9hZENh
bmRpZGF0ZXM7CisKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJh
c2VUb1N0b3JlOworICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHByZUluZGV4U3Rv
cmVDYW5kaWRhdGVzOworICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRl
eFN0b3JlQ2FuZGlkYXRlczsKKwogICAgIEhhc2hNYXA8VmFsdWVLZXksIFZlY3RvcjxWYWx1ZSo+
PiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVl
Kj4gcHJlSW5kZXhDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5
VmFsdWUqPj4gYmFzZVRvTWVtb3JpZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVl
Kj4gcG9zdEluZGV4Q2FuZGlkYXRlczsKICAgICBIYXNoTWFwPFZhbHVlKiwgdW5zaWduZWQ+IHZh
bHVlVG9JbmRleDsKICAgICBJbmRleFNldDxWYWx1ZSo+IGlnbm9yZWRWYWx1ZXM7CiAKLSAgICAv
LyBQcmUtSW5kZXggUGF0dGVybjoKLSAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpCi0gICAgLy8gICAgIC4uLgotICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNl
dCkKLSAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46Ci0gICAgLy8gICAgIG1lbW9yeSA9IExvYWQo
YmFzZSwgMCkKLSAgICAvLyAgICAgLi4uCi0gICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KQogICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4ID0gWyZdIChWYWx1ZSogdmFsdWUpIHsK
ICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKICAgICAgICAgY2FzZSBMb2FkOiB7
CiAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVl
PigpOwogCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgIC8v
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC8vICAgICAuLi4K
KyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKKyAgICAgICAg
ICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBM
b2FkKGJhc2UsIDApCisgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAgICAgICAvLyAgICAg
YWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCiAgICAgICAgICAgICBhdXRvIHRyeVByZVBvc3RJ
bmRleE1lbW9yeSA9IFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+dHlwZSgp
ICE9IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IEludDY0KQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CkBAIC04OCw5ICs5Myw0MCBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNy
ZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlT2Zm
c2V0VG9BZGRyZXNzZXMuY29udGFpbnMoYmFzZU9mZnNldGtleSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGFkZHJlc3Mg
OiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuZ2V0KGJhc2VPZmZzZXRrZXkpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcHJlSW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnksIGFkZHJlc3MpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcy5hZGQobWVtb3J5LCBh
ZGRyZXNzKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFz
ZVRvTWVtb3JpZXMuYWRkKG1lbW9yeS0+Y2hpbGQoMCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkp
Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgYmFz
ZVRvTG9hZC5hZGQobWVtb3J5LT5sYXN0Q2hpbGQoKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOworICAgICAgICAgICAgICAgIHZhbHVlVG9J
bmRleC5hZGQodmFsdWUsIGluZGV4KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHRy
eVByZVBvc3RJbmRleE1lbW9yeSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIFN0b3JlOiB7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0g
dmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0
dGVybjoKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAg
ICAgICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2
YWx1ZSwgYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJuOgor
ICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKQorICAgICAg
ICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KQorICAgICAgICAgICAgYXV0byB0cnlQcmVQb3N0SW5kZXhNZW1vcnkgPSBbJl0gKCkg
eworICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPmNoaWxkKDApLT50eXBlKCkgIT0gSW50MzIg
JiYgbWVtb3J5LT5jaGlsZCgwKS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzVmFsaWRQcmVJbmRleEZvcm0obWVtb3J5LT5vZmZz
ZXQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShtZW1vcnktPmNoaWxkKDApLCBz
dGF0aWNfY2FzdDxpbnQ2NF90PihtZW1vcnktPm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghYmFzZU9mZnNldFRvQWRkcmVzc2VzLmNvbnRhaW5zKGJhc2VPZmZzZXRrZXkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBmb3Ig
KFZhbHVlKiBhZGRyZXNzIDogYmFzZU9mZnNldFRvQWRkcmVzc2VzLmdldChiYXNlT2Zmc2V0a2V5
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZUluZGV4U3RvcmVDYW5kaWRhdGVzLmFkZCht
ZW1vcnksIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICBiYXNlVG9TdG9yZS5hZGQobWVtb3J5LT5jaGlsZCgxKSwgVmVjdG9yPE1lbW9yeVZhbHVl
Kj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwogICAgICAgICAgICAgICAgIHZh
bHVlVG9JbmRleC5hZGQodmFsdWUsIGluZGV4KTsKICAgICAgICAgICAgIH07CiAKQEAgLTExMywx
MCArMTQ5LDE0IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJl
JiBwcm9jKQogICAgICAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtl
eShsZWZ0LCBzdGF0aWNfY2FzdDxpbnQ2NF90PihzbWFsbE9mZnNldCkpOwogICAgICAgICAgICAg
ICAgIGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5hZGQoYmFzZU9mZnNldGtleSwgVmVjdG9yPFZhbHVl
Kj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFs
dWVUb0luZGV4LmFkZCh2YWx1ZSwgaW5kZXgpOwotICAgICAgICAgICAgICAgIGlmICghYmFzZVRv
TWVtb3JpZXMuY29udGFpbnMobGVmdCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9NZW1vcmllcy5n
ZXQobGVmdCkpCi0gICAgICAgICAgICAgICAgICAgIHBvc3RJbmRleENhbmRpZGF0ZXMuYWRkKG1l
bW9yeSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChiYXNlVG9Mb2FkLmNvbnRhaW5zKGxl
ZnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJh
c2VUb0xvYWQuZ2V0KGxlZnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4TG9h
ZENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoYmFzZVRvU3RvcmUuY29udGFpbnMobGVmdCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvU3RvcmUuZ2V0KGxlZnQp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzLmFkZCht
ZW1vcnksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogCiAgICAg
ICAgICAgICB0cnlQb3RlbnRpYWxQb3N0SW5kZXhBZGRyZXNzKCk7CkBAIC0xNDEsMTQgKzE4MSwx
NCBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykK
ICAgICAgICAgICAgIHx8IChkb21pbmF0b3JzLmRvbWluYXRlcyh2Mi0+b3duZXIsIHYxLT5vd25l
cikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5kb21pbmF0ZXModjEtPm93bmVyLCB2Mi0+b3duZXIp
KTsKICAgICB9OwogCi0gICAgYXV0byBkZXRlY3QgPSBbJl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUq
LCBWYWx1ZSo+IGNhbmRpZGF0ZXMpIHsKKyAgICBhdXRvIGRldGVjdEluY3JlbWVudExvYWQgPSBb
Jl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IGNhbmRpZGF0ZXMpIHsKICAgICAgICAg
Zm9yIChhdXRvIGl0ciA9IGNhbmRpZGF0ZXMuYmVnaW4oKTsgaXRyICE9IGNhbmRpZGF0ZXMuZW5k
KCk7ICsraXRyKSB7CiAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gaXRyLT5rZXk7
CiAgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IGl0ci0+dmFsdWU7CiAgICAgICAgICAgICBp
ZiAoaWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFp
bnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzID09IHBy
ZUluZGV4Q2FuZGlkYXRlcykgeworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMgPT0gcHJlSW5k
ZXhMb2FkQ2FuZGlkYXRlcykgewogICAgICAgICAgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFz
ZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9h
ZChiYXNlLCBvZmZzZXQpCiAgICAgICAgICAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC4uLgpAQCAtMTc3LDggKzIxNyw0MSBAQCBib29sIGNhbm9uaWNhbGl6ZVBy
ZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBkZXRlY3QocHJlSW5kZXhDYW5kaWRhdGVzKTsKLSAgICBkZXRlY3QocG9zdEluZGV4Q2FuZGlk
YXRlcyk7CisgICAgZGV0ZWN0SW5jcmVtZW50TG9hZChwcmVJbmRleExvYWRDYW5kaWRhdGVzKTsK
KyAgICBkZXRlY3RJbmNyZW1lbnRMb2FkKHBvc3RJbmRleExvYWRDYW5kaWRhdGVzKTsKKworICAg
IGF1dG8gZGV0ZWN0SW5jcmVtZW50U3RvcmUgPSBbJl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBW
YWx1ZSo+IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgZm9yIChhdXRvIGl0ciA9IGNhbmRpZGF0ZXMu
YmVnaW4oKTsgaXRyICE9IGNhbmRpZGF0ZXMuZW5kKCk7ICsraXRyKSB7CisgICAgICAgICAgICBN
ZW1vcnlWYWx1ZSogbWVtb3J5ID0gaXRyLT5rZXk7CisgICAgICAgICAgICBWYWx1ZSogYWRkcmVz
cyA9IGl0ci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoaWdub3JlZFZhbHVlcy5jb250YWlucyht
ZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVp
dmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIGlmIChjYW5kaWRhdGVzID09IHByZUluZGV4U3RvcmVDYW5kaWRhdGVzKSB7Cisg
ICAgICAgICAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAgICAg
ICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAgICAgLy8gLi4uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgLi4uCisgICAgICAgICAgICAgICAg
Ly8gbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIG9mZnNldCkgICAgICAgbWVtb3J5ID0gU3Rv
cmUodmFsdWUsIGFkZHJlc3MsIG9mZnNldCkKKyAgICAgICAgICAgICAgICBtZW1vcnktPmNoaWxk
KDEpID0gYWRkcmVzczsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50Cisg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Fk
ZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zmc2V0KQorICAgICAgICAgICAgICAgIC8vIG1lbW9yeSA9
IFN0b3JlKHZhbHVlLCBiYXNlLCAwKSAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgbmV3QWRkcmVz
cywgMCkKKyAgICAgICAgICAgICAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0t
PiAgLi4uCisgICAgICAgICAgICAgICAgLy8gb2Zmc2V0ID0gQ29uc3RhbnQgICAgICAgICAgICAg
ICAgIG9mZnNldCA9IElkZW50aXR5KG5ld09mZnNldCkKKyAgICAgICAgICAgICAgICAvLyBhZGRy
ZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJl
c3MpCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbWVtb3J5SW5kZXggPSB2YWx1ZVRvSW5kZXgu
Z2V0KG1lbW9yeSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld09mZnNldCA9IGluc2VydGlv
blNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihtZW1vcnlJbmRleCwgbWVtb3J5LT5vcmlnaW4oKSwg
YWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50KCkpOworICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdB
ZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obWVtb3J5SW5kZXgsIEFkZCwgbWVt
b3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09mZnNldCk7CisgICAgICAgICAg
ICAgICAgbWVtb3J5LT5jaGlsZCgxKSA9IG5ld0FkZHJlc3M7CisgICAgICAgICAgICAgICAgYWRk
cmVzcy0+Y2hpbGQoMSktPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3T2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld0FkZHJlc3MpOworICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKG1lbW9yeS0+b3duZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIGRldGVjdEluY3JlbWVudFN0b3JlKHByZUlu
ZGV4U3RvcmVDYW5kaWRhdGVzKTsKKyAgICBkZXRlY3RJbmNyZW1lbnRTdG9yZShwb3N0SW5kZXhT
dG9yZUNhbmRpZGF0ZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IGViYjAzNTJjYjMwODAzZGJjMWZlODE4ZTM5
OTBiYTM3NDU3MDY2MzcuLjljZjgyZDg5OTEyZTgzMWYwZmM3MjZkMzliZTlmN2JkOGQ2NzVmMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0yNTY0LDgg
KzI1NjQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFz
ZSwgb2Zmc2V0KQogICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IGxvYWQoYmFzZSwgb2Zmc2V0
KQogICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBDYW5vbmljYWwgRm9ybToKLSAgICAgICAgICAg
IC8vICAgICBtZW1vcnkgPSBsb2FkKGJhc2UsIDApCiAgICAgICAgICAgICAvLyAgICAgYWRkcmVz
cyA9IGFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gbG9hZChi
YXNlLCAwKQogICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRJbmNyZW1lbnRBZGRyZXNzID0gWyZd
ICgpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9w
Y29kZUZvclR5cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVt
b3J5LT50eXBlKCkpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBB
cmc6OlByZUluZGV4LCBBcmc6OlRtcCkgfHwgIW1faW5kZXgpCkBAIC0zNDQzLDYgKzM0NDMsNDQg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKKyAgICAgICAg
ICAgIC8vIFByZS1JbmRleCBDYW5vbmljYWwgRm9ybToKKyAgICAgICAgICAgIC8vICAgICBhZGRy
ZXNzID0gQWRkKGJhc2UsIE9mZnNldCkKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9y
ZSh2YWx1ZSwgYWRkcmVzcywgT2Zmc2V0KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBDYW5v
bmljYWwgRm9ybToKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIE9mZnNl
dCkKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYWRkcmVzcywgMCkK
KyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kSW5jcmVtZW50QWRkcmVzcyA9IFsmXSAoKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8
TWVtb3J5VmFsdWU+KCk7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5
T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBt
ZW1vcnktPmNoaWxkKDApLT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZv
cm0ob3Bjb2RlLCBBcmc6OlByZUluZGV4LCBBcmc6OlRtcCkgfHwgIW1faW5kZXgpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYWRkcmVz
cyA9IG1lbW9yeS0+bGFzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm9w
Y29kZSgpICE9IEFkZCB8fCBhZGRyZXNzLT50eXBlKCkgIT0gSW50NjQgfHwgIWFkZHJlc3MtPmNo
aWxkKDEpLT5oYXNJbnRQdHIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxkKDEpLT5hc0lu
dFB0cigpOworICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0g
c3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAgICAgICAgICAgICAg
aWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShz
bWFsbE9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgICAgIEFyZyBpbmNyZW1lbnRBcmcgPSBBcmcoKTsKKyAgICAgICAgICAgICAgICBpZiAo
bWVtb3J5LT5vZmZzZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQg
PT0gbWVtb3J5LT5vZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEFy
ZyA9IEFyZzo6cHJlSW5kZXgodG1wKGFkZHJlc3MpLCBzbWFsbE9mZnNldCk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFyZzo6cG9z
dEluZGV4KHRtcChhZGRyZXNzKSwgc21hbGxPZmZzZXQpOworCisgICAgICAgICAgICAgICAgaWYg
KGluY3JlbWVudEFyZykgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVG
b3JUeXBlKGFkZHJlc3MtPnR5cGUoKSksIHRtcChhZGRyZXNzLT5jaGlsZCgwKSksIHRtcChhZGRy
ZXNzKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChtZW1vcnktPmNo
aWxkKDApKSwgaW5jcmVtZW50QXJnKTsKKyAgICAgICAgICAgICAgICAgICAgbV9sb2NrZWQuYWRk
KGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgaWYgKHRyeUFwcGVuZEluY3JlbWVudEFkZHJlc3MoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKICAgICAgICAgICAgIGFwcGVuZFN0b3JlKG1fdmFsdWUsIGFkZHIobV92
YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmgKaW5kZXggNzIxZWIzYWRkNjI3NDhlMmZiMDJkZGY0MjU1N2NjNTlkNWQ4ODBlYi4u
MzYyODA3MWY5OTIwMGE4OTA2OWE4NDhkMWNjZjQxODNiMTYwYjE5NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuaApAQCAtMTE0NSw0ICsxMTQ1LDkgQEAgdm9pZCB0ZXN0TG9hZFByZUluZGV4
NjQoKTsKIHZvaWQgdGVzdExvYWRQb3N0SW5kZXgzMigpOwogdm9pZCB0ZXN0TG9hZFBvc3RJbmRl
eDY0KCk7CiAKK3ZvaWQgdGVzdFN0b3JlUHJlSW5kZXgzMigpOwordm9pZCB0ZXN0U3RvcmVQcmVJ
bmRleDY0KCk7Cit2b2lkIHRlc3RTdG9yZVBvc3RJbmRleDMyKCk7Cit2b2lkIHRlc3RTdG9yZVBv
c3RJbmRleDY0KCk7CisKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjNfMy5jcHAKaW5kZXggYjg5YjAxOWZkOGJmNWYwNzEyZjQ2Njg2NTBmNjFjZGY4
MWRhNGM4My4uNTVjNGEwYTllYzE4MWRjYTY2MjZiNTQ3NGY5NzYzMzQxZDM2NzRjMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCkBAIC0zMjEsNiArMzIxLDEwNyBAQCB2b2lk
IHRlc3RMb2FkUG9zdEluZGV4NjQoKQogICAgIENIRUNLX0VRKGludm9rZTxpbnQ2NF90PigqY29k
ZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKIH0KIAordm9pZCB0ZXN0
U3RvcmVQcmVJbmRleDMyKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwo
KSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAz
IH07CisgICAgaW50MzJfdCogcHRyID0gJm51bXNbMV07CisKKyAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIGFk
ZHJlc3MgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGNvbnN0NCA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA0KTsKKyAgICBWYWx1ZSogcHJlSW5j
cmVtZW50ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhZGRy
ZXNzLCBjb25zdDQpOworICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgU3Rv
cmUsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgNCksIHByZUluY3JlbWVudCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJ
bnN0cnVjdGlvbigqY29kZSwgIiM0XSEiKTsKKyAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50
cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpOworICAgIHB0ciA9IGJp
dHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsK
K30KKwordm9pZCB0ZXN0U3RvcmVQcmVJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVm
YXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVt
c1tdID0geyAxLCAyLCAzIH07CisgICAgaW50NjRfdCogcHRyID0gJm51bXNbMV07CisKKyAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
CisgICAgVmFsdWUqIGFkZHJlc3MgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGNvbnN0
OCA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KTsKKyAg
ICBWYWx1ZSogcHJlSW5jcmVtZW50ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQs
IE9yaWdpbigpLCBhZGRyZXNzLCBjb25zdDgpOworICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgNCksIHByZUluY3JlbWVudCk7CisgICAgcm9vdC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIiM4XSEiKTsKKyAgICBpbnRwdHJfdCBy
ZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikp
OworICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShu
dW1zWzJdLCAqcHRyKTsKK30KKwordm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXgzMigpCit7CisgICAg
aWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisK
KyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludDMyX3QqIHB0ciA9ICZu
dW1zWzFdOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiBhZGRyZXNzID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLCBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCksIGFkZHJlc3Mp
OworICAgIFZhbHVlKiBvZmZzZXQgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgNCk7CisgICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVzcywgb2Zmc2V0KTsKKyAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcHJlSW5jcmVt
ZW50KTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FS
TTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzQiKTsKKyAg
ICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHB0cikpOworICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKKyAg
ICBDSEVDS19FUShudW1zWzFdLCA0KTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKK30K
Kwordm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2NF90IG51bXNb
XSA9IHsgMSwgMiwgMyB9OworICAgIGludDY0X3QqIHB0ciA9ICZudW1zWzFdOworCisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKwor
ICAgIFZhbHVlKiBhZGRyZXNzID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29u
c3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCksIGFkZHJlc3MpOworICAgIFZhbHVlKiBvZmZz
ZXQgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCk7Cisg
ICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRk
LCBPcmlnaW4oKSwgYWRkcmVzcywgb2Zmc2V0KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9s
VmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcHJlSW5jcmVtZW50KTsKKworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzgiKTsKKyAgICBpbnRwdHJfdCByZXMgPSBp
bnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpOworICAg
IHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShudW1zWzFd
LCA0KTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKK30KIAogdm9pZCB0ZXN0SW5zZXJ0
U2lnbmVkQml0ZmllbGRJblplcm8zMigpCiB7CkBAIC0zOTk2LDYgKzQwOTcsMTEgQEAgdm9pZCBh
ZGRTaHJUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsKICAgICBSVU4o
dGVzdExvYWRQb3N0SW5kZXgzMigpKTsKICAgICBSVU4odGVzdExvYWRQb3N0SW5kZXg2NCgpKTsK
KworICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0U3RvcmVQcmVJ
bmRleDY0KCkpOworICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4odGVz
dFN0b3JlUG9zdEluZGV4NjQoKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434792</attachid>
            <date>2021-08-02 15:09:46 -0700</date>
            <delta_ts>2021-08-02 22:49:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228538-20210802170945.patch</filename>
            <type>text/plain</type>
            <size>22536</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
N2M5NTU4ZWFiZGIxNjY0YzU2YWQyZGU0YWQzNGQ3ZDA3Y2UxNzI1Li44YTNjN2IyYzQxMWMzMjk3
ZDcxZTdlZDEyMTMzZTk5YThjNTU3MTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzAgQEAKKzIwMjEtMDgtMDEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIg
Zm9yIEFSTTY0IChTdG9yZSBJbnN0cnVjdGlvbikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODUzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZSBwcmV2aW91cyBwYXRjaCBoYXMgaW50cm9kdWNlZCB0
aGUgcHJlL3Bvc3QtaW5kZXggYWRkcmVzcyBtb2RlIGZvciBMb2FkIGluc3RydWN0aW9uIAorICAg
ICAgICAsIHdoaWNoIGJlbmVmaXRzIGxvb3AgcHJvZ3JhbS4gSGVyZSwgdGhpcyBwYXRjaCBhZGRz
IHRoZSBjb3JyZXNwb25kaW5nIG1vZGUgZm9yIFN0b3JlIAorICAgICAgICBpbnN0cnVjdGlvbi4g
U3RvcmUgUmVnaXN0ZXIgKGltbWVkaWF0ZSkgc3RvcmVzIGEgd29yZCBvciBhIGRvdWJsZXdvcmQg
ZnJvbSBhIHJlZ2lzdGVyIAorICAgICAgICB0byBtZW1vcnkuIFRoZSBhZGRyZXNzIHRoYXQgaXMg
dXNlZCBmb3IgdGhlIHN0b3JlIGlzIGNhbGN1bGF0ZWQgZnJvbSBhIGJhc2UgcmVnaXN0ZXIgCisg
ICAgICAgIGFuZCBhbiBpbW1lZGlhdGUgb2Zmc2V0LgorCisgICAgICAgICMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFByZS1JbmRleCBBZGRyZXNzIE1v
ZGUgRm9yIFN0b3JlICMjCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCisKKyAgICAgICAgU1RSIFd0LCBbWG4sICNpbW1dIQorCisgICAgICAgIEluIEIzIFJl
ZHVjdGlvbiBTdHJlbmd0aCwgc2luY2Ugd2UgaGF2ZSB0aGlzIHJlZHVjdGlvbiBydWxlOgorICAg
ICAgICAgICAgVHVybnMgdGhpczogU3RvcmUodmFsdWUsIEFkZChhZGRyZXNzLCBvZmZzZXQxKSwg
b2Zmc2V0ID0gb2Zmc2V0MikKKyAgICAgICAgICAgIEludG8gdGhpczogU3RvcmUodmFsdWUsIGFk
ZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorCisgICAgICAgIFRoZW4sIHRoZSBl
cXVpdmFsZW50IHBhdHRlcm4gaXM6CisgICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9m
ZnNldCkKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUs
IGJhc2UsIG9mZnNldCkKKworICAgICAgICBGaXJzdCwgd2UgY29udmVydCBpdCB0byB0aGUgY2Fu
b25pY2FsIGZvcm06CisgICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAg
ICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGFkZHJlc3Ms
IG9mZnNldCkKKworICAgICAgICBOZXh0LCBsb3dlciB0byBBaXI6CisgICAgICAgICAgICBNb3Zl
ICViYXNlLCAlYWRkcmVzcworICAgICAgICAgICAgTW92ZSAldmFsdWUsICglYWRkcmVzcywgcHJl
Zml4KG9mZnNldCkpCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKKyAgICAgICAgIyMgUG9zdC1JbmRleCBBZGRyZXNzIE1vZGUgRm9yIExvYWQgIyMKKyAg
ICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICBT
VFIgV3QsIFtYbl0sICNpbW0KKworICAgICAgICBUaGVuLCB0aGUgZXF1aXZhbGVudCBwYXR0ZXJu
IGlzOgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCisgICAgICAg
ICAgICAuLi4KKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorCisgICAg
ICAgIEZpcnN0LCB3ZSBjb252ZXJ0IGl0IHRvIHRoZSBjYW5vbmljYWwgZm9ybToKKyAgICAgICAg
ICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJh
c2UsIG9mZnNldCkKKyAgICAgICAgICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBuZXdBZGRyZXNz
LCAwKSAvLyBtb3ZlIHRoZSBvZmZzZXQgYW5kIGFkZHJlc3MgdG8ganVzdCBiZWZvcmUgdGhlIG1l
bW9yeQorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBvZmZzZXQgPSBJZGVudGl0eShuZXdP
ZmZzZXQpCisgICAgICAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykKKworICAg
ICAgICBOZXh0LCBsb3dlciB0byBBaXI6CisgICAgICAgICAgICBNb3ZlICViYXNlLCAlbmV3QWRk
cmVzcworICAgICAgICAgICAgTW92ZSAldmFsdWUsICglbmV3QWRkcmVzcywgcG9zdGZpeChvZmZz
ZXQpKQorCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKKyAgICAgICAgIyMgVGVzdCBmb3IgUHJlL1Bvc3QtSW5jcmVtZW50IEFkZHJlc3MgTW9k
ZSAjIworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCisKKyAgICAgICAgQjMgSVI6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBJbnQgIEAwID0gQXJndW1lbnRS
ZWcoJXgwKQorICAgICAgICBJbnQgIEAxID0gQ29uc3Q2NCg4KQorICAgICAgICBJbnQgIEAyID0g
QWRkKGJAMCwgJDgoQDEpKQorICAgICAgICBJbnQgIEAzID0gQ29uc3Q2NCg0KQorICAgICAgICBW
b2lkIEA0ID0gU3RvcmUoJDQoQDMpLCBAMiwgQ29udHJvbERlcGVuZGVudHxXcml0ZXM6VG9wKQor
ICAgICAgICBWb2lkIEA1ID0gUmV0dXJuKEAyLCBUZXJtaW5hbCkKKyAgICAgICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAg
Vy9PIFByZS1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgTW92ZSAleDAs
ICV4MSwgICAgICBAMAorICAgICAgICBBZGQgICAkOCwgJXgxLCAleDAsIEAyCisgICAgICAgIE1v
dmUgICQ0LCAleDIsICAgICAgQDMKKyAgICAgICAgTW92ZSAleDIsIDgoJXgxKSwgICBANAorICAg
ICAgICBSZXQgICV4MCwgICAgICAgICAgIEA1CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvIFByZS1JbmNy
ZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgTW92ZSAgICAgICAgICAgICAgICAk
NCwgICAgICAgICAgICV4MSwgQDMKKyAgICAgICAgTW92ZVdpdGhJbmNyZW1lbnQgICV4MSwgKCV4
MCxQcmUoJDgpKSwgQDQKKyAgICAgICAgUmV0ICAgICAgICAgICAgICAgICV4MCwgICAgICAgICAg
ICAgICAgQDUKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKworICAgICAgICBCMyBJUjoKKyAgICAgICAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEludCAg
QDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCAgQDEgPSBDb25zdDY0KDQpCisgICAg
ICAgIFZvaWQgQDIgPSBTdG9yZSgkNChiQDEpLCBAMCwgQ29udHJvbERlcGVuZGVudHxXcml0ZXM6
VG9wKQorICAgICAgICBJbnQgIEAzID0gQ29uc3Q2NCg4KQorICAgICAgICBJbnQgIEA0ID0gQWRk
KEAwLCAkOChAMykpCisgICAgICAgIFZvaWQgQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFsKQorICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgICAgICBXL08gUG9zdC1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAgICAgTW92ZSAgJDQsICAgJXgxLCAgICAgIEAxCisgICAgICAgIE1vdmUgJXgxLCAoJXgwKSwg
ICAgICBAMgorICAgICAgICBBZGQgICAkOCwgICAleDAsICV4MCwgQDQKKyAgICAgICAgUmV0ICAl
eDAsICAgICAgICAgICAgIEA1CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvIFBvc3QtSW5jcmVtZW50IEFk
ZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIE1vdmUgICAgICAgICAgICAgICAgJDQsICAgICAg
ICAgICAgJXgxLCBAMQorICAgICAgICBNb3ZlV2l0aEluY3JlbWVudCAgJXgxLCAoJXgwLFBvc3Qo
JDgpKSwgQDIKKyAgICAgICAgUmV0ICAgICAgICAgICAgICAgICV4MCwgICAgICAgICAgICAgICAg
IEA1CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgICAgICogYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50
cy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyk6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoK
KyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDMy
KToKKyAgICAgICAgKHRlc3RTdG9yZVByZUluZGV4NjQpOgorICAgICAgICAodGVzdFN0b3JlUG9z
dEluZGV4MzIpOgorICAgICAgICAodGVzdFN0b3JlUG9zdEluZGV4NjQpOgorICAgICAgICAoYWRk
U2hyVGVzdHMpOgorCiAyMDIxLTA3LTMwICBZaWppYSBIdWFuZyAgPHlpamlhX2h1YW5nQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgUHJlL1Bvc3QtSW5kZXhlZCBBZGRyZXNzIE1vZGUgdG8gQWly
IGZvciBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25p
Y2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCmluZGV4IDgyYzlhZjFkOWI4OWFkNTdm
Nzc3MzY5YzllMTdkZWU2NzZiOGIyNWUuLmM1NzcwOWY2Yjg2YTNkYzdlNmFmOGZiODU2MzViMzAz
N2FkMmUzODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNh
bGl6ZVByZVBvc3RJbmNyZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKQEAgLTU4LDI2ICs1OCwzMSBAQCBi
b29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICBE
b21pbmF0b3JzJiBkb21pbmF0b3JzID0gcHJvYy5kb21pbmF0b3JzKCk7CiAgICAgQmFja3dhcmRz
RG9taW5hdG9ycyYgYmFja3dhcmRzRG9taW5hdG9ycyA9IHByb2MuYmFja3dhcmRzRG9taW5hdG9y
cygpOwogCisgICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9M
b2FkOworICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHByZUluZGV4TG9hZENhbmRp
ZGF0ZXM7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4TG9hZENh
bmRpZGF0ZXM7CisKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJh
c2VUb1N0b3JlOworICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHByZUluZGV4U3Rv
cmVDYW5kaWRhdGVzOworICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRl
eFN0b3JlQ2FuZGlkYXRlczsKKwogICAgIEhhc2hNYXA8VmFsdWVLZXksIFZlY3RvcjxWYWx1ZSo+
PiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVl
Kj4gcHJlSW5kZXhDYW5kaWRhdGVzOwotICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5
VmFsdWUqPj4gYmFzZVRvTWVtb3JpZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVl
Kj4gcG9zdEluZGV4Q2FuZGlkYXRlczsKICAgICBIYXNoTWFwPFZhbHVlKiwgdW5zaWduZWQ+IHZh
bHVlVG9JbmRleDsKICAgICBJbmRleFNldDxWYWx1ZSo+IGlnbm9yZWRWYWx1ZXM7CiAKLSAgICAv
LyBQcmUtSW5kZXggUGF0dGVybjoKLSAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpCi0gICAgLy8gICAgIC4uLgotICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNl
dCkKLSAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46Ci0gICAgLy8gICAgIG1lbW9yeSA9IExvYWQo
YmFzZSwgMCkKLSAgICAvLyAgICAgLi4uCi0gICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KQogICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4ID0gWyZdIChWYWx1ZSogdmFsdWUpIHsK
ICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKICAgICAgICAgY2FzZSBMb2FkOiB7
CiAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVl
PigpOwogCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgIC8v
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC8vICAgICAuLi4K
KyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIG9mZnNldCkKKyAgICAgICAg
ICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBM
b2FkKGJhc2UsIDApCisgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAgICAgICAvLyAgICAg
YWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCiAgICAgICAgICAgICBhdXRvIHRyeVByZVBvc3RJ
bmRleE1lbW9yeSA9IFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+dHlwZSgp
ICE9IEludDMyICYmIG1lbW9yeS0+dHlwZSgpICE9IEludDY0KQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CkBAIC04OCw5ICs5Myw0MCBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNy
ZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlT2Zm
c2V0VG9BZGRyZXNzZXMuY29udGFpbnMoYmFzZU9mZnNldGtleSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGFkZHJlc3Mg
OiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuZ2V0KGJhc2VPZmZzZXRrZXkpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcHJlSW5kZXhDYW5kaWRhdGVzLmFkZChtZW1vcnksIGFkZHJlc3MpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcy5hZGQobWVtb3J5LCBh
ZGRyZXNzKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFz
ZVRvTWVtb3JpZXMuYWRkKG1lbW9yeS0+Y2hpbGQoMCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkp
Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgYmFz
ZVRvTG9hZC5hZGQobWVtb3J5LT5sYXN0Q2hpbGQoKSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOworICAgICAgICAgICAgICAgIHZhbHVlVG9J
bmRleC5hZGQodmFsdWUsIGluZGV4KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHRy
eVByZVBvc3RJbmRleE1lbW9yeSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIFN0b3JlOiB7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0g
dmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggUGF0
dGVybjoKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAg
ICAgICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2
YWx1ZSwgYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJuOgor
ICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKQorICAgICAg
ICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KQorICAgICAgICAgICAgYXV0byB0cnlQcmVQb3N0SW5kZXhNZW1vcnkgPSBbJl0gKCkg
eworICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPmNoaWxkKDApLT50eXBlKCkgIT0gSW50MzIg
JiYgbWVtb3J5LT5jaGlsZCgwKS0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzVmFsaWRQcmVJbmRleEZvcm0obWVtb3J5LT5vZmZz
ZXQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtleShtZW1vcnktPmNoaWxkKDApLCBz
dGF0aWNfY2FzdDxpbnQ2NF90PihtZW1vcnktPm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghYmFzZU9mZnNldFRvQWRkcmVzc2VzLmNvbnRhaW5zKGJhc2VPZmZzZXRrZXkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBmb3Ig
KFZhbHVlKiBhZGRyZXNzIDogYmFzZU9mZnNldFRvQWRkcmVzc2VzLmdldChiYXNlT2Zmc2V0a2V5
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZUluZGV4U3RvcmVDYW5kaWRhdGVzLmFkZCht
ZW1vcnksIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICBiYXNlVG9TdG9yZS5hZGQobWVtb3J5LT5jaGlsZCgxKSwgVmVjdG9yPE1lbW9yeVZhbHVl
Kj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkpOwogICAgICAgICAgICAgICAgIHZh
bHVlVG9JbmRleC5hZGQodmFsdWUsIGluZGV4KTsKICAgICAgICAgICAgIH07CiAKQEAgLTExMywx
MCArMTQ5LDE0IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJl
JiBwcm9jKQogICAgICAgICAgICAgICAgIFZhbHVlS2V5IGJhc2VPZmZzZXRrZXkgPSBWYWx1ZUtl
eShsZWZ0LCBzdGF0aWNfY2FzdDxpbnQ2NF90PihzbWFsbE9mZnNldCkpOwogICAgICAgICAgICAg
ICAgIGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5hZGQoYmFzZU9mZnNldGtleSwgVmVjdG9yPFZhbHVl
Kj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdmFs
dWVUb0luZGV4LmFkZCh2YWx1ZSwgaW5kZXgpOwotICAgICAgICAgICAgICAgIGlmICghYmFzZVRv
TWVtb3JpZXMuY29udGFpbnMobGVmdCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9NZW1vcmllcy5n
ZXQobGVmdCkpCi0gICAgICAgICAgICAgICAgICAgIHBvc3RJbmRleENhbmRpZGF0ZXMuYWRkKG1l
bW9yeSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChiYXNlVG9Mb2FkLmNvbnRhaW5zKGxl
ZnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJh
c2VUb0xvYWQuZ2V0KGxlZnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4TG9h
ZENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoYmFzZVRvU3RvcmUuY29udGFpbnMobGVmdCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvU3RvcmUuZ2V0KGxlZnQp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzLmFkZCht
ZW1vcnksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogCiAgICAg
ICAgICAgICB0cnlQb3RlbnRpYWxQb3N0SW5kZXhBZGRyZXNzKCk7CkBAIC0xNDEsMTQgKzE4MSwx
NCBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykK
ICAgICAgICAgICAgIHx8IChkb21pbmF0b3JzLmRvbWluYXRlcyh2Mi0+b3duZXIsIHYxLT5vd25l
cikgJiYgYmFja3dhcmRzRG9taW5hdG9ycy5kb21pbmF0ZXModjEtPm93bmVyLCB2Mi0+b3duZXIp
KTsKICAgICB9OwogCi0gICAgYXV0byBkZXRlY3QgPSBbJl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUq
LCBWYWx1ZSo+IGNhbmRpZGF0ZXMpIHsKKyAgICBhdXRvIGRldGVjdEluY3JlbWVudExvYWQgPSBb
Jl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IGNhbmRpZGF0ZXMpIHsKICAgICAgICAg
Zm9yIChhdXRvIGl0ciA9IGNhbmRpZGF0ZXMuYmVnaW4oKTsgaXRyICE9IGNhbmRpZGF0ZXMuZW5k
KCk7ICsraXRyKSB7CiAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gaXRyLT5rZXk7
CiAgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IGl0ci0+dmFsdWU7CiAgICAgICAgICAgICBp
ZiAoaWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFp
bnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzID09IHBy
ZUluZGV4Q2FuZGlkYXRlcykgeworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMgPT0gcHJlSW5k
ZXhMb2FkQ2FuZGlkYXRlcykgewogICAgICAgICAgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFz
ZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9h
ZChiYXNlLCBvZmZzZXQpCiAgICAgICAgICAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC4uLgpAQCAtMTY0LDYgKzIwNCw4IEBAIGJvb2wgY2Fub25pY2FsaXplUHJl
UG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgICAgIC8vIC4uLiAg
ICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAuLi4KICAgICAgICAgICAgICAgICAvLyBvZmZz
ZXQgPSBDb25zdGFudCAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gSWRlbnRpdHkobmV3T2Zmc2V0
KQogICAgICAgICAgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBh
ZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVzcykKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRy
b2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcy0+Y2hpbGQoMSkpKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBtZW1vcnlJbmRleCA9IHZh
bHVlVG9JbmRleC5nZXQobWVtb3J5KTsKICAgICAgICAgICAgICAgICBWYWx1ZSogbmV3T2Zmc2V0
ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KG1lbW9yeUluZGV4LCBtZW1vcnkt
Pm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnQoKSk7CiAgICAgICAgICAgICAgICAg
VmFsdWUqIG5ld0FkZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtZW1vcnlJbmRl
eCwgQWRkLCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgwKSwgbmV3T2Zmc2V0KTsK
QEAgLTE3Nyw4ICsyMTksNDMgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQ
cm9jZWR1cmUmIHByb2MpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgZGV0ZWN0KHByZUluZGV4
Q2FuZGlkYXRlcyk7Ci0gICAgZGV0ZWN0KHBvc3RJbmRleENhbmRpZGF0ZXMpOworICAgIGRldGVj
dEluY3JlbWVudExvYWQocHJlSW5kZXhMb2FkQ2FuZGlkYXRlcyk7CisgICAgZGV0ZWN0SW5jcmVt
ZW50TG9hZChwb3N0SW5kZXhMb2FkQ2FuZGlkYXRlcyk7CisKKyAgICBhdXRvIGRldGVjdEluY3Jl
bWVudFN0b3JlID0gWyZdIChIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBjYW5kaWRhdGVz
KSB7CisgICAgICAgIGZvciAoYXV0byBpdHIgPSBjYW5kaWRhdGVzLmJlZ2luKCk7IGl0ciAhPSBj
YW5kaWRhdGVzLmVuZCgpOyArK2l0cikgeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9y
eSA9IGl0ci0+a2V5OworICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBpdHItPnZhbHVlOwor
ICAgICAgICAgICAgaWYgKGlnbm9yZWRWYWx1ZXMuY29udGFpbnMobWVtb3J5KSB8fCBpZ25vcmVk
VmFsdWVzLmNvbnRhaW5zKGFkZHJlc3MpIHx8ICFjb250cm9sRXF1aXZhbGVudChtZW1vcnksIGFk
ZHJlc3MpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoY2Fu
ZGlkYXRlcyA9PSBwcmVJbmRleFN0b3JlQ2FuZGlkYXRlcykgeworICAgICAgICAgICAgICAgIC8v
IGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAtLT4gIC4uLgorICAgICAgICAgICAgICAgIC8vIG1lbW9yeSA9IFN0b3Jl
KHZhbHVlLCBiYXNlLCBvZmZzZXQpICAgICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBhZGRyZXNz
LCBvZmZzZXQpCisgICAgICAgICAgICAgICAgbWVtb3J5LT5jaGlsZCgxKSA9IGFkZHJlc3M7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdPZmZzZXQgPSBDb25zdGFudAorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBZGRyZXNzID0gQWRkKGJhc2Us
IG5ld09mZnNldCkKKyAgICAgICAgICAgICAgICAvLyBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFz
ZSwgMCkgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIG5ld0FkZHJlc3MsIDApCisgICAgICAgICAg
ICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gIC4uLgorICAgICAgICAg
ICAgICAgIC8vIG9mZnNldCA9IENvbnN0YW50ICAgICAgICAgICAgICAgICBvZmZzZXQgPSBJZGVu
dGl0eShuZXdPZmZzZXQpCisgICAgICAgICAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBv
ZmZzZXQpICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQorICAgICAgICAgICAg
ICAgIGlmICghY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzLT5jaGlsZCgxKSkpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1l
bW9yeUluZGV4ID0gdmFsdWVUb0luZGV4LmdldChtZW1vcnkpOworICAgICAgICAgICAgICAgIFZh
bHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4obWVtb3J5
SW5kZXgsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludCgpKTsKKyAg
ICAgICAgICAgICAgICBWYWx1ZSogbmV3QWRkcmVzcyA9IGluc2VydGlvblNldC5pbnNlcnQ8VmFs
dWU+KG1lbW9yeUluZGV4LCBBZGQsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDAp
LCBuZXdPZmZzZXQpOworICAgICAgICAgICAgICAgIG1lbW9yeS0+Y2hpbGQoMSkgPSBuZXdBZGRy
ZXNzOworICAgICAgICAgICAgICAgIGFkZHJlc3MtPmNoaWxkKDEpLT5yZXBsYWNlV2l0aElkZW50
aXR5KG5ld09mZnNldCk7CisgICAgICAgICAgICAgICAgYWRkcmVzcy0+cmVwbGFjZVdpdGhJZGVu
dGl0eShuZXdBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSht
ZW1vcnktPm93bmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBk
ZXRlY3RJbmNyZW1lbnRTdG9yZShwcmVJbmRleFN0b3JlQ2FuZGlkYXRlcyk7CisgICAgZGV0ZWN0
SW5jcmVtZW50U3RvcmUocG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBl
YmIwMzUyY2IzMDgwM2RiYzFmZTgxOGUzOTkwYmEzNzQ1NzA2NjM3Li45Y2Y4MmQ4OTkxMmU4MzFm
MGZjNzI2ZDM5YmU5ZjdiZDhkNjc1ZjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmNwcApAQCAtMjU2NCw4ICsyNTY0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IC8vICAgICBhZGRyZXNzID0gYWRkKGJhc2UsIG9mZnNldCkKICAgICAgICAgICAgIC8vICAgICBt
ZW1vcnkgPSBsb2FkKGJhc2UsIG9mZnNldCkKICAgICAgICAgICAgIC8vIFBvc3QtSW5kZXggQ2Fu
b25pY2FsIEZvcm06Ci0gICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gbG9hZChiYXNlLCAwKQog
ICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAg
ICAgLy8gICAgIG1lbW9yeSA9IGxvYWQoYmFzZSwgMCkKICAgICAgICAgICAgIGF1dG8gdHJ5QXBw
ZW5kSW5jcmVtZW50QWRkcmVzcyA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICBB
aXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBlKE1vdmVXaXRoSW5jcmVtZW50MzIs
IE1vdmVXaXRoSW5jcmVtZW50NjQsIG1lbW9yeS0+dHlwZSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpQcmVJbmRleCwgQXJnOjpUbXApIHx8ICFtX2lu
ZGV4KQpAQCAtMzQ0Myw2ICszNDQzLDQ0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvLyBQcmUtSW5kZXggQ2Fub25pY2FsIEZvcm06
CisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBPZmZzZXQpCisgICAgICAg
ICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGFkZHJlc3MsIE9mZnNldCkKKyAgICAg
ICAgICAgIC8vIFBvc3QtSW5kZXggQ2Fub25pY2FsIEZvcm06CisgICAgICAgICAgICAvLyAgICAg
YWRkcmVzcyA9IEFkZChiYXNlLCBPZmZzZXQpCisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0g
U3RvcmUodmFsdWUsIGFkZHJlc3MsIDApCisgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZEluY3Jl
bWVudEFkZHJlc3MgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgTWVtb3J5VmFs
dWUqIG1lbW9yeSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICAgICAgICAg
IEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNyZW1lbnQz
MiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT5jaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpQcmVJbmRleCwgQXJnOjpU
bXApIHx8ICFtX2luZGV4KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtZW1vcnktPmxhc3RDaGlsZCgpOworICAgICAg
ICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSAhPSBBZGQgfHwgYWRkcmVzcy0+dHlwZSgp
ICE9IEludDY0IHx8ICFhZGRyZXNzLT5jaGlsZCgxKS0+aGFzSW50UHRyKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQg
PSBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgICAgICBWYWx1ZTo6
T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBlPihv
ZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwgIUFy
Zzo6aXNWYWxpZFBvc3RJbmRleEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBBcmcgaW5jcmVtZW50QXJnID0gQXJn
KCk7CisgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ID09IG1lbW9yeS0+b2Zmc2V0KCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbmNyZW1lbnRBcmcgPSBBcmc6OnByZUluZGV4KHRtcChhZGRyZXNzKSwg
c21hbGxPZmZzZXQpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICBpbmNyZW1lbnRBcmcgPSBBcmc6OnBvc3RJbmRleCh0bXAoYWRkcmVzcyksIHNtYWxsT2Zmc2V0
KTsKKworICAgICAgICAgICAgICAgIGlmIChpbmNyZW1lbnRBcmcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShhZGRyZXNzLT50eXBlKCkpLCB0bXAoYWRk
cmVzcy0+Y2hpbGQoMCkpLCB0bXAoYWRkcmVzcykpOworICAgICAgICAgICAgICAgICAgICBhcHBl
bmQob3Bjb2RlLCB0bXAobWVtb3J5LT5jaGlsZCgwKSksIGluY3JlbWVudEFyZyk7CisgICAgICAg
ICAgICAgICAgICAgIG1fbG9ja2VkLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRJbmNyZW1l
bnRBZGRyZXNzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgICAgICBhcHBl
bmRTdG9yZShtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IDcyMWViM2FkZDYyNzQ4ZTJm
YjAyZGRmNDI1NTdjYzU5ZDVkODgwZWIuLjM2MjgwNzFmOTkyMDBhODkwNjlhODQ4ZDFjY2Y0MTgz
YjE2MGIxOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTExNDUsNCArMTE0NSw5
IEBAIHZvaWQgdGVzdExvYWRQcmVJbmRleDY0KCk7CiB2b2lkIHRlc3RMb2FkUG9zdEluZGV4MzIo
KTsKIHZvaWQgdGVzdExvYWRQb3N0SW5kZXg2NCgpOwogCit2b2lkIHRlc3RTdG9yZVByZUluZGV4
MzIoKTsKK3ZvaWQgdGVzdFN0b3JlUHJlSW5kZXg2NCgpOwordm9pZCB0ZXN0U3RvcmVQb3N0SW5k
ZXgzMigpOwordm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpOworCiAjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IGI4OWIwMTlm
ZDhiZjVmMDcxMmY0NjY4NjUwZjYxY2RmODFkYTRjODMuLjU1YzRhMGE5ZWMxODFkY2E2NjI2YjU0
NzRmOTc2MzM0MWQzNjc0YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjNfMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApA
QCAtMzIxLDYgKzMyMSwxMDcgQEAgdm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCkKICAgICBDSEVD
S19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSks
IHRlc3QoKSk7CiB9CiAKK3ZvaWQgdGVzdFN0b3JlUHJlSW5kZXgzMigpCit7CisgICAgaWYgKE9w
dGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBp
bnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludDMyX3QqIHB0ciA9ICZudW1zWzFd
OworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKworICAgIFZhbHVlKiBhZGRyZXNzID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZh
bHVlKiBjb25zdDQgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgNCk7CisgICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVzcywgY29uc3Q0KTsKKyAgICByb290LT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpLCBwcmVJbmNyZW1lbnQpOworICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwcmVJbmNyZW1l
bnQpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJN
NjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICIjNF0hIik7CisgICAg
aW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0
cl90PihwdHIpKTsKKyAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHJlcyk7CisgICAg
Q0hFQ0tfRVEobnVtc1syXSwgKnB0cik7Cit9CisKK3ZvaWQgdGVzdFN0b3JlUHJlSW5kZXg2NCgp
Cit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludDY0X3Qq
IHB0ciA9ICZudW1zWzFdOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayog
cm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiBhZGRyZXNzID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgIFZhbHVlKiBjb25zdDggPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgOCk7CisgICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVzcywgY29uc3Q4KTsKKyAg
ICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgcm9v
dC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpLCBwcmVJbmNyZW1l
bnQpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCBwcmVJbmNyZW1lbnQpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUs
ICIjOF0hIik7CisgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgYml0
d2lzZV9jYXN0PGludHB0cl90PihwdHIpKTsKKyAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRf
dCo+KHJlcyk7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgKnB0cik7Cit9CisKK3ZvaWQgdGVzdFN0
b3JlUG9zdEluZGV4MzIoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMg
fTsKKyAgICBpbnQzMl90KiBwdHIgPSAmbnVtc1sxXTsKKworICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYWRk
cmVzcyA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDQpLCBhZGRyZXNzKTsKKyAgICBWYWx1ZSogb2Zmc2V0ID0gcm9vdC0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpOworICAgIFZhbHVlKiBwcmVJ
bmNyZW1lbnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFk
ZHJlc3MsIG9mZnNldCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVj
dGlvbigqY29kZSwgIl0sICM0Iik7CisgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90
PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKTsKKyAgICBwdHIgPSBiaXR3aXNl
X2Nhc3Q8aW50MzJfdCo+KHJlcyk7CisgICAgQ0hFQ0tfRVEobnVtc1sxXSwgNCk7CisgICAgQ0hF
Q0tfRVEobnVtc1syXSwgKnB0cik7Cit9CisKK3ZvaWQgdGVzdFN0b3JlUG9zdEluZGV4NjQoKQor
eworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnQ2NF90KiBw
dHIgPSAmbnVtc1sxXTsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYWRkcmVzcyA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3JlLCBPcmln
aW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpLCBh
ZGRyZXNzKTsKKyAgICBWYWx1ZSogb2Zmc2V0ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIDgpOworICAgIFZhbHVlKiBwcmVJbmNyZW1lbnQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFkZHJlc3MsIG9mZnNldCk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBy
ZUluY3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBp
ZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM4
Iik7CisgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9j
YXN0PGludHB0cl90PihwdHIpKTsKKyAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHJl
cyk7CisgICAgQ0hFQ0tfRVEobnVtc1sxXSwgNCk7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgKnB0
cik7Cit9CiAKIHZvaWQgdGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIoKQogewpAQCAt
Mzk5Niw2ICs0MDk3LDExIEBAIHZvaWQgYWRkU2hyVGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBE
ZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0TG9h
ZFByZUluZGV4NjQoKSk7CiAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4MzIoKSk7CiAgICAgUlVO
KHRlc3RMb2FkUG9zdEluZGV4NjQoKSk7CisKKyAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXgzMigp
KTsKKyAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdFN0b3JlUG9z
dEluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVBvc3RJbmRleDY0KCkpOwogfQogCiAjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434818</attachid>
            <date>2021-08-02 22:49:17 -0700</date>
            <delta_ts>2021-08-02 23:41:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228538-20210803004916.patch</filename>
            <type>text/plain</type>
            <size>19038</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MDBlNWQ4OWJjMjRjMDk0NmU4Njc0MWRkZTU4YzMxNjJlNDgyOWNiLi45NzM2MmQ3ZjI0MTQxZWMz
YjlkMmYwNGI4MzRmZTI4NDY1NWE5MzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAyMS0wOC0wMiAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBm
b3IgQVJNNjQgKFN0b3JlIEluc3RydWN0aW9uKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4NTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBiMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKToK
KyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgor
ICAgICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RTdG9yZVByZUluZGV4MzIp
OgorICAgICAgICAodGVzdFN0b3JlUHJlSW5kZXg2NCk6CisgICAgICAgICh0ZXN0U3RvcmVQb3N0
SW5kZXgzMik6CisgICAgICAgICh0ZXN0U3RvcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChhZGRT
aHJUZXN0cyk6CisKIDIwMjEtMDgtMDIgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9uIHNlbGVjdG9y
IHRvIHV0aWxpemUgVU1VTEwgc3VwcG9ydGVkIGJ5IEFSTTY0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5j
cHAKaW5kZXggYjM3NDMxZmFhYTdkMGM3MTRjMzQxZjBmMTRhYjhmYjAxMjExZTI0MC4uNTBjZDJj
MjA4M2YxMDYxM2UyM2NhN2JkZGZlMDgwMGIyYzA2MzRmNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcApAQCAtNTcsMjYgKzU3LDMxIEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMoUHJvY2VkdXJlJiBwcm9jKQogICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnMgPSBwcm9jLmRv
bWluYXRvcnMoKTsKICAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNEb21pbmF0b3Jz
ID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7CiAKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmVj
dG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb0xvYWQ7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSos
IFZhbHVlKj4gcHJlSW5kZXhMb2FkQ2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVl
KiwgVmFsdWUqPiBwb3N0SW5kZXhMb2FkQ2FuZGlkYXRlczsKKworICAgIEhhc2hNYXA8VmFsdWUq
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvU3RvcmU7CisgICAgSGFzaE1hcDxNZW1vcnlW
YWx1ZSosIFZhbHVlKj4gcHJlSW5kZXhTdG9yZUNhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxNZW1v
cnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzOworCiAgICAgSGFzaE1h
cDxWYWx1ZUtleSwgVmVjdG9yPFZhbHVlKj4+IGJhc2VPZmZzZXRUb0FkZHJlc3NlczsKLSAgICBI
YXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRleENhbmRpZGF0ZXM7Ci0gICAgSGFz
aE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9NZW1vcmllczsKLSAgICBI
YXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhDYW5kaWRhdGVzOwogICAgIEhh
c2hNYXA8VmFsdWUqLCB1bnNpZ25lZD4gdmFsdWVUb0luZGV4OwogICAgIEluZGV4U2V0PFZhbHVl
Kj4gaWdub3JlZFZhbHVlczsKIAotICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgotICAgIC8vICAg
ICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAvLyAgICAgLi4uCi0gICAgLy8gICAg
IG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQotICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoK
LSAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQotICAgIC8vICAgICAuLi4KLSAgICAv
LyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCiAgICAgYXV0byB0cnlQcmVQb3N0SW5k
ZXggPSBbJl0gKFZhbHVlKiB2YWx1ZSkgewogICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUo
KSkgewogICAgICAgICBjYXNlIExvYWQ6IHsKICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1v
cnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CiAKKyAgICAgICAgICAgIC8vIFByZS1JbmRl
eCBQYXR0ZXJuOgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KQorICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExv
YWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJuOgorICAg
ICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAgICAgICAgICAgIC8vICAg
ICAuLi4KKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKICAg
ICAgICAgICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4TWVtb3J5ID0gWyZdICgpIHsKICAgICAgICAg
ICAgICAgICBpZiAobWVtb3J5LT50eXBlKCkgIT0gSW50MzIgJiYgbWVtb3J5LT50eXBlKCkgIT0g
SW50NjQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTg3LDkgKzkyLDQyIEBAIGJv
b2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zm
c2V0a2V5KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICAgICAgZm9yIChWYWx1ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFz
ZU9mZnNldGtleSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleENhbmRpZGF0ZXMu
YWRkKG1lbW9yeSwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleExv
YWRDYW5kaWRhdGVzLmFkZChtZW1vcnksIGFkZHJlc3MpOwogICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICBiYXNlVG9NZW1vcmllcy5hZGQobWVtb3J5LT5jaGlsZCgw
KSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkp
OworICAgICAgICAgICAgICAgICAgICBiYXNlVG9Mb2FkLmFkZChtZW1vcnktPmxhc3RDaGlsZCgp
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7
CisgICAgICAgICAgICAgICAgdmFsdWVUb0luZGV4LmFkZCh2YWx1ZSwgaW5kZXgpOworICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgdHJ5UHJlUG9zdEluZGV4TWVtb3J5KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAg
ICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisKKyAg
ICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgorICAgICAgICAgICAgLy8gICAgIGFkZHJl
c3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAg
ICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCBvZmZzZXQpCisgICAgICAgICAg
ICAvLyBQb3N0LUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3Rv
cmUodmFsdWUsIGJhc2UsIDApCisgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAgICAgICAv
LyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICBhdXRvIHRyeVBy
ZVBvc3RJbmRleE1lbW9yeSA9IFsmXSAoKSB7CisgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+
Y2hpbGQoMCktPnR5cGUoKSAhPSBJbnQzMiAmJiBtZW1vcnktPmNoaWxkKDApLT50eXBlKCkgIT0g
SW50NjQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAo
bWVtb3J5LT5jaGlsZCgwKS0+aGFzSW50KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIUFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShtZW1vcnktPm9mZnNldCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVL
ZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KG1lbW9yeS0+Y2hpbGQoMCksIHN0YXRpY19jYXN0
PGludDY0X3Q+KG1lbW9yeS0+b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFi
YXNlT2Zmc2V0VG9BZGRyZXNzZXMuY29udGFpbnMoYmFzZU9mZnNldGtleSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGFk
ZHJlc3MgOiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuZ2V0KGJhc2VPZmZzZXRrZXkpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcHJlSW5kZXhTdG9yZUNhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgYWRk
cmVzcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJhc2VU
b1N0b3JlLmFkZChtZW1vcnktPmNoaWxkKDEpLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CiAgICAgICAgICAgICAgICAgdmFsdWVUb0luZGV4
LmFkZCh2YWx1ZSwgaW5kZXgpOwogICAgICAgICAgICAgfTsKIApAQCAtMTEyLDEwICsxNTAsMTQg
QEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAg
ICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KGxlZnQsIHN0
YXRpY19jYXN0PGludDY0X3Q+KHNtYWxsT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgYmFzZU9m
ZnNldFRvQWRkcmVzc2VzLmFkZChiYXNlT2Zmc2V0a2V5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWx1ZVRvSW5kZXgu
YWRkKHZhbHVlLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFiYXNlVG9NZW1vcmllcy5j
b250YWlucyhsZWZ0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VUb01lbW9yaWVzLmdldChsZWZ0KSkK
LSAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgaWYgKGJhc2VUb0xvYWQuY29udGFpbnMobGVmdCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvTG9hZC5n
ZXQobGVmdCkpCisgICAgICAgICAgICAgICAgICAgICAgICBwb3N0SW5kZXhMb2FkQ2FuZGlkYXRl
cy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChiYXNlVG9TdG9yZS5jb250YWlucyhsZWZ0KSkgeworICAgICAgICAgICAgICAgICAgICBm
b3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9TdG9yZS5nZXQobGVmdCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFs
dWUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIHRy
eVBvdGVudGlhbFBvc3RJbmRleEFkZHJlc3MoKTsKQEAgLTEzOSwxNCArMTgxLDE0IEBAIGJvb2wg
Y2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAg
ICAgfHwgKGRvbWluYXRvcnMuZG9taW5hdGVzKHYyLT5vd25lciwgdjEtPm93bmVyKSAmJiBiYWNr
d2FyZHNEb21pbmF0b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikpOwogICAgIH07
CiAKLSAgICBhdXRvIGRldGVjdCA9IFsmXSAoSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4g
Y2FuZGlkYXRlcykgeworICAgIGF1dG8gZGV0ZWN0SW5jcmVtZW50TG9hZCA9IFsmXSAoSGFzaE1h
cDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gY2FuZGlkYXRlcykgewogICAgICAgICBmb3IgKGF1dG8g
aXRyID0gY2FuZGlkYXRlcy5iZWdpbigpOyBpdHIgIT0gY2FuZGlkYXRlcy5lbmQoKTsgKytpdHIp
IHsKICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBpdHItPmtleTsKICAgICAgICAg
ICAgIFZhbHVlKiBhZGRyZXNzID0gaXRyLT52YWx1ZTsKICAgICAgICAgICAgIGlmIChpZ25vcmVk
VmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNz
KSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMgPT0gcHJlSW5kZXhDYW5k
aWRhdGVzKSB7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlcyA9PSBwcmVJbmRleExvYWRDYW5k
aWRhdGVzKSB7CiAgICAgICAgICAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQp
ICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQogICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9m
ZnNldCkKICAgICAgICAgICAgICAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uCkBAIC0xNjIsOSArMjA0LDQ5IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3Jl
bWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgICAgIC8vIC4uLiAgICAgICAgICAg
ICAgICAgICAgICAgICAgLS0+ICAuLi4KICAgICAgICAgICAgICAgICAvLyBvZmZzZXQgPSBDb25z
dGFudCAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gSWRlbnRpdHkobmV3T2Zmc2V0KQogICAgICAg
ICAgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0g
SWRlbnRpdHkobmV3QWRkcmVzcykKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2xFcXVpdmFs
ZW50KG1lbW9yeSwgYWRkcmVzcy0+Y2hpbGQoMSkpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBtZW1vcnlJbmRleCA9IHZhbHVlVG9JbmRl
eC5nZXQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbmV3T2Zmc2V0ID0gaW5zZXJ0
aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KG1lbW9yeUluZGV4LCBtZW1vcnktPm9yaWdpbigp
LCBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnQoKSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG5l
d0FkZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtZW1vcnlJbmRleCwgQWRkLCBt
ZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgwKSwgbmV3T2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICBhZGRyZXNzLT5jaGlsZCgxKS0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdPZmZzZXQp
OworICAgICAgICAgICAgICAgIGFkZHJlc3MtPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3QWRkcmVz
cyk7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKGFkZHJlc3Mp
OworICAgICAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBkZXRlY3RJbmNyZW1lbnRMb2FkKHByZUluZGV4TG9hZENhbmRpZGF0ZXMpOwor
ICAgIGRldGVjdEluY3JlbWVudExvYWQocG9zdEluZGV4TG9hZENhbmRpZGF0ZXMpOworCisgICAg
YXV0byBkZXRlY3RJbmNyZW1lbnRTdG9yZSA9IFsmXSAoSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZh
bHVlKj4gY2FuZGlkYXRlcykgeworICAgICAgICBmb3IgKGF1dG8gaXRyID0gY2FuZGlkYXRlcy5i
ZWdpbigpOyBpdHIgIT0gY2FuZGlkYXRlcy5lbmQoKTsgKytpdHIpIHsKKyAgICAgICAgICAgIE1l
bW9yeVZhbHVlKiBtZW1vcnkgPSBpdHItPmtleTsKKyAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNz
ID0gaXRyLT52YWx1ZTsKKyAgICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1l
bW9yeSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2
YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgaWYgKGNhbmRpZGF0ZXMgPT0gcHJlSW5kZXhTdG9yZUNhbmRpZGF0ZXMpIHsKKyAg
ICAgICAgICAgICAgICAvLyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAg
ICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAvLyAuLi4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAuLi4KKyAgICAgICAgICAgICAgICAv
LyBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgb2Zmc2V0KSAgICAgICBtZW1vcnkgPSBTdG9y
ZSh2YWx1ZSwgYWRkcmVzcywgb2Zmc2V0KQorICAgICAgICAgICAgICAgIG1lbW9yeS0+Y2hpbGQo
MSkgPSBhZGRyZXNzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3T2Zmc2V0ID0gQ29uc3RhbnQKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRk
cmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCisgICAgICAgICAgICAgICAgLy8gbWVtb3J5ID0g
U3RvcmUodmFsdWUsIGJhc2UsIDApICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBuZXdBZGRyZXNz
LCAwKQorICAgICAgICAgICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+
ICAuLi4KKyAgICAgICAgICAgICAgICAvLyBvZmZzZXQgPSBDb25zdGFudCAgICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gSWRlbnRpdHkobmV3T2Zmc2V0KQorICAgICAgICAgICAgICAgIC8vIGFkZHJl
c3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVz
cykKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVz
cy0+Y2hpbGQoMSkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBtZW1vcnlJbmRleCA9IHZhbHVlVG9JbmRleC5nZXQobWVtb3J5KTsKICAg
ICAgICAgICAgICAgICBWYWx1ZSogbmV3T2Zmc2V0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25z
dDY0VmFsdWU+KG1lbW9yeUluZGV4LCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgx
KS0+YXNJbnQoKSk7CiAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld0FkZHJlc3MgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0PFZhbHVlPihtZW1vcnlJbmRleCwgQWRkLCBtZW1vcnktPm9yaWdpbigpLCBh
ZGRyZXNzLT5jaGlsZCgwKSwgbmV3T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBtZW1vcnktPmNo
aWxkKDEpID0gbmV3QWRkcmVzczsKICAgICAgICAgICAgICAgICBhZGRyZXNzLT5jaGlsZCgxKS0+
cmVwbGFjZVdpdGhJZGVudGl0eShuZXdPZmZzZXQpOwogICAgICAgICAgICAgICAgIGFkZHJlc3Mt
PnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3QWRkcmVzcyk7CiAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7CkBAIC0xNzUsOCArMjU3LDggQEAgYm9vbCBj
YW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgZGV0ZWN0KHByZUluZGV4Q2FuZGlkYXRlcyk7Ci0gICAgZGV0ZWN0KHBv
c3RJbmRleENhbmRpZGF0ZXMpOworICAgIGRldGVjdEluY3JlbWVudFN0b3JlKHByZUluZGV4U3Rv
cmVDYW5kaWRhdGVzKTsKKyAgICBkZXRlY3RJbmNyZW1lbnRTdG9yZShwb3N0SW5kZXhTdG9yZUNh
bmRpZGF0ZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDRhM2Y5MjZmMTA0NGM2NmEzYmE4NTU1ZjIxNWViMjhi
ZTkxN2MwOWIuLjc0ZmYwOTE2MmNkNmRiZDZiZTE4MzRiNzRjYTMyMDdmZjEyNDAwN2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0yNTgxLDggKzI1ODEs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFzZSwgb2Zm
c2V0KQogICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IGxvYWQoYmFzZSwgb2Zmc2V0KQogICAg
ICAgICAgICAgLy8gUG9zdC1JbmRleCBDYW5vbmljYWwgRm9ybToKLSAgICAgICAgICAgIC8vICAg
ICBtZW1vcnkgPSBsb2FkKGJhc2UsIDApCiAgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IGFk
ZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gbG9hZChiYXNlLCAw
KQogICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRJbmNyZW1lbnRBZGRyZXNzID0gWyZdICgpIC0+
IGJvb2wgewogICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZv
clR5cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50
eXBlKCkpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlBy
ZUluZGV4LCBBcmc6OlRtcCkgfHwgIW1faW5kZXgpCkBAIC0zNDMwLDYgKzM0MzAsNDQgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgICAgIC8v
IFByZS1JbmRleCBDYW5vbmljYWwgRm9ybToKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0g
QWRkKGJhc2UsIE9mZnNldCkKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1
ZSwgYWRkcmVzcywgT2Zmc2V0KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBDYW5vbmljYWwg
Rm9ybToKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIE9mZnNldCkKKyAg
ICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYWRkcmVzcywgMCkKKyAgICAg
ICAgICAgIGF1dG8gdHJ5QXBwZW5kSW5jcmVtZW50QWRkcmVzcyA9IFsmXSAoKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5
VmFsdWU+KCk7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2Rl
Rm9yVHlwZShNb3ZlV2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1vcnkt
PmNoaWxkKDApLT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bj
b2RlLCBBcmc6OlByZUluZGV4LCBBcmc6OlRtcCkgfHwgIW1faW5kZXgpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IG1l
bW9yeS0+bGFzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm9wY29kZSgp
ICE9IEFkZCB8fCBhZGRyZXNzLT50eXBlKCkgIT0gSW50NjQgfHwgIWFkZHJlc3MtPmNoaWxkKDEp
LT5oYXNJbnRQdHIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludFB0cigp
OworICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGlj
X2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKHNt
YWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShzbWFsbE9m
ZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAg
ICAgIEFyZyBpbmNyZW1lbnRBcmcgPSBBcmcoKTsKKyAgICAgICAgICAgICAgICBpZiAobWVtb3J5
LT5vZmZzZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgPT0gbWVt
b3J5LT5vZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFy
Zzo6cHJlSW5kZXgodG1wKGFkZHJlc3MpLCBzbWFsbE9mZnNldCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFyZzo6cG9zdEluZGV4
KHRtcChhZGRyZXNzKSwgc21hbGxPZmZzZXQpOworCisgICAgICAgICAgICAgICAgaWYgKGluY3Jl
bWVudEFyZykgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBl
KGFkZHJlc3MtPnR5cGUoKSksIHRtcChhZGRyZXNzLT5jaGlsZCgwKSksIHRtcChhZGRyZXNzKSk7
CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChtZW1vcnktPmNoaWxkKDAp
KSwgaW5jcmVtZW50QXJnKTsKKyAgICAgICAgICAgICAgICAgICAgbV9sb2NrZWQuYWRkKGFkZHJl
c3MpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgaWYgKHRyeUFwcGVuZEluY3JlbWVudEFkZHJlc3MoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZVRvU3RvcmUgPSBtX3ZhbHVlLT5jaGls
ZCgwKTsKICAgICAgICAgICAgIGlmIChjYW5CZUludGVybmFsKHZhbHVlVG9TdG9yZSkpIHsKICAg
ICAgICAgICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuaAppbmRleCA5YWE0MGQxMjFlZTRlY2YyNmU5NGY3ZTU5ZmIxNGY5MzViZWE5Y2IyLi5lMTcx
YWNmNTVlMzY3MGY4OTFmMTViYThmMjBjNmNkYzFjMTg2OTJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCkBAIC0xMTY4LDQgKzExNjgsOSBAQCB2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgp
Owogdm9pZCB0ZXN0TG9hZFBvc3RJbmRleDMyKCk7CiB2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQo
KTsKIAordm9pZCB0ZXN0U3RvcmVQcmVJbmRleDMyKCk7Cit2b2lkIHRlc3RTdG9yZVByZUluZGV4
NjQoKTsKK3ZvaWQgdGVzdFN0b3JlUG9zdEluZGV4MzIoKTsKK3ZvaWQgdGVzdFN0b3JlUG9zdElu
ZGV4NjQoKTsKKwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiM18zLmNwcAppbmRleCA1MDVmZDYzOTAzY2U4ZjIyNDJkZTYwMzYzMjg5MjkwY2E4ODE5
YTczLi5jYTVmOTMzM2M4Y2U5NGIzN2NjOTRlNTBiYTc1NDA5NTRmMWEyMjlhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTMyMSw2ICszMjEsMTE1IEBAIHZvaWQgdGVz
dExvYWRQb3N0SW5kZXg2NCgpCiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KCpjb2RlLCBi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOwogfQogCit2b2lkIHRlc3RTdG9y
ZVByZUluZGV4MzIoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwg
MikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsK
KyAgICBpbnQzMl90KiBwdHIgPSAmbnVtc1sxXTsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogdmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCks
IAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgIFZhbHVlKiBhZGRyZXNzID0gcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgIFZhbHVlKiBvZmZzZXQgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgNCk7CisgICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVzcywgb2Zmc2V0KTsK
KyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwg
dmFsdWUsIHByZUluY3JlbWVudCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJ
bnN0cnVjdGlvbigqY29kZSwgIiM0XSEiKTsKKyAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50
cHRyX3Q+KCpjb2RlLCA0LCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpOworICAgIHB0ciA9
IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRy
KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6
ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3Qg
bnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50NjRfdCogcHRyID0gJm51bXNbMV07CisKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworCisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhZGRy
ZXNzID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFZhbHVlKiBvZmZzZXQgPSByb290LT5hcHBlbmRO
ZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCk7CisgICAgVmFsdWUqIHByZUluY3Jl
bWVudCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVz
cywgb2Zmc2V0KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3Jl
LCBPcmlnaW4oKSwgdmFsdWUsIHByZUluY3JlbWVudCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIiM4XSEiKTsKKyAgICBpbnRwdHJfdCByZXMg
PSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0LCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikp
OworICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShu
dW1zWzJdLCAqcHRyKTsKK30KKwordm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXgzMigpCit7CisgICAg
aWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisK
KyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludDMyX3QqIHB0ciA9ICZu
dW1zWzFdOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiB2YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CisgICAgVmFsdWUqIGFkZHJlc3MgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgcm9vdC0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBTdG9yZSwgT3JpZ2luKCksIHZhbHVlLCBhZGRy
ZXNzKTsKKyAgICBWYWx1ZSogb2Zmc2V0ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDQpOworICAgIFZhbHVlKiBwcmVJbmNyZW1lbnQgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFkZHJlc3MsIG9mZnNldCk7CisgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHByZUlu
Y3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAo
aXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM0Iik7
CisgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgNCwgYml0d2lzZV9j
YXN0PGludHB0cl90PihwdHIpKTsKKyAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHJl
cyk7CisgICAgQ0hFQ0tfRVEobnVtc1sxXSwgNCk7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgKnB0
cik7Cit9CisKK3ZvaWQgdGVzdFN0b3JlUG9zdEluZGV4NjQoKQoreworICAgIGlmIChPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50NjRf
dCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnQ2NF90KiBwdHIgPSAmbnVtc1sxXTsKKwor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisKKyAgICBWYWx1ZSogdmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGFk
ZHJlc3MgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
Pihwcm9jLCBTdG9yZSwgT3JpZ2luKCksIHZhbHVlLCBhZGRyZXNzKTsKKyAgICBWYWx1ZSogb2Zm
c2V0ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgpOwor
ICAgIFZhbHVlKiBwcmVJbmNyZW1lbnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFk
ZCwgT3JpZ2luKCksIGFkZHJlc3MsIG9mZnNldCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBj
aGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM4Iik7CisgICAgaW50cHRyX3QgcmVzID0g
aW52b2tlPGludHB0cl90PigqY29kZSwgNCwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKTsK
KyAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHJlcyk7CisgICAgQ0hFQ0tfRVEobnVt
c1sxXSwgNCk7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgKnB0cik7Cit9CiAKIHZvaWQgdGVzdElu
c2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIoKQogewpAQCAtMzk5NCw2ICs0MTAzLDExIEBAIHZv
aWQgYWRkU2hyVGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7CiAgICAg
UlVOKHRlc3RMb2FkUG9zdEluZGV4MzIoKSk7CiAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4NjQo
KSk7CisKKyAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVzdFN0b3Jl
UHJlSW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdFN0b3JlUG9zdEluZGV4MzIoKSk7CisgICAgUlVO
KHRlc3RTdG9yZVBvc3RJbmRleDY0KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434820</attachid>
            <date>2021-08-02 23:41:16 -0700</date>
            <delta_ts>2021-08-06 00:33:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228538-20210803014114.patch</filename>
            <type>text/plain</type>
            <size>23199</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MDBlNWQ4OWJjMjRjMDk0NmU4Njc0MWRkZTU4YzMxNjJlNDgyOWNiLi5jZjM3MzFkOWE0ZDU5OTE1
MjM1ZDQ3NWZlMjNjM2VlMTU4YTI0YzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjYgQEAKKzIwMjEtMDgtMDIgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIg
Zm9yIEFSTTY0IChTdG9yZSBJbnN0cnVjdGlvbikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODUzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZSBwcmV2aW91cyBwYXRjaCBoYXMgaW50cm9kdWNlZCB0
aGUgcHJlL3Bvc3QtaW5kZXggYWRkcmVzcyBtb2RlIGZvciBMb2FkIGluc3RydWN0aW9uCisgICAg
ICAgICwgd2hpY2ggYmVuZWZpdHMgbG9vcCBwcm9ncmFtLiBIZXJlLCB0aGlzIHBhdGNoIGFkZHMg
dGhlIGNvcnJlc3BvbmRpbmcgbW9kZSBmb3IgU3RvcmUKKyAgICAgICAgaW5zdHJ1Y3Rpb24uIFN0
b3JlIFJlZ2lzdGVyIChpbW1lZGlhdGUpIHN0b3JlcyBhIHdvcmQgb3IgYSBkb3VibGV3b3JkIGZy
b20gYSByZWdpc3RlcgorICAgICAgICB0byBtZW1vcnkuIFRoZSBhZGRyZXNzIHRoYXQgaXMgdXNl
ZCBmb3IgdGhlIHN0b3JlIGlzIGNhbGN1bGF0ZWQgZnJvbSBhIGJhc2UgcmVnaXN0ZXIKKyAgICAg
ICAgYW5kIGFuIGltbWVkaWF0ZSBvZmZzZXQuCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyMgUHJlLUluZGV4IEFkZHJlc3MgTW9kZSBG
b3IgU3RvcmUgIyMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKKworICAgICAgICBTVFIgV3QsIFtYbiwgI2ltbV0hCisKKyAgICAgICAgSW4gQjMgUmVkdWN0
aW9uIFN0cmVuZ3RoLCBzaW5jZSB3ZSBoYXZlIHRoaXMgcmVkdWN0aW9uIHJ1bGU6CisgICAgICAg
ICAgICBUdXJucyB0aGlzOiBTdG9yZSh2YWx1ZSwgQWRkKGFkZHJlc3MsIG9mZnNldDEpLCBvZmZz
ZXQgPSBvZmZzZXQyKQorICAgICAgICAgICAgSW50byB0aGlzOiBTdG9yZSh2YWx1ZSwgYWRkcmVz
cywgb2Zmc2V0ID0gb2Zmc2V0MSArIG9mZnNldDIpCisKKyAgICAgICAgVGhlbiwgdGhlIGVxdWl2
YWxlbnQgcGF0dGVybiBpczoKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KQorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFz
ZSwgb2Zmc2V0KQorCisgICAgICAgIEZpcnN0LCB3ZSBjb252ZXJ0IGl0IHRvIHRoZSBjYW5vbmlj
YWwgZm9ybToKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAg
ICAgICAgLi4uCisgICAgICAgICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYWRkcmVzcywgb2Zm
c2V0KQorCisgICAgICAgIE5leHQsIGxvd2VyIHRvIEFpcjoKKyAgICAgICAgICAgIE1vdmUgJWJh
c2UsICVhZGRyZXNzCisgICAgICAgICAgICBNb3ZlICV2YWx1ZSwgKCVhZGRyZXNzLCBwcmVmaXgo
b2Zmc2V0KSkKKworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IworICAgICAgICAjIyBQb3N0LUluZGV4IEFkZHJlc3MgTW9kZSBGb3IgTG9hZCAjIworICAgICAg
ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIFNUUiBX
dCwgW1huXSwgI2ltbQorCisgICAgICAgIFRoZW4sIHRoZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6
CisgICAgICAgICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkKKyAgICAgICAgICAg
IC4uLgorICAgICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisKKyAgICAgICAg
Rmlyc3QsIHdlIGNvbnZlcnQgaXQgdG8gdGhlIGNhbm9uaWNhbCBmb3JtOgorICAgICAgICAgICAg
bmV3T2Zmc2V0ID0gQ29uc3RhbnQKKyAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KQorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIG5ld0FkZHJlc3MsIDAp
IC8vIG1vdmUgdGhlIG9mZnNldCBhbmQgYWRkcmVzcyB0byBqdXN0IGJlZm9yZSB0aGUgbWVtb3J5
CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIG9mZnNldCA9IElkZW50aXR5KG5ld09mZnNl
dCkKKyAgICAgICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQorCisgICAgICAg
IE5leHQsIGxvd2VyIHRvIEFpcjoKKyAgICAgICAgICAgIE1vdmUgJWJhc2UsICVuZXdBZGRyZXNz
CisgICAgICAgICAgICBNb3ZlICV2YWx1ZSwgKCVuZXdBZGRyZXNzLCBwb3N0Zml4KG9mZnNldCkp
CisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IworICAgICAgICAjIyBUZXN0IGZvciBQcmUvUG9zdC1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlICMj
CisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
KworICAgICAgICBCMyBJUjoKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEludDY0IGJAMCA9IEFyZ3VtZW50UmVn
KCV4MCkKKyAgICAgICAgSW50NjQgYkAxID0gQXJndW1lbnRSZWcoJXgxKQorICAgICAgICBJbnQ2
NCBiQDIgPSBDb25zdDY0KDgpCisgICAgICAgIEludDY0IGJAMyA9IEFkZChiQDAsICQ4KGJAMikp
CisgICAgICAgIFZvaWQgIGJANCA9IFN0b3JlKGJAMSwgYkAzLCBDb250cm9sRGVwZW5kZW50fFdy
aXRlczpUb3ApCisgICAgICAgIFZvaWQgIGJANSA9IFJldHVybihiQDMsIFRlcm1pbmFsKQorICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgICAgICBXL08gUHJlLUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
ICAgICBNb3ZlICAleDAsICV4MiwgICAgICBiQDAKKyAgICAgICAgQWRkNjQgICQ4LCAleDIsICV4
MCwgYkAzCisgICAgICAgIE1vdmUgICV4MSwgOCgleDIpLCAgIGJANAorICAgICAgICBSZXQ2NCAl
eDAsICAgICAgICAgICBiQDUKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVy8gUHJlLUluY3JlbWVudCBBZGRy
ZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBNb3ZlV2l0aEluY3JlbWVudDY0ICV4MSwgKCV4MCxQ
cmUoJDgpKSwgYkA0CisgICAgICAgIFJldDY0ICAgICAgICAgICAgICAgJXgwLCAgICAgICAgICAg
ICAgICBiQDUKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKworICAgICAgICBCMyBJUjoKKyAgICAgICAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEludDY0
IGJAMCA9IEFyZ3VtZW50UmVnKCV4MCkKKyAgICAgICAgSW50NjQgYkAxID0gQXJndW1lbnRSZWco
JXgxKQorICAgICAgICBWb2lkICBiQDIgPSBTdG9yZShiQDEsIGJAMCwgQ29udHJvbERlcGVuZGVu
dHxXcml0ZXM6VG9wKQorICAgICAgICBJbnQ2NCBiQDMgPSBDb25zdDY0KDgpCisgICAgICAgIElu
dDY0IGJANCA9IEFkZChiQDAsICQ4KGJAMykpCisgICAgICAgIFZvaWQgIGJANSA9IFJldHVybihi
QDQsIFRlcm1pbmFsKQorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBXL08gUG9zdC1JbmNyZW1lbnQgQWRkcmVz
cyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAgICAgTW92ZSAgJXgxLCAoJXgwKSwgICAgICBiQDIKKyAgICAg
ICAgQWRkNjQgICQ4LCAgICV4MCwgJXgwLCBiQDQKKyAgICAgICAgUmV0NjQgJXgwLCAgICAgICAg
ICAgICBiQDUKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVy8gUG9zdC1JbmNyZW1lbnQgQWRkcmVzcyBNb2Rl
OgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICAgICAgTW92ZVdpdGhJbmNyZW1lbnQ2NCAleDEsICgleDAsUG9zdCgkOCkp
LCBiQDIKKyAgICAgICAgUmV0NjQgICAgICAgICAgICAgICAleDAsICAgICAgICAgICAgICAgICBi
QDUKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKyAgICAgICAgKiBiMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKToK
KyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgor
ICAgICAgICAqIGIzL3Rlc3RiM18zLmNwcDoKKyAgICAgICAgKHRlc3RTdG9yZVByZUluZGV4MzIp
OgorICAgICAgICAodGVzdFN0b3JlUHJlSW5kZXg2NCk6CisgICAgICAgICh0ZXN0U3RvcmVQb3N0
SW5kZXgzMik6CisgICAgICAgICh0ZXN0U3RvcmVQb3N0SW5kZXg2NCk6CisgICAgICAgIChhZGRT
aHJUZXN0cyk6CisKIDIwMjEtMDgtMDIgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9uIHNlbGVjdG9y
IHRvIHV0aWxpemUgVU1VTEwgc3VwcG9ydGVkIGJ5IEFSTTY0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5j
cHAKaW5kZXggYjM3NDMxZmFhYTdkMGM3MTRjMzQxZjBmMTRhYjhmYjAxMjExZTI0MC4uNTBjZDJj
MjA4M2YxMDYxM2UyM2NhN2JkZGZlMDgwMGIyYzA2MzRmNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
LmNwcApAQCAtNTcsMjYgKzU3LDMxIEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMoUHJvY2VkdXJlJiBwcm9jKQogICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnMgPSBwcm9jLmRv
bWluYXRvcnMoKTsKICAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNEb21pbmF0b3Jz
ID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7CiAKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmVj
dG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb0xvYWQ7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSos
IFZhbHVlKj4gcHJlSW5kZXhMb2FkQ2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVl
KiwgVmFsdWUqPiBwb3N0SW5kZXhMb2FkQ2FuZGlkYXRlczsKKworICAgIEhhc2hNYXA8VmFsdWUq
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvU3RvcmU7CisgICAgSGFzaE1hcDxNZW1vcnlW
YWx1ZSosIFZhbHVlKj4gcHJlSW5kZXhTdG9yZUNhbmRpZGF0ZXM7CisgICAgSGFzaE1hcDxNZW1v
cnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzOworCiAgICAgSGFzaE1h
cDxWYWx1ZUtleSwgVmVjdG9yPFZhbHVlKj4+IGJhc2VPZmZzZXRUb0FkZHJlc3NlczsKLSAgICBI
YXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRleENhbmRpZGF0ZXM7Ci0gICAgSGFz
aE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9NZW1vcmllczsKLSAgICBI
YXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhDYW5kaWRhdGVzOwogICAgIEhh
c2hNYXA8VmFsdWUqLCB1bnNpZ25lZD4gdmFsdWVUb0luZGV4OwogICAgIEluZGV4U2V0PFZhbHVl
Kj4gaWdub3JlZFZhbHVlczsKIAotICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgotICAgIC8vICAg
ICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAvLyAgICAgLi4uCi0gICAgLy8gICAg
IG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQotICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoK
LSAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQotICAgIC8vICAgICAuLi4KLSAgICAv
LyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCiAgICAgYXV0byB0cnlQcmVQb3N0SW5k
ZXggPSBbJl0gKFZhbHVlKiB2YWx1ZSkgewogICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUo
KSkgewogICAgICAgICBjYXNlIExvYWQ6IHsKICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1v
cnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CiAKKyAgICAgICAgICAgIC8vIFByZS1JbmRl
eCBQYXR0ZXJuOgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0
KQorICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExv
YWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBQYXR0ZXJuOgorICAg
ICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKKyAgICAgICAgICAgIC8vICAg
ICAuLi4KKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKICAg
ICAgICAgICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4TWVtb3J5ID0gWyZdICgpIHsKICAgICAgICAg
ICAgICAgICBpZiAobWVtb3J5LT50eXBlKCkgIT0gSW50MzIgJiYgbWVtb3J5LT50eXBlKCkgIT0g
SW50NjQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTg3LDkgKzkyLDQyIEBAIGJv
b2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zm
c2V0a2V5KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICAgICAgZm9yIChWYWx1ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFz
ZU9mZnNldGtleSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleENhbmRpZGF0ZXMu
YWRkKG1lbW9yeSwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleExv
YWRDYW5kaWRhdGVzLmFkZChtZW1vcnksIGFkZHJlc3MpOwogICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICBiYXNlVG9NZW1vcmllcy5hZGQobWVtb3J5LT5jaGlsZCgw
KSwgVmVjdG9yPE1lbW9yeVZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtZW1vcnkp
OworICAgICAgICAgICAgICAgICAgICBiYXNlVG9Mb2FkLmFkZChtZW1vcnktPmxhc3RDaGlsZCgp
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7
CisgICAgICAgICAgICAgICAgdmFsdWVUb0luZGV4LmFkZCh2YWx1ZSwgaW5kZXgpOworICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgdHJ5UHJlUG9zdEluZGV4TWVtb3J5KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAg
ICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisKKyAg
ICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgorICAgICAgICAgICAgLy8gICAgIGFkZHJl
c3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAg
ICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCBvZmZzZXQpCisgICAgICAgICAg
ICAvLyBQb3N0LUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3Rv
cmUodmFsdWUsIGJhc2UsIDApCisgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAgICAgICAv
LyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICBhdXRvIHRyeVBy
ZVBvc3RJbmRleE1lbW9yeSA9IFsmXSAoKSB7CisgICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+
Y2hpbGQoMCktPnR5cGUoKSAhPSBJbnQzMiAmJiBtZW1vcnktPmNoaWxkKDApLT50eXBlKCkgIT0g
SW50NjQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAo
bWVtb3J5LT5jaGlsZCgwKS0+aGFzSW50KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIUFyZzo6aXNWYWxpZFByZUluZGV4Rm9ybShtZW1vcnktPm9mZnNldCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVL
ZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KG1lbW9yeS0+Y2hpbGQoMCksIHN0YXRpY19jYXN0
PGludDY0X3Q+KG1lbW9yeS0+b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFi
YXNlT2Zmc2V0VG9BZGRyZXNzZXMuY29udGFpbnMoYmFzZU9mZnNldGtleSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGFk
ZHJlc3MgOiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuZ2V0KGJhc2VPZmZzZXRrZXkpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcHJlSW5kZXhTdG9yZUNhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgYWRk
cmVzcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJhc2VU
b1N0b3JlLmFkZChtZW1vcnktPmNoaWxkKDEpLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CiAgICAgICAgICAgICAgICAgdmFsdWVUb0luZGV4
LmFkZCh2YWx1ZSwgaW5kZXgpOwogICAgICAgICAgICAgfTsKIApAQCAtMTEyLDEwICsxNTAsMTQg
QEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAg
ICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KGxlZnQsIHN0
YXRpY19jYXN0PGludDY0X3Q+KHNtYWxsT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgYmFzZU9m
ZnNldFRvQWRkcmVzc2VzLmFkZChiYXNlT2Zmc2V0a2V5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YWx1ZVRvSW5kZXgu
YWRkKHZhbHVlLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFiYXNlVG9NZW1vcmllcy5j
b250YWlucyhsZWZ0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VUb01lbW9yaWVzLmdldChsZWZ0KSkK
LSAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgaWYgKGJhc2VUb0xvYWQuY29udGFpbnMobGVmdCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvTG9hZC5n
ZXQobGVmdCkpCisgICAgICAgICAgICAgICAgICAgICAgICBwb3N0SW5kZXhMb2FkQ2FuZGlkYXRl
cy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChiYXNlVG9TdG9yZS5jb250YWlucyhsZWZ0KSkgeworICAgICAgICAgICAgICAgICAgICBm
b3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9TdG9yZS5nZXQobGVmdCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFs
dWUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIHRy
eVBvdGVudGlhbFBvc3RJbmRleEFkZHJlc3MoKTsKQEAgLTEzOSwxNCArMTgxLDE0IEBAIGJvb2wg
Y2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAg
ICAgfHwgKGRvbWluYXRvcnMuZG9taW5hdGVzKHYyLT5vd25lciwgdjEtPm93bmVyKSAmJiBiYWNr
d2FyZHNEb21pbmF0b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikpOwogICAgIH07
CiAKLSAgICBhdXRvIGRldGVjdCA9IFsmXSAoSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4g
Y2FuZGlkYXRlcykgeworICAgIGF1dG8gZGV0ZWN0SW5jcmVtZW50TG9hZCA9IFsmXSAoSGFzaE1h
cDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gY2FuZGlkYXRlcykgewogICAgICAgICBmb3IgKGF1dG8g
aXRyID0gY2FuZGlkYXRlcy5iZWdpbigpOyBpdHIgIT0gY2FuZGlkYXRlcy5lbmQoKTsgKytpdHIp
IHsKICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBpdHItPmtleTsKICAgICAgICAg
ICAgIFZhbHVlKiBhZGRyZXNzID0gaXRyLT52YWx1ZTsKICAgICAgICAgICAgIGlmIChpZ25vcmVk
VmFsdWVzLmNvbnRhaW5zKG1lbW9yeSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNz
KSB8fCAhY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMgPT0gcHJlSW5kZXhDYW5k
aWRhdGVzKSB7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlcyA9PSBwcmVJbmRleExvYWRDYW5k
aWRhdGVzKSB7CiAgICAgICAgICAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQp
ICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQogICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICBuZXdNZW1vcnkgPSBMb2FkKGJhc2UsIG9m
ZnNldCkKICAgICAgICAgICAgICAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uCkBAIC0xNjIsOSArMjA0LDQ5IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3Jl
bWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgICAgIC8vIC4uLiAgICAgICAgICAg
ICAgICAgICAgICAgICAgLS0+ICAuLi4KICAgICAgICAgICAgICAgICAvLyBvZmZzZXQgPSBDb25z
dGFudCAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gSWRlbnRpdHkobmV3T2Zmc2V0KQogICAgICAg
ICAgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0g
SWRlbnRpdHkobmV3QWRkcmVzcykKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2xFcXVpdmFs
ZW50KG1lbW9yeSwgYWRkcmVzcy0+Y2hpbGQoMSkpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBtZW1vcnlJbmRleCA9IHZhbHVlVG9JbmRl
eC5nZXQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbmV3T2Zmc2V0ID0gaW5zZXJ0
aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KG1lbW9yeUluZGV4LCBtZW1vcnktPm9yaWdpbigp
LCBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnQoKSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG5l
d0FkZHJlc3MgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtZW1vcnlJbmRleCwgQWRkLCBt
ZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgwKSwgbmV3T2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICBhZGRyZXNzLT5jaGlsZCgxKS0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdPZmZzZXQp
OworICAgICAgICAgICAgICAgIGFkZHJlc3MtPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3QWRkcmVz
cyk7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKGFkZHJlc3Mp
OworICAgICAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBkZXRlY3RJbmNyZW1lbnRMb2FkKHByZUluZGV4TG9hZENhbmRpZGF0ZXMpOwor
ICAgIGRldGVjdEluY3JlbWVudExvYWQocG9zdEluZGV4TG9hZENhbmRpZGF0ZXMpOworCisgICAg
YXV0byBkZXRlY3RJbmNyZW1lbnRTdG9yZSA9IFsmXSAoSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZh
bHVlKj4gY2FuZGlkYXRlcykgeworICAgICAgICBmb3IgKGF1dG8gaXRyID0gY2FuZGlkYXRlcy5i
ZWdpbigpOyBpdHIgIT0gY2FuZGlkYXRlcy5lbmQoKTsgKytpdHIpIHsKKyAgICAgICAgICAgIE1l
bW9yeVZhbHVlKiBtZW1vcnkgPSBpdHItPmtleTsKKyAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNz
ID0gaXRyLT52YWx1ZTsKKyAgICAgICAgICAgIGlmIChpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKG1l
bW9yeSkgfHwgaWdub3JlZFZhbHVlcy5jb250YWlucyhhZGRyZXNzKSB8fCAhY29udHJvbEVxdWl2
YWxlbnQobWVtb3J5LCBhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgaWYgKGNhbmRpZGF0ZXMgPT0gcHJlSW5kZXhTdG9yZUNhbmRpZGF0ZXMpIHsKKyAg
ICAgICAgICAgICAgICAvLyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgICAg
ICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAvLyAuLi4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAuLi4KKyAgICAgICAgICAgICAgICAv
LyBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgb2Zmc2V0KSAgICAgICBtZW1vcnkgPSBTdG9y
ZSh2YWx1ZSwgYWRkcmVzcywgb2Zmc2V0KQorICAgICAgICAgICAgICAgIG1lbW9yeS0+Y2hpbGQo
MSkgPSBhZGRyZXNzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3T2Zmc2V0ID0gQ29uc3RhbnQKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRk
cmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCisgICAgICAgICAgICAgICAgLy8gbWVtb3J5ID0g
U3RvcmUodmFsdWUsIGJhc2UsIDApICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBuZXdBZGRyZXNz
LCAwKQorICAgICAgICAgICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+
ICAuLi4KKyAgICAgICAgICAgICAgICAvLyBvZmZzZXQgPSBDb25zdGFudCAgICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gSWRlbnRpdHkobmV3T2Zmc2V0KQorICAgICAgICAgICAgICAgIC8vIGFkZHJl
c3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3QWRkcmVz
cykKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVz
cy0+Y2hpbGQoMSkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBtZW1vcnlJbmRleCA9IHZhbHVlVG9JbmRleC5nZXQobWVtb3J5KTsKICAg
ICAgICAgICAgICAgICBWYWx1ZSogbmV3T2Zmc2V0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25z
dDY0VmFsdWU+KG1lbW9yeUluZGV4LCBtZW1vcnktPm9yaWdpbigpLCBhZGRyZXNzLT5jaGlsZCgx
KS0+YXNJbnQoKSk7CiAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld0FkZHJlc3MgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0PFZhbHVlPihtZW1vcnlJbmRleCwgQWRkLCBtZW1vcnktPm9yaWdpbigpLCBh
ZGRyZXNzLT5jaGlsZCgwKSwgbmV3T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBtZW1vcnktPmNo
aWxkKDEpID0gbmV3QWRkcmVzczsKICAgICAgICAgICAgICAgICBhZGRyZXNzLT5jaGlsZCgxKS0+
cmVwbGFjZVdpdGhJZGVudGl0eShuZXdPZmZzZXQpOwogICAgICAgICAgICAgICAgIGFkZHJlc3Mt
PnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3QWRkcmVzcyk7CiAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7CkBAIC0xNzUsOCArMjU3LDggQEAgYm9vbCBj
YW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgZGV0ZWN0KHByZUluZGV4Q2FuZGlkYXRlcyk7Ci0gICAgZGV0ZWN0KHBv
c3RJbmRleENhbmRpZGF0ZXMpOworICAgIGRldGVjdEluY3JlbWVudFN0b3JlKHByZUluZGV4U3Rv
cmVDYW5kaWRhdGVzKTsKKyAgICBkZXRlY3RJbmNyZW1lbnRTdG9yZShwb3N0SW5kZXhTdG9yZUNh
bmRpZGF0ZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDRhM2Y5MjZmMTA0NGM2NmEzYmE4NTU1ZjIxNWViMjhi
ZTkxN2MwOWIuLjc0ZmYwOTE2MmNkNmRiZDZiZTE4MzRiNzRjYTMyMDdmZjEyNDAwN2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0yNTgxLDggKzI1ODEs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFzZSwgb2Zm
c2V0KQogICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IGxvYWQoYmFzZSwgb2Zmc2V0KQogICAg
ICAgICAgICAgLy8gUG9zdC1JbmRleCBDYW5vbmljYWwgRm9ybToKLSAgICAgICAgICAgIC8vICAg
ICBtZW1vcnkgPSBsb2FkKGJhc2UsIDApCiAgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IGFk
ZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gbG9hZChiYXNlLCAw
KQogICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRJbmNyZW1lbnRBZGRyZXNzID0gWyZdICgpIC0+
IGJvb2wgewogICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZv
clR5cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50
eXBlKCkpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlBy
ZUluZGV4LCBBcmc6OlRtcCkgfHwgIW1faW5kZXgpCkBAIC0zNDMwLDYgKzM0MzAsNDQgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgICAgIC8v
IFByZS1JbmRleCBDYW5vbmljYWwgRm9ybToKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0g
QWRkKGJhc2UsIE9mZnNldCkKKyAgICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1
ZSwgYWRkcmVzcywgT2Zmc2V0KQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBDYW5vbmljYWwg
Rm9ybToKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIE9mZnNldCkKKyAg
ICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYWRkcmVzcywgMCkKKyAgICAg
ICAgICAgIGF1dG8gdHJ5QXBwZW5kSW5jcmVtZW50QWRkcmVzcyA9IFsmXSAoKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5
VmFsdWU+KCk7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2Rl
Rm9yVHlwZShNb3ZlV2l0aEluY3JlbWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCBtZW1vcnkt
PmNoaWxkKDApLT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bj
b2RlLCBBcmc6OlByZUluZGV4LCBBcmc6OlRtcCkgfHwgIW1faW5kZXgpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IG1l
bW9yeS0+bGFzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm9wY29kZSgp
ICE9IEFkZCB8fCBhZGRyZXNzLT50eXBlKCkgIT0gSW50NjQgfHwgIWFkZHJlc3MtPmNoaWxkKDEp
LT5oYXNJbnRQdHIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludFB0cigp
OworICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGlj
X2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKHNt
YWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjppc1ZhbGlkUG9zdEluZGV4Rm9ybShzbWFsbE9m
ZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAg
ICAgIEFyZyBpbmNyZW1lbnRBcmcgPSBBcmcoKTsKKyAgICAgICAgICAgICAgICBpZiAobWVtb3J5
LT5vZmZzZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgPT0gbWVt
b3J5LT5vZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFy
Zzo6cHJlSW5kZXgodG1wKGFkZHJlc3MpLCBzbWFsbE9mZnNldCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFyZzo6cG9zdEluZGV4
KHRtcChhZGRyZXNzKSwgc21hbGxPZmZzZXQpOworCisgICAgICAgICAgICAgICAgaWYgKGluY3Jl
bWVudEFyZykgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBl
KGFkZHJlc3MtPnR5cGUoKSksIHRtcChhZGRyZXNzLT5jaGlsZCgwKSksIHRtcChhZGRyZXNzKSk7
CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChtZW1vcnktPmNoaWxkKDAp
KSwgaW5jcmVtZW50QXJnKTsKKyAgICAgICAgICAgICAgICAgICAgbV9sb2NrZWQuYWRkKGFkZHJl
c3MpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgaWYgKHRyeUFwcGVuZEluY3JlbWVudEFkZHJlc3MoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZVRvU3RvcmUgPSBtX3ZhbHVlLT5jaGls
ZCgwKTsKICAgICAgICAgICAgIGlmIChjYW5CZUludGVybmFsKHZhbHVlVG9TdG9yZSkpIHsKICAg
ICAgICAgICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuaAppbmRleCA5YWE0MGQxMjFlZTRlY2YyNmU5NGY3ZTU5ZmIxNGY5MzViZWE5Y2IyLi5lMTcx
YWNmNTVlMzY3MGY4OTFmMTViYThmMjBjNmNkYzFjMTg2OTJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCkBAIC0xMTY4LDQgKzExNjgsOSBAQCB2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgp
Owogdm9pZCB0ZXN0TG9hZFBvc3RJbmRleDMyKCk7CiB2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQo
KTsKIAordm9pZCB0ZXN0U3RvcmVQcmVJbmRleDMyKCk7Cit2b2lkIHRlc3RTdG9yZVByZUluZGV4
NjQoKTsKK3ZvaWQgdGVzdFN0b3JlUG9zdEluZGV4MzIoKTsKK3ZvaWQgdGVzdFN0b3JlUG9zdElu
ZGV4NjQoKTsKKwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiM18zLmNwcAppbmRleCA1MDVmZDYzOTAzY2U4ZjIyNDJkZTYwMzYzMjg5MjkwY2E4ODE5
YTczLi5kMWU5NzkyMWY0YTBmYTgzMGQ0YjM5ZmQ5YWM5ZWRiMDVhYmYzMTI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTMyMSw2ICszMjEsMTE1IEBAIHZvaWQgdGVz
dExvYWRQb3N0SW5kZXg2NCgpCiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KCpjb2RlLCBi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOwogfQogCit2b2lkIHRlc3RTdG9y
ZVByZUluZGV4MzIoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwg
MikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsK
KyAgICBpbnQzMl90KiBwdHIgPSAmbnVtc1sxXTsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYWRkcmVz
cyA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogdmFsdWUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSkpOworICAgIFZhbHVlKiBvZmZzZXQgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgNCk7CisgICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVzcywgb2Zmc2V0KTsK
KyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwg
dmFsdWUsIHByZUluY3JlbWVudCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJ
bnN0cnVjdGlvbigqY29kZSwgIiM0XSEiKTsKKyAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50
cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOworICAgIHB0ciA9
IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRy
KTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6
ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3Qg
bnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50NjRfdCogcHRyID0gJm51bXNbMV07CisKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworCisgICAgVmFsdWUqIGFkZHJlc3MgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIHZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFZhbHVlKiBvZmZzZXQgPSByb290LT5hcHBlbmRO
ZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCk7CisgICAgVmFsdWUqIHByZUluY3Jl
bWVudCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVz
cywgb2Zmc2V0KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3Jl
LCBPcmlnaW4oKSwgdmFsdWUsIHByZUluY3JlbWVudCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIiM4XSEiKTsKKyAgICBpbnRwdHJfdCByZXMg
PSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQp
OworICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShu
dW1zWzJdLCAqcHRyKTsKK30KKwordm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXgzMigpCit7CisgICAg
aWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisK
KyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludDMyX3QqIHB0ciA9ICZu
dW1zWzFdOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiBhZGRyZXNzID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgIFZhbHVlKiB2YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgcm9vdC0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBTdG9yZSwgT3JpZ2luKCksIHZhbHVlLCBhZGRy
ZXNzKTsKKyAgICBWYWx1ZSogb2Zmc2V0ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDQpOworICAgIFZhbHVlKiBwcmVJbmNyZW1lbnQgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFkZHJlc3MsIG9mZnNldCk7CisgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHByZUlu
Y3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAo
aXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM0Iik7
CisgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9jYXN0
PGludHB0cl90PihwdHIpLCA0KTsKKyAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KHJl
cyk7CisgICAgQ0hFQ0tfRVEobnVtc1sxXSwgNCk7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgKnB0
cik7Cit9CisKK3ZvaWQgdGVzdFN0b3JlUG9zdEluZGV4NjQoKQoreworICAgIGlmIChPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50NjRf
dCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnQ2NF90KiBwdHIgPSAmbnVtc1sxXTsKKwor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisKKyAgICBWYWx1ZSogYWRkcmVzcyA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSog
dmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
Pihwcm9jLCBTdG9yZSwgT3JpZ2luKCksIHZhbHVlLCBhZGRyZXNzKTsKKyAgICBWYWx1ZSogb2Zm
c2V0ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgpOwor
ICAgIFZhbHVlKiBwcmVJbmNyZW1lbnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFk
ZCwgT3JpZ2luKCksIGFkZHJlc3MsIG9mZnNldCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBj
aGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM4Iik7CisgICAgaW50cHRyX3QgcmVzID0g
aW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsK
KyAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHJlcyk7CisgICAgQ0hFQ0tfRVEobnVt
c1sxXSwgNCk7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgKnB0cik7Cit9CiAKIHZvaWQgdGVzdElu
c2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIoKQogewpAQCAtMzk5NCw2ICs0MTAzLDExIEBAIHZv
aWQgYWRkU2hyVGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0TG9hZFByZUluZGV4NjQoKSk7CiAgICAg
UlVOKHRlc3RMb2FkUG9zdEluZGV4MzIoKSk7CiAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4NjQo
KSk7CisKKyAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXgzMigpKTsKKyAgICBSVU4odGVzdFN0b3Jl
UHJlSW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdFN0b3JlUG9zdEluZGV4MzIoKSk7CisgICAgUlVO
KHRlc3RTdG9yZVBvc3RJbmRleDY0KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435056</attachid>
            <date>2021-08-06 00:33:13 -0700</date>
            <delta_ts>2021-08-07 02:37:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228538-20210806023312.patch</filename>
            <type>text/plain</type>
            <size>25199</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MDBlNWQ4OWJjMjRjMDk0NmU4Njc0MWRkZTU4YzMxNjJlNDgyOWNiLi45OTRlZGYzOWUzMGExMjQ4
MGY4NzZmNGE3YWU3YjMyMzc1YzkxMmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzEgQEAKKzIwMjEtMDgtMDYgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIFtBUk02NF0gQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2Rl
IHRvIEFpciBmb3IgQVJNNjQgKFN0b3JlIEluc3RydWN0aW9uKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4NTM4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHByZXZpb3VzIHBhdGNoIGhhcyBpbnRy
b2R1Y2VkIHRoZSBwcmUvcG9zdC1pbmRleCBhZGRyZXNzIG1vZGUgZm9yIExvYWQgaW5zdHJ1Y3Rp
b24KKyAgICAgICAgLCB3aGljaCBiZW5lZml0cyBsb29wIHByb2dyYW0uIEhlcmUsIHRoaXMgcGF0
Y2ggYWRkcyB0aGUgY29ycmVzcG9uZGluZyBtb2RlIGZvciBTdG9yZQorICAgICAgICBpbnN0cnVj
dGlvbi4gU3RvcmUgUmVnaXN0ZXIgKGltbWVkaWF0ZSkgc3RvcmVzIGEgd29yZCBvciBhIGRvdWJs
ZXdvcmQgZnJvbSBhIHJlZ2lzdGVyCisgICAgICAgIHRvIG1lbW9yeS4gVGhlIGFkZHJlc3MgdGhh
dCBpcyB1c2VkIGZvciB0aGUgc3RvcmUgaXMgY2FsY3VsYXRlZCBmcm9tIGEgYmFzZSByZWdpc3Rl
cgorICAgICAgICBhbmQgYW4gaW1tZWRpYXRlIG9mZnNldC4KKworICAgICAgICAjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIyBQcmUtSW5kZXggQWRkcmVz
cyBNb2RlIEZvciBTdG9yZSAjIworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIworCisgICAgICAgIFNUUiBXdCwgW1huLCAjaW1tXSEKKworICAgICAgICBJbiBC
MyBSZWR1Y3Rpb24gU3RyZW5ndGgsIHNpbmNlIHdlIGhhdmUgdGhpcyByZWR1Y3Rpb24gcnVsZToK
KyAgICAgICAgICAgIFR1cm5zIHRoaXM6IFN0b3JlKHZhbHVlLCBBZGQoYWRkcmVzcywgb2Zmc2V0
MSksIG9mZnNldCA9IG9mZnNldDIpCisgICAgICAgICAgICBJbnRvIHRoaXM6IFN0b3JlKHZhbHVl
LCBhZGRyZXNzLCBvZmZzZXQgPSBvZmZzZXQxICsgb2Zmc2V0MikKKworICAgICAgICBUaGUgZXF1
aXZhbGVudCBwYXR0ZXJuIGlzOgorICAgICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpCisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBi
YXNlLCBvZmZzZXQpCisKKyAgICAgICAgSGVyZSwgd2Ugb25seSBjb25zaWRlciB0aGUgcGF0dGVy
bjoKKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
bWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIG9mZnNldCkKKworICAgICAgICBBbmQsIHRoaXMg
cGF0Y2ggZGlyZWN0bHkgdHJlYXQgaXQgYXMgdGhlIGNhbm9uaWNhbCBmb3JtLiBJZGVhbGx5LCB3
ZSBzaG91bGQgbW92ZSAKKyAgICAgICAgbWVtb3J5IHRvIGp1c3QgYWZ0ZXIgdGhlIGFkZHJlc3Mg
bGlrZSB3aGF0IHdlIGRpZCBmb3IgUHJlSW5kZXggTG9hZCBpbiB0aGUgcHJldmlvdXMgCisgICAg
ICAgIHBhdGNoLiBCdXQsIHdlIGNhbm5vdCBwcm92aWRlIGEgYmV0dGVyIHdheSB0byBkbyB0aGF0
IHNpbmNlIHRoZSB2YWx1ZSBtYXkgYmUgCisgICAgICAgIHVzZWQgYmV0d2VlbiBhZGRyZXNzIGFu
ZCBtZW1vcnkuIFRvIG1vdmUgdmFsdWUgdXB3YXJkLCB3ZSBtdXN0IG1vdmUgYWxsIGRlc2NlbmRh
bnRzIAorICAgICAgICBvZiB2YWx1ZSBhbG9uZyB3aXRoIGl0IHRvIHByZXZlbnQgQjMgSVIgaW5k
ZXggdmlvbGF0aW9ucywgd2hpY2ggaXMgcmlza3kuCisKKyAgICAgICAgTmV4dCwgbG93ZXIgdG8g
QWlyOgorICAgICAgICAgICAgTW92ZSAlYmFzZSwgJWFkZHJlc3MKKyAgICAgICAgICAgIE1vdmUg
JXZhbHVlLCAoJWFkZHJlc3MsIHByZWZpeChvZmZzZXQpKQorCisgICAgICAgICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFBvc3QtSW5kZXggQWRkcmVz
cyBNb2RlIEZvciBMb2FkICMjCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCisKKyAgICAgICAgU1RSIFd0LCBbWG5dLCAjaW1tCisKKyAgICAgICAgVGhlbiwg
dGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczoKKyAgICAgICAgICAgIG1lbW9yeSA9IFN0b3JlKHZh
bHVlLCBiYXNlLCAwKQorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBhZGRyZXNzID0gQWRk
KGJhc2UsIG9mZnNldCkKKworICAgICAgICBGaXJzdCwgd2UgY29udmVydCBpdCB0byB0aGUgY2Fu
b25pY2FsIGZvcm06CisgICAgICAgICAgICBuZXdPZmZzZXQgPSBDb25zdGFudAorICAgICAgICAg
ICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICBtZW1vcnkgPSBT
dG9yZSh2YWx1ZSwgYmFzZSwgMCkgLy8gbW92ZSB0aGUgb2Zmc2V0IGFuZCBhZGRyZXNzIHRvIGp1
c3QgYmVmb3JlIHRoZSBtZW1vcnkKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgb2Zmc2V0
ID0gSWRlbnRpdHkobmV3T2Zmc2V0KQorICAgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5l
d0FkZHJlc3MpCisKKyAgICAgICAgTmV4dCwgbG93ZXIgdG8gQWlyOgorICAgICAgICAgICAgTW92
ZSAlYmFzZSwgJW5ld0FkZHJlc3MKKyAgICAgICAgICAgIE1vdmUgJXZhbHVlLCAoJW5ld0FkZHJl
c3MsIHBvc3RmaXgob2Zmc2V0KSkKKworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFRlc3QgZm9yIFByZS9Qb3N0LUluY3Jl
bWVudCBBZGRyZXNzIE1vZGUgIyMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIEIzIElSOgorICAgICAgICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgSW50
NjQgYkAwID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICBJbnQ2NCBiQDEgPSBBcmd1bWVudFJl
ZygleDEpCisgICAgICAgIEludDY0IGJAMiA9IENvbnN0NjQoOCkKKyAgICAgICAgSW50NjQgYkAz
ID0gQWRkKGJAMCwgJDgoYkAyKSkKKyAgICAgICAgVm9pZCAgYkA0ID0gU3RvcmUoYkAxLCBiQDMs
IENvbnRyb2xEZXBlbmRlbnR8V3JpdGVzOlRvcCkKKyAgICAgICAgVm9pZCAgYkA1ID0gUmV0dXJu
KGJAMywgVGVybWluYWwpCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvTyBQcmUtSW5jcmVtZW50IEFkZHJl
c3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgICAgIE1vdmUgICV4MCwgJXgyLCAgICAgIGJAMAorICAgICAg
ICBBZGQ2NCAgJDgsICV4MiwgJXgwLCBiQDMKKyAgICAgICAgTW92ZSAgJXgxLCA4KCV4MiksICAg
YkA0CisgICAgICAgIFJldDY0ICV4MCwgICAgICAgICAgIGJANQorICAgICAgICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBX
LyBQcmUtSW5jcmVtZW50IEFkZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIE1vdmVXaXRoSW5j
cmVtZW50NjQgJXgxLCAoJXgwLFByZSgkOCkpLCBiQDQKKyAgICAgICAgUmV0NjQgICAgICAgICAg
ICAgICAleDAsICAgICAgICAgICAgICAgIGJANQorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisgICAgICAgIEIzIElSOgor
ICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgSW50NjQgYkAwID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICBJbnQ2
NCBiQDEgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIFZvaWQgIGJAMiA9IFN0b3JlKGJAMSwg
YkAwLCBDb250cm9sRGVwZW5kZW50fFdyaXRlczpUb3ApCisgICAgICAgIEludDY0IGJAMyA9IENv
bnN0NjQoOCkKKyAgICAgICAgSW50NjQgYkA0ID0gQWRkKGJAMCwgJDgoYkAzKSkKKyAgICAgICAg
Vm9pZCAgYkA1ID0gUmV0dXJuKGJANCwgVGVybWluYWwpCisgICAgICAgIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvTyBQ
b3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBNb3ZlICAleDEsICgl
eDApLCAgICAgIGJAMgorICAgICAgICBBZGQ2NCAgJDgsICAgJXgwLCAleDAsIGJANAorICAgICAg
ICBSZXQ2NCAleDAsICAgICAgICAgICAgIGJANQorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBXLyBQb3N0LUlu
Y3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBNb3ZlV2l0aEluY3JlbWVudDY0
ICV4MSwgKCV4MCxQb3N0KCQ4KSksIGJAMgorICAgICAgICBSZXQ2NCAgICAgICAgICAgICAgICV4
MCwgICAgICAgICAgICAgICAgIGJANQorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAqIGIzL0IzQ2Fub25pY2Fs
aXplUHJlUG9zdEluY3JlbWVudHMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Y2Fub25pY2FsaXpl
UHJlUG9zdEluY3JlbWVudHMpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIzXzMuY3BwOgorICAgICAgICAo
dGVzdFN0b3JlUHJlSW5kZXgzMik6CisgICAgICAgICh0ZXN0U3RvcmVQcmVJbmRleDY0KToKKyAg
ICAgICAgKHRlc3RTdG9yZVBvc3RJbmRleDMyKToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJbmRl
eDY0KToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKwogMjAyMS0wOC0wMiAgWWlqaWEgSHVhbmcg
IDx5aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8g
aW5zdHJ1Y3Rpb24gc2VsZWN0b3IgdG8gdXRpbGl6ZSBVTVVMTCBzdXBwb3J0ZWQgYnkgQVJNNjQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBv
c3RJbmNyZW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6
ZVByZVBvc3RJbmNyZW1lbnRzLmNwcAppbmRleCBiMzc0MzFmYWFhN2QwYzcxNGMzNDFmMGYxNGFi
OGZiMDEyMTFlMjQwLi5lY2Q5NjBiZTk4YWU0MTVkNTllNGVhMjBiZGE2Mzg4MTNjMDMxMDU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0
SW5jcmVtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2Fs
aXplUHJlUG9zdEluY3JlbWVudHMuY3BwCkBAIC00Myw2ICs0MywxMCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKIAorbmFtZXNwYWNlIEIzQ2Fub25pY2FsaXplUHJlUG9zdElu
Y3JlbWVudHMgeworc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKwog
Ym9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiB7CiAg
ICAgaWYgKCFpc0FSTTY0KCkpCkBAIC01NywyNiArNjEsMzEgQEAgYm9vbCBjYW5vbmljYWxpemVQ
cmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgRG9taW5hdG9ycyYgZG9taW5h
dG9ycyA9IHByb2MuZG9taW5hdG9ycygpOwogICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGJhY2t3
YXJkc0RvbWluYXRvcnMgPSBwcm9jLmJhY2t3YXJkc0RvbWluYXRvcnMoKTsKIAorICAgIEhhc2hN
YXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRvTG9hZDsKKyAgICBIYXNoTWFw
PE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRleExvYWRDYW5kaWRhdGVzOworICAgIEhhc2hN
YXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleExvYWRDYW5kaWRhdGVzOworCisgICAg
SGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1ZSo+PiBiYXNlVG9TdG9yZTsKKyAgICBI
YXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRleFN0b3JlQ2FuZGlkYXRlczsKKyAg
ICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXM7
CisKICAgICBIYXNoTWFwPFZhbHVlS2V5LCBWZWN0b3I8VmFsdWUqPj4gYmFzZU9mZnNldFRvQWRk
cmVzc2VzOwotICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHByZUluZGV4Q2FuZGlk
YXRlczsKLSAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb01l
bW9yaWVzOwotICAgIEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IHBvc3RJbmRleENhbmRp
ZGF0ZXM7CiAgICAgSGFzaE1hcDxWYWx1ZSosIHVuc2lnbmVkPiB2YWx1ZVRvSW5kZXg7CiAgICAg
SW5kZXhTZXQ8VmFsdWUqPiBpZ25vcmVkVmFsdWVzOwogCi0gICAgLy8gUHJlLUluZGV4IFBhdHRl
cm46Ci0gICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgIC8vICAgICAu
Li4KLSAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgLy8gUG9zdC1J
bmRleCBQYXR0ZXJuOgotICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCi0gICAgLy8g
ICAgIC4uLgotICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKICAgICBhdXRv
IHRyeVByZVBvc3RJbmRleCA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7CiAgICAgICAgIHN3aXRjaCAo
dmFsdWUtPm9wY29kZSgpKSB7CiAgICAgICAgIGNhc2UgTG9hZDogewogICAgICAgICAgICAgTWVt
b3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKIAorICAgICAgICAg
ICAgLy8gUHJlLUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFk
ZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAgICAgICAvLyAg
ICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAvLyBQb3N0LUluZGV4
IFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAwKQorICAg
ICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFz
ZSwgb2Zmc2V0KQogICAgICAgICAgICAgYXV0byB0cnlQcmVQb3N0SW5kZXhNZW1vcnkgPSBbJl0g
KCkgewogICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPnR5cGUoKSAhPSBJbnQzMiAmJiBtZW1v
cnktPnR5cGUoKSAhPSBJbnQ2NCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtODcs
OSArOTYsNDIgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUm
IHByb2MpCiAgICAgICAgICAgICAgICAgICAgIGlmICghYmFzZU9mZnNldFRvQWRkcmVzc2VzLmNv
bnRhaW5zKGJhc2VPZmZzZXRrZXkpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNzIDogYmFzZU9mZnNldFRvQWRk
cmVzc2VzLmdldChiYXNlT2Zmc2V0a2V5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZUlu
ZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHByZUluZGV4TG9hZENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgYWRkcmVzcyk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJhc2VUb0xvYWQuYWRkKG1lbW9y
eS0+bGFzdENoaWxkKCksIFZlY3RvcjxNZW1vcnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5h
cHBlbmQobWVtb3J5KTsKKyAgICAgICAgICAgICAgICB2YWx1ZVRvSW5kZXguYWRkKHZhbHVlLCBp
bmRleCk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB0cnlQcmVQb3N0SW5kZXhNZW1v
cnkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdG9y
ZTogeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlW
YWx1ZT4oKTsKKworICAgICAgICAgICAgLy8gUHJlLUluZGV4IFBhdHRlcm46CisgICAgICAgICAg
ICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAvLyAgICAg
Li4uCisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIG9mZnNl
dCkKKyAgICAgICAgICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKKyAgICAgICAgICAgIC8vICAg
ICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkKKyAgICAgICAgICAgIC8vICAgICAuLi4K
KyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAg
ICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4TWVtb3J5ID0gWyZdICgpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobWVtb3J5LT5jaGlsZCgwKS0+dHlwZSgpICE9IEludDMyICYmIG1lbW9yeS0+Y2hpbGQo
MCktPnR5cGUoKSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIGlmIChtZW1vcnktPmNoaWxkKDApLT5oYXNJbnQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc1ZhbGlkUHJlSW5kZXhGb3JtKG1lbW9yeS0+
b2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobWVtb3J5LT5jaGlsZCgw
KSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4obWVtb3J5LT5vZmZzZXQoKSkpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChWYWx1ZSogYWRkcmVzcyA6IGJhc2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9mZnNl
dGtleSkpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVJbmRleFN0b3JlQ2FuZGlkYXRlcy5h
ZGQobWVtb3J5LCBhZGRyZXNzKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgYmFzZVRvTWVtb3JpZXMuYWRkKG1lbW9yeS0+Y2hpbGQoMCksIFZlY3RvcjxNZW1v
cnlWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5KTsKKyAgICAgICAgICAg
ICAgICAgICAgYmFzZVRvU3RvcmUuYWRkKG1lbW9yeS0+Y2hpbGQoMSksIFZlY3RvcjxNZW1vcnlW
YWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWVtb3J5KTsKICAgICAgICAgICAgICAg
ICB2YWx1ZVRvSW5kZXguYWRkKHZhbHVlLCBpbmRleCk7CiAgICAgICAgICAgICB9OwogCkBAIC0x
MTIsMTAgKzE1NCwxNCBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2Nl
ZHVyZSYgcHJvYykKICAgICAgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5ID0gVmFs
dWVLZXkobGVmdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oc21hbGxPZmZzZXQpKTsKICAgICAgICAg
ICAgICAgICBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuYWRkKGJhc2VPZmZzZXRrZXksIFZlY3RvcjxW
YWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQodmFsdWUpOwogICAgICAgICAgICAgICAg
IHZhbHVlVG9JbmRleC5hZGQodmFsdWUsIGluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoIWJh
c2VUb01lbW9yaWVzLmNvbnRhaW5zKGxlZnQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDogYmFzZVRvTWVtb3Jp
ZXMuZ2V0KGxlZnQpKQotICAgICAgICAgICAgICAgICAgICBwb3N0SW5kZXhDYW5kaWRhdGVzLmFk
ZChtZW1vcnksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoYmFzZVRvTG9hZC5jb250YWlu
cyhsZWZ0KSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkg
OiBiYXNlVG9Mb2FkLmdldChsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RJbmRl
eExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGJhc2VUb1N0b3JlLmNvbnRhaW5zKGxlZnQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6IGJhc2VUb1N0b3JlLmdldChs
ZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRlcy5h
ZGQobWVtb3J5LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfTsKIAog
ICAgICAgICAgICAgdHJ5UG90ZW50aWFsUG9zdEluZGV4QWRkcmVzcygpOwpAQCAtMTMwLDYgKzE3
NiwxMSBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJv
YykKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJhc2ljQmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3Jk
ZXIoKSkgewogICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBiYXNpY0Jsb2NrLT5zaXpl
KCk7ICsraW5kZXgpIHsKICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGJhc2ljQmxvY2stPmF0
KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChCM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRz
Ojp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAg
ICAgIkxvb2tpbmcgYXQgIiwgKmJhc2ljQmxvY2ssICIgIyIsIGluZGV4LCAiOiAiLAorICAgICAg
ICAgICAgICAgICAgICBkZWVwRHVtcChwcm9jLCBiYXNpY0Jsb2NrLT5hdChpbmRleCkpLCAiXG4i
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRyeVByZVBvc3RJbmRleCh2YWx1ZSk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xMzksMTQgKzE5MCwxNCBAQCBib29sIGNhbm9uaWNhbGl6ZVBy
ZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgIHx8IChkb21pbmF0
b3JzLmRvbWluYXRlcyh2Mi0+b3duZXIsIHYxLT5vd25lcikgJiYgYmFja3dhcmRzRG9taW5hdG9y
cy5kb21pbmF0ZXModjEtPm93bmVyLCB2Mi0+b3duZXIpKTsKICAgICB9OwogCi0gICAgYXV0byBk
ZXRlY3QgPSBbJl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IGNhbmRpZGF0ZXMpIHsK
KyAgICBhdXRvIGRldGVjdEluY3JlbWVudExvYWQgPSBbJl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUq
LCBWYWx1ZSo+IGNhbmRpZGF0ZXMpIHsKICAgICAgICAgZm9yIChhdXRvIGl0ciA9IGNhbmRpZGF0
ZXMuYmVnaW4oKTsgaXRyICE9IGNhbmRpZGF0ZXMuZW5kKCk7ICsraXRyKSB7CiAgICAgICAgICAg
ICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gaXRyLT5rZXk7CiAgICAgICAgICAgICBWYWx1ZSogYWRk
cmVzcyA9IGl0ci0+dmFsdWU7CiAgICAgICAgICAgICBpZiAoaWdub3JlZFZhbHVlcy5jb250YWlu
cyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xF
cXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzID09IHByZUluZGV4Q2FuZGlkYXRlcykgeworICAg
ICAgICAgICAgaWYgKGNhbmRpZGF0ZXMgPT0gcHJlSW5kZXhMb2FkQ2FuZGlkYXRlcykgewogICAg
ICAgICAgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNz
ID0gQWRkKGJhc2UsIG9mZnNldCkKICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCiAgICAgICAg
ICAgICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgpAQCAtMTYy
LDYgKzIxMyw0NSBAQCBib29sIGNhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzKFByb2NlZHVy
ZSYgcHJvYykKICAgICAgICAgICAgICAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAg
IC0tPiAgLi4uCiAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0ID0gQ29uc3RhbnQgICAgICAgICAg
ICAgICAgIG9mZnNldCA9IElkZW50aXR5KG5ld09mZnNldCkKICAgICAgICAgICAgICAgICAvLyBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0Fk
ZHJlc3MpCisgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sRXF1aXZhbGVudChtZW1vcnksIGFk
ZHJlc3MtPmNoaWxkKDEpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbWVtb3J5SW5kZXggPSB2YWx1ZVRvSW5kZXguZ2V0KG1lbW9yeSk7
CisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld09mZnNldCA9IGluc2VydGlvblNldC5pbnNlcnQ8
Q29uc3Q2NFZhbHVlPihtZW1vcnlJbmRleCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hp
bGQoMSktPmFzSW50KCkpOworICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obWVtb3J5SW5kZXgsIEFkZCwgbWVtb3J5LT5vcmlnaW4o
KSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09mZnNldCk7CisgICAgICAgICAgICAgICAgYWRkcmVz
cy0+Y2hpbGQoMSktPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3T2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld0FkZHJlc3MpOworICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKG1lbW9yeS0+b3duZXIpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAgICAgICAg
IGlnbm9yZWRWYWx1ZXMuYWRkKG1lbW9yeSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZGV0
ZWN0SW5jcmVtZW50TG9hZChwcmVJbmRleExvYWRDYW5kaWRhdGVzKTsKKyAgICBkZXRlY3RJbmNy
ZW1lbnRMb2FkKHBvc3RJbmRleExvYWRDYW5kaWRhdGVzKTsKKworICAgIGF1dG8gZGV0ZWN0SW5j
cmVtZW50U3RvcmUgPSBbJl0gKEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+IGNhbmRpZGF0
ZXMpIHsKKyAgICAgICAgZm9yIChhdXRvIGl0ciA9IGNhbmRpZGF0ZXMuYmVnaW4oKTsgaXRyICE9
IGNhbmRpZGF0ZXMuZW5kKCk7ICsraXRyKSB7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVt
b3J5ID0gaXRyLT5rZXk7CisgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IGl0ci0+dmFsdWU7
CisgICAgICAgICAgICBpZiAoaWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9y
ZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwg
YWRkcmVzcykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChj
YW5kaWRhdGVzID09IHByZUluZGV4U3RvcmVDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAgICAg
Ly8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAgICAgLy8gbWVtb3J5
ID0gU3RvcmUodmFsdWUsIGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgICAgICBpZiAodmFsdWVU
b0luZGV4LmdldChhZGRyZXNzKSArIDEgIT0gdmFsdWVUb0luZGV4LmdldChtZW1vcnkpKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdPZmZz
ZXQgPSBDb25zdGFudAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCisgICAgICAg
ICAgICAgICAgLy8gbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApICAgICAgICBtZW1vcnkg
PSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkKKyAgICAgICAgICAgICAgICAvLyAuLi4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtLT4gIC4uLgorICAgICAgICAgICAgICAgIC8vIG9mZnNldCA9
IENvbnN0YW50ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gSWRlbnRpdHkobmV3T2Zmc2V0
KQorICAgICAgICAgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAg
ICAgYWRkcmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCisgICAgICAgICAgICAgICAgaWYgKCFj
b250cm9sRXF1aXZhbGVudChtZW1vcnksIGFkZHJlc3MtPmNoaWxkKDEpKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbWVtb3J5SW5kZXgg
PSB2YWx1ZVRvSW5kZXguZ2V0KG1lbW9yeSk7CiAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld09m
ZnNldCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihtZW1vcnlJbmRleCwgbWVt
b3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50KCkpOwogICAgICAgICAgICAg
ICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obWVtb3J5
SW5kZXgsIEFkZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09mZnNl
dCk7CkBAIC0xNzUsOCArMjY1LDggQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50
cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgZGV0ZWN0KHByZUlu
ZGV4Q2FuZGlkYXRlcyk7Ci0gICAgZGV0ZWN0KHBvc3RJbmRleENhbmRpZGF0ZXMpOworICAgIGRl
dGVjdEluY3JlbWVudFN0b3JlKHByZUluZGV4U3RvcmVDYW5kaWRhdGVzKTsKKyAgICBkZXRlY3RJ
bmNyZW1lbnRTdG9yZShwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXMpOwogICAgIHJldHVybiB0cnVl
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDRh
M2Y5MjZmMTA0NGM2NmEzYmE4NTU1ZjIxNWViMjhiZTkxN2MwOWIuLjM1MjcwNzQzZTU5YmQwZjA4
OWI0ODdjMzdlYjRmMTc1NmQwOWIyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCkBAIC0yNTc4LDE3ICsyNTc4LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIC8vIFByZS1JbmRleCBDYW5vbmljYWwgRm9ybToKLSAgICAgICAg
ICAgIC8vICAgICBhZGRyZXNzID0gYWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgIC8vICAg
ICBtZW1vcnkgPSBsb2FkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNz
ID0gYWRkKGJhc2UsIG9mZnNldCkgICAgLS0tPiAgIE1vdmUgJWJhc2UgJWFkZHJlc3MKKyAgICAg
ICAgICAgIC8vICAgICBtZW1vcnkgPSBsb2FkKGJhc2UsIG9mZnNldCkgICAgICAgICAgIE1vdmVX
aXRoSW5jcmVtZW50ICglYWRkcmVzcywgcHJlZml4KG9mZnNldCkpICVtZW1vcnkKICAgICAgICAg
ICAgIC8vIFBvc3QtSW5kZXggQ2Fub25pY2FsIEZvcm06Ci0gICAgICAgICAgICAvLyAgICAgbWVt
b3J5ID0gbG9hZChiYXNlLCAwKQotICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFz
ZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBhZGQoYmFzZSwgb2Zmc2V0
KSAgICAtLS0+ICAgTW92ZSAlYmFzZSAlYWRkcmVzcworICAgICAgICAgICAgLy8gICAgIG1lbW9y
eSA9IGxvYWQoYmFzZSwgMCkgICAgICAgICAgICAgICAgTW92ZVdpdGhJbmNyZW1lbnQgKCVhZGRy
ZXNzLCBwb3NmaXgob2Zmc2V0KSkgJW1lbW9yeQogICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRJ
bmNyZW1lbnRBZGRyZXNzID0gWyZdICgpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgIEFpcjo6
T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92
ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT50eXBlKCkpOwogICAgICAgICAgICAgICAgIGlmICgh
aXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlByZUluZGV4LCBBcmc6OlRtcCkgfHwgIW1faW5kZXgp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBWYWx1
ZSogYWRkcmVzcyA9IG1fYmxvY2stPmF0KG1faW5kZXggLSAxKTsKLSAgICAgICAgICAgICAgICBp
ZiAoYWRkcmVzcy0+b3Bjb2RlKCkgIT0gQWRkIHx8IGFkZHJlc3MtPnR5cGUoKSAhPSBJbnQ2NCkK
KyAgICAgICAgICAgICAgICBpZiAobV9sb2NrZWQuY29udGFpbnMoYWRkcmVzcykgfHwgYWRkcmVz
cy0+b3Bjb2RlKCkgIT0gQWRkIHx8IGFkZHJlc3MtPnR5cGUoKSAhPSBJbnQ2NCkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzLT5j
aGlsZCgwKSAhPSBtZW1vcnktPmxhc3RDaGlsZCgpIHx8ICFhZGRyZXNzLT5jaGlsZCgxKS0+aGFz
SW50UHRyKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM0MzAsNiAr
MzQzMCw0NiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTdG9yZTogewor
ICAgICAgICAgICAgLy8gUHJlLUluZGV4IENhbm9uaWNhbCBGb3JtOgorICAgICAgICAgICAgLy8g
ICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgT2Zmc2V0KSAgICAgICAgICAgICAgLS0tPiAgICBNb3Zl
ICViYXNlICVhZGRyZXNzCisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUs
IGJhc2UsIE9mZnNldCkgICAgICAgICAgICAgIE1vdmVXaXRoSW5jcmVtZW50ICV2YWx1ZSAoJWFk
ZHJlc3MsIHByZWZpeChvZmZzZXQpKQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBDYW5vbmlj
YWwgRm9ybToKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIE9mZnNldCkg
ICAgICAgICAgICAgIC0tLT4gICAgTW92ZSAlYmFzZSAlYWRkcmVzcworICAgICAgICAgICAgLy8g
ICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKSAgICAgICAgICAgICAgICAgICBNb3Zl
V2l0aEluY3JlbWVudCAldmFsdWUgKCVhZGRyZXNzLCBwb3N0Zml4KG9mZnNldCkpCisgICAgICAg
ICAgICBhdXRvIHRyeUFwcGVuZEluY3JlbWVudEFkZHJlc3MgPSBbJl0gKCkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpOworICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZv
clR5cGUoTW92ZVdpdGhJbmNyZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgbWVtb3J5LT5j
aGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29k
ZSwgQXJnOjpQcmVJbmRleCwgQXJnOjpUbXApIHx8ICFtX2luZGV4KQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtX2Js
b2NrLT5hdChtX2luZGV4IC0gMSk7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRh
aW5zKGFkZHJlc3MpIHx8IGFkZHJlc3MtPm9wY29kZSgpICE9IEFkZCB8fCBhZGRyZXNzLT50eXBl
KCkgIT0gSW50NjQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBpZiAoYWRkcmVzcy0+Y2hpbGQoMCkgIT0gbWVtb3J5LT5jaGlsZCgxKSB8fCAhYWRk
cmVzcy0+Y2hpbGQoMSktPmhhc0ludFB0cigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gYWRkcmVzcy0+Y2hpbGQo
MSktPmFzSW50UHRyKCk7CisgICAgICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxP
ZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0IHx8ICFBcmc6OmlzVmFsaWRQb3N0SW5k
ZXhGb3JtKHNtYWxsT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICAgICAgQXJnIGluY3JlbWVudEFyZyA9IEFyZygpOworICAgICAgICAgICAg
ICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzbWFs
bE9mZnNldCA9PSBtZW1vcnktPm9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5j
cmVtZW50QXJnID0gQXJnOjpwcmVJbmRleCh0bXAoYWRkcmVzcyksIHNtYWxsT2Zmc2V0KTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50QXJnID0g
QXJnOjpwb3N0SW5kZXgodG1wKGFkZHJlc3MpLCBzbWFsbE9mZnNldCk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoaW5jcmVtZW50QXJnKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChyZWxh
eGVkTW92ZUZvclR5cGUoYWRkcmVzcy0+dHlwZSgpKSwgdG1wKGFkZHJlc3MtPmNoaWxkKDApKSwg
dG1wKGFkZHJlc3MpKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKG1l
bW9yeS0+Y2hpbGQoMCkpLCBpbmNyZW1lbnRBcmcpOworICAgICAgICAgICAgICAgICAgICBtX2xv
Y2tlZC5hZGQoYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kSW5jcmVtZW50QWRkcmVzcygpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgVmFsdWUqIHZhbHVlVG9TdG9yZSA9
IG1fdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwodmFsdWVU
b1N0b3JlKSkgewogICAgICAgICAgICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IDlhYTQwZDEyMWVlNGVjZjI2ZTk0ZjdlNTlmYjE0Zjkz
NWJlYTljYjIuLmUxNzFhY2Y1NWUzNjcwZjg5MWYxNWJhOGYyMGM2Y2RjMWMxODY5MmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTExNjgsNCArMTE2OCw5IEBAIHZvaWQgdGVzdExv
YWRQcmVJbmRleDY0KCk7CiB2b2lkIHRlc3RMb2FkUG9zdEluZGV4MzIoKTsKIHZvaWQgdGVzdExv
YWRQb3N0SW5kZXg2NCgpOwogCit2b2lkIHRlc3RTdG9yZVByZUluZGV4MzIoKTsKK3ZvaWQgdGVz
dFN0b3JlUHJlSW5kZXg2NCgpOwordm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXgzMigpOwordm9pZCB0
ZXN0U3RvcmVQb3N0SW5kZXg2NCgpOworCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IDUwNWZkNjM5MDNjZThmMjI0MmRlNjAz
NjMyODkyOTBjYTg4MTlhNzMuLjBmNDdlOWUyNjI5ZDk2NjQ3NzliZjVkMTUzNTBlYWY0MmFjOWI4
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApAQCAtMzIxLDYgKzMyMSwx
MTMgQEAgdm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCkKICAgICBDSEVDS19FUShpbnZva2U8aW50
NjRfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHRlc3QoKSk7CiB9CiAK
K3ZvaWQgdGVzdFN0b3JlUHJlSW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9
IHsgMSwgMiwgMyB9OworICAgIGludDMyX3QqIHB0ciA9ICZudW1zWzFdOworCisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
IFZhbHVlKiBhZGRyZXNzID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiB2YWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgVmFsdWUqIG9mZnNldCA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA0KTsKKyAgICBWYWx1ZSogcHJlSW5j
cmVtZW50ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhZGRy
ZXNzLCBvZmZzZXQpOworICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgU3Rv
cmUsIE9yaWdpbigpLCB2YWx1ZSwgcHJlSW5jcmVtZW50KTsKKyAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcHJlSW5jcmVtZW50KTsKKworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiIzRdISIpOworICAgIGludHB0cl90IHJl
cyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwg
NCk7CisgICAgcHRyID0gYml0d2lzZV9jYXN0PGludDMyX3QqPihyZXMpOworICAgIENIRUNLX0VR
KG51bXNbMl0sICpwdHIpOworfQorCit2b2lkIHRlc3RTdG9yZVByZUluZGV4NjQoKQoreworICAg
IGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnQ2NF90KiBwdHIgPSAm
bnVtc1sxXTsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBw
cm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYWRkcmVzcyA9IHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICBWYWx1ZSogdmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgVmFsdWUqIG9mZnNldCA9
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KTsKKyAgICBW
YWx1ZSogcHJlSW5jcmVtZW50ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9y
aWdpbigpLCBhZGRyZXNzLCBvZmZzZXQpOworICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLCB2YWx1ZSwgcHJlSW5jcmVtZW50KTsKKyAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcHJlSW5jcmVt
ZW50KTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGludHB0cl90
IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRy
KSwgNCk7CisgICAgcHRyID0gYml0d2lzZV9jYXN0PGludDY0X3QqPihyZXMpOworICAgIENIRUNL
X0VRKG51bXNbMl0sICpwdHIpOworfQorCit2b2lkIHRlc3RTdG9yZVBvc3RJbmRleDMyKCkKK3sK
KyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVy
bjsKKworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJfdCogcHRy
ID0gJm51bXNbMV07CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIGFkZHJlc3MgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
cHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICBy
b290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgdmFsdWUs
IGFkZHJlc3MpOworICAgIFZhbHVlKiBvZmZzZXQgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgNCk7CisgICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVzcywgb2Zmc2V0KTsK
KyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
cHJlSW5jcmVtZW50KTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAg
IGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwg
IzQiKTsKKyAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOworICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQzMl90
Kj4ocmVzKTsKKyAgICBDSEVDS19FUShudW1zWzFdLCA0KTsKKyAgICBDSEVDS19FUShudW1zWzJd
LCAqcHRyKTsKK30KKwordm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpCit7CisgICAgaWYgKE9w
dGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBp
bnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAgIGludDY0X3QqIHB0ciA9ICZudW1zWzFd
OworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKworICAgIFZhbHVlKiBhZGRyZXNzID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZh
bHVlKiB2YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgdmFsdWUsIGFkZHJlc3MpOworICAgIFZhbHVl
KiBvZmZzZXQgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
OCk7CisgICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQWRkLCBPcmlnaW4oKSwgYWRkcmVzcywgb2Zmc2V0KTsKKyAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcHJlSW5jcmVtZW50KTsKKworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzgiKTsKKyAgICBpbnRwdHJfdCBy
ZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciks
IDQpOworICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4ocmVzKTsKKyAgICBDSEVDS19F
UShudW1zWzFdLCA0KTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKK30KIAogdm9pZCB0
ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm8zMigpCiB7CkBAIC0zOTk0LDYgKzQxMDEsMTEg
QEAgdm9pZCBhZGRTaHJUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsK
ICAgICBSVU4odGVzdExvYWRQb3N0SW5kZXgzMigpKTsKICAgICBSVU4odGVzdExvYWRQb3N0SW5k
ZXg2NCgpKTsKKworICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0
U3RvcmVQcmVJbmRleDY0KCkpOworICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXgzMigpKTsKKyAg
ICBSVU4odGVzdFN0b3JlUG9zdEluZGV4NjQoKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435124</attachid>
            <date>2021-08-07 02:37:22 -0700</date>
            <delta_ts>2021-08-09 20:18:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228538-20210807043721.patch</filename>
            <type>text/plain</type>
            <size>25155</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
ZWE3ZTQyOGZhOTM2NGRlYzNiNDYwNTJhOTQxMDA0ZjA5MzUwMTRlLi4xNjVhNDkzMzQ3NDJkMjIx
ZDEzMmJhYjU3ZTljNzk0YTBmMzRhMDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzEgQEAKKzIwMjEtMDgtMDcgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIFtBUk02NF0gQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2Rl
IHRvIEFpciBmb3IgQVJNNjQgKFN0b3JlIEluc3RydWN0aW9uKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4NTM4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHByZXZpb3VzIHBhdGNoIGhhcyBpbnRy
b2R1Y2VkIHRoZSBwcmUvcG9zdC1pbmRleCBhZGRyZXNzIG1vZGUgZm9yIExvYWQgaW5zdHJ1Y3Rp
b24sCisgICAgICAgIHdoaWNoIGJlbmVmaXRzIGxvb3AgcHJvZ3JhbS4gSGVyZSwgdGhpcyBwYXRj
aCBhZGRzIHRoZSBjb3JyZXNwb25kaW5nIG1vZGUgZm9yIFN0b3JlCisgICAgICAgIGluc3RydWN0
aW9uLiBTdG9yZSBSZWdpc3RlciAoaW1tZWRpYXRlKSBzdG9yZXMgYSB3b3JkIG9yIGEgZG91Ymxl
d29yZCBmcm9tIGEgcmVnaXN0ZXIKKyAgICAgICAgdG8gbWVtb3J5LiBUaGUgYWRkcmVzcyB0aGF0
IGlzIHVzZWQgZm9yIHRoZSBzdG9yZSBpcyBjYWxjdWxhdGVkIGZyb20gYSBiYXNlIHJlZ2lzdGVy
CisgICAgICAgIGFuZCBhbiBpbW1lZGlhdGUgb2Zmc2V0LgorCisgICAgICAgICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFByZS1JbmRleCBBZGRyZXNz
IE1vZGUgRm9yIFN0b3JlICMjCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCisKKyAgICAgICAgU1RSIFd0LCBbWG4sICNpbW1dIQorCisgICAgICAgIEluIEIz
IFJlZHVjdGlvbiBTdHJlbmd0aCwgc2luY2Ugd2UgaGF2ZSB0aGlzIHJlZHVjdGlvbiBydWxlOgor
ICAgICAgICAgICAgVHVybnMgdGhpczogU3RvcmUodmFsdWUsIEFkZChhZGRyZXNzLCBvZmZzZXQx
KSwgb2Zmc2V0ID0gb2Zmc2V0MikKKyAgICAgICAgICAgIEludG8gdGhpczogU3RvcmUodmFsdWUs
IGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorCisgICAgICAgIFRoZSBlcXVp
dmFsZW50IHBhdHRlcm4gaXM6CisgICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNl
dCkKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJh
c2UsIG9mZnNldCkKKworICAgICAgICBIZXJlLCB3ZSBvbmx5IGNvbnNpZGVyIHRoZSBwYXR0ZXJu
OgorICAgICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICBt
ZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgb2Zmc2V0KQorCisgICAgICAgIEFuZCwgdGhpcyBw
YXRjaCBkaXJlY3RseSB0cmVhdCBpdCBhcyB0aGUgY2Fub25pY2FsIGZvcm0uIElkZWFsbHksIHdl
IHNob3VsZCBtb3ZlIAorICAgICAgICBtZW1vcnkgdG8ganVzdCBhZnRlciB0aGUgYWRkcmVzcyBs
aWtlIHdoYXQgd2UgZGlkIGZvciBQcmVJbmRleCBMb2FkIGluIHRoZSBwcmV2aW91cyAKKyAgICAg
ICAgcGF0Y2guIEJ1dCwgd2UgY2Fubm90IHByb3ZpZGUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoYXQg
c2luY2UgdGhlIHZhbHVlIG1heSBiZSAKKyAgICAgICAgdXNlZCBiZXR3ZWVuIGFkZHJlc3MgYW5k
IG1lbW9yeS4gVG8gbW92ZSB2YWx1ZSB1cHdhcmQsIHdlIG11c3QgbW92ZSBhbGwgZGVzY2VuZGFu
dHMgCisgICAgICAgIG9mIHZhbHVlIGFsb25nIHdpdGggaXQgdG8gcHJldmVudCBCMyBJUiBpbmRl
eCB2aW9sYXRpb25zLCB3aGljaCBpcyByaXNreS4KKworICAgICAgICBOZXh0LCBsb3dlciB0byBB
aXI6CisgICAgICAgICAgICBNb3ZlICViYXNlLCAlYWRkcmVzcworICAgICAgICAgICAgTW92ZSAl
dmFsdWUsICglYWRkcmVzcywgcHJlZml4KG9mZnNldCkpCisKKyAgICAgICAgIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyMgUG9zdC1JbmRleCBBZGRyZXNz
IE1vZGUgRm9yIExvYWQgIyMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKKworICAgICAgICBTVFIgV3QsIFtYbl0sICNpbW0KKworICAgICAgICBUaGVuLCB0
aGUgZXF1aXZhbGVudCBwYXR0ZXJuIGlzOgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFs
dWUsIGJhc2UsIDApCisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIGFkZHJlc3MgPSBBZGQo
YmFzZSwgb2Zmc2V0KQorCisgICAgICAgIEZpcnN0LCB3ZSBjb252ZXJ0IGl0IHRvIHRoZSBjYW5v
bmljYWwgZm9ybToKKyAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgICAgICAg
ICBuZXdBZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIG1lbW9yeSA9IFN0
b3JlKHZhbHVlLCBiYXNlLCAwKSAvLyBtb3ZlIHRoZSBvZmZzZXQgYW5kIGFkZHJlc3MgdG8ganVz
dCBiZWZvcmUgdGhlIG1lbW9yeQorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBvZmZzZXQg
PSBJZGVudGl0eShuZXdPZmZzZXQpCisgICAgICAgICAgICBhZGRyZXNzID0gSWRlbnRpdHkobmV3
QWRkcmVzcykKKworICAgICAgICBOZXh0LCBsb3dlciB0byBBaXI6CisgICAgICAgICAgICBNb3Zl
ICViYXNlLCAlbmV3QWRkcmVzcworICAgICAgICAgICAgTW92ZSAldmFsdWUsICglbmV3QWRkcmVz
cywgcG9zdGZpeChvZmZzZXQpKQorCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyMgVGVzdCBmb3IgUHJlL1Bvc3QtSW5jcmVt
ZW50IEFkZHJlc3MgTW9kZSAjIworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgQjMgSVI6CisgICAgICAgIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBJbnQ2
NCBiQDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludDY0IGJAMSA9IEFyZ3VtZW50UmVn
KCV4MSkKKyAgICAgICAgSW50NjQgYkAyID0gQ29uc3Q2NCg4KQorICAgICAgICBJbnQ2NCBiQDMg
PSBBZGQoYkAwLCAkOChiQDIpKQorICAgICAgICBWb2lkICBiQDQgPSBTdG9yZShiQDEsIGJAMywg
Q29udHJvbERlcGVuZGVudHxXcml0ZXM6VG9wKQorICAgICAgICBWb2lkICBiQDUgPSBSZXR1cm4o
YkAzLCBUZXJtaW5hbCkKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVy9PIFByZS1JbmNyZW1lbnQgQWRkcmVz
cyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAgICAgTW92ZSAgJXgwLCAleDIsICAgICAgYkAwCisgICAgICAg
IEFkZDY0ICAkOCwgJXgyLCAleDAsIGJAMworICAgICAgICBNb3ZlICAleDEsIDgoJXgyKSwgICBi
QDQKKyAgICAgICAgUmV0NjQgJXgwLCAgICAgICAgICAgYkA1CisgICAgICAgIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcv
IFByZS1JbmNyZW1lbnQgQWRkcmVzcyBNb2RlOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgTW92ZVdpdGhJbmNy
ZW1lbnQ2NCAleDEsICgleDAsUHJlKCQ4KSksIGJANAorICAgICAgICBSZXQ2NCAgICAgICAgICAg
ICAgICV4MCwgICAgICAgICAgICAgICAgYkA1CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyAgICAgICAgQjMgSVI6Cisg
ICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgICAgICBJbnQ2NCBiQDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludDY0
IGJAMSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAgICAgICAgVm9pZCAgYkAyID0gU3RvcmUoYkAxLCBi
QDAsIENvbnRyb2xEZXBlbmRlbnR8V3JpdGVzOlRvcCkKKyAgICAgICAgSW50NjQgYkAzID0gQ29u
c3Q2NCg4KQorICAgICAgICBJbnQ2NCBiQDQgPSBBZGQoYkAwLCAkOChiQDMpKQorICAgICAgICBW
b2lkICBiQDUgPSBSZXR1cm4oYkA0LCBUZXJtaW5hbCkKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVy9PIFBv
c3QtSW5jcmVtZW50IEFkZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIE1vdmUgICV4MSwgKCV4
MCksICAgICAgYkAyCisgICAgICAgIEFkZDY0ICAkOCwgICAleDAsICV4MCwgYkA0CisgICAgICAg
IFJldDY0ICV4MCwgICAgICAgICAgICAgYkA1CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvIFBvc3QtSW5j
cmVtZW50IEFkZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIE1vdmVXaXRoSW5jcmVtZW50NjQg
JXgxLCAoJXgwLFBvc3QoJDgpKSwgYkAyCisgICAgICAgIFJldDY0ICAgICAgICAgICAgICAgJXgw
LCAgICAgICAgICAgICAgICAgYkA1CisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICogYjMvQjNDYW5vbmljYWxp
emVQcmVQb3N0SW5jcmVtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpjYW5vbmljYWxpemVQ
cmVQb3N0SW5jcmVtZW50cyk6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAg
ICAgKiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgICh0
ZXN0U3RvcmVQcmVJbmRleDMyKToKKyAgICAgICAgKHRlc3RTdG9yZVByZUluZGV4NjQpOgorICAg
ICAgICAodGVzdFN0b3JlUG9zdEluZGV4MzIpOgorICAgICAgICAodGVzdFN0b3JlUG9zdEluZGV4
NjQpOgorICAgICAgICAoYWRkU2hyVGVzdHMpOgorCiAyMDIxLTA4LTA2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4IG9u
IERlYnVnIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5v
bmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKaW5kZXggYjM3NDMxZmFhYTdkMGM3
MTRjMzQxZjBmMTRhYjhmYjAxMjExZTI0MC4uZWNkOTYwYmU5OGFlNDE1ZDU5ZTRlYTIwYmRhNjM4
ODEzYzAzMTA1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25p
Y2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLmNwcApAQCAtNDMsNiArNDMsMTAgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKK25hbWVzcGFjZSBCM0Nhbm9uaWNh
bGl6ZVByZVBvc3RJbmNyZW1lbnRzIHsKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7Cit9CisKIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJl
JiBwcm9jKQogewogICAgIGlmICghaXNBUk02NCgpKQpAQCAtNTcsMjYgKzYxLDMxIEBAIGJvb2wg
Y2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgIERvbWlu
YXRvcnMmIGRvbWluYXRvcnMgPSBwcm9jLmRvbWluYXRvcnMoKTsKICAgICBCYWNrd2FyZHNEb21p
bmF0b3JzJiBiYWNrd2FyZHNEb21pbmF0b3JzID0gcHJvYy5iYWNrd2FyZHNEb21pbmF0b3JzKCk7
CiAKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb0xvYWQ7
CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcHJlSW5kZXhMb2FkQ2FuZGlkYXRl
czsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhMb2FkQ2FuZGlk
YXRlczsKKworICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4gYmFzZVRv
U3RvcmU7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcHJlSW5kZXhTdG9yZUNh
bmRpZGF0ZXM7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4U3Rv
cmVDYW5kaWRhdGVzOworCiAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmVjdG9yPFZhbHVlKj4+IGJh
c2VPZmZzZXRUb0FkZHJlc3NlczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBw
cmVJbmRleENhbmRpZGF0ZXM7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxNZW1vcnlWYWx1
ZSo+PiBiYXNlVG9NZW1vcmllczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBw
b3N0SW5kZXhDYW5kaWRhdGVzOwogICAgIEhhc2hNYXA8VmFsdWUqLCB1bnNpZ25lZD4gdmFsdWVU
b0luZGV4OwogICAgIEluZGV4U2V0PFZhbHVlKj4gaWdub3JlZFZhbHVlczsKIAotICAgIC8vIFBy
ZS1JbmRleCBQYXR0ZXJuOgotICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkK
LSAgICAvLyAgICAgLi4uCi0gICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQot
ICAgIC8vIFBvc3QtSW5kZXggUGF0dGVybjoKLSAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNl
LCAwKQotICAgIC8vICAgICAuLi4KLSAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpCiAgICAgYXV0byB0cnlQcmVQb3N0SW5kZXggPSBbJl0gKFZhbHVlKiB2YWx1ZSkgewogICAg
ICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewogICAgICAgICBjYXNlIExvYWQ6IHsKICAg
ICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7
CiAKKyAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJuOgorICAgICAgICAgICAgLy8gICAg
IGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIC4uLgorICAg
ICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
Ly8gUG9zdC1JbmRleCBQYXR0ZXJuOgorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IExvYWQo
YmFzZSwgMCkKKyAgICAgICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgICAgIC8vICAgICBhZGRy
ZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKICAgICAgICAgICAgIGF1dG8gdHJ5UHJlUG9zdEluZGV4
TWVtb3J5ID0gWyZdICgpIHsKICAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT50eXBlKCkgIT0g
SW50MzIgJiYgbWVtb3J5LT50eXBlKCkgIT0gSW50NjQpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTg3LDkgKzk2LDQyIEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVu
dHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2VPZmZzZXRU
b0FkZHJlc3Nlcy5jb250YWlucyhiYXNlT2Zmc2V0a2V5KSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogYWRkcmVzcyA6IGJh
c2VPZmZzZXRUb0FkZHJlc3Nlcy5nZXQoYmFzZU9mZnNldGtleSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBwcmVJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgYWRkcmVzcyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwcmVJbmRleExvYWRDYW5kaWRhdGVzLmFkZChtZW1vcnksIGFkZHJl
c3MpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBiYXNlVG9M
b2FkLmFkZChtZW1vcnktPmxhc3RDaGlsZCgpLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgdmFsdWVUb0luZGV4
LmFkZCh2YWx1ZSwgaW5kZXgpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdHJ5UHJl
UG9zdEluZGV4TWVtb3J5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisKKyAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJu
OgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAg
ICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVl
LCBiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46CisgICAg
ICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCisgICAgICAgICAg
ICAvLyAgICAgLi4uCisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZz
ZXQpCisgICAgICAgICAgICBhdXRvIHRyeVByZVBvc3RJbmRleE1lbW9yeSA9IFsmXSAoKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+Y2hpbGQoMCktPnR5cGUoKSAhPSBJbnQzMiAmJiBt
ZW1vcnktPmNoaWxkKDApLT50eXBlKCkgIT0gSW50NjQpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5jaGlsZCgwKS0+aGFzSW50KCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5v
ZmZzZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNWYWxpZFByZUluZGV4
Rm9ybShtZW1vcnktPm9mZnNldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9mZnNldGtleSA9IFZhbHVlS2V5KG1l
bW9yeS0+Y2hpbGQoMCksIHN0YXRpY19jYXN0PGludDY0X3Q+KG1lbW9yeS0+b2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuY29udGFpbnMo
YmFzZU9mZnNldGtleSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoVmFsdWUqIGFkZHJlc3MgOiBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMu
Z2V0KGJhc2VPZmZzZXRrZXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlSW5kZXhTdG9y
ZUNhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgYWRkcmVzcyk7CiAgICAgICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VUb01lbW9yaWVzLmFkZChtZW1vcnktPmNoaWxkKDAp
LCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7
CisgICAgICAgICAgICAgICAgICAgIGJhc2VUb1N0b3JlLmFkZChtZW1vcnktPmNoaWxkKDEpLCBW
ZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CiAg
ICAgICAgICAgICAgICAgdmFsdWVUb0luZGV4LmFkZCh2YWx1ZSwgaW5kZXgpOwogICAgICAgICAg
ICAgfTsKIApAQCAtMTEyLDEwICsxNTQsMTQgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5j
cmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgICAgICAgICAgVmFsdWVLZXkgYmFzZU9m
ZnNldGtleSA9IFZhbHVlS2V5KGxlZnQsIHN0YXRpY19jYXN0PGludDY0X3Q+KHNtYWxsT2Zmc2V0
KSk7CiAgICAgICAgICAgICAgICAgYmFzZU9mZnNldFRvQWRkcmVzc2VzLmFkZChiYXNlT2Zmc2V0
a2V5LCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHZhbHVlKTsKICAg
ICAgICAgICAgICAgICB2YWx1ZVRvSW5kZXguYWRkKHZhbHVlLCBpbmRleCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFiYXNlVG9NZW1vcmllcy5jb250YWlucyhsZWZ0KSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1lbW9yeSA6
IGJhc2VUb01lbW9yaWVzLmdldChsZWZ0KSkKLSAgICAgICAgICAgICAgICAgICAgcG9zdEluZGV4
Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGJhc2VU
b0xvYWQuY29udGFpbnMobGVmdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChNZW1vcnlW
YWx1ZSogbWVtb3J5IDogYmFzZVRvTG9hZC5nZXQobGVmdCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBwb3N0SW5kZXhMb2FkQ2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChiYXNlVG9TdG9yZS5jb250YWlucyhsZWZ0
KSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNl
VG9TdG9yZS5nZXQobGVmdCkpCisgICAgICAgICAgICAgICAgICAgICAgICBwb3N0SW5kZXhTdG9y
ZUNhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOworICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH07CiAKICAgICAgICAgICAgIHRyeVBvdGVudGlhbFBvc3RJbmRleEFkZHJlc3MoKTsK
QEAgLTEzMCw2ICsxNzYsMTEgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQ
cm9jZWR1cmUmIHByb2MpCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrIDogcHJvYy5i
bG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYmFz
aWNCbG9jay0+c2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBi
YXNpY0Jsb2NrLT5hdChpbmRleCk7CisgICAgICAgICAgICBpZiAoQjNDYW5vbmljYWxpemVQcmVQ
b3N0SW5jcmVtZW50czo6dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAg
ICAgICAgICAgICAgICAgICJMb29raW5nIGF0ICIsICpiYXNpY0Jsb2NrLCAiICMiLCBpbmRleCwg
IjogIiwKKyAgICAgICAgICAgICAgICAgICAgZGVlcER1bXAocHJvYywgYmFzaWNCbG9jay0+YXQo
aW5kZXgpKSwgIlxuIik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB0cnlQcmVQb3N0SW5k
ZXgodmFsdWUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTM5LDE0ICsxOTAsMTQgQEAgYm9vbCBj
YW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgICAg
ICB8fCAoZG9taW5hdG9ycy5kb21pbmF0ZXModjItPm93bmVyLCB2MS0+b3duZXIpICYmIGJhY2t3
YXJkc0RvbWluYXRvcnMuZG9taW5hdGVzKHYxLT5vd25lciwgdjItPm93bmVyKSk7CiAgICAgfTsK
IAotICAgIGF1dG8gZGV0ZWN0ID0gWyZdIChIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBj
YW5kaWRhdGVzKSB7CisgICAgYXV0byBkZXRlY3RJbmNyZW1lbnRMb2FkID0gWyZdIChIYXNoTWFw
PE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBjYW5kaWRhdGVzKSB7CiAgICAgICAgIGZvciAoYXV0byBp
dHIgPSBjYW5kaWRhdGVzLmJlZ2luKCk7IGl0ciAhPSBjYW5kaWRhdGVzLmVuZCgpOyArK2l0cikg
ewogICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IGl0ci0+a2V5OwogICAgICAgICAg
ICAgVmFsdWUqIGFkZHJlc3MgPSBpdHItPnZhbHVlOwogICAgICAgICAgICAgaWYgKGlnbm9yZWRW
YWx1ZXMuY29udGFpbnMobWVtb3J5KSB8fCBpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKGFkZHJlc3Mp
IHx8ICFjb250cm9sRXF1aXZhbGVudChtZW1vcnksIGFkZHJlc3MpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAoY2FuZGlkYXRlcyA9PSBwcmVJbmRleENhbmRp
ZGF0ZXMpIHsKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzID09IHByZUluZGV4TG9hZENhbmRp
ZGF0ZXMpIHsKICAgICAgICAgICAgICAgICAvLyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkg
ICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCiAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gIG5ld01lbW9yeSA9IExvYWQoYmFzZSwgb2Zm
c2V0KQogICAgICAgICAgICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuLi4KQEAgLTE2Miw2ICsyMTMsNDUgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVt
ZW50cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgICAgICAgICAgLy8gLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAtLT4gIC4uLgogICAgICAgICAgICAgICAgIC8vIG9mZnNldCA9IENvbnN0
YW50ICAgICAgICAgICAgICAgICBvZmZzZXQgPSBJZGVudGl0eShuZXdPZmZzZXQpCiAgICAgICAg
ICAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBJ
ZGVudGl0eShuZXdBZGRyZXNzKQorICAgICAgICAgICAgICAgIGlmICghY29udHJvbEVxdWl2YWxl
bnQobWVtb3J5LCBhZGRyZXNzLT5jaGlsZCgxKSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1lbW9yeUluZGV4ID0gdmFsdWVUb0luZGV4
LmdldChtZW1vcnkpOworICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4obWVtb3J5SW5kZXgsIG1lbW9yeS0+b3JpZ2luKCks
IGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludCgpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbmV3
QWRkcmVzcyA9IGluc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1lbW9yeUluZGV4LCBBZGQsIG1l
bW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDApLCBuZXdPZmZzZXQpOworICAgICAgICAg
ICAgICAgIGFkZHJlc3MtPmNoaWxkKDEpLT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld09mZnNldCk7
CisgICAgICAgICAgICAgICAgYWRkcmVzcy0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdBZGRyZXNz
KTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShtZW1vcnktPm93bmVyKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQoYWRkcmVzcyk7
CisgICAgICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChtZW1vcnkpOworICAgICAgICB9CisgICAg
fTsKKworICAgIGRldGVjdEluY3JlbWVudExvYWQocHJlSW5kZXhMb2FkQ2FuZGlkYXRlcyk7Cisg
ICAgZGV0ZWN0SW5jcmVtZW50TG9hZChwb3N0SW5kZXhMb2FkQ2FuZGlkYXRlcyk7CisKKyAgICBh
dXRvIGRldGVjdEluY3JlbWVudFN0b3JlID0gWyZdIChIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFs
dWUqPiBjYW5kaWRhdGVzKSB7CisgICAgICAgIGZvciAoYXV0byBpdHIgPSBjYW5kaWRhdGVzLmJl
Z2luKCk7IGl0ciAhPSBjYW5kaWRhdGVzLmVuZCgpOyArK2l0cikgeworICAgICAgICAgICAgTWVt
b3J5VmFsdWUqIG1lbW9yeSA9IGl0ci0+a2V5OworICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3Mg
PSBpdHItPnZhbHVlOworICAgICAgICAgICAgaWYgKGlnbm9yZWRWYWx1ZXMuY29udGFpbnMobWVt
b3J5KSB8fCBpZ25vcmVkVmFsdWVzLmNvbnRhaW5zKGFkZHJlc3MpIHx8ICFjb250cm9sRXF1aXZh
bGVudChtZW1vcnksIGFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICBpZiAoY2FuZGlkYXRlcyA9PSBwcmVJbmRleFN0b3JlQ2FuZGlkYXRlcykgeworICAg
ICAgICAgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAg
ICAgIC8vIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlVG9JbmRleC5nZXQoYWRkcmVzcykgKyAxICE9IHZhbHVlVG9JbmRleC5nZXQo
bWVtb3J5KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3T2Zmc2V0ID0gQ29uc3RhbnQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zm
c2V0KQorICAgICAgICAgICAgICAgIC8vIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKSAg
ICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCisgICAgICAgICAgICAgICAgLy8g
Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAuLi4KKyAgICAgICAgICAgICAg
ICAvLyBvZmZzZXQgPSBDb25zdGFudCAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IElkZW50
aXR5KG5ld09mZnNldCkKKyAgICAgICAgICAgICAgICAvLyBhZGRyZXNzID0gQWRkKGJhc2UsIG9m
ZnNldCkgICAgICAgICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQorICAgICAgICAg
ICAgICAgIGlmICghY29udHJvbEVxdWl2YWxlbnQobWVtb3J5LCBhZGRyZXNzLT5jaGlsZCgxKSkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG1lbW9yeUluZGV4ID0gdmFsdWVUb0luZGV4LmdldChtZW1vcnkpOwogICAgICAgICAgICAgICAg
IFZhbHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4obWVt
b3J5SW5kZXgsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludCgpKTsK
ICAgICAgICAgICAgICAgICBWYWx1ZSogbmV3QWRkcmVzcyA9IGluc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KG1lbW9yeUluZGV4LCBBZGQsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxk
KDApLCBuZXdPZmZzZXQpOwpAQCAtMTc1LDggKzI2NSw4IEBAIGJvb2wgY2Fub25pY2FsaXplUHJl
UG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGRldGVjdChwcmVJbmRleENhbmRpZGF0ZXMpOwotICAgIGRldGVjdChwb3N0SW5kZXhDYW5kaWRh
dGVzKTsKKyAgICBkZXRlY3RJbmNyZW1lbnRTdG9yZShwcmVJbmRleFN0b3JlQ2FuZGlkYXRlcyk7
CisgICAgZGV0ZWN0SW5jcmVtZW50U3RvcmUocG9zdEluZGV4U3RvcmVDYW5kaWRhdGVzKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcAppbmRleCAzNTM1YmIxM2JjMTNhY2IyYzQ3Y2M3ZGUzMDEzNmZmZDM3MjhmZDVkLi41ZmM1
MDI4NWIzODQ0MzkyZDdjMzZhYTUwMDMwNmZjNWI3YmZlMTA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApAQCAtMjU3OCwxNyArMjU3OCwxNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBQcmUtSW5kZXggQ2Fub25pY2FsIEZv
cm06Ci0gICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IGFkZChiYXNlLCBvZmZzZXQpCi0gICAg
ICAgICAgICAvLyAgICAgbWVtb3J5ID0gbG9hZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAv
LyAgICAgYWRkcmVzcyA9IGFkZChiYXNlLCBvZmZzZXQpICAgIC0tLT4gICBNb3ZlICViYXNlICVh
ZGRyZXNzCisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gbG9hZChiYXNlLCBvZmZzZXQpICAg
ICAgICAgICBNb3ZlV2l0aEluY3JlbWVudCAoJWFkZHJlc3MsIHByZWZpeChvZmZzZXQpKSAlbWVt
b3J5CiAgICAgICAgICAgICAvLyBQb3N0LUluZGV4IENhbm9uaWNhbCBGb3JtOgotICAgICAgICAg
ICAgLy8gICAgIG1lbW9yeSA9IGxvYWQoYmFzZSwgMCkKLSAgICAgICAgICAgIC8vICAgICBhZGRy
ZXNzID0gYWRkKGJhc2UsIG9mZnNldCkKKyAgICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gYWRk
KGJhc2UsIG9mZnNldCkgICAgLS0tPiAgIE1vdmUgJWJhc2UgJWFkZHJlc3MKKyAgICAgICAgICAg
IC8vICAgICBtZW1vcnkgPSBsb2FkKGJhc2UsIDApICAgICAgICAgICAgICAgIE1vdmVXaXRoSW5j
cmVtZW50ICglYWRkcmVzcywgcG9zZml4KG9mZnNldCkpICVtZW1vcnkKICAgICAgICAgICAgIGF1
dG8gdHJ5QXBwZW5kSW5jcmVtZW50QWRkcmVzcyA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAg
ICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBlKE1vdmVXaXRoSW5j
cmVtZW50MzIsIE1vdmVXaXRoSW5jcmVtZW50NjQsIG1lbW9yeS0+dHlwZSgpKTsKICAgICAgICAg
ICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpQcmVJbmRleCwgQXJnOjpUbXAp
IHx8ICFtX2luZGV4KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtX2Jsb2NrLT5hdChtX2luZGV4IC0gMSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm9wY29kZSgpICE9IEFkZCB8fCBhZGRyZXNzLT50eXBl
KCkgIT0gSW50NjQpCisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRhaW5zKGFkZHJl
c3MpIHx8IGFkZHJlc3MtPm9wY29kZSgpICE9IEFkZCB8fCBhZGRyZXNzLT50eXBlKCkgIT0gSW50
NjQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBp
ZiAoYWRkcmVzcy0+Y2hpbGQoMCkgIT0gbWVtb3J5LT5sYXN0Q2hpbGQoKSB8fCAhYWRkcmVzcy0+
Y2hpbGQoMSktPmhhc0ludFB0cigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0zNDMxLDYgKzM0MzEsNDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgU3RvcmU6IHsKKyAgICAgICAgICAgIC8vIFByZS1JbmRleCBDYW5vbmljYWwgRm9ybToKKyAg
ICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIE9mZnNldCkgICAgICAgICAgICAg
IC0tLT4gICAgTW92ZSAlYmFzZSAlYWRkcmVzcworICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9
IFN0b3JlKHZhbHVlLCBiYXNlLCBPZmZzZXQpICAgICAgICAgICAgICBNb3ZlV2l0aEluY3JlbWVu
dCAldmFsdWUgKCVhZGRyZXNzLCBwcmVmaXgob2Zmc2V0KSkKKyAgICAgICAgICAgIC8vIFBvc3Qt
SW5kZXggQ2Fub25pY2FsIEZvcm06CisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChi
YXNlLCBPZmZzZXQpICAgICAgICAgICAgICAtLS0+ICAgIE1vdmUgJWJhc2UgJWFkZHJlc3MKKyAg
ICAgICAgICAgIC8vICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkgICAgICAgICAg
ICAgICAgICAgTW92ZVdpdGhJbmNyZW1lbnQgJXZhbHVlICglYWRkcmVzcywgcG9zdGZpeChvZmZz
ZXQpKQorICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRJbmNyZW1lbnRBZGRyZXNzID0gWyZdICgp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUg
PSB0cnlPcGNvZGVGb3JUeXBlKE1vdmVXaXRoSW5jcmVtZW50MzIsIE1vdmVXaXRoSW5jcmVtZW50
NjQsIG1lbW9yeS0+Y2hpbGQoMCktPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1Zh
bGlkRm9ybShvcGNvZGUsIEFyZzo6UHJlSW5kZXgsIEFyZzo6VG1wKSB8fCAhbV9pbmRleCkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIFZhbHVlKiBh
ZGRyZXNzID0gbV9ibG9jay0+YXQobV9pbmRleCAtIDEpOworICAgICAgICAgICAgICAgIGlmICht
X2xvY2tlZC5jb250YWlucyhhZGRyZXNzKSB8fCBhZGRyZXNzLT5vcGNvZGUoKSAhPSBBZGQgfHwg
YWRkcmVzcy0+dHlwZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPmNoaWxkKDApICE9IG1lbW9yeS0+Y2hp
bGQoMSkgfHwgIWFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IGFk
ZHJlc3MtPmNoaWxkKDEpLT5hc0ludFB0cigpOworICAgICAgICAgICAgICAgIFZhbHVlOjpPZmZz
ZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNl
dCk7CisgICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ICE9IG9mZnNldCB8fCAhQXJnOjpp
c1ZhbGlkUG9zdEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIEFyZyBpbmNyZW1lbnRBcmcgPSBBcmcoKTsK
KyAgICAgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoc21hbGxPZmZzZXQgPT0gbWVtb3J5LT5vZmZzZXQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFyZzo6cHJlSW5kZXgodG1wKGFkZHJlc3MpLCBzbWFs
bE9mZnNldCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlu
Y3JlbWVudEFyZyA9IEFyZzo6cG9zdEluZGV4KHRtcChhZGRyZXNzKSwgc21hbGxPZmZzZXQpOwor
CisgICAgICAgICAgICAgICAgaWYgKGluY3JlbWVudEFyZykgeworICAgICAgICAgICAgICAgICAg
ICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGFkZHJlc3MtPnR5cGUoKSksIHRtcChhZGRyZXNz
LT5jaGlsZCgwKSksIHRtcChhZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChv
cGNvZGUsIHRtcChtZW1vcnktPmNoaWxkKDApKSwgaW5jcmVtZW50QXJnKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9sb2NrZWQuYWRkKGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVuZEluY3JlbWVudEFk
ZHJlc3MoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgIFZhbHVlKiB2
YWx1ZVRvU3RvcmUgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKICAgICAgICAgICAgIGlmIChjYW5CZUlu
dGVybmFsKHZhbHVlVG9TdG9yZSkpIHsKICAgICAgICAgICAgICAgICBib29sIG1hdGNoZWQgPSBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCA5YWE0MGQxMjFlZTRlY2YyNmU5
NGY3ZTU5ZmIxNGY5MzViZWE5Y2IyLi5lMTcxYWNmNTVlMzY3MGY4OTFmMTViYThmMjBjNmNkYzFj
MTg2OTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0xMTY4LDQgKzExNjgsOSBA
QCB2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpOwogdm9pZCB0ZXN0TG9hZFBvc3RJbmRleDMyKCk7
CiB2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQoKTsKIAordm9pZCB0ZXN0U3RvcmVQcmVJbmRleDMy
KCk7Cit2b2lkIHRlc3RTdG9yZVByZUluZGV4NjQoKTsKK3ZvaWQgdGVzdFN0b3JlUG9zdEluZGV4
MzIoKTsKK3ZvaWQgdGVzdFN0b3JlUG9zdEluZGV4NjQoKTsKKwogI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAppbmRleCA1MDVmZDYzOTAz
Y2U4ZjIyNDJkZTYwMzYzMjg5MjkwY2E4ODE5YTczLi4wZjQ3ZTllMjYyOWQ5NjY0Nzc5YmY1ZDE1
MzUwZWFmNDJhYzliOGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAg
LTMyMSw2ICszMjEsMTEzIEBAIHZvaWQgdGVzdExvYWRQb3N0SW5kZXg2NCgpCiAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludDY0X3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0
ZXN0KCkpOwogfQogCit2b2lkIHRlc3RTdG9yZVByZUluZGV4MzIoKQoreworICAgIGlmIChPcHRp
b25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50
MzJfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnQzMl90KiBwdHIgPSAmbnVtc1sxXTsK
KworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisKKyAgICBWYWx1ZSogYWRkcmVzcyA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1
ZSogdmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBUcnVuYywg
T3JpZ2luKCksIAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgIFZhbHVlKiBvZmZzZXQg
PSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCk7CisgICAg
VmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBP
cmlnaW4oKSwgYWRkcmVzcywgb2Zmc2V0KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgdmFsdWUsIHByZUluY3JlbWVudCk7CisgICAgcm9v
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3Jl
bWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNB
Uk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIiM0XSEiKTsKKyAg
ICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHB0ciksIDQpOworICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsK
KyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKK30KKwordm9pZCB0ZXN0U3RvcmVQcmVJbmRl
eDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50
NjRfdCogcHRyID0gJm51bXNbMV07CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIGFkZHJlc3MgPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFZh
bHVlKiBvZmZzZXQgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgOCk7CisgICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVzcywgb2Zmc2V0KTsKKyAgICByb290LT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgdmFsdWUsIHByZUluY3JlbWVu
dCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIHByZUluY3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
KyAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KHB0ciksIDQpOworICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90Kj4ocmVz
KTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKK30KKwordm9pZCB0ZXN0U3RvcmVQb3N0
SW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9IHsgMSwgMiwgMyB9OworICAg
IGludDMyX3QqIHB0ciA9ICZudW1zWzFdOworCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiBhZGRyZXNzID0g
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiB2YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBTdG9yZSwgT3Jp
Z2luKCksIHZhbHVlLCBhZGRyZXNzKTsKKyAgICBWYWx1ZSogb2Zmc2V0ID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQpOworICAgIFZhbHVlKiBwcmVJbmNy
ZW1lbnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFkZHJl
c3MsIG9mZnNldCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVy
biwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgIl0sICM0Iik7CisgICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90Pigq
Y29kZSwgYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpLCA0KTsKKyAgICBwdHIgPSBiaXR3aXNl
X2Nhc3Q8aW50MzJfdCo+KHJlcyk7CisgICAgQ0hFQ0tfRVEobnVtc1sxXSwgNCk7CisgICAgQ0hF
Q0tfRVEobnVtc1syXSwgKnB0cik7Cit9CisKK3ZvaWQgdGVzdFN0b3JlUG9zdEluZGV4NjQoKQor
eworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnQ2NF90KiBw
dHIgPSAmbnVtc1sxXTsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYWRkcmVzcyA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICBWYWx1ZSogdmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBTdG9yZSwgT3JpZ2luKCksIHZhbHVlLCBhZGRyZXNz
KTsKKyAgICBWYWx1ZSogb2Zmc2V0ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDgpOworICAgIFZhbHVlKiBwcmVJbmNyZW1lbnQgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFkZHJlc3MsIG9mZnNldCk7CisgICAgcm9v
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3Jl
bWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAoaXNB
Uk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgIl0sICM4Iik7Cisg
ICAgaW50cHRyX3QgcmVzID0gaW52b2tlPGludHB0cl90PigqY29kZSwgYml0d2lzZV9jYXN0PGlu
dHB0cl90PihwdHIpLCA0KTsKKyAgICBwdHIgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHJlcyk7
CisgICAgQ0hFQ0tfRVEobnVtc1sxXSwgNCk7CisgICAgQ0hFQ0tfRVEobnVtc1syXSwgKnB0cik7
Cit9CiAKIHZvaWQgdGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvMzIoKQogewpAQCAtMzk5
NCw2ICs0MTAxLDExIEBAIHZvaWQgYWRkU2hyVGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1
ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0TG9hZFBy
ZUluZGV4NjQoKSk7CiAgICAgUlVOKHRlc3RMb2FkUG9zdEluZGV4MzIoKSk7CiAgICAgUlVOKHRl
c3RMb2FkUG9zdEluZGV4NjQoKSk7CisKKyAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXgzMigpKTsK
KyAgICBSVU4odGVzdFN0b3JlUHJlSW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdFN0b3JlUG9zdElu
ZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVBvc3RJbmRleDY0KCkpOwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435238</attachid>
            <date>2021-08-09 20:18:40 -0700</date>
            <delta_ts>2021-08-10 08:47:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228538-20210809221839.patch</filename>
            <type>text/plain</type>
            <size>24370</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwODA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MWU5ZDI4OTkzMjE4OWQ2Y2I4MjY2ODVmZWE0NGYwOGYzZDJjYmMwLi40YjM2YzA4MDY3N2E5M2I4
MTcyOTAwOGJkNTA4ZDNiZDAzOTU5MDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzEgQEAKKzIwMjEtMDgtMDkgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIFtBUk02NF0gQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2Rl
IHRvIEFpciBmb3IgQVJNNjQgKFN0b3JlIEluc3RydWN0aW9uKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4NTM4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHByZXZpb3VzIHBhdGNoIGhhcyBpbnRy
b2R1Y2VkIHRoZSBwcmUvcG9zdC1pbmRleCBhZGRyZXNzIG1vZGUgZm9yIExvYWQgaW5zdHJ1Y3Rp
b24sCisgICAgICAgIHdoaWNoIGJlbmVmaXRzIGxvb3AgcHJvZ3JhbS4gSGVyZSwgdGhpcyBwYXRj
aCBhZGRzIHRoZSBjb3JyZXNwb25kaW5nIG1vZGUgZm9yIFN0b3JlCisgICAgICAgIGluc3RydWN0
aW9uLiBTdG9yZSBSZWdpc3RlciAoaW1tZWRpYXRlKSBzdG9yZXMgYSB3b3JkIG9yIGEgZG91Ymxl
d29yZCBmcm9tIGEgcmVnaXN0ZXIKKyAgICAgICAgdG8gbWVtb3J5LiBUaGUgYWRkcmVzcyB0aGF0
IGlzIHVzZWQgZm9yIHRoZSBzdG9yZSBpcyBjYWxjdWxhdGVkIGZyb20gYSBiYXNlIHJlZ2lzdGVy
CisgICAgICAgIGFuZCBhbiBpbW1lZGlhdGUgb2Zmc2V0LgorCisgICAgICAgICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFByZS1JbmRleCBBZGRyZXNz
IE1vZGUgRm9yIFN0b3JlICMjCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCisKKyAgICAgICAgU1RSIFd0LCBbWG4sICNpbW1dIQorCisgICAgICAgIEluIEIz
IFJlZHVjdGlvbiBTdHJlbmd0aCwgc2luY2Ugd2UgaGF2ZSB0aGlzIHJlZHVjdGlvbiBydWxlOgor
ICAgICAgICAgICAgVHVybnMgdGhpczogU3RvcmUodmFsdWUsIEFkZChhZGRyZXNzLCBvZmZzZXQx
KSwgb2Zmc2V0ID0gb2Zmc2V0MikKKyAgICAgICAgICAgIEludG8gdGhpczogU3RvcmUodmFsdWUs
IGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorCisgICAgICAgIFRoZSBlcXVp
dmFsZW50IHBhdHRlcm4gaXM6CisgICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNl
dCkKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJh
c2UsIG9mZnNldCkKKworICAgICAgICBIZXJlLCB3ZSBvbmx5IGNvbnNpZGVyIHRoZSBwYXR0ZXJu
OgorICAgICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICBt
ZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgb2Zmc2V0KQorCisgICAgICAgIEFuZCwgdGhpcyBw
YXRjaCBkaXJlY3RseSB0cmVhdHMgaXQgYXMgdGhlIGNhbm9uaWNhbCBmb3JtLiBJZGVhbGx5LCB3
ZSBzaG91bGQgbW92ZSAKKyAgICAgICAgbWVtb3J5IHRvIGp1c3QgYWZ0ZXIgdGhlIGFkZHJlc3Mg
bGlrZSB3aGF0IHdlIGRpZCBmb3IgUHJlSW5kZXggTG9hZCBpbiB0aGUgcHJldmlvdXMgCisgICAg
ICAgIHBhdGNoLiBCdXQsIHdlIGNhbm5vdCBwcm92aWRlIGEgYmV0dGVyIHdheSB0byBkbyB0aGF0
IHNpbmNlIHRoZSB2YWx1ZSBtYXkgYmUgCisgICAgICAgIHVzZWQgYmV0d2VlbiBhZGRyZXNzIGFu
ZCBtZW1vcnkuIFRvIG1vdmUgdmFsdWUgdXB3YXJkLCB3ZSBtdXN0IG1vdmUgYWxsIGRlc2NlbmRh
bnRzIAorICAgICAgICBvZiB0aGUgdmFsdWUgYWxvbmcgd2l0aCBpdCB0byBwcmV2ZW50IEIzIElS
IGluZGV4IHZpb2xhdGlvbnMsIHdoaWNoIGlzIHJpc2t5IGFuZCBleHBlbnNpdmUuCisKKyAgICAg
ICAgTmV4dCwgbG93ZXIgdG8gQWlyOgorICAgICAgICAgICAgTW92ZSAlYmFzZSwgJWFkZHJlc3MK
KyAgICAgICAgICAgIE1vdmUgJXZhbHVlLCAoJWFkZHJlc3MsIHByZWZpeChvZmZzZXQpKQorCisg
ICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMj
IFBvc3QtSW5kZXggQWRkcmVzcyBNb2RlIEZvciBMb2FkICMjCisgICAgICAgICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgU1RSIFd0LCBbWG5dLCAjaW1t
CisKKyAgICAgICAgVGhlbiwgdGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczoKKyAgICAgICAgICAg
IG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKQorICAgICAgICAgICAgLi4uCisgICAgICAg
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKworICAgICAgICBGaXJzdCwgd2UgY29u
dmVydCBpdCB0byB0aGUgY2Fub25pY2FsIGZvcm06CisgICAgICAgICAgICBuZXdPZmZzZXQgPSBD
b25zdGFudAorICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAg
ICAgICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkgLy8gbW92ZSB0aGUgb2Zmc2V0
IGFuZCBhZGRyZXNzIHRvIGp1c3QgYmVmb3JlIHRoZSBtZW1vcnkKKyAgICAgICAgICAgIC4uLgor
ICAgICAgICAgICAgb2Zmc2V0ID0gSWRlbnRpdHkobmV3T2Zmc2V0KQorICAgICAgICAgICAgYWRk
cmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCisKKyAgICAgICAgTmV4dCwgbG93ZXIgdG8gQWly
OgorICAgICAgICAgICAgTW92ZSAlYmFzZSwgJW5ld0FkZHJlc3MKKyAgICAgICAgICAgIE1vdmUg
JXZhbHVlLCAoJW5ld0FkZHJlc3MsIHBvc3RmaXgob2Zmc2V0KSkKKworICAgICAgICAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFRlc3Qg
Zm9yIFByZS9Qb3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGUgIyMKKyAgICAgICAgIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIEIzIElSOgor
ICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgSW50NjQgYkAwID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICBJbnQ2
NCBiQDEgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIEludDY0IGJAMiA9IENvbnN0NjQoOCkK
KyAgICAgICAgSW50NjQgYkAzID0gQWRkKGJAMCwgJDgoYkAyKSkKKyAgICAgICAgVm9pZCAgYkA0
ID0gU3RvcmUoYkAxLCBiQDMsIENvbnRyb2xEZXBlbmRlbnR8V3JpdGVzOlRvcCkKKyAgICAgICAg
Vm9pZCAgYkA1ID0gUmV0dXJuKGJAMywgVGVybWluYWwpCisgICAgICAgIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvTyBQ
cmUtSW5jcmVtZW50IEFkZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIE1vdmUgICV4MCwgJXgy
LCAgICAgIGJAMAorICAgICAgICBBZGQ2NCAgJDgsICV4MiwgJXgwLCBiQDMKKyAgICAgICAgTW92
ZSAgJXgxLCA4KCV4MiksICAgYkA0CisgICAgICAgIFJldDY0ICV4MCwgICAgICAgICAgIGJANQor
ICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAgICAgICBXLyBQcmUtSW5jcmVtZW50IEFkZHJlc3MgTW9kZToKKyAgICAgICAg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgICAgIE1vdmVXaXRoSW5jcmVtZW50NjQgJXgxLCAoJXgwLFByZSgkOCkpLCBiQDQKKyAgICAg
ICAgUmV0NjQgICAgICAgICAgICAgICAleDAsICAgICAgICAgICAgICAgIGJANQorICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
CisgICAgICAgIEIzIElSOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgSW50NjQgYkAwID0gQXJndW1lbnRSZWco
JXgwKQorICAgICAgICBJbnQ2NCBiQDEgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIFZvaWQg
IGJAMiA9IFN0b3JlKGJAMSwgYkAwLCBDb250cm9sRGVwZW5kZW50fFdyaXRlczpUb3ApCisgICAg
ICAgIEludDY0IGJAMyA9IENvbnN0NjQoOCkKKyAgICAgICAgSW50NjQgYkA0ID0gQWRkKGJAMCwg
JDgoYkAzKSkKKyAgICAgICAgVm9pZCAgYkA1ID0gUmV0dXJuKGJANCwgVGVybWluYWwpCisgICAg
ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisgICAgICAgIFcvTyBQb3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
ICAgICBNb3ZlICAleDEsICgleDApLCAgICAgIGJAMgorICAgICAgICBBZGQ2NCAgJDgsICAgJXgw
LCAleDAsIGJANAorICAgICAgICBSZXQ2NCAleDAsICAgICAgICAgICAgIGJANQorICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgICAgICBXLyBQb3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBN
b3ZlV2l0aEluY3JlbWVudDY0ICV4MSwgKCV4MCxQb3N0KCQ4KSksIGJAMgorICAgICAgICBSZXQ2
NCAgICAgICAgICAgICAgICV4MCwgICAgICAgICAgICAgICAgIGJANQorICAgICAgICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAg
ICAqIGIzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6Y2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMpOgorICAgICAgICAqIGIzL0IzTG93
ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIz
XzMuY3BwOgorICAgICAgICAodGVzdFN0b3JlUHJlSW5kZXgzMik6CisgICAgICAgICh0ZXN0U3Rv
cmVQcmVJbmRleDY0KToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJbmRleDMyKToKKyAgICAgICAg
KHRlc3RTdG9yZVBvc3RJbmRleDY0KToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKwogMjAyMS0w
OC0wOSAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW0FS
TTY0XSBDbGVhbiB1cCBhbmQgZml4IFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFp
ciBmb3IgQVJNNjQgKExvYWQgSW5zdHJ1Y3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cy5jcHAKaW5k
ZXggODNmNzA5OTU1MGJmNzQ2ZTdkOWNkMmQ2ZDVmYTM1YzY4ZTBhM2Y2Yy4uMmU5YzgwNmY5MTlh
OGI0NTRmMjQzNmI0ZGQ0NzBkZDk2Yzg2MzYzYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJbmNyZW1lbnRzLmNwcApA
QCAtNTgsMjUgKzU4LDI3IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJv
Y2VkdXJlJiBwcm9jKQogICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGJhY2t3YXJkc0RvbWluYXRv
cnMgPSBwcm9jLmJhY2t3YXJkc0RvbWluYXRvcnMoKTsKIAogICAgIEluZGV4U2V0PFZhbHVlKj4g
aWdub3JlZFZhbHVlczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwcmVJbmRl
eENhbmRpZGF0ZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcG9zdEluZGV4
Q2FuZGlkYXRlczsKLSAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJh
c2VUb01lbW9yaWVzOworICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqPj4g
YmFzZVRvTG9hZHM7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4gcHJlSW5kZXhM
b2FkQ2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5k
ZXhMb2FkQ2FuZGlkYXRlczsKICAgICBIYXNoTWFwPFZhbHVlS2V5LCBWZWN0b3I8VmFsdWUqPj4g
YmFzZU9mZnNldFRvQWRkcmVzc2VzOwogCi0gICAgLy8gUHJlLUluZGV4IFBhdHRlcm46Ci0gICAg
Ly8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgIC8vICAgICAqKioKLSAgICAv
LyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgLy8gUG9zdC1JbmRleCBQYXR0
ZXJuOgotICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCi0gICAgLy8gICAgICoqKgot
ICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAgICBIYXNoTWFwPFZhbHVl
KiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb1N0b3JlczsKKyAgICBIYXNoTWFwPE1lbW9y
eVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXM7CisKICAgICBhdXRvIHRy
eUFkZFByZVBvc3RJbmRleENhbmRpZGF0ZSA9IFsmXSAoVmFsdWUqIHZhbHVlKSB7CiAgICAgICAg
IHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CiAgICAgICAgIGNhc2UgTG9hZDogewotICAgICAg
ICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKLQot
ICAgICAgICAgICAgYXV0byB0cnlBZGRQcmVJbmRleENhbmRpZGF0ZXMgPSBbJl0gKCkgeworICAg
ICAgICAgICAgLy8gUHJlLUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAgYWRkcmVz
cyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAgICAg
ICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAvLyBQb3N0
LUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCAw
KQorICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBB
ZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgYXV0byB0cnlBZGRwcmVJbmRleExvYWRDYW5k
aWRhdGVzID0gWyZdICgpIHsKKyAgICAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0g
dmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOwogICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPnR5
cGUoKSAhPSBJbnQzMiAmJiBtZW1vcnktPnR5cGUoKSAhPSBJbnQ2NCkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7CkBA
IC04NiwxMiArODgsMzMgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9j
ZWR1cmUmIHByb2MpCiAgICAgICAgICAgICAgICAgICAgIGlmICghYmFzZU9mZnNldFRvQWRkcmVz
c2VzLmNvbnRhaW5zKGJhc2VPZmZzZXRrZXkpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRyZXNzIDogYmFzZU9mZnNl
dFRvQWRkcmVzc2VzLmdldChiYXNlT2Zmc2V0a2V5KSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHByZUluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByZUluZGV4TG9hZENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgYWRkcmVzcyk7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhc2VUb01lbW9yaWVz
LmFkZChtZW1vcnktPmNoaWxkKDApLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgICAgIGJhc2VUb0xvYWRzLmFk
ZChtZW1vcnktPmNoaWxkKDApLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKG1lbW9yeSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB0cnlBZGRw
cmVJbmRleExvYWRDYW5kaWRhdGVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgICAgIC8vIFByZS1JbmRleCBQYXR0ZXJu
OgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAg
ICAgICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCBvZmZzZXQpCisgICAgICAg
ICAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0g
U3RvcmUodmFsdWUsIGJhc2UsIDApCisgICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAgICAg
ICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICBhdXRvIHRy
eVVwZGF0ZUJhc2VUb1N0b3JlcyA9IFsmXSAoKSB7CisgICAgICAgICAgICAgICAgTWVtb3J5VmFs
dWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgICAgICAgICBp
ZiAobWVtb3J5LT5jaGlsZCgwKS0+dHlwZSgpICE9IEludDMyICYmIG1lbW9yeS0+Y2hpbGQoMCkt
PnR5cGUoKSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIGlmIChtZW1vcnktPmNoaWxkKDApLT5oYXNJbnQoKSB8fCBtZW1vcnktPm9mZnNldCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgYmFzZVRvU3Rv
cmVzLmFkZChtZW1vcnktPmNoaWxkKDEpLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigpKS5pdGVyYXRv
ci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CiAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICB0
cnlBZGRQcmVJbmRleENhbmRpZGF0ZXMoKTsKKyAgICAgICAgICAgIHRyeVVwZGF0ZUJhc2VUb1N0
b3JlcygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtOTksNyArMTIyLDcg
QEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAg
ICAgICAgICAgICBWYWx1ZSogbGVmdCA9IHZhbHVlLT5jaGlsZCgwKTsKICAgICAgICAgICAgIFZh
bHVlKiByaWdodCA9IHZhbHVlLT5jaGlsZCgxKTsKIAotICAgICAgICAgICAgYXV0byB0cnlBZGRQ
b3N0SW5kZXhDYW5kaWRhdGVzID0gWyZdICgpIHsKKyAgICAgICAgICAgIGF1dG8gdHJ5QWRkcG9z
dEluZGV4Q2FuZGlkYXRlcyA9IFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyaWdodC0+
aGFzSW50UHRyKCkgfHwgdmFsdWUtPnR5cGUoKSAhPSBJbnQ2NCkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJpZ2h0LT5hc0lu
dFB0cigpOwpAQCAtMTA5LDEzICsxMzIsMTcgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5j
cmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgICAgICAgICAgLy8gc28gZmFyIHRoaXMg
QWRkIHZhbHVlIGlzIGEgdmFsaWQgYWRkcmVzcyBjYW5kaWRhdGUgZm9yIGJvdGggcHJlZml4IGFu
ZCBwb3N0Zml4IHBhdHRlcm4KICAgICAgICAgICAgICAgICBWYWx1ZUtleSBiYXNlT2Zmc2V0a2V5
ID0gVmFsdWVLZXkobGVmdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oc21hbGxPZmZzZXQpKTsKICAg
ICAgICAgICAgICAgICBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuYWRkKGJhc2VPZmZzZXRrZXksIFZl
Y3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQodmFsdWUpOwotICAgICAgICAg
ICAgICAgIGlmICghYmFzZVRvTWVtb3JpZXMuY29udGFpbnMobGVmdCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkg
OiBiYXNlVG9NZW1vcmllcy5nZXQobGVmdCkpCi0gICAgICAgICAgICAgICAgICAgIHBvc3RJbmRl
eENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChiYXNl
VG9Mb2Fkcy5jb250YWlucyhsZWZ0KSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKE1lbW9y
eVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9Mb2Fkcy5nZXQobGVmdCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBwb3N0SW5kZXhMb2FkQ2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChiYXNlVG9TdG9yZXMuY29udGFpbnMo
bGVmdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChNZW1vcnlWYWx1ZSogbWVtb3J5IDog
YmFzZVRvU3RvcmVzLmdldChsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RJbmRl
eFN0b3JlQ2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgdHJ5QWRkUG9zdEluZGV4Q2FuZGlkYXRlcygp
OworICAgICAgICAgICAgdHJ5QWRkcG9zdEluZGV4Q2FuZGlkYXRlcygpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTM0LDYgKzE2MSw4IEBAIGJvb2wgY2Fub25pY2FsaXpl
UHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgfHwgKGRvbWlu
YXRvcnMuZG9taW5hdGVzKHYyLT5vd25lciwgdjEtPm93bmVyKSAmJiBiYWNrd2FyZHNEb21pbmF0
b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikpOwogICAgIH07CiAKKyAgICAvLyBU
aGlzIHNlYXJjaCBpcyBleHBlbnNpdmUuIEhvd2V2ZXIsIGR1ZSB0byB0aGUgZ3JlZWR5IHBhdHRl
cm4KKyAgICAvLyBtYXRjaGluZywgbm8gYmV0dGVyIG1ldGhvZCBjYW4gYmUgcHJvcG9zZWQgYXQg
cHJlc2VudC4KICAgICBhdXRvIHZhbHVlSW5kZXhJbkJhc2ljQmxvY2sgPSBbJl0gKFZhbHVlKiB2
YWx1ZSkgLT4gdW5zaWduZWQgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gdmFsdWUtPm93bmVyOwpAQCAtMTQ0LDQzICsxNzMsNTYgQEAg
Ym9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAgICAg
ICAgIHJldHVybiBpbmRleDsKICAgICB9OwogCi0gICAgYXV0byBkZXRlY3QgPSBbJl0gKGNvbnN0
IEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+JiBjYW5kaWRhdGVzLCBib29sIGlzUHJlSW5k
ZXhDYW5kaWRhdGVzKSB7CisgICAgZm9yIChhdXRvIHBhaXIgOiBwcmVJbmRleExvYWRDYW5kaWRh
dGVzKSB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBwYWlyLmtleTsKKyAgICAgICAg
VmFsdWUqIGFkZHJlc3MgPSBwYWlyLnZhbHVlOworICAgICAgICBpZiAoaWdub3JlZFZhbHVlcy5j
b250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNv
bnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBB
ZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAg
IC0tPiAgbmV3TWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCisgICAgICAgIC8vIC4uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgLy8gbWVtb3J5ID0gTG9hZChi
YXNlLCBvZmZzZXQpICAgICAgIG1lbW9yeSA9IElkZW50aXR5KG5ld01lbW9yeSkKKyAgICAgICAg
dW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSB2YWx1ZUluZGV4SW5CYXNpY0Jsb2NrKGFkZHJlc3Mp
ICsgMTsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG5ld01lbW9yeSA9IGluc2VydGlvblNldC5pbnNl
cnQ8TWVtb3J5VmFsdWU+KGluc2VydGlvbkluZGV4LCBMb2FkLCBtZW1vcnktPnR5cGUoKSwgYWRk
cmVzcy0+b3JpZ2luKCksIG1lbW9yeS0+bGFzdENoaWxkKCkpOworICAgICAgICBuZXdNZW1vcnkt
PnNldE9mZnNldChtZW1vcnktPm9mZnNldCgpKTsKKyAgICAgICAgbWVtb3J5LT5yZXBsYWNlV2l0
aElkZW50aXR5KG5ld01lbW9yeSk7CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGFkZHJl
c3MtPm93bmVyKTsKKworICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICAg
ICAgaWdub3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAgICB9CisKKyAgICBhdXRvIGRldGVjdFBv
c3RJbmRleCA9IFsmXSAoY29uc3QgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZhbHVlKj4mIGNhbmRp
ZGF0ZXMpIHsKICAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBjYW5kaWRhdGVzKSB7CiAgICAgICAg
ICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gcGFpci5rZXk7CiAgICAgICAgICAgICBWYWx1ZSog
YWRkcmVzcyA9IHBhaXIudmFsdWU7CiAgICAgICAgICAgICBpZiAoaWdub3JlZFZhbHVlcy5jb250
YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRkcmVzcykgfHwgIWNvbnRy
b2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgICAgIGlmIChpc1ByZUluZGV4Q2FuZGlkYXRlcykgewotICAgICAgICAgICAg
ICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBhZGRyZXNzID0gQWRkKGJh
c2UsIG9mZnNldCkKLSAgICAgICAgICAgICAgICAvLyAqKiogICAgICAgICAgICAgICAgICAgICAg
ICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgICAgICAgICAgICAg
Ly8gKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgotICAgICAgICAgICAgICAg
IC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KSAgICAgICBtZW1vcnkgPSBJZGVudGl0eShu
ZXdNZW1vcnkpCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSB2YWx1
ZUluZGV4SW5CYXNpY0Jsb2NrKGFkZHJlc3MpICsgMTsKLSAgICAgICAgICAgICAgICBNZW1vcnlW
YWx1ZSogbmV3TWVtb3J5ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1ZT4oaW5zZXJ0
aW9uSW5kZXgsIExvYWQsIG1lbW9yeS0+dHlwZSgpLCBhZGRyZXNzLT5vcmlnaW4oKSwgbWVtb3J5
LT5sYXN0Q2hpbGQoKSk7Ci0gICAgICAgICAgICAgICAgbmV3TWVtb3J5LT5zZXRPZmZzZXQobWVt
b3J5LT5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgbWVtb3J5LT5yZXBsYWNlV2l0aElkZW50
aXR5KG5ld01lbW9yeSk7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYWRk
cmVzcy0+b3duZXIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyAq
KiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3T2Zmc2V0ID0gQ29uc3RhbnQKLSAg
ICAgICAgICAgICAgICAvLyAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWRk
cmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCi0gICAgICAgICAgICAgICAgLy8gbWVtb3J5ID0g
TG9hZChiYXNlLCAwKSAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkKLSAgICAgICAg
ICAgICAgICAvLyAqKiogICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgKioqCi0gICAgICAg
ICAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgIGFkZHJlc3MgPSBJ
ZGVudGl0eShuZXdBZGRyZXNzKQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc2VydGlvbklu
ZGV4ID0gdmFsdWVJbmRleEluQmFzaWNCbG9jayhtZW1vcnkpOwotICAgICAgICAgICAgICAgIFZh
bHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4oaW5zZXJ0
aW9uSW5kZXgsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludCgpKTsK
LSAgICAgICAgICAgICAgICBWYWx1ZSogbmV3QWRkcmVzcyA9IGluc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KGluc2VydGlvbkluZGV4LCBBZGQsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNo
aWxkKDApLCBuZXdPZmZzZXQpOwotICAgICAgICAgICAgICAgIGFkZHJlc3MtPnJlcGxhY2VXaXRo
SWRlbnRpdHkobmV3QWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1
dGUobWVtb3J5LT5vd25lcik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB1bnNpZ25lZCBp
bnNlcnRpb25JbmRleCA9IHZhbHVlSW5kZXhJbkJhc2ljQmxvY2sobWVtb3J5KTsKKyAgICAgICAg
ICAgIFZhbHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4o
aW5zZXJ0aW9uSW5kZXgsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxkKDEpLT5hc0lu
dCgpKTsKKyAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFkZCwgbWVtb3J5LT5vcmlnaW4oKSwgYWRkcmVzcy0+
Y2hpbGQoMCksIG5ld09mZnNldCk7CisgICAgICAgICAgICBhZGRyZXNzLT5yZXBsYWNlV2l0aElk
ZW50aXR5KG5ld0FkZHJlc3MpOworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUobWVt
b3J5LT5vd25lcik7CiAKICAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOwog
ICAgICAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBkZXRlY3QocHJlSW5kZXhDYW5kaWRhdGVzLCB0cnVlKTsKLSAgICBkZXRlY3QocG9z
dEluZGV4Q2FuZGlkYXRlcywgZmFsc2UpOworICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgLy8gLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCisg
ICAgLy8gbWVtb3J5ID0gTG9hZChiYXNlLCAwKSAgICAgICAgICAgICAgbWVtb3J5ID0gTG9hZChi
YXNlLCAwKQorICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4uLgor
ICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgIGFkZHJlc3MgPSBJZGVu
dGl0eShuZXdBZGRyZXNzKQorICAgIGRldGVjdFBvc3RJbmRleChwb3N0SW5kZXhMb2FkQ2FuZGlk
YXRlcyk7CisKKyAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3
T2Zmc2V0ID0gQ29uc3RhbnQKKyAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCisgICAgLy8gbWVtb3J5ID0g
U3RvcmUodmFsdWUsIGJhc2UsIDApICAgICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAw
KQorICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAuLi4KKyAgICAv
LyBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkgICAgICAgICAgYWRkcmVzcyA9IElkZW50aXR5
KG5ld0FkZHJlc3MpCisgICAgZGV0ZWN0UG9zdEluZGV4KHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRl
cyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAKaW5kZXggYzM5MzA2MzAxYmJiYzBjOWU0NDU1YTQwZmQwMGFjNTdmYmNhMzM1
Ny4uNmQzZGM0ZGZhN2VmZGQyZmI0ZjZmZjEwNDQyNTZjMzhmZWY0ODg1NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAgLTM0MzYsNiArMzQzNiw1MiBAQCBw
cml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTdG9yZTogeworICAgICAgICAgICAg
Ly8gUHJlLUluZGV4IENhbm9uaWNhbCBGb3JtOgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3Mg
PSBBZGQoYmFzZSwgT2Zmc2V0KSAgICAgICAgICAgICAgLS0tPiAgICBNb3ZlICViYXNlICVhZGRy
ZXNzCisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIE9mZnNl
dCkgICAgICAgICAgICAgIE1vdmVXaXRoSW5jcmVtZW50ICV2YWx1ZSAoJWFkZHJlc3MsIHByZWZp
eChvZmZzZXQpKQorICAgICAgICAgICAgLy8gUG9zdC1JbmRleCBDYW5vbmljYWwgRm9ybToKKyAg
ICAgICAgICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIE9mZnNldCkgICAgICAgICAgICAg
IC0tLT4gICAgTW92ZSAlYmFzZSAlYWRkcmVzcworICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9
IFN0b3JlKHZhbHVlLCBiYXNlLCAwKSAgICAgICAgICAgICAgICAgICBNb3ZlV2l0aEluY3JlbWVu
dCAldmFsdWUgKCVhZGRyZXNzLCBwb3N0Zml4KG9mZnNldCkpCisgICAgICAgICAgICBhdXRvIHRy
eUFwcGVuZEluY3JlbWVudEFkZHJlc3MgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAg
ICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1lbW9yeS0+Y2hpbGQoMCk7CisgICAgICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNb3ZlV2l0aEluY3Jl
bWVudDMyLCBNb3ZlV2l0aEluY3JlbWVudDY0LCB2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpQcmVJbmRleCwgQXJnOjpUbXApIHx8
ICFtX2luZGV4KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtX2Jsb2NrLT5hdChtX2luZGV4IC0gMSk7CisgICAgICAg
ICAgICAgICAgaWYgKGFkZHJlc3MtPm9wY29kZSgpICE9IEFkZCB8fCBhZGRyZXNzLT50eXBlKCkg
IT0gSW50NjQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAg
ICAgICAgIFZhbHVlKiBiYXNlMSA9IGFkZHJlc3MtPmNoaWxkKDApOworICAgICAgICAgICAgICAg
IFZhbHVlKiBiYXNlMiA9IG1lbW9yeS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgaWYgKGJh
c2UxICE9IGJhc2UyIHx8ICFhZGRyZXNzLT5jaGlsZCgxKS0+aGFzSW50UHRyKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKTsKKyAgICAgICAgICAgICAgICBWYWx1
ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVlOjpPZmZzZXRUeXBl
PihvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCAhPSBvZmZzZXQgfHwg
IUFyZzo6aXNWYWxpZEluY3JlbWVudEluZGV4Rm9ybShzbWFsbE9mZnNldCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAobV9sb2NrZWQuY29u
dGFpbnMoYWRkcmVzcykgfHwgbV9sb2NrZWQuY29udGFpbnMoYmFzZTEpIHx8IG1fbG9ja2VkLmNv
bnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICAgICAgQXJnIGluY3JlbWVudEFyZyA9IEFyZygpOworICAgICAgICAgICAgICAgIGlm
IChtZW1vcnktPm9mZnNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNl
dCA9PSBtZW1vcnktPm9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50
QXJnID0gQXJnOjpwcmVJbmRleCh0bXAoYWRkcmVzcyksIHNtYWxsT2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50QXJnID0gQXJnOjpw
b3N0SW5kZXgodG1wKGFkZHJlc3MpLCBzbWFsbE9mZnNldCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoaW5jcmVtZW50QXJnKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92
ZUZvclR5cGUoYWRkcmVzcy0+dHlwZSgpKSwgdG1wKGJhc2UxKSwgdG1wKGFkZHJlc3MpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKHZhbHVlKSwgaW5jcmVtZW50QXJn
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9sb2NrZWQuYWRkKGFkZHJlc3MpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeUFw
cGVuZEluY3JlbWVudEFkZHJlc3MoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAg
ICAgICAgIFZhbHVlKiB2YWx1ZVRvU3RvcmUgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKICAgICAgICAg
ICAgIGlmIChjYW5CZUludGVybmFsKHZhbHVlVG9TdG9yZSkpIHsKICAgICAgICAgICAgICAgICBi
b29sIG1hdGNoZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCA5YWE0
MGQxMjFlZTRlY2YyNmU5NGY3ZTU5ZmIxNGY5MzViZWE5Y2IyLi5lMTcxYWNmNTVlMzY3MGY4OTFm
MTViYThmMjBjNmNkYzFjMTg2OTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC0x
MTY4LDQgKzExNjgsOSBAQCB2b2lkIHRlc3RMb2FkUHJlSW5kZXg2NCgpOwogdm9pZCB0ZXN0TG9h
ZFBvc3RJbmRleDMyKCk7CiB2b2lkIHRlc3RMb2FkUG9zdEluZGV4NjQoKTsKIAordm9pZCB0ZXN0
U3RvcmVQcmVJbmRleDMyKCk7Cit2b2lkIHRlc3RTdG9yZVByZUluZGV4NjQoKTsKK3ZvaWQgdGVz
dFN0b3JlUG9zdEluZGV4MzIoKTsKK3ZvaWQgdGVzdFN0b3JlUG9zdEluZGV4NjQoKTsKKwogI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcApp
bmRleCA1MDVmZDYzOTAzY2U4ZjIyNDJkZTYwMzYzMjg5MjkwY2E4ODE5YTczLi4xZjlhZjdiZjI4
ZDExOTI5Y2JlMDJkYjBmMmJiNTNhNmY3ZjExOGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjNfMy5jcHAKQEAgLTMyMSw2ICszMjEsMTEzIEBAIHZvaWQgdGVzdExvYWRQb3N0SW5kZXg2
NCgpCiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHB0cikpLCB0ZXN0KCkpOwogfQogCit2b2lkIHRlc3RTdG9yZVByZUluZGV4MzIoKQor
eworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW50MzJfdCBudW1zW10gPSB7IDEsIDIsIDMgfTsKKyAgICBpbnQzMl90KiBw
dHIgPSAmbnVtc1sxXTsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYWRkcmVzcyA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICBWYWx1ZSogdmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAg
VmFsdWUqIG9mZnNldCA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdp
bigpLCA0KTsKKyAgICBWYWx1ZSogcHJlSW5jcmVtZW50ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBBZGQsIE9yaWdpbigpLCBhZGRyZXNzLCBvZmZzZXQpOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLCB2YWx1ZSwgcHJlSW5jcmVt
ZW50KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcHJlSW5jcmVtZW50KTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2Rl
LCAiIzRdISIpOworICAgIGludHB0cl90IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CisgICAgcHRyID0gYml0d2lzZV9jYXN0PGlu
dDMyX3QqPihyZXMpOworICAgIENIRUNLX0VRKG51bXNbMl0sICpwdHIpOworfQorCit2b2lkIHRl
c3RTdG9yZVByZUluZGV4NjQoKQoreworICAgIGlmIChPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZl
bCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50NjRfdCBudW1zW10gPSB7IDEsIDIs
IDMgfTsKKyAgICBpbnQ2NF90KiBwdHIgPSAmbnVtc1sxXTsKKworICAgIFByb2NlZHVyZSBwcm9j
OworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSog
YWRkcmVzcyA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogdmFsdWUgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgVmFsdWUqIG9mZnNldCA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KHByb2MsIE9yaWdpbigpLCA4KTsKKyAgICBWYWx1ZSogcHJlSW5jcmVtZW50ID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhZGRyZXNzLCBvZmZzZXQpOworICAg
IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLCB2YWx1
ZSwgcHJlSW5jcmVtZW50KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgcHJlSW5jcmVtZW50KTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOworICAgIGludHB0cl90IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUs
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CisgICAgcHRyID0gYml0d2lzZV9jYXN0
PGludDY0X3QqPihyZXMpOworICAgIENIRUNLX0VRKG51bXNbMl0sICpwdHIpOworfQorCit2b2lk
IHRlc3RTdG9yZVBvc3RJbmRleDMyKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0
TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDMyX3QgbnVtc1tdID0geyAx
LCAyLCAzIH07CisgICAgaW50MzJfdCogcHRyID0gJm51bXNbMV07CisKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFs
dWUqIGFkZHJlc3MgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJv
YywgU3RvcmUsIE9yaWdpbigpLCB2YWx1ZSwgYWRkcmVzcyk7CisgICAgVmFsdWUqIG9mZnNldCA9
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA0KTsKKyAgICBW
YWx1ZSogcHJlSW5jcmVtZW50ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9y
aWdpbigpLCBhZGRyZXNzLCBvZmZzZXQpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwcmVJbmNyZW1lbnQpOworCisgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tV
c2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJdLCAjNCIpOworICAgIGludHB0cl90IHJlcyA9IGludm9r
ZTxpbnRwdHJfdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CisgICAg
cHRyID0gYml0d2lzZV9jYXN0PGludDMyX3QqPihyZXMpOworICAgIENIRUNLX0VRKG51bXNbMV0s
IDQpOworICAgIENIRUNLX0VRKG51bXNbMl0sICpwdHIpOworfQorCit2b2lkIHRlc3RTdG9yZVBv
c3RJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIp
CisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1tdID0geyAxLCAyLCAzIH07Cisg
ICAgaW50NjRfdCogcHRyID0gJm51bXNbMV07CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIGFkZHJlc3Mg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLCB2
YWx1ZSwgYWRkcmVzcyk7CisgICAgVmFsdWUqIG9mZnNldCA9IHJvb3QtPmFwcGVuZE5ldzxDb25z
dDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA4KTsKKyAgICBWYWx1ZSogcHJlSW5jcmVtZW50ID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhZGRyZXNzLCBvZmZz
ZXQpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCBwcmVJbmNyZW1lbnQpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUs
ICJdLCAjOCIpOworICAgIGludHB0cl90IHJlcyA9IGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSwgNCk7CisgICAgcHRyID0gYml0d2lzZV9jYXN0PGlu
dDY0X3QqPihyZXMpOworICAgIENIRUNLX0VRKG51bXNbMV0sIDQpOworICAgIENIRUNLX0VRKG51
bXNbMl0sICpwdHIpOworfQogCiB2b2lkIHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMy
KCkKIHsKQEAgLTM5OTQsNiArNDEwMSwxMSBAQCB2b2lkIGFkZFNoclRlc3RzKGNvbnN0IGNoYXIq
IGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNrcykKICAgICBS
VU4odGVzdExvYWRQcmVJbmRleDY0KCkpOwogICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDMyKCkp
OwogICAgIFJVTih0ZXN0TG9hZFBvc3RJbmRleDY0KCkpOworCisgICAgUlVOKHRlc3RTdG9yZVBy
ZUluZGV4MzIoKSk7CisgICAgUlVOKHRlc3RTdG9yZVByZUluZGV4NjQoKSk7CisgICAgUlVOKHRl
c3RTdG9yZVBvc3RJbmRleDMyKCkpOworICAgIFJVTih0ZXN0U3RvcmVQb3N0SW5kZXg2NCgpKTsK
IH0KIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435261</attachid>
            <date>2021-08-10 08:47:19 -0700</date>
            <delta_ts>2021-08-15 10:41:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228538-20210810104717.patch</filename>
            <type>text/plain</type>
            <size>24431</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
NGI0ZmE2ZjM1ZjI5ZTY4N2Q0N2NhOTJiZjkyNGMzODJhZWE0NjFmLi45OGRjNmExOGUyNGNmNDYx
YWQxMGI5YzgxMTAxNTEyM2M1OGRlN2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzEgQEAKKzIwMjEtMDgtMTAgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIFtBUk02NF0gQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2Rl
IHRvIEFpciBmb3IgQVJNNjQgKFN0b3JlIEluc3RydWN0aW9uKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4NTM4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHByZXZpb3VzIHBhdGNoIGhhcyBpbnRy
b2R1Y2VkIHRoZSBwcmUvcG9zdC1pbmRleCBhZGRyZXNzIG1vZGUgZm9yIExvYWQgaW5zdHJ1Y3Rp
b24sCisgICAgICAgIHdoaWNoIGJlbmVmaXRzIGxvb3AgcHJvZ3JhbS4gSGVyZSwgdGhpcyBwYXRj
aCBhZGRzIHRoZSBjb3JyZXNwb25kaW5nIG1vZGUgZm9yIFN0b3JlCisgICAgICAgIGluc3RydWN0
aW9uLiBTdG9yZSBSZWdpc3RlciAoaW1tZWRpYXRlKSBzdG9yZXMgYSB3b3JkIG9yIGEgZG91Ymxl
d29yZCBmcm9tIGEgcmVnaXN0ZXIKKyAgICAgICAgdG8gbWVtb3J5LiBUaGUgYWRkcmVzcyB0aGF0
IGlzIHVzZWQgZm9yIHRoZSBzdG9yZSBpcyBjYWxjdWxhdGVkIGZyb20gYSBiYXNlIHJlZ2lzdGVy
CisgICAgICAgIGFuZCBhbiBpbW1lZGlhdGUgb2Zmc2V0LgorCisgICAgICAgICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFByZS1JbmRleCBBZGRyZXNz
IE1vZGUgRm9yIFN0b3JlICMjCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCisKKyAgICAgICAgU1RSIFd0LCBbWG4sICNpbW1dIQorCisgICAgICAgIEluIEIz
IFJlZHVjdGlvbiBTdHJlbmd0aCwgc2luY2Ugd2UgaGF2ZSB0aGlzIHJlZHVjdGlvbiBydWxlOgor
ICAgICAgICAgICAgVHVybnMgdGhpczogU3RvcmUodmFsdWUsIEFkZChhZGRyZXNzLCBvZmZzZXQx
KSwgb2Zmc2V0ID0gb2Zmc2V0MikKKyAgICAgICAgICAgIEludG8gdGhpczogU3RvcmUodmFsdWUs
IGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorCisgICAgICAgIFRoZSBlcXVp
dmFsZW50IHBhdHRlcm4gaXM6CisgICAgICAgICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNl
dCkKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJh
c2UsIG9mZnNldCkKKworICAgICAgICBIZXJlLCB3ZSBvbmx5IGNvbnNpZGVyIHRoZSBwYXR0ZXJu
OgorICAgICAgICAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICBt
ZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgb2Zmc2V0KQorCisgICAgICAgIEFuZCwgdGhpcyBw
YXRjaCBkaXJlY3RseSB0cmVhdHMgaXQgYXMgdGhlIGNhbm9uaWNhbCBmb3JtLiBJZGVhbGx5LCB3
ZSBzaG91bGQgbW92ZSAKKyAgICAgICAgbWVtb3J5IHRvIGp1c3QgYWZ0ZXIgdGhlIGFkZHJlc3Mg
bGlrZSB3aGF0IHdlIGRpZCBmb3IgUHJlSW5kZXggTG9hZCBpbiB0aGUgcHJldmlvdXMgCisgICAg
ICAgIHBhdGNoLiBCdXQsIHdlIGNhbm5vdCBwcm92aWRlIGEgYmV0dGVyIHdheSB0byBkbyB0aGF0
IHNpbmNlIHRoZSB2YWx1ZSBtYXkgYmUgCisgICAgICAgIHVzZWQgYmV0d2VlbiBhZGRyZXNzIGFu
ZCBtZW1vcnkuIFRvIG1vdmUgdmFsdWUgdXB3YXJkLCB3ZSBtdXN0IG1vdmUgYWxsIGRlc2NlbmRh
bnRzIAorICAgICAgICBvZiB0aGUgdmFsdWUgYWxvbmcgd2l0aCBpdCB0byBwcmV2ZW50IEIzIElS
IGluZGV4IHZpb2xhdGlvbnMsIHdoaWNoIGlzIHJpc2t5IGFuZCBleHBlbnNpdmUuCisKKyAgICAg
ICAgTmV4dCwgbG93ZXIgdG8gQWlyOgorICAgICAgICAgICAgTW92ZSAlYmFzZSwgJWFkZHJlc3MK
KyAgICAgICAgICAgIE1vdmUgJXZhbHVlLCAoJWFkZHJlc3MsIHByZWZpeChvZmZzZXQpKQorCisg
ICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMj
IFBvc3QtSW5kZXggQWRkcmVzcyBNb2RlIEZvciBMb2FkICMjCisgICAgICAgICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgU1RSIFd0LCBbWG5dLCAjaW1t
CisKKyAgICAgICAgVGhlbiwgdGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczoKKyAgICAgICAgICAg
IG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKQorICAgICAgICAgICAgLi4uCisgICAgICAg
ICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKworICAgICAgICBGaXJzdCwgd2UgY29u
dmVydCBpdCB0byB0aGUgY2Fub25pY2FsIGZvcm06CisgICAgICAgICAgICBuZXdPZmZzZXQgPSBD
b25zdGFudAorICAgICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAg
ICAgICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkgLy8gbW92ZSB0aGUgb2Zmc2V0
IGFuZCBhZGRyZXNzIHRvIGp1c3QgYmVmb3JlIHRoZSBtZW1vcnkKKyAgICAgICAgICAgIC4uLgor
ICAgICAgICAgICAgb2Zmc2V0ID0gSWRlbnRpdHkobmV3T2Zmc2V0KQorICAgICAgICAgICAgYWRk
cmVzcyA9IElkZW50aXR5KG5ld0FkZHJlc3MpCisKKyAgICAgICAgTmV4dCwgbG93ZXIgdG8gQWly
OgorICAgICAgICAgICAgTW92ZSAlYmFzZSwgJW5ld0FkZHJlc3MKKyAgICAgICAgICAgIE1vdmUg
JXZhbHVlLCAoJW5ld0FkZHJlc3MsIHBvc3RmaXgob2Zmc2V0KSkKKworICAgICAgICAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMjIFRlc3Qg
Zm9yIFByZS9Qb3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGUgIyMKKyAgICAgICAgIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgIEIzIElSOgor
ICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgSW50NjQgYkAwID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICBJbnQ2
NCBiQDEgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIEludDY0IGJAMiA9IENvbnN0NjQoOCkK
KyAgICAgICAgSW50NjQgYkAzID0gQWRkKGJAMCwgJDgoYkAyKSkKKyAgICAgICAgVm9pZCAgYkA0
ID0gU3RvcmUoYkAxLCBiQDMsIENvbnRyb2xEZXBlbmRlbnR8V3JpdGVzOlRvcCkKKyAgICAgICAg
Vm9pZCAgYkA1ID0gUmV0dXJuKGJAMywgVGVybWluYWwpCisgICAgICAgIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFcvTyBQ
cmUtSW5jcmVtZW50IEFkZHJlc3MgTW9kZToKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIE1vdmUgICV4MCwgJXgy
LCAgICAgIGJAMAorICAgICAgICBBZGQ2NCAgJDgsICV4MiwgJXgwLCBiQDMKKyAgICAgICAgTW92
ZSAgJXgxLCA4KCV4MiksICAgYkA0CisgICAgICAgIFJldDY0ICV4MCwgICAgICAgICAgIGJANQor
ICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAgICAgICBXLyBQcmUtSW5jcmVtZW50IEFkZHJlc3MgTW9kZToKKyAgICAgICAg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgICAgIE1vdmVXaXRoSW5jcmVtZW50NjQgJXgxLCAoJXgwLFByZSgkOCkpLCBiQDQKKyAgICAg
ICAgUmV0NjQgICAgICAgICAgICAgICAleDAsICAgICAgICAgICAgICAgIGJANQorICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
CisgICAgICAgIEIzIElSOgorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgSW50NjQgYkAwID0gQXJndW1lbnRSZWco
JXgwKQorICAgICAgICBJbnQ2NCBiQDEgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIFZvaWQg
IGJAMiA9IFN0b3JlKGJAMSwgYkAwLCBDb250cm9sRGVwZW5kZW50fFdyaXRlczpUb3ApCisgICAg
ICAgIEludDY0IGJAMyA9IENvbnN0NjQoOCkKKyAgICAgICAgSW50NjQgYkA0ID0gQWRkKGJAMCwg
JDgoYkAzKSkKKyAgICAgICAgVm9pZCAgYkA1ID0gUmV0dXJuKGJANCwgVGVybWluYWwpCisgICAg
ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisgICAgICAgIFcvTyBQb3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
ICAgICBNb3ZlICAleDEsICgleDApLCAgICAgIGJAMgorICAgICAgICBBZGQ2NCAgJDgsICAgJXgw
LCAleDAsIGJANAorICAgICAgICBSZXQ2NCAleDAsICAgICAgICAgICAgIGJANQorICAgICAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgICAgICBXLyBQb3N0LUluY3JlbWVudCBBZGRyZXNzIE1vZGU6CisgICAgICAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBN
b3ZlV2l0aEluY3JlbWVudDY0ICV4MSwgKCV4MCxQb3N0KCQ4KSksIGJAMgorICAgICAgICBSZXQ2
NCAgICAgICAgICAgICAgICV4MCwgICAgICAgICAgICAgICAgIGJANQorICAgICAgICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAg
ICAqIGIzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6Y2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMpOgorICAgICAgICAqIGIzL0IzTG93
ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIz
XzMuY3BwOgorICAgICAgICAodGVzdFN0b3JlUHJlSW5kZXgzMik6CisgICAgICAgICh0ZXN0U3Rv
cmVQcmVJbmRleDY0KToKKyAgICAgICAgKHRlc3RTdG9yZVBvc3RJbmRleDMyKToKKyAgICAgICAg
KHRlc3RTdG9yZVBvc3RJbmRleDY0KToKKyAgICAgICAgKGFkZFNoclRlc3RzKToKKwogMjAyMS0w
OC0wOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0Nd
IHN1cGVyLUxhdGluMSB3aGl0ZSBzcGFjZSBhbmQgbGluZSB0ZXJtaW5hdG9yIGFmdGVyIHJlZ3Vs
YXIgZXhwcmVzc2lvbiBsaXRlcmFsIG1pc2ludGVycHJldGVkIGFzIGZsYWdzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYW5vbmljYWxpemVQcmVQb3N0SW5j
cmVtZW50cy5jcHAKaW5kZXggODNmNzA5OTU1MGJmNzQ2ZTdkOWNkMmQ2ZDVmYTM1YzY4ZTBhM2Y2
Yy4uY2VkY2JmNzBlNzBmODRjODAwZmE4OWM3ZGQ4MWE0M2Y4OTI3YTJlMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nhbm9uaWNhbGl6ZVByZVBvc3RJ
bmNyZW1lbnRzLmNwcApAQCAtNTgsMjUgKzU4LDI3IEBAIGJvb2wgY2Fub25pY2FsaXplUHJlUG9z
dEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGJh
Y2t3YXJkc0RvbWluYXRvcnMgPSBwcm9jLmJhY2t3YXJkc0RvbWluYXRvcnMoKTsKIAogICAgIElu
ZGV4U2V0PFZhbHVlKj4gaWdub3JlZFZhbHVlczsKLSAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwg
VmFsdWUqPiBwcmVJbmRleENhbmRpZGF0ZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZh
bHVlKj4gcG9zdEluZGV4Q2FuZGlkYXRlczsKLSAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1l
bW9yeVZhbHVlKj4+IGJhc2VUb01lbW9yaWVzOworICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8
TWVtb3J5VmFsdWUqPj4gYmFzZVRvTG9hZHM7CisgICAgSGFzaE1hcDxNZW1vcnlWYWx1ZSosIFZh
bHVlKj4gcHJlSW5kZXhMb2FkQ2FuZGlkYXRlczsKKyAgICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwg
VmFsdWUqPiBwb3N0SW5kZXhMb2FkQ2FuZGlkYXRlczsKICAgICBIYXNoTWFwPFZhbHVlS2V5LCBW
ZWN0b3I8VmFsdWUqPj4gYmFzZU9mZnNldFRvQWRkcmVzc2VzOwogCi0gICAgLy8gUHJlLUluZGV4
IFBhdHRlcm46Ci0gICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQotICAgIC8v
ICAgICAqKioKLSAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0gICAgLy8g
UG9zdC1JbmRleCBQYXR0ZXJuOgotICAgIC8vICAgICBtZW1vcnkgPSBMb2FkKGJhc2UsIDApCi0g
ICAgLy8gICAgICoqKgotICAgIC8vICAgICBhZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKKyAg
ICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPE1lbW9yeVZhbHVlKj4+IGJhc2VUb1N0b3JlczsKKyAg
ICBIYXNoTWFwPE1lbW9yeVZhbHVlKiwgVmFsdWUqPiBwb3N0SW5kZXhTdG9yZUNhbmRpZGF0ZXM7
CisKICAgICBhdXRvIHRyeUFkZFByZVBvc3RJbmRleENhbmRpZGF0ZSA9IFsmXSAoVmFsdWUqIHZh
bHVlKSB7CiAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CiAgICAgICAgIGNhc2Ug
TG9hZDogewotICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKTsKLQotICAgICAgICAgICAgYXV0byB0cnlBZGRQcmVJbmRleENhbmRpZGF0ZXMg
PSBbJl0gKCkgeworICAgICAgICAgICAgLy8gUHJlLUluZGV4IFBhdHRlcm46CisgICAgICAgICAg
ICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAgICAgICAgICAvLyAgICAg
Li4uCisgICAgICAgICAgICAvLyAgICAgbWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCisgICAg
ICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAvLyAgICAgbWVtb3J5
ID0gTG9hZChiYXNlLCAwKQorICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAgLy8g
ICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAgICAgYXV0byB0cnlBZGRw
cmVJbmRleExvYWRDYW5kaWRhdGVzID0gWyZdICgpIHsKKyAgICAgICAgICAgICAgICBNZW1vcnlW
YWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOwogICAgICAgICAgICAgICAg
IGlmIChtZW1vcnktPnR5cGUoKSAhPSBJbnQzMiAmJiBtZW1vcnktPnR5cGUoKSAhPSBJbnQ2NCkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIGlmIChtZW1vcnkt
Pm9mZnNldCgpKSB7CkBAIC04NiwxMiArODgsMzMgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0
SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgICAgICAgICAgICAgIGlmICghYmFz
ZU9mZnNldFRvQWRkcmVzc2VzLmNvbnRhaW5zKGJhc2VPZmZzZXRrZXkpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBhZGRy
ZXNzIDogYmFzZU9mZnNldFRvQWRkcmVzc2VzLmdldChiYXNlT2Zmc2V0a2V5KSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByZUluZGV4Q2FuZGlkYXRlcy5hZGQobWVtb3J5LCBhZGRyZXNzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHByZUluZGV4TG9hZENhbmRpZGF0ZXMuYWRkKG1lbW9y
eSwgYWRkcmVzcyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGJhc2VUb01lbW9yaWVzLmFkZChtZW1vcnktPmNoaWxkKDApLCBWZWN0b3I8TWVtb3J5VmFsdWUq
PigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgICAg
IGJhc2VUb0xvYWRzLmFkZChtZW1vcnktPmNoaWxkKDApLCBWZWN0b3I8TWVtb3J5VmFsdWUqPigp
KS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CisgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICB0cnlBZGRwcmVJbmRleExvYWRDYW5kaWRhdGVzKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgICAgIC8vIFBy
ZS1JbmRleCBQYXR0ZXJuOgorICAgICAgICAgICAgLy8gICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwg
b2Zmc2V0KQorICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCBv
ZmZzZXQpCisgICAgICAgICAgICAvLyBQb3N0LUluZGV4IFBhdHRlcm46CisgICAgICAgICAgICAv
LyAgICAgbWVtb3J5ID0gU3RvcmUodmFsdWUsIGJhc2UsIDApCisgICAgICAgICAgICAvLyAgICAg
Li4uCisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpCisgICAg
ICAgICAgICBhdXRvIHRyeVVwZGF0ZUJhc2VUb1N0b3JlcyA9IFsmXSAoKSB7CisgICAgICAgICAg
ICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAg
ICAgICAgICAgICAgICBpZiAobWVtb3J5LT5jaGlsZCgwKS0+dHlwZSgpICE9IEludDMyICYmIG1l
bW9yeS0+Y2hpbGQoMCktPnR5cGUoKSAhPSBJbnQ2NCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPmNoaWxkKDApLT5oYXNJbnQoKSB8fCBt
ZW1vcnktPm9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgYmFzZVRvU3RvcmVzLmFkZChtZW1vcnktPmNoaWxkKDEpLCBWZWN0b3I8TWVtb3J5VmFs
dWUqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1lbW9yeSk7CiAgICAgICAgICAgICB9Owog
Ci0gICAgICAgICAgICB0cnlBZGRQcmVJbmRleENhbmRpZGF0ZXMoKTsKKyAgICAgICAgICAgIHRy
eVVwZGF0ZUJhc2VUb1N0b3JlcygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApA
QCAtOTksNyArMTIyLDcgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9j
ZWR1cmUmIHByb2MpCiAgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IHZhbHVlLT5jaGlsZCgwKTsK
ICAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IHZhbHVlLT5jaGlsZCgxKTsKIAotICAgICAgICAg
ICAgYXV0byB0cnlBZGRQb3N0SW5kZXhDYW5kaWRhdGVzID0gWyZdICgpIHsKKyAgICAgICAgICAg
IGF1dG8gdHJ5QWRkcG9zdEluZGV4Q2FuZGlkYXRlcyA9IFsmXSAoKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFyaWdodC0+aGFzSW50UHRyKCkgfHwgdmFsdWUtPnR5cGUoKSAhPSBJbnQ2NCkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNl
dCA9IHJpZ2h0LT5hc0ludFB0cigpOwpAQCAtMTA5LDEzICsxMzIsMTcgQEAgYm9vbCBjYW5vbmlj
YWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgICAgICAgICAg
Ly8gc28gZmFyIHRoaXMgQWRkIHZhbHVlIGlzIGEgdmFsaWQgYWRkcmVzcyBjYW5kaWRhdGUgZm9y
IGJvdGggcHJlZml4IGFuZCBwb3N0Zml4IHBhdHRlcm4KICAgICAgICAgICAgICAgICBWYWx1ZUtl
eSBiYXNlT2Zmc2V0a2V5ID0gVmFsdWVLZXkobGVmdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oc21h
bGxPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBiYXNlT2Zmc2V0VG9BZGRyZXNzZXMuYWRkKGJh
c2VPZmZzZXRrZXksIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQodmFs
dWUpOwotICAgICAgICAgICAgICAgIGlmICghYmFzZVRvTWVtb3JpZXMuY29udGFpbnMobGVmdCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBmb3IgKE1lbW9y
eVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9NZW1vcmllcy5nZXQobGVmdCkpCi0gICAgICAgICAgICAg
ICAgICAgIHBvc3RJbmRleENhbmRpZGF0ZXMuYWRkKG1lbW9yeSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIGlmIChiYXNlVG9Mb2Fkcy5jb250YWlucyhsZWZ0KSkgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtZW1vcnkgOiBiYXNlVG9Mb2Fkcy5nZXQobGVmdCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBwb3N0SW5kZXhMb2FkQ2FuZGlkYXRlcy5hZGQobWVtb3J5
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChiYXNlVG9T
dG9yZXMuY29udGFpbnMobGVmdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChNZW1vcnlW
YWx1ZSogbWVtb3J5IDogYmFzZVRvU3RvcmVzLmdldChsZWZ0KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBvc3RJbmRleFN0b3JlQ2FuZGlkYXRlcy5hZGQobWVtb3J5LCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgdHJ5QWRkUG9zdElu
ZGV4Q2FuZGlkYXRlcygpOworICAgICAgICAgICAgdHJ5QWRkcG9zdEluZGV4Q2FuZGlkYXRlcygp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTM0LDYgKzE2MSw4IEBAIGJv
b2wgY2Fub25pY2FsaXplUHJlUG9zdEluY3JlbWVudHMoUHJvY2VkdXJlJiBwcm9jKQogICAgICAg
ICAgICAgfHwgKGRvbWluYXRvcnMuZG9taW5hdGVzKHYyLT5vd25lciwgdjEtPm93bmVyKSAmJiBi
YWNrd2FyZHNEb21pbmF0b3JzLmRvbWluYXRlcyh2MS0+b3duZXIsIHYyLT5vd25lcikpOwogICAg
IH07CiAKKyAgICAvLyBUaGlzIHNlYXJjaCBpcyBleHBlbnNpdmUuIEhvd2V2ZXIsIGR1ZSB0byB0
aGUgZ3JlZWR5IHBhdHRlcm4KKyAgICAvLyBtYXRjaGluZywgbm8gYmV0dGVyIG1ldGhvZCBjYW4g
YmUgcHJvcG9zZWQgYXQgcHJlc2VudC4KICAgICBhdXRvIHZhbHVlSW5kZXhJbkJhc2ljQmxvY2sg
PSBbJl0gKFZhbHVlKiB2YWx1ZSkgLT4gdW5zaWduZWQgewogICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IDA7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gdmFsdWUtPm93bmVyOwpAQCAtMTQ0
LDQzICsxNzMsNTYgQEAgYm9vbCBjYW5vbmljYWxpemVQcmVQb3N0SW5jcmVtZW50cyhQcm9jZWR1
cmUmIHByb2MpCiAgICAgICAgIHJldHVybiBpbmRleDsKICAgICB9OwogCi0gICAgYXV0byBkZXRl
Y3QgPSBbJl0gKGNvbnN0IEhhc2hNYXA8TWVtb3J5VmFsdWUqLCBWYWx1ZSo+JiBjYW5kaWRhdGVz
LCBib29sIGlzUHJlSW5kZXhDYW5kaWRhdGVzKSB7CisgICAgZm9yIChhdXRvIHBhaXIgOiBwcmVJ
bmRleExvYWRDYW5kaWRhdGVzKSB7CisgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBwYWly
LmtleTsKKyAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBwYWlyLnZhbHVlOworICAgICAgICBpZiAo
aWdub3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMo
YWRkcmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAg
ICAgIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KQorICAgICAgICAvLyAuLi4gICAgICAgICAg
ICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCisgICAg
ICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgLy8g
bWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpICAgICAgIG1lbW9yeSA9IElkZW50aXR5KG5ld01l
bW9yeSkKKyAgICAgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSB2YWx1ZUluZGV4SW5CYXNp
Y0Jsb2NrKGFkZHJlc3MpICsgMTsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG5ld01lbW9yeSA9IGlu
c2VydGlvblNldC5pbnNlcnQ8TWVtb3J5VmFsdWU+KGluc2VydGlvbkluZGV4LCBMb2FkLCBtZW1v
cnktPnR5cGUoKSwgYWRkcmVzcy0+b3JpZ2luKCksIG1lbW9yeS0+bGFzdENoaWxkKCkpOworICAg
ICAgICBuZXdNZW1vcnktPnNldE9mZnNldChtZW1vcnktPm9mZnNldCgpKTsKKyAgICAgICAgbWVt
b3J5LT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld01lbW9yeSk7CisgICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKGFkZHJlc3MtPm93bmVyKTsKKworICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZCht
ZW1vcnkpOworICAgICAgICBpZ25vcmVkVmFsdWVzLmFkZChhZGRyZXNzKTsKKyAgICB9CisKKyAg
ICBhdXRvIGRldGVjdFBvc3RJbmRleCA9IFsmXSAoY29uc3QgSGFzaE1hcDxNZW1vcnlWYWx1ZSos
IFZhbHVlKj4mIGNhbmRpZGF0ZXMpIHsKICAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBjYW5kaWRh
dGVzKSB7CiAgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gcGFpci5rZXk7CiAgICAg
ICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IHBhaXIudmFsdWU7CiAgICAgICAgICAgICBpZiAoaWdu
b3JlZFZhbHVlcy5jb250YWlucyhtZW1vcnkpIHx8IGlnbm9yZWRWYWx1ZXMuY29udGFpbnMoYWRk
cmVzcykgfHwgIWNvbnRyb2xFcXVpdmFsZW50KG1lbW9yeSwgYWRkcmVzcykpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmIChpc1ByZUluZGV4Q2FuZGlkYXRlcykg
ewotICAgICAgICAgICAgICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICBh
ZGRyZXNzID0gQWRkKGJhc2UsIG9mZnNldCkKLSAgICAgICAgICAgICAgICAvLyAqKiogICAgICAg
ICAgICAgICAgICAgICAgICAgIC0tPiAgbmV3TWVtb3J5ID0gTG9hZChiYXNlLCBvZmZzZXQpCi0g
ICAgICAgICAgICAgICAgLy8gKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgot
ICAgICAgICAgICAgICAgIC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgb2Zmc2V0KSAgICAgICBtZW1v
cnkgPSBJZGVudGl0eShuZXdNZW1vcnkpCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW5zZXJ0
aW9uSW5kZXggPSB2YWx1ZUluZGV4SW5CYXNpY0Jsb2NrKGFkZHJlc3MpICsgMTsKLSAgICAgICAg
ICAgICAgICBNZW1vcnlWYWx1ZSogbmV3TWVtb3J5ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1v
cnlWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIExvYWQsIG1lbW9yeS0+dHlwZSgpLCBhZGRyZXNzLT5v
cmlnaW4oKSwgbWVtb3J5LT5sYXN0Q2hpbGQoKSk7Ci0gICAgICAgICAgICAgICAgbmV3TWVtb3J5
LT5zZXRPZmZzZXQobWVtb3J5LT5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgbWVtb3J5LT5y
ZXBsYWNlV2l0aElkZW50aXR5KG5ld01lbW9yeSk7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoYWRkcmVzcy0+b3duZXIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAvLyAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3T2Zmc2V0
ID0gQ29uc3RhbnQKLSAgICAgICAgICAgICAgICAvLyAqKiogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3QWRkcmVzcyA9IEFkZChiYXNlLCBuZXdPZmZzZXQpCi0gICAgICAgICAgICAg
ICAgLy8gbWVtb3J5ID0gTG9hZChiYXNlLCAwKSAgICAgICAgICAgIG1lbW9yeSA9IExvYWQoYmFz
ZSwgMCkKLSAgICAgICAgICAgICAgICAvLyAqKiogICAgICAgICAgICAgICAgICAgICAgICAgIC0t
PiAgKioqCi0gICAgICAgICAgICAgICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAg
ICAgIGFkZHJlc3MgPSBJZGVudGl0eShuZXdBZGRyZXNzKQotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluc2VydGlvbkluZGV4ID0gdmFsdWVJbmRleEluQmFzaWNCbG9jayhtZW1vcnkpOwotICAg
ICAgICAgICAgICAgIFZhbHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0
NjRWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3MtPmNoaWxk
KDEpLT5hc0ludCgpKTsKLSAgICAgICAgICAgICAgICBWYWx1ZSogbmV3QWRkcmVzcyA9IGluc2Vy
dGlvblNldC5pbnNlcnQ8VmFsdWU+KGluc2VydGlvbkluZGV4LCBBZGQsIG1lbW9yeS0+b3JpZ2lu
KCksIGFkZHJlc3MtPmNoaWxkKDApLCBuZXdPZmZzZXQpOwotICAgICAgICAgICAgICAgIGFkZHJl
c3MtPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3QWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IHZhbHVlSW5kZXhJbkJhc2ljQmxvY2sobWVt
b3J5KTsKKyAgICAgICAgICAgIFZhbHVlKiBuZXdPZmZzZXQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0
PENvbnN0NjRWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIG1lbW9yeS0+b3JpZ2luKCksIGFkZHJlc3Mt
PmNoaWxkKDEpLT5hc0ludCgpKTsKKyAgICAgICAgICAgIFZhbHVlKiBuZXdBZGRyZXNzID0gaW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5zZXJ0aW9uSW5kZXgsIEFkZCwgbWVtb3J5LT5vcmln
aW4oKSwgYWRkcmVzcy0+Y2hpbGQoMCksIG5ld09mZnNldCk7CisgICAgICAgICAgICBhZGRyZXNz
LT5yZXBsYWNlV2l0aElkZW50aXR5KG5ld0FkZHJlc3MpOworICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0LmV4ZWN1dGUobWVtb3J5LT5vd25lcik7CiAKLSAgICAgICAgICAgIGlnbm9yZWRWYWx1ZXMu
YWRkKGFkZHJlc3MpOwogICAgICAgICAgICAgaWdub3JlZFZhbHVlcy5hZGQobWVtb3J5KTsKKyAg
ICAgICAgICAgIGlnbm9yZWRWYWx1ZXMuYWRkKGFkZHJlc3MpOwogICAgICAgICB9CiAgICAgfTsK
IAotICAgIGRldGVjdChwcmVJbmRleENhbmRpZGF0ZXMsIHRydWUpOwotICAgIGRldGVjdChwb3N0
SW5kZXhDYW5kaWRhdGVzLCBmYWxzZSk7CisgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld09mZnNldCA9IENvbnN0YW50CisgICAgLy8gLi4uICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zmc2V0KQor
ICAgIC8vIG1lbW9yeSA9IExvYWQoYmFzZSwgMCkgICAgICAgICAgICAgICBtZW1vcnkgPSBMb2Fk
KGJhc2UsIDApCisgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPiAgIC4u
LgorICAgIC8vIGFkZHJlc3MgPSBBZGQoYmFzZSwgb2Zmc2V0KSAgICAgICAgICBhZGRyZXNzID0g
SWRlbnRpdHkobmV3QWRkcmVzcykKKyAgICBkZXRlY3RQb3N0SW5kZXgocG9zdEluZGV4TG9hZENh
bmRpZGF0ZXMpOworCisgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld09mZnNldCA9IENvbnN0YW50CisgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld0FkZHJlc3MgPSBBZGQoYmFzZSwgbmV3T2Zmc2V0KQorICAgIC8vIG1lbW9y
eSA9IFN0b3JlKHZhbHVlLCBiYXNlLCAwKSAgICAgICBtZW1vcnkgPSBTdG9yZSh2YWx1ZSwgYmFz
ZSwgMCkKKyAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+ICAgLi4uCisg
ICAgLy8gYWRkcmVzcyA9IEFkZChiYXNlLCBvZmZzZXQpICAgICAgICAgIGFkZHJlc3MgPSBJZGVu
dGl0eShuZXdBZGRyZXNzKQorICAgIGRldGVjdFBvc3RJbmRleChwb3N0SW5kZXhTdG9yZUNhbmRp
ZGF0ZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyVG9BaXIuY3BwCmluZGV4IGMzOTMwNjMwMWJiYmMwYzllNDQ1NWE0MGZkMDBhYzU3ZmJj
YTMzNTcuLjZkM2RjNGRmYTdlZmRkMmZiNGY2ZmYxMDQ0MjU2YzM4ZmVmNDg4NTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0zNDM2LDYgKzM0MzYsNTIg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAg
ICAgIC8vIFByZS1JbmRleCBDYW5vbmljYWwgRm9ybToKKyAgICAgICAgICAgIC8vICAgICBhZGRy
ZXNzID0gQWRkKGJhc2UsIE9mZnNldCkgICAgICAgICAgICAgIC0tLT4gICAgTW92ZSAlYmFzZSAl
YWRkcmVzcworICAgICAgICAgICAgLy8gICAgIG1lbW9yeSA9IFN0b3JlKHZhbHVlLCBiYXNlLCBP
ZmZzZXQpICAgICAgICAgICAgICBNb3ZlV2l0aEluY3JlbWVudCAldmFsdWUgKCVhZGRyZXNzLCBw
cmVmaXgob2Zmc2V0KSkKKyAgICAgICAgICAgIC8vIFBvc3QtSW5kZXggQ2Fub25pY2FsIEZvcm06
CisgICAgICAgICAgICAvLyAgICAgYWRkcmVzcyA9IEFkZChiYXNlLCBPZmZzZXQpICAgICAgICAg
ICAgICAtLS0+ICAgIE1vdmUgJWJhc2UgJWFkZHJlc3MKKyAgICAgICAgICAgIC8vICAgICBtZW1v
cnkgPSBTdG9yZSh2YWx1ZSwgYmFzZSwgMCkgICAgICAgICAgICAgICAgICAgTW92ZVdpdGhJbmNy
ZW1lbnQgJXZhbHVlICglYWRkcmVzcywgcG9zdGZpeChvZmZzZXQpKQorICAgICAgICAgICAgYXV0
byB0cnlBcHBlbmRJbmNyZW1lbnRBZGRyZXNzID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAg
ICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsK
KyAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBtZW1vcnktPmNoaWxkKDApOworICAgICAg
ICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTW92ZVdpdGhJ
bmNyZW1lbnQzMiwgTW92ZVdpdGhJbmNyZW1lbnQ2NCwgdmFsdWUtPnR5cGUoKSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6UHJlSW5kZXgsIEFyZzo6VG1w
KSB8fCAhbV9pbmRleCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gbV9ibG9jay0+YXQobV9pbmRleCAtIDEpOworICAg
ICAgICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSAhPSBBZGQgfHwgYWRkcmVzcy0+dHlw
ZSgpICE9IEludDY0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgICAgICAgICBWYWx1ZSogYmFzZTEgPSBhZGRyZXNzLT5jaGlsZCgwKTsKKyAgICAgICAgICAg
ICAgICBWYWx1ZSogYmFzZTIgPSBtZW1vcnktPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIGlm
IChiYXNlMSAhPSBiYXNlMiB8fCAhYWRkcmVzcy0+Y2hpbGQoMSktPmhhc0ludFB0cigpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaW50cHRyX3Qg
b2Zmc2V0ID0gYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50UHRyKCk7CisgICAgICAgICAgICAgICAg
VmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0
VHlwZT4ob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgIT0gb2Zmc2V0
IHx8ICFBcmc6OmlzVmFsaWRJbmNyZW1lbnRJbmRleEZvcm0oc21hbGxPZmZzZXQpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2Vk
LmNvbnRhaW5zKGFkZHJlc3MpIHx8IG1fbG9ja2VkLmNvbnRhaW5zKGJhc2UxKSB8fCBtX2xvY2tl
ZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgICAgIEFyZyBpbmNyZW1lbnRBcmcgPSBBcmcoKTsKKyAgICAgICAgICAgICAg
ICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc21hbGxP
ZmZzZXQgPT0gbWVtb3J5LT5vZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY3Jl
bWVudEFyZyA9IEFyZzo6cHJlSW5kZXgodG1wKGFkZHJlc3MpLCBzbWFsbE9mZnNldCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEFyZyA9IEFy
Zzo6cG9zdEluZGV4KHRtcChhZGRyZXNzKSwgc21hbGxPZmZzZXQpOworCisgICAgICAgICAgICAg
ICAgaWYgKGluY3JlbWVudEFyZykgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhl
ZE1vdmVGb3JUeXBlKGFkZHJlc3MtPnR5cGUoKSksIHRtcChiYXNlMSksIHRtcChhZGRyZXNzKSk7
CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcCh2YWx1ZSksIGluY3JlbWVu
dEFyZyk7CisgICAgICAgICAgICAgICAgICAgIG1fbG9ja2VkLmFkZChhZGRyZXNzKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0
cnlBcHBlbmRJbmNyZW1lbnRBZGRyZXNzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCiAg
ICAgICAgICAgICBWYWx1ZSogdmFsdWVUb1N0b3JlID0gbV92YWx1ZS0+Y2hpbGQoMCk7CiAgICAg
ICAgICAgICBpZiAoY2FuQmVJbnRlcm5hbCh2YWx1ZVRvU3RvcmUpKSB7CiAgICAgICAgICAgICAg
ICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXgg
OWFhNDBkMTIxZWU0ZWNmMjZlOTRmN2U1OWZiMTRmOTM1YmVhOWNiMi4uZTE3MWFjZjU1ZTM2NzBm
ODkxZjE1YmE4ZjIwYzZjZGMxYzE4NjkyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApA
QCAtMTE2OCw0ICsxMTY4LDkgQEAgdm9pZCB0ZXN0TG9hZFByZUluZGV4NjQoKTsKIHZvaWQgdGVz
dExvYWRQb3N0SW5kZXgzMigpOwogdm9pZCB0ZXN0TG9hZFBvc3RJbmRleDY0KCk7CiAKK3ZvaWQg
dGVzdFN0b3JlUHJlSW5kZXgzMigpOwordm9pZCB0ZXN0U3RvcmVQcmVJbmRleDY0KCk7Cit2b2lk
IHRlc3RTdG9yZVBvc3RJbmRleDMyKCk7Cit2b2lkIHRlc3RTdG9yZVBvc3RJbmRleDY0KCk7CisK
ICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiM18zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5j
cHAKaW5kZXggNTA1ZmQ2MzkwM2NlOGYyMjQyZGU2MDM2MzI4OTI5MGNhODgxOWE3My4uMWY5YWY3
YmYyOGQxMTkyOWNiZTAyZGIwZjJiYjUzYTZmN2YxMThmOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzXzMuY3BwCkBAIC0zMjEsNiArMzIxLDExMyBAQCB2b2lkIHRlc3RMb2FkUG9zdElu
ZGV4NjQoKQogICAgIENIRUNLX0VRKGludm9rZTxpbnQ2NF90PigqY29kZSwgYml0d2lzZV9jYXN0
PGludHB0cl90PihwdHIpKSwgdGVzdCgpKTsKIH0KIAordm9pZCB0ZXN0U3RvcmVQcmVJbmRleDMy
KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAg
IHJldHVybjsKKworICAgIGludDMyX3QgbnVtc1tdID0geyAxLCAyLCAzIH07CisgICAgaW50MzJf
dCogcHRyID0gJm51bXNbMV07CisKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIGFkZHJlc3MgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOwor
ICAgIFZhbHVlKiBvZmZzZXQgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgNCk7CisgICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVzcywgb2Zmc2V0KTsKKyAgICByb290LT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgdmFsdWUsIHByZUlu
Y3JlbWVudCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwg
T3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgIiM0XSEiKTsKKyAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2Rl
LCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOworICAgIHB0ciA9IGJpdHdpc2VfY2Fz
dDxpbnQzMl90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKK30KKwordm9p
ZCB0ZXN0U3RvcmVQcmVJbmRleDY0KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZGVmYXVsdEIzT3B0
TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGludDY0X3QgbnVtc1tdID0geyAx
LCAyLCAzIH07CisgICAgaW50NjRfdCogcHRyID0gJm51bXNbMV07CisKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFs
dWUqIGFkZHJlc3MgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgIFZhbHVlKiBvZmZzZXQgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgOCk7CisgICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVzcywgb2Zmc2V0KTsK
KyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwg
dmFsdWUsIHByZUluY3JlbWVudCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHByZUluY3JlbWVudCk7CisKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKKyAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpj
b2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOworICAgIHB0ciA9IGJpdHdpc2Vf
Y2FzdDxpbnQ2NF90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKK30KKwor
dm9pZCB0ZXN0U3RvcmVQb3N0SW5kZXgzMigpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMl90IG51bXNbXSA9
IHsgMSwgMiwgMyB9OworICAgIGludDMyX3QqIHB0ciA9ICZudW1zWzFdOworCisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
IFZhbHVlKiBhZGRyZXNzID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiB2YWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgdmFsdWUsIGFkZHJlc3MpOworICAgIFZhbHVlKiBvZmZz
ZXQgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNCk7Cisg
ICAgVmFsdWUqIHByZUluY3JlbWVudCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRk
LCBPcmlnaW4oKSwgYWRkcmVzcywgb2Zmc2V0KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9s
VmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcHJlSW5jcmVtZW50KTsKKworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiXSwgIzQiKTsKKyAgICBpbnRwdHJfdCByZXMgPSBp
bnZva2U8aW50cHRyX3Q+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOwor
ICAgIHB0ciA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShudW1z
WzFdLCA0KTsKKyAgICBDSEVDS19FUShudW1zWzJdLCAqcHRyKTsKK30KKwordm9pZCB0ZXN0U3Rv
cmVQb3N0SW5kZXg2NCgpCit7CisgICAgaWYgKE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkg
PCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQ2NF90IG51bXNbXSA9IHsgMSwgMiwgMyB9
OworICAgIGludDY0X3QqIHB0ciA9ICZudW1zWzFdOworCisgICAgUHJvY2VkdXJlIHByb2M7Cisg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiBhZGRy
ZXNzID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiB2YWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIFN0b3JlLCBPcmlnaW4o
KSwgdmFsdWUsIGFkZHJlc3MpOworICAgIFZhbHVlKiBvZmZzZXQgPSByb290LT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgOCk7CisgICAgVmFsdWUqIHByZUluY3JlbWVu
dCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkcmVzcywg
b2Zmc2V0KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgcHJlSW5jcmVtZW50KTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOworICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpj
b2RlLCAiXSwgIzgiKTsKKyAgICBpbnRwdHJfdCByZXMgPSBpbnZva2U8aW50cHRyX3Q+KCpjb2Rl
LCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0ciksIDQpOworICAgIHB0ciA9IGJpdHdpc2VfY2Fz
dDxpbnQ2NF90Kj4ocmVzKTsKKyAgICBDSEVDS19FUShudW1zWzFdLCA0KTsKKyAgICBDSEVDS19F
UShudW1zWzJdLCAqcHRyKTsKK30KIAogdm9pZCB0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblpl
cm8zMigpCiB7CkBAIC0zOTk0LDYgKzQxMDEsMTEgQEAgdm9pZCBhZGRTaHJUZXN0cyhjb25zdCBj
aGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAg
ICAgUlVOKHRlc3RMb2FkUHJlSW5kZXg2NCgpKTsKICAgICBSVU4odGVzdExvYWRQb3N0SW5kZXgz
MigpKTsKICAgICBSVU4odGVzdExvYWRQb3N0SW5kZXg2NCgpKTsKKworICAgIFJVTih0ZXN0U3Rv
cmVQcmVJbmRleDMyKCkpOworICAgIFJVTih0ZXN0U3RvcmVQcmVJbmRleDY0KCkpOworICAgIFJV
Tih0ZXN0U3RvcmVQb3N0SW5kZXgzMigpKTsKKyAgICBSVU4odGVzdFN0b3JlUG9zdEluZGV4NjQo
KSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>