<?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>226677</bug_id>
          
          <creation_ts>2021-06-04 22:17:42 -0700</creation_ts>
          <short_desc>[JSC] Use ResolvedClosureVar to get brand from scope</short_desc>
          <delta_ts>2021-06-07 20:22:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1767106</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-04 22:17:42 -0700</bug_when>
    <thetext>[JSC] Use LocalClosureVar to get brand from scope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767107</commentid>
    <comment_count>1</comment_count>
      <attachid>430644</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-04 22:25:00 -0700</bug_when>
    <thetext>Created attachment 430644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767108</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-04 22:25:03 -0700</bug_when>
    <thetext>&lt;rdar://problem/78802869&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767139</commentid>
    <comment_count>3</comment_count>
      <attachid>430644</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-05 10:42:32 -0700</bug_when>
    <thetext>Comment on attachment 430644
Patch

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

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1869
&gt; +        // We need to ensure that @privateClassBrand and @privateBrand offsets are 1 and 0.

&quot;ensure that @privateClassBrand and @privateBrand offsets are 0 and 1 respectively.&quot;

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1870
&gt; +        // To ensure that, we first define them, and later, we filter out them from lexicalVariables.

/filter out them/filter them out/

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1881
&gt; +            VarOffset privateClassBrandOffset = VarOffset(symbolTable-&gt;takeNextScopeOffset(NoLockingNecessary));
&gt; +            ASSERT(privateClassBrandOffset.rawOffset() == PrivateNameEntry::privateClassBrandOffset);
&gt; +            symbolTable-&gt;add(NoLockingNecessary, propertyNames().builtinNames().privateClassBrandPrivateName().impl(), SymbolTableEntry { privateClassBrandOffset, static_cast&lt;unsigned&gt;(PropertyAttribute::ReadOnly) });
&gt; +
&gt; +            VarOffset privateBrandOffset = VarOffset(symbolTable-&gt;takeNextScopeOffset(NoLockingNecessary));
&gt; +            ASSERT(privateBrandOffset.rawOffset() == PrivateNameEntry::privateBrandOffset);
&gt; +            symbolTable-&gt;add(NoLockingNecessary, propertyNames().builtinNames().privateBrandPrivateName().impl(), SymbolTableEntry { privateBrandOffset, static_cast&lt;unsigned&gt;(PropertyAttribute::ReadOnly) });

Can we skip theses if lexicalVariables.privateNamesSize() is 0?

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1889
&gt; +                if (entry.key.get() == propertyNames().builtinNames().privateClassBrandPrivateName()) {

nit: entry.key is a PackedPtr.  Would it make sense to pre-compute `entryKey = entry.key.get()` once instead of unpacking it multiple times in this loop (including in pre-existing code below)?

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1896
&gt; +                if (entry.key.get() == propertyNames().builtinNames().privateClassBrandPrivateName()) {
&gt; +                    ASSERT(entry.value.isConst());
&gt; +                    continue;
&gt; +                }
&gt; +                if (entry.key.get() == propertyNames().builtinNames().privateBrandPrivateName()) {
&gt; +                    ASSERT(entry.value.isConst());
&gt; +                    continue;
&gt; +                }

Can we skip these checks if lexicalVariables.privateNamesSize() is 0?
Can we ASSERT that entry.key.get() is never privateClassBrandPrivateName or privateBrandPrivateName if lexicalVariables.privateNamesSize() is 0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767204</commentid>
    <comment_count>4</comment_count>
      <attachid>430644</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-06 00:18:43 -0700</bug_when>
    <thetext>Comment on attachment 430644
Patch

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

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1869
&gt;&gt; +        // We need to ensure that @privateClassBrand and @privateBrand offsets are 1 and 0.
&gt; 
&gt; &quot;ensure that @privateClassBrand and @privateBrand offsets are 0 and 1 respectively.&quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1870
&gt;&gt; +        // To ensure that, we first define them, and later, we filter out them from lexicalVariables.
&gt; 
&gt; /filter out them/filter them out/

Fixed.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1881
&gt;&gt; +            symbolTable-&gt;add(NoLockingNecessary, propertyNames().builtinNames().privateBrandPrivateName().impl(), SymbolTableEntry { privateBrandOffset, static_cast&lt;unsigned&gt;(PropertyAttribute::ReadOnly) });
&gt; 
&gt; Can we skip theses if lexicalVariables.privateNamesSize() is 0?

Oops, right. Fixed.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1889
&gt;&gt; +                if (entry.key.get() == propertyNames().builtinNames().privateClassBrandPrivateName()) {
&gt; 
&gt; nit: entry.key is a PackedPtr.  Would it make sense to pre-compute `entryKey = entry.key.get()` once instead of unpacking it multiple times in this loop (including in pre-existing code below)?

Fixed.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1896
&gt;&gt; +                }
&gt; 
&gt; Can we skip these checks if lexicalVariables.privateNamesSize() is 0?
&gt; Can we ASSERT that entry.key.get() is never privateClassBrandPrivateName or privateBrandPrivateName if lexicalVariables.privateNamesSize() is 0?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767205</commentid>
    <comment_count>5</comment_count>
      <attachid>430679</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-06 00:20:56 -0700</bug_when>
    <thetext>Created attachment 430679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767647</commentid>
    <comment_count>6</comment_count>
      <attachid>430679</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-06-07 19:46:05 -0700</bug_when>
    <thetext>Comment on attachment 430679
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        Private brand lookup is doing wrong way to get scope.

wording suggestion: &quot;Private brand&apos;s scope lookup is using the wrong scope:&quot;

&gt; Source/JavaScriptCore/ChangeLog:36
&gt; +        Only allowed case for the above usage is LocalClosureVar. And generatorification uses it too. In this patch,

I think this architecturally is fine. But &quot;LocalClosureVar&quot; now feels like the wrong name. Maybe let&apos;s switch it to &quot;ResolvedClosureVar&quot;, since that&apos;s semantically how we&apos;re using it now.

It might also not need a scope depth passed to it anymore?

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2836
&gt; +        localScopeDepth(),

do we even need this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767649</commentid>
    <comment_count>7</comment_count>
      <attachid>430679</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-07 20:10:12 -0700</bug_when>
    <thetext>Comment on attachment 430679
Patch

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

Thanks.

&gt;&gt; Source/JavaScriptCore/ChangeLog:9
&gt;&gt; +        Private brand lookup is doing wrong way to get scope.
&gt; 
&gt; wording suggestion: &quot;Private brand&apos;s scope lookup is using the wrong scope:&quot;

Changed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:36
&gt;&gt; +        Only allowed case for the above usage is LocalClosureVar. And generatorification uses it too. In this patch,
&gt; 
&gt; I think this architecturally is fine. But &quot;LocalClosureVar&quot; now feels like the wrong name. Maybe let&apos;s switch it to &quot;ResolvedClosureVar&quot;, since that&apos;s semantically how we&apos;re using it now.
&gt; 
&gt; It might also not need a scope depth passed to it anymore?

Sounds good. Changed to &quot;ResolvedClosureVar&quot;.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2836
&gt;&gt; +        localScopeDepth(),
&gt; 
&gt; do we even need this?

This is not necessary for this use case. Make it zero now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767655</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-07 20:22:37 -0700</bug_when>
    <thetext>Committed r278591 (238581@main): &lt;https://commits.webkit.org/238581@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430644</attachid>
            <date>2021-06-04 22:25:00 -0700</date>
            <delta_ts>2021-06-06 00:20:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226677-20210604222459.patch</filename>
            <type>text/plain</type>
            <size>36354</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NDgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NzI4ODkwZDUxNGI5MDU4MWFjMjM4Y2U5Mjc4YzA5ZGNhZjljMjM1Li5mYTEyMDYzNzMyMzhmYjdm
MmRkYzIwMGY3NjMxN2IxNjU2ZmE4ODQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMS0wNi0wNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFVzZSBMb2NhbENsb3N1cmVWYXIgdG8gZ2V0IGJyYW5kIGZyb20g
c2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NjY3NworICAgICAgICByZGFyOi8vNzg4MDI4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBQcml2YXRlIGJyYW5kIGxvb2t1cCBpcyBkb2luZyB3cm9u
ZyB3YXkgdG8gZ2V0IHNjb3BlLgorCisgICAgICAgICAgICAxLiBvcF9yZXNvbHZlX3Njb3BlIHdp
dGggcHJpdmF0ZSBuYW1lIChlLmcuICN4KQorICAgICAgICAgICAgMi4gdGhlbiwgZG9pbmcgb3Bf
Z2V0X2Zyb21fc2NvcGUgd2l0aCAoMSkncyBzY29wZSB3aXRoIGRpZmZlcmVudCBuYW1lIChlLmcu
IEBwcml2YXRlQnJhbmQpCisKKyAgICAgICAgVGhpcyBpcyB3cm9uZyBpbiBKU0MuIFdlIHJlc29s
dmUgc2NvcGUgYXQgbGluay10aW1lIGluIENvZGVCbG9jay4gU28gd2UgbmVlZCB0byBlbnN1cmUg
dGhhdCBib3RoIG9wX3Jlc29sdmVfc2NvcGUgYW5kIG9wX2dldF9mcm9tX3Njb3BlCisgICAgICAg
IHN0YXJ0cyB3aXRoIHRoZSBjdXJyZW50IHNjb3BlLXJlZ2lzdGVyLiBBcyBhIHJlc3VsdCwgcHJp
dmF0ZS1icmFuZCBsb29rdXAgaXMgYnJva2VuIHJpZ2h0IG5vdy4gTGV0J3Mgc2VlIHRoZSBidWdn
eSBjYXNlLgorCisgICAgICAgICAgICBjbGFzcyBEIHsKKyAgICAgICAgICAgICAgI3goKSB7fQor
ICAgICAgICAgICAgICBtKCkgeworICAgICAgICAgICAgICAgIGNsYXNzIEMgeworICAgICAgICAg
ICAgICAgICAgI3l5OworICAgICAgICAgICAgICAgICAgI3ooKSB7IH0KKyAgICAgICAgICAgICAg
ICAgIGEoKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuI3goKTsgLy8gPD09PT09IFRoaXMg
cG9pbnQuCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGxldCBjID0gbmV3IEMoKTsKKyAgICAgICAgICAgICAgICBjLmEoKTsKKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIEluIHRoZSBhYm92ZSBwb2ludCwgd2Ug
Zmlyc3QgbG9va3VwIHRoZSBzY29wZSB3aXRoICN4LCBhbmQgd2UgZ2V0IHRoZSBEJ3MgY2xhc3Mt
c2NvcGUuIEJ1dCBvdXIgZ2V0X2Zyb21fc2NvcGUgaXMgdXNpbmcgcHJpdmF0ZUJyYW5kLCBhbmQK
KyAgICAgICAgcHJpdmF0ZUJyYW5kIHByb3BlcnR5IGV4aXN0cyB0b28gaW4gQydzIGNsYXNzLXNj
b3BlIHRvbyBzaW5jZSBDIGFsc28gaGFzICN5eSBhbmQgI3ouIEFzIGEgcmVzdWx0LCBDb2RlQmxv
Y2sgbGlua2luZyBjb25maWd1cmVzIHRoZSBvZmZzZXQgZm9yCisgICAgICAgIEMncyBjbGFzcy1z
Y29wZSBpbiBnZXRfZnJvbV9zY29wZS4gQW5kIHRoaXMgb2Zmc2V0IGlzIGRpZmZlcmVudCBmcm9t
IEQncyBjbGFzcy1zY29wZSdzIHByaXZhdGVCcmFuZC4KKworICAgICAgICBPbmx5IGFsbG93ZWQg
Y2FzZSBmb3IgdGhlIGFib3ZlIHVzYWdlIGlzIExvY2FsQ2xvc3VyZVZhci4gQW5kIGdlbmVyYXRv
cmlmaWNhdGlvbiB1c2VzIGl0IHRvby4gSW4gdGhpcyBwYXRjaCwKKworICAgICAgICAxLiBXZSBl
bnN1cmUgdGhhdCBjbGFzcy1zY29wZSAod2l0aCBwcml2YXRlIG5hbWUpIG11c3QgaGF2ZSBAcHJp
dmF0ZUJyYW5kIGFuZCBAcHJpdmF0ZUNsYXNzQnJhbmQgd2l0aCBvZmZzZXQgMSBhbmQgMC4KKyAg
ICAgICAgMi4gVXNlIExvY2FsQ2xvc3VyZVZhciB3aXRoIHRoZSBhYm92ZSBwcmUtZGVmaW5lZCBv
ZmZzZXQKKworICAgICAgICBTaW5jZSBDb2RlQmxvY2sncyBsaW5raW5nIGRvZXMgbm90IHJlc29s
dmUgdGhlIHNjb3BlIGZvciBnZXRfZnJvbV9zY29wZSBpZiBpdCBpcyBMb2NhbENsb3N1cmVWYXIs
IHdlIGNhbiBqdXN0IHBlcmZvcm0gdGhlIGRlc2lyZWQgTG9jYWxDbG9zdXJlVmFyIGxvb2t1cAor
ICAgICAgICB3aXRoIHRoZSBnaXZlbiBzY29wZSB3aXRoIHRoZSBjb21waWxlZCBvZmZzZXQuCisK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6aW5zdGFudGlhdGVMZXhpY2FsVmFyaWFibGVzKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hMZXhpY2FsU2NvcGUpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaExleGljYWxTY29wZUludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDcmVhdGVQcml2YXRlQnJhbmQpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFByaXZhdGVCcmFuZCk6CisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkJhc2VEb3ROb2RlOjplbWl0
R2V0UHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChKU0M6OkJhc2VEb3ROb2RlOjplbWl0UHV0UHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpQb3N0Zml4Tm9kZTo6ZW1pdERvdCk6CisgICAgICAgIChK
U0M6OlByZWZpeE5vZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpJbk5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkJsb2NrTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6Rm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JPZk5vZGU6OmVtaXRCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OlN3aXRjaE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNs
YXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKToKKyAgICAgICAg
KiBwYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oOgorCiAyMDIxLTA2LTA0ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3QgZW1pdCB0aGUgTm90RG91Ymxl
IGNoZWNrcyBpZiB3ZSdyZSBhbHJlYWR5IE5vdERvdWJsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXgg
MDNmOWZmMjc3OWNmYTdkMmExY2FkZDY1MWE2MGExODY3MDdkYWRiYS4uMWIzODQwN2U0YzdhMWMz
N2FkYWI2Zjc5YmQ2OTUwYmYxOTg4OWYwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTg0MSw3ICs4
NDEsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBGdW5j
dGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogICAgIH0KIAogICAgIGJvb2wgc2hvdWxk
SW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rpb25zID0gZmFsc2U7IC8vIFdlIGdlbmVyYXRlIHRv
cC1sZXZlbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW4gOjpnZW5lcmF0ZSgpLgotICAgIHB1c2hM
ZXhpY2FsU2NvcGUobV9zY29wZU5vZGUsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwg
TmVzdGVkU2NvcGVUeXBlOjpJc05vdE5lc3RlZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlhbGl6ZUJs
b2NrU2NvcGVkRnVuY3Rpb25zKTsKKyAgICBwdXNoTGV4aWNhbFNjb3BlKG1fc2NvcGVOb2RlLCBT
Y29wZVR5cGU6OkxldENvbnN0U2NvcGUsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwg
TmVzdGVkU2NvcGVUeXBlOjpJc05vdE5lc3RlZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlhbGl6ZUJs
b2NrU2NvcGVkRnVuY3Rpb25zKTsKIH0KIAogQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKFZNJiB2bSwgRXZhbE5vZGUqIGV2YWxOb2RlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sq
IGNvZGVCbG9jaywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25N
b2RlLCBjb25zdCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiYgcGFyZW50U2NvcGVURFpWYXJp
YWJsZXMsIGNvbnN0IFByaXZhdGVOYW1lRW52aXJvbm1lbnQqIHBhcmVudFByaXZhdGVOYW1lRW52
aXJvbm1lbnQsIEVDTUFNb2RlIGVjbWFNb2RlKQpAQCAtOTA2LDcgKzkwNiw3IEBAIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEV2YWxOb2RlKiBldmFsTm9kZSwg
VW5saW5rZWRFdmFsQ29kCiAgICAgfQogICAgIAogICAgIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZUJs
b2NrU2NvcGVkRnVuY3Rpb25zID0gZmFsc2U7IC8vIFdlIGdlbmVyYXRlIHRvcC1sZXZlbCBmdW5j
dGlvbiBkZWNsYXJhdGlvbnMgaW4gOjpnZW5lcmF0ZSgpLgotICAgIHB1c2hMZXhpY2FsU2NvcGUo
bV9zY29wZU5vZGUsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgTmVzdGVkU2NvcGVU
eXBlOjpJc05vdE5lc3RlZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVu
Y3Rpb25zKTsKKyAgICBwdXNoTGV4aWNhbFNjb3BlKG1fc2NvcGVOb2RlLCBTY29wZVR5cGU6Okxl
dENvbnN0U2NvcGUsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgTmVzdGVkU2NvcGVU
eXBlOjpJc05vdE5lc3RlZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVu
Y3Rpb25zKTsKIH0KIAogQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2
bSwgTW9kdWxlUHJvZ3JhbU5vZGUqIG1vZHVsZVByb2dyYW1Ob2RlLCBVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4g
Y29kZUdlbmVyYXRpb25Nb2RlLCBjb25zdCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiYgcGFy
ZW50U2NvcGVURFpWYXJpYWJsZXMsIGNvbnN0IFByaXZhdGVOYW1lRW52aXJvbm1lbnQqLCBFQ01B
TW9kZSBlY21hTW9kZSkKQEAgLTk4OCw3ICs5ODgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBNb2R1bGVQcm9ncmFtTm9kZSogbW9kdWxlUHJvZ3JhbU5v
ZAogICAgIH0KIAogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMgPSBt
b2R1bGVQcm9ncmFtTm9kZS0+bGV4aWNhbFZhcmlhYmxlcygpOwotICAgIGluc3RhbnRpYXRlTGV4
aWNhbFZhcmlhYmxlcyhsZXhpY2FsVmFyaWFibGVzLCBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRh
YmxlLCBTY29wZVJlZ2lzdGVyVHlwZTo6QmxvY2ssIGxvb2tVcFZhcktpbmQpOworICAgIGluc3Rh
bnRpYXRlTGV4aWNhbFZhcmlhYmxlcyhsZXhpY2FsVmFyaWFibGVzLCBTY29wZVR5cGU6OkxldENv
bnN0U2NvcGUsIG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUsIFNjb3BlUmVnaXN0ZXJUeXBl
OjpCbG9jaywgbG9va1VwVmFyS2luZCk7CiAKICAgICAvLyBXZSBrZWVwIHRoZSBzeW1ib2wgdGFi
bGUgaW4gdGhlIGNvbnN0YW50IHBvb2wuCiAgICAgUmVnaXN0ZXJJRCogY29uc3RhbnRTeW1ib2xU
YWJsZSA9IG51bGxwdHI7CkBAIC0xODYyLDE1ICsxODYyLDQ0IEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIElkZW50aWZpZXJTZXQmJiBz
ZXQpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExvb2tVcFZhcktpbmRGdW5jdG9yPgotYm9vbCBC
eXRlY29kZUdlbmVyYXRvcjo6aW5zdGFudGlhdGVMZXhpY2FsVmFyaWFibGVzKGNvbnN0IFZhcmlh
YmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSwgU2NvcGVSZWdpc3RlclR5cGUgc2NvcGVSZWdpc3RlclR5cGUsIExvb2tVcFZhcktpbmRGdW5j
dG9yIGxvb2tVcFZhcktpbmQpCitib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjppbnN0YW50aWF0ZUxl
eGljYWxWYXJpYWJsZXMoY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxl
cywgU2NvcGVUeXBlIHNjb3BlVHlwZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBTY29wZVJl
Z2lzdGVyVHlwZSBzY29wZVJlZ2lzdGVyVHlwZSwgTG9va1VwVmFyS2luZEZ1bmN0b3IgbG9va1Vw
VmFyS2luZCkKIHsKICAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzID0gZmFsc2U7CiAgICAg
eworICAgICAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IEBwcml2YXRlQ2xhc3NCcmFuZCBh
bmQgQHByaXZhdGVCcmFuZCBvZmZzZXRzIGFyZSAxIGFuZCAwLgorICAgICAgICAvLyBUbyBlbnN1
cmUgdGhhdCwgd2UgZmlyc3QgZGVmaW5lIHRoZW0sIGFuZCBsYXRlciwgd2UgZmlsdGVyIG91dCB0
aGVtIGZyb20gbGV4aWNhbFZhcmlhYmxlcy4KKyAgICAgICAgaWYgKHNjb3BlVHlwZSA9PSBTY29w
ZVR5cGU6OkNsYXNzU2NvcGUpIHsKKyAgICAgICAgICAgIGlmIChsZXhpY2FsVmFyaWFibGVzLnBy
aXZhdGVOYW1lc1NpemUoKSkKKyAgICAgICAgICAgICAgICBoYXNDYXB0dXJlZFZhcmlhYmxlcyA9
IHRydWU7CisKKyAgICAgICAgICAgIFZhck9mZnNldCBwcml2YXRlQ2xhc3NCcmFuZE9mZnNldCA9
IFZhck9mZnNldChzeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xvY2tpbmdOZWNl
c3NhcnkpKTsKKyAgICAgICAgICAgIEFTU0VSVChwcml2YXRlQ2xhc3NCcmFuZE9mZnNldC5yYXdP
ZmZzZXQoKSA9PSBQcml2YXRlTmFtZUVudHJ5Ojpwcml2YXRlQ2xhc3NCcmFuZE9mZnNldCk7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS0+YWRkKE5vTG9ja2luZ05lY2Vzc2FyeSwgcHJvcGVydHlO
YW1lcygpLmJ1aWx0aW5OYW1lcygpLnByaXZhdGVDbGFzc0JyYW5kUHJpdmF0ZU5hbWUoKS5pbXBs
KCksIFN5bWJvbFRhYmxlRW50cnkgeyBwcml2YXRlQ2xhc3NCcmFuZE9mZnNldCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkgfSk7CisKKyAgICAgICAg
ICAgIFZhck9mZnNldCBwcml2YXRlQnJhbmRPZmZzZXQgPSBWYXJPZmZzZXQoc3ltYm9sVGFibGUt
PnRha2VOZXh0U2NvcGVPZmZzZXQoTm9Mb2NraW5nTmVjZXNzYXJ5KSk7CisgICAgICAgICAgICBB
U1NFUlQocHJpdmF0ZUJyYW5kT2Zmc2V0LnJhd09mZnNldCgpID09IFByaXZhdGVOYW1lRW50cnk6
OnByaXZhdGVCcmFuZE9mZnNldCk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS0+YWRkKE5vTG9j
a2luZ05lY2Vzc2FyeSwgcHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLnByaXZhdGVCcmFu
ZFByaXZhdGVOYW1lKCkuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5IHsgcHJpdmF0ZUJyYW5kT2Zm
c2V0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSB9
KTsKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBsZXhpY2FsVmFyaWFi
bGVzKSB7CiAgICAgICAgICAgICBBU1NFUlQoZW50cnkudmFsdWUuaXNMZXQoKSB8fCBlbnRyeS52
YWx1ZS5pc0NvbnN0KCkgfHwgZW50cnkudmFsdWUuaXNGdW5jdGlvbigpKTsKICAgICAgICAgICAg
IEFTU0VSVCghZW50cnkudmFsdWUuaXNWYXIoKSk7CisKKyAgICAgICAgICAgIGlmIChzY29wZVR5
cGUgPT0gU2NvcGVUeXBlOjpDbGFzc1Njb3BlKSB7CisgICAgICAgICAgICAgICAgaWYgKGVudHJ5
LmtleS5nZXQoKSA9PSBwcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkucHJpdmF0ZUNsYXNz
QnJhbmRQcml2YXRlTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChlbnRyeS52
YWx1ZS5pc0NvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmtleS5nZXQoKSA9PSBwcm9wZXJ0
eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkucHJpdmF0ZUJyYW5kUHJpdmF0ZU5hbWUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoZW50cnkudmFsdWUuaXNDb25zdCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgc3ltYm9s
VGFibGVFbnRyeSA9IHN5bWJvbFRhYmxlLT5nZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBlbnRyeS5r
ZXkuZ2V0KCkpOwogICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlRW50cnkuaXNOdWxsKCkp
OworI2VuZGlmCiAKICAgICAgICAgICAgIC8vIEltcG9ydGVkIGJpbmRpbmdzIHdoaWNoIGFyZSBu
b3QgdGhlIG5hbWVzcGFjZSBiaW5kaW5ncyBhcmUgbm90IGFsbG9jYXRlZAogICAgICAgICAgICAg
Ly8gaW4gdGhlIG1vZHVsZSBlbnZpcm9ubWVudCBhcyB1c3VhbCB2YXJpYWJsZXMnIHdheS4KQEAg
LTE5NDIsMTEgKzE5NzEsMTEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFByZWZpbGxT
dGFja1REWlZhcmlhYmxlcyhjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JgogICAgIH0KIH0KIAot
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaExleGljYWxTY29wZShWYXJpYWJsZUVudmlyb25t
ZW50Tm9kZSogbm9kZSwgVERaQ2hlY2tPcHRpbWl6YXRpb24gdGR6Q2hlY2tPcHRpbWl6YXRpb24s
IE5lc3RlZFNjb3BlVHlwZSBuZXN0ZWRTY29wZVR5cGUsIFJlZ2lzdGVySUQqKiBjb25zdGFudFN5
bWJvbFRhYmxlUmVzdWx0LCBib29sIHNob3VsZEluaXRpYWxpemVCbG9ja1Njb3BlZEZ1bmN0aW9u
cykKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hMZXhpY2FsU2NvcGUoVmFyaWFibGVFbnZp
cm9ubWVudE5vZGUqIG5vZGUsIFNjb3BlVHlwZSBzY29wZVR5cGUsIFREWkNoZWNrT3B0aW1pemF0
aW9uIHRkekNoZWNrT3B0aW1pemF0aW9uLCBOZXN0ZWRTY29wZVR5cGUgbmVzdGVkU2NvcGVUeXBl
LCBSZWdpc3RlcklEKiogY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdCwgYm9vbCBzaG91bGRJbml0
aWFsaXplQmxvY2tTY29wZWRGdW5jdGlvbnMpCiB7CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCYg
ZW52aXJvbm1lbnQgPSBub2RlLT5sZXhpY2FsVmFyaWFibGVzKCk7CiAgICAgUmVnaXN0ZXJJRCog
Y29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdFRlbXAgPSBudWxscHRyOwotICAgIHB1c2hMZXhpY2Fs
U2NvcGVJbnRlcm5hbChlbnZpcm9ubWVudCwgdGR6Q2hlY2tPcHRpbWl6YXRpb24sIG5lc3RlZFNj
b3BlVHlwZSwgJmNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHRUZW1wLCBURFpSZXF1aXJlbWVudDo6
VW5kZXJURFosIFNjb3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgU2NvcGVSZWdpc3RlclR5cGU6OkJs
b2NrKTsKKyAgICBwdXNoTGV4aWNhbFNjb3BlSW50ZXJuYWwoZW52aXJvbm1lbnQsIHRkekNoZWNr
T3B0aW1pemF0aW9uLCBuZXN0ZWRTY29wZVR5cGUsICZjb25zdGFudFN5bWJvbFRhYmxlUmVzdWx0
VGVtcCwgVERaUmVxdWlyZW1lbnQ6OlVuZGVyVERaLCBzY29wZVR5cGUsIFNjb3BlUmVnaXN0ZXJU
eXBlOjpCbG9jayk7CiAKICAgICBpZiAoc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rp
b25zKQogICAgICAgICBpbml0aWFsaXplQmxvY2tTY29wZWRGdW5jdGlvbnMoZW52aXJvbm1lbnQs
IG5vZGUtPmZ1bmN0aW9uU3RhY2soKSwgY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdFRlbXApOwpA
QCAtMTk3MCw2ICsxOTk5LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaExleGljYWxT
Y29wZUludGVybmFsKFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW4KICAgICAgICAgc3lt
Ym9sVGFibGUtPnNldFNjb3BlVHlwZShTeW1ib2xUYWJsZTo6U2NvcGVUeXBlOjpDYXRjaFNjb3Bl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTY29wZVR5cGU6OkxldENvbnN0U2NvcGU6Cisg
ICAgY2FzZSBTY29wZVR5cGU6OkNsYXNzU2NvcGU6CiAgICAgICAgIHN5bWJvbFRhYmxlLT5zZXRT
Y29wZVR5cGUoU3ltYm9sVGFibGU6OlNjb3BlVHlwZTo6TGV4aWNhbFNjb3BlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTY29wZVR5cGU6OkZ1bmN0aW9uTmFtZVNjb3BlOgpAQCAtMTk4NCw3
ICsyMDE0LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaExleGljYWxTY29wZUludGVy
bmFsKFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW4KICAgICAgICAgcmV0dXJuIGVudHJ5
LmlzQ2FwdHVyZWQoKSA/IFZhcktpbmQ6OlNjb3BlIDogVmFyS2luZDo6U3RhY2s7CiAgICAgfTsK
IAotICAgIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBpbnN0YW50aWF0ZUxleGljYWxWYXJp
YWJsZXMoZW52aXJvbm1lbnQsIHN5bWJvbFRhYmxlLCBzY29wZVJlZ2lzdGVyVHlwZSwgbG9va1Vw
VmFyS2luZCk7CisgICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGluc3RhbnRpYXRlTGV4
aWNhbFZhcmlhYmxlcyhlbnZpcm9ubWVudCwgc2NvcGVUeXBlLCBzeW1ib2xUYWJsZSwgc2NvcGVS
ZWdpc3RlclR5cGUsIGxvb2tVcFZhcktpbmQpOwogCiAgICAgUmVnaXN0ZXJJRCogbmV3U2NvcGUg
PSBudWxscHRyOwogICAgIFJlZ2lzdGVySUQqIGNvbnN0YW50U3ltYm9sVGFibGUgPSBudWxscHRy
OwpAQCAtMjc1OSw3ICsyNzg5LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXREZWZpbmVQcml2YXRlRmllbGQoUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXIKICAgICByZXR1
cm4gdmFsdWU7CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDcmVhdGVQcml2YXRl
QnJhbmQoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dEVuZCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDcmVhdGVQcml2YXRlQnJhbmQoY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFy
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQogewogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBjcmVhdGVQcml2YXRlU3ltYm9sID0gbW92ZUxpbmtUaW1lQ29uc3RhbnQobnVsbHB0ciwg
TGlua1RpbWVDb25zdGFudDo6Y3JlYXRlUHJpdmF0ZVN5bWJvbCk7CiAKQEAgLTI3NjksNyArMjc5
OSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDcmVhdGVQcml2YXRlQnJhbmQoUmVn
aXN0ZXJJRCogc2NvcGUsIGNvbnN0IEpTVGV4dFBvCiAKICAgICBWYXJpYWJsZSBwcml2YXRlQnJh
bmRWYXIgPSB2YXJpYWJsZShwcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkucHJpdmF0ZUJy
YW5kUHJpdmF0ZU5hbWUoKSk7CiAKLSAgICBlbWl0UHV0VG9TY29wZShzY29wZSwgcHJpdmF0ZUJy
YW5kVmFyLCBuZXdTeW1ib2wsIERvTm90VGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbk1v
ZGU6OkNvbnN0SW5pdGlhbGl6YXRpb24pOworICAgIGVtaXRQdXRUb1Njb3BlKHNjb3BlUmVnaXN0
ZXIoKSwgcHJpdmF0ZUJyYW5kVmFyLCBuZXdTeW1ib2wsIERvTm90VGhyb3dJZk5vdEZvdW5kLCBJ
bml0aWFsaXphdGlvbk1vZGU6OkNvbnN0SW5pdGlhbGl6YXRpb24pOwogfQogCiB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0SW5zdGFsbFByaXZhdGVCcmFuZChSZWdpc3RlcklEKiB0YXJnZXQp
CkBAIC0yNzg5LDEwICsyODE5LDE2IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbnN0
YWxsUHJpdmF0ZUNsYXNzQnJhbmQoUmVnaXN0ZXJJRCogdGFyZ2V0KQogCiBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFByaXZhdGVCcmFuZChSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNjb3BlLCBib29sIGlzU3RhdGljKQogewotICAgIFZhcmlhYmxlIHByaXZhdGVC
cmFuZFZhciA9IGlzU3RhdGljCi0gICAgICAgID8gdmFyaWFibGUocHJvcGVydHlOYW1lcygpLmJ1
aWx0aW5OYW1lcygpLnByaXZhdGVDbGFzc0JyYW5kUHJpdmF0ZU5hbWUoKSkKLSAgICAgICAgOiB2
YXJpYWJsZShwcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkucHJpdmF0ZUJyYW5kUHJpdmF0
ZU5hbWUoKSk7Ci0gICAgcmV0dXJuIGVtaXRHZXRGcm9tU2NvcGUoZHN0LCBzY29wZSwgcHJpdmF0
ZUJyYW5kVmFyLCBUaHJvd0lmTm90Rm91bmQpOworICAgIEFTU0VSVChzY29wZSk7CisgICAgT3BH
ZXRGcm9tU2NvcGU6OmVtaXQoCisgICAgICAgIHRoaXMsCisgICAgICAgIGtpbGwoZHN0KSwKKyAg
ICAgICAgc2NvcGUsCisgICAgICAgIGFkZENvbnN0YW50KGlzU3RhdGljID8gcHJvcGVydHlOYW1l
cygpLmJ1aWx0aW5OYW1lcygpLnByaXZhdGVDbGFzc0JyYW5kUHJpdmF0ZU5hbWUoKSA6IHByb3Bl
cnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5wcml2YXRlQnJhbmRQcml2YXRlTmFtZSgpKSwKKyAg
ICAgICAgR2V0UHV0SW5mbyhUaHJvd0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZhciwgSW5pdGlh
bGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbiwgZWNtYU1vZGUoKSksCisgICAgICAgIGxv
Y2FsU2NvcGVEZXB0aCgpLAorICAgICAgICBpc1N0YXRpYyA/IFByaXZhdGVOYW1lRW50cnk6OnBy
aXZhdGVDbGFzc0JyYW5kT2Zmc2V0IDogUHJpdmF0ZU5hbWVFbnRyeTo6cHJpdmF0ZUJyYW5kT2Zm
c2V0KTsKKyAgICByZXR1cm4gZHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFByaXZhdGVGaWVsZFB1dChSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9w
ZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggNWE3Yzc2NmQ1MTEzZTAy
NTQyY2Q3ZmMzOTY1ODdmMTU4NGFmMzY5ZC4uMTI5Y2VjZmRkMDhmNzhmZWUyZjVhODlmNTc3YjM5
NDlkMTEwYWQwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtODQxLDcgKzg0MSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJpdmF0ZU5hbWUoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSk7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRIYXNQcml2YXRlTmFtZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKIAotICAgICAgICB2b2lkIGVtaXRDcmVhdGVQ
cml2YXRlQnJhbmQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RFbmQpOworICAgICAgICB2b2lkIGVtaXRDcmVhdGVQcml2YXRlQnJhbmQoY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKICAgICAgICAgdm9pZCBlbWl0SW5zdGFsbFBy
aXZhdGVCcmFuZChSZWdpc3RlcklEKiB0YXJnZXQpOwogICAgICAgICB2b2lkIGVtaXRJbnN0YWxs
UHJpdmF0ZUNsYXNzQnJhbmQoUmVnaXN0ZXJJRCogdGFyZ2V0KTsKIApAQCAtMTA5OCwxNSArMTA5
OCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBlbnVtIGNsYXNzIFREWkNoZWNrT3B0
aW1pemF0aW9uIHsgT3B0aW1pemUsIERvTm90T3B0aW1pemUgfTsKICAgICAgICAgZW51bSBjbGFz
cyBOZXN0ZWRTY29wZVR5cGUgeyBJc05lc3RlZCwgSXNOb3ROZXN0ZWQgfTsKKyAgICAgICAgZW51
bSBjbGFzcyBTY29wZVR5cGUgeyBDYXRjaFNjb3BlLCBMZXRDb25zdFNjb3BlLCBGdW5jdGlvbk5h
bWVTY29wZSwgQ2xhc3NTY29wZSB9OwogICAgIHByaXZhdGU6CiAgICAgICAgIGVudW0gY2xhc3Mg
VERaUmVxdWlyZW1lbnQgeyBVbmRlclREWiwgTm90VW5kZXJURFogfTsKLSAgICAgICAgZW51bSBj
bGFzcyBTY29wZVR5cGUgeyBDYXRjaFNjb3BlLCBMZXRDb25zdFNjb3BlLCBGdW5jdGlvbk5hbWVT
Y29wZSB9OwogICAgICAgICBlbnVtIGNsYXNzIFNjb3BlUmVnaXN0ZXJUeXBlIHsgVmFyLCBCbG9j
ayB9OwogICAgICAgICB2b2lkIHB1c2hMZXhpY2FsU2NvcGVJbnRlcm5hbChWYXJpYWJsZUVudmly
b25tZW50JiwgVERaQ2hlY2tPcHRpbWl6YXRpb24sIE5lc3RlZFNjb3BlVHlwZSwgUmVnaXN0ZXJJ
RCoqIGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQsIFREWlJlcXVpcmVtZW50LCBTY29wZVR5cGUs
IFNjb3BlUmVnaXN0ZXJUeXBlKTsKICAgICAgICAgdm9pZCBpbml0aWFsaXplQmxvY2tTY29wZWRG
dW5jdGlvbnMoVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smLCBSZWdpc3RlcklE
KiBjb25zdGFudFN5bWJvbFRhYmxlKTsKICAgICAgICAgdm9pZCBwb3BMZXhpY2FsU2NvcGVJbnRl
cm5hbChWYXJpYWJsZUVudmlyb25tZW50Jik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIExv
b2tVcFZhcktpbmRGdW5jdG9yPgotICAgICAgICBib29sIGluc3RhbnRpYXRlTGV4aWNhbFZhcmlh
Ymxlcyhjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiwgU3ltYm9sVGFibGUqLCBTY29wZVJlZ2lz
dGVyVHlwZSwgTG9va1VwVmFyS2luZEZ1bmN0b3IpOworICAgICAgICBib29sIGluc3RhbnRpYXRl
TGV4aWNhbFZhcmlhYmxlcyhjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiwgU2NvcGVUeXBlLCBT
eW1ib2xUYWJsZSosIFNjb3BlUmVnaXN0ZXJUeXBlLCBMb29rVXBWYXJLaW5kRnVuY3Rvcik7CiAg
ICAgICAgIHZvaWQgZW1pdFByZWZpbGxTdGFja1REWlZhcmlhYmxlcyhjb25zdCBWYXJpYWJsZUVu
dmlyb25tZW50JiwgU3ltYm9sVGFibGUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFBh
cmVudFNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUpOwogICAgICAgICB2
b2lkIGVtaXRQdXNoRnVuY3Rpb25OYW1lU2NvcGUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHks
IFJlZ2lzdGVySUQqIHZhbHVlLCBib29sIGlzQ2FwdHVyZWQpOwpAQCAtMTEyOCw3ICsxMTI4LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNTdXBlclVzZWRJbklubmVyQXJyb3dG
dW5jdGlvbigpOwogICAgICAgICBib29sIGlzU3VwZXJDYWxsVXNlZEluSW5uZXJBcnJvd0Z1bmN0
aW9uKCk7CiAgICAgICAgIGJvb2wgaXNUaGlzVXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCk7Ci0g
ICAgICAgIHZvaWQgcHVzaExleGljYWxTY29wZShWYXJpYWJsZUVudmlyb25tZW50Tm9kZSosIFRE
WkNoZWNrT3B0aW1pemF0aW9uLCBOZXN0ZWRTY29wZVR5cGUgPSBOZXN0ZWRTY29wZVR5cGU6Oklz
Tm90TmVzdGVkLCBSZWdpc3RlcklEKiogY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdCA9IG51bGxw
dHIsIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rpb25zID0gdHJ1ZSk7Cisg
ICAgICAgIHZvaWQgcHVzaExleGljYWxTY29wZShWYXJpYWJsZUVudmlyb25tZW50Tm9kZSosIFNj
b3BlVHlwZSwgVERaQ2hlY2tPcHRpbWl6YXRpb24sIE5lc3RlZFNjb3BlVHlwZSA9IE5lc3RlZFNj
b3BlVHlwZTo6SXNOb3ROZXN0ZWQsIFJlZ2lzdGVySUQqKiBjb25zdGFudFN5bWJvbFRhYmxlUmVz
dWx0ID0gbnVsbHB0ciwgYm9vbCBzaG91bGRJbml0aWFsaXplQmxvY2tTY29wZWRGdW5jdGlvbnMg
PSB0cnVlKTsKKyAgICAgICAgdm9pZCBwdXNoQ2xhc3NMZXhpY2FsU2NvcGUoVmFyaWFibGVFbnZp
cm9ubWVudE5vZGUqKTsKICAgICAgICAgdm9pZCBwb3BMZXhpY2FsU2NvcGUoVmFyaWFibGVFbnZp
cm9ubWVudE5vZGUqKTsKICAgICAgICAgdm9pZCBwcmVwYXJlTGV4aWNhbFNjb3BlRm9yTmV4dEZv
ckxvb3BJdGVyYXRpb24oVmFyaWFibGVFbnZpcm9ubWVudE5vZGUqLCBSZWdpc3RlcklEKiBsb29w
U3ltYm9sVGFibGUpOwogICAgICAgICBpbnQgbGFiZWxTY29wZURlcHRoKCkgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAK
aW5kZXggYWRhZWFhMTRiYWVlZWZkZDkxMjI5NjY4NDhmYTM1MTEwM2U4MTI5MS4uMjkzYWUxNWVj
MTdhZDFhNDJkNmEyMmU1NGY4NGU0N2VmNmMyZDAyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtOTgyLDcgKzk4Miw3
IEBAIFJlZ2lzdGVySUQqIEJhc2VEb3ROb2RlOjplbWl0R2V0UHJvcGVydHlWYWx1ZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAgICAgICAgIGlmIChwcml2YXRlVHJhaXRzLmlz
TWV0aG9kKCkpIHsKICAgICAgICAgICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJs
ZShpZGVudGlmaWVyTmFtZSk7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUg
PSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOwotCisgICAgICAgICAg
ICBBU1NFUlQoc2NvcGUpOyAvLyBQcml2YXRlIG5hbWVzIGFyZSBhbHdheXMgY2FwdHVyZWQuCiAg
ICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJpdmF0ZUJyYW5kU3ltYm9sID0gZ2VuZXJh
dG9yLmVtaXRHZXRQcml2YXRlQnJhbmQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzY29wZS5n
ZXQoKSwgcHJpdmF0ZVRyYWl0cy5pc1N0YXRpYygpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0Q2hlY2tQcml2YXRlQnJhbmQoYmFzZSwgcHJpdmF0ZUJyYW5kU3ltYm9sLmdldCgpLCBwcml2
YXRlVHJhaXRzLmlzU3RhdGljKCkpOwogCkBAIC05OTIsNyArOTkyLDcgQEAgUmVnaXN0ZXJJRCog
QmFzZURvdE5vZGU6OmVtaXRHZXRQcm9wZXJ0eVZhbHVlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2kKICAgICAgICAgaWYgKHByaXZhdGVUcmFpdHMuaXNHZXR0ZXIoKSkgewogICAg
ICAgICAgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50aWZpZXJOYW1l
KTsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0
UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7Ci0KKyAgICAgICAgICAgIEFTU0VSVChzY29wZSk7
IC8vIFByaXZhdGUgbmFtZXMgYXJlIGFsd2F5cyBjYXB0dXJlZC4KICAgICAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBwcml2YXRlQnJhbmRTeW1ib2wgPSBnZW5lcmF0b3IuZW1pdEdldFByaXZh
dGVCcmFuZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBwcml2YXRlVHJh
aXRzLmlzU3RhdGljKCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDaGVja1ByaXZhdGVC
cmFuZChiYXNlLCBwcml2YXRlQnJhbmRTeW1ib2wuZ2V0KCksIHByaXZhdGVUcmFpdHMuaXNTdGF0
aWMoKSk7CiAKQEAgLTEwMDcsNyArMTAwNyw3IEBAIFJlZ2lzdGVySUQqIEJhc2VEb3ROb2RlOjpl
bWl0R2V0UHJvcGVydHlWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHBlcmZvcm0gYnJhbmQgY2hlY2sgdG8gZm9sbG93IHRo
ZSBzcGVjCiAgICAgICAgICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoaWRl
bnRpZmllck5hbWUpOwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2Vu
ZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKLQorICAgICAgICAgICAgQVNT
RVJUKHNjb3BlKTsgLy8gUHJpdmF0ZSBuYW1lcyBhcmUgYWx3YXlzIGNhcHR1cmVkLgogICAgICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByaXZhdGVCcmFuZFN5bWJvbCA9IGdlbmVyYXRvci5l
bWl0R2V0UHJpdmF0ZUJyYW5kKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCks
IHByaXZhdGVUcmFpdHMuaXNTdGF0aWMoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENo
ZWNrUHJpdmF0ZUJyYW5kKGJhc2UsIHByaXZhdGVCcmFuZFN5bWJvbC5nZXQoKSwgcHJpdmF0ZVRy
YWl0cy5pc1N0YXRpYygpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3dUeXBlRXJy
b3IoIlRyeWluZyB0byBhY2Nlc3MgYW4gdW5kZWZpbmVkIHByaXZhdGUgZ2V0dGVyIik7CkBAIC0x
MDE5LDYgKzEwMTksNyBAQCBSZWdpc3RlcklEKiBCYXNlRG90Tm9kZTo6ZW1pdEdldFByb3BlcnR5
VmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaQogICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKCF2YXIubG9jYWwoKSwgIlByaXZhdGUgRmllbGQgbmFtZXMgbXVzdCBiZSBz
dG9yZWQgaW4gY2FwdHVyZWQgdmFyaWFibGVzIik7CiAKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKKyAg
ICAgICAgQVNTRVJUKHNjb3BlKTsgLy8gUHJpdmF0ZSBuYW1lcyBhcmUgYWx3YXlzIGNhcHR1cmVk
LgogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJpdmF0ZU5hbWUgPSBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKHByaXZhdGVO
YW1lLmdldCgpLCBzY29wZS5nZXQoKSwgdmFyLCBEb05vdFRocm93SWZOb3RGb3VuZCk7CiAgICAg
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldFByaXZhdGVOYW1lKGRzdCwgYmFzZSwgcHJpdmF0
ZU5hbWUuZ2V0KCkpOwpAQCAtMTA0Nyw3ICsxMDQ4LDcgQEAgUmVnaXN0ZXJJRCogQmFzZURvdE5v
ZGU6OmVtaXRQdXRQcm9wZXJ0eShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
ckkKICAgICAgICAgaWYgKHByaXZhdGVUcmFpdHMuaXNTZXR0ZXIoKSkgewogICAgICAgICAgICAg
VmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50aWZpZXJOYW1lKTsKICAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNj
b3BlKG51bGxwdHIsIHZhcik7Ci0KKyAgICAgICAgICAgIEFTU0VSVChzY29wZSk7IC8vIFByaXZh
dGUgbmFtZXMgYXJlIGFsd2F5cyBjYXB0dXJlZC4KICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBwcml2YXRlQnJhbmRTeW1ib2wgPSBnZW5lcmF0b3IuZW1pdEdldFByaXZhdGVCcmFuZChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBwcml2YXRlVHJhaXRzLmlzU3Rh
dGljKCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDaGVja1ByaXZhdGVCcmFuZChiYXNl
LCBwcml2YXRlQnJhbmRTeW1ib2wuZ2V0KCksIHByaXZhdGVUcmFpdHMuaXNTdGF0aWMoKSk7CiAK
QEAgLTEwNjQsNyArMTA2NSw3IEBAIFJlZ2lzdGVySUQqIEJhc2VEb3ROb2RlOjplbWl0UHV0UHJv
cGVydHkoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJCiAgICAgICAgIGlm
IChwcml2YXRlVHJhaXRzLmlzR2V0dGVyKCkgfHwgcHJpdmF0ZVRyYWl0cy5pc01ldGhvZCgpKSB7
CiAgICAgICAgICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoaWRlbnRpZmll
ck5hbWUpOwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9y
LmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKLQorICAgICAgICAgICAgQVNTRVJUKHNj
b3BlKTsgLy8gUHJpdmF0ZSBuYW1lcyBhcmUgYWx3YXlzIGNhcHR1cmVkLgogICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHByaXZhdGVCcmFuZFN5bWJvbCA9IGdlbmVyYXRvci5lbWl0R2V0
UHJpdmF0ZUJyYW5kKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIHByaXZh
dGVUcmFpdHMuaXNTdGF0aWMoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENoZWNrUHJp
dmF0ZUJyYW5kKGJhc2UsIHByaXZhdGVCcmFuZFN5bWJvbC5nZXQoKSwgcHJpdmF0ZVRyYWl0cy5p
c1N0YXRpYygpKTsKIApAQCAtMTA3Nyw2ICsxMDc4LDcgQEAgUmVnaXN0ZXJJRCogQmFzZURvdE5v
ZGU6OmVtaXRQdXRQcm9wZXJ0eShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
ckkKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghdmFyLmxvY2FsKCksICJQcml2YXRlIEZp
ZWxkIG5hbWVzIG11c3QgYmUgc3RvcmVkIGluIGNhcHR1cmVkIHZhcmlhYmxlcyIpOwogCiAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3Bl
KG51bGxwdHIsIHZhcik7CisgICAgICAgIEFTU0VSVChzY29wZSk7IC8vIFByaXZhdGUgbmFtZXMg
YXJlIGFsd2F5cyBjYXB0dXJlZC4KICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByaXZhdGVO
YW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEdl
dEZyb21TY29wZShwcml2YXRlTmFtZS5nZXQoKSwgc2NvcGUuZ2V0KCksIHZhciwgRG9Ob3RUaHJv
d0lmTm90Rm91bmQpOwogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQcml2YXRlRmllbGRQ
dXQoYmFzZSwgcHJpdmF0ZU5hbWUuZ2V0KCksIHZhbHVlKTsKQEAgLTI0MTcsNiArMjQxOSw3IEBA
IFJlZ2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0RG90KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgaWYgKHByaXZhdGVUcmFpdHMuaXNGaWVs
ZCgpKSB7CiAgICAgICAgICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoaWRl
bnQpOwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKKyAgICAgICAgICAgIEFTU0VSVChzY29wZSk7
IC8vIFByaXZhdGUgbmFtZXMgYXJlIGFsd2F5cyBjYXB0dXJlZC4KICAgICAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBwcml2YXRlTmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAg
ICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKHByaXZhdGVOYW1lLmdldCgpLCBz
Y29wZS5nZXQoKSwgdmFyLCBEb05vdFRocm93SWZOb3RGb3VuZCk7CiAKQEAgLTI0MzEsNyArMjQz
NCw3IEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0RG90KEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgaWYgKHByaXZhdGVUcmFpdHMu
aXNNZXRob2QoKSkgewogICAgICAgICAgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlh
YmxlKGlkZW50KTsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVy
YXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7Ci0KKyAgICAgICAgICAgIEFTU0VS
VChzY29wZSk7IC8vIFByaXZhdGUgbmFtZXMgYXJlIGFsd2F5cyBjYXB0dXJlZC4KICAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcml2YXRlQnJhbmRTeW1ib2wgPSBnZW5lcmF0b3IuZW1p
dEdldFByaXZhdGVCcmFuZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBw
cml2YXRlVHJhaXRzLmlzU3RhdGljKCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDaGVj
a1ByaXZhdGVCcmFuZChiYXNlLmdldCgpLCBwcml2YXRlQnJhbmRTeW1ib2wuZ2V0KCksIHByaXZh
dGVUcmFpdHMuaXNTdGF0aWMoKSk7CiAKQEAgLTI0NDIsNyArMjQ0NSw3IEBAIFJlZ2lzdGVySUQq
IFBvc3RmaXhOb2RlOjplbWl0RG90KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKIAogICAgICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUo
aWRlbnQpOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1p
dFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOwotCisgICAgICAgIEFTU0VSVChzY29wZSk7IC8v
IFByaXZhdGUgbmFtZXMgYXJlIGFsd2F5cyBjYXB0dXJlZC4KICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByaXZhdGVCcmFuZFN5bWJvbCA9IGdlbmVyYXRvci5lbWl0R2V0UHJpdmF0ZUJyYW5k
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIHByaXZhdGVUcmFpdHMuaXNT
dGF0aWMoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2hlY2tQcml2YXRlQnJhbmQoYmFzZS5n
ZXQoKSwgcHJpdmF0ZUJyYW5kU3ltYm9sLmdldCgpLCBwcml2YXRlVHJhaXRzLmlzU3RhdGljKCkp
OwogCkBAIC0yNzIwLDcgKzI3MjMsNyBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0RG90
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAg
aWYgKHByaXZhdGVUcmFpdHMuaXNNZXRob2QoKSkgewogICAgICAgICAgICAgVmFyaWFibGUgdmFy
ID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50KTsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7Ci0K
KyAgICAgICAgICAgIEFTU0VSVChzY29wZSk7IC8vIFByaXZhdGUgbmFtZXMgYXJlIGFsd2F5cyBj
YXB0dXJlZC4KICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcml2YXRlQnJhbmRTeW1i
b2wgPSBnZW5lcmF0b3IuZW1pdEdldFByaXZhdGVCcmFuZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHNjb3BlLmdldCgpLCBwcml2YXRlVHJhaXRzLmlzU3RhdGljKCkpOwogICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRDaGVja1ByaXZhdGVCcmFuZChiYXNlLmdldCgpLCBwcml2YXRlQnJhbmRT
eW1ib2wuZ2V0KCksIHByaXZhdGVUcmFpdHMuaXNTdGF0aWMoKSk7CiAKQEAgLTI3MzEsNyArMjcz
NCw3IEBAIFJlZ2lzdGVySUQqIFByZWZpeE5vZGU6OmVtaXREb3QoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogCiAgICAgICAgIFZhcmlhYmxlIHZhciA9IGdl
bmVyYXRvci52YXJpYWJsZShpZGVudCk7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29w
ZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7Ci0KKyAgICAgICAg
QVNTRVJUKHNjb3BlKTsgLy8gUHJpdmF0ZSBuYW1lcyBhcmUgYWx3YXlzIGNhcHR1cmVkLgogICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJpdmF0ZUJyYW5kU3ltYm9sID0gZ2VuZXJhdG9yLmVt
aXRHZXRQcml2YXRlQnJhbmQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwg
cHJpdmF0ZVRyYWl0cy5pc1N0YXRpYygpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDaGVja1By
aXZhdGVCcmFuZChiYXNlLmdldCgpLCBwcml2YXRlQnJhbmRTeW1ib2wuZ2V0KCksIHByaXZhdGVU
cmFpdHMuaXNTdGF0aWMoKSk7CiAKQEAgLTMyMTMsNiArMzIxNiw3IEBAIFJlZ2lzdGVySUQqIElu
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKICAgICAgICAgYXV0byBwcml2YXRlVHJhaXRzID0gZ2VuZXJhdG9yLmdldFByaXZh
dGVUcmFpdHMoaWRlbnRpZmllcik7CiAgICAgICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52
YXJpYWJsZShpZGVudGlmaWVyKTsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0g
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKKyAgICAgICAgQVNTRVJU
KHNjb3BlKTsgLy8gUHJpdmF0ZSBuYW1lcyBhcmUgYWx3YXlzIGNhcHR1cmVkLgogCiAgICAgICAg
IGlmIChwcml2YXRlVHJhaXRzLmlzRmllbGQoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByaXZhdGVOYW1lID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgdmFyLCBEb05vdFRocm93SWZOb3RGb3VuZCk7
CkBAIC0zODE3LDcgKzM4MjEsNyBAQCB2b2lkIEJsb2NrTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAoIW1f
c3RhdGVtZW50cykKICAgICAgICAgcmV0dXJuOwotICAgIGdlbmVyYXRvci5wdXNoTGV4aWNhbFNj
b3BlKHRoaXMsIEJ5dGVjb2RlR2VuZXJhdG9yOjpURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1p
emUsIEJ5dGVjb2RlR2VuZXJhdG9yOjpOZXN0ZWRTY29wZVR5cGU6OklzTmVzdGVkKTsKKyAgICBn
ZW5lcmF0b3IucHVzaExleGljYWxTY29wZSh0aGlzLCBCeXRlY29kZUdlbmVyYXRvcjo6U2NvcGVU
eXBlOjpMZXRDb25zdFNjb3BlLCBCeXRlY29kZUdlbmVyYXRvcjo6VERaQ2hlY2tPcHRpbWl6YXRp
b246Ok9wdGltaXplLCBCeXRlY29kZUdlbmVyYXRvcjo6TmVzdGVkU2NvcGVUeXBlOjpJc05lc3Rl
ZCk7CiAgICAgbV9zdGF0ZW1lbnRzLT5lbWl0Qnl0ZWNvZGUoZ2VuZXJhdG9yLCBkc3QpOwogICAg
IGdlbmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiB9CkBAIC00MDMwLDcgKzQwMzQsNyBA
QCB2b2lkIEZvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9y
Lm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CiAKICAgICBSZWdpc3RlcklEKiBmb3JM
b29wU3ltYm9sVGFibGUgPSBudWxscHRyOwotICAgIGdlbmVyYXRvci5wdXNoTGV4aWNhbFNjb3Bl
KHRoaXMsIEJ5dGVjb2RlR2VuZXJhdG9yOjpURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1pemUs
IEJ5dGVjb2RlR2VuZXJhdG9yOjpOZXN0ZWRTY29wZVR5cGU6OklzTmVzdGVkLCAmZm9yTG9vcFN5
bWJvbFRhYmxlKTsKKyAgICBnZW5lcmF0b3IucHVzaExleGljYWxTY29wZSh0aGlzLCBCeXRlY29k
ZUdlbmVyYXRvcjo6U2NvcGVUeXBlOjpMZXRDb25zdFNjb3BlLCBCeXRlY29kZUdlbmVyYXRvcjo6
VERaQ2hlY2tPcHRpbWl6YXRpb246Ok9wdGltaXplLCBCeXRlY29kZUdlbmVyYXRvcjo6TmVzdGVk
U2NvcGVUeXBlOjpJc05lc3RlZCwgJmZvckxvb3BTeW1ib2xUYWJsZSk7CiAKICAgICBpZiAobV9l
eHByMSkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0
KCksIG1fZXhwcjEpOwpAQCAtNDE4MSw3ICs0MTg1LDcgQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAg
ICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAogICAgIFJlZ2lzdGVy
SUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7Ci0gICAgZ2VuZXJhdG9yLnB1c2hMZXhp
Y2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1pemF0aW9uOjpP
cHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNOZXN0ZWQsICZm
b3JMb29wU3ltYm9sVGFibGUpOworICAgIGdlbmVyYXRvci5wdXNoTGV4aWNhbFNjb3BlKHRoaXMs
IEJ5dGVjb2RlR2VuZXJhdG9yOjpTY29wZVR5cGU6OkxldENvbnN0U2NvcGUsIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1pemUsIEJ5dGVjb2RlR2VuZXJhdG9y
OjpOZXN0ZWRTY29wZVR5cGU6OklzTmVzdGVkLCAmZm9yTG9vcFN5bWJvbFRhYmxlKTsKIAogICAg
IGlmIChtX2xleHByLT5pc0Fzc2lnblJlc29sdmVOb2RlKCkpCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0Tm9kZShnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpLCBtX2xleHByKTsKQEAgLTQzNTAsNyAr
NDM1NCw3IEBAIHZvaWQgRm9yT2ZOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQo
ZHN0LCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJs
ZSA9IG51bGxwdHI7Ci0gICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNv
ZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5l
cmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNOZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwor
ICAgIGdlbmVyYXRvci5wdXNoTGV4aWNhbFNjb3BlKHRoaXMsIEJ5dGVjb2RlR2VuZXJhdG9yOjpT
Y29wZVR5cGU6OkxldENvbnN0U2NvcGUsIEJ5dGVjb2RlR2VuZXJhdG9yOjpURFpDaGVja09wdGlt
aXphdGlvbjo6T3B0aW1pemUsIEJ5dGVjb2RlR2VuZXJhdG9yOjpOZXN0ZWRTY29wZVR5cGU6Oklz
TmVzdGVkLCAmZm9yTG9vcFN5bWJvbFRhYmxlKTsKICAgICBhdXRvIGV4dHJhY3RvciA9IHNjb3Bl
ZExhbWJkYTx2b2lkKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCopPihbdGhpcywgZHN0
XShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKQEAgLTQ2ODQsNyArNDY4
OCw3IEBAIHZvaWQgU3dpdGNoTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogCi0gICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2Fs
U2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1pemF0aW9uOjpEb05v
dE9wdGltaXplLCBCeXRlY29kZUdlbmVyYXRvcjo6TmVzdGVkU2NvcGVUeXBlOjpJc05lc3RlZCk7
CisgICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6
OlNjb3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0
aW1pemF0aW9uOjpEb05vdE9wdGltaXplLCBCeXRlY29kZUdlbmVyYXRvcjo6TmVzdGVkU2NvcGVU
eXBlOjpJc05lc3RlZCk7CiAgICAgbV9ibG9jay0+ZW1pdEJ5dGVjb2RlRm9yQmxvY2soZ2VuZXJh
dG9yLCByMC5nZXQoKSwgZHN0KTsKICAgICBnZW5lcmF0b3IucG9wTGV4aWNhbFNjb3BlKHRoaXMp
OwogCkBAIC01MTg0LDcgKzUxODgsNyBAQCBSZWdpc3RlcklEKiBDbGFzc0V4cHJOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRAogICAgIFN0
cmljdE1vZGVTY29wZSBzdHJpY3RNb2RlU2NvcGUoZ2VuZXJhdG9yKTsKIAogICAgIGlmIChtX25l
ZWRzTGV4aWNhbFNjb3BlKQotICAgICAgICBnZW5lcmF0b3IucHVzaExleGljYWxTY29wZSh0aGlz
LCBCeXRlY29kZUdlbmVyYXRvcjo6VERaQ2hlY2tPcHRpbWl6YXRpb246Ok9wdGltaXplLCBCeXRl
Y29kZUdlbmVyYXRvcjo6TmVzdGVkU2NvcGVUeXBlOjpJc05lc3RlZCk7CisgICAgICAgIGdlbmVy
YXRvci5wdXNoTGV4aWNhbFNjb3BlKHRoaXMsIEJ5dGVjb2RlR2VuZXJhdG9yOjpTY29wZVR5cGU6
OkNsYXNzU2NvcGUsIEJ5dGVjb2RlR2VuZXJhdG9yOjpURFpDaGVja09wdGltaXphdGlvbjo6T3B0
aW1pemUsIEJ5dGVjb2RlR2VuZXJhdG9yOjpOZXN0ZWRTY29wZVR5cGU6OklzTmVzdGVkKTsKIAog
ICAgIGJvb2wgaGFzUHJpdmF0ZU5hbWVzID0gISFtX2xleGljYWxWYXJpYWJsZXMucHJpdmF0ZU5h
bWVzU2l6ZSgpOwogICAgIGJvb2wgc2hvdWxkRW1pdFByaXZhdGVCcmFuZCA9IG1fbGV4aWNhbFZh
cmlhYmxlcy5oYXNJbnN0YW5jZVByaXZhdGVNZXRob2RPckFjY2Vzc29yKCk7CkBAIC01MTkyLDcg
KzUxOTYsNyBAQCBSZWdpc3RlcklEKiBDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRAogICAgIGlmIChoYXNQcml2YXRlTmFt
ZXMpCiAgICAgICAgIGdlbmVyYXRvci5wdXNoUHJpdmF0ZUFjY2Vzc05hbWVzKG1fbGV4aWNhbFZh
cmlhYmxlcy5wcml2YXRlTmFtZUVudmlyb25tZW50KCkpOwogICAgIGlmIChzaG91bGRFbWl0UHJp
dmF0ZUJyYW5kKQotICAgICAgICBnZW5lcmF0b3IuZW1pdENyZWF0ZVByaXZhdGVCcmFuZChnZW5l
cmF0b3Iuc2NvcGVSZWdpc3RlcigpLCBtX3Bvc2l0aW9uLCBtX3Bvc2l0aW9uLCBtX3Bvc2l0aW9u
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRDcmVhdGVQcml2YXRlQnJhbmQobV9wb3NpdGlvbiwg
bV9wb3NpdGlvbiwgbV9wb3NpdGlvbik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3VwZXJj
bGFzczsKICAgICBpZiAobV9jbGFzc0hlcml0YWdlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAKaW5kZXggN2NkZjFjOTA3M2YwZDVlOThlZTY1MGJlZDhlYzQzODVkN2Iw
MzBkYS4uYzZkMjg4NTNlODRlMzRkM2YyMTNhZTMxZWM1ZTM1MWQxYTdjOTg5OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcApAQCAtMzE0OCwxMiArMzE0OCwyMSBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4cHJlc3Npb24gUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlQ2xhc3MoVAogICAgIGluZm8uZW5kT2Zmc2V0ID0gdG9rZW5Mb2NhdGlv
bigpLmVuZE9mZnNldCAtIDE7CiAgICAgY29uc3VtZU9yRmFpbChDTE9TRUJSQUNFLCAiRXhwZWN0
ZWQgYSBjbG9zaW5nICd9JyBhZnRlciBhIGNsYXNzIGJvZHkiKTsKIAotICAgIGlmIChkZWNsYXJl
c1ByaXZhdGVNZXRob2QgfHwgZGVjbGFyZXNQcml2YXRlQWNjZXNzb3IpIHsKLSAgICAgICAgSWRl
bnRpZmllciBwcml2YXRlQnJhbmRJZGVudGlmaWVyID0gbV92bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5wcml2YXRlQnJhbmRQcml2YXRlTmFtZSgpOwotICAgICAgICBEZWNsYXJhdGlv
blJlc3VsdE1hc2sgZGVjbGFyYXRpb25SZXN1bHQgPSBjbGFzc1Njb3BlLT5kZWNsYXJlTGV4aWNh
bFZhcmlhYmxlKCZwcml2YXRlQnJhbmRJZGVudGlmaWVyLCB0cnVlKTsKLSAgICAgICAgQVNTRVJU
X1VOVVNFRChkZWNsYXJhdGlvblJlc3VsdCwgZGVjbGFyYXRpb25SZXN1bHQgPT0gRGVjbGFyYXRp
b25SZXN1bHQ6OlZhbGlkKTsKLSAgICAgICAgY2xhc3NTY29wZS0+dXNlVmFyaWFibGUoJnByaXZh
dGVCcmFuZElkZW50aWZpZXIsIGZhbHNlKTsKLSAgICAgICAgY2xhc3NTY29wZS0+YWRkQ2xvc2Vk
VmFyaWFibGVDYW5kaWRhdGVVbmNvbmRpdGlvbmFsbHkocHJpdmF0ZUJyYW5kSWRlbnRpZmllci5p
bXBsKCkpOworICAgIGlmIChkZWNsYXJlc1ByaXZhdGVNZXRob2QgfHwgZGVjbGFyZXNQcml2YXRl
QWNjZXNzb3IgfHwgZGVjbGFyZXNTdGF0aWNQcml2YXRlTWV0aG9kIHx8IGRlY2xhcmVzU3RhdGlj
UHJpdmF0ZUFjY2Vzc29yKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIElkZW50aWZpZXIgcHJp
dmF0ZUJyYW5kSWRlbnRpZmllciA9IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
cHJpdmF0ZUJyYW5kUHJpdmF0ZU5hbWUoKTsKKyAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0
TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFi
bGUoJnByaXZhdGVCcmFuZElkZW50aWZpZXIsIHRydWUpOworICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChkZWNsYXJhdGlvblJlc3VsdCwgZGVjbGFyYXRpb25SZXN1bHQgPT0gRGVjbGFyYXRpb25S
ZXN1bHQ6OlZhbGlkKTsKKyAgICAgICAgICAgIGNsYXNzU2NvcGUtPnVzZVZhcmlhYmxlKCZwcml2
YXRlQnJhbmRJZGVudGlmaWVyLCBmYWxzZSk7CisgICAgICAgICAgICBjbGFzc1Njb3BlLT5hZGRD
bG9zZWRWYXJpYWJsZUNhbmRpZGF0ZVVuY29uZGl0aW9uYWxseShwcml2YXRlQnJhbmRJZGVudGlm
aWVyLmltcGwoKSk7CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgSWRlbnRpZmll
ciBwcml2YXRlQ2xhc3NCcmFuZElkZW50aWZpZXIgPSBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLnByaXZhdGVDbGFzc0JyYW5kUHJpdmF0ZU5hbWUoKTsKKyAgICAgICAgICAgIERl
Y2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGNsYXNzU2NvcGUtPmRlY2xh
cmVMZXhpY2FsVmFyaWFibGUoJnByaXZhdGVDbGFzc0JyYW5kSWRlbnRpZmllciwgdHJ1ZSk7Cisg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGRlY2xhcmF0aW9uUmVzdWx0LCBkZWNsYXJhdGlvblJl
c3VsdCA9PSBEZWNsYXJhdGlvblJlc3VsdDo6VmFsaWQpOworICAgICAgICAgICAgY2xhc3NTY29w
ZS0+dXNlVmFyaWFibGUoJnByaXZhdGVDbGFzc0JyYW5kSWRlbnRpZmllciwgZmFsc2UpOworICAg
ICAgICAgICAgY2xhc3NTY29wZS0+YWRkQ2xvc2VkVmFyaWFibGVDYW5kaWRhdGVVbmNvbmRpdGlv
bmFsbHkocHJpdmF0ZUNsYXNzQnJhbmRJZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFRyZWVCdWlsZGVyLCBBU1RC
dWlsZGVyPikgewpAQCAtMzE2MSwxNCArMzE3MCw2IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUNsYXNzRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyhU
CiAgICAgICAgICAgICBjbGFzc0VsZW1lbnRzLT5zZXRIYXNQcml2YXRlQWNjZXNzb3JzKGRlY2xh
cmVzUHJpdmF0ZUFjY2Vzc29yIHx8IGRlY2xhcmVzU3RhdGljUHJpdmF0ZUFjY2Vzc29yKTsKICAg
ICB9CiAKLSAgICBpZiAoZGVjbGFyZXNTdGF0aWNQcml2YXRlTWV0aG9kIHx8IGRlY2xhcmVzUHJp
dmF0ZUFjY2Vzc29yKSB7Ci0gICAgICAgIElkZW50aWZpZXIgcHJpdmF0ZUNsYXNzQnJhbmRJZGVu
dGlmaWVyID0gbV92bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wcml2YXRlQ2xhc3NC
cmFuZFByaXZhdGVOYW1lKCk7Ci0gICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJh
dGlvblJlc3VsdCA9IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFibGUoJnByaXZhdGVD
bGFzc0JyYW5kSWRlbnRpZmllciwgdHJ1ZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZGVjbGFy
YXRpb25SZXN1bHQsIGRlY2xhcmF0aW9uUmVzdWx0ID09IERlY2xhcmF0aW9uUmVzdWx0OjpWYWxp
ZCk7Ci0gICAgICAgIGNsYXNzU2NvcGUtPnVzZVZhcmlhYmxlKCZwcml2YXRlQ2xhc3NCcmFuZElk
ZW50aWZpZXIsIGZhbHNlKTsKLSAgICAgICAgY2xhc3NTY29wZS0+YWRkQ2xvc2VkVmFyaWFibGVD
YW5kaWRhdGVVbmNvbmRpdGlvbmFsbHkocHJpdmF0ZUNsYXNzQnJhbmRJZGVudGlmaWVyLmltcGwo
KSk7Ci0gICAgfQotCiAgICAgaWYgKE9wdGlvbnM6OnVzZVByaXZhdGVDbGFzc0ZpZWxkcygpKSB7
CiAgICAgICAgIC8vIEZhaWwgaWYgdGhlcmUgYXJlIG5vIHBhcmVudCBwcml2YXRlIG5hbWUgc2Nv
cGVzIGFuZCBhbnkgdXNlZC1idXQtdW5kZWNsYXJlZCBwcml2YXRlIG5hbWVzLgogICAgICAgICBz
ZW1hbnRpY0ZhaWxJZkZhbHNlKGNvcHlVbmRlY2xhcmVkUHJpdmF0ZU5hbWVzVG9PdXRlclNjb3Bl
KCksICJDYW5ub3QgcmVmZXJlbmNlIHVuZGVjbGFyZWQgcHJpdmF0ZSBuYW1lcyIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAppbmRl
eCA1N2EyY2ExY2U3ZWY0MTdkZDFiODJlYmRkODViOGFlODhlOTIxMTBkLi5mNDMwZjI5MzA5NWY0
NDYxNjYxYmNjMDNjMGRiZTFjNTAwNzc3ZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaApAQCAtMTAxLDYgKzEwMSw5IEBAIHN0
cnVjdCBWYXJpYWJsZUVudmlyb25tZW50RW50cnlIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxWYXJp
YWJsZUVudmlyb25tZW50RW50cnk+CiBzdHJ1Y3QgUHJpdmF0ZU5hbWVFbnRyeSB7CiAgICAgZnJp
ZW5kIGNsYXNzIENhY2hlZFByaXZhdGVOYW1lRW50cnk7CiAKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIHByaXZhdGVDbGFzc0JyYW5kT2Zmc2V0ID0gMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIHByaXZhdGVCcmFuZE9mZnNldCA9IDE7CisKIHB1YmxpYzoKICAgICBQcml2
YXRlTmFtZUVudHJ5KHVpbnQxNl90IHRyYWl0cyA9IDApIHsgbV9iaXRzID0gdHJhaXRzOyB9CiAK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
NTIxMGI5YjA3YTk2MGVmM2Q2Mzc5ODNjMjFjMmE3MTMwMDQzM2ZmYS4uYzllOWE4OTE2NjM2MmVi
NThiMmNiMDg4OGEyZTk1ZjQ3MWQwYmYwOSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAyMS0wNi0wNCAgWXVz
dWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIFVzZSBMb2Nh
bENsb3N1cmVWYXIgdG8gZ2V0IGJyYW5kIGZyb20gc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjY3NworICAgICAgICByZGFyOi8vNzg4MDI4
NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0
cmVzcy9wcml2YXRlLWFjY2Vzcy1uZXN0ZWQtZXZhbC5qczogQWRkZWQuCisgICAgICAgIChzaG91
bGRUaHJvdyk6CisgICAgICAgIChzaG91bGRUaHJvdy5wcm90b3R5cGUueCk6CisgICAgICAgIChz
aG91bGRUaHJvdy5wcm90b3R5cGUubS5DLnByb3RvdHlwZS56KToKKyAgICAgICAgKHNob3VsZFRo
cm93LnByb3RvdHlwZS5tLkMucHJvdG90eXBlLmEpOgorICAgICAgICAoc2hvdWxkVGhyb3cucHJv
dG90eXBlLm0uQyk6CisgICAgICAgIChzaG91bGRUaHJvdy5wcm90b3R5cGUubSk6CisgICAgICAg
ICogc3RyZXNzL3ByaXZhdGUtYWNjZXNzLW5lc3RlZC5qczogQWRkZWQuCisgICAgICAgIChzaG91
bGRUaHJvdyk6CisgICAgICAgIChzaG91bGRUaHJvdy5wcm90b3R5cGUueCk6CisgICAgICAgIChz
aG91bGRUaHJvdy5wcm90b3R5cGUubS5DLnByb3RvdHlwZS56KToKKyAgICAgICAgKHNob3VsZFRo
cm93LnByb3RvdHlwZS5tLkMucHJvdG90eXBlLmEpOgorICAgICAgICAoc2hvdWxkVGhyb3cucHJv
dG90eXBlLm0uQyk6CisgICAgICAgIChzaG91bGRUaHJvdy5wcm90b3R5cGUubSk6CisKIDIwMjEt
MDYtMDQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFBsYWNhdGUg
ZXhjZXB0aW9uIGNoZWNrZXIgdmFsaWRhdGlvbiBpbiBvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9w
ZXJ0eS4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3ByaXZhdGUtYWNjZXNzLW5lc3RlZC1l
dmFsLmpzIGIvSlNUZXN0cy9zdHJlc3MvcHJpdmF0ZS1hY2Nlc3MtbmVzdGVkLWV2YWwuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTZmZTRmYTE5NDljMjA3YjEwNmY3ZTg5YTY2N2I0YjVjYmNmOTdhYQotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL3ByaXZhdGUtYWNjZXNzLW5lc3RlZC1ldmFsLmpz
CkBAIC0wLDAgKzEsMzMgQEAKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2Fn
ZSkgeworICAgIHZhciBlcnJvclRocm93biA9IGZhbHNlOworICAgIHZhciBlcnJvciA9IG51bGw7
CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ZXJyb3JUaHJvd24gPSB0cnVlOworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICgh
ZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHRocm93bicpOworICAg
IGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJvcil9YCk7Cit9CisKK3Nob3VsZFRocm93KCgp
ID0+IHsKKyAgICBjbGFzcyBEIHsKKyAgICAgICN4KCkge30KKyAgICAgIG0oKSB7CisgICAgICAg
IGNsYXNzIEMgeworICAgICAgICAgICN5eTsKKyAgICAgICAgICAjeigpIHt9CisgICAgICAgICAg
YSgpIHsKKyAgICAgICAgICAgIGV2YWwoYHRoaXMuI3goKTtgKTsKKyAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgbGV0IGMgPSBuZXcgQygpOworICAgICAgICBjLmEoKTsKKyAgICAgIH0K
KyAgICB9CisgICAgbGV0IGQgPSBuZXcgRCgpOworICAgIGQubSgpOworfSwgYFR5cGVFcnJvcjog
Q2Fubm90IGFjY2VzcyBwcml2YXRlIG1ldGhvZCBvciBhY2Vzc29yIChldmFsdWF0aW5nICd0aGlz
LiN4JylgKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3ByaXZhdGUtYWNjZXNzLW5lc3Rl
ZC5qcyBiL0pTVGVzdHMvc3RyZXNzL3ByaXZhdGUtYWNjZXNzLW5lc3RlZC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42ZDg4ODVmNjdmYzgzZWZjY2ZiOGVkY2JhNDU2Y2E0ZGQ3ZDU0Mjc3Ci0tLSAvZGV2L251bGwK
KysrIGIvSlNUZXN0cy9zdHJlc3MvcHJpdmF0ZS1hY2Nlc3MtbmVzdGVkLmpzCkBAIC0wLDAgKzEs
MzMgQEAKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZh
ciBlcnJvclRocm93biA9IGZhbHNlOworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsK
KyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3JUaHJvd24g
PSB0cnVlOworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3JUaHJvd24p
CisgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHRocm93bicpOworICAgIGlmIChTdHJpbmco
ZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGVy
cm9yOiAke1N0cmluZyhlcnJvcil9YCk7Cit9CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBj
bGFzcyBEIHsKKyAgICAgICN4KCkge30KKyAgICAgIG0oKSB7CisgICAgICAgIGNsYXNzIEMgewor
ICAgICAgICAgICN5eTsKKyAgICAgICAgICAjeigpIHt9CisgICAgICAgICAgYSgpIHsKKyAgICAg
ICAgICAgIHRoaXMuI3goKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbGV0IGMg
PSBuZXcgQygpOworICAgICAgICBjLmEoKTsKKyAgICAgIH0KKyAgICB9CisgICAgbGV0IGQgPSBu
ZXcgRCgpOworICAgIGQubSgpOworfSwgYFR5cGVFcnJvcjogQ2Fubm90IGFjY2VzcyBwcml2YXRl
IG1ldGhvZCBvciBhY2Vzc29yIChldmFsdWF0aW5nICd0aGlzLiN4JylgKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430679</attachid>
            <date>2021-06-06 00:20:56 -0700</date>
            <delta_ts>2021-06-07 19:46:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226677-20210606002055.patch</filename>
            <type>text/plain</type>
            <size>38388</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NDgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NzI4ODkwZDUxNGI5MDU4MWFjMjM4Y2U5Mjc4YzA5ZGNhZjljMjM1Li5hMWM1NDhkYjEwYWM4MTdl
OGMyODQ5YzZmOWE1ZTIzYjU2MzQ0NmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMS0wNi0wNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFVzZSBMb2NhbENsb3N1cmVWYXIgdG8gZ2V0IGJyYW5kIGZyb20g
c2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NjY3NworICAgICAgICByZGFyOi8vNzg4MDI4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBQcml2YXRlIGJyYW5kIGxvb2t1cCBpcyBkb2luZyB3cm9u
ZyB3YXkgdG8gZ2V0IHNjb3BlLgorCisgICAgICAgICAgICAxLiBvcF9yZXNvbHZlX3Njb3BlIHdp
dGggcHJpdmF0ZSBuYW1lIChlLmcuICN4KQorICAgICAgICAgICAgMi4gdGhlbiwgZG9pbmcgb3Bf
Z2V0X2Zyb21fc2NvcGUgd2l0aCAoMSkncyBzY29wZSB3aXRoIGRpZmZlcmVudCBuYW1lIChlLmcu
IEBwcml2YXRlQnJhbmQpCisKKyAgICAgICAgVGhpcyBpcyB3cm9uZyBpbiBKU0MuIFdlIHJlc29s
dmUgc2NvcGUgYXQgbGluay10aW1lIGluIENvZGVCbG9jay4gU28gd2UgbmVlZCB0byBlbnN1cmUg
dGhhdCBib3RoIG9wX3Jlc29sdmVfc2NvcGUgYW5kIG9wX2dldF9mcm9tX3Njb3BlCisgICAgICAg
IHN0YXJ0cyB3aXRoIHRoZSBjdXJyZW50IHNjb3BlLXJlZ2lzdGVyLiBBcyBhIHJlc3VsdCwgcHJp
dmF0ZS1icmFuZCBsb29rdXAgaXMgYnJva2VuIHJpZ2h0IG5vdy4gTGV0J3Mgc2VlIHRoZSBidWdn
eSBjYXNlLgorCisgICAgICAgICAgICBjbGFzcyBEIHsKKyAgICAgICAgICAgICAgI3goKSB7fQor
ICAgICAgICAgICAgICBtKCkgeworICAgICAgICAgICAgICAgIGNsYXNzIEMgeworICAgICAgICAg
ICAgICAgICAgI3l5OworICAgICAgICAgICAgICAgICAgI3ooKSB7IH0KKyAgICAgICAgICAgICAg
ICAgIGEoKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuI3goKTsgLy8gPD09PT09IFRoaXMg
cG9pbnQuCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGxldCBjID0gbmV3IEMoKTsKKyAgICAgICAgICAgICAgICBjLmEoKTsKKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIEluIHRoZSBhYm92ZSBwb2ludCwgd2Ug
Zmlyc3QgbG9va3VwIHRoZSBzY29wZSB3aXRoICN4LCBhbmQgd2UgZ2V0IHRoZSBEJ3MgY2xhc3Mt
c2NvcGUuIEJ1dCBvdXIgZ2V0X2Zyb21fc2NvcGUgaXMgdXNpbmcgcHJpdmF0ZUJyYW5kLCBhbmQK
KyAgICAgICAgcHJpdmF0ZUJyYW5kIHByb3BlcnR5IGV4aXN0cyB0b28gaW4gQydzIGNsYXNzLXNj
b3BlIHRvbyBzaW5jZSBDIGFsc28gaGFzICN5eSBhbmQgI3ouIEFzIGEgcmVzdWx0LCBDb2RlQmxv
Y2sgbGlua2luZyBjb25maWd1cmVzIHRoZSBvZmZzZXQgZm9yCisgICAgICAgIEMncyBjbGFzcy1z
Y29wZSBpbiBnZXRfZnJvbV9zY29wZS4gQW5kIHRoaXMgb2Zmc2V0IGlzIGRpZmZlcmVudCBmcm9t
IEQncyBjbGFzcy1zY29wZSdzIHByaXZhdGVCcmFuZC4KKworICAgICAgICBPbmx5IGFsbG93ZWQg
Y2FzZSBmb3IgdGhlIGFib3ZlIHVzYWdlIGlzIExvY2FsQ2xvc3VyZVZhci4gQW5kIGdlbmVyYXRv
cmlmaWNhdGlvbiB1c2VzIGl0IHRvby4gSW4gdGhpcyBwYXRjaCwKKworICAgICAgICAxLiBXZSBl
bnN1cmUgdGhhdCBjbGFzcy1zY29wZSAod2l0aCBwcml2YXRlIG5hbWUpIG11c3QgaGF2ZSBAcHJp
dmF0ZUJyYW5kIGFuZCBAcHJpdmF0ZUNsYXNzQnJhbmQgd2l0aCBvZmZzZXQgMSBhbmQgMC4KKyAg
ICAgICAgMi4gVXNlIExvY2FsQ2xvc3VyZVZhciB3aXRoIHRoZSBhYm92ZSBwcmUtZGVmaW5lZCBv
ZmZzZXQKKworICAgICAgICBTaW5jZSBDb2RlQmxvY2sncyBsaW5raW5nIGRvZXMgbm90IHJlc29s
dmUgdGhlIHNjb3BlIGZvciBnZXRfZnJvbV9zY29wZSBpZiBpdCBpcyBMb2NhbENsb3N1cmVWYXIs
IHdlIGNhbiBqdXN0IHBlcmZvcm0gdGhlIGRlc2lyZWQgTG9jYWxDbG9zdXJlVmFyIGxvb2t1cAor
ICAgICAgICB3aXRoIHRoZSBnaXZlbiBzY29wZSB3aXRoIHRoZSBjb21waWxlZCBvZmZzZXQuCisK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6aW5zdGFudGlhdGVMZXhpY2FsVmFyaWFibGVzKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hMZXhpY2FsU2NvcGUpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaExleGljYWxTY29wZUludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDcmVhdGVQcml2YXRlQnJhbmQpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFByaXZhdGVCcmFuZCk6CisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkJhc2VEb3ROb2RlOjplbWl0
R2V0UHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChKU0M6OkJhc2VEb3ROb2RlOjplbWl0UHV0UHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpQb3N0Zml4Tm9kZTo6ZW1pdERvdCk6CisgICAgICAgIChK
U0M6OlByZWZpeE5vZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpJbk5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkJsb2NrTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6Rm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JPZk5vZGU6OmVtaXRCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OlN3aXRjaE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNs
YXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKToKKyAgICAgICAg
KiBwYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oOgorCiAyMDIxLTA2LTA0ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3QgZW1pdCB0aGUgTm90RG91Ymxl
IGNoZWNrcyBpZiB3ZSdyZSBhbHJlYWR5IE5vdERvdWJsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXgg
MDNmOWZmMjc3OWNmYTdkMmExY2FkZDY1MWE2MGExODY3MDdkYWRiYS4uNWU0MmY4Y2U0OWZlMWYw
YTRkMTBmNGNmYjg0YWRlNzY4OWUzNDllNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTg0MSw3ICs4
NDEsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBGdW5j
dGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogICAgIH0KIAogICAgIGJvb2wgc2hvdWxk
SW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rpb25zID0gZmFsc2U7IC8vIFdlIGdlbmVyYXRlIHRv
cC1sZXZlbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW4gOjpnZW5lcmF0ZSgpLgotICAgIHB1c2hM
ZXhpY2FsU2NvcGUobV9zY29wZU5vZGUsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwg
TmVzdGVkU2NvcGVUeXBlOjpJc05vdE5lc3RlZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlhbGl6ZUJs
b2NrU2NvcGVkRnVuY3Rpb25zKTsKKyAgICBwdXNoTGV4aWNhbFNjb3BlKG1fc2NvcGVOb2RlLCBT
Y29wZVR5cGU6OkxldENvbnN0U2NvcGUsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwg
TmVzdGVkU2NvcGVUeXBlOjpJc05vdE5lc3RlZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlhbGl6ZUJs
b2NrU2NvcGVkRnVuY3Rpb25zKTsKIH0KIAogQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKFZNJiB2bSwgRXZhbE5vZGUqIGV2YWxOb2RlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sq
IGNvZGVCbG9jaywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25N
b2RlLCBjb25zdCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiYgcGFyZW50U2NvcGVURFpWYXJp
YWJsZXMsIGNvbnN0IFByaXZhdGVOYW1lRW52aXJvbm1lbnQqIHBhcmVudFByaXZhdGVOYW1lRW52
aXJvbm1lbnQsIEVDTUFNb2RlIGVjbWFNb2RlKQpAQCAtOTA2LDcgKzkwNiw3IEBAIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEV2YWxOb2RlKiBldmFsTm9kZSwg
VW5saW5rZWRFdmFsQ29kCiAgICAgfQogICAgIAogICAgIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZUJs
b2NrU2NvcGVkRnVuY3Rpb25zID0gZmFsc2U7IC8vIFdlIGdlbmVyYXRlIHRvcC1sZXZlbCBmdW5j
dGlvbiBkZWNsYXJhdGlvbnMgaW4gOjpnZW5lcmF0ZSgpLgotICAgIHB1c2hMZXhpY2FsU2NvcGUo
bV9zY29wZU5vZGUsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgTmVzdGVkU2NvcGVU
eXBlOjpJc05vdE5lc3RlZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVu
Y3Rpb25zKTsKKyAgICBwdXNoTGV4aWNhbFNjb3BlKG1fc2NvcGVOb2RlLCBTY29wZVR5cGU6Okxl
dENvbnN0U2NvcGUsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgTmVzdGVkU2NvcGVU
eXBlOjpJc05vdE5lc3RlZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVu
Y3Rpb25zKTsKIH0KIAogQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2
bSwgTW9kdWxlUHJvZ3JhbU5vZGUqIG1vZHVsZVByb2dyYW1Ob2RlLCBVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4g
Y29kZUdlbmVyYXRpb25Nb2RlLCBjb25zdCBSZWZQdHI8VERaRW52aXJvbm1lbnRMaW5rPiYgcGFy
ZW50U2NvcGVURFpWYXJpYWJsZXMsIGNvbnN0IFByaXZhdGVOYW1lRW52aXJvbm1lbnQqLCBFQ01B
TW9kZSBlY21hTW9kZSkKQEAgLTk4OCw3ICs5ODgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBNb2R1bGVQcm9ncmFtTm9kZSogbW9kdWxlUHJvZ3JhbU5v
ZAogICAgIH0KIAogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMgPSBt
b2R1bGVQcm9ncmFtTm9kZS0+bGV4aWNhbFZhcmlhYmxlcygpOwotICAgIGluc3RhbnRpYXRlTGV4
aWNhbFZhcmlhYmxlcyhsZXhpY2FsVmFyaWFibGVzLCBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRh
YmxlLCBTY29wZVJlZ2lzdGVyVHlwZTo6QmxvY2ssIGxvb2tVcFZhcktpbmQpOworICAgIGluc3Rh
bnRpYXRlTGV4aWNhbFZhcmlhYmxlcyhsZXhpY2FsVmFyaWFibGVzLCBTY29wZVR5cGU6OkxldENv
bnN0U2NvcGUsIG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUsIFNjb3BlUmVnaXN0ZXJUeXBl
OjpCbG9jaywgbG9va1VwVmFyS2luZCk7CiAKICAgICAvLyBXZSBrZWVwIHRoZSBzeW1ib2wgdGFi
bGUgaW4gdGhlIGNvbnN0YW50IHBvb2wuCiAgICAgUmVnaXN0ZXJJRCogY29uc3RhbnRTeW1ib2xU
YWJsZSA9IG51bGxwdHI7CkBAIC0xODYyLDE1ICsxODYyLDUxIEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIElkZW50aWZpZXJTZXQmJiBz
ZXQpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExvb2tVcFZhcktpbmRGdW5jdG9yPgotYm9vbCBC
eXRlY29kZUdlbmVyYXRvcjo6aW5zdGFudGlhdGVMZXhpY2FsVmFyaWFibGVzKGNvbnN0IFZhcmlh
YmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSwgU2NvcGVSZWdpc3RlclR5cGUgc2NvcGVSZWdpc3RlclR5cGUsIExvb2tVcFZhcktpbmRGdW5j
dG9yIGxvb2tVcFZhcktpbmQpCitib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjppbnN0YW50aWF0ZUxl
eGljYWxWYXJpYWJsZXMoY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxl
cywgU2NvcGVUeXBlIHNjb3BlVHlwZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBTY29wZVJl
Z2lzdGVyVHlwZSBzY29wZVJlZ2lzdGVyVHlwZSwgTG9va1VwVmFyS2luZEZ1bmN0b3IgbG9va1Vw
VmFyS2luZCkKIHsKICAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzID0gZmFsc2U7CiAgICAg
eworICAgICAgICBib29sIGhhc1ByaXZhdGVOYW1lcyA9IGxleGljYWxWYXJpYWJsZXMucHJpdmF0
ZU5hbWVzU2l6ZSgpOworICAgICAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IEBwcml2YXRl
Q2xhc3NCcmFuZCBhbmQgQHByaXZhdGVCcmFuZCBvZmZzZXRzIGFyZSAwIGFuZCAxIHJlc3BlY3Rp
dmVseS4KKyAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQsIHdlIGZpcnN0IGRlZmluZSB0aGVtLCBh
bmQgbGF0ZXIsIHdlIGZpbHRlciB0aGVtIG91dCBmcm9tIGxleGljYWxWYXJpYWJsZXMuCisgICAg
ICAgIGlmIChzY29wZVR5cGUgPT0gU2NvcGVUeXBlOjpDbGFzc1Njb3BlKSB7CisgICAgICAgICAg
ICBpZiAoaGFzUHJpdmF0ZU5hbWVzKSB7CisgICAgICAgICAgICAgICAgaGFzQ2FwdHVyZWRWYXJp
YWJsZXMgPSB0cnVlOworICAgICAgICAgICAgICAgIFZhck9mZnNldCBwcml2YXRlQ2xhc3NCcmFu
ZE9mZnNldCA9IFZhck9mZnNldChzeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xv
Y2tpbmdOZWNlc3NhcnkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUNsYXNzQnJh
bmRPZmZzZXQucmF3T2Zmc2V0KCkgPT0gUHJpdmF0ZU5hbWVFbnRyeTo6cHJpdmF0ZUNsYXNzQnJh
bmRPZmZzZXQpOworICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5hZGQoTm9Mb2NraW5nTmVj
ZXNzYXJ5LCBwcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkucHJpdmF0ZUNsYXNzQnJhbmRQ
cml2YXRlTmFtZSgpLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeSB7IHByaXZhdGVDbGFzc0JyYW5k
T2Zmc2V0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
KSB9KTsKKworICAgICAgICAgICAgICAgIFZhck9mZnNldCBwcml2YXRlQnJhbmRPZmZzZXQgPSBW
YXJPZmZzZXQoc3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQoTm9Mb2NraW5nTmVjZXNz
YXJ5KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVCcmFuZE9mZnNldC5yYXdPZmZz
ZXQoKSA9PSBQcml2YXRlTmFtZUVudHJ5Ojpwcml2YXRlQnJhbmRPZmZzZXQpOworICAgICAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLT5hZGQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBwcm9wZXJ0eU5hbWVz
KCkuYnVpbHRpbk5hbWVzKCkucHJpdmF0ZUJyYW5kUHJpdmF0ZU5hbWUoKS5pbXBsKCksIFN5bWJv
bFRhYmxlRW50cnkgeyBwcml2YXRlQnJhbmRPZmZzZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGxleGljYWxWYXJpYWJsZXMpIHsKICAgICAg
ICAgICAgIEFTU0VSVChlbnRyeS52YWx1ZS5pc0xldCgpIHx8IGVudHJ5LnZhbHVlLmlzQ29uc3Qo
KSB8fCBlbnRyeS52YWx1ZS5pc0Z1bmN0aW9uKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlbnRy
eS52YWx1ZS5pc1ZhcigpKTsKLSAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgc3ltYm9sVGFi
bGVFbnRyeSA9IHN5bWJvbFRhYmxlLT5nZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBlbnRyeS5rZXku
Z2V0KCkpOworCisgICAgICAgICAgICBhdXRvKiBrZXkgPSBlbnRyeS5rZXkuZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoc2NvcGVUeXBlID09IFNjb3BlVHlwZTo6Q2xhc3NTY29wZSkgeworICAgICAg
ICAgICAgICAgIGlmIChoYXNQcml2YXRlTmFtZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGtleSA9PSBwcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkucHJpdmF0ZUNsYXNzQnJhbmRQ
cml2YXRlTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZW50cnkudmFs
dWUuaXNDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gcHJvcGVydHlO
YW1lcygpLmJ1aWx0aW5OYW1lcygpLnByaXZhdGVCcmFuZFByaXZhdGVOYW1lKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChlbnRyeS52YWx1ZS5pc0NvbnN0KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoa2V5ICE9IHBy
b3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5wcml2YXRlQ2xhc3NCcmFuZFByaXZhdGVOYW1l
KCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoa2V5ICE9IHByb3BlcnR5TmFtZXMoKS5i
dWlsdGluTmFtZXMoKS5wcml2YXRlQnJhbmRQcml2YXRlTmFtZSgpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgU3lt
Ym9sVGFibGVFbnRyeSBzeW1ib2xUYWJsZUVudHJ5ID0gc3ltYm9sVGFibGUtPmdldChOb0xvY2tp
bmdOZWNlc3NhcnksIGtleSk7CiAgICAgICAgICAgICBBU1NFUlQoc3ltYm9sVGFibGVFbnRyeS5p
c051bGwoKSk7CisjZW5kaWYKIAogICAgICAgICAgICAgLy8gSW1wb3J0ZWQgYmluZGluZ3Mgd2hp
Y2ggYXJlIG5vdCB0aGUgbmFtZXNwYWNlIGJpbmRpbmdzIGFyZSBub3QgYWxsb2NhdGVkCiAgICAg
ICAgICAgICAvLyBpbiB0aGUgbW9kdWxlIGVudmlyb25tZW50IGFzIHVzdWFsIHZhcmlhYmxlcycg
d2F5LgpAQCAtMTg3OSw3ICsxOTE1LDcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aW5zdGFu
dGlhdGVMZXhpY2FsVmFyaWFibGVzKGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGwKICAgICAg
ICAgICAgIGlmIChlbnRyeS52YWx1ZS5pc0ltcG9ydGVkKCkgJiYgIWVudHJ5LnZhbHVlLmlzSW1w
b3J0ZWROYW1lc3BhY2UoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg
ICAgVmFyS2luZCB2YXJLaW5kID0gbG9va1VwVmFyS2luZChlbnRyeS5rZXkuZ2V0KCksIGVudHJ5
LnZhbHVlKTsKKyAgICAgICAgICAgIFZhcktpbmQgdmFyS2luZCA9IGxvb2tVcFZhcktpbmQoa2V5
LCBlbnRyeS52YWx1ZSk7CiAgICAgICAgICAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0OwogICAgICAg
ICAgICAgaWYgKHZhcktpbmQgPT0gVmFyS2luZDo6U2NvcGUpIHsKICAgICAgICAgICAgICAgICB2
YXJPZmZzZXQgPSBWYXJPZmZzZXQoc3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQoTm9M
b2NraW5nTmVjZXNzYXJ5KSk7CkBAIC0xODk2LDcgKzE5MzIsNyBAQCBib29sIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjppbnN0YW50aWF0ZUxleGljYWxWYXJpYWJsZXMoY29uc3QgVmFyaWFibGVFbnZpcm9u
bWVudCYgbAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IG5l
d0VudHJ5KHZhck9mZnNldCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVudHJ5LnZhbHVlLmlzQ29u
c3QoKSA/IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSA6IFByb3BlcnR5QXR0cmlidXRlOjpO
b25lKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS0+YWRkKE5vTG9ja2luZ05lY2Vzc2FyeSwg
ZW50cnkua2V5LmdldCgpLCBuZXdFbnRyeSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS0+YWRk
KE5vTG9ja2luZ05lY2Vzc2FyeSwga2V5LCBuZXdFbnRyeSk7CiAKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBvbmx5IGRvIHRoaXMgaWYgdGhlcmUgaXMgYW4gZXZhbCgpIHdpdGhpbiBhIG5lc3RlZCBz
Y29wZSAtLS0gb3RoZXJ3aXNlIGl0IGlzbid0IG5lZWRlZC4KICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY2NjMKQEAgLTE5MDUsNyArMTk0
MSw3IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6Omluc3RhbnRpYXRlTGV4aWNhbFZhcmlhYmxl
cyhjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsCiAgICAgICAgICAgICBpZiAoIXByaXZhdGVF
bnZpcm9ubWVudCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgYXV0
byBmaW5kUmVzdWx0ID0gcHJpdmF0ZUVudmlyb25tZW50LT5maW5kKGVudHJ5LmtleS5nZXQoKSk7
CisgICAgICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBwcml2YXRlRW52aXJvbm1lbnQtPmZpbmQo
a2V5KTsKIAogICAgICAgICAgICAgaWYgKGZpbmRSZXN1bHQgPT0gcHJpdmF0ZUVudmlyb25tZW50
LT5lbmQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE5NDIsMTEgKzE5NzgsMTEg
QEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFByZWZpbGxTdGFja1REWlZhcmlhYmxlcyhj
b25zdCBWYXJpYWJsZUVudmlyb25tZW50JgogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6cHVzaExleGljYWxTY29wZShWYXJpYWJsZUVudmlyb25tZW50Tm9kZSogbm9kZSwgVERa
Q2hlY2tPcHRpbWl6YXRpb24gdGR6Q2hlY2tPcHRpbWl6YXRpb24sIE5lc3RlZFNjb3BlVHlwZSBu
ZXN0ZWRTY29wZVR5cGUsIFJlZ2lzdGVySUQqKiBjb25zdGFudFN5bWJvbFRhYmxlUmVzdWx0LCBi
b29sIHNob3VsZEluaXRpYWxpemVCbG9ja1Njb3BlZEZ1bmN0aW9ucykKK3ZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OnB1c2hMZXhpY2FsU2NvcGUoVmFyaWFibGVFbnZpcm9ubWVudE5vZGUqIG5vZGUs
IFNjb3BlVHlwZSBzY29wZVR5cGUsIFREWkNoZWNrT3B0aW1pemF0aW9uIHRkekNoZWNrT3B0aW1p
emF0aW9uLCBOZXN0ZWRTY29wZVR5cGUgbmVzdGVkU2NvcGVUeXBlLCBSZWdpc3RlcklEKiogY29u
c3RhbnRTeW1ib2xUYWJsZVJlc3VsdCwgYm9vbCBzaG91bGRJbml0aWFsaXplQmxvY2tTY29wZWRG
dW5jdGlvbnMpCiB7CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQgPSBub2Rl
LT5sZXhpY2FsVmFyaWFibGVzKCk7CiAgICAgUmVnaXN0ZXJJRCogY29uc3RhbnRTeW1ib2xUYWJs
ZVJlc3VsdFRlbXAgPSBudWxscHRyOwotICAgIHB1c2hMZXhpY2FsU2NvcGVJbnRlcm5hbChlbnZp
cm9ubWVudCwgdGR6Q2hlY2tPcHRpbWl6YXRpb24sIG5lc3RlZFNjb3BlVHlwZSwgJmNvbnN0YW50
U3ltYm9sVGFibGVSZXN1bHRUZW1wLCBURFpSZXF1aXJlbWVudDo6VW5kZXJURFosIFNjb3BlVHlw
ZTo6TGV0Q29uc3RTY29wZSwgU2NvcGVSZWdpc3RlclR5cGU6OkJsb2NrKTsKKyAgICBwdXNoTGV4
aWNhbFNjb3BlSW50ZXJuYWwoZW52aXJvbm1lbnQsIHRkekNoZWNrT3B0aW1pemF0aW9uLCBuZXN0
ZWRTY29wZVR5cGUsICZjb25zdGFudFN5bWJvbFRhYmxlUmVzdWx0VGVtcCwgVERaUmVxdWlyZW1l
bnQ6OlVuZGVyVERaLCBzY29wZVR5cGUsIFNjb3BlUmVnaXN0ZXJUeXBlOjpCbG9jayk7CiAKICAg
ICBpZiAoc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rpb25zKQogICAgICAgICBpbml0
aWFsaXplQmxvY2tTY29wZWRGdW5jdGlvbnMoZW52aXJvbm1lbnQsIG5vZGUtPmZ1bmN0aW9uU3Rh
Y2soKSwgY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdFRlbXApOwpAQCAtMTk3MCw2ICsyMDA2LDcg
QEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaExleGljYWxTY29wZUludGVybmFsKFZhcmlh
YmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW4KICAgICAgICAgc3ltYm9sVGFibGUtPnNldFNjb3Bl
VHlwZShTeW1ib2xUYWJsZTo6U2NvcGVUeXBlOjpDYXRjaFNjb3BlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBTY29wZVR5cGU6OkxldENvbnN0U2NvcGU6CisgICAgY2FzZSBTY29wZVR5cGU6
OkNsYXNzU2NvcGU6CiAgICAgICAgIHN5bWJvbFRhYmxlLT5zZXRTY29wZVR5cGUoU3ltYm9sVGFi
bGU6OlNjb3BlVHlwZTo6TGV4aWNhbFNjb3BlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBT
Y29wZVR5cGU6OkZ1bmN0aW9uTmFtZVNjb3BlOgpAQCAtMTk4NCw3ICsyMDIxLDcgQEAgdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cHVzaExleGljYWxTY29wZUludGVybmFsKFZhcmlhYmxlRW52aXJv
bm1lbnQmIGVudmlyb25tZW4KICAgICAgICAgcmV0dXJuIGVudHJ5LmlzQ2FwdHVyZWQoKSA/IFZh
cktpbmQ6OlNjb3BlIDogVmFyS2luZDo6U3RhY2s7CiAgICAgfTsKIAotICAgIGJvb2wgaGFzQ2Fw
dHVyZWRWYXJpYWJsZXMgPSBpbnN0YW50aWF0ZUxleGljYWxWYXJpYWJsZXMoZW52aXJvbm1lbnQs
IHN5bWJvbFRhYmxlLCBzY29wZVJlZ2lzdGVyVHlwZSwgbG9va1VwVmFyS2luZCk7CisgICAgYm9v
bCBoYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGluc3RhbnRpYXRlTGV4aWNhbFZhcmlhYmxlcyhlbnZp
cm9ubWVudCwgc2NvcGVUeXBlLCBzeW1ib2xUYWJsZSwgc2NvcGVSZWdpc3RlclR5cGUsIGxvb2tV
cFZhcktpbmQpOwogCiAgICAgUmVnaXN0ZXJJRCogbmV3U2NvcGUgPSBudWxscHRyOwogICAgIFJl
Z2lzdGVySUQqIGNvbnN0YW50U3ltYm9sVGFibGUgPSBudWxscHRyOwpAQCAtMjc1OSw3ICsyNzk2
LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWZpbmVQcml2YXRlRmll
bGQoUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXIKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDcmVhdGVQcml2YXRlQnJhbmQoUmVnaXN0ZXJJRCog
c2NvcGUsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKK3ZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRDcmVhdGVQcml2YXRlQnJhbmQoY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90RW5kKQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBjcmVhdGVQcml2YXRl
U3ltYm9sID0gbW92ZUxpbmtUaW1lQ29uc3RhbnQobnVsbHB0ciwgTGlua1RpbWVDb25zdGFudDo6
Y3JlYXRlUHJpdmF0ZVN5bWJvbCk7CiAKQEAgLTI3NjksNyArMjgwNiw3IEBAIHZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRDcmVhdGVQcml2YXRlQnJhbmQoUmVnaXN0ZXJJRCogc2NvcGUsIGNv
bnN0IEpTVGV4dFBvCiAKICAgICBWYXJpYWJsZSBwcml2YXRlQnJhbmRWYXIgPSB2YXJpYWJsZShw
cm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkucHJpdmF0ZUJyYW5kUHJpdmF0ZU5hbWUoKSk7
CiAKLSAgICBlbWl0UHV0VG9TY29wZShzY29wZSwgcHJpdmF0ZUJyYW5kVmFyLCBuZXdTeW1ib2ws
IERvTm90VGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbk1vZGU6OkNvbnN0SW5pdGlhbGl6
YXRpb24pOworICAgIGVtaXRQdXRUb1Njb3BlKHNjb3BlUmVnaXN0ZXIoKSwgcHJpdmF0ZUJyYW5k
VmFyLCBuZXdTeW1ib2wsIERvTm90VGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbk1vZGU6
OkNvbnN0SW5pdGlhbGl6YXRpb24pOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
SW5zdGFsbFByaXZhdGVCcmFuZChSZWdpc3RlcklEKiB0YXJnZXQpCkBAIC0yNzg5LDEwICsyODI2
LDE2IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbnN0YWxsUHJpdmF0ZUNsYXNzQnJh
bmQoUmVnaXN0ZXJJRCogdGFyZ2V0KQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldFByaXZhdGVCcmFuZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBi
b29sIGlzU3RhdGljKQogewotICAgIFZhcmlhYmxlIHByaXZhdGVCcmFuZFZhciA9IGlzU3RhdGlj
Ci0gICAgICAgID8gdmFyaWFibGUocHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLnByaXZh
dGVDbGFzc0JyYW5kUHJpdmF0ZU5hbWUoKSkKLSAgICAgICAgOiB2YXJpYWJsZShwcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkucHJpdmF0ZUJyYW5kUHJpdmF0ZU5hbWUoKSk7Ci0gICAgcmV0
dXJuIGVtaXRHZXRGcm9tU2NvcGUoZHN0LCBzY29wZSwgcHJpdmF0ZUJyYW5kVmFyLCBUaHJvd0lm
Tm90Rm91bmQpOworICAgIEFTU0VSVChzY29wZSk7CisgICAgT3BHZXRGcm9tU2NvcGU6OmVtaXQo
CisgICAgICAgIHRoaXMsCisgICAgICAgIGtpbGwoZHN0KSwKKyAgICAgICAgc2NvcGUsCisgICAg
ICAgIGFkZENvbnN0YW50KGlzU3RhdGljID8gcHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygp
LnByaXZhdGVDbGFzc0JyYW5kUHJpdmF0ZU5hbWUoKSA6IHByb3BlcnR5TmFtZXMoKS5idWlsdGlu
TmFtZXMoKS5wcml2YXRlQnJhbmRQcml2YXRlTmFtZSgpKSwKKyAgICAgICAgR2V0UHV0SW5mbyhU
aHJvd0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZhciwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJ
bml0aWFsaXphdGlvbiwgZWNtYU1vZGUoKSksCisgICAgICAgIGxvY2FsU2NvcGVEZXB0aCgpLAor
ICAgICAgICBpc1N0YXRpYyA/IFByaXZhdGVOYW1lRW50cnk6OnByaXZhdGVDbGFzc0JyYW5kT2Zm
c2V0IDogUHJpdmF0ZU5hbWVFbnRyeTo6cHJpdmF0ZUJyYW5kT2Zmc2V0KTsKKyAgICByZXR1cm4g
ZHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFByaXZhdGVGaWVs
ZFB1dChSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCog
dmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggNWE3Yzc2NmQ1MTEzZTAyNTQyY2Q3ZmMzOTY1ODdmMTU4
NGFmMzY5ZC4uMTI5Y2VjZmRkMDhmNzhmZWUyZjVhODlmNTc3YjM5NDlkMTEwYWQwNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaApAQCAtODQxLDcgKzg0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0R2V0UHJpdmF0ZU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBi
YXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNQ
cml2YXRlTmFtZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IHByb3BlcnR5KTsKIAotICAgICAgICB2b2lkIGVtaXRDcmVhdGVQcml2YXRlQnJhbmQoUmVnaXN0
ZXJJRCogZHN0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOworICAgICAg
ICB2b2lkIGVtaXRDcmVhdGVQcml2YXRlQnJhbmQoY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90RW5kKTsKICAgICAgICAgdm9pZCBlbWl0SW5zdGFsbFByaXZhdGVCcmFuZChSZWdpc3Rl
cklEKiB0YXJnZXQpOwogICAgICAgICB2b2lkIGVtaXRJbnN0YWxsUHJpdmF0ZUNsYXNzQnJhbmQo
UmVnaXN0ZXJJRCogdGFyZ2V0KTsKIApAQCAtMTA5OCwxNSArMTA5OCwxNSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBlbnVtIGNsYXNzIFREWkNoZWNrT3B0aW1pemF0aW9uIHsgT3B0aW1p
emUsIERvTm90T3B0aW1pemUgfTsKICAgICAgICAgZW51bSBjbGFzcyBOZXN0ZWRTY29wZVR5cGUg
eyBJc05lc3RlZCwgSXNOb3ROZXN0ZWQgfTsKKyAgICAgICAgZW51bSBjbGFzcyBTY29wZVR5cGUg
eyBDYXRjaFNjb3BlLCBMZXRDb25zdFNjb3BlLCBGdW5jdGlvbk5hbWVTY29wZSwgQ2xhc3NTY29w
ZSB9OwogICAgIHByaXZhdGU6CiAgICAgICAgIGVudW0gY2xhc3MgVERaUmVxdWlyZW1lbnQgeyBV
bmRlclREWiwgTm90VW5kZXJURFogfTsKLSAgICAgICAgZW51bSBjbGFzcyBTY29wZVR5cGUgeyBD
YXRjaFNjb3BlLCBMZXRDb25zdFNjb3BlLCBGdW5jdGlvbk5hbWVTY29wZSB9OwogICAgICAgICBl
bnVtIGNsYXNzIFNjb3BlUmVnaXN0ZXJUeXBlIHsgVmFyLCBCbG9jayB9OwogICAgICAgICB2b2lk
IHB1c2hMZXhpY2FsU2NvcGVJbnRlcm5hbChWYXJpYWJsZUVudmlyb25tZW50JiwgVERaQ2hlY2tP
cHRpbWl6YXRpb24sIE5lc3RlZFNjb3BlVHlwZSwgUmVnaXN0ZXJJRCoqIGNvbnN0YW50U3ltYm9s
VGFibGVSZXN1bHQsIFREWlJlcXVpcmVtZW50LCBTY29wZVR5cGUsIFNjb3BlUmVnaXN0ZXJUeXBl
KTsKICAgICAgICAgdm9pZCBpbml0aWFsaXplQmxvY2tTY29wZWRGdW5jdGlvbnMoVmFyaWFibGVF
bnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smLCBSZWdpc3RlcklEKiBjb25zdGFudFN5bWJvbFRh
YmxlKTsKICAgICAgICAgdm9pZCBwb3BMZXhpY2FsU2NvcGVJbnRlcm5hbChWYXJpYWJsZUVudmly
b25tZW50Jik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvb2tVcFZhcktpbmRGdW5jdG9y
PgotICAgICAgICBib29sIGluc3RhbnRpYXRlTGV4aWNhbFZhcmlhYmxlcyhjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50JiwgU3ltYm9sVGFibGUqLCBTY29wZVJlZ2lzdGVyVHlwZSwgTG9va1VwVmFy
S2luZEZ1bmN0b3IpOworICAgICAgICBib29sIGluc3RhbnRpYXRlTGV4aWNhbFZhcmlhYmxlcyhj
b25zdCBWYXJpYWJsZUVudmlyb25tZW50JiwgU2NvcGVUeXBlLCBTeW1ib2xUYWJsZSosIFNjb3Bl
UmVnaXN0ZXJUeXBlLCBMb29rVXBWYXJLaW5kRnVuY3Rvcik7CiAgICAgICAgIHZvaWQgZW1pdFBy
ZWZpbGxTdGFja1REWlZhcmlhYmxlcyhjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiwgU3ltYm9s
VGFibGUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFBhcmVudFNjb3BlKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUpOwogICAgICAgICB2b2lkIGVtaXRQdXNoRnVuY3Rp
b25OYW1lU2NvcGUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVl
LCBib29sIGlzQ2FwdHVyZWQpOwpAQCAtMTEyOCw3ICsxMTI4LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgaXNTdXBlclVzZWRJbklubmVyQXJyb3dGdW5jdGlvbigpOwogICAgICAg
ICBib29sIGlzU3VwZXJDYWxsVXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCk7CiAgICAgICAgIGJv
b2wgaXNUaGlzVXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCk7Ci0gICAgICAgIHZvaWQgcHVzaExl
eGljYWxTY29wZShWYXJpYWJsZUVudmlyb25tZW50Tm9kZSosIFREWkNoZWNrT3B0aW1pemF0aW9u
LCBOZXN0ZWRTY29wZVR5cGUgPSBOZXN0ZWRTY29wZVR5cGU6OklzTm90TmVzdGVkLCBSZWdpc3Rl
cklEKiogY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5p
dGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rpb25zID0gdHJ1ZSk7CisgICAgICAgIHZvaWQgcHVzaExl
eGljYWxTY29wZShWYXJpYWJsZUVudmlyb25tZW50Tm9kZSosIFNjb3BlVHlwZSwgVERaQ2hlY2tP
cHRpbWl6YXRpb24sIE5lc3RlZFNjb3BlVHlwZSA9IE5lc3RlZFNjb3BlVHlwZTo6SXNOb3ROZXN0
ZWQsIFJlZ2lzdGVySUQqKiBjb25zdGFudFN5bWJvbFRhYmxlUmVzdWx0ID0gbnVsbHB0ciwgYm9v
bCBzaG91bGRJbml0aWFsaXplQmxvY2tTY29wZWRGdW5jdGlvbnMgPSB0cnVlKTsKKyAgICAgICAg
dm9pZCBwdXNoQ2xhc3NMZXhpY2FsU2NvcGUoVmFyaWFibGVFbnZpcm9ubWVudE5vZGUqKTsKICAg
ICAgICAgdm9pZCBwb3BMZXhpY2FsU2NvcGUoVmFyaWFibGVFbnZpcm9ubWVudE5vZGUqKTsKICAg
ICAgICAgdm9pZCBwcmVwYXJlTGV4aWNhbFNjb3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24oVmFy
aWFibGVFbnZpcm9ubWVudE5vZGUqLCBSZWdpc3RlcklEKiBsb29wU3ltYm9sVGFibGUpOwogICAg
ICAgICBpbnQgbGFiZWxTY29wZURlcHRoKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggYWRhZWFhMTRiYWVl
ZWZkZDkxMjI5NjY4NDhmYTM1MTEwM2U4MTI5MS4uMjkzYWUxNWVjMTdhZDFhNDJkNmEyMmU1NGY4
NGU0N2VmNmMyZDAyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtOTgyLDcgKzk4Miw3IEBAIFJlZ2lzdGVySUQqIEJh
c2VEb3ROb2RlOjplbWl0R2V0UHJvcGVydHlWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpCiAgICAgICAgIGlmIChwcml2YXRlVHJhaXRzLmlzTWV0aG9kKCkpIHsKICAgICAg
ICAgICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShpZGVudGlmaWVyTmFtZSk7
CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJl
c29sdmVTY29wZShudWxscHRyLCB2YXIpOwotCisgICAgICAgICAgICBBU1NFUlQoc2NvcGUpOyAv
LyBQcml2YXRlIG5hbWVzIGFyZSBhbHdheXMgY2FwdHVyZWQuCiAgICAgICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJpdmF0ZUJyYW5kU3ltYm9sID0gZ2VuZXJhdG9yLmVtaXRHZXRQcml2YXRl
QnJhbmQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgcHJpdmF0ZVRyYWl0
cy5pc1N0YXRpYygpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2hlY2tQcml2YXRlQnJh
bmQoYmFzZSwgcHJpdmF0ZUJyYW5kU3ltYm9sLmdldCgpLCBwcml2YXRlVHJhaXRzLmlzU3RhdGlj
KCkpOwogCkBAIC05OTIsNyArOTkyLDcgQEAgUmVnaXN0ZXJJRCogQmFzZURvdE5vZGU6OmVtaXRH
ZXRQcm9wZXJ0eVZhbHVlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2kKICAgICAg
ICAgaWYgKHByaXZhdGVUcmFpdHMuaXNHZXR0ZXIoKSkgewogICAgICAgICAgICAgVmFyaWFibGUg
dmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50aWZpZXJOYW1lKTsKICAgICAgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxw
dHIsIHZhcik7Ci0KKyAgICAgICAgICAgIEFTU0VSVChzY29wZSk7IC8vIFByaXZhdGUgbmFtZXMg
YXJlIGFsd2F5cyBjYXB0dXJlZC4KICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcml2
YXRlQnJhbmRTeW1ib2wgPSBnZW5lcmF0b3IuZW1pdEdldFByaXZhdGVCcmFuZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBwcml2YXRlVHJhaXRzLmlzU3RhdGljKCkpOwog
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDaGVja1ByaXZhdGVCcmFuZChiYXNlLCBwcml2YXRl
QnJhbmRTeW1ib2wuZ2V0KCksIHByaXZhdGVUcmFpdHMuaXNTdGF0aWMoKSk7CiAKQEAgLTEwMDcs
NyArMTAwNyw3IEBAIFJlZ2lzdGVySUQqIEJhc2VEb3ROb2RlOjplbWl0R2V0UHJvcGVydHlWYWx1
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAgICAgICAgICAgICAvLyBXZSBu
ZWVkIHRvIHBlcmZvcm0gYnJhbmQgY2hlY2sgdG8gZm9sbG93IHRoZSBzcGVjCiAgICAgICAgICAg
ICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoaWRlbnRpZmllck5hbWUpOwogICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZl
U2NvcGUobnVsbHB0ciwgdmFyKTsKLQorICAgICAgICAgICAgQVNTRVJUKHNjb3BlKTsgLy8gUHJp
dmF0ZSBuYW1lcyBhcmUgYWx3YXlzIGNhcHR1cmVkLgogICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByaXZhdGVCcmFuZFN5bWJvbCA9IGdlbmVyYXRvci5lbWl0R2V0UHJpdmF0ZUJyYW5k
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIHByaXZhdGVUcmFpdHMuaXNT
dGF0aWMoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENoZWNrUHJpdmF0ZUJyYW5kKGJh
c2UsIHByaXZhdGVCcmFuZFN5bWJvbC5nZXQoKSwgcHJpdmF0ZVRyYWl0cy5pc1N0YXRpYygpKTsK
ICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3dUeXBlRXJyb3IoIlRyeWluZyB0byBhY2Nl
c3MgYW4gdW5kZWZpbmVkIHByaXZhdGUgZ2V0dGVyIik7CkBAIC0xMDE5LDYgKzEwMTksNyBAQCBS
ZWdpc3RlcklEKiBCYXNlRG90Tm9kZTo6ZW1pdEdldFByb3BlcnR5VmFsdWUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaQogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCF2YXIu
bG9jYWwoKSwgIlByaXZhdGUgRmllbGQgbmFtZXMgbXVzdCBiZSBzdG9yZWQgaW4gY2FwdHVyZWQg
dmFyaWFibGVzIik7CiAKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJh
dG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKKyAgICAgICAgQVNTRVJUKHNjb3Bl
KTsgLy8gUHJpdmF0ZSBuYW1lcyBhcmUgYWx3YXlzIGNhcHR1cmVkLgogICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJpdmF0ZU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKHByaXZhdGVOYW1lLmdldCgpLCBzY29wZS5n
ZXQoKSwgdmFyLCBEb05vdFRocm93SWZOb3RGb3VuZCk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdEdldFByaXZhdGVOYW1lKGRzdCwgYmFzZSwgcHJpdmF0ZU5hbWUuZ2V0KCkpOwpAQCAt
MTA0Nyw3ICsxMDQ4LDcgQEAgUmVnaXN0ZXJJRCogQmFzZURvdE5vZGU6OmVtaXRQdXRQcm9wZXJ0
eShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlckkKICAgICAgICAgaWYgKHBy
aXZhdGVUcmFpdHMuaXNTZXR0ZXIoKSkgewogICAgICAgICAgICAgVmFyaWFibGUgdmFyID0gZ2Vu
ZXJhdG9yLnZhcmlhYmxlKGlkZW50aWZpZXJOYW1lKTsKICAgICAgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7
Ci0KKyAgICAgICAgICAgIEFTU0VSVChzY29wZSk7IC8vIFByaXZhdGUgbmFtZXMgYXJlIGFsd2F5
cyBjYXB0dXJlZC4KICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcml2YXRlQnJhbmRT
eW1ib2wgPSBnZW5lcmF0b3IuZW1pdEdldFByaXZhdGVCcmFuZChnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIHNjb3BlLmdldCgpLCBwcml2YXRlVHJhaXRzLmlzU3RhdGljKCkpOwogICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRDaGVja1ByaXZhdGVCcmFuZChiYXNlLCBwcml2YXRlQnJhbmRTeW1i
b2wuZ2V0KCksIHByaXZhdGVUcmFpdHMuaXNTdGF0aWMoKSk7CiAKQEAgLTEwNjQsNyArMTA2NSw3
IEBAIFJlZ2lzdGVySUQqIEJhc2VEb3ROb2RlOjplbWl0UHV0UHJvcGVydHkoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJCiAgICAgICAgIGlmIChwcml2YXRlVHJhaXRzLmlz
R2V0dGVyKCkgfHwgcHJpdmF0ZVRyYWl0cy5pc01ldGhvZCgpKSB7CiAgICAgICAgICAgICBWYXJp
YWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoaWRlbnRpZmllck5hbWUpOwogICAgICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUo
bnVsbHB0ciwgdmFyKTsKLQorICAgICAgICAgICAgQVNTRVJUKHNjb3BlKTsgLy8gUHJpdmF0ZSBu
YW1lcyBhcmUgYWx3YXlzIGNhcHR1cmVkLgogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHByaXZhdGVCcmFuZFN5bWJvbCA9IGdlbmVyYXRvci5lbWl0R2V0UHJpdmF0ZUJyYW5kKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIHByaXZhdGVUcmFpdHMuaXNTdGF0aWMo
KSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENoZWNrUHJpdmF0ZUJyYW5kKGJhc2UsIHBy
aXZhdGVCcmFuZFN5bWJvbC5nZXQoKSwgcHJpdmF0ZVRyYWl0cy5pc1N0YXRpYygpKTsKIApAQCAt
MTA3Nyw2ICsxMDc4LDcgQEAgUmVnaXN0ZXJJRCogQmFzZURvdE5vZGU6OmVtaXRQdXRQcm9wZXJ0
eShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlckkKICAgICAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghdmFyLmxvY2FsKCksICJQcml2YXRlIEZpZWxkIG5hbWVzIG11c3QgYmUg
c3RvcmVkIGluIGNhcHR1cmVkIHZhcmlhYmxlcyIpOwogCiAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7Cisg
ICAgICAgIEFTU0VSVChzY29wZSk7IC8vIFByaXZhdGUgbmFtZXMgYXJlIGFsd2F5cyBjYXB0dXJl
ZC4KICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByaXZhdGVOYW1lID0gZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShwcml2YXRl
TmFtZS5nZXQoKSwgc2NvcGUuZ2V0KCksIHZhciwgRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwogICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQcml2YXRlRmllbGRQdXQoYmFzZSwgcHJpdmF0ZU5h
bWUuZ2V0KCksIHZhbHVlKTsKQEAgLTI0MTcsNiArMjQxOSw3IEBAIFJlZ2lzdGVySUQqIFBvc3Rm
aXhOb2RlOjplbWl0RG90KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKICAgICAgICAgaWYgKHByaXZhdGVUcmFpdHMuaXNGaWVsZCgpKSB7CiAgICAgICAgICAg
ICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoaWRlbnQpOwogICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVs
bHB0ciwgdmFyKTsKKyAgICAgICAgICAgIEFTU0VSVChzY29wZSk7IC8vIFByaXZhdGUgbmFtZXMg
YXJlIGFsd2F5cyBjYXB0dXJlZC4KICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcml2
YXRlTmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0R2V0RnJvbVNjb3BlKHByaXZhdGVOYW1lLmdldCgpLCBzY29wZS5nZXQoKSwgdmFyLCBE
b05vdFRocm93SWZOb3RGb3VuZCk7CiAKQEAgLTI0MzEsNyArMjQzNCw3IEBAIFJlZ2lzdGVySUQq
IFBvc3RmaXhOb2RlOjplbWl0RG90KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKICAgICAgICAgaWYgKHByaXZhdGVUcmFpdHMuaXNNZXRob2QoKSkgewogICAg
ICAgICAgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGlkZW50KTsKICAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNj
b3BlKG51bGxwdHIsIHZhcik7Ci0KKyAgICAgICAgICAgIEFTU0VSVChzY29wZSk7IC8vIFByaXZh
dGUgbmFtZXMgYXJlIGFsd2F5cyBjYXB0dXJlZC4KICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBwcml2YXRlQnJhbmRTeW1ib2wgPSBnZW5lcmF0b3IuZW1pdEdldFByaXZhdGVCcmFuZChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBwcml2YXRlVHJhaXRzLmlzU3Rh
dGljKCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDaGVja1ByaXZhdGVCcmFuZChiYXNl
LmdldCgpLCBwcml2YXRlQnJhbmRTeW1ib2wuZ2V0KCksIHByaXZhdGVUcmFpdHMuaXNTdGF0aWMo
KSk7CiAKQEAgLTI0NDIsNyArMjQ0NSw3IEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0
RG90KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIAogICAg
ICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoaWRlbnQpOwogICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxs
cHRyLCB2YXIpOwotCisgICAgICAgIEFTU0VSVChzY29wZSk7IC8vIFByaXZhdGUgbmFtZXMgYXJl
IGFsd2F5cyBjYXB0dXJlZC4KICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByaXZhdGVCcmFu
ZFN5bWJvbCA9IGdlbmVyYXRvci5lbWl0R2V0UHJpdmF0ZUJyYW5kKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgc2NvcGUuZ2V0KCksIHByaXZhdGVUcmFpdHMuaXNTdGF0aWMoKSk7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0Q2hlY2tQcml2YXRlQnJhbmQoYmFzZS5nZXQoKSwgcHJpdmF0ZUJyYW5k
U3ltYm9sLmdldCgpLCBwcml2YXRlVHJhaXRzLmlzU3RhdGljKCkpOwogCkBAIC0yNzIwLDcgKzI3
MjMsNyBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0RG90KEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgaWYgKHByaXZhdGVUcmFpdHMu
aXNNZXRob2QoKSkgewogICAgICAgICAgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlh
YmxlKGlkZW50KTsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVy
YXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7Ci0KKyAgICAgICAgICAgIEFTU0VS
VChzY29wZSk7IC8vIFByaXZhdGUgbmFtZXMgYXJlIGFsd2F5cyBjYXB0dXJlZC4KICAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcml2YXRlQnJhbmRTeW1ib2wgPSBnZW5lcmF0b3IuZW1p
dEdldFByaXZhdGVCcmFuZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBw
cml2YXRlVHJhaXRzLmlzU3RhdGljKCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDaGVj
a1ByaXZhdGVCcmFuZChiYXNlLmdldCgpLCBwcml2YXRlQnJhbmRTeW1ib2wuZ2V0KCksIHByaXZh
dGVUcmFpdHMuaXNTdGF0aWMoKSk7CiAKQEAgLTI3MzEsNyArMjczNCw3IEBAIFJlZ2lzdGVySUQq
IFByZWZpeE5vZGU6OmVtaXREb3QoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQogCiAgICAgICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShp
ZGVudCk7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0
UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7Ci0KKyAgICAgICAgQVNTRVJUKHNjb3BlKTsgLy8g
UHJpdmF0ZSBuYW1lcyBhcmUgYWx3YXlzIGNhcHR1cmVkLgogICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcHJpdmF0ZUJyYW5kU3ltYm9sID0gZ2VuZXJhdG9yLmVtaXRHZXRQcml2YXRlQnJhbmQo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgcHJpdmF0ZVRyYWl0cy5pc1N0
YXRpYygpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDaGVja1ByaXZhdGVCcmFuZChiYXNlLmdl
dCgpLCBwcml2YXRlQnJhbmRTeW1ib2wuZ2V0KCksIHByaXZhdGVUcmFpdHMuaXNTdGF0aWMoKSk7
CiAKQEAgLTMyMTMsNiArMzIxNiw3IEBAIFJlZ2lzdGVySUQqIEluTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAg
YXV0byBwcml2YXRlVHJhaXRzID0gZ2VuZXJhdG9yLmdldFByaXZhdGVUcmFpdHMoaWRlbnRpZmll
cik7CiAgICAgICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShpZGVudGlmaWVy
KTsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNv
bHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlKTsgLy8gUHJpdmF0
ZSBuYW1lcyBhcmUgYWx3YXlzIGNhcHR1cmVkLgogCiAgICAgICAgIGlmIChwcml2YXRlVHJhaXRz
LmlzRmllbGQoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByaXZhdGVOYW1l
ID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBz
Y29wZS5nZXQoKSwgdmFyLCBEb05vdFRocm93SWZOb3RGb3VuZCk7CkBAIC0zODE3LDcgKzM4MjEs
NyBAQCB2b2lkIEJsb2NrTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAoIW1fc3RhdGVtZW50cykKICAgICAg
ICAgcmV0dXJuOwotICAgIGdlbmVyYXRvci5wdXNoTGV4aWNhbFNjb3BlKHRoaXMsIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1pemUsIEJ5dGVjb2RlR2VuZXJh
dG9yOjpOZXN0ZWRTY29wZVR5cGU6OklzTmVzdGVkKTsKKyAgICBnZW5lcmF0b3IucHVzaExleGlj
YWxTY29wZSh0aGlzLCBCeXRlY29kZUdlbmVyYXRvcjo6U2NvcGVUeXBlOjpMZXRDb25zdFNjb3Bl
LCBCeXRlY29kZUdlbmVyYXRvcjo6VERaQ2hlY2tPcHRpbWl6YXRpb246Ok9wdGltaXplLCBCeXRl
Y29kZUdlbmVyYXRvcjo6TmVzdGVkU2NvcGVUeXBlOjpJc05lc3RlZCk7CiAgICAgbV9zdGF0ZW1l
bnRzLT5lbWl0Qnl0ZWNvZGUoZ2VuZXJhdG9yLCBkc3QpOwogICAgIGdlbmVyYXRvci5wb3BMZXhp
Y2FsU2NvcGUodGhpcyk7CiB9CkBAIC00MDMwLDcgKzQwMzQsNyBAQCB2b2lkIEZvck5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CiAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFi
ZWxTY29wZTo6TG9vcCk7CiAKICAgICBSZWdpc3RlcklEKiBmb3JMb29wU3ltYm9sVGFibGUgPSBu
dWxscHRyOwotICAgIGdlbmVyYXRvci5wdXNoTGV4aWNhbFNjb3BlKHRoaXMsIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1pemUsIEJ5dGVjb2RlR2VuZXJhdG9y
OjpOZXN0ZWRTY29wZVR5cGU6OklzTmVzdGVkLCAmZm9yTG9vcFN5bWJvbFRhYmxlKTsKKyAgICBn
ZW5lcmF0b3IucHVzaExleGljYWxTY29wZSh0aGlzLCBCeXRlY29kZUdlbmVyYXRvcjo6U2NvcGVU
eXBlOjpMZXRDb25zdFNjb3BlLCBCeXRlY29kZUdlbmVyYXRvcjo6VERaQ2hlY2tPcHRpbWl6YXRp
b246Ok9wdGltaXplLCBCeXRlY29kZUdlbmVyYXRvcjo6TmVzdGVkU2NvcGVUeXBlOjpJc05lc3Rl
ZCwgJmZvckxvb3BTeW1ib2xUYWJsZSk7CiAKICAgICBpZiAobV9leHByMSkKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXROb2RlKGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCksIG1fZXhwcjEpOwpAQCAt
NDE4MSw3ICs0MTg1LDcgQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAgICAgUmVmPExhYmVsPiBlbmQg
PSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xU
YWJsZSA9IG51bGxwdHI7Ci0gICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0
ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVH
ZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNOZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUp
OworICAgIGdlbmVyYXRvci5wdXNoTGV4aWNhbFNjb3BlKHRoaXMsIEJ5dGVjb2RlR2VuZXJhdG9y
OjpTY29wZVR5cGU6OkxldENvbnN0U2NvcGUsIEJ5dGVjb2RlR2VuZXJhdG9yOjpURFpDaGVja09w
dGltaXphdGlvbjo6T3B0aW1pemUsIEJ5dGVjb2RlR2VuZXJhdG9yOjpOZXN0ZWRTY29wZVR5cGU6
OklzTmVzdGVkLCAmZm9yTG9vcFN5bWJvbFRhYmxlKTsKIAogICAgIGlmIChtX2xleHByLT5pc0Fz
c2lnblJlc29sdmVOb2RlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShnZW5lcmF0b3Iu
aWdub3JlZFJlc3VsdCgpLCBtX2xleHByKTsKQEAgLTQzNTAsNyArNDM1NCw3IEBAIHZvaWQgRm9y
T2ZOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoZHN0LCBqc1VuZGVmaW5lZCgp
KTsKIAogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7Ci0gICAg
Z2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNo
ZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3Bl
VHlwZTo6SXNOZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOworICAgIGdlbmVyYXRvci5wdXNo
TGV4aWNhbFNjb3BlKHRoaXMsIEJ5dGVjb2RlR2VuZXJhdG9yOjpTY29wZVR5cGU6OkxldENvbnN0
U2NvcGUsIEJ5dGVjb2RlR2VuZXJhdG9yOjpURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1pemUs
IEJ5dGVjb2RlR2VuZXJhdG9yOjpOZXN0ZWRTY29wZVR5cGU6OklzTmVzdGVkLCAmZm9yTG9vcFN5
bWJvbFRhYmxlKTsKICAgICBhdXRvIGV4dHJhY3RvciA9IHNjb3BlZExhbWJkYTx2b2lkKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCopPihbdGhpcywgZHN0XShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChtX2xl
eHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKQEAgLTQ2ODQsNyArNDY4OCw3IEBAIHZvaWQgU3dpdGNo
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX2V4cHIpOwogCi0gICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNv
ZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1pemF0aW9uOjpEb05vdE9wdGltaXplLCBCeXRlY29k
ZUdlbmVyYXRvcjo6TmVzdGVkU2NvcGVUeXBlOjpJc05lc3RlZCk7CisgICAgZ2VuZXJhdG9yLnB1
c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlNjb3BlVHlwZTo6TGV0Q29u
c3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1pemF0aW9uOjpEb05vdE9w
dGltaXplLCBCeXRlY29kZUdlbmVyYXRvcjo6TmVzdGVkU2NvcGVUeXBlOjpJc05lc3RlZCk7CiAg
ICAgbV9ibG9jay0+ZW1pdEJ5dGVjb2RlRm9yQmxvY2soZ2VuZXJhdG9yLCByMC5nZXQoKSwgZHN0
KTsKICAgICBnZW5lcmF0b3IucG9wTGV4aWNhbFNjb3BlKHRoaXMpOwogCkBAIC01MTg0LDcgKzUx
ODgsNyBAQCBSZWdpc3RlcklEKiBDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRAogICAgIFN0cmljdE1vZGVTY29wZSBzdHJp
Y3RNb2RlU2NvcGUoZ2VuZXJhdG9yKTsKIAogICAgIGlmIChtX25lZWRzTGV4aWNhbFNjb3BlKQot
ICAgICAgICBnZW5lcmF0b3IucHVzaExleGljYWxTY29wZSh0aGlzLCBCeXRlY29kZUdlbmVyYXRv
cjo6VERaQ2hlY2tPcHRpbWl6YXRpb246Ok9wdGltaXplLCBCeXRlY29kZUdlbmVyYXRvcjo6TmVz
dGVkU2NvcGVUeXBlOjpJc05lc3RlZCk7CisgICAgICAgIGdlbmVyYXRvci5wdXNoTGV4aWNhbFNj
b3BlKHRoaXMsIEJ5dGVjb2RlR2VuZXJhdG9yOjpTY29wZVR5cGU6OkNsYXNzU2NvcGUsIEJ5dGVj
b2RlR2VuZXJhdG9yOjpURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1pemUsIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpOZXN0ZWRTY29wZVR5cGU6OklzTmVzdGVkKTsKIAogICAgIGJvb2wgaGFzUHJpdmF0
ZU5hbWVzID0gISFtX2xleGljYWxWYXJpYWJsZXMucHJpdmF0ZU5hbWVzU2l6ZSgpOwogICAgIGJv
b2wgc2hvdWxkRW1pdFByaXZhdGVCcmFuZCA9IG1fbGV4aWNhbFZhcmlhYmxlcy5oYXNJbnN0YW5j
ZVByaXZhdGVNZXRob2RPckFjY2Vzc29yKCk7CkBAIC01MTkyLDcgKzUxOTYsNyBAQCBSZWdpc3Rl
cklEKiBDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRAogICAgIGlmIChoYXNQcml2YXRlTmFtZXMpCiAgICAgICAgIGdlbmVy
YXRvci5wdXNoUHJpdmF0ZUFjY2Vzc05hbWVzKG1fbGV4aWNhbFZhcmlhYmxlcy5wcml2YXRlTmFt
ZUVudmlyb25tZW50KCkpOwogICAgIGlmIChzaG91bGRFbWl0UHJpdmF0ZUJyYW5kKQotICAgICAg
ICBnZW5lcmF0b3IuZW1pdENyZWF0ZVByaXZhdGVCcmFuZChnZW5lcmF0b3Iuc2NvcGVSZWdpc3Rl
cigpLCBtX3Bvc2l0aW9uLCBtX3Bvc2l0aW9uLCBtX3Bvc2l0aW9uKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRDcmVhdGVQcml2YXRlQnJhbmQobV9wb3NpdGlvbiwgbV9wb3NpdGlvbiwgbV9wb3Np
dGlvbik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3VwZXJjbGFzczsKICAgICBpZiAobV9j
bGFzc0hlcml0YWdlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5k
ZXggN2NkZjFjOTA3M2YwZDVlOThlZTY1MGJlZDhlYzQzODVkN2IwMzBkYS4uYzZkMjg4NTNlODRl
MzRkM2YyMTNhZTMxZWM1ZTM1MWQxYTdjOTg5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcApAQCAtMzE0OCwxMiArMzE0OCwyMSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVDbGFzc0V4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xh
c3MoVAogICAgIGluZm8uZW5kT2Zmc2V0ID0gdG9rZW5Mb2NhdGlvbigpLmVuZE9mZnNldCAtIDE7
CiAgICAgY29uc3VtZU9yRmFpbChDTE9TRUJSQUNFLCAiRXhwZWN0ZWQgYSBjbG9zaW5nICd9JyBh
ZnRlciBhIGNsYXNzIGJvZHkiKTsKIAotICAgIGlmIChkZWNsYXJlc1ByaXZhdGVNZXRob2QgfHwg
ZGVjbGFyZXNQcml2YXRlQWNjZXNzb3IpIHsKLSAgICAgICAgSWRlbnRpZmllciBwcml2YXRlQnJh
bmRJZGVudGlmaWVyID0gbV92bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wcml2YXRl
QnJhbmRQcml2YXRlTmFtZSgpOwotICAgICAgICBEZWNsYXJhdGlvblJlc3VsdE1hc2sgZGVjbGFy
YXRpb25SZXN1bHQgPSBjbGFzc1Njb3BlLT5kZWNsYXJlTGV4aWNhbFZhcmlhYmxlKCZwcml2YXRl
QnJhbmRJZGVudGlmaWVyLCB0cnVlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChkZWNsYXJhdGlv
blJlc3VsdCwgZGVjbGFyYXRpb25SZXN1bHQgPT0gRGVjbGFyYXRpb25SZXN1bHQ6OlZhbGlkKTsK
LSAgICAgICAgY2xhc3NTY29wZS0+dXNlVmFyaWFibGUoJnByaXZhdGVCcmFuZElkZW50aWZpZXIs
IGZhbHNlKTsKLSAgICAgICAgY2xhc3NTY29wZS0+YWRkQ2xvc2VkVmFyaWFibGVDYW5kaWRhdGVV
bmNvbmRpdGlvbmFsbHkocHJpdmF0ZUJyYW5kSWRlbnRpZmllci5pbXBsKCkpOworICAgIGlmIChk
ZWNsYXJlc1ByaXZhdGVNZXRob2QgfHwgZGVjbGFyZXNQcml2YXRlQWNjZXNzb3IgfHwgZGVjbGFy
ZXNTdGF0aWNQcml2YXRlTWV0aG9kIHx8IGRlY2xhcmVzU3RhdGljUHJpdmF0ZUFjY2Vzc29yKSB7
CisgICAgICAgIHsKKyAgICAgICAgICAgIElkZW50aWZpZXIgcHJpdmF0ZUJyYW5kSWRlbnRpZmll
ciA9IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucHJpdmF0ZUJyYW5kUHJpdmF0
ZU5hbWUoKTsKKyAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJl
c3VsdCA9IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFibGUoJnByaXZhdGVCcmFuZElk
ZW50aWZpZXIsIHRydWUpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChkZWNsYXJhdGlvblJl
c3VsdCwgZGVjbGFyYXRpb25SZXN1bHQgPT0gRGVjbGFyYXRpb25SZXN1bHQ6OlZhbGlkKTsKKyAg
ICAgICAgICAgIGNsYXNzU2NvcGUtPnVzZVZhcmlhYmxlKCZwcml2YXRlQnJhbmRJZGVudGlmaWVy
LCBmYWxzZSk7CisgICAgICAgICAgICBjbGFzc1Njb3BlLT5hZGRDbG9zZWRWYXJpYWJsZUNhbmRp
ZGF0ZVVuY29uZGl0aW9uYWxseShwcml2YXRlQnJhbmRJZGVudGlmaWVyLmltcGwoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgSWRlbnRpZmllciBwcml2YXRlQ2xhc3NCcmFu
ZElkZW50aWZpZXIgPSBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnByaXZhdGVD
bGFzc0JyYW5kUHJpdmF0ZU5hbWUoKTsKKyAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFz
ayBkZWNsYXJhdGlvblJlc3VsdCA9IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFibGUo
JnByaXZhdGVDbGFzc0JyYW5kSWRlbnRpZmllciwgdHJ1ZSk7CisgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKGRlY2xhcmF0aW9uUmVzdWx0LCBkZWNsYXJhdGlvblJlc3VsdCA9PSBEZWNsYXJhdGlv
blJlc3VsdDo6VmFsaWQpOworICAgICAgICAgICAgY2xhc3NTY29wZS0+dXNlVmFyaWFibGUoJnBy
aXZhdGVDbGFzc0JyYW5kSWRlbnRpZmllciwgZmFsc2UpOworICAgICAgICAgICAgY2xhc3NTY29w
ZS0+YWRkQ2xvc2VkVmFyaWFibGVDYW5kaWRhdGVVbmNvbmRpdGlvbmFsbHkocHJpdmF0ZUNsYXNz
QnJhbmRJZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfc2FtZV92PFRyZWVCdWlsZGVyLCBBU1RCdWlsZGVyPikgewpAQCAtMzE2
MSwxNCArMzE3MCw2IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXhw
cmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyhUCiAgICAgICAgICAgICBjbGFz
c0VsZW1lbnRzLT5zZXRIYXNQcml2YXRlQWNjZXNzb3JzKGRlY2xhcmVzUHJpdmF0ZUFjY2Vzc29y
IHx8IGRlY2xhcmVzU3RhdGljUHJpdmF0ZUFjY2Vzc29yKTsKICAgICB9CiAKLSAgICBpZiAoZGVj
bGFyZXNTdGF0aWNQcml2YXRlTWV0aG9kIHx8IGRlY2xhcmVzUHJpdmF0ZUFjY2Vzc29yKSB7Ci0g
ICAgICAgIElkZW50aWZpZXIgcHJpdmF0ZUNsYXNzQnJhbmRJZGVudGlmaWVyID0gbV92bS5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wcml2YXRlQ2xhc3NCcmFuZFByaXZhdGVOYW1lKCk7
Ci0gICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGNsYXNz
U2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFibGUoJnByaXZhdGVDbGFzc0JyYW5kSWRlbnRpZmll
ciwgdHJ1ZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZGVjbGFyYXRpb25SZXN1bHQsIGRlY2xh
cmF0aW9uUmVzdWx0ID09IERlY2xhcmF0aW9uUmVzdWx0OjpWYWxpZCk7Ci0gICAgICAgIGNsYXNz
U2NvcGUtPnVzZVZhcmlhYmxlKCZwcml2YXRlQ2xhc3NCcmFuZElkZW50aWZpZXIsIGZhbHNlKTsK
LSAgICAgICAgY2xhc3NTY29wZS0+YWRkQ2xvc2VkVmFyaWFibGVDYW5kaWRhdGVVbmNvbmRpdGlv
bmFsbHkocHJpdmF0ZUNsYXNzQnJhbmRJZGVudGlmaWVyLmltcGwoKSk7Ci0gICAgfQotCiAgICAg
aWYgKE9wdGlvbnM6OnVzZVByaXZhdGVDbGFzc0ZpZWxkcygpKSB7CiAgICAgICAgIC8vIEZhaWwg
aWYgdGhlcmUgYXJlIG5vIHBhcmVudCBwcml2YXRlIG5hbWUgc2NvcGVzIGFuZCBhbnkgdXNlZC1i
dXQtdW5kZWNsYXJlZCBwcml2YXRlIG5hbWVzLgogICAgICAgICBzZW1hbnRpY0ZhaWxJZkZhbHNl
KGNvcHlVbmRlY2xhcmVkUHJpdmF0ZU5hbWVzVG9PdXRlclNjb3BlKCksICJDYW5ub3QgcmVmZXJl
bmNlIHVuZGVjbGFyZWQgcHJpdmF0ZSBuYW1lcyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAppbmRleCA1N2EyY2ExY2U3ZWY0MTdk
ZDFiODJlYmRkODViOGFlODhlOTIxMTBkLi5mNDMwZjI5MzA5NWY0NDYxNjYxYmNjMDNjMGRiZTFj
NTAwNzc3ZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Zhcmlh
YmxlRW52aXJvbm1lbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Zhcmlh
YmxlRW52aXJvbm1lbnQuaApAQCAtMTAxLDYgKzEwMSw5IEBAIHN0cnVjdCBWYXJpYWJsZUVudmly
b25tZW50RW50cnlIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxWYXJpYWJsZUVudmlyb25tZW50RW50
cnk+CiBzdHJ1Y3QgUHJpdmF0ZU5hbWVFbnRyeSB7CiAgICAgZnJpZW5kIGNsYXNzIENhY2hlZFBy
aXZhdGVOYW1lRW50cnk7CiAKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHByaXZhdGVD
bGFzc0JyYW5kT2Zmc2V0ID0gMDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHByaXZh
dGVCcmFuZE9mZnNldCA9IDE7CisKIHB1YmxpYzoKICAgICBQcml2YXRlTmFtZUVudHJ5KHVpbnQx
Nl90IHRyYWl0cyA9IDApIHsgbV9iaXRzID0gdHJhaXRzOyB9CiAKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTIxMGI5YjA3YTk2MGVmM2Q2
Mzc5ODNjMjFjMmE3MTMwMDQzM2ZmYS4uMjNhMjExMjk0ZGZjMWQ0NDFiNGVmZTA5MDI1MTFjODMz
NDZiMmIzNiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAyMS0wNi0wNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1
a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIFVzZSBMb2NhbENsb3N1cmVWYXIgdG8gZ2V0
IGJyYW5kIGZyb20gc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyNjY3NworICAgICAgICByZGFyOi8vNzg4MDI4NjkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9wcml2YXRlLWFjY2Vz
cy1uZXN0ZWQtZXZhbC5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRUaHJvdyk6CisgICAgICAg
IChzaG91bGRUaHJvdy5wcm90b3R5cGUueCk6CisgICAgICAgIChzaG91bGRUaHJvdy5wcm90b3R5
cGUubS5DLnByb3RvdHlwZS56KToKKyAgICAgICAgKHNob3VsZFRocm93LnByb3RvdHlwZS5tLkMu
cHJvdG90eXBlLmEpOgorICAgICAgICAoc2hvdWxkVGhyb3cucHJvdG90eXBlLm0uQyk6CisgICAg
ICAgIChzaG91bGRUaHJvdy5wcm90b3R5cGUubSk6CisgICAgICAgICogc3RyZXNzL3ByaXZhdGUt
YWNjZXNzLW5lc3RlZC5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRUaHJvdyk6CisgICAgICAg
IChzaG91bGRUaHJvdy5wcm90b3R5cGUueCk6CisgICAgICAgIChzaG91bGRUaHJvdy5wcm90b3R5
cGUubS5DLnByb3RvdHlwZS56KToKKyAgICAgICAgKHNob3VsZFRocm93LnByb3RvdHlwZS5tLkMu
cHJvdG90eXBlLmEpOgorICAgICAgICAoc2hvdWxkVGhyb3cucHJvdG90eXBlLm0uQyk6CisgICAg
ICAgIChzaG91bGRUaHJvdy5wcm90b3R5cGUubSk6CisKIDIwMjEtMDYtMDQgIE1hcmsgTGFtICA8
bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFBsYWNhdGUgZXhjZXB0aW9uIGNoZWNrZXIg
dmFsaWRhdGlvbiBpbiBvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eS4KZGlmZiAtLWdpdCBh
L0pTVGVzdHMvc3RyZXNzL3ByaXZhdGUtYWNjZXNzLW5lc3RlZC1ldmFsLmpzIGIvSlNUZXN0cy9z
dHJlc3MvcHJpdmF0ZS1hY2Nlc3MtbmVzdGVkLWV2YWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTZmZTRmYTE5
NDljMjA3YjEwNmY3ZTg5YTY2N2I0YjVjYmNmOTdhYQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVz
dHMvc3RyZXNzL3ByaXZhdGUtYWNjZXNzLW5lc3RlZC1ldmFsLmpzCkBAIC0wLDAgKzEsMzMgQEAK
K2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJv
clRocm93biA9IGZhbHNlOworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAg
ICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVl
OworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3JUaHJvd24pCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcignbm90IHRocm93bicpOworICAgIGlmIChTdHJpbmcoZXJyb3Ip
ICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGVycm9yOiAk
e1N0cmluZyhlcnJvcil9YCk7Cit9CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBjbGFzcyBE
IHsKKyAgICAgICN4KCkge30KKyAgICAgIG0oKSB7CisgICAgICAgIGNsYXNzIEMgeworICAgICAg
ICAgICN5eTsKKyAgICAgICAgICAjeigpIHt9CisgICAgICAgICAgYSgpIHsKKyAgICAgICAgICAg
IGV2YWwoYHRoaXMuI3goKTtgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbGV0
IGMgPSBuZXcgQygpOworICAgICAgICBjLmEoKTsKKyAgICAgIH0KKyAgICB9CisgICAgbGV0IGQg
PSBuZXcgRCgpOworICAgIGQubSgpOworfSwgYFR5cGVFcnJvcjogQ2Fubm90IGFjY2VzcyBwcml2
YXRlIG1ldGhvZCBvciBhY2Vzc29yIChldmFsdWF0aW5nICd0aGlzLiN4JylgKTsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvc3RyZXNzL3ByaXZhdGUtYWNjZXNzLW5lc3RlZC5qcyBiL0pTVGVzdHMvc3Ry
ZXNzL3ByaXZhdGUtYWNjZXNzLW5lc3RlZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZDg4ODVmNjdmYzgzZWZj
Y2ZiOGVkY2JhNDU2Y2E0ZGQ3ZDU0Mjc3Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJl
c3MvcHJpdmF0ZS1hY2Nlc3MtbmVzdGVkLmpzCkBAIC0wLDAgKzEsMzMgQEAKK2Z1bmN0aW9uIHNo
b3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJvclRocm93biA9IGZh
bHNlOworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOwor
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlOworICAgICAgICBl
cnJvciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5l
dyBFcnJvcignbm90IHRocm93bicpOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1l
c3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJv
cil9YCk7Cit9CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBjbGFzcyBEIHsKKyAgICAgICN4
KCkge30KKyAgICAgIG0oKSB7CisgICAgICAgIGNsYXNzIEMgeworICAgICAgICAgICN5eTsKKyAg
ICAgICAgICAjeigpIHt9CisgICAgICAgICAgYSgpIHsKKyAgICAgICAgICAgIHRoaXMuI3goKTsK
KyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbGV0IGMgPSBuZXcgQygpOworICAgICAg
ICBjLmEoKTsKKyAgICAgIH0KKyAgICB9CisgICAgbGV0IGQgPSBuZXcgRCgpOworICAgIGQubSgp
OworfSwgYFR5cGVFcnJvcjogQ2Fubm90IGFjY2VzcyBwcml2YXRlIG1ldGhvZCBvciBhY2Vzc29y
IChldmFsdWF0aW5nICd0aGlzLiN4JylgKTsK
</data>
<flag name="review"
          id="452222"
          type_id="1"
          status="+"
          setter="saam"
    />
    <flag name="commit-queue"
          id="452226"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>