<?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>143922</bug_id>
          
          <creation_ts>2015-04-18 13:02:34 -0700</creation_ts>
          <short_desc>Setting inline style to the same value it already has triggers a style recalc</short_desc>
          <delta_ts>2015-04-20 11:34:13 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1086583</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-18 13:02:34 -0700</bug_when>
    <thetext>PropertySetCSSStyleDeclaration::setPropertyInternal() does:

    bool changed = m_propertySet-&gt;setProperty(propertyID, value, important, contextStyleSheet());

but as far as I can see, setProperty() returns true simply when parsing succeeded, not necessarily when the property changed.

This causes lots of extra style recalcs when scrolling Facebook.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086597</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-04-18 17:22:03 -0700</bug_when>
    <thetext>&lt;rdar://problem/20603831&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086599</commentid>
    <comment_count>2</comment_count>
      <attachid>251102</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-18 17:33:23 -0700</bug_when>
    <thetext>Created attachment 251102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086601</commentid>
    <comment_count>3</comment_count>
      <attachid>251104</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-18 18:27:47 -0700</bug_when>
    <thetext>Created attachment 251104
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086634</commentid>
    <comment_count>4</comment_count>
      <attachid>251104</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-19 02:39:46 -0700</bug_when>
    <thetext>Comment on attachment 251104
Patch

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

Ok though I would prefer a factoring that does not introduce a new bool&amp; return value.

&gt; Source/WebCore/css/CSSParser.cpp:1323
&gt; +bool CSSParser::parseValue(MutableStyleProperties* declaration, CSSPropertyID propertyID, const String&amp; string, bool important, StyleSheetContents* contextStyleSheet, bool&amp; changed)

It would be nicer if these function returned an enum instead of two bools:

enum class ParseResult { Changed, Unchanged, Error }

or similar.

&gt; Source/WebCore/css/CSSProperty.h:95
&gt; +        if (!m_value &amp;&amp; !other.m_value)
&gt; +            return true;

You should do

if (m_value == other.m_value)
   return true;

instead. Values may be shared.

&gt; Source/WebCore/css/StyleProperties.cpp:683
&gt;      // When replacing an existing property value, this moves the property to the end of the list.
&gt;      // Firefox preserves the position, and MSIE moves the property to the beginning.

Is this comment true anymore? The setProperty code looks like it replaces properties in-place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086839</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-20 11:33:29 -0700</bug_when>
    <thetext>https://trac.webkit.org/r183017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086841</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-20 11:34:13 -0700</bug_when>
    <thetext>
&gt; &gt; Source/WebCore/css/StyleProperties.cpp:683
&gt; &gt;      // When replacing an existing property value, this moves the property to the end of the list.
&gt; &gt;      // Firefox preserves the position, and MSIE moves the property to the beginning.
&gt; 
&gt; Is this comment true anymore? The setProperty code looks like it replaces
&gt; properties in-place.

Didn&apos;t change this because I didn&apos;t have time to investigate.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251102</attachid>
            <date>2015-04-18 17:33:23 -0700</date>
            <delta_ts>2015-04-18 18:27:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143922-20150418173222.patch</filename>
            <type>text/plain</type>
            <size>34187</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyOTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM4ZTg2Y2FlYTFlM2U5
MGMzOTZjOTQzMDlkYTY3ZDMzNjdmMTg4ZS4uNDJhODg1ZjNhN2I3NGE0ZGY3ZDhkZTAzNWUxMjc2
ODg0OTJhMTk1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDE1LTA0LTE4ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFNldHRpbmcgaW5s
aW5lIHN0eWxlIHRvIHRoZSBzYW1lIHZhbHVlIGl0IGFscmVhZHkgaGFzIHRyaWdnZXJzIGEgc3R5
bGUgcmVjYWxjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDM5MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eSgpIHdhcyB0YWtpbmcgdGhlIHJl
c3VsdCBvZiBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoKQorICAgICAgICB0byBtZWFuICJwYXJzaW5n
IGNoYW5nZWQgdGhlIHN0eWxlIiwgYnV0IGl0IGFjdHVhbGx5IGp1c3QgbWVhbnMgInBhcnNpbmcg
c3VjY2VlZGVkIi4KKyAgICAgICAgQWRkIGEgbmV3IG91dCBwYXJhbSwgcGlwZWQgdGhyb3VnaCB2
YXJpb3VzIHBhcnNlciBmdW5jdGlvbnMsIHRvIGluZGljYXRlIHdoZXRoZXIKKyAgICAgICAgcGFy
c2luZyBhY3R1YWxseSBjaGFuZ2VkIHN0eWxlLCBhbmQgaW5zdGVhZCByZXR1cm4gdGhhdCBmcm9t
IHNldFByb3BlcnR5KCkuCisKKyAgICAgICAgQWRkIGludGVybmFscy5zdGFydFRyYWNraW5nU3R5
bGVSZWNhbGNzKCkgYW5kIGludGVybmFscy5zdHlsZVJlY2FsY0NvdW50KCkgc28KKyAgICAgICAg
d2UgY2FuIHdyaXRlIHRlc3RzIGZvciBzdHlsZSByZWNhbGMuCisKKyAgICAgICAgVGVzdDogZmFz
dC9jc3Mvc2V0LWlubGluZS1zdHlsZS1yZWNhbGMuaHRtbAorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBMZXQgWGNvZGUgaGF2ZSBpdCdzIHdheS4KKyAgICAg
ICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3JWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlS2V5d29yZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJh
bnNsYXRlVHJhbnNmb3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZUZvbnRGYWNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVl
KToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5TWV0YWRhdGE6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHk6Om9wZXJhdG9yPT0pOgorICAgICAgICAq
IGNzcy9ET01XaW5kb3dDU1MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Q1NTOjpz
dXBwb3J0cyk6CisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydGllcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjphcHBlbmRQcmVmaXhpbmdWYXJpYW50UHJv
cGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6TXV0YWJsZVN0eWxlUHJvcGVydGllczo6YWRkUGFy
c2VkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
OjphZGRQYXJzZWRQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydGllcy5oOgor
ICAgICAgICAqIGNzcy9XZWJLaXRDU1NNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
S2l0Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1ZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6c3R5bGVSZWNhbGNDb3VudCk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udCk6
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpzdGFydFRyYWNraW5nU3R5bGVSZWNhbGNzKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6c3R5bGVSZWNhbGNDb3VudCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMu
aDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTUtMDQtMTcgIEJlbSBK
b25lcy1CZXkgIDxiam9uZXNiZUBhZG9iZS5jb20+CiAKICAgICAgICAgTGFyZ2UgdmFsdWVzIGZv
ciBsaW5lLWhlaWdodCBjYXVzZSBpbnRlZ2VyIG92ZXJmbG93IGluIFJlbmRlclN0eWxlOjpjb21w
dXRlZExpbmVIZWlnaHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA1MTEwZTBiNjNjYjZiOTFkYTRkZjgwNzE2ZDk5MDQzNTE1NDI2
ZmVkLi4xNWVmMDE1MTlkZjhkZDQ0ZDBiYzBlYjVhYmVmYWNiODNlNWRmMzIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjgw
MSw3ICsxMjgwMSw3IEBACiAJCUJDNzREQTQ3MTAxM0Y0NjgwMDc5ODdBRCAvKiBKU1JHQkNvbG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUkdCQ29sb3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM3NkFDMTEwREQ3QUQ1QzAwNDE1RjM0IC8qIFBhcnNl
clV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJVdGls
aXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM3NzJCMzYwQzRFQTkxRTAw
ODMyODVGIC8qIENTU0hlbHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q1NTSGVscGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNzcyQjM3MEM0RUE5
MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBDU1NQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNw
cDsgfTsKKwkJQkM3NzJCMzcwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IENTU1BhcnNl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyQjM4MEM0RUE5MUUwMDgz
Mjg1RiAvKiBDU1NQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENT
U1BhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkM0NDBDNEVCMkM2
MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkM3NzJDNDUwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCAzMGUwNWI2ZmQx
N2Q3MjgzZDBiYjdhMDZhZjlkNzZmM2IyNzNiNDllLi5kYTA3NWY0NTRkYWE3ZmNkZjE1MTRkYzM3
ZGJmNjM1NWY1YjFmOGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtNTIwLDcgKzUy
MCw3IEBAIHN0YXRpYyBib29sIHZhbGlkUHJpbWl0aXZlVmFsdWVDb2xvcihDU1NWYWx1ZUlEIHZh
bHVlSUQsIGJvb2wgc3RyaWN0ID0gZmFsc2UpCiAgICAgICAgIHx8ICh2YWx1ZUlEID49IENTU1Zh
bHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IgJiYgdmFsdWVJRCA8IENTU1ZhbHVlV2Via2l0VGV4dCAm
JiAhc3RyaWN0KSk7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlQ29sb3JWYWx1ZShNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBjb25z
dCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSkKK3N0YXRpYyBib29sIHBhcnNlQ29sb3JWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
KiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0
cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgYm9vbCYg
Y2hhbmdlZCkKIHsKICAgICBBU1NFUlQoIXN0cmluZy5pc0VtcHR5KCkpOwogICAgIGJvb2wgc3Ry
aWN0ID0gaXNTdHJpY3RQYXJzZXJNb2RlKGNzc1BhcnNlck1vZGUpOwpAQCAtNTMxLDE0ICs1MzEs
MTQgQEAgc3RhdGljIGJvb2wgcGFyc2VDb2xvclZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMq
IGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHAKICAgICBDU1NWYWx1ZUlEIHZhbHVlSUQgPSBj
c3NWYWx1ZUtleXdvcmRJRChjc3NTdHJpbmcpOwogICAgIGlmICh2YWxpZFByaW1pdGl2ZVZhbHVl
Q29sb3IodmFsdWVJRCwgc3RyaWN0KSkgewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQpOwotICAgICAg
ICBkZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJZCwg
dmFsdWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpKTsKKyAgICAgICAgY2hhbmdlZCA9IGRlY2xhcmF0
aW9uLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZS5yZWxl
YXNlKCksIGltcG9ydGFudCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgUkdC
QTMyIGNvbG9yOwogICAgIGlmICghQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xvcihjb2xvciwgc3Ry
aW5nLCBzdHJpY3QgJiYgc3RyaW5nWzBdICE9ICcjJykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JW
YWx1ZShjb2xvcik7Ci0gICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3Bl
cnR5KHByb3BlcnR5SWQsIHZhbHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KSk7CisgICAgY2hhbmdl
ZCA9IGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlk
LCB2YWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC02MTQsNyArNjE0LDcgQEAgc3RhdGljIGlubGluZSBib29sIHBhcnNlU2ltcGxlTGVuZ3RoKGNv
bnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkJgogICAgIHJldHVybiBvazsK
IH0KIAotc3RhdGljIGJvb2wgcGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkK
K3N0YXRpYyBib29sIHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGll
cyogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIGJvb2wm
IGNoYW5nZWQpCiB7CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKICAgICBib29sIGFj
Y2VwdHNOZWdhdGl2ZU51bWJlcnM7CkBAIC02NDQsNyArNjQ0LDcgQEAgc3RhdGljIGJvb2wgcGFy
c2VTaW1wbGVMZW5ndGhWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwg
Q1NTUHJvcGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2
YWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKG51bWJlciwgdW5pdCk7Ci0gICAgZGVj
bGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIHZhbHVl
LnJlbGVhc2UoKSwgaW1wb3J0YW50KSk7CisgICAgY2hhbmdlZCA9IGRlY2xhcmF0aW9uLT5hZGRQ
YXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZS5yZWxlYXNlKCksIGlt
cG9ydGFudCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTc4LDcgKzExNzgsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNLZXl3b3JkUHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SWQpCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUtleXdvcmRWYWx1ZShNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBj
b25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIHBhcnNlckNvbnRleHQsIFN0eWxlU2hlZXRDb250ZW50cyogc3R5bGVTaGVldENvbnRlbnRz
KQorc3RhdGljIGJvb2wgcGFyc2VLZXl3b3JkVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyog
ZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBwYXJzZXJDb250ZXh0
LCBTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlU2hlZXRDb250ZW50cywgYm9vbCYgY2hhbmdlZCkK
IHsKICAgICBBU1NFUlQoIXN0cmluZy5pc0VtcHR5KCkpOwogCkBAIC0xMjEwLDcgKzEyMTAsNyBA
QCBzdGF0aWMgYm9vbCBwYXJzZUtleXdvcmRWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBk
ZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRAogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3Bl
cnR5SWQsIHZhbHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KSk7CisgICAgY2hhbmdlZCA9IGRlY2xh
cmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZS5y
ZWxlYXNlKCksIGltcG9ydGFudCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMjM1LDcg
KzEyMzUsNyBAQCBzdGF0aWMgYm9vbCBwYXJzZVRyYW5zZm9ybVRyYW5zbGF0ZUFyZ3VtZW50cyhX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSYgdHJhbnNmb3JtVgogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgYm9vbCBwYXJzZVRyYW5zbGF0ZVRyYW5zZm9ybVZhbHVlKE11dGFibGVTdHlsZVBy
b3BlcnRpZXMqIHByb3BlcnRpZXMsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50KQorc3RhdGljIGJvb2wgcGFyc2VUcmFuc2xhdGVU
cmFuc2Zvcm1WYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwg
Ym9vbCYgY2hhbmdlZCkKIHsKICAgICBpZiAocHJvcGVydHlJRCAhPSBDU1NQcm9wZXJ0eVRyYW5z
Zm9ybSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI3OCw3ICsxMjc4LDcgQEAgc3RhdGlj
IGJvb2wgcGFyc2VUcmFuc2xhdGVUcmFuc2Zvcm1WYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
KiBwcm9wZXJ0aWVzLCBDU1MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IHJlc3VsdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsK
ICAgICByZXN1bHQtPmFwcGVuZCh0cmFuc2Zvcm1WYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAg
ICBwcm9wZXJ0aWVzLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShDU1NQcm9wZXJ0eVRy
YW5zZm9ybSwgcmVzdWx0LnJlbGVhc2UoKSwgaW1wb3J0YW50KSk7CisgICAgY2hhbmdlZCA9IHBy
b3BlcnRpZXMtPmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNm
b3JtLCByZXN1bHQucmVsZWFzZSgpLCBpbXBvcnRhbnQpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMTI4Nyw3ICsxMjg3LDggQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNl
cjo6cGFyc2VGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW4KICAgICBpZiAo
c3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgUmVmUHRyPE11
dGFibGVTdHlsZVByb3BlcnRpZXM+IGR1bW15U3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
OjpjcmVhdGUoKTsKLSAgICBpZiAoIXBhcnNlVmFsdWUoZHVtbXlTdHlsZS5nZXQoKSwgQ1NTUHJv
cGVydHlGb250RmFtaWx5LCBzdHJpbmcsIGZhbHNlLCBDU1NRdWlya3NNb2RlLCBudWxscHRyKSkK
KyAgICBib29sIGNoYW5nZWQ7CisgICAgaWYgKCFwYXJzZVZhbHVlKGR1bW15U3R5bGUuZ2V0KCks
IENTU1Byb3BlcnR5Rm9udEZhbWlseSwgc3RyaW5nLCBmYWxzZSwgQ1NTUXVpcmtzTW9kZSwgbnVs
bHB0ciwgY2hhbmdlZCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPENT
U1ZhbHVlPiBmb250RmFtaWx5ID0gZHVtbXlTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eUZvbnRGYW1pbHkpOwpAQCAtMTI5NiwxMiArMTI5NywxMiBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3Ry
aW5nJiBzdHJpbgogICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PENTU1ZhbHVlTGlzdD4o
Zm9udEZhbWlseS5yZWxlYXNlKCkpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkKK2Jv
b2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMqIGRlY2xhcmF0
aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29s
IGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0Q29udGVu
dHMqIGNvbnRleHRTdHlsZVNoZWV0LCBib29sJiBjaGFuZ2VkKQogewogICAgIEFTU0VSVCghc3Ry
aW5nLmlzRW1wdHkoKSk7Ci0gICAgaWYgKHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoZGVjbGFyYXRp
b24sIHByb3BlcnR5SUQsIHN0cmluZywgaW1wb3J0YW50LCBjc3NQYXJzZXJNb2RlKSkKKyAgICBp
ZiAocGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5n
LCBpbXBvcnRhbnQsIGNzc1BhcnNlck1vZGUsIGNoYW5nZWQpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBpZiAocGFyc2VDb2xvclZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJp
bmcsIGltcG9ydGFudCwgY3NzUGFyc2VyTW9kZSkpCisgICAgaWYgKHBhcnNlQ29sb3JWYWx1ZShk
ZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQsIGNzc1BhcnNlck1vZGUs
IGNoYW5nZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIENTU1BhcnNlckNvbnRleHQg
Y29udGV4dChjc3NQYXJzZXJNb2RlKTsKQEAgLTEzMTAsMTcgKzEzMTEsMTggQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyogZGVjbGFyYXRpb24sIENT
U1Byb3BlcnR5SUQgcHIKICAgICAgICAgY29udGV4dC5tb2RlID0gY3NzUGFyc2VyTW9kZTsKICAg
ICB9CiAKLSAgICBpZiAocGFyc2VLZXl3b3JkVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQs
IHN0cmluZywgaW1wb3J0YW50LCBjb250ZXh0LCBjb250ZXh0U3R5bGVTaGVldCkpCisgICAgaWYg
KHBhcnNlS2V5d29yZFZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9y
dGFudCwgY29udGV4dCwgY29udGV4dFN0eWxlU2hlZXQsIGNoYW5nZWQpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBpZiAocGFyc2VUcmFuc2xhdGVUcmFuc2Zvcm1WYWx1ZShkZWNsYXJhdGlv
biwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQpKQorICAgIGlmIChwYXJzZVRyYW5zbGF0
ZVRyYW5zZm9ybVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFu
dCwgY2hhbmdlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgQ1NTUGFyc2VyIHBhcnNl
cihjb250ZXh0KTsKLSAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWUoZGVjbGFyYXRpb24sIHBy
b3BlcnR5SUQsIHN0cmluZywgaW1wb3J0YW50LCBjb250ZXh0U3R5bGVTaGVldCk7CisgICAgcmV0
dXJuIHBhcnNlci5wYXJzZVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGlt
cG9ydGFudCwgY29udGV4dFN0eWxlU2hlZXQsIGNoYW5nZWQpOwogfQogCi1ib29sIENTU1BhcnNl
cjo6cGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQs
IFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCitib29sIENTU1BhcnNlcjo6
cGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIFN0
eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQsIGJvb2wmIGNoYW5nZWQpCiB7Cisg
ICAgY2hhbmdlZCA9IGZhbHNlOwogICAgIHNldFN0eWxlU2hlZXQoY29udGV4dFN0eWxlU2hlZXQp
OwogCiAgICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LXZhbHVleyIsIHN0cmluZywgIn0gIik7CkBA
IC0xMzM3LDcgKzEzMzksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcgogICAgICAgICBkZWxl
dGVGb250RmFjZU9ubHlWYWx1ZXMoKTsKICAgICBpZiAoIW1fcGFyc2VkUHJvcGVydGllcy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgb2sgPSB0cnVlOwotICAgICAgICBkZWNsYXJhdGlvbi0+YWRkUGFy
c2VkUHJvcGVydGllcyhtX3BhcnNlZFByb3BlcnRpZXMpOworICAgICAgICBjaGFuZ2VkID0gZGVj
bGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMobV9wYXJzZWRQcm9wZXJ0aWVzKTsKICAgICAg
ICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXgg
ZWFkMDMyNzFmZGMwYTlkYzI4MDhhYmRiNzQ2MjU1ZWE2NDY1MmVhOC4uMjE0ZTg0NDBlNDQwNWU2
MjVlNGQ2MjY3N2JlNWI5ZDc5N2JhMDYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMTEw
LDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHBhcnNl
UnVsZShTdHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJpbmcmKTsKICAgICBQYXNzUmVmUHRy
PFN0eWxlS2V5ZnJhbWU+IHBhcnNlS2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRDb250ZW50cyosIGNv
bnN0IFN0cmluZyYpOwogICAgIGJvb2wgcGFyc2VTdXBwb3J0c0NvbmRpdGlvbihjb25zdCBTdHJp
bmcmKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMq
LCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2Vy
TW9kZSwgU3R5bGVTaGVldENvbnRlbnRzKik7CisgICAgc3RhdGljIGJvb2wgcGFyc2VWYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9v
bCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUsIFN0eWxlU2hlZXRDb250ZW50cyosIGJvb2wmIGNo
YW5nZWQpOwogICAgIHN0YXRpYyBib29sIHBhcnNlQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3Qg
U3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7CiAgICAgc3RhdGljIGJvb2wgcGFyc2VTeXN0
ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBEb2N1bWVudCopOwogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VGb250RmFjZVZhbHVlKGNvbnN0IEF0
b21pY1N0cmluZyYpOwpAQCAtNTQ5LDcgKzU0OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0dl
bmVyYXRlZEltYWdlVmFsdWUoQ1NTUGFyc2VyVmFsdWUmKSBjb25zdDsKICAgICBib29sIHBhcnNl
R2VuZXJhdGVkSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwog
Ci0gICAgYm9vbCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMqLCBDU1NQcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgU3R5bGVTaGVldENvbnRlbnRzKiBj
b250ZXh0U3R5bGVTaGVldCk7CisgICAgYm9vbCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3Bl
cnRpZXMqLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgU3R5
bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCwgYm9vbCYgY2hhbmdlZCk7CiAgICAg
UmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJp
bmcmLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKIAogICAgIFBhc3NS
ZWZQdHI8Q1NTQmFzaWNTaGFwZT4gcGFyc2VJbnNldFJvdW5kZWRDb3JuZXJzKFBhc3NSZWZQdHI8
Q1NTQmFzaWNTaGFwZUluc2V0PiwgQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
cm9wZXJ0eS5oCmluZGV4IDE5YzQ0ODk2YzFlNmIzNTAzZmFmOWI2Y2U5NTAyZWQyYmUzMmIwN2Eu
LjAzNDhlYjI5MTljMGYxMzM3YmUwZTNiNzhiY2Y1N2I5NmJlOTI3MDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcm9wZXJ0eS5oCkBAIC00NCw2ICs0NCwxNiBAQCBzdHJ1Y3QgU3R5bGVQcm9wZXJ0eU1ldGFk
YXRhIHsKICAgICB9CiAKICAgICBDU1NQcm9wZXJ0eUlEIHNob3J0aGFuZElEKCkgY29uc3Q7Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlUHJvcGVydHlNZXRhZGF0YSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eUlEID09IG90aGVyLm1f
cHJvcGVydHlJRAorICAgICAgICAgICAgJiYgbV9pc1NldEZyb21TaG9ydGhhbmQgPT0gb3RoZXIu
bV9pc1NldEZyb21TaG9ydGhhbmQKKyAgICAgICAgICAgICYmIG1faW5kZXhJblNob3J0aGFuZHNW
ZWN0b3IgPT0gb3RoZXIubV9pbmRleEluU2hvcnRoYW5kc1ZlY3RvcgorICAgICAgICAgICAgJiYg
bV9pbXBvcnRhbnQgPT0gb3RoZXIubV9pbXBvcnRhbnQKKyAgICAgICAgICAgICYmIG1faW1wbGlj
aXQgPT0gb3RoZXIubV9pbXBsaWNpdAorICAgICAgICAgICAgJiYgbV9pbmhlcml0ZWQgPT0gb3Ro
ZXIubV9pbmhlcml0ZWQ7CisgICAgfQogCiAgICAgdWludDE2X3QgbV9wcm9wZXJ0eUlEIDogMTA7
CiAgICAgdWludDE2X3QgbV9pc1NldEZyb21TaG9ydGhhbmQgOiAxOwpAQCAtNzYsNiArODYsMjAg
QEAgcHVibGljOgogCiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eU1ldGFkYXRhJiBtZXRhZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBDU1NQcm9wZXJ0eSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIShtX21ldGFk
YXRhID09IG90aGVyLm1fbWV0YWRhdGEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGlmICghbV92YWx1ZSAmJiAhb3RoZXIubV92YWx1ZSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgIGlmICghbV92YWx1ZSB8fCAhb3RoZXIubV92YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX3ZhbHVlLT5l
cXVhbHMoKm90aGVyLm1fdmFsdWUpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBTdHlsZVByb3Bl
cnR5TWV0YWRhdGEgbV9tZXRhZGF0YTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IG1fdmFsdWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NV2luZG93Q1NTLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9ET01XaW5kb3dDU1MuY3BwCmluZGV4IDU4NzgyYzc2MjdjNGZmYzQ1YTU5ZGU1
ODM3YzUwMTRhYjcyNmYwMWQuLjMwN2IwNWUzODFjZGUxMGFhMTZmMTRiMmJmNDdmYzBmYjcyMTBj
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9ET01XaW5kb3dDU1MuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9ET01XaW5kb3dDU1MuY3BwCkBAIC03Miw3ICs3Miw4IEBAIGJv
b2wgRE9NV2luZG93Q1NTOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBjb25zdCBT
dHJpbmcmIHZhbHVlKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8
TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZHVtbXlTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRp
ZXM6OmNyZWF0ZSgpOwotICAgIHJldHVybiBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoZHVtbXlTdHls
ZS5nZXQoKSwgcHJvcGVydHlJRCwgbm9ybWFsaXplZFZhbHVlLCBmYWxzZSwgQ1NTU3RyaWN0TW9k
ZSwgMCk7CisgICAgYm9vbCBjaGFuZ2VkOworICAgIHJldHVybiBDU1NQYXJzZXI6OnBhcnNlVmFs
dWUoZHVtbXlTdHlsZS5nZXQoKSwgcHJvcGVydHlJRCwgbm9ybWFsaXplZFZhbHVlLCBmYWxzZSwg
Q1NTU3RyaWN0TW9kZSwgbnVsbHB0ciwgY2hhbmdlZCk7CiB9CiAKIGJvb2wgRE9NV2luZG93Q1NT
OjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIGNvbmRpdGlvblRleHQpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCmluZGV4IGNlNzA3MDdjYTliMGVlMzQ2ZmQ3NzAyNmZm
ZTdlYjQyMjc0NTI3YmYuLjE0ZDQ0MDNjYzljZDc1NmZlZmExMTNkM2UzNjZhMzA2NDRkZWU0NWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCkBAIC02ODEsNyArNjgxLDkg
QEAgYm9vbCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYKIAogICAgIC8vIFdoZW4gcmVwbGFjaW5nIGFuIGV4
aXN0aW5nIHByb3BlcnR5IHZhbHVlLCB0aGlzIG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgZW5k
IG9mIHRoZSBsaXN0LgogICAgIC8vIEZpcmVmb3ggcHJlc2VydmVzIHRoZSBwb3NpdGlvbiwgYW5k
IE1TSUUgbW92ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBiZWdpbm5pbmcuCi0gICAgcmV0dXJuIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBj
c3NQYXJzZXJNb2RlKCksIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBib29sIGNoYW5nZWQgPSBm
YWxzZTsKKyAgICBDU1NQYXJzZXI6OnBhcnNlVmFsdWUodGhpcywgcHJvcGVydHlJRCwgdmFsdWUs
IGltcG9ydGFudCwgY3NzUGFyc2VyTW9kZSgpLCBjb250ZXh0U3R5bGVTaGVldCwgY2hhbmdlZCk7
CisgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKIHZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBwcnBWYWx1ZSwgYm9vbCBpbXBvcnRhbnQpCkBAIC02OTksMTcgKzcwMSwyMSBAQCB2b2lkIE11
dGFibGVTdHlsZVByb3BlcnRpZXM6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgUGFzc1JlZlB0cjxDUwogICAgICAgICBtX3Byb3BlcnR5VmVjdG9yLmFwcGVuZChDU1NQcm9w
ZXJ0eShzaG9ydGhhbmQucHJvcGVydGllcygpW2ldLCB2YWx1ZSwgaW1wb3J0YW50KSk7CiB9CiAK
LXZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6c2V0UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVy
dHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eSogc2xvdCkKK2Jvb2wgTXV0YWJsZVN0eWxlUHJvcGVy
dGllczo6c2V0UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0
eSogc2xvdCkKIHsKICAgICBpZiAoIXJlbW92ZVNob3J0aGFuZFByb3BlcnR5KHByb3BlcnR5Lmlk
KCkpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5KiB0b1JlcGxhY2UgPSBzbG90ID8gc2xvdCA6IGZp
bmRDU1NQcm9wZXJ0eVdpdGhJRChwcm9wZXJ0eS5pZCgpKTsKICAgICAgICAgaWYgKHRvUmVwbGFj
ZSkgeworICAgICAgICAgICAgaWYgKCp0b1JlcGxhY2UgPT0gcHJvcGVydHkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgICAgICAqdG9SZXBsYWNlID0gcHJvcGVydHk7
CiAgICAgICAgICAgICBzZXRQcmVmaXhpbmdWYXJpYW50UHJvcGVydHkocHJvcGVydHkpOwotICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgYXBwZW5kUHJlZml4aW5nVmFyaWFudFByb3BlcnR5KHByb3BlcnR5KTsKKworICAg
IHJldHVybiBhcHBlbmRQcmVmaXhpbmdWYXJpYW50UHJvcGVydHkocHJvcGVydHkpOwogfQogCiBz
dGF0aWMgdW5zaWduZWQgZ2V0SW5kZXhJblNob3J0aGFuZFZlY3RvckZvclByZWZpeGluZ1Zhcmlh
bnQoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eUlEIHByZWZpeGluZ1Zh
cmlhbnQpCkBAIC03MjEsMTQgKzcyNywxNSBAQCBzdGF0aWMgdW5zaWduZWQgZ2V0SW5kZXhJblNo
b3J0aGFuZFZlY3RvckZvclByZWZpeGluZ1ZhcmlhbnQoY29uc3QgQ1NTUHJvcGVydHkmCiAgICAg
cmV0dXJuIGluZGV4T2ZTaG9ydGhhbmRGb3JMb25naGFuZChwcmVmaXhlZFNob3J0aGFuZCwgbWF0
Y2hpbmdTaG9ydGhhbmRzRm9yTG9uZ2hhbmQocHJlZml4aW5nVmFyaWFudCkpOwogfQogCi12b2lk
IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmFwcGVuZFByZWZpeGluZ1ZhcmlhbnRQcm9wZXJ0eShj
b25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkpCitib29sIE11dGFibGVTdHlsZVByb3BlcnRpZXM6
OmFwcGVuZFByZWZpeGluZ1ZhcmlhbnRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVy
dHkpCiB7CiAgICAgbV9wcm9wZXJ0eVZlY3Rvci5hcHBlbmQocHJvcGVydHkpOwogICAgIENTU1By
b3BlcnR5SUQgcHJlZml4aW5nVmFyaWFudCA9IHByZWZpeGluZ1ZhcmlhbnRGb3JQcm9wZXJ0eUlk
KHByb3BlcnR5LmlkKCkpOwogICAgIGlmIChwcmVmaXhpbmdWYXJpYW50ID09IHByb3BlcnR5Lmlk
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBtX3Byb3Bl
cnR5VmVjdG9yLmFwcGVuZChDU1NQcm9wZXJ0eShwcmVmaXhpbmdWYXJpYW50LCBwcm9wZXJ0eS52
YWx1ZSgpLCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpLCBwcm9wZXJ0eS5pc1NldEZyb21TaG9ydGhh
bmQoKSwgZ2V0SW5kZXhJblNob3J0aGFuZFZlY3RvckZvclByZWZpeGluZ1ZhcmlhbnQocHJvcGVy
dHksIHByZWZpeGluZ1ZhcmlhbnQpLCBwcm9wZXJ0eS5tZXRhZGF0YSgpLm1faW1wbGljaXQpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQ
cmVmaXhpbmdWYXJpYW50UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5KQpAQCAt
NzQxLDE0ICs3NDgsMTIgQEAgdm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQcmVmaXhp
bmdWYXJpYW50UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3AKIAogYm9vbCBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENT
U1ZhbHVlSUQgaWRlbnRpZmllciwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgc2V0UHJvcGVydHko
Q1NTUHJvcGVydHkocHJvcGVydHlJRCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gc2V0UHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQpKTsKIH0KIAogYm9vbCBN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIENTU1Byb3BlcnR5SUQgaWRlbnRpZmllciwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgc2V0
UHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQpKTsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gc2V0UHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQpKTsKIH0K
IAogdm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0
cmluZyYgc3R5bGVEZWNsYXJhdGlvbiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVT
aGVldCkKQEAgLTc2NCwxOCArNzY5LDI1IEBAIHZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFyYXRpb24sIFN0CiAgICAg
cGFyc2VyLnBhcnNlRGVjbGFyYXRpb24odGhpcywgc3R5bGVEZWNsYXJhdGlvbiwgMCwgY29udGV4
dFN0eWxlU2hlZXQpOwogfQogCi12b2lkIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmFkZFBhcnNl
ZFByb3BlcnRpZXMoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYgcHJvcGVydGllcykKK2Jvb2wg
TXV0YWJsZVN0eWxlUHJvcGVydGllczo6YWRkUGFyc2VkUHJvcGVydGllcyhjb25zdCBWZWN0b3I8
Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVzKQogeworICAgIGJvb2wgYW55Q2hhbmdlZCA9IGZhbHNl
OwogICAgIG1fcHJvcGVydHlWZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KG1fcHJvcGVydHlWZWN0b3Iu
c2l6ZSgpICsgcHJvcGVydGllcy5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwcm9wZXJ0aWVzLnNpemUoKTsgKytpKQotICAgICAgICBhZGRQYXJzZWRQcm9wZXJ0eShwcm9w
ZXJ0aWVzW2ldKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAoYWRkUGFyc2VkUHJvcGVydHkocHJvcGVydGllc1tpXSkp
CisgICAgICAgICAgICBhbnlDaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gYW55
Q2hhbmdlZDsKIH0KIAotdm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjphZGRQYXJzZWRQcm9w
ZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkpCitib29sIE11dGFibGVTdHlsZVByb3Bl
cnRpZXM6OmFkZFBhcnNlZFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSkKIHsK
ICAgICAvLyBPbmx5IGFkZCBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBubyAhaW1wb3J0YW50IGNvdW50
ZXJwYXJ0IHByZXNlbnQKICAgICBpZiAoIXByb3BlcnR5SXNJbXBvcnRhbnQocHJvcGVydHkuaWQo
KSkgfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkKLSAgICAgICAgc2V0UHJvcGVydHkocHJvcGVy
dHkpOworICAgICAgICByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHkpOworICAgIAorICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogU3RyaW5nIFN0eWxlUHJvcGVydGllczo6YXNUZXh0KCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuaAppbmRleCA5ZTljZjIyMTBlYzA1MjdiZGFm
N2Q4NjkwNzZiODEyMDNmMGY5MDdmLi4zMjIzY2E1YTdjM2ZmNDdhOTRjNGIyYjhkMjYyM2IxOGI5
ZTFjY2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5oCkBAIC0xOTMsOCArMTkz
LDggQEAgcHVibGljOgogCiAgICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NT
dHlsZURlY2xhcmF0aW9uKCk7CiAKLSAgICB2b2lkIGFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3Qg
VmVjdG9yPENTU1Byb3BlcnR5PiYpOwotICAgIHZvaWQgYWRkUGFyc2VkUHJvcGVydHkoY29uc3Qg
Q1NTUHJvcGVydHkmKTsKKyAgICBib29sIGFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgVmVjdG9y
PENTU1Byb3BlcnR5PiYpOworICAgIGJvb2wgYWRkUGFyc2VkUHJvcGVydHkoY29uc3QgQ1NTUHJv
cGVydHkmKTsKIAogICAgIC8vIFRoZXNlIGV4cGFuZCBzaG9ydGhhbmQgcHJvcGVydGllcyBpbnRv
IG11bHRpcGxlIHByb3BlcnRpZXMuCiAgICAgYm9vbCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBTdHlsZVNoZWV0
Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0ID0gMCk7CkBAIC0yMDMsMTEgKzIwMywxMSBAQCBw
dWJsaWM6CiAgICAgLy8gVGhlc2UgZG8gbm90LiBGSVhNRTogVGhpcyBpcyB0b28gbWVzc3ksIHdl
IGNhbiBkbyBiZXR0ZXIuCiAgICAgYm9vbCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NW
YWx1ZUlEIGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwogICAgIGJvb2wgc2V0
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTUHJvcGVydHlJRCBpZGVudGlmaWVyLCBib29sIGlt
cG9ydGFudCA9IGZhbHNlKTsKLSAgICB2b2lkIGFwcGVuZFByZWZpeGluZ1ZhcmlhbnRQcm9wZXJ0
eShjb25zdCBDU1NQcm9wZXJ0eSYpOworICAgIGJvb2wgYXBwZW5kUHJlZml4aW5nVmFyaWFudFBy
b3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5Jik7CiAgICAgdm9pZCBzZXRQcmVmaXhpbmdWYXJpYW50
UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmKTsKLSAgICB2b2lkIHNldFByb3BlcnR5KGNvbnN0
IENTU1Byb3BlcnR5JiwgQ1NTUHJvcGVydHkqIHNsb3QgPSAwKTsKKyAgICBib29sIHNldFByb3Bl
cnR5KGNvbnN0IENTU1Byb3BlcnR5JiwgQ1NTUHJvcGVydHkqIHNsb3QgPSBudWxscHRyKTsKIAot
ICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgU3RyaW5nKiByZXR1cm5UZXh0
ID0gMCk7CisgICAgYm9vbCByZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBTdHJpbmcqIHJl
dHVyblRleHQgPSBudWxscHRyKTsKICAgICB2b2lkIHJlbW92ZVByZWZpeGVkT3JVbnByZWZpeGVk
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAgICAgdm9pZCByZW1vdmVCbG9ja1Byb3BlcnRpZXMo
KTsKICAgICBib29sIHJlbW92ZVByb3BlcnRpZXNJblNldChjb25zdCBDU1NQcm9wZXJ0eUlEKiBz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3Bw
CmluZGV4IDBlNmIyYzY0OTQ2MjJjYzM5OTQ5OTliMzdhNTU2NGUwYmEzODRkYmMuLjExMzA4Nzc1
NjA3MDI2ZTdmN2EzZTc0NTRmMzBjODVhNWZiNTk0MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJL
aXRDU1NNYXRyaXguY3BwCkBAIC01Nyw3ICs1Nyw4IEBAIHZvaWQgV2ViS2l0Q1NTTWF0cml4Ojpz
ZXRNYXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHls
ZURlY2xhcmF0aW9uID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7Ci0gICAgaWYg
KENTU1BhcnNlcjo6cGFyc2VWYWx1ZShzdHlsZURlY2xhcmF0aW9uLmdldCgpLCBDU1NQcm9wZXJ0
eVRyYW5zZm9ybSwgc3RyaW5nLCB0cnVlLCBDU1NTdHJpY3RNb2RlLCAwKSkgeworICAgIGJvb2wg
Y2hhbmdlZDsKKyAgICBpZiAoQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHN0eWxlRGVjbGFyYXRpb24u
Z2V0KCksIENTU1Byb3BlcnR5VHJhbnNmb3JtLCBzdHJpbmcsIHRydWUsIENTU1N0cmljdE1vZGUs
IG51bGxwdHIsIGNoYW5nZWQpKSB7CiAgICAgICAgIC8vIENvbnZlcnQgdG8gVHJhbnNmb3JtT3Bl
cmF0aW9ucy4gVGhpcyBjYW4gZmFpbCBpZiBhIHByb3BlcnR5CiAgICAgICAgIC8vIHJlcXVpcmVz
IHN0eWxlIChpLmUuLCBwYXJhbSB1c2VzICdlbXMnIG9yICdleHMnKQogICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eVRyYW5zZm9ybSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA4ZWZkMzI0
NDgxMjY4OWM3NTMzYzgyZWU1YzRmYjQ5MDBkMTdkNzM5Li4xY2YyODUzNGExNGFmN2M1NThjNWFm
ZTNmNjlhODIwMWNmNzZmYjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE3OTAsNiAr
MTc5MCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlOjpDaGFuZ2UgY2hhbmdl
KQogICAgICAgICBtX2Nsb3NlQWZ0ZXJTdHlsZVJlY2FsYyA9IGZhbHNlOwogICAgICAgICBpbXBs
aWNpdENsb3NlKCk7CiAgICAgfQorICAgIAorICAgICsrbV9zdHlsZVJlY2FsY0NvdW50OwogCiAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNhbGN1bGF0ZVN0eWxlKGNvb2tpZSk7
CiAKQEAgLTYxMzksNiArNjE0MSwxNiBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVMYXN0SGFuZGxl
ZFVzZXJHZXN0dXJlVGltZXN0YW1wKCkKICAgICBtX2xhc3RIYW5kbGVkVXNlckdlc3R1cmVUaW1l
c3RhbXAgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKIH0KIAordm9pZCBEb2N1bWVu
dDo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcygpCit7CisgICAgbV9zdHlsZVJlY2FsY0NvdW50
ID0gMDsKK30KKwordW5zaWduZWQgRG9jdW1lbnQ6OnN0eWxlUmVjYWxjQ291bnQoKSBjb25zdAor
eworICAgIHJldHVybiBtX3N0eWxlUmVjYWxjQ291bnQ7Cit9CisKIERvY3VtZW50TG9hZGVyKiBE
b2N1bWVudDo6bG9hZGVyKCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCmluZGV4IDVkZjI3YWVjZTY5MDY4OWUwMWQ2Y2UxMjcxNjhkZDNlYTU0N2QwZTAuLmUz
OWE3YTQzNjFjOTRmMTM2MGJjN2NjZWRiMjMxNTlmNmViYjcxMzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCkBAIC0xMTQxLDYgKzExNDEsOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdW5z
aWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IHVuc2lnbmVkIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSBjb25zdDsKIAorICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcygpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHVuc2lnbmVkIHN0eWxlUmVjYWxjQ291bnQoKSBjb25zdDsKKwogICAgIHZvaWQgZGlkQWRk
VG91Y2hFdmVudEhhbmRsZXIoTm9kZSYpOwogICAgIHZvaWQgZGlkUmVtb3ZlVG91Y2hFdmVudEhh
bmRsZXIoTm9kZSYsIEV2ZW50SGFuZGxlclJlbW92YWwgPSBFdmVudEhhbmRsZXJSZW1vdmFsOjpP
bmUpOwogCkBAIC0xNDQwLDYgKzE0NDMsOCBAQCBwcml2YXRlOgogICAgIC8vIGh0dHA6Ly93d3cu
d2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI2lnbm9yZS1kZXN0cnVjdGl2
ZS13cml0ZXMtY291bnRlcgogICAgIHVuc2lnbmVkIG1faWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNv
dW50OwogCisgICAgdW5zaWduZWQgbV9zdHlsZVJlY2FsY0NvdW50IHsgMCB9OworCiAgICAgU3Ry
aW5nV2l0aERpcmVjdGlvbiBtX3RpdGxlOwogICAgIFN0cmluZ1dpdGhEaXJlY3Rpb24gbV9yYXdU
aXRsZTsKICAgICBib29sIG1fdGl0bGVTZXRFeHBsaWNpdGx5OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXgg
YmYyMmQyNzJiMTg4MGViYTc3YTFkNGExMDViMzUzZWYzMzY3ODZhNC4uMWUzMjBmYmVjYTQ3ZjA1
MTNkMWYzYTA4ODY1N2JkYzkzZTU2Y2Q4NCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0yMDc1LDcgKzIw
NzUsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJp
bmcmIG5ld0ZvbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBwYXJzZWRTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgp
OwotICAgIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShwYXJzZWRTdHlsZS5nZXQoKSwgQ1NTUHJvcGVy
dHlGb250LCBuZXdGb250LCB0cnVlLCBzdHJpY3RUb0NTU1BhcnNlck1vZGUoIW1fdXNlc0NTU0Nv
bXBhdGliaWxpdHlQYXJzZU1vZGUpLCAwKTsKKyAgICBib29sIGNoYW5nZWQ7CisgICAgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKHBhcnNlZFN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eUZvbnQsIG5ld0Zv
bnQsIHRydWUsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghbV91c2VzQ1NTQ29tcGF0aWJpbGl0eVBh
cnNlTW9kZSksIDAsIGNoYW5nZWQpOwogICAgIGlmIChwYXJzZWRTdHlsZS0+aXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCA3
YmZmOWVhYjg2ZDU3YzQ4NTE0NjA2OWU0ZDA0ZWNmZTE0ZjRmZjJhLi42MjQ2ZGZlNWYxYTRlZWYw
Zjg1OGZlYzZkZGNkNjA0OTQ1N2FkNWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCkBAIC0yMDY2LDYgKzIwNjYsMjcgQEAgdm9pZCBJbnRlcm5hbHM6OnN0b3BUcmFja2luZ1Jl
cGFpbnRzKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGZyYW1lVmlldy0+c2V0VHJhY2tzUmVwYWlu
dHMoZmFsc2UpOwogfQogCit2b2lkIEludGVybmFsczo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxj
cyhFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0
RG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9B
Q0NFU1NfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRvY3VtZW50LT5zdGFydFRy
YWNraW5nU3R5bGVSZWNhbGNzKCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgSW50ZXJuYWxzOjpzdHls
ZVJlY2FsY0NvdW50KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpIHsKKyAgICAg
ICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gZG9jdW1lbnQtPnN0eWxlUmVjYWxjQ291bnQoKTsKK30KKwogdm9pZCBJ
bnRlcm5hbHM6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RM
YXlvdXRUYXNrcyhFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICB1cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHNBbmRSdW5Qb3N0TGF5b3V0VGFza3MobnVsbHB0ciwgZWMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggN2Q3OTUwYmRmNDhmOThhMzQ3MDU1MzFlMzcy
YmY3Zjk2YmU3OGZmZS4uN2U2OTg5OGU0NWYxYTQ3ZTNjOGY5MjAyNjAxYmYyM2U4ZDQyNjRmYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0yOTQsNiArMjk0LDEwIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc3RhcnRUcmFja2luZ1JlcGFpbnRzKEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICB2b2lkIHN0b3BUcmFja2luZ1JlcGFpbnRzKEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZvaWQg
c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcyhFeGNlcHRpb25Db2RlJik7CisgICAgdW5zaWduZWQg
bG9uZyBzdHlsZVJlY2FsY0NvdW50KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKwogICAgIHZvaWQg
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzQW5kUnVuUG9zdExheW91dFRhc2tz
KEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyhOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5kZXggMGFmZmNiYmU5NGI1OTgxNTk1YzE1
ZjQ3YTdjOGVhOTkwOGUwZDlhYi4uYjVhNGQ5NmQ3YjQ3YWFjYzE1NDg5MGJiOGUxMDljNWRlYTgx
MDdjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtMjc0LDYgKzI3NCw5
IEBAIGVudW0gUmVzb3VyY2VMb2FkUHJpb3JpdHkgewogICAgIC8vIFF1ZXJ5IGlmIGEgdGltZXIg
aXMgY3VycmVudGx5IHRocm90dGxlZCwgdG8gZGVidWcgdGltZXIgdGhyb3R0bGluZy4KICAgICBb
UmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGlzVGltZXJUaHJvdHRsZWQobG9uZyB0aW1lckhhbmRs
ZSk7CiAKKyAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHN0YXJ0VHJhY2tpbmdTdHlsZVJlY2Fs
Y3MoKTsKKyAgICBbUmFpc2VzRXhjZXB0aW9uXSB1bnNpZ25lZCBsb25nIHN0eWxlUmVjYWxjQ291
bnQoKTsKKwogICAgIC8vIHxub2RlfCBzaG91bGQgYmUgRG9jdW1lbnQsIEhUTUxJRnJhbWVFbGVt
ZW50LCBvciB1bnNwZWNpZmllZC4KICAgICAvLyBJZiB8bm9kZXwgaXMgYW4gSFRNTElGcmFtZUVs
ZW1lbnQsIGl0IGFzc3VtZXMgbm9kZS5jb250ZW50RG9jdW1lbnQgaXMKICAgICAvLyBzcGVjaWZp
ZWQgd2l0aG91dCBzZWN1cml0eSBjaGVja3MuIFVuc3BlY2lmaWVkIG1lYW5zIHRoaXMgZG9jdW1l
bnQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggYTBiNDlmN2I0MzQ5YWI0YjA0OTJiYjQwMDg1NzY1MDkwZWY1ZDBmYS4uOWVk
OWZlOWZkYTFkYzQ1MWZlNzU5OTQ4ZmRiMzFiZGMxZWNiNjJkOSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDE1LTA0LTE4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFNldHRpbmcgaW5saW5lIHN0eWxlIHRvIHRoZSBzYW1lIHZhbHVlIGl0IGFscmVh
ZHkgaGFzIHRyaWdnZXJzIGEgc3R5bGUgcmVjYWxjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM5MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0IHRoYXQgY2hhbmdlcyBpbmxpbmUtc3R5bGUgKHRv
IHRlc3QgdGhpcyBidWcgZml4KSwgYW5kIGNsYXNzZXMgKGZvcgorICAgICAgICBwcm9hY3RpdmUg
dGVzdGluZykgYW5kIGNvdW50cyBzdHlsZSByZWNhbGNzLgorCisgICAgICAgICogZmFzdC9jc3Mv
c2V0LWlubGluZS1zdHlsZS1yZWNhbGMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Nzcy9zZXQtaW5saW5lLXN0eWxlLXJlY2FsYy5odG1sOiBBZGRlZC4KKwogMjAxNS0wNC0x
NyAgQmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4KIAogICAgICAgICBMYXJnZSB2
YWx1ZXMgZm9yIGxpbmUtaGVpZ2h0IGNhdXNlIGludGVnZXIgb3ZlcmZsb3cgaW4gUmVuZGVyU3R5
bGU6OmNvbXB1dGVkTGluZUhlaWdodApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
c2V0LWlubGluZS1zdHlsZS1yZWNhbGMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc2V0LWlubGluZS1zdHlsZS1yZWNhbGMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczNDQz
ODVkNjUyYjBmOTU5ZTQ0MzZjODFjOTA4NjRjMWQyNzRhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2Nzcy9zZXQtaW5saW5lLXN0eWxlLXJlY2FsYy1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwyMSBAQAorVGVzdCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHJlY2FsY1N0eWxl
IGNhbGxzIG9uIGlubGluZSBzdHlsZSBhbmQgY2xhc3MgY2hhbmdlcy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1MgbnVtU3R5bGVSZWNhbGNzIGlzIDEKK1BBU1MgbnVtU3R5
bGVSZWNhbGNzIGlzIDEKK1BBU1MgbnVtU3R5bGVSZWNhbGNzIGlzIDAKK1BBU1MgbnVtU3R5bGVS
ZWNhbGNzIGlzIDEKK1BBU1MgbnVtU3R5bGVSZWNhbGNzIGlzIDAKK1BBU1MgbnVtU3R5bGVSZWNh
bGNzIGlzIDEKK1BBU1MgbnVtU3R5bGVSZWNhbGNzIGlzIDAKK1BBU1MgbnVtU3R5bGVSZWNhbGNz
IGlzIDEKK1BBU1MgbnVtU3R5bGVSZWNhbGNzIGlzIDAKK1BBU1MgbnVtU3R5bGVSZWNhbGNzIGlz
IDEKK1BBU1MgbnVtU3R5bGVSZWNhbGNzIGlzIDAKK1BBU1MgbnVtU3R5bGVSZWNhbGNzIGlzIDEK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zZXQtaW5saW5lLXN0eWxlLXJlY2FsYy5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc2V0LWlubGluZS1zdHlsZS1yZWNhbGMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xYTRiZmYwMzExMjNmMDkxNDg2OTVjM2I0N2NkZTY4MDU0MjM0YWFiCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc2V0LWlubGluZS1zdHlsZS1yZWNhbGMu
aHRtbApAQCAtMCwwICsxLDc4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
dHlsZT4KKyAgICAudGVzdCB7CisgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB9Cisg
ICAgCisgICAgLmZvbyB7CisgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKKyAgICB9CisgICAgCisg
ICAgLmJhciB7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Z1
bmN0aW9uIHNldFN0eWxlQW5kRm9yY2VMYXlvdXQoY2hhbmdlRnVuYykKK3sKKyAgICBpZiAod2lu
ZG93LmludGVybmFscykgeworICAgICAgICBpbnRlcm5hbHMudXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzQW5kUnVuUG9zdExheW91dFRhc2tzKCk7CisgICAgICAgIGludGVybmFs
cy5zdGFydFRyYWNraW5nU3R5bGVSZWNhbGNzKCk7CisgICAgfQorCisgICAgY2hhbmdlRnVuYygp
OworCisgICAgdmFyIG51bVN0eWxlUmVjYWxjcyA9IDA7CisgICAgaWYgKHdpbmRvdy5pbnRlcm5h
bHMpIHsKKyAgICAgICAgaW50ZXJuYWxzLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcygpOworICAgICAgICBudW1TdHlsZVJlY2FsY3MgPSBp
bnRlcm5hbHMuc3R5bGVSZWNhbGNDb3VudCgpOworICAgIH0KKyAgICByZXR1cm4gbnVtU3R5bGVS
ZWNhbGNzOworfQorCitkZXNjcmlwdGlvbigiVGVzdCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHJl
Y2FsY1N0eWxlIGNhbGxzIG9uIGlubGluZSBzdHlsZSBhbmQgY2xhc3MgY2hhbmdlcy4iKQorCit2
YXIgdGVzdENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwordGVzdENv
bnRhaW5lci5jbGFzc05hbWUgPSAndGVzdCc7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRl
c3RDb250YWluZXIpOworCit2YXIgc3R5bGUgPSB0ZXN0Q29udGFpbmVyLnN0eWxlOworCit2YXIg
bnVtU3R5bGVSZWNhbGNzID0gc2V0U3R5bGVBbmRGb3JjZUxheW91dChmdW5jdGlvbigpIHsgc3R5
bGUuaGVpZ2h0ID0gIjEwcHgiOyB9KTsKK3Nob3VsZEJlKCJudW1TdHlsZVJlY2FsY3MiLCAiMSIp
OworbnVtU3R5bGVSZWNhbGNzID0gc2V0U3R5bGVBbmRGb3JjZUxheW91dChmdW5jdGlvbigpIHsg
c3R5bGUuaGVpZ2h0ID0gIjIwcHgiOyB9KTsKK3Nob3VsZEJlKCJudW1TdHlsZVJlY2FsY3MiLCAi
MSIpOworbnVtU3R5bGVSZWNhbGNzID0gc2V0U3R5bGVBbmRGb3JjZUxheW91dChmdW5jdGlvbigp
IHsgc3R5bGUuaGVpZ2h0ID0gIjIwcHgiOyB9KTsKK3Nob3VsZEJlKCJudW1TdHlsZVJlY2FsY3Mi
LCAiMCIpOworCitudW1TdHlsZVJlY2FsY3MgPSBzZXRTdHlsZUFuZEZvcmNlTGF5b3V0KGZ1bmN0
aW9uKCkgeyBzdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb24gPSAiMTBweCAxMCUiOyB9KTsKK3Nob3Vs
ZEJlKCJudW1TdHlsZVJlY2FsY3MiLCAiMSIpOworbnVtU3R5bGVSZWNhbGNzID0gc2V0U3R5bGVB
bmRGb3JjZUxheW91dChmdW5jdGlvbigpIHsgc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID0gIjEw
cHggMTAlIjsgfSk7CitzaG91bGRCZSgibnVtU3R5bGVSZWNhbGNzIiwgIjAiKTsKKworbnVtU3R5
bGVSZWNhbGNzID0gc2V0U3R5bGVBbmRGb3JjZUxheW91dChmdW5jdGlvbigpIHsgc3R5bGUuYmFj
a2dyb3VuZENvbG9yID0gInJlZCI7IH0pOworc2hvdWxkQmUoIm51bVN0eWxlUmVjYWxjcyIsICIx
Iik7CitudW1TdHlsZVJlY2FsY3MgPSBzZXRTdHlsZUFuZEZvcmNlTGF5b3V0KGZ1bmN0aW9uKCkg
eyBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAicmVkIjsgfSk7CitzaG91bGRCZSgibnVtU3R5bGVS
ZWNhbGNzIiwgIjAiKTsKKworbnVtU3R5bGVSZWNhbGNzID0gc2V0U3R5bGVBbmRGb3JjZUxheW91
dChmdW5jdGlvbigpIHsgc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZSgxMHB4LCAxMHB4KSBy
b3RhdGUoMTBkZWcpIjsgfSk7CitzaG91bGRCZSgibnVtU3R5bGVSZWNhbGNzIiwgIjEiKTsKK251
bVN0eWxlUmVjYWxjcyA9IHNldFN0eWxlQW5kRm9yY2VMYXlvdXQoZnVuY3Rpb24oKSB7IHN0eWxl
LnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGUoMTBweCwgMTBweCkgcm90YXRlKDEwZGVnKSI7IH0pOwor
c2hvdWxkQmUoIm51bVN0eWxlUmVjYWxjcyIsICIwIik7CisKK251bVN0eWxlUmVjYWxjcyA9IHNl
dFN0eWxlQW5kRm9yY2VMYXlvdXQoZnVuY3Rpb24oKSB7IHRlc3RDb250YWluZXIuY2xhc3NMaXN0
LmFkZCgnZm9vJyk7IH0pOworc2hvdWxkQmUoIm51bVN0eWxlUmVjYWxjcyIsICIxIik7CitudW1T
dHlsZVJlY2FsY3MgPSBzZXRTdHlsZUFuZEZvcmNlTGF5b3V0KGZ1bmN0aW9uKCkgeyB0ZXN0Q29u
dGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2ZvbycpOyB9KTsKK3Nob3VsZEJlKCJudW1TdHlsZVJlY2Fs
Y3MiLCAiMCIpOworbnVtU3R5bGVSZWNhbGNzID0gc2V0U3R5bGVBbmRGb3JjZUxheW91dChmdW5j
dGlvbigpIHsgdGVzdENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdiYXInKTsgfSk7CitzaG91bGRC
ZSgibnVtU3R5bGVSZWNhbGNzIiwgIjEiKTsKKworZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0
ZXN0Q29udGFpbmVyKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251104</attachid>
            <date>2015-04-18 18:27:47 -0700</date>
            <delta_ts>2015-04-19 02:39:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143922-20150418182646.patch</filename>
            <type>text/plain</type>
            <size>34237</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyOTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGFhYzlkNjUxYjgxYTFm
MWY5OTg3ZmI3NWI5OGExNzNhMTk4ZDE1Ny4uNTc3Mzg1OGQ3OTgxMzJiMmJjZmU2MTg2MDRkYjBh
MDRlYTEyYzRlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU3IEBACiAyMDE1LTA0LTE4ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIFNldHRpbmcgaW5s
aW5lIHN0eWxlIHRvIHRoZSBzYW1lIHZhbHVlIGl0IGFscmVhZHkgaGFzIHRyaWdnZXJzIGEgc3R5
bGUgcmVjYWxjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDM5MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eSgpIHdhcyB0YWtpbmcgdGhlIHJl
c3VsdCBvZiBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoKQorICAgICAgICB0byBtZWFuICJwYXJzaW5n
IGNoYW5nZWQgdGhlIHN0eWxlIiwgYnV0IGl0IGFjdHVhbGx5IGp1c3QgbWVhbnMgInBhcnNpbmcg
c3VjY2VlZGVkIi4KKyAgICAgICAgQWRkIGEgbmV3IG91dCBwYXJhbSwgcGlwZWQgdGhyb3VnaCB2
YXJpb3VzIHBhcnNlciBmdW5jdGlvbnMsIHRvIGluZGljYXRlIHdoZXRoZXIKKyAgICAgICAgcGFy
c2luZyBhY3R1YWxseSBjaGFuZ2VkIHN0eWxlLCBhbmQgaW5zdGVhZCByZXR1cm4gdGhhdCBmcm9t
IHNldFByb3BlcnR5KCkuCisKKyAgICAgICAgQWRkIGludGVybmFscy5zdGFydFRyYWNraW5nU3R5
bGVSZWNhbGNzKCkgYW5kIGludGVybmFscy5zdHlsZVJlY2FsY0NvdW50KCkgc28KKyAgICAgICAg
d2UgY2FuIHdyaXRlIHRlc3RzIGZvciBzdHlsZSByZWNhbGMuCisKKyAgICAgICAgVGVzdDogZmFz
dC9jc3Mvc2V0LWlubGluZS1zdHlsZS1yZWNhbGMuaHRtbAorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBMZXQgWGNvZGUgaGF2ZSBpdCdzIHdheS4KKyAgICAg
ICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3JWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlS2V5d29yZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJh
bnNsYXRlVHJhbnNmb3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZUZvbnRGYWNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVl
KToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5TWV0YWRhdGE6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHk6Om9wZXJhdG9yPT0pOgorICAgICAgICAq
IGNzcy9ET01XaW5kb3dDU1MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Q1NTOjpz
dXBwb3J0cyk6CisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydGllcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjphcHBlbmRQcmVmaXhpbmdWYXJpYW50UHJv
cGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6TXV0YWJsZVN0eWxlUHJvcGVydGllczo6YWRkUGFy
c2VkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
OjphZGRQYXJzZWRQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydGllcy5oOgor
ICAgICAgICAqIGNzcy9XZWJLaXRDU1NNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
S2l0Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1ZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6c3R5bGVSZWNhbGNDb3VudCk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udCk6
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpzdGFydFRyYWNraW5nU3R5bGVSZWNhbGNzKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6c3R5bGVSZWNhbGNDb3VudCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMu
aDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKKzIwMTUtMDQtMTggIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAgICAgICAgUkVHUkVTU0lPTiAo
cjE4MTY1Nik6IEFuaW1hdGVkIHRpbGVkIGxheWVycyBhcmUgbWlzc2luZyBjb250ZW50CiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM5MTEKICAgICAg
ICAgcmRhcjovL3Byb2JsZW0vMjA1OTYzMjgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1MTEwZTBiNjNjYjZiOTFkYTRkZjgwNzE2
ZDk5MDQzNTE1NDI2ZmVkLi4xNWVmMDE1MTlkZjhkZDQ0ZDBiYzBlYjVhYmVmYWNiODNlNWRmMzIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMjgwMSw3ICsxMjgwMSw3IEBACiAJCUJDNzREQTQ3MTAxM0Y0NjgwMDc5ODdBRCAv
KiBKU1JHQkNvbG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUkdCQ29s
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM3NkFDMTEwREQ3QUQ1QzAwNDE1
RjM0IC8qIFBhcnNlclV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQYXJzZXJVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM3NzJC
MzYwQzRFQTkxRTAwODMyODVGIC8qIENTU0hlbHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ1NTSGVscGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJD
NzcyQjM3MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBDU1NQYXJzZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4
Y29kZS5sYW5nLmNwcDsgfTsKKwkJQkM3NzJCMzcwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0
aCA9IENTU1BhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyQjM4
MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENTU1BhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3
MkM0NDBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkM3NzJDNDUwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1
ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRl
eCAzMGUwNWI2ZmQxN2Q3MjgzZDBiYjdhMDZhZjlkNzZmM2IyNzNiNDllLi5kYTA3NWY0NTRkYWE3
ZmNkZjE1MTRkYzM3ZGJmNjM1NWY1YjFmOGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApA
QCAtNTIwLDcgKzUyMCw3IEBAIHN0YXRpYyBib29sIHZhbGlkUHJpbWl0aXZlVmFsdWVDb2xvcihD
U1NWYWx1ZUlEIHZhbHVlSUQsIGJvb2wgc3RyaWN0ID0gZmFsc2UpCiAgICAgICAgIHx8ICh2YWx1
ZUlEID49IENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IgJiYgdmFsdWVJRCA8IENTU1ZhbHVl
V2Via2l0VGV4dCAmJiAhc3RyaWN0KSk7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlQ29sb3JWYWx1
ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBib29sIHBhcnNlQ29sb3JWYWx1ZShNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBjb25z
dCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSwgYm9vbCYgY2hhbmdlZCkKIHsKICAgICBBU1NFUlQoIXN0cmluZy5pc0VtcHR5KCkpOwog
ICAgIGJvb2wgc3RyaWN0ID0gaXNTdHJpY3RQYXJzZXJNb2RlKGNzc1BhcnNlck1vZGUpOwpAQCAt
NTMxLDE0ICs1MzEsMTQgQEAgc3RhdGljIGJvb2wgcGFyc2VDb2xvclZhbHVlKE11dGFibGVTdHls
ZVByb3BlcnRpZXMqIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHAKICAgICBDU1NWYWx1ZUlE
IHZhbHVlSUQgPSBjc3NWYWx1ZUtleXdvcmRJRChjc3NTdHJpbmcpOwogICAgIGlmICh2YWxpZFBy
aW1pdGl2ZVZhbHVlQ29sb3IodmFsdWVJRCwgc3RyaWN0KSkgewogICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVl
SUQpOwotICAgICAgICBkZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHko
cHJvcGVydHlJZCwgdmFsdWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpKTsKKyAgICAgICAgY2hhbmdl
ZCA9IGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlk
LCB2YWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgUkdCQTMyIGNvbG9yOwogICAgIGlmICghQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xv
cihjb2xvciwgc3RyaW5nLCBzdHJpY3QgJiYgc3RyaW5nWzBdICE9ICcjJykpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlQ29sb3JWYWx1ZShjb2xvcik7Ci0gICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3Bl
cnR5KENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIHZhbHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KSk7
CisgICAgY2hhbmdlZCA9IGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0
eShwcm9wZXJ0eUlkLCB2YWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC02MTQsNyArNjE0LDcgQEAgc3RhdGljIGlubGluZSBib29sIHBhcnNlU2lt
cGxlTGVuZ3RoKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkJgogICAg
IHJldHVybiBvazsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlk
LCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSkKK3N0YXRpYyBib29sIHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoTXV0YWJsZVN0
eWxlUHJvcGVydGllcyogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUsIGJvb2wmIGNoYW5nZWQpCiB7CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsK
ICAgICBib29sIGFjY2VwdHNOZWdhdGl2ZU51bWJlcnM7CkBAIC02NDQsNyArNjQ0LDcgQEAgc3Rh
dGljIGJvb2wgcGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBk
ZWNsYXJhdGlvbiwgQ1NTUHJvcGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKG51bWJlciwgdW5p
dCk7Ci0gICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3Bl
cnR5SWQsIHZhbHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KSk7CisgICAgY2hhbmdlZCA9IGRlY2xh
cmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZS5y
ZWxlYXNlKCksIGltcG9ydGFudCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTc4LDcg
KzExNzgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNLZXl3b3JkUHJvcGVydHlJRChDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SWQpCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUtleXdvcmRW
YWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIGNvbnN0IENT
U1BhcnNlckNvbnRleHQmIHBhcnNlckNvbnRleHQsIFN0eWxlU2hlZXRDb250ZW50cyogc3R5bGVT
aGVldENvbnRlbnRzKQorc3RhdGljIGJvb2wgcGFyc2VLZXl3b3JkVmFsdWUoTXV0YWJsZVN0eWxl
UHJvcGVydGllcyogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBw
YXJzZXJDb250ZXh0LCBTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlU2hlZXRDb250ZW50cywgYm9v
bCYgY2hhbmdlZCkKIHsKICAgICBBU1NFUlQoIXN0cmluZy5pc0VtcHR5KCkpOwogCkBAIC0xMjEw
LDcgKzEyMTAsNyBAQCBzdGF0aWMgYm9vbCBwYXJzZUtleXdvcmRWYWx1ZShNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRAogICAgIGVsc2UKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnR5KENTU1By
b3BlcnR5KHByb3BlcnR5SWQsIHZhbHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KSk7CisgICAgY2hh
bmdlZCA9IGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0
eUlkLCB2YWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCkpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0xMjM1LDcgKzEyMzUsNyBAQCBzdGF0aWMgYm9vbCBwYXJzZVRyYW5zZm9ybVRyYW5zbGF0
ZUFyZ3VtZW50cyhXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSYgdHJhbnNmb3JtVgogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZVRyYW5zbGF0ZVRyYW5zZm9ybVZhbHVlKE11
dGFibGVTdHlsZVByb3BlcnRpZXMqIHByb3BlcnRpZXMsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50KQorc3RhdGljIGJvb2wgcGFy
c2VUcmFuc2xhdGVUcmFuc2Zvcm1WYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0
aWVzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29s
IGltcG9ydGFudCwgYm9vbCYgY2hhbmdlZCkKIHsKICAgICBpZiAocHJvcGVydHlJRCAhPSBDU1NQ
cm9wZXJ0eVRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI3OCw3ICsxMjc4
LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VUcmFuc2xhdGVUcmFuc2Zvcm1WYWx1ZShNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzLCBDU1MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHJlc3VsdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VT
ZXBhcmF0ZWQoKTsKICAgICByZXN1bHQtPmFwcGVuZCh0cmFuc2Zvcm1WYWx1ZS5yZWxlYXNlTm9u
TnVsbCgpKTsKLSAgICBwcm9wZXJ0aWVzLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShD
U1NQcm9wZXJ0eVRyYW5zZm9ybSwgcmVzdWx0LnJlbGVhc2UoKSwgaW1wb3J0YW50KSk7CisgICAg
Y2hhbmdlZCA9IHByb3BlcnRpZXMtPmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KENTU1By
b3BlcnR5VHJhbnNmb3JtLCByZXN1bHQucmVsZWFzZSgpLCBpbXBvcnRhbnQpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMTI4Nyw3ICsxMjg3LDggQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxp
c3Q+IENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgc3Ry
aW4KICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGR1bW15U3R5bGUgPSBNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKLSAgICBpZiAoIXBhcnNlVmFsdWUoZHVtbXlTdHlsZS5n
ZXQoKSwgQ1NTUHJvcGVydHlGb250RmFtaWx5LCBzdHJpbmcsIGZhbHNlLCBDU1NRdWlya3NNb2Rl
LCBudWxscHRyKSkKKyAgICBib29sIGNoYW5nZWQ7CisgICAgaWYgKCFwYXJzZVZhbHVlKGR1bW15
U3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5Rm9udEZhbWlseSwgc3RyaW5nLCBmYWxzZSwgQ1NTUXVp
cmtzTW9kZSwgbnVsbHB0ciwgY2hhbmdlZCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgUmVmUHRyPENTU1ZhbHVlPiBmb250RmFtaWx5ID0gZHVtbXlTdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwpAQCAtMTI5NiwxMiArMTI5NywxMiBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVmFsdWUoY29u
c3QgQXRvbWljU3RyaW5nJiBzdHJpbgogICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PENT
U1ZhbHVlTGlzdD4oZm9udEZhbWlseS5yZWxlYXNlKCkpOwogfQogCi1ib29sIENTU1BhcnNlcjo6
cGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENT
U1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5
bGVTaGVldCkKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRp
ZXMqIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBTdHls
ZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0LCBib29sJiBjaGFuZ2VkKQogewogICAg
IEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7Ci0gICAgaWYgKHBhcnNlU2ltcGxlTGVuZ3RoVmFs
dWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0cmluZywgaW1wb3J0YW50LCBjc3NQYXJzZXJN
b2RlKSkKKyAgICBpZiAocGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVy
dHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQsIGNzc1BhcnNlck1vZGUsIGNoYW5nZWQpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAocGFyc2VDb2xvclZhbHVlKGRlY2xhcmF0aW9uLCBwcm9w
ZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFudCwgY3NzUGFyc2VyTW9kZSkpCisgICAgaWYgKHBhcnNl
Q29sb3JWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQsIGNz
c1BhcnNlck1vZGUsIGNoYW5nZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIENTU1Bh
cnNlckNvbnRleHQgY29udGV4dChjc3NQYXJzZXJNb2RlKTsKQEAgLTEzMTAsMTcgKzEzMTEsMTgg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyogZGVj
bGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHIKICAgICAgICAgY29udGV4dC5tb2RlID0gY3NzUGFy
c2VyTW9kZTsKICAgICB9CiAKLSAgICBpZiAocGFyc2VLZXl3b3JkVmFsdWUoZGVjbGFyYXRpb24s
IHByb3BlcnR5SUQsIHN0cmluZywgaW1wb3J0YW50LCBjb250ZXh0LCBjb250ZXh0U3R5bGVTaGVl
dCkpCisgICAgaWYgKHBhcnNlS2V5d29yZFZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBz
dHJpbmcsIGltcG9ydGFudCwgY29udGV4dCwgY29udGV4dFN0eWxlU2hlZXQsIGNoYW5nZWQpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAocGFyc2VUcmFuc2xhdGVUcmFuc2Zvcm1WYWx1
ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQpKQorICAgIGlmIChw
YXJzZVRyYW5zbGF0ZVRyYW5zZm9ybVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJp
bmcsIGltcG9ydGFudCwgY2hhbmdlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgQ1NT
UGFyc2VyIHBhcnNlcihjb250ZXh0KTsKLSAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWUoZGVj
bGFyYXRpb24sIHByb3BlcnR5SUQsIHN0cmluZywgaW1wb3J0YW50LCBjb250ZXh0U3R5bGVTaGVl
dCk7CisgICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlE
LCBzdHJpbmcsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hlZXQsIGNoYW5nZWQpOwogfQogCi1i
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJh
dGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9v
bCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCitib29s
IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlv
biwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBp
bXBvcnRhbnQsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQsIGJvb2wmIGNo
YW5nZWQpCiB7CisgICAgY2hhbmdlZCA9IGZhbHNlOwogICAgIHNldFN0eWxlU2hlZXQoY29udGV4
dFN0eWxlU2hlZXQpOwogCiAgICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LXZhbHVleyIsIHN0cmlu
ZywgIn0gIik7CkBAIC0xMzM3LDcgKzEzMzksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1
ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcgog
ICAgICAgICBkZWxldGVGb250RmFjZU9ubHlWYWx1ZXMoKTsKICAgICBpZiAoIW1fcGFyc2VkUHJv
cGVydGllcy5pc0VtcHR5KCkpIHsKICAgICAgICAgb2sgPSB0cnVlOwotICAgICAgICBkZWNsYXJh
dGlvbi0+YWRkUGFyc2VkUHJvcGVydGllcyhtX3BhcnNlZFByb3BlcnRpZXMpOworICAgICAgICBj
aGFuZ2VkID0gZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMobV9wYXJzZWRQcm9wZXJ0
aWVzKTsKICAgICAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmgKaW5kZXggZWFkMDMyNzFmZGMwYTlkYzI4MDhhYmRiNzQ2MjU1ZWE2NDY1MmVhOC4uMjE0
ZTg0NDBlNDQwNWU2MjVlNGQ2MjY3N2JlNWI5ZDc5N2JhMDYyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuaApAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFN0eWxlUnVs
ZUJhc2U+IHBhcnNlUnVsZShTdHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJpbmcmKTsKICAg
ICBQYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IHBhcnNlS2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRD
b250ZW50cyosIGNvbnN0IFN0cmluZyYpOwogICAgIGJvb2wgcGFyc2VTdXBwb3J0c0NvbmRpdGlv
bihjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZVZhbHVlKE11dGFibGVTdHls
ZVByb3BlcnRpZXMqLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFu
dCwgQ1NTUGFyc2VyTW9kZSwgU3R5bGVTaGVldENvbnRlbnRzKik7CisgICAgc3RhdGljIGJvb2wg
cGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiwgQ1NTUHJvcGVydHlJRCwgY29uc3Qg
U3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUsIFN0eWxlU2hlZXRDb250ZW50
cyosIGJvb2wmIGNoYW5nZWQpOwogICAgIHN0YXRpYyBib29sIHBhcnNlQ29sb3IoUkdCQTMyJiBj
b2xvciwgY29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7CiAgICAgc3RhdGljIGJv
b2wgcGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBEb2N1bWVu
dCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VGb250RmFjZVZh
bHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOwpAQCAtNTQ5LDcgKzU0OSw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBpc0dlbmVyYXRlZEltYWdlVmFsdWUoQ1NTUGFyc2VyVmFsdWUmKSBjb25zdDsKICAg
ICBib29sIHBhcnNlR2VuZXJhdGVkSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENT
U1ZhbHVlPiYpOwogCi0gICAgYm9vbCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMq
LCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgU3R5bGVTaGVl
dENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CisgICAgYm9vbCBwYXJzZVZhbHVlKE11dGFi
bGVTdHlsZVByb3BlcnRpZXMqLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGlt
cG9ydGFudCwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCwgYm9vbCYgY2hh
bmdlZCk7CiAgICAgUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyc2VEZWNsYXJhdGlv
bihjb25zdCBTdHJpbmcmLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsK
IAogICAgIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gcGFyc2VJbnNldFJvdW5kZWRDb3JuZXJz
KFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZUluc2V0PiwgQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQcm9wZXJ0eS5oCmluZGV4IDE5YzQ0ODk2YzFlNmIzNTAzZmFmOWI2Y2U5NTAy
ZWQyYmUzMmIwN2EuLjAzNDhlYjI5MTljMGYxMzM3YmUwZTNiNzhiY2Y1N2I5NmJlOTI3MDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5oCkBAIC00NCw2ICs0NCwxNiBAQCBzdHJ1Y3QgU3R5bGVQ
cm9wZXJ0eU1ldGFkYXRhIHsKICAgICB9CiAKICAgICBDU1NQcm9wZXJ0eUlEIHNob3J0aGFuZElE
KCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlUHJvcGVydHlN
ZXRhZGF0YSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eUlE
ID09IG90aGVyLm1fcHJvcGVydHlJRAorICAgICAgICAgICAgJiYgbV9pc1NldEZyb21TaG9ydGhh
bmQgPT0gb3RoZXIubV9pc1NldEZyb21TaG9ydGhhbmQKKyAgICAgICAgICAgICYmIG1faW5kZXhJ
blNob3J0aGFuZHNWZWN0b3IgPT0gb3RoZXIubV9pbmRleEluU2hvcnRoYW5kc1ZlY3RvcgorICAg
ICAgICAgICAgJiYgbV9pbXBvcnRhbnQgPT0gb3RoZXIubV9pbXBvcnRhbnQKKyAgICAgICAgICAg
ICYmIG1faW1wbGljaXQgPT0gb3RoZXIubV9pbXBsaWNpdAorICAgICAgICAgICAgJiYgbV9pbmhl
cml0ZWQgPT0gb3RoZXIubV9pbmhlcml0ZWQ7CisgICAgfQogCiAgICAgdWludDE2X3QgbV9wcm9w
ZXJ0eUlEIDogMTA7CiAgICAgdWludDE2X3QgbV9pc1NldEZyb21TaG9ydGhhbmQgOiAxOwpAQCAt
NzYsNiArODYsMjAgQEAgcHVibGljOgogCiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eU1ldGFkYXRh
JiBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KIAorICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDU1NQcm9wZXJ0eSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoIShtX21ldGFkYXRhID09IG90aGVyLm1fbWV0YWRhdGEpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmICghbV92YWx1ZSAmJiAhb3RoZXIubV92YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICghbV92YWx1ZSB8fCAhb3RoZXIubV92
YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBtX3ZhbHVlLT5lcXVhbHMoKm90aGVyLm1fdmFsdWUpOworICAgIH0KKwogcHJpdmF0ZToKICAg
ICBTdHlsZVByb3BlcnR5TWV0YWRhdGEgbV9tZXRhZGF0YTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+
IG1fdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NV2luZG93Q1NTLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9ET01XaW5kb3dDU1MuY3BwCmluZGV4IDU4NzgyYzc2Mjdj
NGZmYzQ1YTU5ZGU1ODM3YzUwMTRhYjcyNmYwMWQuLjMwN2IwNWUzODFjZGUxMGFhMTZmMTRiMmJm
NDdmYzBmYjcyMTBjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9ET01XaW5kb3dD
U1MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9ET01XaW5kb3dDU1MuY3BwCkBAIC03Miw3
ICs3Miw4IEBAIGJvb2wgRE9NV2luZG93Q1NTOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIHByb3Bl
cnR5LCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZHVtbXlTdHlsZSA9IE11dGFibGVT
dHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwotICAgIHJldHVybiBDU1NQYXJzZXI6OnBhcnNlVmFs
dWUoZHVtbXlTdHlsZS5nZXQoKSwgcHJvcGVydHlJRCwgbm9ybWFsaXplZFZhbHVlLCBmYWxzZSwg
Q1NTU3RyaWN0TW9kZSwgMCk7CisgICAgYm9vbCBjaGFuZ2VkOworICAgIHJldHVybiBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoZHVtbXlTdHlsZS5nZXQoKSwgcHJvcGVydHlJRCwgbm9ybWFsaXplZFZh
bHVlLCBmYWxzZSwgQ1NTU3RyaWN0TW9kZSwgbnVsbHB0ciwgY2hhbmdlZCk7CiB9CiAKIGJvb2wg
RE9NV2luZG93Q1NTOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIGNvbmRpdGlvblRleHQpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCmluZGV4IGNlNzA3MDdjYTliMGVl
MzQ2ZmQ3NzAyNmZmZTdlYjQyMjc0NTI3YmYuLjE0ZDQ0MDNjYzljZDc1NmZlZmExMTNkM2UzNjZh
MzA2NDRkZWU0NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCkBAIC02
ODEsNyArNjgxLDkgQEAgYm9vbCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYKIAogICAgIC8vIFdoZW4gcmVw
bGFjaW5nIGFuIGV4aXN0aW5nIHByb3BlcnR5IHZhbHVlLCB0aGlzIG1vdmVzIHRoZSBwcm9wZXJ0
eSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAgIC8vIEZpcmVmb3ggcHJlc2VydmVzIHRoZSBw
b3NpdGlvbiwgYW5kIE1TSUUgbW92ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBiZWdpbm5pbmcuCi0g
ICAgcmV0dXJuIENTU1BhcnNlcjo6cGFyc2VWYWx1ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwg
aW1wb3J0YW50LCBjc3NQYXJzZXJNb2RlKCksIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBib29s
IGNoYW5nZWQgPSBmYWxzZTsKKyAgICBDU1NQYXJzZXI6OnBhcnNlVmFsdWUodGhpcywgcHJvcGVy
dHlJRCwgdmFsdWUsIGltcG9ydGFudCwgY3NzUGFyc2VyTW9kZSgpLCBjb250ZXh0U3R5bGVTaGVl
dCwgY2hhbmdlZCk7CisgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKIHZvaWQgTXV0YWJsZVN0eWxl
UHJvcGVydGllczo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBwcnBWYWx1ZSwgYm9vbCBpbXBvcnRhbnQpCkBAIC02OTksMTcgKzcwMSwy
MSBAQCB2b2lkIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgUGFzc1JlZlB0cjxDUwogICAgICAgICBtX3Byb3BlcnR5VmVjdG9yLmFw
cGVuZChDU1NQcm9wZXJ0eShzaG9ydGhhbmQucHJvcGVydGllcygpW2ldLCB2YWx1ZSwgaW1wb3J0
YW50KSk7CiB9CiAKLXZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6c2V0UHJvcGVydHkoY29u
c3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eSogc2xvdCkKK2Jvb2wgTXV0YWJs
ZVN0eWxlUHJvcGVydGllczo6c2V0UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5
LCBDU1NQcm9wZXJ0eSogc2xvdCkKIHsKICAgICBpZiAoIXJlbW92ZVNob3J0aGFuZFByb3BlcnR5
KHByb3BlcnR5LmlkKCkpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5KiB0b1JlcGxhY2UgPSBzbG90
ID8gc2xvdCA6IGZpbmRDU1NQcm9wZXJ0eVdpdGhJRChwcm9wZXJ0eS5pZCgpKTsKICAgICAgICAg
aWYgKHRvUmVwbGFjZSkgeworICAgICAgICAgICAgaWYgKCp0b1JlcGxhY2UgPT0gcHJvcGVydHkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgICAgICAqdG9SZXBsYWNl
ID0gcHJvcGVydHk7CiAgICAgICAgICAgICBzZXRQcmVmaXhpbmdWYXJpYW50UHJvcGVydHkocHJv
cGVydHkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgYXBwZW5kUHJlZml4aW5nVmFyaWFudFByb3BlcnR5KHByb3Bl
cnR5KTsKKworICAgIHJldHVybiBhcHBlbmRQcmVmaXhpbmdWYXJpYW50UHJvcGVydHkocHJvcGVy
dHkpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgZ2V0SW5kZXhJblNob3J0aGFuZFZlY3RvckZvclBy
ZWZpeGluZ1ZhcmlhbnQoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eUlE
IHByZWZpeGluZ1ZhcmlhbnQpCkBAIC03MjEsMTQgKzcyNywxNSBAQCBzdGF0aWMgdW5zaWduZWQg
Z2V0SW5kZXhJblNob3J0aGFuZFZlY3RvckZvclByZWZpeGluZ1ZhcmlhbnQoY29uc3QgQ1NTUHJv
cGVydHkmCiAgICAgcmV0dXJuIGluZGV4T2ZTaG9ydGhhbmRGb3JMb25naGFuZChwcmVmaXhlZFNo
b3J0aGFuZCwgbWF0Y2hpbmdTaG9ydGhhbmRzRm9yTG9uZ2hhbmQocHJlZml4aW5nVmFyaWFudCkp
OwogfQogCi12b2lkIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmFwcGVuZFByZWZpeGluZ1Zhcmlh
bnRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkpCitib29sIE11dGFibGVTdHls
ZVByb3BlcnRpZXM6OmFwcGVuZFByZWZpeGluZ1ZhcmlhbnRQcm9wZXJ0eShjb25zdCBDU1NQcm9w
ZXJ0eSYgcHJvcGVydHkpCiB7CiAgICAgbV9wcm9wZXJ0eVZlY3Rvci5hcHBlbmQocHJvcGVydHkp
OwogICAgIENTU1Byb3BlcnR5SUQgcHJlZml4aW5nVmFyaWFudCA9IHByZWZpeGluZ1ZhcmlhbnRG
b3JQcm9wZXJ0eUlkKHByb3BlcnR5LmlkKCkpOwogICAgIGlmIChwcmVmaXhpbmdWYXJpYW50ID09
IHByb3BlcnR5LmlkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBtX3Byb3BlcnR5VmVjdG9yLmFwcGVuZChDU1NQcm9wZXJ0eShwcmVmaXhpbmdWYXJpYW50
LCBwcm9wZXJ0eS52YWx1ZSgpLCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpLCBwcm9wZXJ0eS5pc1Nl
dEZyb21TaG9ydGhhbmQoKSwgZ2V0SW5kZXhJblNob3J0aGFuZFZlY3RvckZvclByZWZpeGluZ1Zh
cmlhbnQocHJvcGVydHksIHByZWZpeGluZ1ZhcmlhbnQpLCBwcm9wZXJ0eS5tZXRhZGF0YSgpLm1f
aW1wbGljaXQpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzOjpzZXRQcmVmaXhpbmdWYXJpYW50UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHBy
b3BlcnR5KQpAQCAtNzQxLDE0ICs3NDgsMTIgQEAgdm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
OjpzZXRQcmVmaXhpbmdWYXJpYW50UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3AKIAog
Ym9vbCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIENTU1ZhbHVlSUQgaWRlbnRpZmllciwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAg
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQpKTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gc2V0UHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQpKTsK
IH0KIAogYm9vbCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIENTU1Byb3BlcnR5SUQgaWRlbnRpZmllciwgYm9vbCBpbXBvcnRhbnQp
CiB7Ci0gICAgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQpKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc2V0UHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJ
RCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpLCBpbXBv
cnRhbnQpKTsKIH0KIAogdm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpwYXJzZURlY2xhcmF0
aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbiwgU3R5bGVTaGVldENvbnRlbnRzKiBj
b250ZXh0U3R5bGVTaGVldCkKQEAgLTc2NCwxOCArNzY5LDI1IEBAIHZvaWQgTXV0YWJsZVN0eWxl
UHJvcGVydGllczo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFyYXRp
b24sIFN0CiAgICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24odGhpcywgc3R5bGVEZWNsYXJhdGlv
biwgMCwgY29udGV4dFN0eWxlU2hlZXQpOwogfQogCi12b2lkIE11dGFibGVTdHlsZVByb3BlcnRp
ZXM6OmFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYgcHJvcGVy
dGllcykKK2Jvb2wgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6YWRkUGFyc2VkUHJvcGVydGllcyhj
b25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVzKQogeworICAgIGJvb2wgYW55Q2hh
bmdlZCA9IGZhbHNlOwogICAgIG1fcHJvcGVydHlWZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KG1fcHJv
cGVydHlWZWN0b3Iuc2l6ZSgpICsgcHJvcGVydGllcy5zaXplKCkpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLnNpemUoKTsgKytpKQotICAgICAgICBhZGRQYXJzZWRQ
cm9wZXJ0eShwcm9wZXJ0aWVzW2ldKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJv
cGVydGllcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYWRkUGFyc2VkUHJvcGVydHkocHJv
cGVydGllc1tpXSkpCisgICAgICAgICAgICBhbnlDaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gYW55Q2hhbmdlZDsKIH0KIAotdm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjph
ZGRQYXJzZWRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkpCitib29sIE11dGFi
bGVTdHlsZVByb3BlcnRpZXM6OmFkZFBhcnNlZFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiBw
cm9wZXJ0eSkKIHsKICAgICAvLyBPbmx5IGFkZCBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBubyAhaW1w
b3J0YW50IGNvdW50ZXJwYXJ0IHByZXNlbnQKICAgICBpZiAoIXByb3BlcnR5SXNJbXBvcnRhbnQo
cHJvcGVydHkuaWQoKSkgfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkKLSAgICAgICAgc2V0UHJv
cGVydHkocHJvcGVydHkpOworICAgICAgICByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHkpOwor
ICAgIAorICAgIHJldHVybiBmYWxzZTsKIH0KIAogU3RyaW5nIFN0eWxlUHJvcGVydGllczo6YXNU
ZXh0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRp
ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuaAppbmRleCA5ZTljZjIy
MTBlYzA1MjdiZGFmN2Q4NjkwNzZiODEyMDNmMGY5MDdmLi4zMjIzY2E1YTdjM2ZmNDdhOTRjNGIy
YjhkMjYyM2IxOGI5ZTFjY2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQ
cm9wZXJ0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5oCkBA
IC0xOTMsOCArMTkzLDggQEAgcHVibGljOgogCiAgICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uKiBjc3NTdHlsZURlY2xhcmF0aW9uKCk7CiAKLSAgICB2b2lkIGFkZFBhcnNlZFByb3Bl
cnRpZXMoY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYpOwotICAgIHZvaWQgYWRkUGFyc2VkUHJv
cGVydHkoY29uc3QgQ1NTUHJvcGVydHkmKTsKKyAgICBib29sIGFkZFBhcnNlZFByb3BlcnRpZXMo
Y29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYpOworICAgIGJvb2wgYWRkUGFyc2VkUHJvcGVydHko
Y29uc3QgQ1NTUHJvcGVydHkmKTsKIAogICAgIC8vIFRoZXNlIGV4cGFuZCBzaG9ydGhhbmQgcHJv
cGVydGllcyBpbnRvIG11bHRpcGxlIHByb3BlcnRpZXMuCiAgICAgYm9vbCBzZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNl
LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0ID0gMCk7CkBAIC0yMDMsMTEg
KzIwMywxMSBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2UgZG8gbm90LiBGSVhNRTogVGhpcyBpcyB0
b28gbWVzc3ksIHdlIGNhbiBkbyBiZXR0ZXIuCiAgICAgYm9vbCBzZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlELCBDU1NWYWx1ZUlEIGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwog
ICAgIGJvb2wgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTUHJvcGVydHlJRCBpZGVudGlm
aWVyLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKLSAgICB2b2lkIGFwcGVuZFByZWZpeGluZ1Zh
cmlhbnRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYpOworICAgIGJvb2wgYXBwZW5kUHJlZml4
aW5nVmFyaWFudFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5Jik7CiAgICAgdm9pZCBzZXRQcmVm
aXhpbmdWYXJpYW50UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmKTsKLSAgICB2b2lkIHNldFBy
b3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiwgQ1NTUHJvcGVydHkqIHNsb3QgPSAwKTsKKyAgICBi
b29sIHNldFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiwgQ1NTUHJvcGVydHkqIHNsb3QgPSBu
dWxscHRyKTsKIAotICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgU3RyaW5n
KiByZXR1cm5UZXh0ID0gMCk7CisgICAgYm9vbCByZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
LCBTdHJpbmcqIHJldHVyblRleHQgPSBudWxscHRyKTsKICAgICB2b2lkIHJlbW92ZVByZWZpeGVk
T3JVbnByZWZpeGVkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAgICAgdm9pZCByZW1vdmVCbG9j
a1Byb3BlcnRpZXMoKTsKICAgICBib29sIHJlbW92ZVByb3BlcnRpZXNJblNldChjb25zdCBDU1NQ
cm9wZXJ0eUlEKiBzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRD
U1NNYXRyaXguY3BwCmluZGV4IDBlNmIyYzY0OTQ2MjJjYzM5OTQ5OTliMzdhNTU2NGUwYmEzODRk
YmMuLjExMzA4Nzc1NjA3MDI2ZTdmN2EzZTc0NTRmMzBjODVhNWZiNTk0MDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCkBAIC01Nyw3ICs1Nyw4IEBAIHZvaWQgV2ViS2l0
Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzPiBzdHlsZURlY2xhcmF0aW9uID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRl
KCk7Ci0gICAgaWYgKENTU1BhcnNlcjo6cGFyc2VWYWx1ZShzdHlsZURlY2xhcmF0aW9uLmdldCgp
LCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSwgc3RyaW5nLCB0cnVlLCBDU1NTdHJpY3RNb2RlLCAwKSkg
eworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBpZiAoQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHN0eWxl
RGVjbGFyYXRpb24uZ2V0KCksIENTU1Byb3BlcnR5VHJhbnNmb3JtLCBzdHJpbmcsIHRydWUsIENT
U1N0cmljdE1vZGUsIG51bGxwdHIsIGNoYW5nZWQpKSB7CiAgICAgICAgIC8vIENvbnZlcnQgdG8g
VHJhbnNmb3JtT3BlcmF0aW9ucy4gVGhpcyBjYW4gZmFpbCBpZiBhIHByb3BlcnR5CiAgICAgICAg
IC8vIHJlcXVpcmVzIHN0eWxlIChpLmUuLCBwYXJhbSB1c2VzICdlbXMnIG9yICdleHMnKQogICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApp
bmRleCA4ZWZkMzI0NDgxMjY4OWM3NTMzYzgyZWU1YzRmYjQ5MDBkMTdkNzM5Li4xY2YyODUzNGEx
NGFmN2M1NThjNWFmZTNmNjlhODIwMWNmNzZmYjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
QEAgLTE3OTAsNiArMTc5MCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlOjpD
aGFuZ2UgY2hhbmdlKQogICAgICAgICBtX2Nsb3NlQWZ0ZXJTdHlsZVJlY2FsYyA9IGZhbHNlOwog
ICAgICAgICBpbXBsaWNpdENsb3NlKCk7CiAgICAgfQorICAgIAorICAgICsrbV9zdHlsZVJlY2Fs
Y0NvdW50OwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNhbGN1bGF0ZVN0
eWxlKGNvb2tpZSk7CiAKQEAgLTYxMzksNiArNjE0MSwxNiBAQCB2b2lkIERvY3VtZW50Ojp1cGRh
dGVMYXN0SGFuZGxlZFVzZXJHZXN0dXJlVGltZXN0YW1wKCkKICAgICBtX2xhc3RIYW5kbGVkVXNl
ckdlc3R1cmVUaW1lc3RhbXAgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKIH0KIAor
dm9pZCBEb2N1bWVudDo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcygpCit7CisgICAgbV9zdHls
ZVJlY2FsY0NvdW50ID0gMDsKK30KKwordW5zaWduZWQgRG9jdW1lbnQ6OnN0eWxlUmVjYWxjQ291
bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0eWxlUmVjYWxjQ291bnQ7Cit9CisKIERvY3Vt
ZW50TG9hZGVyKiBEb2N1bWVudDo6bG9hZGVyKCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDVkZjI3YWVjZTY5MDY4OWUwMWQ2Y2UxMjcxNjhkZDNl
YTU0N2QwZTAuLmUzOWE3YTQzNjFjOTRmMTM2MGJjN2NjZWRiMjMxNTlmNmViYjcxMzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCkBAIC0xMTQxLDYgKzExNDEsOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIHVuc2lnbmVkIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSBjb25zdDsKIAor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcygpOworICAg
IFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIHN0eWxlUmVjYWxjQ291bnQoKSBjb25zdDsKKwogICAg
IHZvaWQgZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoTm9kZSYpOwogICAgIHZvaWQgZGlkUmVtb3Zl
VG91Y2hFdmVudEhhbmRsZXIoTm9kZSYsIEV2ZW50SGFuZGxlclJlbW92YWwgPSBFdmVudEhhbmRs
ZXJSZW1vdmFsOjpPbmUpOwogCkBAIC0xNDQwLDYgKzE0NDMsOCBAQCBwcml2YXRlOgogICAgIC8v
IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI2lnbm9y
ZS1kZXN0cnVjdGl2ZS13cml0ZXMtY291bnRlcgogICAgIHVuc2lnbmVkIG1faWdub3JlRGVzdHJ1
Y3RpdmVXcml0ZUNvdW50OwogCisgICAgdW5zaWduZWQgbV9zdHlsZVJlY2FsY0NvdW50IHsgMCB9
OworCiAgICAgU3RyaW5nV2l0aERpcmVjdGlvbiBtX3RpdGxlOwogICAgIFN0cmluZ1dpdGhEaXJl
Y3Rpb24gbV9yYXdUaXRsZTsKICAgICBib29sIG1fdGl0bGVTZXRFeHBsaWNpdGx5OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKaW5kZXggYmYyMmQyNzJiMTg4MGViYTc3YTFkNGExMDViMzUzZWYzMzY3ODZhNC4uMWUz
MjBmYmVjYTQ3ZjA1MTNkMWYzYTA4ODY1N2JkYzkzZTU2Y2Q4NCAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBA
IC0yMDc1LDcgKzIwNzUsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9u
dChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJzZWRTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRp
ZXM6OmNyZWF0ZSgpOwotICAgIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShwYXJzZWRTdHlsZS5nZXQo
KSwgQ1NTUHJvcGVydHlGb250LCBuZXdGb250LCB0cnVlLCBzdHJpY3RUb0NTU1BhcnNlck1vZGUo
IW1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpLCAwKTsKKyAgICBib29sIGNoYW5nZWQ7
CisgICAgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHBhcnNlZFN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0
eUZvbnQsIG5ld0ZvbnQsIHRydWUsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghbV91c2VzQ1NTQ29t
cGF0aWJpbGl0eVBhcnNlTW9kZSksIDAsIGNoYW5nZWQpOwogICAgIGlmIChwYXJzZWRTdHlsZS0+
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAppbmRleCBlOTdmMjAyYzU5MmRjNzU2Nzg4YzM0OGYyOTAzODRkODM4MGNiYmFjLi41MTRl
MGM0YmM3MDQ2NjFjMjJlYWExZjRiZTRmN2FhNmFkMzdkNDc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCkBAIC0yMDg5LDYgKzIwODksMjcgQEAgdW5zaWduZWQgbG9uZyBJbnRl
cm5hbHM6OmxheWVyRmx1c2hDb3VudChFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gZG9j
dW1lbnQtPnJlbmRlclZpZXcoKS0+Y29tcG9zaXRvcigpLmxheWVyRmx1c2hDb3VudCgpOwogfQog
Cit2b2lkIEludGVybmFsczo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcyhFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKKyAg
ICBpZiAoIWRvY3VtZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGRvY3VtZW50LT5zdGFydFRyYWNraW5nU3R5bGVSZWNh
bGNzKCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgSW50ZXJuYWxzOjpzdHlsZVJlY2FsY0NvdW50KEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1
bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VT
U19FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZG9jdW1l
bnQtPnN0eWxlUmVjYWxjQ291bnQoKTsKK30KKwogdm9pZCBJbnRlcm5hbHM6OnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyhFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICB1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHNBbmRS
dW5Qb3N0TGF5b3V0VGFza3MobnVsbHB0ciwgZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgKaW5kZXggZjhkNDI5ZWE5MTJlMzMwZGI2NmEzZThmMjU1YmVjMGM3NmM1MDJlZS4uYTQ2Njky
YTdmNWI4ZmQ0YWU3ODlhMDVjMWY0Y2YzMjY0MDZhMDhmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5oCkBAIC0yOTgsNiArMjk4LDkgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnRUcmFj
a2luZ0xheWVyRmx1c2hlcyhFeGNlcHRpb25Db2RlJik7CiAgICAgdW5zaWduZWQgbG9uZyBsYXll
ckZsdXNoQ291bnQoRXhjZXB0aW9uQ29kZSYpOwogICAgIAorICAgIHZvaWQgc3RhcnRUcmFja2lu
Z1N0eWxlUmVjYWxjcyhFeGNlcHRpb25Db2RlJik7CisgICAgdW5zaWduZWQgbG9uZyBzdHlsZVJl
Y2FsY0NvdW50KEV4Y2VwdGlvbkNvZGUmKTsKKwogICAgIHZvaWQgdXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzQW5kUnVuUG9zdExheW91dFRhc2tzKEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2b2lkIHVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RM
YXlvdXRUYXNrcyhOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwKaW5kZXggZTIxNmU1MGQ4ZGM4YmE2Zjc3MDI1OGViZTkyNDYxOGI4OWIxN2Ez
MC4uMjA4OGQxOGViNjg3Mzk2ZGMzMWU0MjhmZjljNGVkMmVmNjdlNTA4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtMjc3LDYgKzI3Nyw5IEBAIGVudW0gUmVzb3VyY2VM
b2FkUHJpb3JpdHkgewogICAgIC8vIFF1ZXJ5IGlmIGEgdGltZXIgaXMgY3VycmVudGx5IHRocm90
dGxlZCwgdG8gZGVidWcgdGltZXIgdGhyb3R0bGluZy4KICAgICBbUmFpc2VzRXhjZXB0aW9uXSBi
b29sZWFuIGlzVGltZXJUaHJvdHRsZWQobG9uZyB0aW1lckhhbmRsZSk7CiAKKyAgICBbUmFpc2Vz
RXhjZXB0aW9uXSB2b2lkIHN0YXJ0VHJhY2tpbmdTdHlsZVJlY2FsY3MoKTsKKyAgICBbUmFpc2Vz
RXhjZXB0aW9uXSB1bnNpZ25lZCBsb25nIHN0eWxlUmVjYWxjQ291bnQoKTsKKwogICAgIC8vIHxu
b2RlfCBzaG91bGQgYmUgRG9jdW1lbnQsIEhUTUxJRnJhbWVFbGVtZW50LCBvciB1bnNwZWNpZmll
ZC4KICAgICAvLyBJZiB8bm9kZXwgaXMgYW4gSFRNTElGcmFtZUVsZW1lbnQsIGl0IGFzc3VtZXMg
bm9kZS5jb250ZW50RG9jdW1lbnQgaXMKICAgICAvLyBzcGVjaWZpZWQgd2l0aG91dCBzZWN1cml0
eSBjaGVja3MuIFVuc3BlY2lmaWVkIG1lYW5zIHRoaXMgZG9jdW1lbnQuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTMxNGYw
ZWY4MDU1ZDkwZGU0NGRiNjIwZTZlZWI5N2FkM2MyYjg0OS4uMTRmMTFiNGI1OGFlY2ExMmMxODIw
YWMzZDdjZTkwNDhhNmM2YmJlNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA0LTE4ICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFNldHRpbmcg
aW5saW5lIHN0eWxlIHRvIHRoZSBzYW1lIHZhbHVlIGl0IGFscmVhZHkgaGFzIHRyaWdnZXJzIGEg
c3R5bGUgcmVjYWxjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDM5MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZXN0IHRoYXQgY2hhbmdlcyBpbmxpbmUtc3R5bGUgKHRvIHRlc3QgdGhpcyBidWcgZml4
KSwgYW5kIGNsYXNzZXMgKGZvcgorICAgICAgICBwcm9hY3RpdmUgdGVzdGluZykgYW5kIGNvdW50
cyBzdHlsZSByZWNhbGNzLgorCisgICAgICAgICogZmFzdC9jc3Mvc2V0LWlubGluZS1zdHlsZS1y
ZWNhbGMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zZXQtaW5saW5l
LXN0eWxlLXJlY2FsYy5odG1sOiBBZGRlZC4KKwogMjAxNS0wNC0xOCAgTWljaGHFgiBQYWt1xYJh
IHZlbCBSdXRrYSAgPG0ucGFrdWxhQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFVucmV2
aWV3ZWQgZ2FyZGVuaW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zZXQtaW5s
aW5lLXN0eWxlLXJlY2FsYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zZXQt
aW5saW5lLXN0eWxlLXJlY2FsYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzM0NDM4NWQ2NTJi
MGY5NTllNDQzNmM4MWM5MDg2NGMxZDI3NGEzYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzL3NldC1pbmxpbmUtc3R5bGUtcmVjYWxjLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDIxIEBACitUZXN0IHRvIGNvdW50IHRoZSBudW1iZXIgb2YgcmVjYWxjU3R5bGUgY2FsbHMg
b24gaW5saW5lIHN0eWxlIGFuZCBjbGFzcyBjaGFuZ2VzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBudW1TdHlsZVJlY2FsY3MgaXMgMQorUEFTUyBudW1TdHlsZVJlY2Fs
Y3MgaXMgMQorUEFTUyBudW1TdHlsZVJlY2FsY3MgaXMgMAorUEFTUyBudW1TdHlsZVJlY2FsY3Mg
aXMgMQorUEFTUyBudW1TdHlsZVJlY2FsY3MgaXMgMAorUEFTUyBudW1TdHlsZVJlY2FsY3MgaXMg
MQorUEFTUyBudW1TdHlsZVJlY2FsY3MgaXMgMAorUEFTUyBudW1TdHlsZVJlY2FsY3MgaXMgMQor
UEFTUyBudW1TdHlsZVJlY2FsY3MgaXMgMAorUEFTUyBudW1TdHlsZVJlY2FsY3MgaXMgMQorUEFT
UyBudW1TdHlsZVJlY2FsY3MgaXMgMAorUEFTUyBudW1TdHlsZVJlY2FsY3MgaXMgMQorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvY3NzL3NldC1pbmxpbmUtc3R5bGUtcmVjYWxjLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2Nzcy9zZXQtaW5saW5lLXN0eWxlLXJlY2FsYy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjFhNGJmZjAzMTEyM2YwOTE0ODY5NWMzYjQ3Y2RlNjgwNTQyMzRhYWIKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zZXQtaW5saW5lLXN0eWxlLXJlY2FsYy5odG1sCkBA
IC0wLDAgKzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlPgor
ICAgIC50ZXN0IHsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKyAgICAKKyAg
ICAuZm9vIHsKKyAgICAgICAgZm9udC1zaXplOiAxMHB4OworICAgIH0KKyAgICAKKyAgICAuYmFy
IHsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZnVuY3Rpb24g
c2V0U3R5bGVBbmRGb3JjZUxheW91dChjaGFuZ2VGdW5jKQoreworICAgIGlmICh3aW5kb3cuaW50
ZXJuYWxzKSB7CisgICAgICAgIGludGVybmFscy51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHNBbmRSdW5Qb3N0TGF5b3V0VGFza3MoKTsKKyAgICAgICAgaW50ZXJuYWxzLnN0YXJ0
VHJhY2tpbmdTdHlsZVJlY2FsY3MoKTsKKyAgICB9CisKKyAgICBjaGFuZ2VGdW5jKCk7CisKKyAg
ICB2YXIgbnVtU3R5bGVSZWNhbGNzID0gMDsKKyAgICBpZiAod2luZG93LmludGVybmFscykgewor
ICAgICAgICBpbnRlcm5hbHMudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzQW5k
UnVuUG9zdExheW91dFRhc2tzKCk7CisgICAgICAgIG51bVN0eWxlUmVjYWxjcyA9IGludGVybmFs
cy5zdHlsZVJlY2FsY0NvdW50KCk7CisgICAgfQorICAgIHJldHVybiBudW1TdHlsZVJlY2FsY3M7
Cit9CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRvIGNvdW50IHRoZSBudW1iZXIgb2YgcmVjYWxjU3R5
bGUgY2FsbHMgb24gaW5saW5lIHN0eWxlIGFuZCBjbGFzcyBjaGFuZ2VzLiIpCisKK3ZhciB0ZXN0
Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cit0ZXN0Q29udGFpbmVy
LmNsYXNzTmFtZSA9ICd0ZXN0JzsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdENvbnRh
aW5lcik7CisKK3ZhciBzdHlsZSA9IHRlc3RDb250YWluZXIuc3R5bGU7CisKK3ZhciBudW1TdHls
ZVJlY2FsY3MgPSBzZXRTdHlsZUFuZEZvcmNlTGF5b3V0KGZ1bmN0aW9uKCkgeyBzdHlsZS5oZWln
aHQgPSAiMTBweCI7IH0pOworc2hvdWxkQmUoIm51bVN0eWxlUmVjYWxjcyIsICIxIik7CitudW1T
dHlsZVJlY2FsY3MgPSBzZXRTdHlsZUFuZEZvcmNlTGF5b3V0KGZ1bmN0aW9uKCkgeyBzdHlsZS5o
ZWlnaHQgPSAiMjBweCI7IH0pOworc2hvdWxkQmUoIm51bVN0eWxlUmVjYWxjcyIsICIxIik7Citu
dW1TdHlsZVJlY2FsY3MgPSBzZXRTdHlsZUFuZEZvcmNlTGF5b3V0KGZ1bmN0aW9uKCkgeyBzdHls
ZS5oZWlnaHQgPSAiMjBweCI7IH0pOworc2hvdWxkQmUoIm51bVN0eWxlUmVjYWxjcyIsICIwIik7
CisKK251bVN0eWxlUmVjYWxjcyA9IHNldFN0eWxlQW5kRm9yY2VMYXlvdXQoZnVuY3Rpb24oKSB7
IHN0eWxlLmJhY2tncm91bmRQb3NpdGlvbiA9ICIxMHB4IDEwJSI7IH0pOworc2hvdWxkQmUoIm51
bVN0eWxlUmVjYWxjcyIsICIxIik7CitudW1TdHlsZVJlY2FsY3MgPSBzZXRTdHlsZUFuZEZvcmNl
TGF5b3V0KGZ1bmN0aW9uKCkgeyBzdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb24gPSAiMTBweCAxMCUi
OyB9KTsKK3Nob3VsZEJlKCJudW1TdHlsZVJlY2FsY3MiLCAiMCIpOworCitudW1TdHlsZVJlY2Fs
Y3MgPSBzZXRTdHlsZUFuZEZvcmNlTGF5b3V0KGZ1bmN0aW9uKCkgeyBzdHlsZS5iYWNrZ3JvdW5k
Q29sb3IgPSAicmVkIjsgfSk7CitzaG91bGRCZSgibnVtU3R5bGVSZWNhbGNzIiwgIjEiKTsKK251
bVN0eWxlUmVjYWxjcyA9IHNldFN0eWxlQW5kRm9yY2VMYXlvdXQoZnVuY3Rpb24oKSB7IHN0eWxl
LmJhY2tncm91bmRDb2xvciA9ICJyZWQiOyB9KTsKK3Nob3VsZEJlKCJudW1TdHlsZVJlY2FsY3Mi
LCAiMCIpOworCitudW1TdHlsZVJlY2FsY3MgPSBzZXRTdHlsZUFuZEZvcmNlTGF5b3V0KGZ1bmN0
aW9uKCkgeyBzdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlKDEwcHgsIDEwcHgpIHJvdGF0ZSgx
MGRlZykiOyB9KTsKK3Nob3VsZEJlKCJudW1TdHlsZVJlY2FsY3MiLCAiMSIpOworbnVtU3R5bGVS
ZWNhbGNzID0gc2V0U3R5bGVBbmRGb3JjZUxheW91dChmdW5jdGlvbigpIHsgc3R5bGUudHJhbnNm
b3JtID0gInRyYW5zbGF0ZSgxMHB4LCAxMHB4KSByb3RhdGUoMTBkZWcpIjsgfSk7CitzaG91bGRC
ZSgibnVtU3R5bGVSZWNhbGNzIiwgIjAiKTsKKworbnVtU3R5bGVSZWNhbGNzID0gc2V0U3R5bGVB
bmRGb3JjZUxheW91dChmdW5jdGlvbigpIHsgdGVzdENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdm
b28nKTsgfSk7CitzaG91bGRCZSgibnVtU3R5bGVSZWNhbGNzIiwgIjEiKTsKK251bVN0eWxlUmVj
YWxjcyA9IHNldFN0eWxlQW5kRm9yY2VMYXlvdXQoZnVuY3Rpb24oKSB7IHRlc3RDb250YWluZXIu
Y2xhc3NMaXN0LmFkZCgnZm9vJyk7IH0pOworc2hvdWxkQmUoIm51bVN0eWxlUmVjYWxjcyIsICIw
Iik7CitudW1TdHlsZVJlY2FsY3MgPSBzZXRTdHlsZUFuZEZvcmNlTGF5b3V0KGZ1bmN0aW9uKCkg
eyB0ZXN0Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2JhcicpOyB9KTsKK3Nob3VsZEJlKCJudW1T
dHlsZVJlY2FsY3MiLCAiMSIpOworCitkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlc3RDb250
YWluZXIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="275903"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>