<?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>239427</bug_id>
          
          <creation_ts>2022-04-16 20:37:31 -0700</creation_ts>
          <short_desc>Use AtomString as early as possible when string will eventually get atomized</short_desc>
          <delta_ts>2022-04-18 14:13:10 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=239464</see_also>
          <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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>ashvayka</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1862103</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-16 20:37:31 -0700</bug_when>
    <thetext>Use AtomString as early as possible when string will eventually get atomized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862104</commentid>
    <comment_count>1</comment_count>
      <attachid>457763</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-16 20:41:38 -0700</bug_when>
    <thetext>Created attachment 457763
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862246</commentid>
    <comment_count>2</comment_count>
      <attachid>457763</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-18 09:54:33 -0700</bug_when>
    <thetext>Comment on attachment 457763
Patch

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

From bindings we could have AtomString&amp;&amp; instead of const AtomString&amp; for cases where we are taking ownership and want to save some reference count churn. Not sure how important this is to performance, but it is an optimization possibility.

&gt; Source/WebCore/svg/SVGLengthValue.cpp:276
&gt; +    StringBuilder builder;
&gt; +    builder.append(m_valueInSpecifiedUnits, lengthTypeToString(m_lengthType));
&gt; +    return builder.toAtomString();

We should create makeAtomString for cases like this one. It’s a bit wasteful to use StringBuilder when we know everything up front, and it’s not too hard to write a makeAtomString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862249</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-18 10:01:49 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 457763 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=457763&amp;action=review
&gt; 
&gt; From bindings we could have AtomString&amp;&amp; instead of const AtomString&amp; for
&gt; cases where we are taking ownership and want to save some reference count
&gt; churn. Not sure how important this is to performance, but it is an
&gt; optimization possibility.

Yes, Sam mentioned the same thing on Slack. I&apos;ll likely look into this in the near future.

&gt; &gt; Source/WebCore/svg/SVGLengthValue.cpp:276
&gt; &gt; +    StringBuilder builder;
&gt; &gt; +    builder.append(m_valueInSpecifiedUnits, lengthTypeToString(m_lengthType));
&gt; &gt; +    return builder.toAtomString();
&gt; 
&gt; We should create makeAtomString for cases like this one. It’s a bit wasteful
&gt; to use StringBuilder when we know everything up front, and it’s not too hard
&gt; to write a makeAtomString.

Let me see how hard it can to write.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862252</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-18 10:14:48 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #3)
&gt; (In reply to Darin Adler from comment #2)
&gt; &gt; Comment on attachment 457763 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=457763&amp;action=review
&gt; &gt; 
&gt; &gt; From bindings we could have AtomString&amp;&amp; instead of const AtomString&amp; for
&gt; &gt; cases where we are taking ownership and want to save some reference count
&gt; &gt; churn. Not sure how important this is to performance, but it is an
&gt; &gt; optimization possibility.
&gt; 
&gt; Yes, Sam mentioned the same thing on Slack. I&apos;ll likely look into this in
&gt; the near future.
&gt; 
&gt; &gt; &gt; Source/WebCore/svg/SVGLengthValue.cpp:276
&gt; &gt; &gt; +    StringBuilder builder;
&gt; &gt; &gt; +    builder.append(m_valueInSpecifiedUnits, lengthTypeToString(m_lengthType));
&gt; &gt; &gt; +    return builder.toAtomString();
&gt; &gt; 
&gt; &gt; We should create makeAtomString for cases like this one. It’s a bit wasteful
&gt; &gt; to use StringBuilder when we know everything up front, and it’s not too hard
&gt; &gt; to write a makeAtomString.
&gt; 
&gt; Let me see how hard it can to write.

I&apos;ll follow-up for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862258</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-18 10:30:22 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)
&gt; I&apos;ll follow-up for this.

Basically makeAtomString is really only an optimization for short strings.

Once we know the string is short enough we can use an on-stack buffer, build the entire string on the stack, look up the existing StringImpl and allocate a new one only if it’s not already in the AtomString table.

For a longer string, since we have to allocate on the heap anyway, I don’t think we can do much better than AtomString(makeString(xxx)), allocating a buffer (a StringImpl, in fact) and then deallocating it if it turns out to be identical to one in the table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862263</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-18 10:57:21 -0700</bug_when>
    <thetext>Committed r292960 (249725@main): &lt;https://commits.webkit.org/249725@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 457763.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862264</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-04-18 10:58:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/91903893&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457763</attachid>
            <date>2022-04-16 20:41:38 -0700</date>
            <delta_ts>2022-04-18 10:57:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239427-20220416204138.patch</filename>
            <type>text/plain</type>
            <size>55209</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyOTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQyYjNhNTg2ZDc0MjYy
OTQ4ZWM4ZmJlOWM3YjRkNjI0ZTAyMDIxMC4uYjFhZjhjYTU2ZDMyZDhiY2E3MzkzNThkOGZmMzA2
OWRkYTgyODVjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAyMi0wNC0xNiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBBdG9tU3RyaW5nIGFz
IGVhcmx5IGFzIHBvc3NpYmxlIHdoZW4gc3RyaW5nIHdpbGwgZXZlbnR1YWxseSBnZXQgYXRvbWl6
ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTQy
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3Nz
L1N0eWxlUHJvcGVydGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6
OmFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmFzVGV4
dEF0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjphc1RleHRJ
bnRlcm5hbCBjb25zdCk6CisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydGllcy5oOgorICAgICAg
ICAqIGRvbS9ET01TdHJpbmdNYXAuaWRsOgorICAgICAgICAqIGRvbS9EYXRhc2V0RE9NU3RyaW5n
TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFzZXRET01TdHJpbmdNYXA6OnNldE5hbWVk
SXRlbSk6CisgICAgICAgICogZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuaDoKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZUF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y3JlYXRlQXR0cmlidXRlTlMpOgor
ICAgICAgICAqIGRvbS9FbGVtZW50Q29udGVudEVkaXRhYmxlLmlkbDoKKyAgICAgICAgKiBkb20v
U3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpzeW5j
aHJvbml6ZVN0eWxlQXR0cmlidXRlSW50ZXJuYWxJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgICogZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9Ob2Rl
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0
eWxlVG9QdXNoRG93bik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBw
bHlJbmxpbmVTdHlsZUNoYW5nZSk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBs
YWNlbWVudEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5Jbmxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0
eWxlU3BhbnMpOgorICAgICAgICAqIGh0bWwvRE9NVG9rZW5MaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnRva2VuQ29udGFpbnNIVE1MU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVG9r
ZW5MaXN0Ojp2YWxpZGF0ZVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRva2VuTGlzdDo6
dmFsaWRhdGVUb2tlbnMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVG9rZW5MaXN0OjphZGRJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpET01Ub2tlbkxpc3Q6OmFkZCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01Ub2tlbkxpc3Q6OnJlbW92ZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVRva2VuTGlzdDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRva2VuTGlzdDo6
c2V0VmFsdWUpOgorICAgICAgICAqIGh0bWwvRE9NVG9rZW5MaXN0Lmg6CisgICAgICAgICogaHRt
bC9ET01Ub2tlbkxpc3QuaWRsOgorICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlwZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpVcGxvYWRCdXR0b25FbGVtZW50OjpjcmVhdGVJbnRlcm5hbCk6Cisg
ICAgICAgICogaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQnV0dG9uRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlIGNvbnN0KToKKyAgICAgICAgKiBodG1s
L0hUTUxCdXR0b25FbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpzZXRFbnRlcktleUhpbnQpOgorICAgICAg
ICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0
Rm9ybUVuY3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6
c2V0Rm9ybU1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpzZXRBdXRvY29tcGxldGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtRWxlbWVudDo6c2V0QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxG
b3JtRWxlbWVudDo6c2V0RW5jdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1l
bnQ6OnNldE1ldGhvZCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNldFNyYyk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpzZXREZWNvZGluZyk6CisgICAg
ICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdFZhbHVlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldERlZmF1bHRWYWx1ZSk6CisgICAgICAg
ICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpjcmVhdGVGb3JMZWdhY3lGYWN0b3J5RnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OnNldFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZXRMYWJlbCk6CisgICAgICAgICog
aHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuaWRsOgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlTmFtZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5wdXRUeXBlTmFtZXM6OmJ1dHRvbik6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVh
dGVBdXRvRmlsbEJ1dHRvbik6CisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFn
ZS9pb3MvRnJhbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aW5pdFdpdGhTaW1w
bGVIVE1MRG9jdW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdMZW5ndGhWYWx1ZTo6dmFsdWVBc0F0b21TdHJpbmcgY29uc3QpOgor
ICAgICAgICAqIHN2Zy9TVkdMZW5ndGhWYWx1ZS5oOgorICAgICAgICAqIHN2Zy9TVkdNYXJrZXJF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6Om9yaWVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50OjpzZXRPcmllbnQpOgor
ICAgICAgICAqIHN2Zy9TVkdNYXJrZXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR01hcmtl
ckVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnRyYW5zZmVyU2l6ZUF0dHJpYnV0ZXNUb1RhcmdldENs
b25lIGNvbnN0KToKKwogMjAyMi0wNC0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIExldmVyYWdlIFN0cmluZ1ZpZXcgaW4gbW9yZSBwbGFjZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKaW5kZXggYzUyZmM2YmFlYWU2YjM5M2NkZjU5OGNj
NDliNjg3MjdkNTgzZGJjMS4uNDc1MDA5NmIyYzQ1MGQzNWUyZmE5NDc4MGQ3M2FhYWM5NjY4NWYy
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKQEAgLTEzOTUsNiArMTM5
NSwxNiBAQCBib29sIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmFkZFBhcnNlZFByb3BlcnR5KGNv
bnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSkKIH0KIAogU3RyaW5nIFN0eWxlUHJvcGVydGllczo6
YXNUZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXNUZXh0SW50ZXJuYWwoKS50b1N0cmluZygp
OworfQorCitBdG9tU3RyaW5nIFN0eWxlUHJvcGVydGllczo6YXNUZXh0QXRvbSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGFzVGV4dEludGVybmFsKCkudG9BdG9tU3RyaW5nKCk7Cit9CisKK1N0cmlu
Z0J1aWxkZXIgU3R5bGVQcm9wZXJ0aWVzOjphc1RleHRJbnRlcm5hbCgpIGNvbnN0CiB7CiAgICAg
U3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKQEAgLTE3NDMsNyArMTc1Myw3IEBAIFN0cmluZyBTdHls
ZVByb3BlcnRpZXM6OmFzVGV4dCgpIGNvbnN0CiAgICAgYXBwZW5kUG9zaXRpb25PclByb3BlcnR5
KHJlcGVhdFhQcm9wZXJ0eUluZGV4LCByZXBlYXRZUHJvcGVydHlJbmRleCwgImJhY2tncm91bmQt
cmVwZWF0IiwgYmFja2dyb3VuZFJlcGVhdFNob3J0aGFuZCgpKTsKIAogICAgIEFTU0VSVCghbnVt
RGVjbHMgXiAhcmVzdWx0LmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGJvb2wgU3R5bGVQcm9wZXJ0aWVzOjpoYXNDU1NP
TVdyYXBwZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJv
cGVydGllcy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5oCmluZGV4IDgy
MTFlYTFkN2U3NDZiNmI3YTU1YzZkOTU3NGIyZjY2MTU1OWEyYzUuLjVlNGM4NzI2NWFlZTdjNmJj
YmUzZDI1OWY5YjEyYThmNmIzZWM4OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVByb3BlcnRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVz
LmgKQEAgLTEzNCw2ICsxMzQsNyBAQCBwdWJsaWM6CiAgICAgUmVmPE11dGFibGVTdHlsZVByb3Bl
cnRpZXM+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgQ1NTUHJvcGVydHlJRCogc2V0LCB1bnNp
Z25lZCBsZW5ndGgpIGNvbnN0OwogICAgIAogICAgIFN0cmluZyBhc1RleHQoKSBjb25zdDsKKyAg
ICBBdG9tU3RyaW5nIGFzVGV4dEF0b20oKSBjb25zdDsKIAogICAgIGJvb2wgaGFzQ1NTT01XcmFw
cGVyKCkgY29uc3Q7CiAgICAgYm9vbCBpc011dGFibGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkg
PT0gTXV0YWJsZVByb3BlcnRpZXNUeXBlOyB9CkBAIC0xODAsNiArMTgxLDcgQEAgcHJpdmF0ZToK
ICAgICBTdHJpbmcgb2Zmc2V0VmFsdWUoKSBjb25zdDsKICAgICB2b2lkIGFwcGVuZEZvbnRMb25n
aGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUlELCBTdHJpbmdCdWlsZGVyJiByZXN1bHQs
IFN0cmluZyYgdmFsdWUpIGNvbnN0OwogICAgIGJvb2wgc2hvcnRoYW5kSGFzVmFyaWFibGVSZWZl
cmVuY2UoQ1NTUHJvcGVydHlJRCwgU3RyaW5nJikgY29uc3Q7CisgICAgU3RyaW5nQnVpbGRlciBh
c1RleHRJbnRlcm5hbCgpIGNvbnN0OwogCiAgICAgZnJpZW5kIGNsYXNzIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9N
U3RyaW5nTWFwLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdNYXAuaWRsCmluZGV4
IGY2OTE5OTNkZWZjZmM4OWJhZjQwNDI5YTQ2MzJjZTg2M2JiMmViODkuLmMzNjZlYmY0OTM3NzNk
YjFkNmE3YmE1YTdiYjE1OTcyOTU0NWExODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9ET01TdHJpbmdNYXAuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdNYXAu
aWRsCkBAIC0yOSw4ICsyOSw4IEBACiAgICAgU2tpcFZUYWJsZVZhbGlkYXRpb24sCiAgICAgRXhw
b3NlZD1XaW5kb3cKIF0gaW50ZXJmYWNlIERPTVN0cmluZ01hcCB7Ci0gICAgZ2V0dGVyIERPTVN0
cmluZyAoRE9NU3RyaW5nIG5hbWUpOwotICAgIFtDRVJlYWN0aW9uc10gc2V0dGVyIHVuZGVmaW5l
ZCAoRE9NU3RyaW5nIG5hbWUsIERPTVN0cmluZyB2YWx1ZSk7CisgICAgZ2V0dGVyIERPTVN0cmlu
ZyAoW0F0b21TdHJpbmddIERPTVN0cmluZyBuYW1lKTsKKyAgICBbQ0VSZWFjdGlvbnNdIHNldHRl
ciB1bmRlZmluZWQgKERPTVN0cmluZyBuYW1lLCBbQXRvbVN0cmluZ10gRE9NU3RyaW5nIHZhbHVl
KTsKICAgICBbQ0VSZWFjdGlvbnNdIGRlbGV0ZXIgdW5kZWZpbmVkIChET01TdHJpbmcgbmFtZSk7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01h
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAKaW5kZXgg
ZDM1YmIwYjMyZjYzNTQ1MDc1MmZkNWZhNzkyMjIwMWE3Y2FiNzgzMC4uZjQwYjNlMmNiYjBjYmVj
M2VjOWZlMDM3NWQzNzg5NzMwNDNhMGI5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFzZXRET01TdHJpbmdNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0
RE9NU3RyaW5nTWFwLmNwcApAQCAtMjIxLDcgKzIyMSw3IEBAIFN0cmluZyBEYXRhc2V0RE9NU3Ry
aW5nTWFwOjpuYW1lZEl0ZW0oY29uc3QgQXRvbVN0cmluZyYgbmFtZSkgY29uc3QKICAgICByZXR1
cm4gU3RyaW5nIHsgfTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gRGF0YXNldERPTVN0cmluZ01h
cDo6c2V0TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K0V4Y2VwdGlvbk9yPHZvaWQ+IERhdGFzZXRET01TdHJpbmdNYXA6OnNldE5hbWVkSXRlbShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmICghaXNW
YWxpZFByb3BlcnR5TmFtZShuYW1lKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmlu
Z01hcC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuaAppbmRleCBm
MWE5OGFjZGRjZGI2ZTlmZTllODkwNzM0MzUyMjFjYWVkNTkyN2Q0Li4xYzZmZWJkY2VjOWJiYzJm
OTcwMTI5NjA0MDBiNjMzMmE4YzUyYWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RGF0YXNldERPTVN0cmluZ01hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9N
U3RyaW5nTWFwLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxTdHJpbmc+
IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAogICAgIFN0cmluZyBuYW1lZEl0ZW0o
Y29uc3QgQXRvbVN0cmluZyYgbmFtZSkgY29uc3Q7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0
TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAg
RXhjZXB0aW9uT3I8dm9pZD4gc2V0TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
QXRvbVN0cmluZyYgdmFsdWUpOwogICAgIGJvb2wgZGVsZXRlTmFtZWRQcm9wZXJ0eShjb25zdCBT
dHJpbmcmIG5hbWUpOwogCiAgICAgRWxlbWVudCYgZWxlbWVudCgpIHsgcmV0dXJuIG1fZWxlbWVu
dDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZjY0NDk5NGExY2Y2MzEyZGZjZGEyNDgy
NTU3YzgwZGNiMWJhYzJhNi4uMjgzYWM1Nzg4ZmE0Yzk5NTlmODU4Nzg2ZTI0MGUyZGNkNWVkYjUz
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC02MDYyLDcgKzYwNjIsNyBAQCBFeGNlcHRp
b25PcjxSZWY8QXR0cj4+IERvY3VtZW50OjpjcmVhdGVBdHRyaWJ1dGUoY29uc3QgQXRvbVN0cmlu
ZyYgbG9jYWxOYW1lKQogewogICAgIGlmICghaXNWYWxpZE5hbWUobG9jYWxOYW1lKSkKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRDaGFyYWN0ZXJFcnJvciB9OwotICAgIHJldHVy
biBBdHRyOjpjcmVhdGUoKnRoaXMsIFF1YWxpZmllZE5hbWUgeyBudWxsQXRvbSgpLCBpc0hUTUxE
b2N1bWVudCgpID8gbG9jYWxOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgOiBsb2NhbE5h
bWUsIG51bGxBdG9tKCkgfSwgZW1wdHlTdHJpbmcoKSk7CisgICAgcmV0dXJuIEF0dHI6OmNyZWF0
ZSgqdGhpcywgUXVhbGlmaWVkTmFtZSB7IG51bGxBdG9tKCksIGlzSFRNTERvY3VtZW50KCkgPyBs
b2NhbE5hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IGxvY2FsTmFtZSwgbnVsbEF0b20o
KSB9LCBlbXB0eUF0b20oKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gRG9jdW1lbnQ6
OmNyZWF0ZUF0dHJpYnV0ZU5TKGNvbnN0IEF0b21TdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3Qg
U3RyaW5nJiBxdWFsaWZpZWROYW1lLCBib29sIHNob3VsZElnbm9yZU5hbWVzcGFjZUNoZWNrcykK
QEAgLTYwNzMsNyArNjA3Myw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gRG9jdW1lbnQ6OmNy
ZWF0ZUF0dHJpYnV0ZU5TKGNvbnN0IEF0b21TdHJpbmcmIG5hbWVzcGFjZVVSCiAgICAgUXVhbGlm
aWVkTmFtZSBwYXJzZWROYW1lIHsgcGFyc2VSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgfTsK
ICAgICBpZiAoIXNob3VsZElnbm9yZU5hbWVzcGFjZUNoZWNrcyAmJiAhaGFzVmFsaWROYW1lc3Bh
Y2VGb3JBdHRyaWJ1dGVzKHBhcnNlZE5hbWUpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
TmFtZXNwYWNlRXJyb3IgfTsKLSAgICByZXR1cm4gQXR0cjo6Y3JlYXRlKCp0aGlzLCBwYXJzZWRO
YW1lLCBlbXB0eVN0cmluZygpKTsKKyAgICByZXR1cm4gQXR0cjo6Y3JlYXRlKCp0aGlzLCBwYXJz
ZWROYW1lLCBlbXB0eUF0b20oKSk7CiB9CiAKIGNvbnN0IFNWR0RvY3VtZW50RXh0ZW5zaW9ucyog
RG9jdW1lbnQ6OnN2Z0V4dGVuc2lvbnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRDb250ZW50RWRpdGFibGUuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRD
b250ZW50RWRpdGFibGUuaWRsCmluZGV4IGEyMTg1OGNjZmQ4NmE2NjMxMDA3ODk4YTBhMWJiOTc2
NzUwNjIzODEuLjI4YTk4NjJkYWNkNDFmYWJhNjhmOWZiNTYxZWQyZDc4ZjZjNjdiYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50Q29udGVudEVkaXRhYmxlLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudENvbnRlbnRFZGl0YWJsZS5pZGwKQEAgLTI2LDcg
KzI2LDcgQEAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2VsZW1lbnRjb250ZW50
ZWRpdGFibGUKIGludGVyZmFjZSBtaXhpbiBFbGVtZW50Q29udGVudEVkaXRhYmxlIHsKICAgICBb
Q0VSZWFjdGlvbnNdIGF0dHJpYnV0ZSBET01TdHJpbmcgY29udGVudEVkaXRhYmxlOwotICAgIFtD
RVJlYWN0aW9ucywgRW5hYmxlZEJ5U2V0dGluZz1FbnRlcktleUhpbnRFbmFibGVkXSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGVudGVyS2V5SGludDsKKyAgICBbQ0VSZWFjdGlvbnMsIEVuYWJsZWRCeVNl
dHRpbmc9RW50ZXJLZXlIaW50RW5hYmxlZF0gYXR0cmlidXRlIFtBdG9tU3RyaW5nXSBET01TdHJp
bmcgZW50ZXJLZXlIaW50OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGlzQ29udGVu
dEVkaXRhYmxlOwogICAgIFtDRVJlYWN0aW9uc10gYXR0cmlidXRlIFtBdG9tU3RyaW5nXSBET01T
dHJpbmcgaW5wdXRNb2RlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHls
ZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAppbmRl
eCBmMDg2NmM0ZjJiY2QwMjA0OTcyYTFhMGRmNDEzZjAwN2FiNmY0YmViLi5lNDI2M2U5MjE5YjY0
M2NlNGQ0NTAzMDgzYjE0ZDgwNTYyOThmZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU3R5bGVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1l
bnQuY3BwCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6c3luY2hyb25pemVT
dHlsZUF0dHJpYnV0ZUludGVybmFsSW1wbCgpCiAgICAgQVNTRVJUKGVsZW1lbnREYXRhKCktPnN0
eWxlQXR0cmlidXRlSXNEaXJ0eSgpKTsKICAgICBlbGVtZW50RGF0YSgpLT5zZXRTdHlsZUF0dHJp
YnV0ZUlzRGlydHkoZmFsc2UpOwogICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnRpZXMqIGlubGlu
ZVN0eWxlID0gdGhpcy0+aW5saW5lU3R5bGUoKSkKLSAgICAgICAgc2V0U3luY2hyb25pemVkTGF6
eUF0dHJpYnV0ZShzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CisgICAgICAgIHNl
dFN5bmNocm9uaXplZExhenlBdHRyaWJ1dGUoc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0
QXRvbSgpKTsKIH0KIAogU3R5bGVkRWxlbWVudDo6flN0eWxlZEVsZW1lbnQoKQpAQCAtMjUzLDcg
KzI1Myw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCkK
ICAgICBpZiAoc3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCkuaGFzQ29tcGxleFNlbGVjdG9yc0Zv
clN0eWxlQXR0cmlidXRlKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGlubGluZVN0eWxlID0gdGhp
cy0+aW5saW5lU3R5bGUoKSkgewogICAgICAgICAgICAgZWxlbWVudERhdGEoKS0+c2V0U3R5bGVB
dHRyaWJ1dGVJc0RpcnR5KGZhbHNlKTsKLSAgICAgICAgICAgIGF1dG8gbmV3VmFsdWUgPSBpbmxp
bmVTdHlsZS0+YXNUZXh0KCk7CisgICAgICAgICAgICBhdXRvIG5ld1ZhbHVlID0gaW5saW5lU3R5
bGUtPmFzVGV4dEF0b20oKTsKICAgICAgICAgICAgIFN0eWxlOjpBdHRyaWJ1dGVDaGFuZ2VJbnZh
bGlkYXRpb24gc3R5bGVJbnZhbGlkYXRpb24oKnRoaXMsIHN0eWxlQXR0ciwgYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihzdHlsZUF0dHIpLCBuZXdWYWx1ZSk7CiAgICAgICAgICAgICBz
ZXRTeW5jaHJvbml6ZWRMYXp5QXR0cmlidXRlKHN0eWxlQXR0ciwgbmV3VmFsdWUpOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4
IDU5NzQyMzgyYmMyNjM3MzhjNjlhZTFkMzI3NzRhNGJkMDQzYTEwZDAuLjZhYmYzNDhjMDMwNTU5
N2MzODhjOTZhM2UyZjE3YWMxMmJmZGQ1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC00MjYsNyArNDI2LDcgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxl
KQogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50Rm9udFNpemUgIT0gZGVzaXJlZEZvbnRT
aXplKSB7CiAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlG
b250U2l6ZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShkZXNpcmVkRm9u
dFNpemUsIENTU1VuaXRUeXBlOjpDU1NfUFgpLCBmYWxzZSk7Ci0gICAgICAgICAgICBzZXROb2Rl
QXR0cmlidXRlKCplbGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7Cisg
ICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKCplbGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0
eWxlLT5hc1RleHRBdG9tKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbmxpbmVTdHlsZS0+
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKCplbGVtZW50LCBz
dHlsZUF0dHIpOwpAQCAtNTQ1LDcgKzU0NSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJl
bW92ZUVtYmVkZGluZ1VwVG9FbmNsb3NpbmdCbG9jayhOb2RlKiBub2RlLCBOb2RlKiB1bnNwCiAg
ICAgICAgICAgICBhdXRvIGlubGluZVN0eWxlID0gY29weVN0eWxlT3JDcmVhdGVFbXB0eShlbGVt
ZW50LmlubGluZVN0eWxlKCkpOwogICAgICAgICAgICAgaW5saW5lU3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5VW5pY29kZUJpZGksIENTU1ZhbHVlTm9ybWFsKTsKICAgICAgICAgICAgIGlu
bGluZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbik7Ci0gICAgICAg
ICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFz
VGV4dCgpKTsKKyAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRy
LCBpbmxpbmVTdHlsZS0+YXNUZXh0QXRvbSgpKTsKICAgICAgICAgICAgIGlmIChpc1NwYW5XaXRo
b3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oZWxlbWVudCkpCiAgICAgICAgICAgICAg
ICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKICAgICAgICAgfQpAQCAt
NzkxLDcgKzc5MSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVU
b05vZGVSYW5nZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBOb2RlJiBzCiAgICAgICAgICAgICBSZWZQ
dHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gaW5saW5lU3R5bGUgPSBjb3B5U3R5bGVPckNyZWF0
ZUVtcHR5KGVsZW1lbnQuaW5saW5lU3R5bGUoKSk7CiAgICAgICAgICAgICBpZiAoUmVmUHRyIG90
aGVyU3R5bGUgPSBzdHlsZS5zdHlsZSgpKQogICAgICAgICAgICAgICAgIGlubGluZVN0eWxlLT5t
ZXJnZUFuZE92ZXJyaWRlT25Db25mbGljdCgqb3RoZXJTdHlsZSk7Ci0gICAgICAgICAgICBzZXRO
b2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsK
KyAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBpbmxpbmVT
dHlsZS0+YXNUZXh0QXRvbSgpKTsKICAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQpAQCAtOTcxLDcgKzk3MSw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNT
U1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEhUTUxFbGVtZW50JiBlbGVtZW50CiAgICAgaWYg
KG5ld0lubGluZVN0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUo
ZWxlbWVudCwgc3R5bGVBdHRyKTsKICAgICBlbHNlCi0gICAgICAgIHNldE5vZGVBdHRyaWJ1dGUo
ZWxlbWVudCwgc3R5bGVBdHRyLCBuZXdJbmxpbmVTdHlsZS0+YXNUZXh0KCkpOworICAgICAgICBz
ZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPmFzVGV4
dEF0b20oKSk7CiAKICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5
bGVTcGFuKGVsZW1lbnQpKQogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVs
ZW1lbnQpOwpAQCAtMTAxNSw3ICsxMDE1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBw
bHlJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSYgbm9kZSwgRWRpdGluZ1N0eWxlKiBzdHkKICAg
ICAvLyBTaW5jZSBhZGRJbmxpbmVTdHlsZUlmTmVlZGVkIGNhbid0IGFkZCBzdHlsZXMgdG8gYmxv
Y2stZmxvdyByZW5kZXIgb2JqZWN0cywgYWRkIHN0eWxlIGF0dHJpYnV0ZSBpbnN0ZWFkLgogICAg
IC8vIEZJWE1FOiBhcHBseUlubGluZVN0eWxlVG9SYW5nZSBzaG91bGQgYmUgdXNlZCBoZXJlIGlu
c3RlYWQuCiAgICAgaWYgKChub2RlLnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2tGbG93KCkgfHwg
bm9kZS5oYXNDaGlsZE5vZGVzKCkpICYmIGlzPEhUTUxFbGVtZW50Pihub2RlKSkgewotICAgICAg
ICBzZXROb2RlQXR0cmlidXRlKGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKSwgc3R5bGVBdHRy
LCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkpOworICAgICAgICBzZXROb2RlQXR0
cmlidXRlKGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKSwgc3R5bGVBdHRyLCBuZXdJbmxpbmVT
dHlsZS0+c3R5bGUoKS0+YXNUZXh0QXRvbSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMTQ2NCwxMiArMTQ2NCwxMiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGlu
ZVN0eWxlQ2hhbmdlKE5vZGUmIHBhc3NlZFN0YXJ0LCBOb2RlJiBwYXNzZWRFbgogICAgICAgICAg
ICAgaWYgKGF1dG8gZXhpc3RpbmdTdHlsZSA9IHN0eWxlQ29udGFpbmVyLT5pbmxpbmVTdHlsZSgp
KSB7CiAgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3Jl
YXRlKGV4aXN0aW5nU3R5bGUpOwogICAgICAgICAgICAgICAgIGlubGluZVN0eWxlLT5vdmVycmlk
ZVdpdGhTdHlsZSgqc3R5bGVUb01lcmdlKTsKLSAgICAgICAgICAgICAgICBzZXROb2RlQXR0cmli
dXRlKCpzdHlsZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+c3R5bGUoKS0+YXNU
ZXh0KCkpOworICAgICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoKnN0eWxlQ29udGFpbmVy
LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHRBdG9tKCkpOwogICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgqc3R5bGVDb250
YWluZXIsIHN0eWxlQXR0ciwgc3R5bGVUb01lcmdlLT5hc1RleHQoKSk7CisgICAgICAgICAgICAg
ICAgc2V0Tm9kZUF0dHJpYnV0ZSgqc3R5bGVDb250YWluZXIsIHN0eWxlQXR0ciwgc3R5bGVUb01l
cmdlLT5hc1RleHRBdG9tKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXV0byBz
dHlsZUVsZW1lbnQgPSBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KGRvY3VtZW50KCkpOwotICAgICAg
ICAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBzdHlsZVRvTWVyZ2Ut
PmFzVGV4dCgpKTsKKyAgICAgICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxl
QXR0ciwgc3R5bGVUb01lcmdlLT5hc1RleHRBdG9tKCkpOwogICAgICAgICAgICAgc3Vycm91bmRO
b2RlUmFuZ2VXaXRoRWxlbWVudCgqc3RhcnROb2RlLCAqZW5kTm9kZSwgV1RGTW92ZShzdHlsZUVs
ZW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggMjY3ZTMxNDMzYTJiZGViY2QzMTI5
ZGM3NzBkNjc1NzI5ZDUyYTE5NS4uOTQxZGZlZThlZjc0MGUyY2RmZmJjMWU1ODU2NmEwNzE3Yjdl
N2NlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKQEAgLTE4NCw3ICsxODQsNyBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBs
YWNlbWVudEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBjb25zdCBWaXNpYgog
ICAgIEFTU0VSVChzdGFnaW5nRG9jdW1lbnQtPmJvZHkoKSk7CiAKICAgICBDb21wdXRlZFN0eWxl
RXh0cmFjdG9yIGNvbXB1dGVkU3R5bGVPZkVkaXRhYmxlUm9vdChlZGl0YWJsZVJvb3QuZ2V0KCkp
OwotICAgIHN0YWdpbmdEb2N1bWVudC0+Ym9keSgpLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKHN0eWxlQXR0ciwgY29tcHV0ZWRTdHlsZU9mRWRpdGFibGVSb290LmNvcHlQcm9w
ZXJ0aWVzKCktPmFzVGV4dCgpKTsKKyAgICBzdGFnaW5nRG9jdW1lbnQtPmJvZHkoKS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdHlsZUF0dHIsIGNvbXB1dGVkU3R5bGVPZkVk
aXRhYmxlUm9vdC5jb3B5UHJvcGVydGllcygpLT5hc1RleHRBdG9tKCkpOwogCiAgICAgUmVmUHRy
PFN0eWxlZEVsZW1lbnQ+IGhvbGRlciA9IGluc2VydEZyYWdtZW50Rm9yVGVzdFJlbmRlcmluZyhz
dGFnaW5nRG9jdW1lbnQtPmJvZHkoKSk7CiAgICAgaWYgKCFob2xkZXIpIHsKQEAgLTYyMiw3ICs2
MjIsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnZlcnNlVHJhbnNmb3JtQ29s
b3IoSW5zZXJ0ZWROb2RlcyYgaW5zZXJ0ZWROb2RlcwogICAgICAgICBpZiAoZWRpdGluZ1N0eWxl
LnB0cigpID09IHRyYW5zZm9ybWVkU3R5bGUucHRyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgdHJhbnNmb3Jt
ZWRTdHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkpOworICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVs
ZW1lbnQsIHN0eWxlQXR0ciwgdHJhbnNmb3JtZWRTdHlsZS0+c3R5bGUoKS0+YXNUZXh0QXRvbSgp
KTsKICAgICB9CiB9CiAKQEAgLTY4NSw3ICs2ODUsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKEluc2Vy
dAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZSgqZWxlbWVu
dCwgc3R5bGVBdHRyKTsKICAgICAgICAgfSBlbHNlIGlmIChuZXdJbmxpbmVTdHlsZS0+c3R5bGUo
KS0+cHJvcGVydHlDb3VudCgpICE9IGlubGluZVN0eWxlLT5wcm9wZXJ0eUNvdW50KCkpCi0gICAg
ICAgICAgICBzZXROb2RlQXR0cmlidXRlKCplbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0
eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CisgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKCpl
bGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHRBdG9tKCkp
OwogCiAgICAgICAgIC8vIEZJWE1FOiBUb2xlcmF0ZSBkaWZmZXJlbmNlcyBpbiBpZCwgY2xhc3Ms
IGFuZCBzdHlsZSBhdHRyaWJ1dGVzLgogICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50Tm9kZSgp
ICYmIGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChlbGVtZW50KSAmJiBhcmVJZGVudGlj
YWxFbGVtZW50cygqZWxlbWVudCwgKmVsZW1lbnQtPnBhcmVudE5vZGUoKSkKQEAgLTk4OSw3ICs5
ODksNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKElu
c2VydGVkTm9kZXMmIGluc2VydGVkTm9kZXMpCiAgICAgICAgIGluc2VydGVkTm9kZXMud2lsbFJl
bW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4od3JhcHBpbmdTdHlsZVNwYW4uZ2V0KCkpOwogICAg
ICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKCp3cmFwcGluZ1N0eWxlU3Bhbik7CiAg
ICAgfSBlbHNlCi0gICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoKndyYXBwaW5nU3R5bGVTcGFuLCBz
dHlsZUF0dHIsIHN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CisgICAgICAgIHNldE5vZGVBdHRy
aWJ1dGUoKndyYXBwaW5nU3R5bGVTcGFuLCBzdHlsZUF0dHIsIHN0eWxlLT5zdHlsZSgpLT5hc1Rl
eHRBdG9tKCkpOwogfQogCiB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptZXJnZUVuZElm
TmVlZGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmNwcAppbmRleCBmNjBlNjI1MTg3
NmEwNjFlOGVmODI5YWUxOTE1NjM1NGZhNGE0Yjc2Li4zYmFlYWZmNTExZmRmYWY5MmVhOTc2MzVl
N2E3OGE4NjY4ZmIxZjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2Vu
TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuY3BwCkBAIC00
MiwxMiArNDIsMTIgQEAgRE9NVG9rZW5MaXN0OjpET01Ub2tlbkxpc3QoRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwKIHsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHRva2VuQ29udGFpbnNIVE1MU3BhY2UoY29uc3QgU3RyaW5nJiB0b2tlbikKK3N0
YXRpYyBpbmxpbmUgYm9vbCB0b2tlbkNvbnRhaW5zSFRNTFNwYWNlKFN0cmluZ1ZpZXcgdG9rZW4p
CiB7CiAgICAgcmV0dXJuIHRva2VuLmZpbmQoaXNIVE1MU3BhY2U8VUNoYXI+KSAhPSBub3RGb3Vu
ZDsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gRE9NVG9rZW5MaXN0Ojp2YWxpZGF0ZVRva2VuKGNv
bnN0IFN0cmluZyYgdG9rZW4pCitFeGNlcHRpb25Pcjx2b2lkPiBET01Ub2tlbkxpc3Q6OnZhbGlk
YXRlVG9rZW4oU3RyaW5nVmlldyB0b2tlbikKIHsKICAgICBpZiAodG9rZW4uaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKQEAgLTU4LDcgKzU4LDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9NVG9rZW5MaXN0Ojp2YWxpZGF0ZVRva2VuKGNvbnN0IFN0
cmluZyYgdG9rZW4pCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gRE9N
VG9rZW5MaXN0Ojp2YWxpZGF0ZVRva2Vucyhjb25zdCBTdHJpbmcqIHRva2Vucywgc2l6ZV90IGxl
bmd0aCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IERPTVRva2VuTGlzdDo6dmFsaWRhdGVUb2tlbnMoY29u
c3QgQXRvbVN0cmluZyogdG9rZW5zLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgYXV0byByZXN1bHQgPSB2YWxpZGF0
ZVRva2VuKHRva2Vuc1tpXSk7CkBAIC03Myw3ICs3Myw3IEBAIGJvb2wgRE9NVG9rZW5MaXN0Ojpj
b250YWlucyhjb25zdCBBdG9tU3RyaW5nJiB0b2tlbikgY29uc3QKICAgICByZXR1cm4gdG9rZW5z
KCkuY29udGFpbnModG9rZW4pOwogfQogCi1pbmxpbmUgRXhjZXB0aW9uT3I8dm9pZD4gRE9NVG9r
ZW5MaXN0OjphZGRJbnRlcm5hbChjb25zdCBTdHJpbmcqIG5ld1Rva2Vucywgc2l6ZV90IGxlbmd0
aCkKK2lubGluZSBFeGNlcHRpb25Pcjx2b2lkPiBET01Ub2tlbkxpc3Q6OmFkZEludGVybmFsKGNv
bnN0IEF0b21TdHJpbmcqIG5ld1Rva2Vucywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICAvLyBUaGlz
IGlzIHVzdWFsbHkgY2FsbGVkIHdpdGggYSBzaW5nbGUgdG9rZW4uCiAgICAgVmVjdG9yPEF0b21T
dHJpbmcsIDE+IHVuaXF1ZU5ld1Rva2VuczsKQEAgLTk3LDE3ICs5NywxNyBAQCBpbmxpbmUgRXhj
ZXB0aW9uT3I8dm9pZD4gRE9NVG9rZW5MaXN0OjphZGRJbnRlcm5hbChjb25zdCBTdHJpbmcqIG5l
d1Rva2Vucywgc2l6ZQogICAgIHJldHVybiB7IH07CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IERP
TVRva2VuTGlzdDo6YWRkKGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mIHRva2VucykKK0V4Y2Vw
dGlvbk9yPHZvaWQ+IERPTVRva2VuTGlzdDo6YWRkKGNvbnN0IEZpeGVkVmVjdG9yPEF0b21TdHJp
bmc+JiB0b2tlbnMpCiB7CiAgICAgcmV0dXJuIGFkZEludGVybmFsKHRva2Vucy5kYXRhKCksIHRv
a2Vucy5zaXplKCkpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBET01Ub2tlbkxpc3Q6OmFkZChj
b25zdCBBdG9tU3RyaW5nJiB0b2tlbikKIHsKLSAgICByZXR1cm4gYWRkSW50ZXJuYWwoJnRva2Vu
LnN0cmluZygpLCAxKTsKKyAgICByZXR1cm4gYWRkSW50ZXJuYWwoJnRva2VuLCAxKTsKIH0KIAot
aW5saW5lIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVRva2VuTGlzdDo6cmVtb3ZlSW50ZXJuYWwoY29u
c3QgU3RyaW5nKiB0b2tlbnNUb1JlbW92ZSwgc2l6ZV90IGxlbmd0aCkKK2lubGluZSBFeGNlcHRp
b25Pcjx2b2lkPiBET01Ub2tlbkxpc3Q6OnJlbW92ZUludGVybmFsKGNvbnN0IEF0b21TdHJpbmcq
IHRva2Vuc1RvUmVtb3ZlLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGF1dG8gcmVzdWx0ID0gdmFs
aWRhdGVUb2tlbnModG9rZW5zVG9SZW1vdmUsIGxlbmd0aCk7CiAgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkKQEAgLTEyMiwxNCArMTIyLDE0IEBAIGlubGluZSBFeGNlcHRpb25Pcjx2b2lk
PiBET01Ub2tlbkxpc3Q6OnJlbW92ZUludGVybmFsKGNvbnN0IFN0cmluZyogdG9rZW5zVG9SZW1v
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gRE9NVG9rZW5MaXN0Ojpy
ZW1vdmUoY29uc3QgRml4ZWRWZWN0b3I8U3RyaW5nPiYgdG9rZW5zKQorRXhjZXB0aW9uT3I8dm9p
ZD4gRE9NVG9rZW5MaXN0OjpyZW1vdmUoY29uc3QgRml4ZWRWZWN0b3I8QXRvbVN0cmluZz4mIHRv
a2VucykKIHsKICAgICByZXR1cm4gcmVtb3ZlSW50ZXJuYWwodG9rZW5zLmRhdGEoKSwgdG9rZW5z
LnNpemUoKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVRva2VuTGlzdDo6cmVtb3ZlKGNv
bnN0IEF0b21TdHJpbmcmIHRva2VuKQogewotICAgIHJldHVybiByZW1vdmVJbnRlcm5hbCgmdG9r
ZW4uc3RyaW5nKCksIDEpOworICAgIHJldHVybiByZW1vdmVJbnRlcm5hbCgmdG9rZW4sIDEpOwog
fQogCiBFeGNlcHRpb25Pcjxib29sPiBET01Ub2tlbkxpc3Q6OnRvZ2dsZShjb25zdCBBdG9tU3Ry
aW5nJiB0b2tlbiwgc3RkOjpvcHRpb25hbDxib29sPiBmb3JjZSkKQEAgLTIxNSw3ICsyMTUsNyBA
QCBjb25zdCBBdG9tU3RyaW5nJiBET01Ub2tlbkxpc3Q6OnZhbHVlKCkgY29uc3QKICAgICByZXR1
cm4gbV9lbGVtZW50LmdldEF0dHJpYnV0ZShtX2F0dHJpYnV0ZU5hbWUpOwogfQogCi12b2lkIERP
TVRva2VuTGlzdDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgRE9NVG9rZW5M
aXN0OjpzZXRWYWx1ZShjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBtX2VsZW1lbnQu
c2V0QXR0cmlidXRlKG1fYXR0cmlidXRlTmFtZSwgdmFsdWUpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRE9N
VG9rZW5MaXN0LmgKaW5kZXggM2E4M2IxN2FiMWI3YmQ3NzdiOGQ3YjE4MjRhNzliM2ExMjUzYzEx
Ny4uMTYxODZlOTBiMzI1OTg4MGU1OTUxMDM3NDQ4ZDJmOTY3OGM2NTkyMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0RPTVRva2VuTGlzdC5oCkBAIC00NSw5ICs0NSw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBB
dG9tU3RyaW5nJiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgY29udGFpbnMoY29uc3QgQXRvbVN0cmluZyYpIGNvbnN0OwotICAgIEV4Y2VwdGlv
bk9yPHZvaWQ+IGFkZChjb25zdCBGaXhlZFZlY3RvcjxTdHJpbmc+Jik7CisgICAgRXhjZXB0aW9u
T3I8dm9pZD4gYWRkKGNvbnN0IEZpeGVkVmVjdG9yPEF0b21TdHJpbmc+Jik7CiAgICAgRXhjZXB0
aW9uT3I8dm9pZD4gYWRkKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lk
PiByZW1vdmUoY29uc3QgRml4ZWRWZWN0b3I8U3RyaW5nPiYpOworICAgIEV4Y2VwdGlvbk9yPHZv
aWQ+IHJlbW92ZShjb25zdCBGaXhlZFZlY3RvcjxBdG9tU3RyaW5nPiYpOwogICAgIEV4Y2VwdGlv
bk9yPHZvaWQ+IHJlbW92ZShjb25zdCBBdG9tU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8Ym9vbD4gdG9nZ2xlKGNvbnN0IEF0b21TdHJpbmcmLCBzdGQ6Om9wdGlvbmFs
PGJvb2w+IGZvcmNlKTsKICAgICBFeGNlcHRpb25Pcjxib29sPiByZXBsYWNlKGNvbnN0IEF0b21T
dHJpbmcmIHRva2VuLCBjb25zdCBBdG9tU3RyaW5nJiBuZXdUb2tlbik7CkBAIC01NSw3ICs1NSw3
IEBAIHB1YmxpYzoKIAogICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Vs
ZW1lbnQ7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5n
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWYWx1ZShjb25zdCBBdG9tU3RyaW5nJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUoKSBjb25zdDsKIAog
cHJpdmF0ZToKQEAgLTY1LDEwICs2NSwxMCBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JU
IFZlY3RvcjxBdG9tU3RyaW5nPiYgdG9rZW5zKCk7CiAgICAgY29uc3QgVmVjdG9yPEF0b21TdHJp
bmc+JiB0b2tlbnMoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PERPTVRva2VuTGlzdCY+KCp0
aGlzKS50b2tlbnMoKTsgfQogCi0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IHZhbGlkYXRl
VG9rZW4oY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IHZhbGlk
YXRlVG9rZW5zKGNvbnN0IFN0cmluZyogdG9rZW5zLCBzaXplX3QgbGVuZ3RoKTsKLSAgICBFeGNl
cHRpb25Pcjx2b2lkPiBhZGRJbnRlcm5hbChjb25zdCBTdHJpbmcqIHRva2Vucywgc2l6ZV90IGxl
bmd0aCk7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gcmVtb3ZlSW50ZXJuYWwoY29uc3QgU3RyaW5n
KiB0b2tlbnMsIHNpemVfdCBsZW5ndGgpOworICAgIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lkPiB2
YWxpZGF0ZVRva2VuKFN0cmluZ1ZpZXcpOworICAgIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lkPiB2
YWxpZGF0ZVRva2Vucyhjb25zdCBBdG9tU3RyaW5nKiB0b2tlbnMsIHNpemVfdCBsZW5ndGgpOwor
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGFkZEludGVybmFsKGNvbnN0IEF0b21TdHJpbmcqIHRva2Vu
cywgc2l6ZV90IGxlbmd0aCk7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gcmVtb3ZlSW50ZXJuYWwo
Y29uc3QgQXRvbVN0cmluZyogdG9rZW5zLCBzaXplX3QgbGVuZ3RoKTsKIAogICAgIEVsZW1lbnQm
IG1fZWxlbWVudDsKICAgICBjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJiBtX2F0dHJpYnV0
ZU5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5pZGwKaW5kZXggMWI5MjNkNTc0NDJh
YmU4MjYzNTBhYjFkMDAzOTVmNzRmMzdmNjAzMC4uNGVhZjEzZDFlNGZlNWEyNzkzMzU3OWE2Y2Yx
NzVkNzNhOTYzNTY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxp
c3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmlkbApAQCAtMzAs
MTIgKzMwLDEyIEBACiBdIGludGVyZmFjZSBET01Ub2tlbkxpc3QgewogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKICAgICBnZXR0ZXIgRE9NU3RyaW5nPyBpdGVt
KHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIGJvb2xlYW4gY29udGFpbnMoRE9NU3RyaW5nIHRv
a2VuKTsKLSAgICBbQ0VSZWFjdGlvbnNdIHVuZGVmaW5lZCBhZGQoRE9NU3RyaW5nLi4uIHRva2Vu
cyk7Ci0gICAgW0NFUmVhY3Rpb25zXSB1bmRlZmluZWQgcmVtb3ZlKERPTVN0cmluZy4uLiB0b2tl
bnMpOwotICAgIFtDRVJlYWN0aW9uc10gYm9vbGVhbiB0b2dnbGUoRE9NU3RyaW5nIHRva2VuLCBv
cHRpb25hbCBib29sZWFuIGZvcmNlKTsKLSAgICBbQ0VSZWFjdGlvbnNdIGJvb2xlYW4gcmVwbGFj
ZShET01TdHJpbmcgdG9rZW4sIERPTVN0cmluZyBuZXdUb2tlbik7CisgICAgYm9vbGVhbiBjb250
YWlucyhbQXRvbVN0cmluZ10gRE9NU3RyaW5nIHRva2VuKTsKKyAgICBbQ0VSZWFjdGlvbnNdIHVu
ZGVmaW5lZCBhZGQoW0F0b21TdHJpbmddIERPTVN0cmluZy4uLiB0b2tlbnMpOworICAgIFtDRVJl
YWN0aW9uc10gdW5kZWZpbmVkIHJlbW92ZShbQXRvbVN0cmluZ10gRE9NU3RyaW5nLi4uIHRva2Vu
cyk7CisgICAgW0NFUmVhY3Rpb25zXSBib29sZWFuIHRvZ2dsZShbQXRvbVN0cmluZ10gRE9NU3Ry
aW5nIHRva2VuLCBvcHRpb25hbCBib29sZWFuIGZvcmNlKTsKKyAgICBbQ0VSZWFjdGlvbnNdIGJv
b2xlYW4gcmVwbGFjZShbQXRvbVN0cmluZ10gRE9NU3RyaW5nIHRva2VuLCBbQXRvbVN0cmluZ10g
RE9NU3RyaW5nIG5ld1Rva2VuKTsKICAgICBib29sZWFuIHN1cHBvcnRzKERPTVN0cmluZyB0b2tl
bik7Ci0gICAgW0NFUmVhY3Rpb25zXSBzdHJpbmdpZmllciBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZh
bHVlOworICAgIFtDRVJlYWN0aW9uc10gc3RyaW5naWZpZXIgYXR0cmlidXRlIFtBdG9tU3RyaW5n
XSBET01TdHJpbmcgdmFsdWU7CiAgICAgaXRlcmFibGU8RE9NU3RyaW5nPjsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAppbmRleCBlZDIwMmE3MjZiMjA0NDFiNzJmOGNmMWNj
YWM3ZDNmYTI3NmRlNDgzLi45NjczZDhjYzJmZGQ5YmQyZDczNTdjYzc4ZTJmODc2YjE1NDM0OTgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAKQEAgLTk0LDggKzk0LDcgQEAg
UmVmPFVwbG9hZEJ1dHRvbkVsZW1lbnQ+IFVwbG9hZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZUZvck11
bHRpcGxlKERvY3VtZW50JiBkb2N1bWUKIFJlZjxVcGxvYWRCdXR0b25FbGVtZW50PiBVcGxvYWRC
dXR0b25FbGVtZW50OjpjcmVhdGVJbnRlcm5hbChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCiB7CiAgICAgYXV0byBidXR0b24gPSBhZG9wdFJlZigqbmV3IFVwbG9hZEJ1
dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJv
eWVkPGNvbnN0IEF0b21TdHJpbmc+IGJ1dHRvbk5hbWUoImJ1dHRvbiIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBidXR0b24tPnNldFR5cGUoYnV0dG9uTmFtZSk7Cisg
ICAgYnV0dG9uLT5zZXRUeXBlKEhUTUxOYW1lczo6YnV0dG9uVGFnLT5sb2NhbE5hbWUoKSk7CiAg
ICAgYnV0dG9uLT5zZXRQc2V1ZG8oU2hhZG93UHNldWRvSWRzOjpmaWxlU2VsZWN0b3JCdXR0b24o
KSk7CiAgICAgYnV0dG9uLT5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgcmV0dXJuIGJ1dHRvbjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKaW5kZXggYzhjYmQxODUwZjFh
YzI4ZDFiMzVhYmIxNTM4MmIwMDc1Y2UxNmE0OC4uODc5NDg2N2M2ZTA0ZDUwMTYxNzNiZjk3ZDcy
MzAwN2U5ZGFmMWRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9u
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5j
cHAKQEAgLTg2LDEwICs4Niw4IEBAIGNvbnN0IEF0b21TdHJpbmcmIEhUTUxCdXR0b25FbGVtZW50
Ojpmb3JtQ29udHJvbFR5cGUoKSBjb25zdAogICAgICAgICAgICAgc3RhdGljIE1haW5UaHJlYWRO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzdWJtaXQoInN1Ym1pdCIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgICAgIHJldHVybiBzdWJtaXQ7CiAg
ICAgICAgIH0KLSAgICAgICAgY2FzZSBCVVRUT046IHsKLSAgICAgICAgICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gYnV0dG9uKCJidXR0b24iLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgICAgICByZXR1cm4gYnV0
dG9uOwotICAgICAgICB9CisgICAgICAgIGNhc2UgQlVUVE9OOgorICAgICAgICAgICAgcmV0dXJu
IEhUTUxOYW1lczo6YnV0dG9uVGFnLT5sb2NhbE5hbWUoKTsKICAgICAgICAgY2FzZSBSRVNFVDog
ewogICAgICAgICAgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
U3RyaW5nPiByZXNldCgicmVzZXQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CiAgICAgICAgICAgICByZXR1cm4gcmVzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxCdXR0b25FbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRv
bkVsZW1lbnQuaWRsCmluZGV4IDJjMjY2Y2UyNGM3ZDFjZDM2YTliYmVjMDliMWI5M2Y0Y2U0MDQ3
YzIuLmJmN2E1NTdjOTIzNDVlYjU1OTFlZDc3MWU0MjEyMjhjYzFjOWY4MDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaWRsCkBAIC0yNSw3ICsyNSw3IEBACiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIEhUTUxGb3JtRWxlbWVudCBmb3JtOwogICAgIFtDRVJlYWN0aW9u
cz1Ob3ROZWVkZWRdIGF0dHJpYnV0ZSBVU1ZTdHJpbmcgZm9ybUFjdGlvbjsKIAotICAgIFtDRVJl
YWN0aW9ucz1Ob3ROZWVkZWRdIGF0dHJpYnV0ZSBET01TdHJpbmcgZm9ybUVuY3R5cGU7CisgICAg
W0NFUmVhY3Rpb25zPU5vdE5lZWRlZF0gYXR0cmlidXRlIFtBdG9tU3RyaW5nXSBET01TdHJpbmcg
Zm9ybUVuY3R5cGU7CiAgICAgW0NFUmVhY3Rpb25zPU5vdE5lZWRlZF0gYXR0cmlidXRlIERPTVN0
cmluZyBmb3JtTWV0aG9kOwogICAgIFtDRVJlYWN0aW9ucz1Ob3ROZWVkZWRdIGF0dHJpYnV0ZSBb
QXRvbVN0cmluZ10gRE9NU3RyaW5nIHR5cGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAKaW5kZXggNmIxZDhkM2MxZDEwM2E1ZjAyYjgwMzIwM2ZlZmQ4MGIwNmNkMGQ1MS4uODE0MTgx
MDJmM2YwYmRkN2RiMjJkYTcwNDA3MzU0MmJjZjlmNjdlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAKQEAgLTExMTMsNyArMTExMyw3IEBAIFN0cmluZyBIVE1MRWxlbWVudDo6ZW50
ZXJLZXlIaW50KCkgY29uc3QKICAgICByZXR1cm4gYXR0cmlidXRlVmFsdWVGb3JFbnRlcktleUhp
bnQoY2Fub25pY2FsRW50ZXJLZXlIaW50KCkpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpzZXRF
bnRlcktleUhpbnQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNldEVu
dGVyS2V5SGludChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKGVudGVya2V5aGludEF0dHIsIHZhbHVlKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuaAppbmRleCAxNTIxZTgzOGMwY2E5NDlkNTQyNGJjOWJiYjFjNTY2
OWQ5MGIxZmY1Li5lMDhhOGU3MWZjZmRiN2Y0OWMwYWIwODI3NWQ0NzZkMTMwOWNhOTc0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCkBAIC0xMzAsNyArMTMwLDcgQEAgcHVibGljOgogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgRW50ZXJLZXlIaW50IGNhbm9uaWNhbEVudGVyS2V5SGludCgpIGNv
bnN0OwogICAgIFN0cmluZyBlbnRlcktleUhpbnQoKSBjb25zdDsKLSAgICB2b2lkIHNldEVudGVy
S2V5SGludChjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIHNldEVudGVyS2V5SGludChj
b25zdCBBdG9tU3RyaW5nJiB2YWx1ZSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9v
bCBzaG91bGRFeHRlbmRTZWxlY3Rpb25Ub1RhcmdldE5vZGUoY29uc3QgTm9kZSYgdGFyZ2V0Tm9k
ZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQmVmb3JlVXBkYXRlKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggMDYw
OTczMmZlZWQ2NDcxYzZlYTBjZWJkY2M4NzhjMTA0ZmRlNDllOS4uYzE2ZjZhMjIzYzZhNTcwNWZi
YzcyYmRkOWVhMWNhZjJjYTFmODE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC05MCw3ICs5MCw3IEBAIFN0cmluZyBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Ojpmb3JtRW5jdHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIEZvcm1TdWJtaXNz
aW9uOjpBdHRyaWJ1dGVzOjpwYXJzZUVuY29kaW5nVHlwZShmb3JtRW5jdHlwZUF0dHIpOwogfQog
Ci12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEZvcm1FbmN0eXBlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEZvcm1FbmN0eXBlKGNv
bnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oZm9ybWVuY3R5cGVBdHRyLCB2YWx1ZSk7CiB9CkBAIC0xMDQsNyArMTA0LDcgQEAg
U3RyaW5nIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1NZXRob2QoKSBjb25zdAogICAgIHJl
dHVybiBGb3JtU3VibWlzc2lvbjo6QXR0cmlidXRlczo6bWV0aG9kU3RyaW5nKEZvcm1TdWJtaXNz
aW9uOjpBdHRyaWJ1dGVzOjpwYXJzZU1ldGhvZFR5cGUoZm9ybU1ldGhvZEF0dHIsIGRpYWxvZ0Vs
ZW1lbnRFbmFibGVkKSwgZGlhbG9nRWxlbWVudEVuYWJsZWQpOwogfQogCi12b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnNldEZvcm1NZXRob2QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0Rm9ybU1ldGhvZChjb25zdCBBdG9tU3RyaW5nJiB2
YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGZvcm1tZXRo
b2RBdHRyLCB2YWx1ZSk7CiB9CkBAIC02MTYsNyArNjE2LDcgQEAgU3RyaW5nIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmF1dG9jb21wbGV0ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGF1dG9maWxsRGF0
YSgpLmlkbEV4cG9zZWRWYWx1ZTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpz
ZXRBdXRvY29tcGxldGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6c2V0QXV0b2NvbXBsZXRlKGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAg
IHNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXV0b2NvbXBsZXRlQXR0ciwgdmFs
dWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaApp
bmRleCA5OGMwZWU1NjJhN2RhOTI4YTcxNmFjMWFmZTMwOGYxNWRhOWM2YTdhLi4xMDI4Y2FhMGYw
ZjUwNWY2OTBjNWRlM2YwNDIyYjA2OGNjOWVjZWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaApAQCAtNTEsOSArNTEsOSBAQCBwdWJsaWM6CiAgICAg
SFRNTEZvcm1FbGVtZW50KiBmb3JtKCkgY29uc3QgZmluYWwgeyByZXR1cm4gRm9ybUFzc29jaWF0
ZWRFbGVtZW50Ojpmb3JtKCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBmb3JtRW5j
dHlwZSgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Rm9ybUVuY3R5cGUoY29u
c3QgU3RyaW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGb3JtRW5jdHlwZShjb25z
dCBBdG9tU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGZvcm1NZXRob2QoKSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZvcm1NZXRob2QoY29uc3QgU3RyaW5n
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGb3JtTWV0aG9kKGNvbnN0IEF0b21TdHJp
bmcmKTsKICAgICBib29sIGZvcm1Ob1ZhbGlkYXRlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIGZvcm1BY3Rpb24oKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dEZvcm1BY3Rpb24oY29uc3QgQXRvbVN0cmluZyYpOwpAQCAtMTE3LDcgKzExNyw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzRGlzYWJsZWRPclJlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gaXNEaXNh
YmxlZEZvcm1Db250cm9sKCkgfHwgbV9pc1JlYWRPbmx5OyB9CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgYXV0b2NvbXBsZXRlKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRBdXRvY29tcGxldGUoY29uc3QgU3RyaW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRBdXRvY29tcGxldGUoY29uc3QgQXRvbVN0cmluZyYpOwogCiAgICAgQXV0b2ZpbGxNYW50bGUg
YXV0b2ZpbGxNYW50bGUoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwCmluZGV4IDJhMGEyNGQ5MGIzOTcwMWE0NGZmMWVkMTFkY2MxZjZjMjdlNTZkZjEuLjE3
ZTA4ZmZhOTNkNjFkMGRkODA5NzlkZGY4NGIxYzNjZjUyZDBlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTczMiwxMiArNzMyLDEyIEBAIFN0cmluZyBIVE1M
Rm9ybUVsZW1lbnQ6OmFjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIGRvY3VtZW50KCkuY29tcGxl
dGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHZhbHVlKSkuc3RyaW5nKCk7
CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRBY3Rpb24oY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRBY3Rpb24oY29uc3QgQXRvbVN0cmluZyYgdmFs
dWUpCiB7CiAgICAgc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhY3Rpb25BdHRy
LCB2YWx1ZSk7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRFbmN0eXBlKGNvbnN0IFN0
cmluZyYgdmFsdWUpCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6c2V0RW5jdHlwZShjb25zdCBBdG9t
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KGVuY3R5cGVBdHRyLCB2YWx1ZSk7CiB9CkBAIC03NDcsNyArNzQ3LDcgQEAgU3RyaW5nIEhUTUxG
b3JtRWxlbWVudDo6bWV0aG9kKCkgY29uc3QKICAgICByZXR1cm4gRm9ybVN1Ym1pc3Npb246OkF0
dHJpYnV0ZXM6Om1ldGhvZFN0cmluZyhtX2F0dHJpYnV0ZXMubWV0aG9kKCksIGRvY3VtZW50KCku
c2V0dGluZ3MoKS5kaWFsb2dFbGVtZW50RW5hYmxlZCgpKTsKIH0KIAotdm9pZCBIVE1MRm9ybUVs
ZW1lbnQ6OnNldE1ldGhvZChjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnNldE1ldGhvZChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1ldGhvZEF0dHIsIHZhbHVlKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCmluZGV4IGU5YTQyY2ZhM2Q0MWExY2Y3ZDhhZmJhMGY1
YWQ4YTg0M2FmYjMyYWUuLjcwNTE0YTdkZGIwYjYzYmU1OGRkNmQwYTYwYjUzYzNmNzhlM2MwM2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaApAQCAtNTcsNyArNTcsNyBAQCBw
dWJsaWM6CiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBj
b25zdDsKIAogICAgIFN0cmluZyBlbmN0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVz
LmVuY29kaW5nVHlwZSgpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRFbmN0eXBlKGNv
bnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RW5jdHlwZShjb25zdCBB
dG9tU3RyaW5nJik7CiAKICAgICBib29sIHNob3VsZEF1dG9jb21wbGV0ZSgpIGNvbnN0OwogCkBA
IC05NywxMCArOTcsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWNjZXB0Q2hhcnNldChjb25z
dCBTdHJpbmcmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBhY3Rpb24oKSBjb25zdDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFjdGlvbihjb25zdCBTdHJpbmcmKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEFjdGlvbihjb25zdCBBdG9tU3RyaW5nJik7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCBTdHJpbmcgbWV0aG9kKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRNZXRob2QoY29uc3QgU3RyaW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRNZXRob2QoY29uc3QgQXRvbVN0cmluZyYpOwogCiAgICAgRE9NVG9rZW5MaXN0JiByZWxMaXN0
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmlkbAppbmRleCA4MGQ1MTMx
NzJmYWY1MWQ5MmJjM2Q2OTJmMTJiNmZlYzUyODQzOWIxLi5kZDhlN2I4ODc4OGFjNzAyOTE3YTli
ZWNiMmI1ZDFlODMzYjg1OTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtRWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQu
aWRsCkBAIC0yNyw5ICsyNyw5IEBACiAgICAgW0NFUmVhY3Rpb25zPU5vdE5lZWRlZCwgUmVmbGVj
dD1hY2NlcHRfY2hhcnNldF0gYXR0cmlidXRlIERPTVN0cmluZyBhY2NlcHRDaGFyc2V0OwogICAg
IFtDRVJlYWN0aW9ucz1Ob3ROZWVkZWRdIGF0dHJpYnV0ZSBVU1ZTdHJpbmcgYWN0aW9uOwogICAg
IFtDRVJlYWN0aW9ucz1Ob3ROZWVkZWRdIGF0dHJpYnV0ZSBbQXRvbVN0cmluZ10gRE9NU3RyaW5n
IGF1dG9jb21wbGV0ZTsKLSAgICBbQ0VSZWFjdGlvbnM9Tm90TmVlZGVkXSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIGVuY3R5cGU7Ci0gICAgW0NFUmVhY3Rpb25zPU5vdE5lZWRlZCwgSW1wbGVtZW50ZWRB
cz1lbmN0eXBlXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGVuY29kaW5nOwotICAgIFtDRVJlYWN0aW9u
cz1Ob3ROZWVkZWRdIGF0dHJpYnV0ZSBET01TdHJpbmcgbWV0aG9kOworICAgIFtDRVJlYWN0aW9u
cz1Ob3ROZWVkZWRdIGF0dHJpYnV0ZSBbQXRvbVN0cmluZ10gRE9NU3RyaW5nIGVuY3R5cGU7Cisg
ICAgW0NFUmVhY3Rpb25zPU5vdE5lZWRlZCwgSW1wbGVtZW50ZWRBcz1lbmN0eXBlXSBhdHRyaWJ1
dGUgW0F0b21TdHJpbmddIERPTVN0cmluZyBlbmNvZGluZzsKKyAgICBbQ0VSZWFjdGlvbnM9Tm90
TmVlZGVkXSBhdHRyaWJ1dGUgW0F0b21TdHJpbmddIERPTVN0cmluZyBtZXRob2Q7CiAgICAgW0NF
UmVhY3Rpb25zPU5vdE5lZWRlZCwgUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwog
ICAgIFtDRVJlYWN0aW9ucz1Ob3ROZWVkZWQsIFJlZmxlY3RdIGF0dHJpYnV0ZSBib29sZWFuIG5v
VmFsaWRhdGU7CiAgICAgW0NFUmVhY3Rpb25zPU5vdE5lZWRlZCwgUmVmbGVjdF0gYXR0cmlidXRl
IERPTVN0cmluZyB0YXJnZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNw
cAppbmRleCA4MDcwYWYwM2IyYTJiYWJhMTk5YzYzYzA3YWQzOGM2YzQ3MGYzNTNkLi4xNWFmZDM1
MWYyMjI2NzA1MWUzOWUzOWMyYWVmZmY2ZjU4OWQ5Y2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEltYWdlRWxlbWVudC5jcHAKQEAgLTYxNSw3ICs2MTUsNyBAQCBVUkwgSFRNTEltYWdlRWxl
bWVudDo6c3JjKCkgY29uc3QKICAgICByZXR1cm4gZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChhdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNyY0F0dHIpKTsKIH0KIAotdm9pZCBIVE1MSW1h
Z2VFbGVtZW50OjpzZXRTcmMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTEltYWdlRWxl
bWVudDo6c2V0U3JjKGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3JjQXR0ciwgdmFsdWUpOwogfQpAQCAtNjUyLDcgKzY1
Miw3IEBAIGJvb2wgSFRNTEltYWdlRWxlbWVudDo6Y29tcGxldGUoKSBjb25zdAogICAgIHJldHVy
biBtX2ltYWdlTG9hZGVyLT5pbWFnZUNvbXBsZXRlKCk7CiB9CiAKLXZvaWQgSFRNTEltYWdlRWxl
bWVudDo6c2V0RGVjb2RpbmcoU3RyaW5nJiYgZGVjb2RpbmdNb2RlKQordm9pZCBIVE1MSW1hZ2VF
bGVtZW50OjpzZXREZWNvZGluZyhBdG9tU3RyaW5nJiYgZGVjb2RpbmdNb2RlKQogewogICAgIHNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGVjb2RpbmdBdHRyLCBXVEZNb3ZlKGRl
Y29kaW5nTW9kZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAppbmRl
eCBiMTc5YzBhOWE1YjdkYzFjYjVmZjY4ZTFiYzJhMzA3Mzg4ZmFlNTMxLi5mMTM5MGZmMTMyMzAy
MDRiYTMxODg1YTdjMWFlMzk0ZGRmOTY4N2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbWFnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUVsZW1lbnQuaApAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRIZWlnaHQodW5zaWduZWQpOwogCiAgICAgVVJMIHNyYygpIGNvbnN0OwotICAgIHZv
aWQgc2V0U3JjKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0U3JjKGNvbnN0IEF0b21TdHJp
bmcmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q3Jvc3NPcmlnaW4oY29uc3QgQXRv
bVN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBjcm9zc09yaWdpbigpIGNvbnN0
OwpAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNv
bXBsZXRlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldERlY29kaW5nKFN0cmluZyYmKTsKKyAgICB2
b2lkIHNldERlY29kaW5nKEF0b21TdHJpbmcmJik7CiAgICAgU3RyaW5nIGRlY29kaW5nKCkgY29u
c3Q7CiAKICAgICBEZWNvZGluZ01vZGUgZGVjb2RpbmdNb2RlKCkgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmlkbAppbmRleCAwMDY4MzFkMjE0OTg1NGYwYTk5NDhl
NTI2MjhjY2UxY2RiZDNmOWQ5Li5kMTkyYjExMTA4ZTQwN2FjZmQyOTA1OWMxM2RkMGM1ODQ0N2Rm
MjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5pZGwKQEAgLTQxLDcg
KzQxLDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjb21wbGV0ZTsKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgVVNWU3RyaW5nIGN1cnJlbnRTcmM7CiAgICAgW0NFUmVhY3Rpb25z
PU5vdE5lZWRlZCwgRW5hYmxlZEJ5U2V0dGluZz1SZWZlcnJlclBvbGljeUF0dHJpYnV0ZUVuYWJs
ZWQsIEltcGxlbWVudGVkQXM9cmVmZXJyZXJQb2xpY3lGb3JCaW5kaW5nc10gYXR0cmlidXRlIFtB
dG9tU3RyaW5nXSBET01TdHJpbmcgcmVmZXJyZXJQb2xpY3k7Ci0gICAgW0NFUmVhY3Rpb25zPU5v
dE5lZWRlZF0gYXR0cmlidXRlIERPTVN0cmluZyBkZWNvZGluZzsKKyAgICBbQ0VSZWFjdGlvbnM9
Tm90TmVlZGVkXSBhdHRyaWJ1dGUgW0F0b21TdHJpbmddIERPTVN0cmluZyBkZWNvZGluZzsKICAg
ICBbQ0VSZWFjdGlvbnMsIEVuYWJsZWRCeVNldHRpbmc9TGF6eUltYWdlTG9hZGluZ0VuYWJsZWQs
IEltcGxlbWVudGVkQXM9bG9hZGluZ0ZvckJpbmRpbmdzXSBhdHRyaWJ1dGUgW0F0b21TdHJpbmdd
IERPTVN0cmluZyBsb2FkaW5nOwogCiAgICAgUHJvbWlzZTx1bmRlZmluZWQ+IGRlY29kZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggODA3ZDIyOTRmNzBk
YmNkOTlkMzE5Njg0ZTY0YjVjYWFiMmVmYjQxNS4uNmZjZjRmZjQ4ZDBhZGZjYmM4NWM2YTc5MjQz
Y2EwMjQ1YjAxYmVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CkBAIC0xMzA1LDEyICsxMzA1LDEyIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxJbnB1dEVsZW1l
bnQ6OnNob3dQaWNrZXIoKQogICAgIHJldHVybiB7IH07CiB9CiAKLVN0cmluZyBIVE1MSW5wdXRF
bGVtZW50OjpkZWZhdWx0VmFsdWUoKSBjb25zdAorY29uc3QgQXRvbVN0cmluZyYgSFRNTElucHV0
RWxlbWVudDo6ZGVmYXVsdFZhbHVlKCkgY29uc3QKIHsKICAgICByZXR1cm4gYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbih2YWx1ZUF0dHIpOwogfQogCi12b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldERlZmF1bHRWYWx1ZShjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzZXREZWZhdWx0VmFsdWUoY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAg
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih2YWx1ZUF0dHIsIHZhbHVlKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggYWQ0Y2Y0ODQyNjVmNjk1
ZWE4NDA4YzE3MjY3YmM5M2M2NjAwMWM4Ny4uYzgwMzJiN2FkNGQxMjVmMzdmNTlkMjExZTVlOTQ0
MzdmNGJhZjc3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTIy
Myw4ICsyMjMsOCBAQCBwdWJsaWM6CiAKICAgICBpbnQgbWF4UmVzdWx0cygpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4UmVzdWx0czsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRlZmF1bHRW
YWx1ZSgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RGVmYXVsdFZhbHVlKGNv
bnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21TdHJpbmcmIGRlZmF1
bHRWYWx1ZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RGVmYXVsdFZhbHVl
KGNvbnN0IEF0b21TdHJpbmcmKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGFjY2VwdE1JTUVUeXBl
cygpOwogICAgIFZlY3RvcjxTdHJpbmc+IGFjY2VwdEZpbGVFeHRlbnNpb25zKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbAppbmRleCA0YmNmMmRjNmU5YTZjOWIxMjEw
YmE3MzVhYTY0MWMxMGFhYTc0ZmUyLi42MDBiYWNiMTcwM2NkYzBhMGY4NWM3MDM0ZjliODFkZTgy
NWEyMjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwKQEAgLTM1
LDggKzM1LDggQEAKICAgICBbSW1wbGVtZW50ZWRBcz1maWxlc0ZvckJpbmRpbmdzXSBhdHRyaWJ1
dGUgRmlsZUxpc3Q/IGZpbGVzOwogICAgIFtDRVJlYWN0aW9ucz1Ob3ROZWVkZWRdIGF0dHJpYnV0
ZSBVU1ZTdHJpbmcgZm9ybUFjdGlvbjsKIAotICAgIFtDRVJlYWN0aW9ucz1Ob3ROZWVkZWRdIGF0
dHJpYnV0ZSBET01TdHJpbmcgZm9ybUVuY3R5cGU7Ci0gICAgW0NFUmVhY3Rpb25zPU5vdE5lZWRl
ZF0gYXR0cmlidXRlIERPTVN0cmluZyBmb3JtTWV0aG9kOworICAgIFtDRVJlYWN0aW9ucz1Ob3RO
ZWVkZWRdIGF0dHJpYnV0ZSBbQXRvbVN0cmluZ10gRE9NU3RyaW5nIGZvcm1FbmN0eXBlOworICAg
IFtDRVJlYWN0aW9ucz1Ob3ROZWVkZWRdIGF0dHJpYnV0ZSBbQXRvbVN0cmluZ10gRE9NU3RyaW5n
IGZvcm1NZXRob2Q7CiAKICAgICBbQ0VSZWFjdGlvbnM9Tm90TmVlZGVkLCBSZWZsZWN0XSBhdHRy
aWJ1dGUgYm9vbGVhbiBmb3JtTm9WYWxpZGF0ZTsKICAgICBbQ0VSZWFjdGlvbnM9Tm90TmVlZGVk
LCBSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZvcm1UYXJnZXQ7CkBAIC01Nyw3ICs1Nyw3
IEBACiAgICAgW0NFUmVhY3Rpb25zPU5vdE5lZWRlZCwgUmVmbGVjdCwgVVJMXSBhdHRyaWJ1dGUg
VVNWU3RyaW5nIHNyYzsKICAgICBbQ0VSZWFjdGlvbnM9Tm90TmVlZGVkLCBSZWZsZWN0XSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHN0ZXA7CiAgICAgW0NFUmVhY3Rpb25zPU5vdE5lZWRlZF0gYXR0cmli
dXRlIFtBdG9tU3RyaW5nXSBET01TdHJpbmcgdHlwZTsKLSAgICBbQ0VSZWFjdGlvbnM9Tm90TmVl
ZGVkXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRlZmF1bHRWYWx1ZTsKKyAgICBbQ0VSZWFjdGlvbnM9
Tm90TmVlZGVkXSBhdHRyaWJ1dGUgW0F0b21TdHJpbmddIERPTVN0cmluZyBkZWZhdWx0VmFsdWU7
CiAgICAgLy8gU2VlIHRoZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDAwODUKICAgICBbQ0VSZWFjdGlvbnM9Tm90TmVlZGVkXSBhdHRyaWJ1
dGUgW0xlZ2FjeU51bGxUb0VtcHR5U3RyaW5nXSBET01TdHJpbmcgdmFsdWU7CiAgICAgYXR0cmli
dXRlIERhdGU/IHZhbHVlQXNEYXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MT3B0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVt
ZW50LmNwcAppbmRleCBkMTU5OTk0ZGQzNTdmZGQ1YzczZDlhMzA5Mzk0MDNmMzk0NDNiYTllLi5j
MDE3MzMzNzg4NmZiNzljZTJiYzc5OWYzMGZiNDhhNjRkMGFhNDk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcApAQCAtNzAsNyArNzAsNyBAQCBSZWY8SFRNTE9w
dGlvbkVsZW1lbnQ+IEhUTUxPcHRpb25FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhUTUxPcHRpb25FbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxIVE1MT3B0aW9uRWxl
bWVudD4+IEhUTUxPcHRpb25FbGVtZW50OjpjcmVhdGVGb3JMZWdhY3lGYWN0b3J5RnVuY3Rpb24o
RG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIGJvb2wgZGVmYXVsdFNlbGVjdGVkLCBib29sIHNlbGVjdGVkKQorRXhjZXB0aW9uT3I8UmVm
PEhUTUxPcHRpb25FbGVtZW50Pj4gSFRNTE9wdGlvbkVsZW1lbnQ6OmNyZWF0ZUZvckxlZ2FjeUZh
Y3RvcnlGdW5jdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgQXRvbVN0cmluZyYgdmFsdWUsIGJvb2wgZGVmYXVsdFNlbGVjdGVkLCBib29sIHNlbGVjdGVk
KQogewogICAgIGF1dG8gZWxlbWVudCA9IGNyZWF0ZShkb2N1bWVudCk7CiAKQEAgLTIwNSw3ICsy
MDUsNyBAQCBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKICAgICByZXR1
cm4gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGNvbGxlY3RPcHRpb25Jbm5lclRl
eHQoKSkuc2ltcGxpZnlXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKTsKIH0KIAotdm9pZCBIVE1MT3B0
aW9uRWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTE9wdGlv
bkVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odmFsdWVBdHRyLCB2YWx1ZSk7CiB9CkBAIC0y
ODMsNyArMjgzLDcgQEAgU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50OjpkaXNwbGF5TGFiZWwoKSBj
b25zdAogICAgIHJldHVybiBsYWJlbCgpOwogfQogCi12b2lkIEhUTUxPcHRpb25FbGVtZW50Ojpz
ZXRMYWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKQordm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0
TGFiZWwoY29uc3QgQXRvbVN0cmluZyYgbGFiZWwpCiB7CiAgICAgc2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihsYWJlbEF0dHIsIGxhYmVsKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9wdGlvbkVsZW1lbnQuaAppbmRleCA2YWY0OWYzYzNjNzk4MWRmMmUwOWZjZmIwZmZmMDgy
ZWFmNmI1M2NjLi42ZTBiZjVjNzg3NjMyYWYwOTQ1NzhkOGI5N2ZlZjkwOGMzYzJmMWI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCkBAIC0zNyw3ICszNyw3IEBAIGNs
YXNzIEhUTUxPcHRpb25FbGVtZW50IGZpbmFsIDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPEhUTUxPcHRpb25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsK
ICAgICBzdGF0aWMgUmVmPEhUTUxPcHRpb25FbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Jik7Ci0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxIVE1MT3B0aW9u
RWxlbWVudD4+IGNyZWF0ZUZvckxlZ2FjeUZhY3RvcnlGdW5jdGlvbihEb2N1bWVudCYsIGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBkZWZhdWx0U2VsZWN0ZWQs
IGJvb2wgc2VsZWN0ZWQpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SFRNTE9wdGlvbkVs
ZW1lbnQ+PiBjcmVhdGVGb3JMZWdhY3lGYWN0b3J5RnVuY3Rpb24oRG9jdW1lbnQmLCBjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlLCBib29sIGRlZmF1bHRTZWxlY3Rl
ZCwgYm9vbCBzZWxlY3RlZCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdGV4dCgpIGNv
bnN0OwogICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmKTsKQEAgLTQ1LDcgKzQ1LDcgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGludCBpbmRleCgpIGNvbnN0OwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZh
bHVlKGNvbnN0IEF0b21TdHJpbmcmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2VsZWN0
ZWQoQWxsb3dTdHlsZUludmFsaWRhdGlvbiA9IEFsbG93U3R5bGVJbnZhbGlkYXRpb246Olllcykg
Y29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTZWxlY3RlZChib29sKTsKQEAgLTU0
LDcgKzU0LDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGxhYmVsKCkg
Y29uc3Q7CiAgICAgU3RyaW5nIGRpc3BsYXlMYWJlbCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0TGFiZWwoY29uc3QgU3RyaW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRMYWJlbChjb25zdCBBdG9tU3RyaW5nJik7CiAKICAgICBib29sIG93bkVsZW1lbnREaXNh
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25FbGVtZW50LmlkbAppbmRleCAzNzViZmJkZWMxNTVmNGZkNjI0M2ZhYWZiNzNj
M2RmNjg1NTE4Yzg4Li4xYTVkNjk3ZDQwYmJiNWJmZmQ2M2E1NjRhMzBmMWQ3OGE4MTA5ZWMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmlkbApAQCAtMjIsMTQgKzIy
LDE0IEBACiAgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAogICAgIEV4cG9zZWQ9V2luZG93
LAogICAgIExlZ2FjeUZhY3RvcnlGdW5jdGlvbkNhbGxXaXRoPUN1cnJlbnREb2N1bWVudCwKLSAg
ICBMZWdhY3lGYWN0b3J5RnVuY3Rpb249T3B0aW9uKG9wdGlvbmFsIERPTVN0cmluZyB0ZXh0ID0g
IiIsIG9wdGlvbmFsIERPTVN0cmluZyB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBkZWZhdWx0U2Vs
ZWN0ZWQgPSBmYWxzZSwgb3B0aW9uYWwgYm9vbGVhbiBzZWxlY3RlZCA9IGZhbHNlKSwKKyAgICBM
ZWdhY3lGYWN0b3J5RnVuY3Rpb249T3B0aW9uKG9wdGlvbmFsIERPTVN0cmluZyB0ZXh0ID0gIiIs
IG9wdGlvbmFsIFtBdG9tU3RyaW5nXSBET01TdHJpbmcgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4g
ZGVmYXVsdFNlbGVjdGVkID0gZmFsc2UsIG9wdGlvbmFsIGJvb2xlYW4gc2VsZWN0ZWQgPSBmYWxz
ZSksCiBdIGludGVyZmFjZSBIVE1MT3B0aW9uRWxlbWVudCA6IEhUTUxFbGVtZW50IHsKICAgICBb
Q0VSZWFjdGlvbnM9Tm90TmVlZGVkLCBSZWZsZWN0XSBhdHRyaWJ1dGUgYm9vbGVhbiBkaXNhYmxl
ZDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTEZvcm1FbGVtZW50IGZvcm07Ci0gICAgW0NF
UmVhY3Rpb25zPU5vdE5lZWRlZF0gYXR0cmlidXRlIERPTVN0cmluZyBsYWJlbDsKKyAgICBbQ0VS
ZWFjdGlvbnM9Tm90TmVlZGVkXSBhdHRyaWJ1dGUgW0F0b21TdHJpbmddIERPTVN0cmluZyBsYWJl
bDsKICAgICBbQ0VSZWFjdGlvbnM9Tm90TmVlZGVkLCBSZWZsZWN0PXNlbGVjdGVkXSBhdHRyaWJ1
dGUgYm9vbGVhbiBkZWZhdWx0U2VsZWN0ZWQ7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4gc2VsZWN0
ZWQ7Ci0gICAgW0NFUmVhY3Rpb25zPU5vdE5lZWRlZF0gYXR0cmlidXRlIERPTVN0cmluZyB2YWx1
ZTsKKyAgICBbQ0VSZWFjdGlvbnM9Tm90TmVlZGVkXSBhdHRyaWJ1dGUgW0F0b21TdHJpbmddIERP
TVN0cmluZyB2YWx1ZTsKIAogICAgIFtDRVJlYWN0aW9ucz1Ob3ROZWVkZWQsIENFUmVhY3Rpb25z
XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRleHQ7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcg
aW5kZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZU5hbWVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlTmFtZXMuY3BwCmluZGV4IDIyNzA3ZWQx
NDlhOTZhMmE2MGQ1NjU4ZDc5MGE4M2VjNTk1MmZiZDMuLjQ4Y2YyZTUyNzQxMTRhNTQ1N2I5MTc5
MjM0OTMzNzhkZGJkNGYwZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRU
eXBlTmFtZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlTmFtZXMuY3Bw
CkBAIC0zMyw4ICszMyw3IEBAIG5hbWVzcGFjZSBJbnB1dFR5cGVOYW1lcyB7CiAKIGNvbnN0IEF0
b21TdHJpbmcmIGJ1dHRvbigpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBuYW1lKCJidXR0b24iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIG5hbWU7CisgICAgcmV0dXJuIEhUTUxOYW1lczo6YnV0
dG9uVGFnLT5sb2NhbE5hbWUoKTsKIH0KIAogY29uc3QgQXRvbVN0cmluZyYgY2hlY2tib3goKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IDAxYjc0Zjcy
NzIyYjA2MjI1YTI2NmE0MjQzYWFjYWJhMDExMDZkM2MuLjMyNTM4ZDFhZjQ4OTk0MGY3YjkyMzBh
MmZiMGQ0Nzk4NDkzMDM1ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZp
ZWxkSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0
VHlwZS5jcHAKQEAgLTgzNSwxMSArODM1LDEwIEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpj
cmVhdGVBdXRvRmlsbEJ1dHRvbihBdXRvRmlsbEJ1dHRvblR5cGUgYXV0b0ZpbGxCdXR0b25UCiAg
ICAgaWYgKGF1dG9GaWxsQnV0dG9uVHlwZSA9PSBBdXRvRmlsbEJ1dHRvblR5cGU6Ok5vbmUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gYnV0dG9uTmFtZSgiYnV0dG9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogICAgIEFTU0VSVChlbGVtZW50KCkpOwogICAgIG1fYXV0b0ZpbGxCdXR0
b24gPSBBdXRvRmlsbEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCktPmRvY3VtZW50KCks
ICp0aGlzKTsKICAgICBtX2F1dG9GaWxsQnV0dG9uLT5zZXRQc2V1ZG8oYXV0b0ZpbGxCdXR0b25U
eXBlVG9BdXRvRmlsbEJ1dHRvblBzZXVkb0NsYXNzTmFtZShhdXRvRmlsbEJ1dHRvblR5cGUpKTsK
LSAgICBtX2F1dG9GaWxsQnV0dG9uLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KHJvbGVBdHRyLCBidXR0b25OYW1lKTsKKyAgICBtX2F1dG9GaWxsQnV0dG9uLT5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHJvbGVBdHRyLCBIVE1MTmFtZXM6OmJ1dHRvblRhZy0+
bG9jYWxOYW1lKCkpOwogICAgIG1fYXV0b0ZpbGxCdXR0b24tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oYXJpYV9sYWJlbEF0dHIsIGF1dG9GaWxsQnV0dG9uVHlwZVRvQWNjZXNz
aWJpbGl0eUxhYmVsKGF1dG9GaWxsQnV0dG9uVHlwZSkpOwogICAgIG1fYXV0b0ZpbGxCdXR0b24t
PnNldFRleHRDb250ZW50KGF1dG9GaWxsQnV0dG9uVHlwZVRvQXV0b0ZpbGxCdXR0b25UZXh0KGF1
dG9GaWxsQnV0dG9uVHlwZSkpOwogICAgIG1fY29udGFpbmVyLT5hcHBlbmRDaGlsZCgqbV9hdXRv
RmlsbEJ1dHRvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0
Q29udHJvbElubmVyRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAppbmRleCBjMGU4ZmVlNTAzZmU3ZWZjMjNmM2M4ZDZi
NDcyYjU1NDM2MmM3YzM1Li5hMmM5NjMyMTg4NTUxYzBkYTI2YzljM2ZjNTZkOGU1MmZhNjVjYzI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9s
SW5uZXJFbGVtZW50cy5jcHAKQEAgLTI5NywxMiArMjk3LDExIEBAIFJlZjxTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvbkVsZW1lbnQ+IFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KERvY3VtCiB7CiAgICAgYXV0byBlbGVtZW50ID0gYWRvcHRSZWYoKm5ldyBTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKIAotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gYnV0dG9uTmFtZSgiYnV0dG9uIiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIGVsZW1lbnQtPnNldFBzZXVkbyhTaGFk
b3dQc2V1ZG9JZHM6OndlYmtpdFNlYXJjaENhbmNlbEJ1dHRvbigpKTsKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKGFyaWFfbGFiZWxBdHRyLCBBWFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uVGV4dCgpKTsKICNl
bmRpZgotICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocm9s
ZUF0dHIsIGJ1dHRvbk5hbWUpOworICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24ocm9sZUF0dHIsIEhUTUxOYW1lczo6YnV0dG9uVGFnLT5sb2NhbE5hbWUoKSk7
CiAgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCBjODZmZTU5ZTMw
NDA0Y2Q5NTllMDhhZWFlZDY0MDU1OGE4YWJjNTZlLi44NTZmZjM3NGYzNjczMzJjYTVhYjEwYTQ2
YmZmODI1YjhiY2IxNTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCkBAIC0xMjQsNyArMTI0LDcgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5pdCgpOwogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgLy8gQ3JlYXRlcyA8aHRtbD48Ym9keSBzdHlsZT0iLi4uIj48L2JvZHk+PC9o
dG1sPiBkb2luZyBtaW5pbWFsIGFtb3VudCBvZiB3b3JrLgotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgaW5pdFdpdGhTaW1wbGVIVE1MRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBzdHlsZSwgY29uc3Qg
VVJMJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbml0V2l0aFNpbXBsZUhUTUxEb2N1bWVu
dChjb25zdCBBdG9tU3RyaW5nJiBzdHlsZSwgY29uc3QgVVJMJik7CiAjZW5kaWYKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFZpZXcoUmVmUHRyPEZyYW1lVmlldz4mJik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBjcmVhdGVWaWV3KGNvbnN0IEludFNpemUmLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPENvbG9yPiYgYmFja2dyb3VuZENvbG9yLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bQppbmRleCA0ZWZiMzg2M2ZlODNjNDdlMDNlZmMwNWIyYmFkM2FmMWRkNDhiNmUyLi44YTY2NTM2
NDI2OGViYmUzNmM5YzIyYjAzY2IwN2FkYjFkMmY4YzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9G
cmFtZUlPUy5tbQpAQCAtODAsNyArODAsNyBAQCB1c2luZyBKU0M6OkpTTG9ja0hvbGRlcjsKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQ3JlYXRlIDxodG1sPjxib2R5IChzdHlsZT0iLi4uIik+
PC9ib2R5PjwvaHRtbD4gZG9pbmcgbWluaW1hbCBhbW91bnQgb2Ygd29yay4KLXZvaWQgRnJhbWU6
OmluaXRXaXRoU2ltcGxlSFRNTERvY3VtZW50KGNvbnN0IFN0cmluZyYgc3R5bGUsIGNvbnN0IFVS
TCYgdXJsKQordm9pZCBGcmFtZTo6aW5pdFdpdGhTaW1wbGVIVE1MRG9jdW1lbnQoY29uc3QgQXRv
bVN0cmluZyYgc3R5bGUsIGNvbnN0IFVSTCYgdXJsKQogewogICAgIG1fbG9hZGVyLT5pbml0Rm9y
U3ludGhlc2l6ZWREb2N1bWVudCh1cmwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGVuZ3RoVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVl
LmNwcAppbmRleCAzOTA2MTMzMmNjMmZlYTY5YTJlOWI5NGE1ZTk0OTAwMGQ2OThiZDg3Li5iNTY4
ZTYyMmQyMzBmNjczNDRhOGRkZTQyYmY1ZWQyMDFlZjRlNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMZW5ndGhWYWx1ZS5jcHAKQEAgLTI2OSw2ICsyNjksMTMgQEAgU3RyaW5nIFNWR0xlbmd0aFZh
bHVlOjp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKICAgICByZXR1cm4gbWFrZVN0cmluZyhtX3ZhbHVl
SW5TcGVjaWZpZWRVbml0cywgbGVuZ3RoVHlwZVRvU3RyaW5nKG1fbGVuZ3RoVHlwZSkpOwogfQog
CitBdG9tU3RyaW5nIFNWR0xlbmd0aFZhbHVlOjp2YWx1ZUFzQXRvbVN0cmluZygpIGNvbnN0Cit7
CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKG1fdmFsdWVJ
blNwZWNpZmllZFVuaXRzLCBsZW5ndGhUeXBlVG9TdHJpbmcobV9sZW5ndGhUeXBlKSk7CisgICAg
cmV0dXJuIGJ1aWxkZXIudG9BdG9tU3RyaW5nKCk7Cit9CisKIEV4Y2VwdGlvbk9yPGZsb2F0PiBT
VkdMZW5ndGhWYWx1ZTo6dmFsdWVGb3JCaW5kaW5ncyhjb25zdCBTVkdMZW5ndGhDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIHJldHVybiBjb250ZXh0LmNvbnZlcnRWYWx1ZVRvVXNlclVu
aXRzKG1fdmFsdWVJblNwZWNpZmllZFVuaXRzLCBtX2xlbmd0aFR5cGUsIG1fbGVuZ3RoTW9kZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5oCmluZGV4IDQ0OGI5NGZjNjU4ODQ0MTQ0ZWU4
YzM0OGUxNmVlNmY0Y2ExY2E4YzMuLmVmZDFmOWQ5MzhmM2ZlMGUwZDhiZmU0NTk1MmNlZGM3YWQ4
MjlhMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5oCkBAIC04MCw2ICs4MCw3IEBA
IHB1YmxpYzoKICAgICBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0czsgfQogICAgIAogICAgIFN0cmluZyB2YWx1ZUFzU3Ry
aW5nKCkgY29uc3Q7CisgICAgQXRvbVN0cmluZyB2YWx1ZUFzQXRvbVN0cmluZygpIGNvbnN0Owog
ICAgIEV4Y2VwdGlvbk9yPGZsb2F0PiB2YWx1ZUZvckJpbmRpbmdzKGNvbnN0IFNWR0xlbmd0aENv
bnRleHQmKSBjb25zdDsKIAogICAgIHZvaWQgc2V0VmFsdWVJblNwZWNpZmllZFVuaXRzKGZsb2F0
IHZhbHVlKSB7IG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gdmFsdWU7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAppbmRleCA5OTQ4ZjE5ODc3MzgyNWM5MGM2ZTAxZmI4
M2YzYmIwMWU4ZmY5NzcxLi4wOTZlZDA5ZGFjMGRhMDE2NDViY2YyZTk2Yzg5MjRlMDExNDI4MTVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCkBAIC0xMjAsMTIgKzEy
MCwxMiBAQCB2b2lkIFNWR01hcmtlckVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGls
ZENoYW5nZSYgY2hhbmdlKQogICAgIHNldFNWR1Jlc291cmNlc0luQW5jZXN0b3JDaGFpbkFyZURp
cnR5KCk7CiB9CiAKLVN0cmluZyBTVkdNYXJrZXJFbGVtZW50OjpvcmllbnQoKSBjb25zdAorQXRv
bVN0cmluZyBTVkdNYXJrZXJFbGVtZW50OjpvcmllbnQoKSBjb25zdAogewogICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6Om9yaWVudEF0dHIpOwogfQogCi12b2lkIFNWR01hcmtlckVs
ZW1lbnQ6OnNldE9yaWVudChjb25zdCBTdHJpbmcmIG9yaWVudCkKK3ZvaWQgU1ZHTWFya2VyRWxl
bWVudDo6c2V0T3JpZW50KGNvbnN0IEF0b21TdHJpbmcmIG9yaWVudCkKIHsKICAgICBzZXRBdHRy
aWJ1dGUoU1ZHTmFtZXM6Om9yaWVudEF0dHIsIG9yaWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R01hcmtlckVsZW1lbnQuaAppbmRleCBlMWY3ZWU5YWM0NzFhYTRmNjgwZmI1NGMyNDNhZmQwNzcz
NzI3NWRiLi5hYTczYjNhNTFkOWNhMjIyY2EwZjI2NWYxMTlkYmRlZTgzYjQ5OTgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgKQEAgLTYzLDggKzYzLDggQEAgcHVibGljOgog
ICAgIFNWR0FuaW1hdGVkQW5nbGUmIG9yaWVudEFuZ2xlQW5pbWF0ZWQoKSB7IHJldHVybiBtX29y
aWVudEFuZ2xlOyB9CiAgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG9yaWVudFR5cGVB
bmltYXRlZCgpIHsgcmV0dXJuIG1fb3JpZW50VHlwZS5jb3B5UmVmKCk7IH0KIAotICAgIFN0cmlu
ZyBvcmllbnQoKSBjb25zdDsKLSAgICB2b2lkIHNldE9yaWVudChjb25zdCBTdHJpbmcmKTsKKyAg
ICBBdG9tU3RyaW5nIG9yaWVudCgpIGNvbnN0OworICAgIHZvaWQgc2V0T3JpZW50KGNvbnN0IEF0
b21TdHJpbmcmKTsKIAogICAgIHZvaWQgc2V0T3JpZW50VG9BdXRvKCk7CiAgICAgdm9pZCBzZXRP
cmllbnRUb0FuZ2xlKGNvbnN0IFNWR0FuZ2xlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2Vy
RWxlbWVudC5pZGwKaW5kZXggYjY2NDAwYzJlOTczZmE5NGU1ZDQwMmM3OTlmZGNmNGJkM2QzZDNl
MC4uZGM3OWFiNjM5ZmJlNDBlZjQyMDM0ZDRhYWRiZmZmMWZlMTIwMDMwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmlkbApAQCAtNDQsNyArNDQsNyBAQAogICAgIFtTYW1l
T2JqZWN0XSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcmllbnRU
eXBlOwogICAgIFtTYW1lT2JqZWN0XSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRBbmds
ZSAgICAgICBvcmllbnRBbmdsZTsKIAotICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgb3JpZW50Owor
ICAgIGF0dHJpYnV0ZSBbQXRvbVN0cmluZ10gRE9NU3RyaW5nIG9yaWVudDsKIAogICAgIHVuZGVm
aW5lZCBzZXRPcmllbnRUb0F1dG8oKTsKICAgICB1bmRlZmluZWQgc2V0T3JpZW50VG9BbmdsZShT
VkdBbmdsZSBhbmdsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKaW5kZXggNmU1
YzdjNzRjOGU3Y2NlN2Q5ODM3NThhZGQ0NTJiZmVmYTRhMDE5Zi4uMzljNWE3ZDFhYmY0NmI3NWZk
ZWRjNTcyYzUwMjM3MjFhNWVkNjA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1VzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNw
cApAQCAtMTQzLDE0ICsxNDMsMTQgQEAgdm9pZCBTVkdVc2VFbGVtZW50Ojp0cmFuc2ZlclNpemVB
dHRyaWJ1dGVzVG9UYXJnZXRDbG9uZShTVkdFbGVtZW50JiBzaGFkb3dFbGVtZW4KICAgICAgICAg
Ly8gSWYgYXR0cmlidXRlcyB3aWR0aCBhbmQvb3IgaGVpZ2h0IGFyZSBwcm92aWRlZCBvbiB0aGUg
J3VzZScgZWxlbWVudCwgdGhlbiB0aGVzZSBhdHRyaWJ1dGVzCiAgICAgICAgIC8vIHdpbGwgYmUg
dHJhbnNmZXJyZWQgdG8gdGhlIGdlbmVyYXRlZCAnc3ZnJy4gSWYgYXR0cmlidXRlcyB3aWR0aCBh
bmQvb3IgaGVpZ2h0IGFyZSBub3Qgc3BlY2lmaWVkLAogICAgICAgICAvLyB0aGUgZ2VuZXJhdGVk
ICdzdmcnIGVsZW1lbnQgd2lsbCB1c2UgdmFsdWVzIG9mIDEwMCUgZm9yIHRoZXNlIGF0dHJpYnV0
ZXMuCi0gICAgICAgIHNoYWRvd0VsZW1lbnQuc2V0QXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0
dHIsIHdpZHRoKCkudmFsdWVJblNwZWNpZmllZFVuaXRzKCkgPyBBdG9tU3RyaW5nKHdpZHRoKCku
dmFsdWVBc1N0cmluZygpKSA6ICIxMDAlIl9zKTsKLSAgICAgICAgc2hhZG93RWxlbWVudC5zZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIsIGhlaWdodCgpLnZhbHVlSW5TcGVjaWZpZWRV
bml0cygpID8gQXRvbVN0cmluZyhoZWlnaHQoKS52YWx1ZUFzU3RyaW5nKCkpIDogIjEwMCUiX3Mp
OworICAgICAgICBzaGFkb3dFbGVtZW50LnNldEF0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRy
LCB3aWR0aCgpLnZhbHVlSW5TcGVjaWZpZWRVbml0cygpID8gd2lkdGgoKS52YWx1ZUFzQXRvbVN0
cmluZygpIDogIjEwMCUiX3MpOworICAgICAgICBzaGFkb3dFbGVtZW50LnNldEF0dHJpYnV0ZShT
VkdOYW1lczo6aGVpZ2h0QXR0ciwgaGVpZ2h0KCkudmFsdWVJblNwZWNpZmllZFVuaXRzKCkgPyBo
ZWlnaHQoKS52YWx1ZUFzQXRvbVN0cmluZygpIDogIjEwMCUiX3MpOwogICAgIH0gZWxzZSBpZiAo
aXM8U1ZHU1ZHRWxlbWVudD4oc2hhZG93RWxlbWVudCkpIHsKICAgICAgICAgLy8gU3BlYyAoPHVz
ZT4gb24gPHN2Zz4pOiBJZiBhdHRyaWJ1dGVzIHdpZHRoIGFuZC9vciBoZWlnaHQgYXJlIHByb3Zp
ZGVkIG9uIHRoZSAndXNlJyBlbGVtZW50LCB0aGVuIHRoZXNlCiAgICAgICAgIC8vIHZhbHVlcyB3
aWxsIG92ZXJyaWRlIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZXMgb24gdGhlICdzdmcnIGlu
IHRoZSBnZW5lcmF0ZWQgdHJlZS4KICAgICAgICAgUmVmUHRyIGNvcnJlc3BvbmRpbmdFbGVtZW50
ID0gc2hhZG93RWxlbWVudC5jb3JyZXNwb25kaW5nRWxlbWVudCgpOwotICAgICAgICBzaGFkb3dF
bGVtZW50LnNldEF0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyLCB3aWR0aCgpLnZhbHVlSW5T
cGVjaWZpZWRVbml0cygpID8gQXRvbVN0cmluZyh3aWR0aCgpLnZhbHVlQXNTdHJpbmcoKSkgOiAo
Y29ycmVzcG9uZGluZ0VsZW1lbnQgPyBjb3JyZXNwb25kaW5nRWxlbWVudC0+Z2V0QXR0cmlidXRl
KFNWR05hbWVzOjp3aWR0aEF0dHIpIDogbnVsbEF0b20oKSkpOwotICAgICAgICBzaGFkb3dFbGVt
ZW50LnNldEF0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0ciwgaGVpZ2h0KCkudmFsdWVJblNw
ZWNpZmllZFVuaXRzKCkgPyBBdG9tU3RyaW5nKGhlaWdodCgpLnZhbHVlQXNTdHJpbmcoKSkgOiAo
Y29ycmVzcG9uZGluZ0VsZW1lbnQgPyBjb3JyZXNwb25kaW5nRWxlbWVudC0+Z2V0QXR0cmlidXRl
KFNWR05hbWVzOjpoZWlnaHRBdHRyKSA6IG51bGxBdG9tKCkpKTsKKyAgICAgICAgc2hhZG93RWxl
bWVudC5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0ciwgd2lkdGgoKS52YWx1ZUluU3Bl
Y2lmaWVkVW5pdHMoKSA/IHdpZHRoKCkudmFsdWVBc0F0b21TdHJpbmcoKSA6IChjb3JyZXNwb25k
aW5nRWxlbWVudCA/IGNvcnJlc3BvbmRpbmdFbGVtZW50LT5nZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6
OndpZHRoQXR0cikgOiBudWxsQXRvbSgpKSk7CisgICAgICAgIHNoYWRvd0VsZW1lbnQuc2V0QXR0
cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyLCBoZWlnaHQoKS52YWx1ZUluU3BlY2lmaWVkVW5p
dHMoKSA/IGhlaWdodCgpLnZhbHVlQXNBdG9tU3RyaW5nKCkgOiAoY29ycmVzcG9uZGluZ0VsZW1l
bnQgPyBjb3JyZXNwb25kaW5nRWxlbWVudC0+Z2V0QXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRB
dHRyKSA6IG51bGxBdG9tKCkpKTsKICAgICB9CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>