<?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>201251</bug_id>
          
          <creation_ts>2019-08-28 16:53:09 -0700</creation_ts>
          <short_desc>[WHLSL] Add back a version of the property resolver</short_desc>
          <delta_ts>2019-09-13 16:29:50 -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>WebGPU</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>
          <dependson>201008</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>dino</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1565962</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-28 16:53:09 -0700</bug_when>
    <thetext>The goal will be to:
- make each property access&apos;s base effect free so metal codegen can emit 
- make the leftmost base of RMW effect free so we can emit the &quot;leftValue()&quot; twice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565991</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-28 17:33:18 -0700</bug_when>
    <thetext>and add back all the property resolver tests that make sense in this new world</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566808</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-30 14:10:43 -0700</bug_when>
    <thetext>also we&apos;ll want the &quot;high zombie finder&quot; to have some new rules</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568257</commentid>
    <comment_count>3</comment_count>
      <attachid>378121</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-05 14:23:14 -0700</bug_when>
    <thetext>Created attachment 378121
WIP

it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568332</commentid>
    <comment_count>4</comment_count>
      <attachid>378142</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-05 17:49:44 -0700</bug_when>
    <thetext>Created attachment 378142
WIP

it seems to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568359</commentid>
    <comment_count>5</comment_count>
      <attachid>378151</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-05 18:59:57 -0700</bug_when>
    <thetext>Created attachment 378151
WIP

I think it&apos;s done, I just want to write some more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568762</commentid>
    <comment_count>6</comment_count>
      <attachid>378251</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-06 16:30:01 -0700</bug_when>
    <thetext>Created attachment 378251
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568778</commentid>
    <comment_count>7</comment_count>
      <attachid>378251</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-09-06 17:21:23 -0700</bug_when>
    <thetext>Comment on attachment 378251
patch

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

r=me

&gt; Source/WebCore/ChangeLog:9
&gt; +        The goal of the new property resolver phase is two allow two things:

two allow =&gt; to allow

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:90
&gt; +        while (true) {

This pattern of
```
while(true) {
..
chain.append(current);
if (is&lt;AST::PropertyAccessExpression&gt;(current.base()))
  continue;
Tons of code that only executes once
break;
}
```
is not super readable. It is probably not worth modifying now, but I am curious, why not just use the loop to accumulate the chain:
```
while (is&lt;AST::PropertyAccessExpression&gt;(current.base())) {
  append to chain
  current = *currentPtr;
}
tons of code that manipulate current but are now outside of the loop
```

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:245
&gt; +        RELEASE_ASSERT(m_variables.isEmpty());

There is no guarantee that the WTFMove later on will empty-out m_variables.
I think you need to either empty it by hand, or more simply to construct a different PropertyResolver for each function definition in resolveProperties.

&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h:63
&gt; +    ReadModifyWriteExpression(CodeLocation location, UniqueRef&lt;Expression&gt; leftValue, UniqueRef&lt;VariableDeclaration&gt; oldValue, UniqueRef&lt;VariableDeclaration&gt; newValue)

I am unclear on whether it is better to pass UniqueRef&lt;Expression&gt; or UniqueRef&lt;Expression&gt;&amp;&amp; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569050</commentid>
    <comment_count>8</comment_count>
      <attachid>378251</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-08 20:12:17 -0700</bug_when>
    <thetext>Comment on attachment 378251
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:90
&gt;&gt; +        while (true) {
&gt; 
&gt; This pattern of
&gt; ```
&gt; while(true) {
&gt; ..
&gt; chain.append(current);
&gt; if (is&lt;AST::PropertyAccessExpression&gt;(current.base()))
&gt;   continue;
&gt; Tons of code that only executes once
&gt; break;
&gt; }
&gt; ```
&gt; is not super readable. It is probably not worth modifying now, but I am curious, why not just use the loop to accumulate the chain:
&gt; ```
&gt; while (is&lt;AST::PropertyAccessExpression&gt;(current.base())) {
&gt;   append to chain
&gt;   current = *currentPtr;
&gt; }
&gt; tons of code that manipulate current but are now outside of the loop
&gt; ```

fixed.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:245
&gt;&gt; +        RELEASE_ASSERT(m_variables.isEmpty());
&gt; 
&gt; There is no guarantee that the WTFMove later on will empty-out m_variables.
&gt; I think you need to either empty it by hand, or more simply to construct a different PropertyResolver for each function definition in resolveProperties.

that&apos;s how move constructor of Vector works. It swaps with empty vector, so it should be emptied out.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h:63
&gt;&gt; +    ReadModifyWriteExpression(CodeLocation location, UniqueRef&lt;Expression&gt; leftValue, UniqueRef&lt;VariableDeclaration&gt; oldValue, UniqueRef&lt;VariableDeclaration&gt; newValue)
&gt; 
&gt; I am unclear on whether it is better to pass UniqueRef&lt;Expression&gt; or UniqueRef&lt;Expression&gt;&amp;&amp; here.

I prefer what I did here since it expressed the fact that this function now has ownership over the UniqueRef. I&apos;m not a fan of passing around rvalue refs since it doesn&apos;t actually guarantee that ownership will be transferred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569053</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-08 20:23:50 -0700</bug_when>
    <thetext>thanks for the review.


Landed in:
https://trac.webkit.org/changeset/249630/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569281</commentid>
    <comment_count>10</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-09 13:55:10 -0700</bug_when>
    <thetext>landed watchOS build fix in:
https://trac.webkit.org/changeset/249664/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569283</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-09 13:56:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/55196672&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570743</commentid>
    <comment_count>12</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-09-13 16:29:50 -0700</bug_when>
    <thetext>This patch turns out to create comma expressions on the left-side of assignments.
It is not something which could otherwise happen. Do we want to support it, or to change this pass?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378121</attachid>
            <date>2019-09-05 14:23:14 -0700</date>
            <delta_ts>2019-09-05 17:49:44 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>9431</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlS
ZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjQ5NTM2KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDE4NSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQ
VSkKIAorI2luY2x1ZGUgIldITFNMQVNULmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotdm9pZCByZXNvbHZl
UHJvcGVydGllcyhQcm9ncmFtJikKK2NsYXNzIFByb3BlcnR5UmVzb2x2ZXIgOiBwdWJsaWMgVmlz
aXRvciB7CisgICAgdm9pZCBoYW5kbGVQcm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3MsIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPj4mIGV4cHJlc3Npb25zKQorICAgIHsKKyAgICAgICAgQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24qIGN1cnJlbnRQdHIgPSAmcHJvcGVydHlBY2Nlc3M7CisgICAgICAgIC8vIGEuYltj
XS5kIHdpbGwgZ28gaW50byB0aGlzIGFycmF5IGFzIFsuZCwgW2NdLCAuYl0KKyAgICAgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+
PiBjaGFpbjsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgQVNUOjpQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIGN1cnJlbnQgPSAqY3VycmVudFB0cjsKKyAgICAgICAgICAg
IGNoYWluLmFwcGVuZChjdXJyZW50KTsKKworICAgICAgICAgICAgaWYgKGlzPEFTVDo6SW5kZXhF
eHByZXNzaW9uPihjdXJyZW50KSkKKyAgICAgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Npb24+KGN1cnJlbnQpLmluZGV4RXhwcmVzc2lvbigp
KTsKKworICAgICAgICAgICAgaWYgKGlzPEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihj
dXJyZW50LmJhc2UoKSkpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50UHRyID0gJmRvd25jYXN0
PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihjdXJyZW50LmJhc2UoKSk7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChjdXJyZW50LmJhc2UoKSk7CisKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbiBi
YXNlQ29kZUxvY2F0aW9uID0gY3VycmVudC5iYXNlKCkuY29kZUxvY2F0aW9uKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChjdXJyZW50LmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLmlz
UmlnaHRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbj4gY29weSA9IG1ha2VVbmlxdWU8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihi
YXNlQ29kZUxvY2F0aW9uLCB7IH0sICZjdXJyZW50LmJhc2UoKS5yZXNvbHZlZFR5cGUoKSwgeyB9
LCB7IH0sIHsgfSk7CisgICAgICAgICAgICAgICAgUmVmPEFTVDo6VW5uYW1lZFR5cGU+IGJhc2VU
eXBlID0gY3VycmVudC5iYXNlKCkucmVzb2x2ZWRUeXBlKCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgYXV0byBtYWtlVmFyaWFibGVSZWZlcmVuY2UgPSBbJl0geworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZTxBU1Q6OlZh
cmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKGNvcHkpOworICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShiYXNlVHlwZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50ID0gbWFrZVVuaXF1ZTxBU1Q6OkFzc2ln
bm1lbnRFeHByZXNzaW9uPiggYmFzZUNvZGVMb2NhdGlvbiwgbWFrZVZhcmlhYmxlUmVmZXJlbmNl
KCksIGN1cnJlbnQudGFrZUJhc2UoKSkKKyAgICAgICAgICAgICAgICBhc3NpZ25tZW50LT5zZXRU
eXBlKGJhc2VUeXBlKTsKKyAgICAgICAgICAgICAgICBhc3NpZ25tZW50LT5zZXRUeXBlQW5ub3Rh
dGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5h
cHBlbmQoV1RGTW92ZShhc3NpZ25tZW50KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY3VycmVudC5iYXNlUmVmZXJlbmNlKCkgPSBtYWtlVmFyaWFibGVSZWZlcmVuY2UoKTsK
KworICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLmFwcGVuZChXVEZNb3ZlKGNvcHkpKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNl
ID0gY3VycmVudC5iYXNlKCkudHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCk7Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVmdEFkZHJlc3NTcGFjZSk7CisgICAgICAg
ICAgICAgICAgUmVmPEFTVDo6VW5uYW1lZFR5cGU+IGJhc2VUeXBlID0gY3VycmVudC5iYXNlKCku
cmVzb2x2ZWRUeXBlKCk7CisgICAgICAgICAgICAgICAgUmVmPEFTVDo6UG9pbnRlclR5cGU+IHBv
aW50ZXJUeXBlID0gQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKGJhc2VDb2RlTG9jYXRpb24sICps
ZWZ0QWRkcmVzc1NwYWNlLCBiYXNlVHlwZSk7CisKKyAgICAgICAgICAgICAgICBVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiBwb2ludGVyVmFyaWFibGUgPSBtYWtlVW5pcXVlPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oYmFzZUNvZGVMb2NhdGlvbiwgeyB9LCBwb2ludGVyVHlw
ZSwgeyB9LCB7IH0sIHsgfSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIG1ha2VWYXJpYWJsZVJl
ZmVyZW5jZSA9IFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVu
Y2UgPSBtYWtlVW5pcXVlPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZl
cmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlUmVmZXJlbmNlLT5zZXRUeXBlKHBvaW50ZXJUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNU
OjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZh
cmlhYmxlUmVmZXJlbmNlOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gcG9pbnRlck9mQmFzZSA9IG1ha2VVbmlxdWU8QVNU
OjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGJhc2VDb2RlTG9jYXRpb24sIGN1cnJlbnQudGFrZUJh
c2UoKSwgQVNUOjpBZGRyZXNzRXNjYXBlTW9kZTo6RG9lc05vdEVzY2FwZSk7CisgICAgICAgICAg
ICAgICAgICAgIHBvaW50ZXJPZkJhc2UtPnNldFR5cGUocG9pbnRlclR5cGUpOworICAgICAgICAg
ICAgICAgICAgICBwb2ludGVyT2ZCYXNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFs
dWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50ID0gbWFrZVVuaXF1
ZTxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihiYXNlQ29kZUxvY2F0aW9uLCBtYWtlVmFyaWFi
bGVSZWZlcmVuY2UoKSwgV1RGTW92ZShwb2ludGVyT2ZCYXNlKSk7CisgICAgICAgICAgICAgICAg
ICAgIGFzc2lnbm1lbnQtPnNldFR5cGUocG9pbnRlclR5cGUpOworICAgICAgICAgICAgICAgICAg
ICBhc3NpZ25tZW50LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudCkp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBkZXJlZmVyZW5jZSA9IG1ha2VVbmlxdWU8QVNUOjpEZXJlZmVyZW5jZUV4cHJl
c3Npb24+KGJhc2VDb2RlTG9jYXRpb24sIG1ha2VWYXJpYWJsZVJlZmVyZW5jZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVyZWZlcmVuY2UtPnNldFR5cGUoYmFzZVR5cGUpOworICAgICAgICAg
ICAgICAgICAgICBkZXJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpBZGRyZXNzU3Bh
Y2UgeyAqbGVmdEFkZHJlc3NTcGFjZSB9KTsKKworICAgICAgICAgICAgICAgICAgICBjdXJyZW50
LmJhc2VSZWZlcmVuY2UoKSA9IFdURk1vdmUoZGVyZWZlcmVuY2UpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLmFwcGVuZChXVEZNb3ZlKHBvaW50ZXJW
YXJpYWJsZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
Y2hhaW4uc2l6ZSgpOyBpLS07ICkgeworICAgICAgICAgICAgICAgIGF1dG8mIGFjY2VzcyA9IGNo
YWluW2ldLmdldCgpOworICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OkluZGV4RXhwcmVzc2lv
bj4oYWNjZXNzKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBPT1BTOiBPbmx5IGRvIHRoaXMg
aWYgaW5kZXhFeHByZXNzaW9uIGlzIGVmZmVjdHVsISBXZSBjYW4gZWFzaWx5IHNraXAgaWYgaXQn
cyBjb25zdGFudC92YXJpYWJsZSByZWZlcmVuY2UgKGFuZCBtYXliZSBvdGhlcnMpCisKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byYgaW5kZXhFeHByZXNzaW9uID0gZG93bmNhc3Q8QVNUOjpJbmRl
eEV4cHJlc3Npb24+KGFjY2Vzcyk7CisgICAgICAgICAgICAgICAgICAgIFJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiBpbmRleFR5cGUgPSBpbmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9uKCkucmVz
b2x2ZWRUeXBlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbj4gaW5kZXhWYXJpYWJsZSA9IG1ha2VVbmlxdWU8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uPihhY2Nlc3MuY29kZUxvY2F0aW9uKCksIHsgfSwgaW5kZXhUeXBlLCB7IH0sIHsg
fSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIG1ha2VWYXJpYWJsZVJlZmVyZW5j
ZSA9IFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNl
ID0gbWFrZVVuaXF1ZTxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlOjp3cmFwKGluZGV4VmFyaWFibGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlUmVmZXJlbmNlLT5zZXRUeXBlKGluZGV4VHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBB
U1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHZhcmlhYmxlUmVmZXJlbmNlOworICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gYXNzaWdubWVudCA9
IG1ha2VVbmlxdWU8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oYmFzZUNvZGVMb2NhdGlvbiwg
bWFrZVZhcmlhYmxlUmVmZXJlbmNlKCksIGluZGV4RXhwcmVzc2lvbi50YWtlSW5kZXgoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50LT5zZXRUeXBlKHBvaW50ZXJUeXBlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQtPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMu
YXBwZW5kKFdURk1vdmUoYXNzaWdubWVudCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgaW5kZXhFeHByZXNzaW9uLmluZGV4UmVmZXJlbmNlKCkgPSBtYWtl
VmFyaWFibGVSZWZlcmVuY2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBoYW5kbGVQ
cm9wZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nl
c3MpCisgICAgeworICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4
cHJlc3Npb25zOworCisgICAgICAgIGhhbmRsZVByb3BlcnR5QWNjZXNzKHByb3BlcnR5QWNjZXNz
LCBleHByZXNzaW9ucyk7CisKKyAgICAgICAgQ29kZUxvY2F0aW9uIGNvZGVMb2NhdGlvbiA9IHBy
b3BlcnR5QWNjZXNzLmNvZGVMb2NhdGlvbigpOworICAgICAgICBpZiAoaXM8QVNUOjpJbmRleEV4
cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzKSkgeworICAgICAgICAgICAgYXV0byYgaW5kZXhFeHBy
ZXNzaW9uID0gZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzKTsK
KworICAgICAgICAgICAgYXV0byBuZXdJbmRleEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlPEFTVDo6
SW5kZXhFeHByZXNzaW9uPihjb2RlTG9jYXRpb24sIGluZGV4RXhwcmVzc2lvbi50YWtlQmFzZSgp
LCBpbmRleEV4cHJlc3Npb24udGFrZUluZGV4KCkpOworICAgICAgICAgICAgbmV3SW5kZXhFeHBy
ZXNzaW9uLT5zZXRUeXBlKGluZGV4RXhwcmVzc2lvbi50eXBlKCkpOworICAgICAgICAgICAgbmV3
SW5kZXhFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihpbmRleEV4cHJlc3Npb24udHlwZUFu
bm90YXRpb24oKSk7CisKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKG5l
d0luZGV4RXhwcmVzc2lvbikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaXM8QVNUOjpEb3RFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2VzcykpOworICAgICAg
ICAgICAgYXV0byYgZG90RXhwcmVzc2lvbiA9IGRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4o
cHJvcGVydHlBY2Nlc3MpOworCisgICAgICAgICAgICBhdXRvIG5ld0RvdEV4cHJlc3Npb24gPSBt
YWtlVW5pcXVlPEFTVDo6RG90RXhwcmVzc2lvbj4oY29kZUxvY2F0aW9uLCBkb3RFeHByZXNzaW9u
LnRha2VCYXNlKCksIFN0cmluZyhkb3RFeHByZXNzaW9uLmZpZWxkTmFtZSgpKSk7CisgICAgICAg
ICAgICBuZXdEb3RFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24udHlwZSgpKTsKKyAg
ICAgICAgICAgIG5ld0RvdEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKGRvdEV4cHJlc3Np
b24udHlwZUFubm90YXRpb24oKSk7CisKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChX
VEZNb3ZlKG5ld0RvdEV4cHJlc3Npb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTVDo6cmVw
bGFjZVdpdGg8QVNUOjpDb21tYUV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzLCBjb2RlTG9jYXRp
b24sIFdURk1vdmUoZXhwcmVzc2lvbnMpKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICB2b2lkIHZp
c2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGhhbmRsZVByb3BlcnR5QWNjZXNzKGRvdEV4cHJlc3Npb24pOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGhhbmRsZVByb3BlcnR5QWNjZXNzKGluZGV4RXhwcmVzc2lvbik7
CisgICAgfQorCisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5j
dGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoc3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4oZnVuY3Rpb25EZWZpbml0
aW9uKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxv
Y2soKSk7CisKKyAgICAgICAgaWYgKG1fdmFyaWFibGVzLnNpemUoKSkgeworICAgICAgICAgICAg
ZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkuc3RhdGVtZW50cygpLmluc2VydCgwLCAKKyAgICAg
ICAgICAgICAgICBtYWtlVW5pcXVlPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+
KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpLmNvZGVMb2NhdGlvbigpLCBXVEZNb3ZlKG1fdmFy
aWFibGVzKSkpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnMgbV92YXJpYWJsZXM7Cit9OworCit2b2lkIHJlc29sdmVQcm9wZXJ0aWVz
KFByb2dyYW0mIHByb2dyYW0pCiB7Ci0gICAgLy8gRklYTUU6IEJyaW5nIHRoaXMgcGhhc2UgYmFj
ayB0byBhbGxvdyBtZXRhbCBjb2RlZ2VuIHNvbWUgY29udmVuaWVuY2VzIAotICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDEyNTEKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV0hMU0wKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCShyZXZpc2lvbiAy
NDk1MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJ
bmRleEV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6
CiAgICAgSW5kZXhFeHByZXNzaW9uKEluZGV4RXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKICAg
ICBFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24oKSB7IHJldHVybiBtX2luZGV4OyB9CisgICAg
VW5pcXVlUmVmPEV4cHJlc3Npb24+JiBpbmRleFJlZmVyZW5jZSgpIHsgcmV0dXJuIG1faW5kZXg7
IH0KICAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gdGFrZUluZGV4KCkgeyByZXR1cm4gV1RGTW92
ZShtX2luZGV4KTsgfQogCiBwcml2YXRlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378142</attachid>
            <date>2019-09-05 17:49:44 -0700</date>
            <delta_ts>2019-09-05 18:59:57 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>17159</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlS
ZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjQ5NTM2KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDIzMiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQ
VSkKIAorI2luY2x1ZGUgIldITFNMQVNULmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotdm9pZCByZXNvbHZl
UHJvcGVydGllcyhQcm9ncmFtJikKK2NsYXNzIFByb3BlcnR5UmVzb2x2ZXIgOiBwdWJsaWMgVmlz
aXRvciB7CisgICAgdm9pZCBoYW5kbGVMZWZ0SGFuZFNpZGVCYXNlKFVuaXF1ZVJlZjxBU1Q6OkV4
cHJlc3Npb24+IGJhc2UsIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBzbG90LCBWZWN0b3I8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiBleHByZXNzaW9ucykKKyAgICB7CisgICAgICAg
IC8vIE9PUFM6IE9ubHkgZG8gdGhpcyBpZiBiYXNlIGlzIGVmZmVjdHVsLgorCisgICAgICAgIGF1
dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGJhc2UtPnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NT
cGFjZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChsZWZ0QWRkcmVzc1NwYWNlKTsKKyAgICAg
ICAgQ29kZUxvY2F0aW9uIGNvZGVMb2NhdGlvbiA9IGJhc2UtPmNvZGVMb2NhdGlvbigpOworICAg
ICAgICBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gYmFzZVR5cGUgPSBiYXNlLT5yZXNvbHZlZFR5cGUo
KTsKKyAgICAgICAgUmVmPEFTVDo6UG9pbnRlclR5cGU+IHBvaW50ZXJUeXBlID0gQVNUOjpQb2lu
dGVyVHlwZTo6Y3JlYXRlKGNvZGVMb2NhdGlvbiwgKmxlZnRBZGRyZXNzU3BhY2UsIGJhc2VUeXBl
LmNvcHlSZWYoKSk7CisKKyAgICAgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bj4gcG9pbnRlclZhcmlhYmxlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24+KGNvZGVMb2NhdGlvbiwgQVNUOjpRdWFsaWZpZXJzIHsgfSwgcG9pbnRlclR5cGUucHRyKCks
IFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICBhdXRvIG1ha2VWYXJpYWJs
ZVJlZmVyZW5jZSA9IFsmXSB7CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVu
Y2UtPnNldFR5cGUocG9pbnRlclR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQgfSk7CisgICAgICAgICAgICByZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7
CisgICAgICAgIH07CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBwb2ludGVyT2ZCYXNl
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oY29kZUxvY2F0aW9u
LCBXVEZNb3ZlKGJhc2UpLCBBU1Q6OkFkZHJlc3NFc2NhcGVNb2RlOjpEb2VzTm90RXNjYXBlKTsK
KyAgICAgICAgICAgIHBvaW50ZXJPZkJhc2UtPnNldFR5cGUocG9pbnRlclR5cGUuY29weVJlZigp
KTsKKyAgICAgICAgICAgIHBvaW50ZXJPZkJhc2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6Umln
aHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50ID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihjb2RlTG9jYXRpb24sIG1ha2VWYXJpYWJsZVJl
ZmVyZW5jZSgpLCBXVEZNb3ZlKHBvaW50ZXJPZkJhc2UpKTsKKyAgICAgICAgICAgIGFzc2lnbm1l
bnQtPnNldFR5cGUocG9pbnRlclR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgIGFzc2lnbm1l
bnQtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAg
ZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudCkpOworICAgICAgICB9CisKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byBkZXJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGNvZGVMb2NhdGlvbiwgbWFrZVZhcmlhYmxlUmVmZXJl
bmNlKCkpOworICAgICAgICAgICAgZGVyZWZlcmVuY2UtPnNldFR5cGUoYmFzZVR5cGUuY29weVJl
ZigpKTsKKyAgICAgICAgICAgIGRlcmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7ICpsZWZ0QWRkcmVzc1NwYWNlIH0pOworCisgICAgICAgICAgICBzbG90ID0gV1RG
TW92ZShkZXJlZmVyZW5jZSk7CisgICAgICAgIH0KKworICAgICAgICBtX3ZhcmlhYmxlcy5hcHBl
bmQoV1RGTW92ZShwb2ludGVyVmFyaWFibGUpKTsKKyAgICB9CisKKyAgICB2b2lkIGhhbmRsZVBy
b3BlcnR5QWNjZXNzKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vz
cywgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYgZXhwcmVzc2lvbnMpCisgICAg
eworICAgICAgICBBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiogY3VycmVudFB0ciA9ICZw
cm9wZXJ0eUFjY2VzczsKKyAgICAgICAgLy8gYS5iW2NdLmQgd2lsbCBnbyBpbnRvIHRoaXMgYXJy
YXkgYXMgWy5kLCBbY10sIC5iXQorICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4+IGNoYWluOworCisgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgICBBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgY3Vy
cmVudCA9ICpjdXJyZW50UHRyOworICAgICAgICAgICAgY2hhaW4uYXBwZW5kKGN1cnJlbnQpOwor
CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KGN1cnJlbnQpKQorICAg
ICAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkluZGV4RXhwcmVz
c2lvbj4oY3VycmVudCkuaW5kZXhFeHByZXNzaW9uKCkpOworCisgICAgICAgICAgICBpZiAoaXM8
QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGN1cnJlbnQuYmFzZSgpKSkgeworICAgICAg
ICAgICAgICAgIGN1cnJlbnRQdHIgPSAmZG93bmNhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24+KGN1cnJlbnQuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGN1cnJlbnQuYmFzZSgp
KTsKKworICAgICAgICAgICAgQ29kZUxvY2F0aW9uIGJhc2VDb2RlTG9jYXRpb24gPSBjdXJyZW50
LmJhc2UoKS5jb2RlTG9jYXRpb24oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGN1
cnJlbnQuYmFzZSgpLnR5cGVBbm5vdGF0aW9uKCkuaXNSaWdodFZhbHVlKCkpIHsKKyAgICAgICAg
ICAgICAgICBVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiBjb3B5ID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGJhc2VDb2RlTG9jYXRpb24sIEFTVDo6
UXVhbGlmaWVycyB7IH0sICZjdXJyZW50LmJhc2UoKS5yZXNvbHZlZFR5cGUoKSwgU3RyaW5nKCks
IG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIFJlZjxBU1Q6OlVubmFtZWRUeXBl
PiBiYXNlVHlwZSA9IGN1cnJlbnQuYmFzZSgpLnJlc29sdmVkVHlwZSgpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGF1dG8gbWFrZVZhcmlhYmxlUmVmZXJlbmNlID0gWyZdIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChj
b3B5KSk7CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKGJh
c2VUeXBlLmNvcHlSZWYoKSk7CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNl
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpU
aHJlYWQgfSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsK
KyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50ID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihiYXNlQ29kZUxvY2F0aW9u
LCBtYWtlVmFyaWFibGVSZWZlcmVuY2UoKSwgY3VycmVudC50YWtlQmFzZSgpKTsKKyAgICAgICAg
ICAgICAgICBhc3NpZ25tZW50LT5zZXRUeXBlKGJhc2VUeXBlLmNvcHlSZWYoKSk7CisgICAgICAg
ICAgICAgICAgYXNzaWdubWVudC0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkp
OworCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVu
dCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGN1cnJlbnQuYmFzZVJlZmVy
ZW5jZSgpID0gbWFrZVZhcmlhYmxlUmVmZXJlbmNlKCk7CisKKyAgICAgICAgICAgICAgICBtX3Zh
cmlhYmxlcy5hcHBlbmQoV1RGTW92ZShjb3B5KSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBoYW5kbGVMZWZ0SGFuZFNpZGVCYXNlKGN1cnJlbnQudGFrZUJhc2UoKSwgY3Vy
cmVudC5iYXNlUmVmZXJlbmNlKCksIGV4cHJlc3Npb25zKTsKKworICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IGNoYWluLnNpemUoKTsgaS0tOyApIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBh
Y2Nlc3MgPSBjaGFpbltpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpJbmRl
eEV4cHJlc3Npb24+KGFjY2VzcykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gT09QUzogT25s
eSBkbyB0aGlzIGlmIGluZGV4RXhwcmVzc2lvbiBpcyBlZmZlY3R1bCEgV2UgY2FuIGVhc2lseSBz
a2lwIGlmIGl0J3MgY29uc3RhbnQvdmFyaWFibGUgcmVmZXJlbmNlIChhbmQgbWF5YmUgb3RoZXJz
KQorCisgICAgICAgICAgICAgICAgICAgIGF1dG8mIGluZGV4RXhwcmVzc2lvbiA9IGRvd25jYXN0
PEFTVDo6SW5kZXhFeHByZXNzaW9uPihhY2Nlc3MpOworICAgICAgICAgICAgICAgICAgICBSZWY8
QVNUOjpVbm5hbWVkVHlwZT4gaW5kZXhUeXBlID0gaW5kZXhFeHByZXNzaW9uLmluZGV4RXhwcmVz
c2lvbigpLnJlc29sdmVkVHlwZSgpOworCisgICAgICAgICAgICAgICAgICAgIFVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IGluZGV4VmFyaWFibGUgPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oYWNjZXNzLmNvZGVMb2NhdGlvbigpLCBBU1Q6OlF1YWxp
ZmllcnMgeyB9LCBpbmRleFR5cGUucHRyKCksIFN0cmluZygpLCBudWxscHRyLCBudWxscHRyKTsK
KworICAgICAgICAgICAgICAgICAgICBhdXRvIG1ha2VWYXJpYWJsZVJlZmVyZW5jZSA9IFsmXSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3
cmFwKGluZGV4VmFyaWFibGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlLT5zZXRUeXBlKGluZGV4VHlwZS5jb3B5UmVmKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVl
IHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGFzc2lnbm1l
bnQgPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGJhc2VDb2RlTG9j
YXRpb24sIG1ha2VWYXJpYWJsZVJlZmVyZW5jZSgpLCBpbmRleEV4cHJlc3Npb24udGFrZUluZGV4
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudC0+c2V0VHlwZShpbmRleFR5
cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQtPnNldFR5
cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhFeHByZXNzaW9uLmluZGV4UmVm
ZXJlbmNlKCkgPSBtYWtlVmFyaWFibGVSZWZlcmVuY2UoKTsKKworICAgICAgICAgICAgICAgICAg
ICBtX3ZhcmlhYmxlcy5hcHBlbmQoV1RGTW92ZShpbmRleFZhcmlhYmxlKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgaGFuZGxlUHJvcGVydHlBY2Nlc3MoQVNUOjpQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzKQorICAgIHsKKyAgICAgICAgVmVjdG9yPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKKworICAgICAgICBoYW5kbGVQcm9w
ZXJ0eUFjY2Vzcyhwcm9wZXJ0eUFjY2VzcywgZXhwcmVzc2lvbnMpOworCisgICAgICAgIFJlZjxB
U1Q6OlVubmFtZWRUeXBlPiBhY2Nlc3NUeXBlID0gcHJvcGVydHlBY2Nlc3MucmVzb2x2ZWRUeXBl
KCk7CisKKyAgICAgICAgQVNUOjpDb21tYUV4cHJlc3Npb24qIGNvbW1hOworICAgICAgICBDb2Rl
TG9jYXRpb24gY29kZUxvY2F0aW9uID0gcHJvcGVydHlBY2Nlc3MuY29kZUxvY2F0aW9uKCk7Cisg
ICAgICAgIGlmIChpczxBU1Q6OkluZGV4RXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3MpKSB7Cisg
ICAgICAgICAgICBhdXRvJiBpbmRleEV4cHJlc3Npb24gPSBkb3duY2FzdDxBU1Q6OkluZGV4RXhw
cmVzc2lvbj4ocHJvcGVydHlBY2Nlc3MpOworCisgICAgICAgICAgICBhdXRvIG5ld0luZGV4RXhw
cmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpJbmRleEV4cHJlc3Npb24+KGNvZGVMb2NhdGlv
biwgaW5kZXhFeHByZXNzaW9uLnRha2VCYXNlKCksIGluZGV4RXhwcmVzc2lvbi50YWtlSW5kZXgo
KSk7CisgICAgICAgICAgICBuZXdJbmRleEV4cHJlc3Npb24tPnNldFR5cGUoaW5kZXhFeHByZXNz
aW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIG5ld0luZGV4RXhwcmVzc2lvbi0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpUeXBlQW5ub3RhdGlvbihpbmRleEV4cHJlc3Npb24udHlwZUFu
bm90YXRpb24oKSkpOworCisgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShu
ZXdJbmRleEV4cHJlc3Npb24pKTsKKworICAgICAgICAgICAgY29tbWEgPSBBU1Q6OnJlcGxhY2VX
aXRoPEFTVDo6Q29tbWFFeHByZXNzaW9uPihpbmRleEV4cHJlc3Npb24sIGNvZGVMb2NhdGlvbiwg
V1RGTW92ZShleHByZXNzaW9ucykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXM8QVNUOjpEb3RFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2VzcykpOworICAg
ICAgICAgICAgYXV0byYgZG90RXhwcmVzc2lvbiA9IGRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lv
bj4ocHJvcGVydHlBY2Nlc3MpOworCisgICAgICAgICAgICBhdXRvIG5ld0RvdEV4cHJlc3Npb24g
PSBtYWtlVW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lvbj4oY29kZUxvY2F0aW9uLCBkb3RFeHBy
ZXNzaW9uLnRha2VCYXNlKCksIFN0cmluZyhkb3RFeHByZXNzaW9uLmZpZWxkTmFtZSgpKSk7Cisg
ICAgICAgICAgICBuZXdEb3RFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24ucmVzb2x2
ZWRUeXBlKCkpOworICAgICAgICAgICAgbmV3RG90RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpUeXBlQW5ub3RhdGlvbihkb3RFeHByZXNzaW9uLnR5cGVBbm5vdGF0aW9uKCkpKTsK
KworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUobmV3RG90RXhwcmVzc2lv
bikpOworCisgICAgICAgICAgICBjb21tYSA9IEFTVDo6cmVwbGFjZVdpdGg8QVNUOjpDb21tYUV4
cHJlc3Npb24+KGRvdEV4cHJlc3Npb24sIGNvZGVMb2NhdGlvbiwgV1RGTW92ZShleHByZXNzaW9u
cykpOworICAgICAgICB9CisKKyAgICAgICAgY29tbWEtPnNldFR5cGUoV1RGTW92ZShhY2Nlc3NU
eXBlKSk7CisgICAgICAgIGNvbW1hLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUo
KSk7CisgICAgfQorCitwdWJsaWM6CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBoYW5kbGVQcm9wZXJ0eUFj
Y2Vzcyhkb3RFeHByZXNzaW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhF
eHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBoYW5k
bGVQcm9wZXJ0eUFjY2VzcyhpbmRleEV4cHJlc3Npb24pOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGUpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4
cHJlc3Npb25zOworCisgICAgICAgIENvZGVMb2NhdGlvbiBjb2RlTG9jYXRpb24gPSByZWFkTW9k
aWZ5V3JpdGUuY29kZUxvY2F0aW9uKCk7CisKKyAgICAgICAgUmVmPEFTVDo6VW5uYW1lZFR5cGU+
IHR5cGUgPSByZWFkTW9kaWZ5V3JpdGUucmVzb2x2ZWRUeXBlKCk7CisKKyAgICAgICAgaWYgKGlz
PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihyZWFkTW9kaWZ5V3JpdGUubGVmdFZhbHVl
KCkpKQorICAgICAgICAgICAgaGFuZGxlUHJvcGVydHlBY2Nlc3MoZG93bmNhc3Q8QVNUOjpQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KHJlYWRNb2RpZnlXcml0ZS5sZWZ0VmFsdWUoKSksIGV4cHJl
c3Npb25zKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlTGVmdEhhbmRTaWRlQmFz
ZShyZWFkTW9kaWZ5V3JpdGUudGFrZUxlZnRWYWx1ZSgpLCByZWFkTW9kaWZ5V3JpdGUubGVmdFZh
bHVlUmVmZXJlbmNlKCksIGV4cHJlc3Npb25zKTsKKworICAgICAgICB7CisgICAgICAgICAgICBV
bmlxdWVSZWY8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPiBuZXdSZWFkTW9kaWZ5V3Jp
dGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oCisgICAg
ICAgICAgICAgICAgcmVhZE1vZGlmeVdyaXRlLmNvZGVMb2NhdGlvbigpLCByZWFkTW9kaWZ5V3Jp
dGUudGFrZUxlZnRWYWx1ZSgpLCByZWFkTW9kaWZ5V3JpdGUudGFrZU9sZFZhbHVlKCksIHJlYWRN
b2RpZnlXcml0ZS50YWtlTmV3VmFsdWUoKSk7CisgICAgICAgICAgICBuZXdSZWFkTW9kaWZ5V3Jp
dGUtPnNldE5ld1ZhbHVlRXhwcmVzc2lvbihyZWFkTW9kaWZ5V3JpdGUudGFrZU5ld1ZhbHVlRXhw
cmVzc2lvbigpKTsKKyAgICAgICAgICAgIG5ld1JlYWRNb2RpZnlXcml0ZS0+c2V0UmVzdWx0RXhw
cmVzc2lvbihyZWFkTW9kaWZ5V3JpdGUudGFrZVJlc3VsdEV4cHJlc3Npb24oKSk7CisgICAgICAg
ICAgICBuZXdSZWFkTW9kaWZ5V3JpdGUtPnNldFR5cGUodHlwZS5jb3B5UmVmKCkpOworICAgICAg
ICAgICAgbmV3UmVhZE1vZGlmeVdyaXRlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlR5cGVBbm5v
dGF0aW9uKHJlYWRNb2RpZnlXcml0ZS50eXBlQW5ub3RhdGlvbigpKSk7CisKKyAgICAgICAgICAg
IGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKG5ld1JlYWRNb2RpZnlXcml0ZSkpOworICAgICAg
ICB9CisKKyAgICAgICAgYXV0byogY29tbWEgPSBBU1Q6OnJlcGxhY2VXaXRoPEFTVDo6Q29tbWFF
eHByZXNzaW9uPihyZWFkTW9kaWZ5V3JpdGUsIGNvZGVMb2NhdGlvbiwgV1RGTW92ZShleHByZXNz
aW9ucykpOworICAgICAgICBjb21tYS0+c2V0VHlwZShXVEZNb3ZlKHR5cGUpKTsKKyAgICAgICAg
Y29tbWEtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24p
IG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4oZnVuY3Rpb25EZWZpbml0aW9uKSk7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7CisKKyAgICAg
ICAgaWYgKG1fdmFyaWFibGVzLnNpemUoKSkgeworICAgICAgICAgICAgZnVuY3Rpb25EZWZpbml0
aW9uLmJsb2NrKCkuc3RhdGVtZW50cygpLmluc2VydCgwLCAKKyAgICAgICAgICAgICAgICBtYWtl
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KGZ1bmN0aW9uRGVm
aW5pdGlvbi5ibG9jaygpLmNvZGVMb2NhdGlvbigpLCBXVEZNb3ZlKG1fdmFyaWFibGVzKSkpOwor
ICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnMgbV92YXJpYWJsZXM7Cit9OworCit2b2lkIHJlc29sdmVQcm9wZXJ0aWVzKFByb2dyYW0mIHBy
b2dyYW0pCiB7Ci0gICAgLy8gRklYTUU6IEJyaW5nIHRoaXMgcGhhc2UgYmFjayB0byBhbGxvdyBt
ZXRhbCBjb2RlZ2VuIHNvbWUgY29udmVuaWVuY2VzIAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDEyNTEKKyAgICBQcm9wZXJ0eVJlc29sdmVyIHJlc29s
dmVyOworICAgIHJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KHByb2dyYW0pOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXSExTTApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgJKHJldmlzaW9u
IDI0OTUzNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEluZGV4RXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1Ymxp
YzoKICAgICBJbmRleEV4cHJlc3Npb24oSW5kZXhFeHByZXNzaW9uJiYpID0gZGVmYXVsdDsKIAog
ICAgIEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbigpIHsgcmV0dXJuIG1faW5kZXg7IH0KKyAg
ICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mIGluZGV4UmVmZXJlbmNlKCkgeyByZXR1cm4gbV9pbmRl
eDsgfQogICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiB0YWtlSW5kZXgoKSB7IHJldHVybiBXVEZN
b3ZlKG1faW5kZXgpOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDk1MzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDE0IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogCisgICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihDb2RlTG9jYXRpb24gbG9jYXRp
b24sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBsZWZ0VmFsdWUsIFVuaXF1ZVJlZjxWYXJpYWJsZURl
Y2xhcmF0aW9uPiBvbGRWYWx1ZSwgVW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+IG5ld1Zh
bHVlKQorICAgICAgICA6IEV4cHJlc3Npb24obG9jYXRpb24sIEtpbmQ6OlJlYWRNb2RpZnlXcml0
ZSkKKyAgICAgICAgLCBtX2xlZnRWYWx1ZShXVEZNb3ZlKGxlZnRWYWx1ZSkpCisgICAgICAgICwg
bV9vbGRWYWx1ZShXVEZNb3ZlKG9sZFZhbHVlKSkKKyAgICAgICAgLCBtX25ld1ZhbHVlKFdURk1v
dmUobmV3VmFsdWUpKQorICAgIHsKKyAgICB9CisKIAogICAgIH5SZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uKCkgPSBkZWZhdWx0OwogCkBAIC04Nyw2ICs5NSw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICBFeHByZXNzaW9uJiBsZWZ0VmFsdWUoKSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQorICAg
IFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYgbGVmdFZhbHVlUmVmZXJlbmNlKCkgeyByZXR1cm4gbV9s
ZWZ0VmFsdWU7IH0KICAgICBWYXJpYWJsZURlY2xhcmF0aW9uJiBvbGRWYWx1ZSgpIHsgcmV0dXJu
IG1fb2xkVmFsdWU7IH0KICAgICBWYXJpYWJsZURlY2xhcmF0aW9uJiBuZXdWYWx1ZSgpIHsgcmV0
dXJuIG1fbmV3VmFsdWU7IH0KICAgICBFeHByZXNzaW9uJiBuZXdWYWx1ZUV4cHJlc3Npb24oKQpJ
bmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL2RvbnQtZXZhbHVhdGUtdHdpY2UuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG9udC1ldmFsdWF0ZS10d2lj
ZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kb250LWV2
YWx1YXRlLXR3aWNlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTggQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+ZXZhbHVhdGlvbiBvcmRlciBhbmQgdGltZXMu
PC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy90ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuZG9udEV2YWx1YXRlVHdp
Y2UgPSBhc3luYyAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAgICAgICAgdWludCBi
YXIodGhyZWFkIHVpbnQqIHB0cikgeworICAgICAgICAgICAgdWludCBvbGQgPSAqcHRyOworICAg
ICAgICAgICAgKnB0ciA9ICpwdHIgKyAxOworICAgICAgICAgICAgcmV0dXJuIG9sZDsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgZm9vKCkgeworICAgICAgICAgICAgdWludCB4ID0gMDsKKyAg
ICAgICAgICAgIGludFs0Ml0gYXJyOworICAgICAgICAgICAgYXJyWzBdID0gNDI7CisKKyAgICAg
ICAgICAgIGludCByZXN1bHQgPSBhcnJbYmFyKCZ4KV07CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0ID09IDQyICYmIHggPT0gMTsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJmb28iLCBbXSksIHRydWUpOwor
fTsKKword2hsc2xUZXN0cy5kb250RXZhbHVhdGVUd2ljZTIgPSBhc3luYyAoKSA9PiB7CisgICAg
Y29uc3QgcHJvZ3JhbSA9IGAKKyAgICAgICAgdWludCBiYXIodGhyZWFkIHVpbnRbXSBhcnIsIHVp
bnQgaW5kZXgsIHRocmVhZCB1aW50KiBwdHIpIHsKKyAgICAgICAgICAgIHVpbnQgb2xkID0gKnB0
cjsKKyAgICAgICAgICAgIGFycltpbmRleF0gPSBvbGQ7CisgICAgICAgICAgICAqcHRyID0gKnB0
ciArIDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
Zm9vKCkgeworICAgICAgICAgICAgdWludCB4ID0gMTsKKworICAgICAgICAgICAgdWludFszXSBp
bmRpY2VzOworCisgICAgICAgICAgICB1aW50WzRdWzRdWzRdIGFycjsKKworICAgICAgICAgICAg
YXJyW2JhcihAaW5kaWNlcywgMCwgJngpXVtiYXIoQGluZGljZXMsIDEsICZ4KV1bYmFyKEBpbmRp
Y2VzLCAyLCAmeCldID0gNDI7CisgICAgICAgICAgICByZXR1cm4gYXJyWzBdWzBdWzBdID09IDQy
CisgICAgICAgICAgICAgICAgJiYgaW5kaWNlc1swXSA9PSAxIAorICAgICAgICAgICAgICAgICYm
IGluZGljZXNbMV0gPT0gMiAKKyAgICAgICAgICAgICAgICAmJiBpbmRpY2VzWzJdID09IDMKKyAg
ICAgICAgICAgICAgICAmJiB4ID09IDQ7CisgICAgICAgIH0KKyAgICBgOworCisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICAiZm9vIiwgW10pLCB0cnVl
KTsKK307CisKK3dobHNsVGVzdHMuZG9udEV2YWx1YXRlVHdpY2UzID0gYXN5bmMgKCkgPT4gewor
ICAgIGNvbnN0IHByb2dyYW0gPSBgCisgICAgICAgIHVpbnRbMl1bMl0gYmFzZSh0aHJlYWQgdWlu
dFtdIGFyciwgdWludCBpbmRleCwgdGhyZWFkIHVpbnQqIHB0cikgeworICAgICAgICAgICAgdWlu
dCBvbGQgPSAqcHRyOworICAgICAgICAgICAgYXJyW2luZGV4XSA9IG9sZDsKKyAgICAgICAgICAg
ICpwdHIgPSAqcHRyICsgMTsKKyAgICAgICAgICAgIHVpbnRbMl1bMl0gcmVzdWx0OworICAgICAg
ICAgICAgcmVzdWx0WzBdWzBdID0gNDI7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisKKyAgICAgICAgdWludCBiYXIodGhyZWFkIHVpbnRbXSBhcnIsIHVpbnQgaW5kZXgs
IHRocmVhZCB1aW50KiBwdHIpIHsKKyAgICAgICAgICAgIHVpbnQgb2xkID0gKnB0cjsKKyAgICAg
ICAgICAgIGFycltpbmRleF0gPSBvbGQ7CisgICAgICAgICAgICAqcHRyID0gKnB0ciArIDE7Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZm9vKCkgewor
ICAgICAgICAgICAgdWludCB4ID0gMTsKKworICAgICAgICAgICAgdWludFszXSBpbmRpY2VzOwor
CisgICAgICAgICAgICB1aW50IHJlc3VsdCA9IGJhc2UoQGluZGljZXMsIDAsICZ4KVtiYXIoQGlu
ZGljZXMsIDEsICZ4KV1bYmFyKEBpbmRpY2VzLCAyLCAmeCldOworCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0ID09IDQyCisgICAgICAgICAgICAgICAgJiYgaW5kaWNlc1swXSA9PSAxCisgICAg
ICAgICAgICAgICAgJiYgaW5kaWNlc1sxXSA9PSAyIAorICAgICAgICAgICAgICAgICYmIGluZGlj
ZXNbMl0gPT0gMworICAgICAgICAgICAgICAgICYmIHggPT0gNDsKKyAgICAgICAgfQorICAgIGA7
CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJm
b28iLCBbXSksIHRydWUpOworfTsKKword2hsc2xUZXN0cy5kb250RXZhbHVhdGVUd2ljZTQgPSBh
c3luYyAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAgICAgICAgdWludCBiYXIodGhy
ZWFkIHVpbnQqIHB0cikgeworICAgICAgICAgICAgdWludCBvbGQgPSAqcHRyOworICAgICAgICAg
ICAgKnB0ciA9ICpwdHIgKyAxOworICAgICAgICAgICAgcmV0dXJuIG9sZDsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgZm9vKCkgeworICAgICAgICAgICAgdWludFsyXSBhcnI7CisKKyAgICAg
ICAgICAgIHVpbnQgeCA9IDE7CisKKyAgICAgICAgICAgIGFycltiYXIoJngpXSArPSA2NjY7CisK
KyAgICAgICAgICAgIHJldHVybiBhcnJbMV0gPT0gNjY2ICYmIHggPT0gMjsKKyAgICAgICAgfQor
ICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3Jh
bSwgICJmb28iLCBbXSksIHRydWUpOworfTsKKword2hsc2xUZXN0cy5kb250RXZhbHVhdGVUd2lj
ZTUgPSBhc3luYyAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAgICAgICAgdGhyZWFk
IHVpbnQqIGdldFB0cih0aHJlYWQgdWludCogcHRyKSB7CisgICAgICAgICAgICAqcHRyID0gKnB0
ciArIDE7CisgICAgICAgICAgICByZXR1cm4gcHRyOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBmb28oKSB7CisgICAgICAgICAgICB1aW50IHggPSAxOworICAgICAgICAgICAgdWludCByZXN1
bHQgPSAoKmdldFB0cigmeCkpKys7CisgICAgICAgICAgICByZXR1cm4geCA9PSAzICYmIHJlc3Vs
dCA9PSAyOworICAgICAgICB9CisgICAgYDsKKworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEJvb2xGdW5jdGlvbihwcm9ncmFtLCAgImZvbyIsIFtdKSwgdHJ1ZSk7Cit9OworCit3aGxzbFRl
c3RzLmRvbnRFdmFsdWF0ZVR3aWNlNiA9IGFzeW5jICgpID0+IHsKKyAgICBjb25zdCBwcm9ncmFt
ID0gYAorICAgICAgICB0aHJlYWQgdWludCogZ2V0UHRyKHRocmVhZCB1aW50KiBwdHIpIHsKKyAg
ICAgICAgICAgICpwdHIgPSAqcHRyICsgMTsKKyAgICAgICAgICAgIHJldHVybiBwdHI7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIGZvbygpIHsKKyAgICAgICAgICAgIHVpbnQgeCA9IDE7Cisg
ICAgICAgICAgICB1aW50IHJlc3VsdCA9ICsrKCpnZXRQdHIoJngpKTsKKyAgICAgICAgICAgIHJl
dHVybiB4ID09IDMgJiYgcmVzdWx0ID09IDM7CisgICAgICAgIH0KKyAgICBgOworCisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICAiZm9vIiwgW10pLCB0
cnVlKTsKK307CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CisK
Kwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378151</attachid>
            <date>2019-09-05 18:59:57 -0700</date>
            <delta_ts>2019-09-06 16:30:01 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>22659</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSGlnaFpvbWJp
ZUZpbmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xIaWdoWm9tYmllRmluZGVyLmNwcAkocmV2aXNpb24gMjQ5NTM2KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xIaWdoWm9tYmllRmluZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTYgKzI4LDQzIEBACiAKICNpZiBFTkFCTEUoV0VCR1BV
KQogCisjaW5jbHVkZSAiV0hMU0xBU1QuaCIKICNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi12b2lkIGZpbmRIaWdo
Wm9tYmllcyhQcm9ncmFtJikKK2NsYXNzIEhpZ2hab21iaWVGaW5kZXIgOiBwdWJsaWMgVmlzaXRv
ciB7CitwdWJsaWM6CisgICAgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24mIHJlYWRNb2RpZnlXcml0ZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChyZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVFeHByZXNzaW9uKCkpOworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlLnJlc3VsdEV4cHJlc3Npb24oKSk7CisK
KyAgICAgICAgQVNTRVJUKCFyZWFkTW9kaWZ5V3JpdGUubGVmdFZhbHVlKCkubWF5QmVFZmZlY3Rm
dWwoKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4
cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQoIWRvdEV4cHJlc3Npb24u
YmFzZSgpLm1heUJlRWZmZWN0ZnVsKCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpJ
bmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IEFTU0VSVCghaW5kZXhFeHByZXNzaW9uLmJhc2UoKS5tYXlCZUVmZmVjdGZ1bCgpKTsKKyAgICAg
ICAgQVNTRVJUKCFpbmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9uKCkubWF5QmVFZmZlY3Rm
dWwoKSk7CisgICAgfQorfTsKKwordm9pZCBmaW5kSGlnaFpvbWJpZXMoUHJvZ3JhbSYgcHJvZ3Jh
bSkKIHsKLSAgICAvLyBGSVhNRTogQnJpbmcgdGhpcyBwaGFzZSBiYWNrIG9uY2Ugd2UgYWRkIGEg
bmV3IHByb3BlcnR5IHJlc29sdmVyCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMTI1MQorICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICBIaWdoWm9tYmllRmluZGVyIGZpbmRlcjsKKyAgICBmaW5kZXIu
VmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7CisjZW5kaWYKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3Bl
cnR5UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyNDk1MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCwxNCArMjgsMjUyIEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAi
V0hMU0xBU1QuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi12b2lkIHJlc29sdmVQcm9wZXJ0aWVzKFByb2dy
YW0mKQorY2xhc3MgUHJvcGVydHlSZXNvbHZlciA6IHB1YmxpYyBWaXNpdG9yIHsKKyAgICB2b2lk
IGhhbmRsZUxlZnRIYW5kU2lkZUJhc2UoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gYmFzZSwg
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIHNsb3QsIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPj4mIGV4cHJlc3Npb25zKQorICAgIHsKKyAgICAgICAgaWYgKCFiYXNlLT5tYXlC
ZUVmZmVjdGZ1bCgpKSB7CisgICAgICAgICAgICBzbG90ID0gV1RGTW92ZShiYXNlKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFj
ZSA9IGJhc2UtPnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChsZWZ0QWRkcmVzc1NwYWNlKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uIGNv
ZGVMb2NhdGlvbiA9IGJhc2UtPmNvZGVMb2NhdGlvbigpOworICAgICAgICBSZWY8QVNUOjpVbm5h
bWVkVHlwZT4gYmFzZVR5cGUgPSBiYXNlLT5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgUmVmPEFT
VDo6UG9pbnRlclR5cGU+IHBvaW50ZXJUeXBlID0gQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKGNv
ZGVMb2NhdGlvbiwgKmxlZnRBZGRyZXNzU3BhY2UsIGJhc2VUeXBlLmNvcHlSZWYoKSk7CisKKyAg
ICAgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9pbnRlclZhcmlhYmxl
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGNvZGVMb2NhdGlvbiwg
QVNUOjpRdWFsaWZpZXJzIHsgfSwgcG9pbnRlclR5cGUucHRyKCksIFN0cmluZygpLCBudWxscHRy
LCBudWxscHRyKTsKKworICAgICAgICBhdXRvIG1ha2VWYXJpYWJsZVJlZmVyZW5jZSA9IFsmXSB7
CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJW
YXJpYWJsZSkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9pbnRl
clR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7
CisgICAgICAgICAgICByZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CisgICAgICAgIH07CisKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byBwb2ludGVyT2ZCYXNlID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oY29kZUxvY2F0aW9uLCBXVEZNb3ZlKGJhc2UpLCBB
U1Q6OkFkZHJlc3NFc2NhcGVNb2RlOjpEb2VzTm90RXNjYXBlKTsKKyAgICAgICAgICAgIHBvaW50
ZXJPZkJhc2UtPnNldFR5cGUocG9pbnRlclR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgIHBv
aW50ZXJPZkJhc2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAg
ICAgICAgICAgYXV0byBhc3NpZ25tZW50ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRF
eHByZXNzaW9uPihjb2RlTG9jYXRpb24sIG1ha2VWYXJpYWJsZVJlZmVyZW5jZSgpLCBXVEZNb3Zl
KHBvaW50ZXJPZkJhc2UpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnQtPnNldFR5cGUocG9pbnRl
clR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnQtPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5k
KFdURk1vdmUoYXNzaWdubWVudCkpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byBkZXJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJl
c3Npb24+KGNvZGVMb2NhdGlvbiwgbWFrZVZhcmlhYmxlUmVmZXJlbmNlKCkpOworICAgICAgICAg
ICAgZGVyZWZlcmVuY2UtPnNldFR5cGUoYmFzZVR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAg
IGRlcmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7ICpsZWZ0QWRk
cmVzc1NwYWNlIH0pOworCisgICAgICAgICAgICBzbG90ID0gV1RGTW92ZShkZXJlZmVyZW5jZSk7
CisgICAgICAgIH0KKworICAgICAgICBtX3ZhcmlhYmxlcy5hcHBlbmQoV1RGTW92ZShwb2ludGVy
VmFyaWFibGUpKTsKKyAgICB9CisKKyAgICB2b2lkIGhhbmRsZVByb3BlcnR5QWNjZXNzKEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2VzcywgVmVjdG9yPFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+PiYgZXhwcmVzc2lvbnMpCisgICAgeworICAgICAgICBBU1Q6OlBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbiogY3VycmVudFB0ciA9ICZwcm9wZXJ0eUFjY2VzczsKKyAg
ICAgICAgLy8gYS5iW2NdLmQgd2lsbCBnbyBpbnRvIHRoaXMgYXJyYXkgYXMgWy5kLCBbY10sIC5i
XQorICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbj4+IGNoYWluOworCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICBBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgY3VycmVudCA9ICpjdXJyZW50UHRy
OworICAgICAgICAgICAgY2hhaW4uYXBwZW5kKGN1cnJlbnQpOworCisgICAgICAgICAgICBpZiAo
aXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KGN1cnJlbnQpKQorICAgICAgICAgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4oY3VycmVudCkuaW5k
ZXhFeHByZXNzaW9uKCkpOworCisgICAgICAgICAgICBpZiAoaXM8QVNUOjpQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24+KGN1cnJlbnQuYmFzZSgpKSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRQ
dHIgPSAmZG93bmNhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGN1cnJlbnQuYmFz
ZSgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGN1cnJlbnQuYmFzZSgpKTsKKworICAgICAgICAgICAg
Q29kZUxvY2F0aW9uIGJhc2VDb2RlTG9jYXRpb24gPSBjdXJyZW50LmJhc2UoKS5jb2RlTG9jYXRp
b24oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGN1cnJlbnQuYmFzZSgpLnR5cGVB
bm5vdGF0aW9uKCkuaXNSaWdodFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiBjb3B5ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24+KGJhc2VDb2RlTG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycyB7IH0sICZj
dXJyZW50LmJhc2UoKS5yZXNvbHZlZFR5cGUoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIp
OworICAgICAgICAgICAgICAgIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiBiYXNlVHlwZSA9IGN1cnJl
bnQuYmFzZSgpLnJlc29sdmVkVHlwZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGF1dG8gbWFrZVZhcmlhYmxlUmVmZXJlbmNlID0gWyZdIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJl
ZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChjb3B5KSk7CisgICAgICAgICAg
ICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKGJhc2VUeXBlLmNvcHlSZWYoKSk7
CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAgICAgICAgICAgICB9
OworCisgICAgICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OkFzc2lnbm1lbnRFeHByZXNzaW9uPihiYXNlQ29kZUxvY2F0aW9uLCBtYWtlVmFyaWFibGVSZWZl
cmVuY2UoKSwgY3VycmVudC50YWtlQmFzZSgpKTsKKyAgICAgICAgICAgICAgICBhc3NpZ25tZW50
LT5zZXRUeXBlKGJhc2VUeXBlLmNvcHlSZWYoKSk7CisgICAgICAgICAgICAgICAgYXNzaWdubWVu
dC0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICAg
ICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGN1cnJlbnQuYmFzZVJlZmVyZW5jZSgpID0gbWFrZVZhcmlh
YmxlUmVmZXJlbmNlKCk7CisKKyAgICAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5hcHBlbmQoV1RG
TW92ZShjb3B5KSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBoYW5kbGVM
ZWZ0SGFuZFNpZGVCYXNlKGN1cnJlbnQudGFrZUJhc2UoKSwgY3VycmVudC5iYXNlUmVmZXJlbmNl
KCksIGV4cHJlc3Npb25zKTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNoYWluLnNp
emUoKTsgaS0tOyApIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBhY2Nlc3MgPSBjaGFpbltpXS5n
ZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KGFjY2Vz
cykgJiYgZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Npb24+KGFjY2VzcykuaW5kZXhFeHByZXNz
aW9uKCkubWF5QmVFZmZlY3RmdWwoKSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbmRl
eEV4cHJlc3Npb24gPSBkb3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4oYWNjZXNzKTsKKwor
ICAgICAgICAgICAgICAgICAgICBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gaW5kZXhUeXBlID0gaW5k
ZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpLnJlc29sdmVkVHlwZSgpOworCisgICAgICAg
ICAgICAgICAgICAgIFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IGluZGV4VmFy
aWFibGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oYWNjZXNzLmNv
ZGVMb2NhdGlvbigpLCBBU1Q6OlF1YWxpZmllcnMgeyB9LCBpbmRleFR5cGUucHRyKCksIFN0cmlu
ZygpLCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIG1ha2VW
YXJpYWJsZVJlZmVyZW5jZSA9IFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHZh
cmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKGluZGV4VmFyaWFibGUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKGluZGV4VHlwZS5jb3B5UmVm
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAg
ICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvIGFzc2lnbm1lbnQgPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVu
dEV4cHJlc3Npb24+KGJhc2VDb2RlTG9jYXRpb24sIG1ha2VWYXJpYWJsZVJlZmVyZW5jZSgpLCBp
bmRleEV4cHJlc3Npb24udGFrZUluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXNz
aWdubWVudC0+c2V0VHlwZShpbmRleFR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFzc2lnbm1lbnQtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNz
aWdubWVudCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
aW5kZXhFeHByZXNzaW9uLmluZGV4UmVmZXJlbmNlKCkgPSBtYWtlVmFyaWFibGVSZWZlcmVuY2Uo
KTsKKworICAgICAgICAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5hcHBlbmQoV1RGTW92ZShpbmRl
eFZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgaGFuZGxlUHJvcGVydHlB
Y2Nlc3MoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzKQorICAg
IHsKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9u
czsKKworICAgICAgICBoYW5kbGVQcm9wZXJ0eUFjY2Vzcyhwcm9wZXJ0eUFjY2VzcywgZXhwcmVz
c2lvbnMpOworCisgICAgICAgIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiBhY2Nlc3NUeXBlID0gcHJv
cGVydHlBY2Nlc3MucmVzb2x2ZWRUeXBlKCk7CisKKyAgICAgICAgQVNUOjpDb21tYUV4cHJlc3Np
b24qIGNvbW1hOworICAgICAgICBDb2RlTG9jYXRpb24gY29kZUxvY2F0aW9uID0gcHJvcGVydHlB
Y2Nlc3MuY29kZUxvY2F0aW9uKCk7CisgICAgICAgIGlmIChpczxBU1Q6OkluZGV4RXhwcmVzc2lv
bj4ocHJvcGVydHlBY2Nlc3MpKSB7CisgICAgICAgICAgICBhdXRvJiBpbmRleEV4cHJlc3Npb24g
PSBkb3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3MpOworCisgICAg
ICAgICAgICBhdXRvIG5ld0luZGV4RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpJbmRl
eEV4cHJlc3Npb24+KGNvZGVMb2NhdGlvbiwgaW5kZXhFeHByZXNzaW9uLnRha2VCYXNlKCksIGlu
ZGV4RXhwcmVzc2lvbi50YWtlSW5kZXgoKSk7CisgICAgICAgICAgICBuZXdJbmRleEV4cHJlc3Np
b24tPnNldFR5cGUoaW5kZXhFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAg
IG5ld0luZGV4RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpUeXBlQW5ub3RhdGlv
bihpbmRleEV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKSkpOworCisgICAgICAgICAgICBleHBy
ZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShuZXdJbmRleEV4cHJlc3Npb24pKTsKKworICAgICAgICAg
ICAgY29tbWEgPSBBU1Q6OnJlcGxhY2VXaXRoPEFTVDo6Q29tbWFFeHByZXNzaW9uPihpbmRleEV4
cHJlc3Npb24sIGNvZGVMb2NhdGlvbiwgV1RGTW92ZShleHByZXNzaW9ucykpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXM8QVNUOjpEb3RFeHByZXNzaW9u
Pihwcm9wZXJ0eUFjY2VzcykpOworICAgICAgICAgICAgYXV0byYgZG90RXhwcmVzc2lvbiA9IGRv
d25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3MpOworCisgICAgICAgICAg
ICBhdXRvIG5ld0RvdEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lv
bj4oY29kZUxvY2F0aW9uLCBkb3RFeHByZXNzaW9uLnRha2VCYXNlKCksIFN0cmluZyhkb3RFeHBy
ZXNzaW9uLmZpZWxkTmFtZSgpKSk7CisgICAgICAgICAgICBuZXdEb3RFeHByZXNzaW9uLT5zZXRU
eXBlKGRvdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICAgICAgbmV3RG90RXhw
cmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpUeXBlQW5ub3RhdGlvbihkb3RFeHByZXNz
aW9uLnR5cGVBbm5vdGF0aW9uKCkpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5k
KFdURk1vdmUobmV3RG90RXhwcmVzc2lvbikpOworCisgICAgICAgICAgICBjb21tYSA9IEFTVDo6
cmVwbGFjZVdpdGg8QVNUOjpDb21tYUV4cHJlc3Npb24+KGRvdEV4cHJlc3Npb24sIGNvZGVMb2Nh
dGlvbiwgV1RGTW92ZShleHByZXNzaW9ucykpOworICAgICAgICB9CisKKyAgICAgICAgY29tbWEt
PnNldFR5cGUoV1RGTW92ZShhY2Nlc3NUeXBlKSk7CisgICAgICAgIGNvbW1hLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgfQorCitwdWJsaWM6CisgICAgdm9pZCB2
aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBoYW5kbGVQcm9wZXJ0eUFjY2Vzcyhkb3RFeHByZXNzaW9uKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pIG92ZXJy
aWRlCisgICAgeworICAgICAgICBoYW5kbGVQcm9wZXJ0eUFjY2VzcyhpbmRleEV4cHJlc3Npb24p
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
JiByZWFkTW9kaWZ5V3JpdGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQocmVhZE1vZGlmeVdyaXRlLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZS5yZXN1bHRFeHByZXNzaW9uKCkpOworCisg
ICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisK
KyAgICAgICAgQ29kZUxvY2F0aW9uIGNvZGVMb2NhdGlvbiA9IHJlYWRNb2RpZnlXcml0ZS5jb2Rl
TG9jYXRpb24oKTsKKworICAgICAgICBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gdHlwZSA9IHJlYWRN
b2RpZnlXcml0ZS5yZXNvbHZlZFR5cGUoKTsKKworICAgICAgICBpZiAoaXM8QVNUOjpQcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24+KHJlYWRNb2RpZnlXcml0ZS5sZWZ0VmFsdWUoKSkpCisgICAgICAg
ICAgICBoYW5kbGVQcm9wZXJ0eUFjY2Vzcyhkb3duY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbj4ocmVhZE1vZGlmeVdyaXRlLmxlZnRWYWx1ZSgpKSwgZXhwcmVzc2lvbnMpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGVMZWZ0SGFuZFNpZGVCYXNlKHJlYWRNb2RpZnlX
cml0ZS50YWtlTGVmdFZhbHVlKCksIHJlYWRNb2RpZnlXcml0ZS5sZWZ0VmFsdWVSZWZlcmVuY2Uo
KSwgZXhwcmVzc2lvbnMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFVuaXF1ZVJlZjxBU1Q6
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+IG5ld1JlYWRNb2RpZnlXcml0ZSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPigKKyAgICAgICAgICAgICAgICBy
ZWFkTW9kaWZ5V3JpdGUuY29kZUxvY2F0aW9uKCksIHJlYWRNb2RpZnlXcml0ZS50YWtlTGVmdFZh
bHVlKCksIHJlYWRNb2RpZnlXcml0ZS50YWtlT2xkVmFsdWUoKSwgcmVhZE1vZGlmeVdyaXRlLnRh
a2VOZXdWYWx1ZSgpKTsKKyAgICAgICAgICAgIG5ld1JlYWRNb2RpZnlXcml0ZS0+c2V0TmV3VmFs
dWVFeHByZXNzaW9uKHJlYWRNb2RpZnlXcml0ZS50YWtlTmV3VmFsdWVFeHByZXNzaW9uKCkpOwor
ICAgICAgICAgICAgbmV3UmVhZE1vZGlmeVdyaXRlLT5zZXRSZXN1bHRFeHByZXNzaW9uKHJlYWRN
b2RpZnlXcml0ZS50YWtlUmVzdWx0RXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgIG5ld1JlYWRN
b2RpZnlXcml0ZS0+c2V0VHlwZSh0eXBlLmNvcHlSZWYoKSk7CisgICAgICAgICAgICBuZXdSZWFk
TW9kaWZ5V3JpdGUtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6VHlwZUFubm90YXRpb24ocmVhZE1v
ZGlmeVdyaXRlLnR5cGVBbm5vdGF0aW9uKCkpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMu
YXBwZW5kKFdURk1vdmUobmV3UmVhZE1vZGlmeVdyaXRlKSk7CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvKiBjb21tYSA9IEFTVDo6cmVwbGFjZVdpdGg8QVNUOjpDb21tYUV4cHJlc3Npb24+KHJl
YWRNb2RpZnlXcml0ZSwgY29kZUxvY2F0aW9uLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSk7CisgICAg
ICAgIGNvbW1hLT5zZXRUeXBlKFdURk1vdmUodHlwZSkpOworICAgICAgICBjb21tYS0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQo
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFyaWFibGVzLmlzRW1wdHkoKSk7CisKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOworCisgICAgICAgIGlmICghbV92YXJpYWJsZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKS5zdGF0
ZW1lbnRzKCkuaW5zZXJ0KDAsIAorICAgICAgICAgICAgICAgIG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCku
Y29kZUxvY2F0aW9uKCksIFdURk1vdmUobV92YXJpYWJsZXMpKSk7CisgICAgICAgIH0KKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3ZhcmlhYmxlczsK
K307CisKK3ZvaWQgcmVzb2x2ZVByb3BlcnRpZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKLSAgICAv
LyBGSVhNRTogQnJpbmcgdGhpcyBwaGFzZSBiYWNrIHRvIGFsbG93IG1ldGFsIGNvZGVnZW4gc29t
ZSBjb252ZW5pZW5jZXMgCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMTI1MQorICAgIC8vIFRoZSBnb2FsIG9mIHRoaXMgcGhhc2UgaXMgdHdvIGFsbG93
IHR3byB0aGluZ3M6CisgICAgLy8gMS4gRm9yIHByb3BlcnR5IGFjY2VzcyBleHByZXNzaW9ucywg
bWV0YWwgY29kZWdlbiBzaG91bGQgYmUgYWxsb3dlZCB0byBldmFsdWF0ZQorICAgIC8vIHRoZSBi
YXNlLCBhbmQgaWYgaXQncyBhbiBpbmRleCBleHByZXNzaW9uLCB0aGUgaW5kZXgsIGFzIG1hbnkg
dGltZXMgYXMgbmVlZGVkLgorICAgIC8vIFNvIHRoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IGlmIE1l
dGFsIGV2YWx1YXRlcyBzdWNoIHRoaW5ncywgZWZmZWN0cyBhcmVuJ3QgcGVyZm9ybWVkCisgICAg
Ly8gbW9yZSB0aGFuIG9uY2UuCisgICAgLy8KKyAgICAvLyAyLiBGb3IgUmVhZE1vZGlmeVdyaXRl
IGV4cHJlc3Npb25zLCBtZXRhbCBjb2RlZ2VuIHNob3VsZCBiZSBhYmxlIHRvIGV2YWx1YXRlIHRo
ZQorICAgIC8vIGxlZnRWYWx1ZUV4cHJlc3Npb24gYXMgbWFueSB0aW1lcyBhcyBpdCdkIGxpa2Ug
d2l0aG91dCBwZXJmb3JtaW5nIHRoZSBlZmZlY3RzIG9mCisgICAgLy8gbGVmdFZhbHVlRXhwcmVz
c2lvbiBtb3JlIHRoYW4gb25jZS4KKyAgICAvLworICAgIC8vIFdlIGRvIHRoZXNlIHRoaW5ncyBi
ZWNhdXNlIGl0J3MgY29udmVuaWVudCBmb3IgbWV0YWwgY29kZWdlbiB0byBiZSBhYmxlIHRvIHJl
bHkgb24KKyAgICAvLyB0aGlzIHdpdGggdGhlIHdheSBpdCBzdHJ1Y3R1cmVzIHRoZSBnZW5lcmF0
ZWQgY29kZS4KKyAgICBQcm9wZXJ0eVJlc29sdmVyIHJlc29sdmVyOworICAgIGZvciAoYXV0byYg
ZnVuY3Rpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgcmVzb2x2
ZXIudmlzaXQoZnVuY3Rpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRXhwcmVzc2lvbi5jcHAJKHJldmlzaW9uIDI0OTUzNikKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjIsNiArMTYyLDQ4IEBAIHZvaWQgRXhwcmVzc2lvbjo6ZGVzdHJ1Y3QoRXhwcmVzc2lv
biYgZXgKICAgICB9CiB9CiAKK2Jvb2wgRXhwcmVzc2lvbjo6bWF5QmVFZmZlY3RmdWwoKSBjb25z
dAoreworICAgIGF1dG8mIGV4cHJlc3Npb24gPSBjb25zdF9jYXN0PEV4cHJlc3Npb24mPigqdGhp
cyk7CisKKyAgICBzd2l0Y2ggKGV4cHJlc3Npb24ua2luZCgpKSB7CisgICAgY2FzZSBFeHByZXNz
aW9uOjpLaW5kOjpCb29sZWFuTGl0ZXJhbDoKKyAgICBjYXNlIEV4cHJlc3Npb246OktpbmQ6OkZs
b2F0TGl0ZXJhbDoKKyAgICBjYXNlIEV4cHJlc3Npb246OktpbmQ6OkludGVnZXJMaXRlcmFsOgor
ICAgIGNhc2UgRXhwcmVzc2lvbjo6S2luZDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbDoKKyAgICBj
YXNlIEV4cHJlc3Npb246OktpbmQ6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbDoKKyAgICBjYXNl
IEV4cHJlc3Npb246OktpbmQ6Okdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlOgorICAgIGNhc2UgRXhw
cmVzc2lvbjo6S2luZDo6VmFyaWFibGVSZWZlcmVuY2U6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGNhc2UgRXhwcmVzc2lvbjo6S2luZDo6RGVyZWZlcmVuY2U6CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pLnBvaW50ZXIoKS5t
YXlCZUVmZmVjdGZ1bCgpOworCisgICAgY2FzZSBFeHByZXNzaW9uOjpLaW5kOjpMb2dpY2FsOgor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8TG9naWNhbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pLmxl
ZnQoKS5tYXlCZUVmZmVjdGZ1bCgpIHx8IGRvd25jYXN0PExvZ2ljYWxFeHByZXNzaW9uPihleHBy
ZXNzaW9uKS5yaWdodCgpLm1heUJlRWZmZWN0ZnVsKCk7CisKKyAgICBjYXNlIEV4cHJlc3Npb246
OktpbmQ6OkxvZ2ljYWxOb3Q6CisgICAgICAgIHJldHVybiBkb3duY2FzdDxMb2dpY2FsTm90RXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikub3BlcmFuZCgpLm1heUJlRWZmZWN0ZnVsKCk7CisKKyAgICBj
YXNlIEV4cHJlc3Npb246OktpbmQ6Ok1ha2VBcnJheVJlZmVyZW5jZToKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pLmxlZnRW
YWx1ZSgpLm1heUJlRWZmZWN0ZnVsKCk7CisKKyAgICBjYXNlIEV4cHJlc3Npb246OktpbmQ6Ok1h
a2VQb2ludGVyOgorICAgICAgICByZXR1cm4gZG93bmNhc3Q8TWFrZVBvaW50ZXJFeHByZXNzaW9u
PihleHByZXNzaW9uKS5sZWZ0VmFsdWUoKS5tYXlCZUVmZmVjdGZ1bCgpOworCisgICAgY2FzZSBF
eHByZXNzaW9uOjpLaW5kOjpEb3Q6CisgICAgICAgIHJldHVybiBkb3duY2FzdDxEb3RFeHByZXNz
aW9uPihleHByZXNzaW9uKS5iYXNlKCkubWF5QmVFZmZlY3RmdWwoKTsKKworICAgIGNhc2UgRXhw
cmVzc2lvbjo6S2luZDo6SW5kZXg6CisgICAgICAgIHJldHVybiBkb3duY2FzdDxJbmRleEV4cHJl
c3Npb24+KGV4cHJlc3Npb24pLmJhc2UoKS5tYXlCZUVmZmVjdGZ1bCgpIHx8IGRvd25jYXN0PElu
ZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikuaW5kZXhFeHByZXNzaW9uKCkubWF5QmVFZmZlY3Rm
dWwoKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBBU1QKIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJl
c3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0OTUzNikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDYgKzEyMCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG90aGVyLnNldFR5
cGUoKnJlc29sdmVkVHlwZSk7CiAgICAgfQogCisgICAgYm9vbCBtYXlCZUVmZmVjdGZ1bCgpIGNv
bnN0OworCiAgICAgS2luZCBraW5kKCkgY29uc3QgIHsgcmV0dXJuIG1fa2luZDsgfQogICAgIGJv
b2wgaXNBc3NpZ25tZW50RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5k
OjpBc3NpZ25tZW50OyB9CiAgICAgYm9vbCBpc0Jvb2xlYW5MaXRlcmFsKCkgY29uc3QgeyByZXR1
cm4ga2luZCgpID09IEtpbmQ6OkJvb2xlYW5MaXRlcmFsOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRl
eEV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ5NTM2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIEluZGV4RXhwcmVzc2lvbihJbmRleEV4cHJl
c3Npb24mJikgPSBkZWZhdWx0OwogCiAgICAgRXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKCkg
eyByZXR1cm4gbV9pbmRleDsgfQorICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYgaW5kZXhSZWZl
cmVuY2UoKSB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IHRh
a2VJbmRleCgpIHsgcmV0dXJuIFdURk1vdmUobV9pbmRleCk7IH0KIAogcHJpdmF0ZToKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgJKHJldmlzaW9u
IDI0OTUzNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAs
MTQgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxlZnRWYWx1
ZSwgVW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+IG9sZFZhbHVlLCBVbmlxdWVSZWY8VmFy
aWFibGVEZWNsYXJhdGlvbj4gbmV3VmFsdWUpCisgICAgICAgIDogRXhwcmVzc2lvbihsb2NhdGlv
biwgS2luZDo6UmVhZE1vZGlmeVdyaXRlKQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUo
bGVmdFZhbHVlKSkKKyAgICAgICAgLCBtX29sZFZhbHVlKFdURk1vdmUob2xkVmFsdWUpKQorICAg
ICAgICAsIG1fbmV3VmFsdWUoV1RGTW92ZShuZXdWYWx1ZSkpCisgICAgeworICAgIH0KKwogCiAg
ICAgflJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKSA9IGRlZmF1bHQ7CiAKQEAgLTg3LDYgKzk1
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0
dXJuIG1fbGVmdFZhbHVlOyB9CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiBsZWZ0VmFsdWVS
ZWZlcmVuY2UoKSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRp
b24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFy
YXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9uZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24m
IG5ld1ZhbHVlRXhwcmVzc2lvbigpCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvZG9u
dC1ldmFsdWF0ZS10d2ljZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL2RvbnQtZXZhbHVhdGUtdHdpY2UtZXhwZWN0ZWQudHh0CShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC9kb250LWV2YWx1YXRlLXR3aWNlLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKworUEFTUyBkb250RXZhbHVh
dGVUd2ljZSAKK1BBU1MgZG9udEV2YWx1YXRlVHdpY2UyIAorUEFTUyBkb250RXZhbHVhdGVUd2lj
ZTMgCitQQVNTIGRvbnRFdmFsdWF0ZVR3aWNlNCAKK1BBU1MgZG9udEV2YWx1YXRlVHdpY2U1IAor
UEFTUyBkb250RXZhbHVhdGVUd2ljZTYgCisKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9kb250LWV2YWx1YXRlLXR3aWNlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL2RvbnQtZXZhbHVhdGUtdHdpY2UuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvZG9udC1ldmFsdWF0ZS10d2ljZS5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTU4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hh
cnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxl
PmV2YWx1YXRpb24gb3JkZXIgYW5kIHRpbWVzLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvdGVz
dC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9Owor
Cit3aGxzbFRlc3RzLmRvbnRFdmFsdWF0ZVR3aWNlID0gYXN5bmMgKCkgPT4geworICAgIGNvbnN0
IHByb2dyYW0gPSBgCisgICAgICAgIHVpbnQgYmFyKHRocmVhZCB1aW50KiBwdHIpIHsKKyAgICAg
ICAgICAgIHVpbnQgb2xkID0gKnB0cjsKKyAgICAgICAgICAgICpwdHIgPSAqcHRyICsgMTsKKyAg
ICAgICAgICAgIHJldHVybiBvbGQ7CisgICAgICAgIH0KKworICAgICAgICBib29sIGZvbygpIHsK
KyAgICAgICAgICAgIHVpbnQgeCA9IDA7CisgICAgICAgICAgICBpbnRbNDJdIGFycjsKKyAgICAg
ICAgICAgIGFyclswXSA9IDQyOworCisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gYXJyW2Jhcigm
eCldOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSA0MiAmJiB4ID09IDE7CisgICAgICAg
IH0KKyAgICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICAiZm9vIiwgW10pLCB0cnVlKTsKK307CisKK3dobHNsVGVzdHMuZG9udEV2YWx1YXRl
VHdpY2UyID0gYXN5bmMgKCkgPT4geworICAgIGNvbnN0IHByb2dyYW0gPSBgCisgICAgICAgIHVp
bnQgYmFyKHRocmVhZCB1aW50W10gYXJyLCB1aW50IGluZGV4LCB0aHJlYWQgdWludCogcHRyKSB7
CisgICAgICAgICAgICB1aW50IG9sZCA9ICpwdHI7CisgICAgICAgICAgICBhcnJbaW5kZXhdID0g
b2xkOworICAgICAgICAgICAgKnB0ciA9ICpwdHIgKyAxOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKworICAgICAgICBib29sIGZvbygpIHsKKyAgICAgICAgICAgIHVpbnQgeCA9
IDE7CisKKyAgICAgICAgICAgIHVpbnRbM10gaW5kaWNlczsKKworICAgICAgICAgICAgdWludFs0
XVs0XVs0XSBhcnI7CisKKyAgICAgICAgICAgIGFycltiYXIoQGluZGljZXMsIDAsICZ4KV1bYmFy
KEBpbmRpY2VzLCAxLCAmeCldW2JhcihAaW5kaWNlcywgMiwgJngpXSA9IDQyOworICAgICAgICAg
ICAgcmV0dXJuIGFyclswXVswXVswXSA9PSA0MgorICAgICAgICAgICAgICAgICYmIGluZGljZXNb
MF0gPT0gMSAKKyAgICAgICAgICAgICAgICAmJiBpbmRpY2VzWzFdID09IDIgCisgICAgICAgICAg
ICAgICAgJiYgaW5kaWNlc1syXSA9PSAzCisgICAgICAgICAgICAgICAgJiYgeCA9PSA0OworICAg
ICAgICB9CisgICAgYDsKKworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlv
bihwcm9ncmFtLCAgImZvbyIsIFtdKSwgdHJ1ZSk7Cit9OworCit3aGxzbFRlc3RzLmRvbnRFdmFs
dWF0ZVR3aWNlMyA9IGFzeW5jICgpID0+IHsKKyAgICBjb25zdCBwcm9ncmFtID0gYAorICAgICAg
ICB1aW50WzJdWzJdIGJhc2UodGhyZWFkIHVpbnRbXSBhcnIsIHVpbnQgaW5kZXgsIHRocmVhZCB1
aW50KiBwdHIpIHsKKyAgICAgICAgICAgIHVpbnQgb2xkID0gKnB0cjsKKyAgICAgICAgICAgIGFy
cltpbmRleF0gPSBvbGQ7CisgICAgICAgICAgICAqcHRyID0gKnB0ciArIDE7CisgICAgICAgICAg
ICB1aW50WzJdWzJdIHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdFswXVswXSA9IDQyOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQgYmFyKHRo
cmVhZCB1aW50W10gYXJyLCB1aW50IGluZGV4LCB0aHJlYWQgdWludCogcHRyKSB7CisgICAgICAg
ICAgICB1aW50IG9sZCA9ICpwdHI7CisgICAgICAgICAgICBhcnJbaW5kZXhdID0gb2xkOworICAg
ICAgICAgICAgKnB0ciA9ICpwdHIgKyAxOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKworICAgICAgICBib29sIGZvbygpIHsKKyAgICAgICAgICAgIHVpbnQgeCA9IDE7CisKKyAg
ICAgICAgICAgIHVpbnRbM10gaW5kaWNlczsKKworICAgICAgICAgICAgdWludCByZXN1bHQgPSBi
YXNlKEBpbmRpY2VzLCAwLCAmeClbYmFyKEBpbmRpY2VzLCAxLCAmeCldW2JhcihAaW5kaWNlcywg
MiwgJngpXTsKKworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSA0MgorICAgICAgICAgICAg
ICAgICYmIGluZGljZXNbMF0gPT0gMQorICAgICAgICAgICAgICAgICYmIGluZGljZXNbMV0gPT0g
MiAKKyAgICAgICAgICAgICAgICAmJiBpbmRpY2VzWzJdID09IDMKKyAgICAgICAgICAgICAgICAm
JiB4ID09IDQ7CisgICAgICAgIH0KKyAgICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICAiZm9vIiwgW10pLCB0cnVlKTsKK307CisKK3dobHNs
VGVzdHMuZG9udEV2YWx1YXRlVHdpY2U0ID0gYXN5bmMgKCkgPT4geworICAgIGNvbnN0IHByb2dy
YW0gPSBgCisgICAgICAgIHVpbnQgYmFyKHRocmVhZCB1aW50KiBwdHIpIHsKKyAgICAgICAgICAg
IHVpbnQgb2xkID0gKnB0cjsKKyAgICAgICAgICAgICpwdHIgPSAqcHRyICsgMTsKKyAgICAgICAg
ICAgIHJldHVybiBvbGQ7CisgICAgICAgIH0KKworICAgICAgICBib29sIGZvbygpIHsKKyAgICAg
ICAgICAgIHVpbnRbMl0gYXJyOworCisgICAgICAgICAgICB1aW50IHggPSAxOworCisgICAgICAg
ICAgICBhcnJbYmFyKCZ4KV0gKz0gNjY2OworCisgICAgICAgICAgICByZXR1cm4gYXJyWzFdID09
IDY2NiAmJiB4ID09IDI7CisgICAgICAgIH0KKyAgICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICAiZm9vIiwgW10pLCB0cnVlKTsKK307CisK
K3dobHNsVGVzdHMuZG9udEV2YWx1YXRlVHdpY2U1ID0gYXN5bmMgKCkgPT4geworICAgIGNvbnN0
IHByb2dyYW0gPSBgCisgICAgICAgIHRocmVhZCB1aW50KiBnZXRQdHIodGhyZWFkIHVpbnQqIHB0
cikgeworICAgICAgICAgICAgKnB0ciA9ICpwdHIgKyAxOworICAgICAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZm9vKCkgeworICAgICAgICAgICAgdWludCB4
ID0gMTsKKyAgICAgICAgICAgIHVpbnQgcmVzdWx0ID0gKCpnZXRQdHIoJngpKSsrOworICAgICAg
ICAgICAgcmV0dXJuIHggPT0gMyAmJiByZXN1bHQgPT0gMjsKKyAgICAgICAgfQorICAgIGA7CisK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJmb28i
LCBbXSksIHRydWUpOworfTsKKword2hsc2xUZXN0cy5kb250RXZhbHVhdGVUd2ljZTYgPSBhc3lu
YyAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAgICAgICAgdGhyZWFkIHVpbnQqIGdl
dFB0cih0aHJlYWQgdWludCogcHRyKSB7CisgICAgICAgICAgICAqcHRyID0gKnB0ciArIDE7Cisg
ICAgICAgICAgICByZXR1cm4gcHRyOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBmb28oKSB7
CisgICAgICAgICAgICB1aW50IHggPSAxOworICAgICAgICAgICAgdWludCByZXN1bHQgPSArKygq
Z2V0UHRyKCZ4KSk7CisgICAgICAgICAgICByZXR1cm4geCA9PSAzICYmIHJlc3VsdCA9PSAzOwor
ICAgICAgICB9CisgICAgYDsKKworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihwcm9ncmFtLCAgImZvbyIsIFtdKSwgdHJ1ZSk7Cit9OworCitydW5UZXN0cyh3aGxzbFRl
c3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgorCisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378251</attachid>
            <date>2019-09-06 16:30:01 -0700</date>
            <delta_ts>2019-09-06 17:21:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>30027</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTU5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE5LTA5LTA2ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gQWRkIGJhY2sgYSB2
ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSByZXNvbHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxMjUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGJhY2sgdGhlIHByb3BlcnR5
IHJlc29sdmVyIHRvIGFpZCBpbiBob3cgd2UgZW1pdCBtZXRhbCBjb2RlLgorICAgICAgICBUaGUg
Z29hbCBvZiB0aGUgbmV3IHByb3BlcnR5IHJlc29sdmVyIHBoYXNlIGlzIHR3byBhbGxvdyB0d28g
dGhpbmdzOgorICAgICAgICAxLiBGb3IgcHJvcGVydHkgYWNjZXNzIGV4cHJlc3Npb25zLCBtZXRh
bCBjb2RlZ2VuIHNob3VsZCBiZSBhbGxvd2VkIHRvIGV2YWx1YXRlCisgICAgICAgIHRoZSBiYXNl
LCBhbmQgaWYgaXQncyBhbiBpbmRleCBleHByZXNzaW9uLCB0aGUgaW5kZXgsIGFzIG1hbnkgdGlt
ZXMgYXMgbmVlZGVkLgorICAgICAgICBTbyB0aGlzIHBhdGNoIGVuc3VyZXMgdGhhdCBpZiBNZXRh
bCBldmFsdWF0ZXMgc3VjaCB0aGluZ3MsIGVmZmVjdHMgYXJlbid0IHBlcmZvcm1lZAorICAgICAg
ICBtb3JlIHRoYW4gb25jZS4KKyAgICAgICAgCisgICAgICAgIDIuIEZvciBSZWFkTW9kaWZ5V3Jp
dGUgZXhwcmVzc2lvbnMsIG1ldGFsIGNvZGVnZW4gc2hvdWxkIGJlIGFibGUgdG8gZXZhbHVhdGUg
dGhlCisgICAgICAgIGxlZnRWYWx1ZUV4cHJlc3Npb24gYXMgbWFueSB0aW1lcyBhcyBpdCdkIGxp
a2Ugd2l0aG91dCBwZXJmb3JtaW5nIHRoZSBlZmZlY3RzIG9mCisgICAgICAgIGxlZnRWYWx1ZUV4
cHJlc3Npb24gbW9yZSB0aGFuIG9uY2UuCisgICAgICAgIAorICAgICAgICBIZXJlIGFyZSBhIGNv
dXBsZSBleGFtcGxlcyBvZiB0aGlzIHRyYW5zZm9ybWF0aW9uOgorICAgICAgICBgYSgpW2IoKV1g
IC0+IGAodGVtcDEgPSBhKCksIHRlbXAyID0gYigpLCB0ZW1wMVt0ZW1wMl0pYAorICAgICAgICBg
KCphKCkpW2IoKV0gKz0gNDI7YCAtPiBgKHRlbXAxID0gJiphKCksIHRlbXAyID0gYigpLCAoKnRl
bXAxKVt0ZW1wMl0gKz0gNDIpYAorICAgICAgICAKKyAgICAgICAgVGhlIGludGVyZXN0aW5nIHJ1
bGVzIGJyZWFrIGRvd24gbGlrZToKKyAgICAgICAgLSBXaGVuIHRoZSBiYXNlIGlzIGFuIGx2YWx1
ZSwgd2UgdGFrZSBpdHMgYWRkcmVzcyBhbmQgcmVwbGFjZSB0aGUgb2xkIGJhc2UKKyAgICAgICAg
d2l0aCBhIGRlcmVmZXJlbmNlIG9mIHRoZSBuZXcgcG9pbnRlciB2YXJpYWJsZS4KKyAgICAgICAg
LSBXaGVuIHRoZSBiYXNlIGlzIGFuIHJ2YWx1ZSwgd2UgZXZhbHVhdGUgaXQgYW5kIHN0b3JlIGl0
IGluIGEgdGVtcG9yYXJ5CisgICAgICAgIHZhcmlhYmxlLCBhbmQgc3dpdGNoIHRoZSBiYXNlIHRv
IGJlIGEgcmVmZXJlbmNlIG9mIHRoYXQgdmFyaWFibGUuCisgICAgICAgIC0gQWxsIGluZGljZXMg
YXJlIGV2YWx1YXRlZCBiZWZvcmUgdGhlIHByb3BlcnR5IGFjY2VzcyBpbnN0cnVjdGlvbiBhbmQK
KyAgICAgICAgcmVwbGFjZWQgd2l0aCBhIHJlZmVyZW5jZSB0byB0aGUgdGVtcG9yYXJ5IHZhcmlh
YmxlLgorCisgICAgICAgIFRlc3Q6IHdlYmdwdS93aGxzbC9wcm9wZXJ0eS1ldmFsdWF0aW9uLW9y
ZGVyLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJl
c3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6bWF5
QmVFZmZlY3RmdWwgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEV4cHJlc3Npb24uaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xJbmRleEV4cHJlc3Npb24uaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xIaWdoWm9tYmllRmluZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpmaW5kSGlnaFpvbWJpZXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJvcGVydHlSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJvcGVy
dHlSZXNvbHZlcjo6aGFuZGxlTGVmdEhhbmRTaWRlQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6UHJvcGVydHlSZXNvbHZlcjo6aGFuZGxlUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OnJlc29sdmVQcm9wZXJ0aWVzKToKKwogMjAxOS0wOS0wNiAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJ
T04gKHIyNDkzNjcpOiBtX2RlY29kaW5nUHJvbWlzZXMgZ3Jvd3MgaW5kZWZpbml0ZWx5IHVudGls
IEltYWdlTG9hZGVyIGRlc3RydWN0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEhpZ2hab21iaWVGaW5kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSGlnaFpvbWJpZUZpbmRlci5jcHAJ
KHJldmlzaW9uIDI0OTUzNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMSGlnaFpvbWJpZUZpbmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE2ICsyOCw0
MyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMQVNULmgiCiAjaW5j
bHVkZSAiV0hMU0xWaXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNl
IFdITFNMIHsKIAotdm9pZCBmaW5kSGlnaFpvbWJpZXMoUHJvZ3JhbSYpCitjbGFzcyBIaWdoWm9t
YmllRmluZGVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIHZvaWQgdmlzaXQoQVNU
OjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGUpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlLm5ld1ZhbHVl
RXhwcmVzc2lvbigpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0
ZS5yZXN1bHRFeHByZXNzaW9uKCkpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWFkTW9k
aWZ5V3JpdGUubGVmdFZhbHVlKCkubWF5QmVFZmZlY3RmdWwoKSk7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZG90RXhwcmVzc2lvbi5iYXNlKCkubWF5QmVFZmZl
Y3RmdWwoKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYg
aW5kZXhFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWluZGV4RXhwcmVzc2lvbi5iYXNlKCkubWF5QmVFZmZlY3RmdWwoKSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFpbmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9uKCkubWF5QmVFZmZlY3Rm
dWwoKSk7CisgICAgfQorfTsKKwordm9pZCBmaW5kSGlnaFpvbWJpZXMoUHJvZ3JhbSYgcHJvZ3Jh
bSkKIHsKLSAgICAvLyBGSVhNRTogQnJpbmcgdGhpcyBwaGFzZSBiYWNrIG9uY2Ugd2UgYWRkIGEg
bmV3IHByb3BlcnR5IHJlc29sdmVyCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMTI1MQorICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKKworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICBIaWdoWm9tYmllRmluZGVyIGZpbmRlcjsKKyAgICBmaW5kZXIu
VmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7CisjZW5kaWYKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3Bl
cnR5UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyNDk1MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCwxNCArMjgsMjUyIEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAi
V0hMU0xBU1QuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi12b2lkIHJlc29sdmVQcm9wZXJ0aWVzKFByb2dy
YW0mKQorY2xhc3MgUHJvcGVydHlSZXNvbHZlciA6IHB1YmxpYyBWaXNpdG9yIHsKKyAgICB2b2lk
IGhhbmRsZUxlZnRIYW5kU2lkZUJhc2UoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gYmFzZSwg
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIHNsb3QsIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPj4mIGV4cHJlc3Npb25zKQorICAgIHsKKyAgICAgICAgaWYgKCFiYXNlLT5tYXlC
ZUVmZmVjdGZ1bCgpKSB7CisgICAgICAgICAgICBzbG90ID0gV1RGTW92ZShiYXNlKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFj
ZSA9IGJhc2UtPnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChsZWZ0QWRkcmVzc1NwYWNlKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uIGNv
ZGVMb2NhdGlvbiA9IGJhc2UtPmNvZGVMb2NhdGlvbigpOworICAgICAgICBSZWY8QVNUOjpVbm5h
bWVkVHlwZT4gYmFzZVR5cGUgPSBiYXNlLT5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgUmVmPEFT
VDo6UG9pbnRlclR5cGU+IHBvaW50ZXJUeXBlID0gQVNUOjpQb2ludGVyVHlwZTo6Y3JlYXRlKGNv
ZGVMb2NhdGlvbiwgKmxlZnRBZGRyZXNzU3BhY2UsIGJhc2VUeXBlLmNvcHlSZWYoKSk7CisKKyAg
ICAgICAgVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9pbnRlclZhcmlhYmxl
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KGNvZGVMb2NhdGlvbiwg
QVNUOjpRdWFsaWZpZXJzIHsgfSwgcG9pbnRlclR5cGUucHRyKCksIFN0cmluZygpLCBudWxscHRy
LCBudWxscHRyKTsKKworICAgICAgICBhdXRvIG1ha2VWYXJpYWJsZVJlZmVyZW5jZSA9IFsmXSB7
CisgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJW
YXJpYWJsZSkpOworICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9pbnRl
clR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7
CisgICAgICAgICAgICByZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CisgICAgICAgIH07CisKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byBwb2ludGVyT2ZCYXNlID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oY29kZUxvY2F0aW9uLCBXVEZNb3ZlKGJhc2UpLCBB
U1Q6OkFkZHJlc3NFc2NhcGVNb2RlOjpEb2VzTm90RXNjYXBlKTsKKyAgICAgICAgICAgIHBvaW50
ZXJPZkJhc2UtPnNldFR5cGUocG9pbnRlclR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgIHBv
aW50ZXJPZkJhc2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAg
ICAgICAgICAgYXV0byBhc3NpZ25tZW50ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRF
eHByZXNzaW9uPihjb2RlTG9jYXRpb24sIG1ha2VWYXJpYWJsZVJlZmVyZW5jZSgpLCBXVEZNb3Zl
KHBvaW50ZXJPZkJhc2UpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnQtPnNldFR5cGUocG9pbnRl
clR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgIGFzc2lnbm1lbnQtPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5k
KFdURk1vdmUoYXNzaWdubWVudCkpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byBkZXJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJl
c3Npb24+KGNvZGVMb2NhdGlvbiwgbWFrZVZhcmlhYmxlUmVmZXJlbmNlKCkpOworICAgICAgICAg
ICAgZGVyZWZlcmVuY2UtPnNldFR5cGUoYmFzZVR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAg
IGRlcmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7ICpsZWZ0QWRk
cmVzc1NwYWNlIH0pOworCisgICAgICAgICAgICBzbG90ID0gV1RGTW92ZShkZXJlZmVyZW5jZSk7
CisgICAgICAgIH0KKworICAgICAgICBtX3ZhcmlhYmxlcy5hcHBlbmQoV1RGTW92ZShwb2ludGVy
VmFyaWFibGUpKTsKKyAgICB9CisKKyAgICB2b2lkIGhhbmRsZVByb3BlcnR5QWNjZXNzKEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2VzcywgVmVjdG9yPFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+PiYgZXhwcmVzc2lvbnMpCisgICAgeworICAgICAgICBBU1Q6OlBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbiogY3VycmVudFB0ciA9ICZwcm9wZXJ0eUFjY2VzczsKKyAg
ICAgICAgLy8gYS5iW2NdLmQgd2lsbCBnbyBpbnRvIHRoaXMgYXJyYXkgYXMgWy5kLCBbY10sIC5i
XQorICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbj4+IGNoYWluOworCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICBBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgY3VycmVudCA9ICpjdXJyZW50UHRy
OworICAgICAgICAgICAgY2hhaW4uYXBwZW5kKGN1cnJlbnQpOworCisgICAgICAgICAgICBpZiAo
aXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KGN1cnJlbnQpKQorICAgICAgICAgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4oY3VycmVudCkuaW5k
ZXhFeHByZXNzaW9uKCkpOworCisgICAgICAgICAgICBpZiAoaXM8QVNUOjpQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24+KGN1cnJlbnQuYmFzZSgpKSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRQ
dHIgPSAmZG93bmNhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGN1cnJlbnQuYmFz
ZSgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGN1cnJlbnQuYmFzZSgpKTsKKworICAgICAgICAgICAg
Q29kZUxvY2F0aW9uIGJhc2VDb2RlTG9jYXRpb24gPSBjdXJyZW50LmJhc2UoKS5jb2RlTG9jYXRp
b24oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGN1cnJlbnQuYmFzZSgpLnR5cGVB
bm5vdGF0aW9uKCkuaXNSaWdodFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPiBjb3B5ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24+KGJhc2VDb2RlTG9jYXRpb24sIEFTVDo6UXVhbGlmaWVycyB7IH0sICZj
dXJyZW50LmJhc2UoKS5yZXNvbHZlZFR5cGUoKSwgU3RyaW5nKCksIG51bGxwdHIsIG51bGxwdHIp
OworICAgICAgICAgICAgICAgIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiBiYXNlVHlwZSA9IGN1cnJl
bnQuYmFzZSgpLnJlc29sdmVkVHlwZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGF1dG8gbWFrZVZhcmlhYmxlUmVmZXJlbmNlID0gWyZdIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJl
ZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChjb3B5KSk7CisgICAgICAgICAg
ICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKGJhc2VUeXBlLmNvcHlSZWYoKSk7
CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAgICAgICAgICAgICB9
OworCisgICAgICAgICAgICAgICAgYXV0byBhc3NpZ25tZW50ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OkFzc2lnbm1lbnRFeHByZXNzaW9uPihiYXNlQ29kZUxvY2F0aW9uLCBtYWtlVmFyaWFibGVSZWZl
cmVuY2UoKSwgY3VycmVudC50YWtlQmFzZSgpKTsKKyAgICAgICAgICAgICAgICBhc3NpZ25tZW50
LT5zZXRUeXBlKGJhc2VUeXBlLmNvcHlSZWYoKSk7CisgICAgICAgICAgICAgICAgYXNzaWdubWVu
dC0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAgICAgICAgICAg
ICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGN1cnJlbnQuYmFzZVJlZmVyZW5jZSgpID0gbWFrZVZhcmlh
YmxlUmVmZXJlbmNlKCk7CisKKyAgICAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5hcHBlbmQoV1RG
TW92ZShjb3B5KSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBoYW5kbGVM
ZWZ0SGFuZFNpZGVCYXNlKGN1cnJlbnQudGFrZUJhc2UoKSwgY3VycmVudC5iYXNlUmVmZXJlbmNl
KCksIGV4cHJlc3Npb25zKTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNoYWluLnNp
emUoKTsgaS0tOyApIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBhY2Nlc3MgPSBjaGFpbltpXS5n
ZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KGFjY2Vz
cykgJiYgZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Npb24+KGFjY2VzcykuaW5kZXhFeHByZXNz
aW9uKCkubWF5QmVFZmZlY3RmdWwoKSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbmRl
eEV4cHJlc3Npb24gPSBkb3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4oYWNjZXNzKTsKKwor
ICAgICAgICAgICAgICAgICAgICBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gaW5kZXhUeXBlID0gaW5k
ZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpLnJlc29sdmVkVHlwZSgpOworCisgICAgICAg
ICAgICAgICAgICAgIFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IGluZGV4VmFy
aWFibGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oYWNjZXNzLmNv
ZGVMb2NhdGlvbigpLCBBU1Q6OlF1YWxpZmllcnMgeyB9LCBpbmRleFR5cGUucHRyKCksIFN0cmlu
ZygpLCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIG1ha2VW
YXJpYWJsZVJlZmVyZW5jZSA9IFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHZh
cmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKGluZGV4VmFyaWFibGUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKGluZGV4VHlwZS5jb3B5UmVm
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKKyAgICAg
ICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvIGFzc2lnbm1lbnQgPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVu
dEV4cHJlc3Npb24+KGJhc2VDb2RlTG9jYXRpb24sIG1ha2VWYXJpYWJsZVJlZmVyZW5jZSgpLCBp
bmRleEV4cHJlc3Npb24udGFrZUluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXNz
aWdubWVudC0+c2V0VHlwZShpbmRleFR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFzc2lnbm1lbnQtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNz
aWdubWVudCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
aW5kZXhFeHByZXNzaW9uLmluZGV4UmVmZXJlbmNlKCkgPSBtYWtlVmFyaWFibGVSZWZlcmVuY2Uo
KTsKKworICAgICAgICAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5hcHBlbmQoV1RGTW92ZShpbmRl
eFZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgaGFuZGxlUHJvcGVydHlB
Y2Nlc3MoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzKQorICAg
IHsKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9u
czsKKworICAgICAgICBoYW5kbGVQcm9wZXJ0eUFjY2Vzcyhwcm9wZXJ0eUFjY2VzcywgZXhwcmVz
c2lvbnMpOworCisgICAgICAgIFJlZjxBU1Q6OlVubmFtZWRUeXBlPiBhY2Nlc3NUeXBlID0gcHJv
cGVydHlBY2Nlc3MucmVzb2x2ZWRUeXBlKCk7CisKKyAgICAgICAgQVNUOjpDb21tYUV4cHJlc3Np
b24qIGNvbW1hOworICAgICAgICBDb2RlTG9jYXRpb24gY29kZUxvY2F0aW9uID0gcHJvcGVydHlB
Y2Nlc3MuY29kZUxvY2F0aW9uKCk7CisgICAgICAgIGlmIChpczxBU1Q6OkluZGV4RXhwcmVzc2lv
bj4ocHJvcGVydHlBY2Nlc3MpKSB7CisgICAgICAgICAgICBhdXRvJiBpbmRleEV4cHJlc3Npb24g
PSBkb3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3MpOworCisgICAg
ICAgICAgICBhdXRvIG5ld0luZGV4RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpJbmRl
eEV4cHJlc3Npb24+KGNvZGVMb2NhdGlvbiwgaW5kZXhFeHByZXNzaW9uLnRha2VCYXNlKCksIGlu
ZGV4RXhwcmVzc2lvbi50YWtlSW5kZXgoKSk7CisgICAgICAgICAgICBuZXdJbmRleEV4cHJlc3Np
b24tPnNldFR5cGUoaW5kZXhFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAg
IG5ld0luZGV4RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpUeXBlQW5ub3RhdGlv
bihpbmRleEV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKSkpOworCisgICAgICAgICAgICBleHBy
ZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShuZXdJbmRleEV4cHJlc3Npb24pKTsKKworICAgICAgICAg
ICAgY29tbWEgPSBBU1Q6OnJlcGxhY2VXaXRoPEFTVDo6Q29tbWFFeHByZXNzaW9uPihpbmRleEV4
cHJlc3Npb24sIGNvZGVMb2NhdGlvbiwgV1RGTW92ZShleHByZXNzaW9ucykpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXM8QVNUOjpEb3RFeHByZXNzaW9u
Pihwcm9wZXJ0eUFjY2VzcykpOworICAgICAgICAgICAgYXV0byYgZG90RXhwcmVzc2lvbiA9IGRv
d25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3MpOworCisgICAgICAgICAg
ICBhdXRvIG5ld0RvdEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lv
bj4oY29kZUxvY2F0aW9uLCBkb3RFeHByZXNzaW9uLnRha2VCYXNlKCksIFN0cmluZyhkb3RFeHBy
ZXNzaW9uLmZpZWxkTmFtZSgpKSk7CisgICAgICAgICAgICBuZXdEb3RFeHByZXNzaW9uLT5zZXRU
eXBlKGRvdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICAgICAgbmV3RG90RXhw
cmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpUeXBlQW5ub3RhdGlvbihkb3RFeHByZXNz
aW9uLnR5cGVBbm5vdGF0aW9uKCkpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5k
KFdURk1vdmUobmV3RG90RXhwcmVzc2lvbikpOworCisgICAgICAgICAgICBjb21tYSA9IEFTVDo6
cmVwbGFjZVdpdGg8QVNUOjpDb21tYUV4cHJlc3Npb24+KGRvdEV4cHJlc3Npb24sIGNvZGVMb2Nh
dGlvbiwgV1RGTW92ZShleHByZXNzaW9ucykpOworICAgICAgICB9CisKKyAgICAgICAgY29tbWEt
PnNldFR5cGUoV1RGTW92ZShhY2Nlc3NUeXBlKSk7CisgICAgICAgIGNvbW1hLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgfQorCitwdWJsaWM6CisgICAgdm9pZCB2
aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBoYW5kbGVQcm9wZXJ0eUFjY2Vzcyhkb3RFeHByZXNzaW9uKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pIG92ZXJy
aWRlCisgICAgeworICAgICAgICBoYW5kbGVQcm9wZXJ0eUFjY2VzcyhpbmRleEV4cHJlc3Npb24p
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
JiByZWFkTW9kaWZ5V3JpdGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQocmVhZE1vZGlmeVdyaXRlLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZS5yZXN1bHRFeHByZXNzaW9uKCkpOworCisg
ICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisK
KyAgICAgICAgQ29kZUxvY2F0aW9uIGNvZGVMb2NhdGlvbiA9IHJlYWRNb2RpZnlXcml0ZS5jb2Rl
TG9jYXRpb24oKTsKKworICAgICAgICBSZWY8QVNUOjpVbm5hbWVkVHlwZT4gdHlwZSA9IHJlYWRN
b2RpZnlXcml0ZS5yZXNvbHZlZFR5cGUoKTsKKworICAgICAgICBpZiAoaXM8QVNUOjpQcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24+KHJlYWRNb2RpZnlXcml0ZS5sZWZ0VmFsdWUoKSkpCisgICAgICAg
ICAgICBoYW5kbGVQcm9wZXJ0eUFjY2Vzcyhkb3duY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbj4ocmVhZE1vZGlmeVdyaXRlLmxlZnRWYWx1ZSgpKSwgZXhwcmVzc2lvbnMpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGVMZWZ0SGFuZFNpZGVCYXNlKHJlYWRNb2RpZnlX
cml0ZS50YWtlTGVmdFZhbHVlKCksIHJlYWRNb2RpZnlXcml0ZS5sZWZ0VmFsdWVSZWZlcmVuY2Uo
KSwgZXhwcmVzc2lvbnMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFVuaXF1ZVJlZjxBU1Q6
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+IG5ld1JlYWRNb2RpZnlXcml0ZSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPigKKyAgICAgICAgICAgICAgICBy
ZWFkTW9kaWZ5V3JpdGUuY29kZUxvY2F0aW9uKCksIHJlYWRNb2RpZnlXcml0ZS50YWtlTGVmdFZh
bHVlKCksIHJlYWRNb2RpZnlXcml0ZS50YWtlT2xkVmFsdWUoKSwgcmVhZE1vZGlmeVdyaXRlLnRh
a2VOZXdWYWx1ZSgpKTsKKyAgICAgICAgICAgIG5ld1JlYWRNb2RpZnlXcml0ZS0+c2V0TmV3VmFs
dWVFeHByZXNzaW9uKHJlYWRNb2RpZnlXcml0ZS50YWtlTmV3VmFsdWVFeHByZXNzaW9uKCkpOwor
ICAgICAgICAgICAgbmV3UmVhZE1vZGlmeVdyaXRlLT5zZXRSZXN1bHRFeHByZXNzaW9uKHJlYWRN
b2RpZnlXcml0ZS50YWtlUmVzdWx0RXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgIG5ld1JlYWRN
b2RpZnlXcml0ZS0+c2V0VHlwZSh0eXBlLmNvcHlSZWYoKSk7CisgICAgICAgICAgICBuZXdSZWFk
TW9kaWZ5V3JpdGUtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6VHlwZUFubm90YXRpb24ocmVhZE1v
ZGlmeVdyaXRlLnR5cGVBbm5vdGF0aW9uKCkpKTsKKworICAgICAgICAgICAgZXhwcmVzc2lvbnMu
YXBwZW5kKFdURk1vdmUobmV3UmVhZE1vZGlmeVdyaXRlKSk7CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvKiBjb21tYSA9IEFTVDo6cmVwbGFjZVdpdGg8QVNUOjpDb21tYUV4cHJlc3Npb24+KHJl
YWRNb2RpZnlXcml0ZSwgY29kZUxvY2F0aW9uLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSk7CisgICAg
ICAgIGNvbW1hLT5zZXRUeXBlKFdURk1vdmUodHlwZSkpOworICAgICAgICBjb21tYS0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQo
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFyaWFibGVzLmlzRW1wdHkoKSk7CisKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOworCisgICAgICAgIGlmICghbV92YXJpYWJsZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKS5zdGF0
ZW1lbnRzKCkuaW5zZXJ0KDAsIAorICAgICAgICAgICAgICAgIG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCku
Y29kZUxvY2F0aW9uKCksIFdURk1vdmUobV92YXJpYWJsZXMpKSk7CisgICAgICAgIH0KKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3ZhcmlhYmxlczsK
K307CisKK3ZvaWQgcmVzb2x2ZVByb3BlcnRpZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKLSAgICAv
LyBGSVhNRTogQnJpbmcgdGhpcyBwaGFzZSBiYWNrIHRvIGFsbG93IG1ldGFsIGNvZGVnZW4gc29t
ZSBjb252ZW5pZW5jZXMgCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMTI1MQorICAgIC8vIFRoZSBnb2FsIG9mIHRoaXMgcGhhc2UgaXMgdHdvIGFsbG93
IHR3byB0aGluZ3M6CisgICAgLy8gMS4gRm9yIHByb3BlcnR5IGFjY2VzcyBleHByZXNzaW9ucywg
bWV0YWwgY29kZWdlbiBzaG91bGQgYmUgYWxsb3dlZCB0byBldmFsdWF0ZQorICAgIC8vIHRoZSBi
YXNlLCBhbmQgaWYgaXQncyBhbiBpbmRleCBleHByZXNzaW9uLCB0aGUgaW5kZXgsIGFzIG1hbnkg
dGltZXMgYXMgbmVlZGVkLgorICAgIC8vIFNvIHRoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IGlmIE1l
dGFsIGV2YWx1YXRlcyBzdWNoIHRoaW5ncywgZWZmZWN0cyBhcmVuJ3QgcGVyZm9ybWVkCisgICAg
Ly8gbW9yZSB0aGFuIG9uY2UuCisgICAgLy8KKyAgICAvLyAyLiBGb3IgUmVhZE1vZGlmeVdyaXRl
IGV4cHJlc3Npb25zLCBtZXRhbCBjb2RlZ2VuIHNob3VsZCBiZSBhYmxlIHRvIGV2YWx1YXRlIHRo
ZQorICAgIC8vIGxlZnRWYWx1ZUV4cHJlc3Npb24gYXMgbWFueSB0aW1lcyBhcyBpdCdkIGxpa2Ug
d2l0aG91dCBwZXJmb3JtaW5nIHRoZSBlZmZlY3RzIG9mCisgICAgLy8gbGVmdFZhbHVlRXhwcmVz
c2lvbiBtb3JlIHRoYW4gb25jZS4KKyAgICAvLworICAgIC8vIFdlIGRvIHRoZXNlIHRoaW5ncyBi
ZWNhdXNlIGl0J3MgY29udmVuaWVudCBmb3IgbWV0YWwgY29kZWdlbiB0byBiZSBhYmxlIHRvIHJl
bHkgb24KKyAgICAvLyB0aGlzIHdpdGggdGhlIHdheSBpdCBzdHJ1Y3R1cmVzIHRoZSBnZW5lcmF0
ZWQgY29kZS4KKyAgICBQcm9wZXJ0eVJlc29sdmVyIHJlc29sdmVyOworICAgIGZvciAoYXV0byYg
ZnVuY3Rpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgcmVzb2x2
ZXIudmlzaXQoZnVuY3Rpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRXhwcmVzc2lvbi5jcHAJKHJldmlzaW9uIDI0OTUzNikKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjIsNiArMTYyLDQ4IEBAIHZvaWQgRXhwcmVzc2lvbjo6ZGVzdHJ1Y3QoRXhwcmVzc2lv
biYgZXgKICAgICB9CiB9CiAKK2Jvb2wgRXhwcmVzc2lvbjo6bWF5QmVFZmZlY3RmdWwoKSBjb25z
dAoreworICAgIGF1dG8mIGV4cHJlc3Npb24gPSBjb25zdF9jYXN0PEV4cHJlc3Npb24mPigqdGhp
cyk7CisKKyAgICBzd2l0Y2ggKGV4cHJlc3Npb24ua2luZCgpKSB7CisgICAgY2FzZSBFeHByZXNz
aW9uOjpLaW5kOjpCb29sZWFuTGl0ZXJhbDoKKyAgICBjYXNlIEV4cHJlc3Npb246OktpbmQ6OkZs
b2F0TGl0ZXJhbDoKKyAgICBjYXNlIEV4cHJlc3Npb246OktpbmQ6OkludGVnZXJMaXRlcmFsOgor
ICAgIGNhc2UgRXhwcmVzc2lvbjo6S2luZDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbDoKKyAgICBj
YXNlIEV4cHJlc3Npb246OktpbmQ6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbDoKKyAgICBjYXNl
IEV4cHJlc3Npb246OktpbmQ6Okdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlOgorICAgIGNhc2UgRXhw
cmVzc2lvbjo6S2luZDo6VmFyaWFibGVSZWZlcmVuY2U6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGNhc2UgRXhwcmVzc2lvbjo6S2luZDo6RGVyZWZlcmVuY2U6CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pLnBvaW50ZXIoKS5t
YXlCZUVmZmVjdGZ1bCgpOworCisgICAgY2FzZSBFeHByZXNzaW9uOjpLaW5kOjpMb2dpY2FsOgor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8TG9naWNhbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pLmxl
ZnQoKS5tYXlCZUVmZmVjdGZ1bCgpIHx8IGRvd25jYXN0PExvZ2ljYWxFeHByZXNzaW9uPihleHBy
ZXNzaW9uKS5yaWdodCgpLm1heUJlRWZmZWN0ZnVsKCk7CisKKyAgICBjYXNlIEV4cHJlc3Npb246
OktpbmQ6OkxvZ2ljYWxOb3Q6CisgICAgICAgIHJldHVybiBkb3duY2FzdDxMb2dpY2FsTm90RXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikub3BlcmFuZCgpLm1heUJlRWZmZWN0ZnVsKCk7CisKKyAgICBj
YXNlIEV4cHJlc3Npb246OktpbmQ6Ok1ha2VBcnJheVJlZmVyZW5jZToKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pLmxlZnRW
YWx1ZSgpLm1heUJlRWZmZWN0ZnVsKCk7CisKKyAgICBjYXNlIEV4cHJlc3Npb246OktpbmQ6Ok1h
a2VQb2ludGVyOgorICAgICAgICByZXR1cm4gZG93bmNhc3Q8TWFrZVBvaW50ZXJFeHByZXNzaW9u
PihleHByZXNzaW9uKS5sZWZ0VmFsdWUoKS5tYXlCZUVmZmVjdGZ1bCgpOworCisgICAgY2FzZSBF
eHByZXNzaW9uOjpLaW5kOjpEb3Q6CisgICAgICAgIHJldHVybiBkb3duY2FzdDxEb3RFeHByZXNz
aW9uPihleHByZXNzaW9uKS5iYXNlKCkubWF5QmVFZmZlY3RmdWwoKTsKKworICAgIGNhc2UgRXhw
cmVzc2lvbjo6S2luZDo6SW5kZXg6CisgICAgICAgIHJldHVybiBkb3duY2FzdDxJbmRleEV4cHJl
c3Npb24+KGV4cHJlc3Npb24pLmJhc2UoKS5tYXlCZUVmZmVjdGZ1bCgpIHx8IGRvd25jYXN0PElu
ZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikuaW5kZXhFeHByZXNzaW9uKCkubWF5QmVFZmZlY3Rm
dWwoKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBBU1QKIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJl
c3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0OTUzNikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDYgKzEyMCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG90aGVyLnNldFR5
cGUoKnJlc29sdmVkVHlwZSk7CiAgICAgfQogCisgICAgYm9vbCBtYXlCZUVmZmVjdGZ1bCgpIGNv
bnN0OworCiAgICAgS2luZCBraW5kKCkgY29uc3QgIHsgcmV0dXJuIG1fa2luZDsgfQogICAgIGJv
b2wgaXNBc3NpZ25tZW50RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5k
OjpBc3NpZ25tZW50OyB9CiAgICAgYm9vbCBpc0Jvb2xlYW5MaXRlcmFsKCkgY29uc3QgeyByZXR1
cm4ga2luZCgpID09IEtpbmQ6OkJvb2xlYW5MaXRlcmFsOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRl
eEV4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ5NTM2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIEluZGV4RXhwcmVzc2lvbihJbmRleEV4cHJl
c3Npb24mJikgPSBkZWZhdWx0OwogCiAgICAgRXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKCkg
eyByZXR1cm4gbV9pbmRleDsgfQorICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYgaW5kZXhSZWZl
cmVuY2UoKSB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IHRh
a2VJbmRleCgpIHsgcmV0dXJuIFdURk1vdmUobV9pbmRleCk7IH0KIAogcHJpdmF0ZToKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgJKHJldmlzaW9u
IDI0OTUzNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAs
MTQgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxlZnRWYWx1
ZSwgVW5pcXVlUmVmPFZhcmlhYmxlRGVjbGFyYXRpb24+IG9sZFZhbHVlLCBVbmlxdWVSZWY8VmFy
aWFibGVEZWNsYXJhdGlvbj4gbmV3VmFsdWUpCisgICAgICAgIDogRXhwcmVzc2lvbihsb2NhdGlv
biwgS2luZDo6UmVhZE1vZGlmeVdyaXRlKQorICAgICAgICAsIG1fbGVmdFZhbHVlKFdURk1vdmUo
bGVmdFZhbHVlKSkKKyAgICAgICAgLCBtX29sZFZhbHVlKFdURk1vdmUob2xkVmFsdWUpKQorICAg
ICAgICAsIG1fbmV3VmFsdWUoV1RGTW92ZShuZXdWYWx1ZSkpCisgICAgeworICAgIH0KKwogCiAg
ICAgflJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKSA9IGRlZmF1bHQ7CiAKQEAgLTg3LDYgKzk1
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEV4cHJlc3Npb24mIGxlZnRWYWx1ZSgpIHsgcmV0
dXJuIG1fbGVmdFZhbHVlOyB9CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiBsZWZ0VmFsdWVS
ZWZlcmVuY2UoKSB7IHJldHVybiBtX2xlZnRWYWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRp
b24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQogICAgIFZhcmlhYmxlRGVjbGFy
YXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9uZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24m
IG5ld1ZhbHVlRXhwcmVzc2lvbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVy
LmNwcAkocmV2aXNpb24gMjQ5NTM2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
OCw5ICs1NTgsNiBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAK
IHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lv
biYgaW5kZXhFeHByZXNzaW9uKQogewotICAgIC8vIEZJWE1FOiBNYWtlIGl0IHNvIHRoYXQgZXZh
bHVhdGluZyBpbmRleCBhbmQgYmFzZSB0d2ljZSBkb2Vzbid0IGV4ZWN1dGUgZWZmZWN0cyB0d2lj
ZToKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxMjUx
Ci0KICAgICBhdXRvJiB0eXBlID0gaW5kZXhFeHByZXNzaW9uLmJhc2UoKS5yZXNvbHZlZFR5cGUo
KS51bmlmeU5vZGUoKTsKICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHR5cGUp
KSB7CiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoJygnKTsKQEAgLTc2OSw4ICs3NjYs
NiBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgiLCAiLCBuZXdWYWx1ZVZhcmlhYmxlLCAiID0gIik7CiAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZS5uZXdWYWx1ZUV4cHJlc3Npb24oKSk7CiAK
LSAgICAvLyBGSVhNRTogTWFrZSBpdCBzbyB0aGF0IGV2YWx1YXRpbmcgbGVmdCB2YWx1ZSB0d2lj
ZSBkb2Vzbid0IGV4ZWN1dGUgZWZmZWN0cyB0d2ljZToKLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxMjUxCiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiLCAiKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlLmxlZnRWYWx1
ZSgpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIgPSAiLCBuZXdWYWx1ZVZhcmlhYmxl
LCAiLCAiKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTUzNikKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE5LTA5LTA2ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gQWRkIGJhY2sgYSB2
ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSByZXNvbHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxMjUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvcHJvcGVydHktZXZhbHVhdGlv
bi1vcmRlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9wcm9w
ZXJ0eS1ldmFsdWF0aW9uLW9yZGVyLmh0bWw6IEFkZGVkLgorCiAyMDE5LTA5LTA1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBHZW5lcmF0ZSBldmVudCByZWdp
b24gZm9yIGJvdGggdGhlIG1haW4gZ3JhcGhpY3MgbGF5ZXIgYW5kIHRoZSBzY3JvbGxlZCBjb250
ZW50cyBsYXllcgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Byb3BlcnR5LWV2YWx1
YXRpb24tb3JkZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9wcm9wZXJ0eS1ldmFsdWF0aW9uLW9yZGVyLWV4cGVjdGVkLnR4dAkobm9uZXhpc3Rl
bnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcHJvcGVydHktZXZhbHVhdGlvbi1vcmRl
ci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMSBAQAorCitQQVNTIGRv
bnRFdmFsdWF0ZVR3aWNlIAorUEFTUyBkb250RXZhbHVhdGVUd2ljZTIgCitQQVNTIGRvbnRFdmFs
dWF0ZVR3aWNlMyAKK1BBU1MgZG9udEV2YWx1YXRlVHdpY2U0IAorUEFTUyBkb250RXZhbHVhdGVU
d2ljZTUgCitQQVNTIGRvbnRFdmFsdWF0ZVR3aWNlNiAKK1BBU1MgZG9udEV2YWx1YXRlVHdpY2U3
IAorUEFTUyBkb250RXZhbHVhdGVUd2ljZTggCitQQVNTIGRvbnRFdmFsdWF0ZVR3aWNlOSAKKwpJ
bmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Byb3BlcnR5LWV2YWx1YXRpb24tb3JkZXIu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvcHJvcGVydHktZXZh
bHVhdGlvbi1vcmRlci5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9wcm9wZXJ0eS1ldmFsdWF0aW9uLW9yZGVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNDYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04
PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+ZXZhbHVhdGlv
biBvcmRlciBhbmQgdGltZXMuPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJqcy90ZXN0LWhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVz
dHMuZG9udEV2YWx1YXRlVHdpY2UgPSBhc3luYyAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3JhbSA9
IGAKKyAgICAgICAgdWludCBiYXIodGhyZWFkIHVpbnQqIHB0cikgeworICAgICAgICAgICAgdWlu
dCBvbGQgPSAqcHRyOworICAgICAgICAgICAgKnB0ciA9ICpwdHIgKyAxOworICAgICAgICAgICAg
cmV0dXJuIG9sZDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZm9vKCkgeworICAgICAgICAg
ICAgdWludCB4ID0gMDsKKyAgICAgICAgICAgIGludFs0Ml0gYXJyOworICAgICAgICAgICAgYXJy
WzBdID0gNDI7CisKKyAgICAgICAgICAgIGludCByZXN1bHQgPSBhcnJbYmFyKCZ4KV07CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0ID09IDQyICYmIHggPT0gMTsKKyAgICAgICAgfQorICAgIGA7
CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJm
b28iLCBbXSksIHRydWUpOworfTsKKword2hsc2xUZXN0cy5kb250RXZhbHVhdGVUd2ljZTIgPSBh
c3luYyAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAgICAgICAgdWludCBiYXIodGhy
ZWFkIHVpbnRbXSBhcnIsIHVpbnQgaW5kZXgsIHRocmVhZCB1aW50KiBwdHIpIHsKKyAgICAgICAg
ICAgIHVpbnQgb2xkID0gKnB0cjsKKyAgICAgICAgICAgIGFycltpbmRleF0gPSBvbGQ7CisgICAg
ICAgICAgICAqcHRyID0gKnB0ciArIDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgZm9vKCkgeworICAgICAgICAgICAgdWludCB4ID0gMTsKKworICAg
ICAgICAgICAgdWludFszXSBpbmRpY2VzOworCisgICAgICAgICAgICB1aW50WzRdWzRdWzRdIGFy
cjsKKworICAgICAgICAgICAgYXJyW2JhcihAaW5kaWNlcywgMCwgJngpXVtiYXIoQGluZGljZXMs
IDEsICZ4KV1bYmFyKEBpbmRpY2VzLCAyLCAmeCldID0gNDI7CisgICAgICAgICAgICByZXR1cm4g
YXJyWzBdWzBdWzBdID09IDQyCisgICAgICAgICAgICAgICAgJiYgaW5kaWNlc1swXSA9PSAxIAor
ICAgICAgICAgICAgICAgICYmIGluZGljZXNbMV0gPT0gMiAKKyAgICAgICAgICAgICAgICAmJiBp
bmRpY2VzWzJdID09IDMKKyAgICAgICAgICAgICAgICAmJiB4ID09IDQ7CisgICAgICAgIH0KKyAg
ICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0s
ICAiZm9vIiwgW10pLCB0cnVlKTsKK307CisKK3dobHNsVGVzdHMuZG9udEV2YWx1YXRlVHdpY2Uz
ID0gYXN5bmMgKCkgPT4geworICAgIGNvbnN0IHByb2dyYW0gPSBgCisgICAgICAgIHVpbnRbMl1b
Ml0gYmFzZSh0aHJlYWQgdWludFtdIGFyciwgdWludCBpbmRleCwgdGhyZWFkIHVpbnQqIHB0cikg
eworICAgICAgICAgICAgdWludCBvbGQgPSAqcHRyOworICAgICAgICAgICAgYXJyW2luZGV4XSA9
IG9sZDsKKyAgICAgICAgICAgICpwdHIgPSAqcHRyICsgMTsKKyAgICAgICAgICAgIHVpbnRbMl1b
Ml0gcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0WzBdWzBdID0gNDI7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgdWludCBiYXIodGhyZWFkIHVpbnRb
XSBhcnIsIHVpbnQgaW5kZXgsIHRocmVhZCB1aW50KiBwdHIpIHsKKyAgICAgICAgICAgIHVpbnQg
b2xkID0gKnB0cjsKKyAgICAgICAgICAgIGFycltpbmRleF0gPSBvbGQ7CisgICAgICAgICAgICAq
cHRyID0gKnB0ciArIDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgZm9vKCkgeworICAgICAgICAgICAgdWludCB4ID0gMTsKKworICAgICAgICAgICAg
dWludFszXSBpbmRpY2VzOworCisgICAgICAgICAgICB1aW50IHJlc3VsdCA9IGJhc2UoQGluZGlj
ZXMsIDAsICZ4KVtiYXIoQGluZGljZXMsIDEsICZ4KV1bYmFyKEBpbmRpY2VzLCAyLCAmeCldOwor
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09IDQyCisgICAgICAgICAgICAgICAgJiYgaW5k
aWNlc1swXSA9PSAxCisgICAgICAgICAgICAgICAgJiYgaW5kaWNlc1sxXSA9PSAyIAorICAgICAg
ICAgICAgICAgICYmIGluZGljZXNbMl0gPT0gMworICAgICAgICAgICAgICAgICYmIHggPT0gNDsK
KyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVu
Y3Rpb24ocHJvZ3JhbSwgICJmb28iLCBbXSksIHRydWUpOworfTsKKword2hsc2xUZXN0cy5kb250
RXZhbHVhdGVUd2ljZTQgPSBhc3luYyAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAg
ICAgICAgdWludCBiYXIodGhyZWFkIHVpbnQqIHB0cikgeworICAgICAgICAgICAgdWludCBvbGQg
PSAqcHRyOworICAgICAgICAgICAgKnB0ciA9ICpwdHIgKyAxOworICAgICAgICAgICAgcmV0dXJu
IG9sZDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZm9vKCkgeworICAgICAgICAgICAgdWlu
dFsyXSBhcnI7CisKKyAgICAgICAgICAgIHVpbnQgeCA9IDE7CisKKyAgICAgICAgICAgIGFyclti
YXIoJngpXSArPSA2NjY7CisKKyAgICAgICAgICAgIHJldHVybiBhcnJbMV0gPT0gNjY2ICYmIHgg
PT0gMjsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxC
b29sRnVuY3Rpb24ocHJvZ3JhbSwgICJmb28iLCBbXSksIHRydWUpOworfTsKKword2hsc2xUZXN0
cy5kb250RXZhbHVhdGVUd2ljZTUgPSBhc3luYyAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3JhbSA9
IGAKKyAgICAgICAgdGhyZWFkIHVpbnQqIGdldFB0cih0aHJlYWQgdWludCogcHRyKSB7CisgICAg
ICAgICAgICAqcHRyID0gKnB0ciArIDE7CisgICAgICAgICAgICByZXR1cm4gcHRyOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBmb28oKSB7CisgICAgICAgICAgICB1aW50IHggPSAxOworICAg
ICAgICAgICAgdWludCByZXN1bHQgPSAoKmdldFB0cigmeCkpKys7CisgICAgICAgICAgICByZXR1
cm4geCA9PSAzICYmIHJlc3VsdCA9PSAyOworICAgICAgICB9CisgICAgYDsKKworICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAgImZvbyIsIFtdKSwgdHJ1
ZSk7Cit9OworCit3aGxzbFRlc3RzLmRvbnRFdmFsdWF0ZVR3aWNlNiA9IGFzeW5jICgpID0+IHsK
KyAgICBjb25zdCBwcm9ncmFtID0gYAorICAgICAgICB0aHJlYWQgdWludCogZ2V0UHRyKHRocmVh
ZCB1aW50KiBwdHIpIHsKKyAgICAgICAgICAgICpwdHIgPSAqcHRyICsgMTsKKyAgICAgICAgICAg
IHJldHVybiBwdHI7CisgICAgICAgIH0KKworICAgICAgICBib29sIGZvbygpIHsKKyAgICAgICAg
ICAgIHVpbnQgeCA9IDE7CisgICAgICAgICAgICB1aW50IHJlc3VsdCA9ICsrKCpnZXRQdHIoJngp
KTsKKyAgICAgICAgICAgIHJldHVybiB4ID09IDMgJiYgcmVzdWx0ID09IDM7CisgICAgICAgIH0K
KyAgICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICAiZm9vIiwgW10pLCB0cnVlKTsKK307CisKK3dobHNsVGVzdHMuZG9udEV2YWx1YXRlVHdp
Y2U3ID0gYXN5bmMgKCkgPT4geworICAgIGNvbnN0IHByb2dyYW0gPSBgCisgICAgICAgIHRocmVh
ZCB1aW50W10gZ2V0QXJyKHRocmVhZCB1aW50W10gdmFsdWUsIHRocmVhZCB1aW50W10gaW5kaWNl
cywgdWludCBpbmRleCwgdGhyZWFkIHVpbnQqIHB0cikgeworICAgICAgICAgICAgaW5kaWNlc1tp
bmRleF0gPSAqcHRyOworICAgICAgICAgICAgKnB0ciA9ICpwdHIgKyAxOworICAgICAgICAgICAg
cmV0dXJuIHZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgdWludCBnZXRWYWx1ZSh1aW50IHJl
dCwgdGhyZWFkIHVpbnRbXSBpbmRpY2VzLCB1aW50IGluZGV4LCB0aHJlYWQgdWludCogcHRyKSB7
CisgICAgICAgICAgICBpbmRpY2VzW2luZGV4XSA9ICpwdHI7CisgICAgICAgICAgICAqcHRyID0g
KnB0ciArIDE7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBmb28oKSB7CisgICAgICAgICAgICB1aW50IHggPSAxOworICAgICAgICAgICAgdWludFsz
XSBhcnI7CisgICAgICAgICAgICB1aW50WzFdIHZhbHVlOworICAgICAgICAgICAgdmFsdWVbMF0g
PSAxOworCisgICAgICAgICAgICBnZXRBcnIoQHZhbHVlLCBAYXJyLCAwLCAmeClbZ2V0VmFsdWUo
MCwgQGFyciwgMSwgJngpXSArPSBnZXRWYWx1ZSg2NjUsIEBhcnIsIDIsICZ4KTsKKyAgICAgICAg
ICAgIHJldHVybiB4ID09IDQKKyAgICAgICAgICAgICAgICAmJiBhcnJbMF0gPT0gMQorICAgICAg
ICAgICAgICAgICYmIGFyclsxXSA9PSAyCisgICAgICAgICAgICAgICAgJiYgYXJyWzJdID09IDMK
KyAgICAgICAgICAgICAgICAmJiB2YWx1ZVswXSA9PSA2NjY7CisgICAgICAgIH0KKyAgICBgOwor
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICAiZm9v
IiwgW10pLCB0cnVlKTsKK307CisKK3dobHNsVGVzdHMuZG9udEV2YWx1YXRlVHdpY2U4ID0gYXN5
bmMgKCkgPT4geworICAgIGNvbnN0IHByb2dyYW0gPSBgCisgICAgICAgIHVpbnQgZ2V0VmFsdWUo
dWludCByZXQsIHRocmVhZCB1aW50W10gaW5kaWNlcywgdWludCBpbmRleCwgdGhyZWFkIHVpbnQq
IHB0cikgeworICAgICAgICAgICAgaW5kaWNlc1tpbmRleF0gPSAqcHRyOworICAgICAgICAgICAg
KnB0ciA9ICpwdHIgKyAxOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorCisg
ICAgICAgIHRocmVhZCB1aW50W10gZ2V0QXJyKHRocmVhZCB1aW50W10gdmFsdWUsIHRocmVhZCB1
aW50W10gaW5kaWNlcywgdWludCBpbmRleCwgdGhyZWFkIHVpbnQqIHB0cikgeworICAgICAgICAg
ICAgaW5kaWNlc1tpbmRleF0gPSAqcHRyOworICAgICAgICAgICAgKnB0ciA9ICpwdHIgKyAxOwor
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBmb28o
KSB7CisgICAgICAgICAgICB1aW50IHggPSAxOworICAgICAgICAgICAgdWludFszXSBhcnI7Cisg
ICAgICAgICAgICB1aW50WzFdIHZhbHVlOworICAgICAgICAgICAgdmFsdWVbMF0gPSAxOworCisg
ICAgICAgICAgICBnZXRBcnIoQHZhbHVlLCBAYXJyLCAwLCAmeClbYXJyW2dldFZhbHVlKDAsIEBh
cnIsIDEsICZ4KV1dICs9IGdldFZhbHVlKDY2NSwgQGFyciwgMiwgJngpOworCisgICAgICAgICAg
ICByZXR1cm4geCA9PSA0CisgICAgICAgICAgICAgICAgJiYgYXJyWzBdID09IDEKKyAgICAgICAg
ICAgICAgICAmJiBhcnJbMV0gPT0gMgorICAgICAgICAgICAgICAgICYmIGFyclsyXSA9PSAzCisg
ICAgICAgICAgICAgICAgJiYgdmFsdWVbMF0gPT0gNjY2OworICAgICAgICB9CisgICAgYDsKKwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAgImZvbyIs
IFtdKSwgdHJ1ZSk7Cit9OworCit3aGxzbFRlc3RzLmRvbnRFdmFsdWF0ZVR3aWNlOSA9IGFzeW5j
ICgpID0+IHsKKyAgICBjb25zdCBwcm9ncmFtID0gYAorICAgICAgICB0aHJlYWQgdWludFsxXSog
Z2V0VmFsdWUodGhyZWFkIHVpbnRbMV0qIGFyciwgdGhyZWFkIHVpbnRbXSBpbmRpY2VzLCB1aW50
IGluZGV4LCB0aHJlYWQgdWludCogcHRyKSB7CisgICAgICAgICAgICBpbmRpY2VzW2luZGV4XSA9
ICpwdHI7CisgICAgICAgICAgICAqcHRyID0gKnB0ciArIDE7CisgICAgICAgICAgICByZXR1cm4g
YXJyOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBmb28oKSB7CisgICAgICAgICAgICB1aW50
IHggPSAxOworICAgICAgICAgICAgdWludFsxXSBhcnI7CisgICAgICAgICAgICB1aW50WzFdIHZh
bHVlOworICAgICAgICAgICAgdmFsdWVbMF0gPSAxOworCisgICAgICAgICAgICAoKmdldFZhbHVl
KCZ2YWx1ZSwgQGFyciwgMCwgJngpKVswXSArPSA2NjU7CisKKyAgICAgICAgICAgIHJldHVybiB4
ID09IDIKKyAgICAgICAgICAgICAgICAmJiBhcnJbMF0gPT0gMQorICAgICAgICAgICAgICAgICYm
IHZhbHVlWzBdID09IDY2NjsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgICJmb28iLCBbXSksIHRydWUpOworfTsK
KworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="393896"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
          </attachment>
      

    </bug>

</bugzilla>