<?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>120204</bug_id>
          
          <creation_ts>2013-08-23 04:19:57 -0700</creation_ts>
          <short_desc>Tighten before/after pseudo element accessors</short_desc>
          <delta_ts>2013-08-24 04:15:11 -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>DOM</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>920173</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-23 04:19:57 -0700</bug_when>
    <thetext>We have generic looking Element::pseudoElement(PseudoID) which only returns before/after pseudo elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920177</commentid>
    <comment_count>1</comment_count>
      <attachid>209448</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-23 04:33:13 -0700</bug_when>
    <thetext>Created attachment 209448
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920197</commentid>
    <comment_count>2</comment_count>
      <attachid>209448</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-23 05:34:33 -0700</bug_when>
    <thetext>Comment on attachment 209448
patch

Attachment 209448 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1528576</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920543</commentid>
    <comment_count>3</comment_count>
      <attachid>209534</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-24 00:14:10 -0700</bug_when>
    <thetext>Created attachment 209534
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920555</commentid>
    <comment_count>4</comment_count>
      <attachid>209534</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-24 01:27:48 -0700</bug_when>
    <thetext>Comment on attachment 209534
another

Attachment 209534 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1529786</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920561</commentid>
    <comment_count>5</comment_count>
      <attachid>209534</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-24 02:46:59 -0700</bug_when>
    <thetext>Comment on attachment 209534
another

Attachment 209534 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1557420</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920563</commentid>
    <comment_count>6</comment_count>
      <attachid>209534</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-08-24 03:51:28 -0700</bug_when>
    <thetext>Comment on attachment 209534
another

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

r=me

&gt; Source/WebCore/dom/Element.cpp:2069
&gt; +    if (pseudoElementSpecifier != BEFORE &amp;&amp; pseudoElementSpecifier != AFTER)
&gt; +        return 0;
&gt; +    return pseudoElementSpecifier == BEFORE ? host-&gt;beforePseudoElement() : host-&gt;afterPseudoElement();

This might look better as a switch.

&gt; Source/WebCore/dom/Element.cpp:2310
&gt; +bool Element::updateExistingPseudoElement(PseudoElement* existing, Style::Change change)

existing -&gt; existingPseudoElement?

&gt; Source/WebCore/dom/Element.cpp:2341
&gt; +    if (PseudoElement* existing = beforePseudoElement()) {

existing -&gt; existingPseudoElement?

&gt; Source/WebCore/dom/Element.cpp:2352
&gt; +    if (PseudoElement* existing = afterPseudoElement()) {

existing -&gt; existingPseudoElement?

&gt; Source/WebCore/dom/Element.cpp:2396
&gt; +    if (!hasRareData())
&gt; +        return;

This could be an assertion instead, if we moved the two clearFooPseudoElement() calls in clearStyleDerived... after the hasRareData check.

&gt; Source/WebCore/dom/Element.cpp:2404
&gt; +    if (!hasRareData())
&gt; +        return;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920576</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-24 04:15:11 -0700</bug_when>
    <thetext>https://trac.webkit.org/r154541</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209448</attachid>
            <date>2013-08-23 04:33:13 -0700</date>
            <delta_ts>2013-08-24 00:14:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pseudo-cleanup-2.patch</filename>
            <type>text/plain</type>
            <size>24681</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDEzLTA4LTIzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBUaWdodGVuIGJlZm9yZS9hZnRl
ciBwc2V1ZG8gZWxlbWVudCBhY2Nlc3NvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMDIwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlIGhhdmUgZ2VuZXJpYyBsb29raW5nIEVsZW1lbnQ6OnBzZXVk
b0VsZW1lbnQoUHNldWRvSUQpIHdoaWNoIG9ubHkgcmV0dXJucyBiZWZvcmUvYWZ0ZXIgcHNldWRv
IGVsZW1lbnRzLgorICAgICAgICAKKyAgICAgICAgU3dpdGNoIHRvIEVsZW1lbnQ6OmJlZm9yZS9h
ZnRlclBzZXVkb0VsZW1lbnQoKSwgc2ltaWxhcmx5IGZvciBzZXR0ZXJzLgorCisgICAgICAgICog
V2ViQ29yZS5leHAuaW46CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpzdHlsZWRO
b2RlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojp+RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpiZWZvcmVPckFmdGVyUHNldWRlb0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y29tcHV0ZWRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OmNyZWF0ZVBzZXVkb0VsZW1lbnRJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVCZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUFmdGVyUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpiZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OmFmdGVyUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRCZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEFm
dGVyUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpkaXNjb25uZWN0UHNldWRvRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbGVhckJlZm9yZVBzZXVkb0VsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xlYXJBZnRlclBzZXVkb0VsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xlYXJTdHlsZURlcml2ZWREYXRhQmVmb3Jl
RGV0YWNoaW5nUmVuZGVyZXIpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICog
ZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRh
OjpiZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0
YTo6YWZ0ZXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0
YTo6aGFzUHNldWRvRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRh
Ojp+RWxlbWVudFJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6
Y2xlYXJCZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJl
RGF0YTo6Y2xlYXJBZnRlclBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dFJhcmVEYXRhOjpzZXRCZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRSYXJlRGF0YTo6c2V0QWZ0ZXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgCisgICAgICAg
ICAgICBNb3ZlIGRldGFjaCBsb2dpYyB0byBFbGVtZW50LiBFbGVtZW50UmFyZURhdGEgc2hvdWxk
IG5vdCBpbXBsZW1lbnQgc2VtYW50aWNzLgorCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6cHNldWRvQXdhcmVOZXh0U2libGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpwc2V1ZG9Bd2FyZUZpcnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6cHNldWRvQXdhcmVMYXN0Q2hpbGQpOgorICAgICAgICAqIGRvbS9Ob2RlUmVuZGVyaW5nVHJh
dmVyc2FsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6Om5l
eHRTaWJsaW5nU2xvdyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmVuZGVyaW5nVHJhdmVyc2Fs
OjpwcmV2aW91c1NpYmxpbmdTbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUNvdW50ZXJWYWx1ZXNGcm9tQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRlclZhbHVlRm9yRWxlbWVudCk6CisgICAgICAg
ICogc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
YXR0YWNoUmVuZGVyVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZVRyZWUp
OgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQp
OgorCiAyMDEzLTA4LTIzICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBNaXNzaW5nIG51bGwtY2hlY2sgaW4gSFRNTEZvcm1FbGVtZW50OjpyZW5kZXJlcklzTmVl
ZGVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNTQ0NjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTY0MCw3ICsxNjQw
LDggQEAgX19aTks3V2ViQ29yZTdFbGVtZW50MTBzaGFkb3dSb290RXYKIF9fWk5LN1dlYkNvcmU3
RWxlbWVudDEyZ2V0QXR0cmlidXRlRVJLTjNXVEYxMkF0b21pY1N0cmluZ0UKIF9fWk5LN1dlYkNv
cmU3RWxlbWVudDEyZ2V0QXR0cmlidXRlRVJLTlNfMTNRdWFsaWZpZWROYW1lRQogX19aTks3V2Vi
Q29yZTdFbGVtZW50MTJoYXNBdHRyaWJ1dGVFUktOM1dURjEyQXRvbWljU3RyaW5nRQotX19aTks3
V2ViQ29yZTdFbGVtZW50MTNwc2V1ZG9FbGVtZW50RU5TXzhQc2V1ZG9JZEUKK19fWk5LN1dlYkNv
cmU3RWxlbWVudDE4YWZ0ZXJQc2V1ZG9FbGVtZW50RXYKK19fWk5LN1dlYkNvcmU3RWxlbWVudDE5
YmVmb3JlUHNldWRvRWxlbWVudEV2CiBfX1pOSzdXZWJDb3JlN0ludFJlY3QxMGludGVyc2VjdHNF
UktTMF8KIF9fWk5LN1dlYkNvcmU3SW50UmVjdDhjb250YWluc0VSS1MwXwogX19aTks3V2ViQ29y
ZTdJbnRSZWN0Y3Y2Q0dSZWN0RXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAxNTQ0NjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTYzNCwxMSArMTYzNCwxNSBAQCBOb2RlKiBDb21wdXRlZFN0eWxlRXh0cmFjdG9y
OjpzdHlsZWROb2RlCiB7CiAgICAgaWYgKCFtX25vZGUpCiAgICAgICAgIHJldHVybiAwOwotICAg
IGlmIChtX25vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICBpZiAoUHNldWRvRWxlbWVu
dCogZWxlbWVudCA9IHRvRWxlbWVudChtX25vZGUuZ2V0KCkpLT5wc2V1ZG9FbGVtZW50KG1fcHNl
dWRvRWxlbWVudFNwZWNpZmllcikpCi0gICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9
Ci0gICAgcmV0dXJuIG1fbm9kZS5nZXQoKTsKKyAgICBpZiAoIW1fbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQorICAgICAgICByZXR1cm4gbV9ub2RlLmdldCgpOworICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0VsZW1lbnQobV9ub2RlLmdldCgpKTsKKyAgICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVt
ZW50OworICAgIGlmIChtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIgPT0gQkVGT1JFICYmIChwc2V1
ZG9FbGVtZW50ID0gZWxlbWVudC0+YmVmb3JlUHNldWRvRWxlbWVudCgpKSkKKyAgICAgICAgcmV0
dXJuIHBzZXVkb0VsZW1lbnQ7CisgICAgaWYgKG1fcHNldWRvRWxlbWVudFNwZWNpZmllciA9PSBB
RlRFUiAmJiAocHNldWRvRWxlbWVudCA9IGVsZW1lbnQtPmFmdGVyUHNldWRvRWxlbWVudCgpKSkK
KyAgICAgICAgcmV0dXJuIHBzZXVkb0VsZW1lbnQ7CisgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAK
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEVVcGRhdGVMYXlvdXQgdXBk
YXRlTGF5b3V0KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMTU0
NDY1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzAsMTIgKzE3MCwxMCBAQCBFbGVtZW50Ojp+RWxlbWVudCgpCiAgICAgfQogI2VuZGlmCiAK
LSAgICBpZiAoaGFzUmFyZURhdGEoKSkgewotICAgICAgICBFbGVtZW50UmFyZURhdGEqIGRhdGEg
PSBlbGVtZW50UmFyZURhdGEoKTsKLSAgICAgICAgZGF0YS0+c2V0UHNldWRvRWxlbWVudChCRUZP
UkUsIDApOwotICAgICAgICBkYXRhLT5zZXRQc2V1ZG9FbGVtZW50KEFGVEVSLCAwKTsKLSAgICAg
ICAgcmVtb3ZlU2hhZG93Um9vdCgpOwotICAgIH0KKyAgICBBU1NFUlQoIWJlZm9yZVBzZXVkb0Vs
ZW1lbnQoKSk7CisgICAgQVNTRVJUKCFhZnRlclBzZXVkb0VsZW1lbnQoKSk7CisKKyAgICByZW1v
dmVTaGFkb3dSb290KCk7CiAKICAgICBpZiAoaGFzU3ludGhldGljQXR0ckNoaWxkTm9kZXMoKSkK
ICAgICAgICAgZGV0YWNoQWxsQXR0ck5vZGVzRnJvbUVsZW1lbnQoKTsKQEAgLTIwNjQsMTAgKzIw
NjIsMTcgQEAgdm9pZCBFbGVtZW50OjpzZXRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKAogICAgIGVu
c3VyZUVsZW1lbnRSYXJlRGF0YSgpLnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcoc2l6ZSk7CiB9
CiAKK3N0YXRpYyBQc2V1ZG9FbGVtZW50KiBiZWZvcmVPckFmdGVyUHNldWRlb0VsZW1lbnQoRWxl
bWVudCogaG9zdCwgUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKK3sKKyAgICBpZiAo
cHNldWRvRWxlbWVudFNwZWNpZmllciAhPSBCRUZPUkUgJiYgcHNldWRvRWxlbWVudFNwZWNpZmll
ciAhPSBBRlRFUikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHBzZXVkb0VsZW1lbnRT
cGVjaWZpZXIgPT0gQkVGT1JFID8gaG9zdC0+YmVmb3JlUHNldWRvRWxlbWVudCgpIDogaG9zdC0+
YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7Cit9CisKIFJlbmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRl
ZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpCiB7Ci0gICAgaWYgKFBzZXVk
b0VsZW1lbnQqIGVsZW1lbnQgPSBwc2V1ZG9FbGVtZW50KHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIp
KQotICAgICAgICByZXR1cm4gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOworICAgIGlmIChQc2V1
ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gYmVmb3JlT3JBZnRlclBzZXVkZW9FbGVtZW50KHRo
aXMsIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpKQorICAgICAgICByZXR1cm4gcHNldWRvRWxlbWVu
dC0+Y29tcHV0ZWRTdHlsZSgpOwogCiAgICAgLy8gRklYTUU6IEZpbmQgYW5kIHVzZSB0aGUgcmVu
ZGVyZXIgZnJvbSB0aGUgcHNldWRvIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGVsZW1l
bnQgc28gdGhhdCB0aGUgJ2xlbmd0aCcKICAgICAvLyBwcm9wZXJ0aWVzLCB3aGljaCBhcmUgb25s
eSBrbm93biBieSB0aGUgcmVuZGVyZXIgYmVjYXVzZSBpdCBkaWQgdGhlIGxheW91dCwgd2lsbCBi
ZSBjb3JyZWN0IGFuZCBzbyB0aGF0IHRoZQpAQCAtMjMwMiw0MSArMjMwNyw1NSBAQCB2b2lkIEVs
ZW1lbnQ6Om5vcm1hbGl6ZUF0dHJpYnV0ZXMoKQogICAgIH0KIH0KIAotdm9pZCBFbGVtZW50Ojp1
cGRhdGVQc2V1ZG9FbGVtZW50KFBzZXVkb0lkIHBzZXVkb0lkLCBTdHlsZTo6Q2hhbmdlIGNoYW5n
ZSkKK2Jvb2wgRWxlbWVudDo6dXBkYXRlRXhpc3RpbmdQc2V1ZG9FbGVtZW50KFBzZXVkb0VsZW1l
bnQqIGV4aXN0aW5nLCBTdHlsZTo6Q2hhbmdlIGNoYW5nZSkKIHsKLSAgICBQc2V1ZG9FbGVtZW50
KiBleGlzdGluZyA9IHBzZXVkb0VsZW1lbnQocHNldWRvSWQpOwotICAgIGlmIChleGlzdGluZykg
ewotICAgICAgICAvLyBQc2V1ZG9FbGVtZW50IHN0eWxlcyBoYW5nIG9mZiB0aGVpciBwYXJlbnQg
ZWxlbWVudCdzIHN0eWxlIHNvIGlmIHdlIG5lZWRlZAotICAgICAgICAvLyBhIHN0eWxlIHJlY2Fs
YyB3ZSBzaG91bGQgRm9yY2Ugb25lIG9uIHRoZSBwc2V1ZG8uCi0gICAgICAgIFN0eWxlOjpyZXNv
bHZlVHJlZShleGlzdGluZywgbmVlZHNTdHlsZVJlY2FsYygpID8gU3R5bGU6OkZvcmNlIDogY2hh
bmdlKTsKLQotICAgICAgICAvLyBXYWl0IHVudGlsIG91ciBwYXJlbnQgaXMgbm90IGRpc3BsYXll
ZCBvciBwc2V1ZG9FbGVtZW50UmVuZGVyZXJJc05lZWRlZAotICAgICAgICAvLyBpcyBmYWxzZSwg
b3RoZXJ3aXNlIHdlIGNvdWxkIGNvbnRpbm91c2x5IGNyZWF0ZSBhbmQgZGVzdHJveSBQc2V1ZG9F
bGVtZW50cwotICAgICAgICAvLyB3aGVuIFJlbmRlck9iamVjdDo6aXNDaGlsZEFsbG93ZWQgb24g
b3VyIHBhcmVudCByZXR1cm5zIGZhbHNlIGZvciB0aGUKLSAgICAgICAgLy8gUHNldWRvRWxlbWVu
dCdzIHJlbmRlcmVyIGZvciBlYWNoIHN0eWxlIHJlY2FsYy4KLSAgICAgICAgaWYgKCFyZW5kZXJl
cigpIHx8ICFwc2V1ZG9FbGVtZW50UmVuZGVyZXJJc05lZWRlZChyZW5kZXJlcigpLT5nZXRDYWNo
ZWRQc2V1ZG9TdHlsZShwc2V1ZG9JZCkpKQotICAgICAgICAgICAgc2V0UHNldWRvRWxlbWVudChw
c2V1ZG9JZCwgMCk7Ci0gICAgfSBlbHNlIGlmIChSZWZQdHI8UHNldWRvRWxlbWVudD4gZWxlbWVu
dCA9IGNyZWF0ZVBzZXVkb0VsZW1lbnRJZk5lZWRlZChwc2V1ZG9JZCkpIHsKLSAgICAgICAgU3R5
bGU6OmF0dGFjaFJlbmRlclRyZWUoZWxlbWVudC5nZXQoKSk7Ci0gICAgICAgIHNldFBzZXVkb0Vs
ZW1lbnQocHNldWRvSWQsIGVsZW1lbnQucmVsZWFzZSgpKTsKLSAgICB9CisgICAgLy8gUHNldWRv
RWxlbWVudCBzdHlsZXMgaGFuZyBvZmYgdGhlaXIgcGFyZW50IGVsZW1lbnQncyBzdHlsZSBzbyBp
ZiB3ZSBuZWVkZWQKKyAgICAvLyBhIHN0eWxlIHJlY2FsYyB3ZSBzaG91bGQgRm9yY2Ugb25lIG9u
IHRoZSBwc2V1ZG8uCisgICAgU3R5bGU6OnJlc29sdmVUcmVlKGV4aXN0aW5nLCBuZWVkc1N0eWxl
UmVjYWxjKCkgPyBTdHlsZTo6Rm9yY2UgOiBjaGFuZ2UpOworCisgICAgLy8gRklYTUU6IFRoaXMg
aXMgc2lsbHkuCisgICAgLy8gV2FpdCB1bnRpbCBvdXIgcGFyZW50IGlzIG5vdCBkaXNwbGF5ZWQg
b3IgcHNldWRvRWxlbWVudFJlbmRlcmVySXNOZWVkZWQKKyAgICAvLyBpcyBmYWxzZSwgb3RoZXJ3
aXNlIHdlIGNvdWxkIGNvbnRpbm91c2x5IGNyZWF0ZSBhbmQgZGVzdHJveSBQc2V1ZG9FbGVtZW50
cworICAgIC8vIHdoZW4gUmVuZGVyT2JqZWN0Ojppc0NoaWxkQWxsb3dlZCBvbiBvdXIgcGFyZW50
IHJldHVybnMgZmFsc2UgZm9yIHRoZQorICAgIC8vIFBzZXVkb0VsZW1lbnQncyByZW5kZXJlciBm
b3IgZWFjaCBzdHlsZSByZWNhbGMuCisgICAgcmV0dXJuIHJlbmRlcmVyKCkgJiYgcHNldWRvRWxl
bWVudFJlbmRlcmVySXNOZWVkZWQoZXhpc3RpbmctPnJlbmRlclN0eWxlKCkpOwogfQogCiBQYXNz
UmVmUHRyPFBzZXVkb0VsZW1lbnQ+IEVsZW1lbnQ6OmNyZWF0ZVBzZXVkb0VsZW1lbnRJZk5lZWRl
ZChQc2V1ZG9JZCBwc2V1ZG9JZCkKIHsKICAgICBpZiAoIWRvY3VtZW50KCktPnN0eWxlU2hlZXRD
b2xsZWN0aW9uKCktPnVzZXNCZWZvcmVBZnRlclJ1bGVzKCkpCiAgICAgICAgIHJldHVybiAwOwot
CiAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5jYW5IYXZlR2VuZXJhdGVkQ2hp
bGRyZW4oKSkKICAgICAgICAgcmV0dXJuIDA7Ci0KICAgICBpZiAoaXNQc2V1ZG9FbGVtZW50KCkp
CiAgICAgICAgIHJldHVybiAwOwotCiAgICAgaWYgKCFwc2V1ZG9FbGVtZW50UmVuZGVyZXJJc05l
ZWRlZChyZW5kZXJlcigpLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG9JZCkpKQogICAgICAg
ICByZXR1cm4gMDsKKyAgICBSZWZQdHI8UHNldWRvRWxlbWVudD4gcHNldWRvRWxlbWVudCA9IFBz
ZXVkb0VsZW1lbnQ6OmNyZWF0ZSh0aGlzLCBwc2V1ZG9JZCk7CisgICAgU3R5bGU6OmF0dGFjaFJl
bmRlclRyZWUocHNldWRvRWxlbWVudC5nZXQoKSk7CisgICAgcmV0dXJuIHBzZXVkb0VsZW1lbnQu
cmVsZWFzZSgpOworfQorCit2b2lkIEVsZW1lbnQ6OnVwZGF0ZUJlZm9yZVBzZXVkb0VsZW1lbnQo
U3R5bGU6OkNoYW5nZSBjaGFuZ2UpCit7CisgICAgaWYgKFBzZXVkb0VsZW1lbnQqIGV4aXN0aW5n
ID0gYmVmb3JlUHNldWRvRWxlbWVudCgpKSB7CisgICAgICAgIGlmICghdXBkYXRlRXhpc3RpbmdQ
c2V1ZG9FbGVtZW50KGV4aXN0aW5nLCBjaGFuZ2UpKQorICAgICAgICAgICAgY2xlYXJCZWZvcmVQ
c2V1ZG9FbGVtZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKFJlZlB0cjxQ
c2V1ZG9FbGVtZW50PiBwc2V1ZG8gPSBjcmVhdGVQc2V1ZG9FbGVtZW50SWZOZWVkZWQoQkVGT1JF
KSkKKyAgICAgICAgc2V0QmVmb3JlUHNldWRvRWxlbWVudChwc2V1ZG8ucmVsZWFzZSgpKTsKK30K
IAotICAgIHJldHVybiBQc2V1ZG9FbGVtZW50OjpjcmVhdGUodGhpcywgcHNldWRvSWQpOwordm9p
ZCBFbGVtZW50Ojp1cGRhdGVBZnRlclBzZXVkb0VsZW1lbnQoU3R5bGU6OkNoYW5nZSBjaGFuZ2Up
Cit7CisgICAgaWYgKFBzZXVkb0VsZW1lbnQqIGV4aXN0aW5nID0gYWZ0ZXJQc2V1ZG9FbGVtZW50
KCkpIHsKKyAgICAgICAgaWYgKCF1cGRhdGVFeGlzdGluZ1BzZXVkb0VsZW1lbnQoZXhpc3Rpbmcs
IGNoYW5nZSkpCisgICAgICAgICAgICBjbGVhckFmdGVyUHNldWRvRWxlbWVudCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmIChSZWZQdHI8UHNldWRvRWxlbWVudD4gcHNldWRvID0g
Y3JlYXRlUHNldWRvRWxlbWVudElmTmVlZGVkKEFGVEVSKSkKKyAgICAgICAgc2V0QWZ0ZXJQc2V1
ZG9FbGVtZW50KHBzZXVkby5yZWxlYXNlKCkpOwogfQogCiBib29sIEVsZW1lbnQ6Omhhc1BzZXVk
b0VsZW1lbnRzKCkgY29uc3QKQEAgLTIzNDQsMjIgKzIzNjMsNDggQEAgYm9vbCBFbGVtZW50Ojpo
YXNQc2V1ZG9FbGVtZW50cygpIGNvbnN0CiAgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgJiYgZWxl
bWVudFJhcmVEYXRhKCktPmhhc1BzZXVkb0VsZW1lbnRzKCk7CiB9CiAKLVBzZXVkb0VsZW1lbnQq
IEVsZW1lbnQ6OnBzZXVkb0VsZW1lbnQoUHNldWRvSWQgcHNldWRvSWQpIGNvbnN0CitQc2V1ZG9F
bGVtZW50KiBFbGVtZW50OjpiZWZvcmVQc2V1ZG9FbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaGFzUmFyZURhdGEoKSA/IGVsZW1lbnRSYXJlRGF0YSgpLT5iZWZvcmVQc2V1ZG9FbGVtZW50
KCkgOiAwOworfQorCitQc2V1ZG9FbGVtZW50KiBFbGVtZW50OjphZnRlclBzZXVkb0VsZW1lbnQo
KSBjb25zdAogewotICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gZWxlbWVudFJhcmVEYXRhKCkt
PnBzZXVkb0VsZW1lbnQocHNldWRvSWQpIDogMDsKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/
IGVsZW1lbnRSYXJlRGF0YSgpLT5hZnRlclBzZXVkb0VsZW1lbnQoKSA6IDA7CiB9CiAKLXZvaWQg
RWxlbWVudDo6c2V0UHNldWRvRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG9JZCwgUGFzc1JlZlB0cjxQ
c2V1ZG9FbGVtZW50PiBlbGVtZW50KQordm9pZCBFbGVtZW50OjpzZXRCZWZvcmVQc2V1ZG9FbGVt
ZW50KFBhc3NSZWZQdHI8UHNldWRvRWxlbWVudD4gZWxlbWVudCkKIHsKLSAgICBlbnN1cmVFbGVt
ZW50UmFyZURhdGEoKS5zZXRQc2V1ZG9FbGVtZW50KHBzZXVkb0lkLCBlbGVtZW50KTsKKyAgICBl
bnN1cmVFbGVtZW50UmFyZURhdGEoKS5zZXRCZWZvcmVQc2V1ZG9FbGVtZW50KGVsZW1lbnQpOwog
ICAgIHJlc2V0TmVlZHNTaGFkb3dUcmVlV2Fsa2VyKCk7CiB9CiAKLVJlbmRlck9iamVjdCogRWxl
bWVudDo6cHNldWRvRWxlbWVudFJlbmRlcmVyKFBzZXVkb0lkIHBzZXVkb0lkKSBjb25zdAordm9p
ZCBFbGVtZW50OjpzZXRBZnRlclBzZXVkb0VsZW1lbnQoUGFzc1JlZlB0cjxQc2V1ZG9FbGVtZW50
PiBlbGVtZW50KQogewotICAgIGlmIChQc2V1ZG9FbGVtZW50KiBlbGVtZW50ID0gcHNldWRvRWxl
bWVudChwc2V1ZG9JZCkpCi0gICAgICAgIHJldHVybiBlbGVtZW50LT5yZW5kZXJlcigpOwotICAg
IHJldHVybiAwOworICAgIGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgpLnNldEFmdGVyUHNldWRvRWxl
bWVudChlbGVtZW50KTsKKyAgICByZXNldE5lZWRzU2hhZG93VHJlZVdhbGtlcigpOworfQorCitz
dGF0aWMgdm9pZCBkaXNjb25uZWN0UHNldWRvRWxlbWVudChQc2V1ZG9FbGVtZW50KiBwc2V1ZG9F
bGVtZW50KQoreworICAgIGlmICghcHNldWRvRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChwc2V1ZG9FbGVtZW50LT5hdHRhY2hlZCgpKQorICAgICAgICBTdHlsZTo6ZGV0YWNoUmVu
ZGVyVHJlZShwc2V1ZG9FbGVtZW50KTsKKyAgICBBU1NFUlQocHNldWRvRWxlbWVudC0+aG9zdEVs
ZW1lbnQoKSk7CisgICAgcHNldWRvRWxlbWVudC0+Y2xlYXJIb3N0RWxlbWVudCgpOworfQorCit2
b2lkIEVsZW1lbnQ6OmNsZWFyQmVmb3JlUHNldWRvRWxlbWVudCgpCit7CisgICAgZGlzY29ubmVj
dFBzZXVkb0VsZW1lbnQoYmVmb3JlUHNldWRvRWxlbWVudCgpKTsKKyAgICBlbGVtZW50UmFyZURh
dGEoKS0+Y2xlYXJCZWZvcmVQc2V1ZG9FbGVtZW50KCk7Cit9CisKK3ZvaWQgRWxlbWVudDo6Y2xl
YXJBZnRlclBzZXVkb0VsZW1lbnQoKQoreworICAgIGRpc2Nvbm5lY3RQc2V1ZG9FbGVtZW50KGFm
dGVyUHNldWRvRWxlbWVudCgpKTsKKyAgICBlbGVtZW50UmFyZURhdGEoKS0+Y2xlYXJBZnRlclBz
ZXVkb0VsZW1lbnQoKTsKIH0KIAogLy8gRWxlbWVudFRyYXZlcnNhbCBBUEkKQEAgLTI5NTYsMTEg
KzMwMDEsMTEgQEAgdm9pZCBFbGVtZW50OjpjbGVhclN0eWxlRGVyaXZlZERhdGFCZWZvcgogewog
ICAgIHVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZSgpOwogICAgIGNhbmNlbEZvY3VzQXBw
ZWFyYW5jZVVwZGF0ZSgpOworICAgIGNsZWFyQmVmb3JlUHNldWRvRWxlbWVudCgpOworICAgIGNs
ZWFyQWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CiAgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgRWxlbWVudFJhcmVEYXRhKiBkYXRhID0gZWxlbWVudFJhcmVEYXRhKCk7
Ci0gICAgZGF0YS0+c2V0UHNldWRvRWxlbWVudChCRUZPUkUsIDApOwotICAgIGRhdGEtPnNldFBz
ZXVkb0VsZW1lbnQoQUZURVIsIDApOwogICAgIGRhdGEtPnNldElzSW5DYW52YXNTdWJ0cmVlKGZh
bHNlKTsKICAgICBkYXRhLT5yZXNldENvbXB1dGVkU3R5bGUoKTsKICAgICBkYXRhLT5yZXNldER5
bmFtaWNSZXN0eWxlT2JzZXJ2YXRpb25zKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJldmlz
aW9uIDE1NDQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyMyw4ICs0MjMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luUGFy
c2luZ0NoaWxkcmVuKCkgT1ZFUlJJREUgRklOQUw7CiAKICAgICBib29sIGhhc1BzZXVkb0VsZW1l
bnRzKCkgY29uc3Q7Ci0gICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudChQc2V1ZG9JZCkg
Y29uc3Q7Ci0gICAgUmVuZGVyT2JqZWN0KiBwc2V1ZG9FbGVtZW50UmVuZGVyZXIoUHNldWRvSWQp
IGNvbnN0OworICAgIFBzZXVkb0VsZW1lbnQqIGJlZm9yZVBzZXVkb0VsZW1lbnQoKSBjb25zdDsK
KyAgICBQc2V1ZG9FbGVtZW50KiBhZnRlclBzZXVkb0VsZW1lbnQoKSBjb25zdDsKICAgICBib29s
IGNoaWxkTmVlZHNTaGFkb3dXYWxrZXIoKSBjb25zdDsKICAgICB2b2lkIGRpZFNoYWRvd1RyZWVB
d2FyZUNoaWxkcmVuQ2hhbmdlKCk7CiAKQEAgLTU1MSw3ICs1NTEsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHdpbGxEZXRhY2hSZW5kZXJlcnMoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
RGV0YWNoUmVuZGVyZXJzKCk7CiAKLSAgICB2b2lkIHVwZGF0ZVBzZXVkb0VsZW1lbnQoUHNldWRv
SWQsIFN0eWxlOjpDaGFuZ2UgPSBTdHlsZTo6Tm9DaGFuZ2UpOworICAgIHZvaWQgdXBkYXRlQmVm
b3JlUHNldWRvRWxlbWVudChTdHlsZTo6Q2hhbmdlKTsKKyAgICB2b2lkIHVwZGF0ZUFmdGVyUHNl
dWRvRWxlbWVudChTdHlsZTo6Q2hhbmdlKTsKICAgICB2b2lkIHJlc2V0Q29tcHV0ZWRTdHlsZSgp
OwogICAgIHZvaWQgY2xlYXJTdHlsZURlcml2ZWREYXRhQmVmb3JlRGV0YWNoaW5nUmVuZGVyZXIo
KTsKICAgICB2b2lkIGNsZWFySG92ZXJBbmRBY3RpdmVTdGF0dXNCZWZvcmVEZXRhY2hpbmdSZW5k
ZXJlcigpOwpAQCAtNTkwLDcgKzU5MSwxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNVc2VyQWN0
aW9uRWxlbWVudEhvdmVyZWQoKSBjb25zdDsKIAogICAgIFBhc3NSZWZQdHI8UHNldWRvRWxlbWVu
dD4gY3JlYXRlUHNldWRvRWxlbWVudElmTmVlZGVkKFBzZXVkb0lkKTsKLSAgICB2b2lkIHNldFBz
ZXVkb0VsZW1lbnQoUHNldWRvSWQsIFBhc3NSZWZQdHI8UHNldWRvRWxlbWVudD4pOworICAgIGJv
b2wgdXBkYXRlRXhpc3RpbmdQc2V1ZG9FbGVtZW50KFBzZXVkb0VsZW1lbnQqIGV4aXN0aW5nLCBT
dHlsZTo6Q2hhbmdlKTsKKworICAgIHZvaWQgc2V0QmVmb3JlUHNldWRvRWxlbWVudChQYXNzUmVm
UHRyPFBzZXVkb0VsZW1lbnQ+KTsKKyAgICB2b2lkIHNldEFmdGVyUHNldWRvRWxlbWVudChQYXNz
UmVmUHRyPFBzZXVkb0VsZW1lbnQ+KTsKKyAgICB2b2lkIGNsZWFyQmVmb3JlUHNldWRvRWxlbWVu
dCgpOworICAgIHZvaWQgY2xlYXJBZnRlclBzZXVkb0VsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBhcmVBdXRob3JTaGFkb3dzQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KikgeyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCShyZXZpc2lvbiAxNTQ0NjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDkgKzM5LDE1IEBAIHB1YmxpYzoKIAogICAgIH5FbGVtZW50UmFyZURhdGEoKTsKIAot
ICAgIHZvaWQgc2V0UHNldWRvRWxlbWVudChQc2V1ZG9JZCwgUGFzc1JlZlB0cjxQc2V1ZG9FbGVt
ZW50Pik7Ci0gICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudChQc2V1ZG9JZCkgY29uc3Q7
Ci0gICAgYm9vbCBoYXNQc2V1ZG9FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fZ2VuZXJhdGVk
QmVmb3JlIHx8IG1fZ2VuZXJhdGVkQWZ0ZXI7IH0KKyAgICB2b2lkIGNsZWFyQmVmb3JlUHNldWRv
RWxlbWVudCgpOworICAgIHZvaWQgY2xlYXJBZnRlclBzZXVkb0VsZW1lbnQoKTsKKyAgICB2b2lk
IHNldEJlZm9yZVBzZXVkb0VsZW1lbnQoUGFzc1JlZlB0cjxQc2V1ZG9FbGVtZW50Pik7CisgICAg
dm9pZCBzZXRBZnRlclBzZXVkb0VsZW1lbnQoUGFzc1JlZlB0cjxQc2V1ZG9FbGVtZW50Pik7CisK
KyAgICBQc2V1ZG9FbGVtZW50KiBiZWZvcmVQc2V1ZG9FbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9iZWZvcmVQc2V1ZG9FbGVtZW50LmdldCgpOyB9CisgICAgUHNldWRvRWxlbWVudCogYWZ0ZXJQ
c2V1ZG9FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9hZnRlclBzZXVkb0VsZW1lbnQuZ2V0KCk7
IH0KKworICAgIGJvb2wgaGFzUHNldWRvRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX2JlZm9y
ZVBzZXVkb0VsZW1lbnQgfHwgbV9hZnRlclBzZXVkb0VsZW1lbnQ7IH0KIAogICAgIHZvaWQgcmVz
ZXRDb21wdXRlZFN0eWxlKCk7CiAgICAgdm9pZCByZXNldER5bmFtaWNSZXN0eWxlT2JzZXJ2YXRp
b25zKCk7CkBAIC0xNjksOCArMTc1LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhZG93Um9v
dD4gbV9zaGFkb3dSb290OwogICAgIE93blB0cjxOYW1lZE5vZGVNYXA+IG1fYXR0cmlidXRlTWFw
OwogCi0gICAgUmVmUHRyPFBzZXVkb0VsZW1lbnQ+IG1fZ2VuZXJhdGVkQmVmb3JlOwotICAgIFJl
ZlB0cjxQc2V1ZG9FbGVtZW50PiBtX2dlbmVyYXRlZEFmdGVyOworICAgIFJlZlB0cjxQc2V1ZG9F
bGVtZW50PiBtX2JlZm9yZVBzZXVkb0VsZW1lbnQ7CisgICAgUmVmUHRyPFBzZXVkb0VsZW1lbnQ+
IG1fYWZ0ZXJQc2V1ZG9FbGVtZW50OwogCiAgICAgRWxlbWVudFJhcmVEYXRhKFJlbmRlck9iamVj
dCopOwogICAgIHZvaWQgcmVsZWFzZVBzZXVkb0VsZW1lbnQoUHNldWRvRWxlbWVudCopOwpAQCAt
MjE1LDQ5ICsyMjEsMzIgQEAgaW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRh
KAogaW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6fkVsZW1lbnRSYXJlRGF0YSgpCiB7CiAgICAgQVNT
RVJUKCFtX3NoYWRvd1Jvb3QpOwotICAgIEFTU0VSVCghbV9nZW5lcmF0ZWRCZWZvcmUpOwotICAg
IEFTU0VSVCghbV9nZW5lcmF0ZWRBZnRlcik7CisgICAgQVNTRVJUKCFtX2JlZm9yZVBzZXVkb0Vs
ZW1lbnQpOworICAgIEFTU0VSVCghbV9hZnRlclBzZXVkb0VsZW1lbnQpOwogfQogCi1pbmxpbmUg
dm9pZCBFbGVtZW50UmFyZURhdGE6OnNldFBzZXVkb0VsZW1lbnQoUHNldWRvSWQgcHNldWRvSWQs
IFBhc3NSZWZQdHI8UHNldWRvRWxlbWVudD4gZWxlbWVudCkKK2lubGluZSB2b2lkIEVsZW1lbnRS
YXJlRGF0YTo6Y2xlYXJCZWZvcmVQc2V1ZG9FbGVtZW50KCkKIHsKLSAgICBzd2l0Y2ggKHBzZXVk
b0lkKSB7Ci0gICAgY2FzZSBCRUZPUkU6Ci0gICAgICAgIHJlbGVhc2VQc2V1ZG9FbGVtZW50KG1f
Z2VuZXJhdGVkQmVmb3JlLmdldCgpKTsKLSAgICAgICAgbV9nZW5lcmF0ZWRCZWZvcmUgPSBlbGVt
ZW50OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFGVEVSOgotICAgICAgICByZWxlYXNlUHNl
dWRvRWxlbWVudChtX2dlbmVyYXRlZEFmdGVyLmdldCgpKTsKLSAgICAgICAgbV9nZW5lcmF0ZWRB
ZnRlciA9IGVsZW1lbnQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKyAgICBBU1NFUlQoIW1fYmVmb3JlUHNldWRvRWxl
bWVudCB8fCAhbV9iZWZvcmVQc2V1ZG9FbGVtZW50LT5ob3N0RWxlbWVudCgpKTsKKyAgICBtX2Jl
Zm9yZVBzZXVkb0VsZW1lbnQgPSBudWxscHRyOwogfQogCi1pbmxpbmUgUHNldWRvRWxlbWVudCog
RWxlbWVudFJhcmVEYXRhOjpwc2V1ZG9FbGVtZW50KFBzZXVkb0lkIHBzZXVkb0lkKSBjb25zdAor
aW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRhOjpjbGVhckFmdGVyUHNldWRvRWxlbWVudCgpCiB7
Ci0gICAgc3dpdGNoIChwc2V1ZG9JZCkgewotICAgIGNhc2UgQkVGT1JFOgotICAgICAgICByZXR1
cm4gbV9nZW5lcmF0ZWRCZWZvcmUuZ2V0KCk7Ci0gICAgY2FzZSBBRlRFUjoKLSAgICAgICAgcmV0
dXJuIG1fZ2VuZXJhdGVkQWZ0ZXIuZ2V0KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQorICAgIEFTU0VSVCghbV9hZnRlclBzZXVkb0VsZW1lbnQgfHwgIW1fYWZ0ZXJQ
c2V1ZG9FbGVtZW50LT5ob3N0RWxlbWVudCgpKTsKKyAgICBtX2FmdGVyUHNldWRvRWxlbWVudCA9
IG51bGxwdHI7Cit9CisKK2lubGluZSB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6c2V0QmVmb3JlUHNl
dWRvRWxlbWVudChQYXNzUmVmUHRyPFBzZXVkb0VsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgQVNT
RVJUKCFtX2JlZm9yZVBzZXVkb0VsZW1lbnQpOworICAgIG1fYmVmb3JlUHNldWRvRWxlbWVudCA9
IGVsZW1lbnQ7CiB9CiAKLWlubGluZSB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVsZWFzZVBzZXVk
b0VsZW1lbnQoUHNldWRvRWxlbWVudCogZWxlbWVudCkKK2lubGluZSB2b2lkIEVsZW1lbnRSYXJl
RGF0YTo6c2V0QWZ0ZXJQc2V1ZG9FbGVtZW50KFBhc3NSZWZQdHI8UHNldWRvRWxlbWVudD4gZWxl
bWVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZWxl
bWVudC0+YXR0YWNoZWQoKSkKLSAgICAgICAgU3R5bGU6OmRldGFjaFJlbmRlclRyZWUoZWxlbWVu
dCk7Ci0gICAgZWxlbWVudC0+Y2xlYXJIb3N0RWxlbWVudCgpOwotCi0gICAgQVNTRVJUKCFlbGVt
ZW50LT5uZXh0U2libGluZygpKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPnByZXZpb3VzU2libGlu
ZygpKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPnBhcmVudE5vZGUoKSk7CisgICAgQVNTRVJUKCFt
X2FmdGVyUHNldWRvRWxlbWVudCk7CisgICAgbV9hZnRlclBzZXVkb0VsZW1lbnQgPSBlbGVtZW50
OwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50UmFyZURhdGE6OnJlc2V0Q29tcHV0ZWRTdHlsZSgp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxNTQ0NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NSw3ICs4OTUsNyBAQCBOb2RlKiBO
b2RlOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZygpCiAgICAgICAgIGlmIChpc0FmdGVyUHNl
dWRvRWxlbWVudCgpICYmIHBhcmVudE9ySG9zdC0+bGFzdENoaWxkKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gcGFyZW50T3JIb3N0LT5sYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKCFpc0JlZm9yZVBz
ZXVkb0VsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBwYXJlbnRPckhvc3QtPnBzZXVkb0Vs
ZW1lbnQoQkVGT1JFKTsKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnRPckhvc3QtPmJlZm9yZVBz
ZXVkb0VsZW1lbnQoKTsKICAgICB9CiAgICAgcmV0dXJuIHByZXZpb3VzU2libGluZygpOwogfQpA
QCAtOTA3LDcgKzkwNyw3IEBAIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcoKSBj
b24KICAgICAgICAgaWYgKGlzQmVmb3JlUHNldWRvRWxlbWVudCgpICYmIHBhcmVudE9ySG9zdC0+
Zmlyc3RDaGlsZCgpKQogICAgICAgICAgICAgcmV0dXJuIHBhcmVudE9ySG9zdC0+Zmlyc3RDaGls
ZCgpOwogICAgICAgICBpZiAoIWlzQWZ0ZXJQc2V1ZG9FbGVtZW50KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcGFyZW50T3JIb3N0LT5wc2V1ZG9FbGVtZW50KEFGVEVSKTsKKyAgICAgICAgICAgIHJl
dHVybiBwYXJlbnRPckhvc3QtPmFmdGVyUHNldWRvRWxlbWVudCgpOwogICAgIH0KICAgICByZXR1
cm4gbmV4dFNpYmxpbmcoKTsKIH0KQEAgLTkxNiwxMiArOTE2LDEyIEBAIE5vZGUqIE5vZGU6OnBz
ZXVkb0F3YXJlRmlyc3RDaGlsZCgpIGNvbnMKIHsKICAgICBpZiAoaXNFbGVtZW50Tm9kZSgpKSB7
CiAgICAgICAgIGNvbnN0IEVsZW1lbnQqIGN1cnJlbnRFbGVtZW50ID0gdG9FbGVtZW50KHRoaXMp
OwotICAgICAgICBOb2RlKiBmaXJzdCA9IGN1cnJlbnRFbGVtZW50LT5wc2V1ZG9FbGVtZW50KEJF
Rk9SRSk7CisgICAgICAgIE5vZGUqIGZpcnN0ID0gY3VycmVudEVsZW1lbnQtPmJlZm9yZVBzZXVk
b0VsZW1lbnQoKTsKICAgICAgICAgaWYgKGZpcnN0KQogICAgICAgICAgICAgcmV0dXJuIGZpcnN0
OwogICAgICAgICBmaXJzdCA9IGN1cnJlbnRFbGVtZW50LT5maXJzdENoaWxkKCk7CiAgICAgICAg
IGlmICghZmlyc3QpCi0gICAgICAgICAgICBmaXJzdCA9IGN1cnJlbnRFbGVtZW50LT5wc2V1ZG9F
bGVtZW50KEFGVEVSKTsKKyAgICAgICAgICAgIGZpcnN0ID0gY3VycmVudEVsZW1lbnQtPmFmdGVy
UHNldWRvRWxlbWVudCgpOwogICAgICAgICByZXR1cm4gZmlyc3Q7CiAgICAgfQogICAgIHJldHVy
biBmaXJzdENoaWxkKCk7CkBAIC05MzEsMTIgKzkzMSwxMiBAQCBOb2RlKiBOb2RlOjpwc2V1ZG9B
d2FyZUxhc3RDaGlsZCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRWxlbWVudE5vZGUoKSkgewogICAg
ICAgICBjb25zdCBFbGVtZW50KiBjdXJyZW50RWxlbWVudCA9IHRvRWxlbWVudCh0aGlzKTsKLSAg
ICAgICAgTm9kZSogbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5wc2V1ZG9FbGVtZW50KEFGVEVSKTsK
KyAgICAgICAgTm9kZSogbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5hZnRlclBzZXVkb0VsZW1lbnQo
KTsKICAgICAgICAgaWYgKGxhc3QpCiAgICAgICAgICAgICByZXR1cm4gbGFzdDsKICAgICAgICAg
bGFzdCA9IGN1cnJlbnRFbGVtZW50LT5sYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKCFsYXN0KQot
ICAgICAgICAgICAgbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5wc2V1ZG9FbGVtZW50KEJFRk9SRSk7
CisgICAgICAgICAgICBsYXN0ID0gY3VycmVudEVsZW1lbnQtPmJlZm9yZVBzZXVkb0VsZW1lbnQo
KTsKICAgICAgICAgcmV0dXJuIGxhc3Q7CiAgICAgfQogICAgIHJldHVybiBsYXN0Q2hpbGQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nVHJhdmVyc2FsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5jcHAJ
KHJldmlzaW9uIDE1NDQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nVHJh
dmVyc2FsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBOb2RlKiBuZXh0U2li
bGluZ1Nsb3coY29uc3QgTm9kZSogbm9kZSkKIAogICAgIE5vZGUqIHBhcmVudCA9IHdhbGtlci50
cmF2ZXJzZVBhcmVudChub2RlKTsKICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNFbGVtZW50
Tm9kZSgpKQotICAgICAgICByZXR1cm4gdG9FbGVtZW50KHBhcmVudCktPnBzZXVkb0VsZW1lbnQo
QUZURVIpOworICAgICAgICByZXR1cm4gdG9FbGVtZW50KHBhcmVudCktPmFmdGVyUHNldWRvRWxl
bWVudCgpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC03Myw3ICs3Myw3IEBAIE5vZGUqIHByZXZp
b3VzU2libGluZ1Nsb3coY29uc3QgTm9kZSogbm8KIAogICAgIE5vZGUqIHBhcmVudCA9IHdhbGtl
ci50cmF2ZXJzZVBhcmVudChub2RlKTsKICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNFbGVt
ZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gdG9FbGVtZW50KHBhcmVudCktPnBzZXVkb0VsZW1l
bnQoQkVGT1JFKTsKKyAgICAgICAgcmV0dXJuIHRvRWxlbWVudChwYXJlbnQpLT5iZWZvcmVQc2V1
ZG9FbGVtZW50KCk7CiAKICAgICByZXR1cm4gMDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDE1NDQ2NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklu
bGluZVRleHRCb3guaCIKICNpbmNsdWRlICJQcmludENvbnRleHQuaCIKKyNpbmNsdWRlICJQc2V1
ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyQlIuaCIKICNpbmNsdWRlICJSZW5kZXJEZXRh
aWxzTWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCIKQEAgLTkw
Miw2ICs5MDMsOCBAQCBTdHJpbmcgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihFbGVtZW50KiBlCiAK
IHN0YXRpYyB2b2lkIHdyaXRlQ291bnRlclZhbHVlc0Zyb21DaGlsZHJlbihUZXh0U3RyZWFtJiBz
dHJlYW0sIFJlbmRlck9iamVjdCogcGFyZW50LCBib29sJiBpc0ZpcnN0Q291bnRlcikKIHsKKyAg
ICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzQ291bnRlcigpKSB7CiAgICAgICAgICAg
ICBpZiAoIWlzRmlyc3RDb3VudGVyKQpAQCAtOTIxLDEwICs5MjQsMTAgQEAgU3RyaW5nIGNvdW50
ZXJWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCogZQogICAgIFRleHRTdHJlYW0gc3RyZWFtOwogICAg
IGJvb2wgaXNGaXJzdENvdW50ZXIgPSB0cnVlOwogICAgIC8vIFRoZSBjb3VudGVyIHJlbmRlcmVy
cyBzaG91bGQgYmUgY2hpbGRyZW4gb2YgOmJlZm9yZSBvciA6YWZ0ZXIgcHNldWRvLWVsZW1lbnRz
LgotICAgIGlmIChSZW5kZXJPYmplY3QqIGJlZm9yZSA9IGVsZW1lbnQtPnBzZXVkb0VsZW1lbnRS
ZW5kZXJlcihCRUZPUkUpKQotICAgICAgICB3cml0ZUNvdW50ZXJWYWx1ZXNGcm9tQ2hpbGRyZW4o
c3RyZWFtLCBiZWZvcmUsIGlzRmlyc3RDb3VudGVyKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBh
ZnRlciA9IGVsZW1lbnQtPnBzZXVkb0VsZW1lbnRSZW5kZXJlcihBRlRFUikpCi0gICAgICAgIHdy
aXRlQ291bnRlclZhbHVlc0Zyb21DaGlsZHJlbihzdHJlYW0sIGFmdGVyLCBpc0ZpcnN0Q291bnRl
cik7CisgICAgaWYgKFBzZXVkb0VsZW1lbnQqIGJlZm9yZSA9IGVsZW1lbnQtPmJlZm9yZVBzZXVk
b0VsZW1lbnQoKSkKKyAgICAgICAgd3JpdGVDb3VudGVyVmFsdWVzRnJvbUNoaWxkcmVuKHN0cmVh
bSwgYmVmb3JlLT5yZW5kZXJlcigpLCBpc0ZpcnN0Q291bnRlcik7CisgICAgaWYgKFBzZXVkb0Vs
ZW1lbnQqIGFmdGVyID0gZWxlbWVudC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCkpCisgICAgICAgIHdy
aXRlQ291bnRlclZhbHVlc0Zyb21DaGlsZHJlbihzdHJlYW0sIGFmdGVyLT5yZW5kZXJlcigpLCBp
c0ZpcnN0Q291bnRlcik7CiAgICAgcmV0dXJuIHN0cmVhbS5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCShyZXZpc2lvbiAxNTQ0
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgYXR0YWNoUmVuZGVyVHJlZShFbGVtZW50
KiBjdXJyZW50LCAKICAgICBpZiAoY3VycmVudC0+cGFyZW50RWxlbWVudCgpICYmIGN1cnJlbnQt
PnBhcmVudEVsZW1lbnQoKS0+aXNJbkNhbnZhc1N1YnRyZWUoKSkKICAgICAgICAgY3VycmVudC0+
c2V0SXNJbkNhbnZhc1N1YnRyZWUodHJ1ZSk7CiAKLSAgICBjdXJyZW50LT51cGRhdGVQc2V1ZG9F
bGVtZW50KEJFRk9SRSk7CisgICAgY3VycmVudC0+dXBkYXRlQmVmb3JlUHNldWRvRWxlbWVudChO
b0NoYW5nZSk7CiAKICAgICBTdHlsZVJlc29sdmVyUGFyZW50UHVzaGVyIHBhcmVudFB1c2hlcihj
dXJyZW50KTsKIApAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgYXR0YWNoUmVuZGVyVHJlZShFbGVt
ZW50KiBjdXJyZW50LCAKICAgICAgICAgICAgIGNhY2hlLT51cGRhdGVDYWNoZUFmdGVyTm9kZUlz
QXR0YWNoZWQoY3VycmVudCk7CiAgICAgfQogCi0gICAgY3VycmVudC0+dXBkYXRlUHNldWRvRWxl
bWVudChBRlRFUik7CisgICAgY3VycmVudC0+dXBkYXRlQWZ0ZXJQc2V1ZG9FbGVtZW50KE5vQ2hh
bmdlKTsKIAogICAgIGN1cnJlbnQtPnVwZGF0ZUZvY3VzQXBwZWFyYW5jZUFmdGVyQXR0YWNoSWZO
ZWVkZWQoKTsKICAgICAKQEAgLTQyOSw3ICs0MjksNyBAQCB2b2lkIHJlc29sdmVUcmVlKEVsZW1l
bnQqIGN1cnJlbnQsIENoYW5nCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBj
dXJyZW50LT51cGRhdGVQc2V1ZG9FbGVtZW50KEJFRk9SRSwgY2hhbmdlKTsKKyAgICAgICAgY3Vy
cmVudC0+dXBkYXRlQmVmb3JlUHNldWRvRWxlbWVudChjaGFuZ2UpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNoZWNrIGlzIGdvb2QgZW5vdWdoIGZvciA6aG92ZXIgKyBmb28sIGJ1dCBpdCBp
cyBub3QgZ29vZCBlbm91Z2ggZm9yIDpob3ZlciArIGZvbyArIGJhci4KICAgICAgICAgLy8gRm9y
IG5vdyB3ZSB3aWxsIGp1c3Qgd29ycnkgYWJvdXQgdGhlIGNvbW1vbiBjYXNlLCBzaW5jZSBpdCdz
IGEgbG90IHRyaWNraWVyIHRvIGdldCB0aGUgc2Vjb25kIGNhc2UgcmlnaHQKQEAgLTQ1NSw3ICs0
NTUsNyBAQCB2b2lkIHJlc29sdmVUcmVlKEVsZW1lbnQqIGN1cnJlbnQsIENoYW5nCiAgICAgICAg
ICAgICBmb3JjZUNoZWNrT2ZBbnlFbGVtZW50U2libGluZyA9IGZvcmNlQ2hlY2tPZkFueUVsZW1l
bnRTaWJsaW5nIHx8IChjaGlsZFJ1bGVzQ2hhbmdlZCAmJiBoYXNJbmRpcmVjdEFkamFjZW50UnVs
ZXMpOwogICAgICAgICB9CiAKLSAgICAgICAgY3VycmVudC0+dXBkYXRlUHNldWRvRWxlbWVudChB
RlRFUiwgY2hhbmdlKTsKKyAgICAgICAgY3VycmVudC0+dXBkYXRlQWZ0ZXJQc2V1ZG9FbGVtZW50
KGNoYW5nZSk7CiAgICAgfQogCiAgICAgY3VycmVudC0+Y2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCShyZXZpc2lvbiAxNTQ0NjUp
CisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1Nyw3ICs0NTcsNyBAQCBib29sIEludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVP
blBzCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBQc2V1ZG9FbGVtZW50KiBw
c2V1ZG9FbGVtZW50ID0gZWxlbWVudC0+cHNldWRvRWxlbWVudChwc2V1ZG9JZCA9PSAiYmVmb3Jl
IiA/IEJFRk9SRSA6IEFGVEVSKTsKKyAgICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0g
cHNldWRvSWQgPT0gImJlZm9yZSIgPyBlbGVtZW50LT5iZWZvcmVQc2V1ZG9FbGVtZW50KCkgOiBl
bGVtZW50LT5hZnRlclBzZXVkb0VsZW1lbnQoKTsKICAgICBpZiAoIXBzZXVkb0VsZW1lbnQpIHsK
ICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTQ4Nyw3ICs0ODcsNyBAQCBib29sIEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25QCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBQc2V1ZG9FbGVtZW50KiBw
c2V1ZG9FbGVtZW50ID0gZWxlbWVudC0+cHNldWRvRWxlbWVudChwc2V1ZG9JZCA9PSAiYmVmb3Jl
IiA/IEJFRk9SRSA6IEFGVEVSKTsKKyAgICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0g
cHNldWRvSWQgPT0gImJlZm9yZSIgPyBlbGVtZW50LT5iZWZvcmVQc2V1ZG9FbGVtZW50KCkgOiBl
bGVtZW50LT5hZnRlclBzZXVkb0VsZW1lbnQoKTsKICAgICBpZiAoIXBzZXVkb0VsZW1lbnQpIHsK
ICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
</data>
<flag name="commit-queue"
          id="231467"
          type_id="3"
          status="-"
          setter="gtk-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209534</attachid>
            <date>2013-08-24 00:14:10 -0700</date>
            <delta_ts>2013-08-24 03:51:28 -0700</delta_ts>
            <desc>another</desc>
            <filename>pseudo-cleanup-3.patch</filename>
            <type>text/plain</type>
            <size>24979</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDEzLTA4LTIzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBUaWdodGVuIGJlZm9yZS9hZnRl
ciBwc2V1ZG8gZWxlbWVudCBhY2Nlc3NvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMDIwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlIGhhdmUgZ2VuZXJpYyBsb29raW5nIEVsZW1lbnQ6OnBzZXVk
b0VsZW1lbnQoUHNldWRvSUQpIHdoaWNoIG9ubHkgcmV0dXJucyBiZWZvcmUvYWZ0ZXIgcHNldWRv
IGVsZW1lbnRzLgorICAgICAgICAKKyAgICAgICAgU3dpdGNoIHRvIEVsZW1lbnQ6OmJlZm9yZS9h
ZnRlclBzZXVkb0VsZW1lbnQoKSwgc2ltaWxhcmx5IGZvciBzZXR0ZXJzLgorCisgICAgICAgICog
V2ViQ29yZS5leHAuaW46CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpzdHlsZWRO
b2RlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojp+RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpiZWZvcmVPckFmdGVyUHNldWRlb0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y29tcHV0ZWRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OmNyZWF0ZVBzZXVkb0VsZW1lbnRJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVCZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUFmdGVyUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpiZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OmFmdGVyUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRCZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEFm
dGVyUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpkaXNjb25uZWN0UHNldWRvRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbGVhckJlZm9yZVBzZXVkb0VsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xlYXJBZnRlclBzZXVkb0VsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xlYXJTdHlsZURlcml2ZWREYXRhQmVmb3Jl
RGV0YWNoaW5nUmVuZGVyZXIpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICog
ZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRh
OjpiZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0
YTo6YWZ0ZXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0
YTo6aGFzUHNldWRvRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRh
Ojp+RWxlbWVudFJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6
Y2xlYXJCZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJl
RGF0YTo6Y2xlYXJBZnRlclBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dFJhcmVEYXRhOjpzZXRCZWZvcmVQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRSYXJlRGF0YTo6c2V0QWZ0ZXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgCisgICAgICAg
ICAgICBNb3ZlIGRldGFjaCBsb2dpYyB0byBFbGVtZW50LiBFbGVtZW50UmFyZURhdGEgc2hvdWxk
IG5vdCBpbXBsZW1lbnQgc2VtYW50aWNzLgorCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6cHNldWRvQXdhcmVOZXh0U2libGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpwc2V1ZG9Bd2FyZUZpcnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6cHNldWRvQXdhcmVMYXN0Q2hpbGQpOgorICAgICAgICAqIGRvbS9Ob2RlUmVuZGVyaW5nVHJh
dmVyc2FsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6Om5l
eHRTaWJsaW5nU2xvdyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmVuZGVyaW5nVHJhdmVyc2Fs
OjpwcmV2aW91c1NpYmxpbmdTbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUNvdW50ZXJWYWx1ZXNGcm9tQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRlclZhbHVlRm9yRWxlbWVudCk6CisgICAgICAg
ICogc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
YXR0YWNoUmVuZGVyVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZVRyZWUp
OgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQp
OgorCiAyMDEzLTA4LTIzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBVc2UgRWxlbWVudFRyYXZlcnNhbCBzb21lIG1vcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCShyZXZpc2lvbiAxNTQ1MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgko
d29ya2luZyBjb3B5KQpAQCAtMTY0MSw3ICsxNjQxLDggQEAgX19aTks3V2ViQ29yZTdFbGVtZW50
MTBzaGFkb3dSb290RXYKIF9fWk5LN1dlYkNvcmU3RWxlbWVudDEyZ2V0QXR0cmlidXRlRVJLTjNX
VEYxMkF0b21pY1N0cmluZ0UKIF9fWk5LN1dlYkNvcmU3RWxlbWVudDEyZ2V0QXR0cmlidXRlRVJL
TlNfMTNRdWFsaWZpZWROYW1lRQogX19aTks3V2ViQ29yZTdFbGVtZW50MTJoYXNBdHRyaWJ1dGVF
UktOM1dURjEyQXRvbWljU3RyaW5nRQotX19aTks3V2ViQ29yZTdFbGVtZW50MTNwc2V1ZG9FbGVt
ZW50RU5TXzhQc2V1ZG9JZEUKK19fWk5LN1dlYkNvcmU3RWxlbWVudDE4YWZ0ZXJQc2V1ZG9FbGVt
ZW50RXYKK19fWk5LN1dlYkNvcmU3RWxlbWVudDE5YmVmb3JlUHNldWRvRWxlbWVudEV2CiBfX1pO
SzdXZWJDb3JlN0ludFJlY3QxMGludGVyc2VjdHNFUktTMF8KIF9fWk5LN1dlYkNvcmU3SW50UmVj
dDhjb250YWluc0VSS1MwXwogX19aTks3V2ViQ29yZTdJbnRSZWN0Y3Y2Q0dSZWN0RXYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCShyZXZpc2lvbiAxNTQ1MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzNCwxMSArMTYzNCwxNSBA
QCBOb2RlKiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpzdHlsZWROb2RlCiB7CiAgICAgaWYgKCFt
X25vZGUpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChtX25vZGUtPmlzRWxlbWVudE5vZGUo
KSkgewotICAgICAgICBpZiAoUHNldWRvRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChtX25v
ZGUuZ2V0KCkpLT5wc2V1ZG9FbGVtZW50KG1fcHNldWRvRWxlbWVudFNwZWNpZmllcikpCi0gICAg
ICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG1fbm9kZS5nZXQoKTsK
KyAgICBpZiAoIW1fbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gbV9ub2Rl
LmdldCgpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobV9ub2RlLmdldCgpKTsK
KyAgICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50OworICAgIGlmIChtX3BzZXVkb0VsZW1l
bnRTcGVjaWZpZXIgPT0gQkVGT1JFICYmIChwc2V1ZG9FbGVtZW50ID0gZWxlbWVudC0+YmVmb3Jl
UHNldWRvRWxlbWVudCgpKSkKKyAgICAgICAgcmV0dXJuIHBzZXVkb0VsZW1lbnQ7CisgICAgaWYg
KG1fcHNldWRvRWxlbWVudFNwZWNpZmllciA9PSBBRlRFUiAmJiAocHNldWRvRWxlbWVudCA9IGVs
ZW1lbnQtPmFmdGVyUHNldWRvRWxlbWVudCgpKSkKKyAgICAgICAgcmV0dXJuIHBzZXVkb0VsZW1l
bnQ7CisgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIEVVcGRhdGVMYXlvdXQgdXBkYXRlTGF5b3V0KSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMTU0NTI0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMTIgKzE3MCwxMCBAQCBFbGVtZW50
Ojp+RWxlbWVudCgpCiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoaGFzUmFyZURhdGEoKSkgewot
ICAgICAgICBFbGVtZW50UmFyZURhdGEqIGRhdGEgPSBlbGVtZW50UmFyZURhdGEoKTsKLSAgICAg
ICAgZGF0YS0+c2V0UHNldWRvRWxlbWVudChCRUZPUkUsIDApOwotICAgICAgICBkYXRhLT5zZXRQ
c2V1ZG9FbGVtZW50KEFGVEVSLCAwKTsKLSAgICAgICAgcmVtb3ZlU2hhZG93Um9vdCgpOwotICAg
IH0KKyAgICBBU1NFUlQoIWJlZm9yZVBzZXVkb0VsZW1lbnQoKSk7CisgICAgQVNTRVJUKCFhZnRl
clBzZXVkb0VsZW1lbnQoKSk7CisKKyAgICByZW1vdmVTaGFkb3dSb290KCk7CiAKICAgICBpZiAo
aGFzU3ludGhldGljQXR0ckNoaWxkTm9kZXMoKSkKICAgICAgICAgZGV0YWNoQWxsQXR0ck5vZGVz
RnJvbUVsZW1lbnQoKTsKQEAgLTIwNjQsMTAgKzIwNjIsMTcgQEAgdm9pZCBFbGVtZW50OjpzZXRN
aW5pbXVtU2l6ZUZvclJlc2l6aW5nKAogICAgIGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgpLnNldE1p
bmltdW1TaXplRm9yUmVzaXppbmcoc2l6ZSk7CiB9CiAKK3N0YXRpYyBQc2V1ZG9FbGVtZW50KiBi
ZWZvcmVPckFmdGVyUHNldWRlb0VsZW1lbnQoRWxlbWVudCogaG9zdCwgUHNldWRvSWQgcHNldWRv
RWxlbWVudFNwZWNpZmllcikKK3sKKyAgICBpZiAocHNldWRvRWxlbWVudFNwZWNpZmllciAhPSBC
RUZPUkUgJiYgcHNldWRvRWxlbWVudFNwZWNpZmllciAhPSBBRlRFUikKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIgPT0gQkVGT1JFID8gaG9zdC0+
YmVmb3JlUHNldWRvRWxlbWVudCgpIDogaG9zdC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7Cit9CisK
IFJlbmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1l
bnRTcGVjaWZpZXIpCiB7Ci0gICAgaWYgKFBzZXVkb0VsZW1lbnQqIGVsZW1lbnQgPSBwc2V1ZG9F
bGVtZW50KHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpKQotICAgICAgICByZXR1cm4gZWxlbWVudC0+
Y29tcHV0ZWRTdHlsZSgpOworICAgIGlmIChQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0g
YmVmb3JlT3JBZnRlclBzZXVkZW9FbGVtZW50KHRoaXMsIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIp
KQorICAgICAgICByZXR1cm4gcHNldWRvRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwogCiAgICAg
Ly8gRklYTUU6IEZpbmQgYW5kIHVzZSB0aGUgcmVuZGVyZXIgZnJvbSB0aGUgcHNldWRvIGVsZW1l
bnQgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGVsZW1lbnQgc28gdGhhdCB0aGUgJ2xlbmd0aCcKICAg
ICAvLyBwcm9wZXJ0aWVzLCB3aGljaCBhcmUgb25seSBrbm93biBieSB0aGUgcmVuZGVyZXIgYmVj
YXVzZSBpdCBkaWQgdGhlIGxheW91dCwgd2lsbCBiZSBjb3JyZWN0IGFuZCBzbyB0aGF0IHRoZQpA
QCAtMjMwMiw2NCArMjMwNywxMDMgQEAgdm9pZCBFbGVtZW50Ojpub3JtYWxpemVBdHRyaWJ1dGVz
KCkKICAgICB9CiB9CiAKLXZvaWQgRWxlbWVudDo6dXBkYXRlUHNldWRvRWxlbWVudChQc2V1ZG9J
ZCBwc2V1ZG9JZCwgU3R5bGU6OkNoYW5nZSBjaGFuZ2UpCitib29sIEVsZW1lbnQ6OnVwZGF0ZUV4
aXN0aW5nUHNldWRvRWxlbWVudChQc2V1ZG9FbGVtZW50KiBleGlzdGluZywgU3R5bGU6OkNoYW5n
ZSBjaGFuZ2UpCiB7Ci0gICAgUHNldWRvRWxlbWVudCogZXhpc3RpbmcgPSBwc2V1ZG9FbGVtZW50
KHBzZXVkb0lkKTsKLSAgICBpZiAoZXhpc3RpbmcpIHsKLSAgICAgICAgLy8gUHNldWRvRWxlbWVu
dCBzdHlsZXMgaGFuZyBvZmYgdGhlaXIgcGFyZW50IGVsZW1lbnQncyBzdHlsZSBzbyBpZiB3ZSBu
ZWVkZWQKLSAgICAgICAgLy8gYSBzdHlsZSByZWNhbGMgd2Ugc2hvdWxkIEZvcmNlIG9uZSBvbiB0
aGUgcHNldWRvLgotICAgICAgICBTdHlsZTo6cmVzb2x2ZVRyZWUoZXhpc3RpbmcsIG5lZWRzU3R5
bGVSZWNhbGMoKSA/IFN0eWxlOjpGb3JjZSA6IGNoYW5nZSk7Ci0KLSAgICAgICAgLy8gV2FpdCB1
bnRpbCBvdXIgcGFyZW50IGlzIG5vdCBkaXNwbGF5ZWQgb3IgcHNldWRvRWxlbWVudFJlbmRlcmVy
SXNOZWVkZWQKLSAgICAgICAgLy8gaXMgZmFsc2UsIG90aGVyd2lzZSB3ZSBjb3VsZCBjb250aW5v
dXNseSBjcmVhdGUgYW5kIGRlc3Ryb3kgUHNldWRvRWxlbWVudHMKLSAgICAgICAgLy8gd2hlbiBS
ZW5kZXJPYmplY3Q6OmlzQ2hpbGRBbGxvd2VkIG9uIG91ciBwYXJlbnQgcmV0dXJucyBmYWxzZSBm
b3IgdGhlCi0gICAgICAgIC8vIFBzZXVkb0VsZW1lbnQncyByZW5kZXJlciBmb3IgZWFjaCBzdHls
ZSByZWNhbGMuCi0gICAgICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcHNldWRvRWxlbWVudFJlbmRl
cmVySXNOZWVkZWQocmVuZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRvSWQpKSkK
LSAgICAgICAgICAgIHNldFBzZXVkb0VsZW1lbnQocHNldWRvSWQsIDApOwotICAgIH0gZWxzZSBp
ZiAoUmVmUHRyPFBzZXVkb0VsZW1lbnQ+IGVsZW1lbnQgPSBjcmVhdGVQc2V1ZG9FbGVtZW50SWZO
ZWVkZWQocHNldWRvSWQpKSB7Ci0gICAgICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKGVsZW1l
bnQuZ2V0KCkpOwotICAgICAgICBzZXRQc2V1ZG9FbGVtZW50KHBzZXVkb0lkLCBlbGVtZW50LnJl
bGVhc2UoKSk7Ci0gICAgfQorICAgIC8vIFBzZXVkb0VsZW1lbnQgc3R5bGVzIGhhbmcgb2ZmIHRo
ZWlyIHBhcmVudCBlbGVtZW50J3Mgc3R5bGUgc28gaWYgd2UgbmVlZGVkCisgICAgLy8gYSBzdHls
ZSByZWNhbGMgd2Ugc2hvdWxkIEZvcmNlIG9uZSBvbiB0aGUgcHNldWRvLgorICAgIFN0eWxlOjpy
ZXNvbHZlVHJlZShleGlzdGluZywgbmVlZHNTdHlsZVJlY2FsYygpID8gU3R5bGU6OkZvcmNlIDog
Y2hhbmdlKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHNpbGx5LgorICAgIC8vIFdhaXQgdW50
aWwgb3VyIHBhcmVudCBpcyBub3QgZGlzcGxheWVkIG9yIHBzZXVkb0VsZW1lbnRSZW5kZXJlcklz
TmVlZGVkCisgICAgLy8gaXMgZmFsc2UsIG90aGVyd2lzZSB3ZSBjb3VsZCBjb250aW5vdXNseSBj
cmVhdGUgYW5kIGRlc3Ryb3kgUHNldWRvRWxlbWVudHMKKyAgICAvLyB3aGVuIFJlbmRlck9iamVj
dDo6aXNDaGlsZEFsbG93ZWQgb24gb3VyIHBhcmVudCByZXR1cm5zIGZhbHNlIGZvciB0aGUKKyAg
ICAvLyBQc2V1ZG9FbGVtZW50J3MgcmVuZGVyZXIgZm9yIGVhY2ggc3R5bGUgcmVjYWxjLgorICAg
IHJldHVybiByZW5kZXJlcigpICYmIHBzZXVkb0VsZW1lbnRSZW5kZXJlcklzTmVlZGVkKGV4aXN0
aW5nLT5yZW5kZXJTdHlsZSgpKTsKIH0KIAogUGFzc1JlZlB0cjxQc2V1ZG9FbGVtZW50PiBFbGVt
ZW50OjpjcmVhdGVQc2V1ZG9FbGVtZW50SWZOZWVkZWQoUHNldWRvSWQgcHNldWRvSWQpCiB7CiAg
ICAgaWYgKCFkb2N1bWVudCgpLT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT51c2VzQmVmb3JlQWZ0
ZXJSdWxlcygpKQogICAgICAgICByZXR1cm4gMDsKLQogICAgIGlmICghcmVuZGVyZXIoKSB8fCAh
cmVuZGVyZXIoKS0+Y2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybiAw
OwotCiAgICAgaWYgKGlzUHNldWRvRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gMDsKLQogICAg
IGlmICghcHNldWRvRWxlbWVudFJlbmRlcmVySXNOZWVkZWQocmVuZGVyZXIoKS0+Z2V0Q2FjaGVk
UHNldWRvU3R5bGUocHNldWRvSWQpKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgUmVmUHRyPFBz
ZXVkb0VsZW1lbnQ+IHBzZXVkb0VsZW1lbnQgPSBQc2V1ZG9FbGVtZW50OjpjcmVhdGUodGhpcywg
cHNldWRvSWQpOworICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKHBzZXVkb0VsZW1lbnQuZ2V0
KCkpOworICAgIHJldHVybiBwc2V1ZG9FbGVtZW50LnJlbGVhc2UoKTsKK30KIAotICAgIHJldHVy
biBQc2V1ZG9FbGVtZW50OjpjcmVhdGUodGhpcywgcHNldWRvSWQpOwordm9pZCBFbGVtZW50Ojp1
cGRhdGVCZWZvcmVQc2V1ZG9FbGVtZW50KFN0eWxlOjpDaGFuZ2UgY2hhbmdlKQoreworICAgIGlm
IChQc2V1ZG9FbGVtZW50KiBleGlzdGluZyA9IGJlZm9yZVBzZXVkb0VsZW1lbnQoKSkgeworICAg
ICAgICBpZiAoIXVwZGF0ZUV4aXN0aW5nUHNldWRvRWxlbWVudChleGlzdGluZywgY2hhbmdlKSkK
KyAgICAgICAgICAgIGNsZWFyQmVmb3JlUHNldWRvRWxlbWVudCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmIChSZWZQdHI8UHNldWRvRWxlbWVudD4gcHNldWRvID0gY3JlYXRlUHNl
dWRvRWxlbWVudElmTmVlZGVkKEJFRk9SRSkpCisgICAgICAgIHNldEJlZm9yZVBzZXVkb0VsZW1l
bnQocHNldWRvLnJlbGVhc2UoKSk7CiB9CiAKLWJvb2wgRWxlbWVudDo6aGFzUHNldWRvRWxlbWVu
dHMoKSBjb25zdAordm9pZCBFbGVtZW50Ojp1cGRhdGVBZnRlclBzZXVkb0VsZW1lbnQoU3R5bGU6
OkNoYW5nZSBjaGFuZ2UpCiB7Ci0gICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgJiYgZWxlbWVudFJh
cmVEYXRhKCktPmhhc1BzZXVkb0VsZW1lbnRzKCk7CisgICAgaWYgKFBzZXVkb0VsZW1lbnQqIGV4
aXN0aW5nID0gYWZ0ZXJQc2V1ZG9FbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKCF1cGRhdGVFeGlz
dGluZ1BzZXVkb0VsZW1lbnQoZXhpc3RpbmcsIGNoYW5nZSkpCisgICAgICAgICAgICBjbGVhckFm
dGVyUHNldWRvRWxlbWVudCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChSZWZQ
dHI8UHNldWRvRWxlbWVudD4gcHNldWRvID0gY3JlYXRlUHNldWRvRWxlbWVudElmTmVlZGVkKEFG
VEVSKSkKKyAgICAgICAgc2V0QWZ0ZXJQc2V1ZG9FbGVtZW50KHBzZXVkby5yZWxlYXNlKCkpOwog
fQogCi1Qc2V1ZG9FbGVtZW50KiBFbGVtZW50Ojpwc2V1ZG9FbGVtZW50KFBzZXVkb0lkIHBzZXVk
b0lkKSBjb25zdAorUHNldWRvRWxlbWVudCogRWxlbWVudDo6YmVmb3JlUHNldWRvRWxlbWVudCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyBlbGVtZW50UmFyZURhdGEoKS0+
cHNldWRvRWxlbWVudChwc2V1ZG9JZCkgOiAwOworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8g
ZWxlbWVudFJhcmVEYXRhKCktPmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6IDA7CiB9CiAKLXZvaWQg
RWxlbWVudDo6c2V0UHNldWRvRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG9JZCwgUGFzc1JlZlB0cjxQ
c2V1ZG9FbGVtZW50PiBlbGVtZW50KQorUHNldWRvRWxlbWVudCogRWxlbWVudDo6YWZ0ZXJQc2V1
ZG9FbGVtZW50KCkgY29uc3QKIHsKLSAgICBlbnN1cmVFbGVtZW50UmFyZURhdGEoKS5zZXRQc2V1
ZG9FbGVtZW50KHBzZXVkb0lkLCBlbGVtZW50KTsKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/
IGVsZW1lbnRSYXJlRGF0YSgpLT5hZnRlclBzZXVkb0VsZW1lbnQoKSA6IDA7Cit9CisKK3ZvaWQg
RWxlbWVudDo6c2V0QmVmb3JlUHNldWRvRWxlbWVudChQYXNzUmVmUHRyPFBzZXVkb0VsZW1lbnQ+
IGVsZW1lbnQpCit7CisgICAgZW5zdXJlRWxlbWVudFJhcmVEYXRhKCkuc2V0QmVmb3JlUHNldWRv
RWxlbWVudChlbGVtZW50KTsKICAgICByZXNldE5lZWRzU2hhZG93VHJlZVdhbGtlcigpOwogfQog
Ci1SZW5kZXJPYmplY3QqIEVsZW1lbnQ6OnBzZXVkb0VsZW1lbnRSZW5kZXJlcihQc2V1ZG9JZCBw
c2V1ZG9JZCkgY29uc3QKK3ZvaWQgRWxlbWVudDo6c2V0QWZ0ZXJQc2V1ZG9FbGVtZW50KFBhc3NS
ZWZQdHI8UHNldWRvRWxlbWVudD4gZWxlbWVudCkKIHsKLSAgICBpZiAoUHNldWRvRWxlbWVudCog
ZWxlbWVudCA9IHBzZXVkb0VsZW1lbnQocHNldWRvSWQpKQotICAgICAgICByZXR1cm4gZWxlbWVu
dC0+cmVuZGVyZXIoKTsKLSAgICByZXR1cm4gMDsKKyAgICBlbnN1cmVFbGVtZW50UmFyZURhdGEo
KS5zZXRBZnRlclBzZXVkb0VsZW1lbnQoZWxlbWVudCk7CisgICAgcmVzZXROZWVkc1NoYWRvd1Ry
ZWVXYWxrZXIoKTsKK30KKworc3RhdGljIHZvaWQgZGlzY29ubmVjdFBzZXVkb0VsZW1lbnQoUHNl
dWRvRWxlbWVudCogcHNldWRvRWxlbWVudCkKK3sKKyAgICBpZiAoIXBzZXVkb0VsZW1lbnQpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAocHNldWRvRWxlbWVudC0+YXR0YWNoZWQoKSkKKyAgICAg
ICAgU3R5bGU6OmRldGFjaFJlbmRlclRyZWUocHNldWRvRWxlbWVudCk7CisgICAgQVNTRVJUKHBz
ZXVkb0VsZW1lbnQtPmhvc3RFbGVtZW50KCkpOworICAgIHBzZXVkb0VsZW1lbnQtPmNsZWFySG9z
dEVsZW1lbnQoKTsKK30KKwordm9pZCBFbGVtZW50OjpjbGVhckJlZm9yZVBzZXVkb0VsZW1lbnQo
KQoreworICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGRpc2Nv
bm5lY3RQc2V1ZG9FbGVtZW50KGVsZW1lbnRSYXJlRGF0YSgpLT5iZWZvcmVQc2V1ZG9FbGVtZW50
KCkpOworICAgIGVsZW1lbnRSYXJlRGF0YSgpLT5zZXRCZWZvcmVQc2V1ZG9FbGVtZW50KG51bGxw
dHIpOworfQorCit2b2lkIEVsZW1lbnQ6OmNsZWFyQWZ0ZXJQc2V1ZG9FbGVtZW50KCkKK3sKKyAg
ICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJldHVybjsKKyAgICBkaXNjb25uZWN0UHNl
dWRvRWxlbWVudChlbGVtZW50UmFyZURhdGEoKS0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCkpOworICAg
IGVsZW1lbnRSYXJlRGF0YSgpLT5zZXRBZnRlclBzZXVkb0VsZW1lbnQobnVsbHB0cik7CiB9CiAK
IC8vIEVsZW1lbnRUcmF2ZXJzYWwgQVBJCkBAIC0yOTU2LDExICszMDAwLDExIEBAIHZvaWQgRWxl
bWVudDo6Y2xlYXJTdHlsZURlcml2ZWREYXRhQmVmb3IKIHsKICAgICB1bnJlZ2lzdGVyTmFtZWRG
bG93Q29udGVudE5vZGUoKTsKICAgICBjYW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUoKTsKKyAg
ICBjbGVhckJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKKyAgICBjbGVhckFmdGVyUHNldWRvRWxlbWVu
dCgpOwogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEVsZW1l
bnRSYXJlRGF0YSogZGF0YSA9IGVsZW1lbnRSYXJlRGF0YSgpOwotICAgIGRhdGEtPnNldFBzZXVk
b0VsZW1lbnQoQkVGT1JFLCAwKTsKLSAgICBkYXRhLT5zZXRQc2V1ZG9FbGVtZW50KEFGVEVSLCAw
KTsKICAgICBkYXRhLT5zZXRJc0luQ2FudmFzU3VidHJlZShmYWxzZSk7CiAgICAgZGF0YS0+cmVz
ZXRDb21wdXRlZFN0eWxlKCk7CiAgICAgZGF0YS0+cmVzZXREeW5hbWljUmVzdHlsZU9ic2VydmF0
aW9ucygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAxNTQ1MjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjIsOSArNDIyLDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKICAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5QYXJzaW5nQ2hpbGRyZW4oKSBPVkVSUklERSBGSU5BTDsKIAot
ICAgIGJvb2wgaGFzUHNldWRvRWxlbWVudHMoKSBjb25zdDsKLSAgICBQc2V1ZG9FbGVtZW50KiBw
c2V1ZG9FbGVtZW50KFBzZXVkb0lkKSBjb25zdDsKLSAgICBSZW5kZXJPYmplY3QqIHBzZXVkb0Vs
ZW1lbnRSZW5kZXJlcihQc2V1ZG9JZCkgY29uc3Q7CisgICAgUHNldWRvRWxlbWVudCogYmVmb3Jl
UHNldWRvRWxlbWVudCgpIGNvbnN0OworICAgIFBzZXVkb0VsZW1lbnQqIGFmdGVyUHNldWRvRWxl
bWVudCgpIGNvbnN0OwogICAgIGJvb2wgY2hpbGROZWVkc1NoYWRvd1dhbGtlcigpIGNvbnN0Owog
ICAgIHZvaWQgZGlkU2hhZG93VHJlZUF3YXJlQ2hpbGRyZW5DaGFuZ2UoKTsKIApAQCAtNTUxLDcg
KzU1MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERldGFjaFJlbmRlcmVycygp
OwogICAgIHZpcnR1YWwgdm9pZCBkaWREZXRhY2hSZW5kZXJlcnMoKTsKIAotICAgIHZvaWQgdXBk
YXRlUHNldWRvRWxlbWVudChQc2V1ZG9JZCwgU3R5bGU6OkNoYW5nZSA9IFN0eWxlOjpOb0NoYW5n
ZSk7CisgICAgdm9pZCB1cGRhdGVCZWZvcmVQc2V1ZG9FbGVtZW50KFN0eWxlOjpDaGFuZ2UpOwor
ICAgIHZvaWQgdXBkYXRlQWZ0ZXJQc2V1ZG9FbGVtZW50KFN0eWxlOjpDaGFuZ2UpOwogICAgIHZv
aWQgcmVzZXRDb21wdXRlZFN0eWxlKCk7CiAgICAgdm9pZCBjbGVhclN0eWxlRGVyaXZlZERhdGFC
ZWZvcmVEZXRhY2hpbmdSZW5kZXJlcigpOwogICAgIHZvaWQgY2xlYXJIb3ZlckFuZEFjdGl2ZVN0
YXR1c0JlZm9yZURldGFjaGluZ1JlbmRlcmVyKCk7CkBAIC01OTAsNyArNTkwLDEyIEBAIHByaXZh
dGU6CiAgICAgYm9vbCBpc1VzZXJBY3Rpb25FbGVtZW50SG92ZXJlZCgpIGNvbnN0OwogCiAgICAg
UGFzc1JlZlB0cjxQc2V1ZG9FbGVtZW50PiBjcmVhdGVQc2V1ZG9FbGVtZW50SWZOZWVkZWQoUHNl
dWRvSWQpOwotICAgIHZvaWQgc2V0UHNldWRvRWxlbWVudChQc2V1ZG9JZCwgUGFzc1JlZlB0cjxQ
c2V1ZG9FbGVtZW50Pik7CisgICAgYm9vbCB1cGRhdGVFeGlzdGluZ1BzZXVkb0VsZW1lbnQoUHNl
dWRvRWxlbWVudCogZXhpc3RpbmcsIFN0eWxlOjpDaGFuZ2UpOworCisgICAgdm9pZCBzZXRCZWZv
cmVQc2V1ZG9FbGVtZW50KFBhc3NSZWZQdHI8UHNldWRvRWxlbWVudD4pOworICAgIHZvaWQgc2V0
QWZ0ZXJQc2V1ZG9FbGVtZW50KFBhc3NSZWZQdHI8UHNldWRvRWxlbWVudD4pOworICAgIHZvaWQg
Y2xlYXJCZWZvcmVQc2V1ZG9FbGVtZW50KCk7CisgICAgdm9pZCBjbGVhckFmdGVyUHNldWRvRWxl
bWVudCgpOwogCiAgICAgdmlydHVhbCBib29sIGFyZUF1dGhvclNoYWRvd3NBbGxvd2VkKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFk
b3dSb290KFNoYWRvd1Jvb3QqKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
UmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVE
YXRhLmgJKHJldmlzaW9uIDE1NDUyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFy
ZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksMTEgQEAgcHVibGljOgogCiAgICAg
fkVsZW1lbnRSYXJlRGF0YSgpOwogCi0gICAgdm9pZCBzZXRQc2V1ZG9FbGVtZW50KFBzZXVkb0lk
LCBQYXNzUmVmUHRyPFBzZXVkb0VsZW1lbnQ+KTsKLSAgICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9F
bGVtZW50KFBzZXVkb0lkKSBjb25zdDsKLSAgICBib29sIGhhc1BzZXVkb0VsZW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9nZW5lcmF0ZWRCZWZvcmUgfHwgbV9nZW5lcmF0ZWRBZnRlcjsgfQorICAg
IHZvaWQgc2V0QmVmb3JlUHNldWRvRWxlbWVudChQYXNzUmVmUHRyPFBzZXVkb0VsZW1lbnQ+KTsK
KyAgICB2b2lkIHNldEFmdGVyUHNldWRvRWxlbWVudChQYXNzUmVmUHRyPFBzZXVkb0VsZW1lbnQ+
KTsKKworICAgIFBzZXVkb0VsZW1lbnQqIGJlZm9yZVBzZXVkb0VsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2JlZm9yZVBzZXVkb0VsZW1lbnQuZ2V0KCk7IH0KKyAgICBQc2V1ZG9FbGVtZW50KiBh
ZnRlclBzZXVkb0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2FmdGVyUHNldWRvRWxlbWVudC5n
ZXQoKTsgfQogCiAgICAgdm9pZCByZXNldENvbXB1dGVkU3R5bGUoKTsKICAgICB2b2lkIHJlc2V0
RHluYW1pY1Jlc3R5bGVPYnNlcnZhdGlvbnMoKTsKQEAgLTE2OSw4ICsxNzEsOCBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxTaGFkb3dSb290PiBtX3NoYWRvd1Jvb3Q7CiAgICAgT3duUHRyPE5hbWVk
Tm9kZU1hcD4gbV9hdHRyaWJ1dGVNYXA7CiAKLSAgICBSZWZQdHI8UHNldWRvRWxlbWVudD4gbV9n
ZW5lcmF0ZWRCZWZvcmU7Ci0gICAgUmVmUHRyPFBzZXVkb0VsZW1lbnQ+IG1fZ2VuZXJhdGVkQWZ0
ZXI7CisgICAgUmVmUHRyPFBzZXVkb0VsZW1lbnQ+IG1fYmVmb3JlUHNldWRvRWxlbWVudDsKKyAg
ICBSZWZQdHI8UHNldWRvRWxlbWVudD4gbV9hZnRlclBzZXVkb0VsZW1lbnQ7CiAKICAgICBFbGVt
ZW50UmFyZURhdGEoUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9pZCByZWxlYXNlUHNldWRvRWxlbWVu
dChQc2V1ZG9FbGVtZW50Kik7CkBAIC0yMTUsNDkgKzIxNywyMCBAQCBpbmxpbmUgRWxlbWVudFJh
cmVEYXRhOjpFbGVtZW50UmFyZURhdGEoCiBpbmxpbmUgRWxlbWVudFJhcmVEYXRhOjp+RWxlbWVu
dFJhcmVEYXRhKCkKIHsKICAgICBBU1NFUlQoIW1fc2hhZG93Um9vdCk7Ci0gICAgQVNTRVJUKCFt
X2dlbmVyYXRlZEJlZm9yZSk7Ci0gICAgQVNTRVJUKCFtX2dlbmVyYXRlZEFmdGVyKTsKLX0KLQot
aW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRhOjpzZXRQc2V1ZG9FbGVtZW50KFBzZXVkb0lkIHBz
ZXVkb0lkLCBQYXNzUmVmUHRyPFBzZXVkb0VsZW1lbnQ+IGVsZW1lbnQpCi17Ci0gICAgc3dpdGNo
IChwc2V1ZG9JZCkgewotICAgIGNhc2UgQkVGT1JFOgotICAgICAgICByZWxlYXNlUHNldWRvRWxl
bWVudChtX2dlbmVyYXRlZEJlZm9yZS5nZXQoKSk7Ci0gICAgICAgIG1fZ2VuZXJhdGVkQmVmb3Jl
ID0gZWxlbWVudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBRlRFUjoKLSAgICAgICAgcmVs
ZWFzZVBzZXVkb0VsZW1lbnQobV9nZW5lcmF0ZWRBZnRlci5nZXQoKSk7Ci0gICAgICAgIG1fZ2Vu
ZXJhdGVkQWZ0ZXIgPSBlbGVtZW50OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9CisgICAgQVNTRVJUKCFtX2JlZm9yZVBz
ZXVkb0VsZW1lbnQpOworICAgIEFTU0VSVCghbV9hZnRlclBzZXVkb0VsZW1lbnQpOwogfQogCi1p
bmxpbmUgUHNldWRvRWxlbWVudCogRWxlbWVudFJhcmVEYXRhOjpwc2V1ZG9FbGVtZW50KFBzZXVk
b0lkIHBzZXVkb0lkKSBjb25zdAoraW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRhOjpzZXRCZWZv
cmVQc2V1ZG9FbGVtZW50KFBhc3NSZWZQdHI8UHNldWRvRWxlbWVudD4gcHNldWRvRWxlbWVudCkK
IHsKLSAgICBzd2l0Y2ggKHBzZXVkb0lkKSB7Ci0gICAgY2FzZSBCRUZPUkU6Ci0gICAgICAgIHJl
dHVybiBtX2dlbmVyYXRlZEJlZm9yZS5nZXQoKTsKLSAgICBjYXNlIEFGVEVSOgotICAgICAgICBy
ZXR1cm4gbV9nZW5lcmF0ZWRBZnRlci5nZXQoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gMDsKLSAgICB9CisgICAgQVNTRVJUKCFtX2JlZm9yZVBzZXVkb0VsZW1lbnQgfHwgIXBzZXVk
b0VsZW1lbnQpOworICAgIG1fYmVmb3JlUHNldWRvRWxlbWVudCA9IHBzZXVkb0VsZW1lbnQ7CiB9
CiAKLWlubGluZSB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVsZWFzZVBzZXVkb0VsZW1lbnQoUHNl
dWRvRWxlbWVudCogZWxlbWVudCkKK2lubGluZSB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6c2V0QWZ0
ZXJQc2V1ZG9FbGVtZW50KFBhc3NSZWZQdHI8UHNldWRvRWxlbWVudD4gcHNldWRvRWxlbWVudCkK
IHsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZWxlbWVudC0+
YXR0YWNoZWQoKSkKLSAgICAgICAgU3R5bGU6OmRldGFjaFJlbmRlclRyZWUoZWxlbWVudCk7Ci0g
ICAgZWxlbWVudC0+Y2xlYXJIb3N0RWxlbWVudCgpOwotCi0gICAgQVNTRVJUKCFlbGVtZW50LT5u
ZXh0U2libGluZygpKTsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPnByZXZpb3VzU2libGluZygpKTsK
LSAgICBBU1NFUlQoIWVsZW1lbnQtPnBhcmVudE5vZGUoKSk7CisgICAgQVNTRVJUKCFtX2FmdGVy
UHNldWRvRWxlbWVudCB8fCAhcHNldWRvRWxlbWVudCk7CisgICAgbV9hZnRlclBzZXVkb0VsZW1l
bnQgPSBwc2V1ZG9FbGVtZW50OwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50UmFyZURhdGE6OnJl
c2V0Q29tcHV0ZWRTdHlsZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxNTQ1MjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NSw3
ICs4OTUsNyBAQCBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZygpCiAgICAg
ICAgIGlmIChpc0FmdGVyUHNldWRvRWxlbWVudCgpICYmIHBhcmVudE9ySG9zdC0+bGFzdENoaWxk
KCkpCiAgICAgICAgICAgICByZXR1cm4gcGFyZW50T3JIb3N0LT5sYXN0Q2hpbGQoKTsKICAgICAg
ICAgaWYgKCFpc0JlZm9yZVBzZXVkb0VsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBwYXJl
bnRPckhvc3QtPnBzZXVkb0VsZW1lbnQoQkVGT1JFKTsKKyAgICAgICAgICAgIHJldHVybiBwYXJl
bnRPckhvc3QtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKICAgICB9CiAgICAgcmV0dXJuIHByZXZp
b3VzU2libGluZygpOwogfQpAQCAtOTA3LDcgKzkwNyw3IEBAIE5vZGUqIE5vZGU6OnBzZXVkb0F3
YXJlTmV4dFNpYmxpbmcoKSBjb24KICAgICAgICAgaWYgKGlzQmVmb3JlUHNldWRvRWxlbWVudCgp
ICYmIHBhcmVudE9ySG9zdC0+Zmlyc3RDaGlsZCgpKQogICAgICAgICAgICAgcmV0dXJuIHBhcmVu
dE9ySG9zdC0+Zmlyc3RDaGlsZCgpOwogICAgICAgICBpZiAoIWlzQWZ0ZXJQc2V1ZG9FbGVtZW50
KCkpCi0gICAgICAgICAgICByZXR1cm4gcGFyZW50T3JIb3N0LT5wc2V1ZG9FbGVtZW50KEFGVEVS
KTsKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnRPckhvc3QtPmFmdGVyUHNldWRvRWxlbWVudCgp
OwogICAgIH0KICAgICByZXR1cm4gbmV4dFNpYmxpbmcoKTsKIH0KQEAgLTkxNiwxMiArOTE2LDEy
IEBAIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlRmlyc3RDaGlsZCgpIGNvbnMKIHsKICAgICBpZiAo
aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgIGNvbnN0IEVsZW1lbnQqIGN1cnJlbnRFbGVtZW50
ID0gdG9FbGVtZW50KHRoaXMpOwotICAgICAgICBOb2RlKiBmaXJzdCA9IGN1cnJlbnRFbGVtZW50
LT5wc2V1ZG9FbGVtZW50KEJFRk9SRSk7CisgICAgICAgIE5vZGUqIGZpcnN0ID0gY3VycmVudEVs
ZW1lbnQtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKICAgICAgICAgaWYgKGZpcnN0KQogICAgICAg
ICAgICAgcmV0dXJuIGZpcnN0OwogICAgICAgICBmaXJzdCA9IGN1cnJlbnRFbGVtZW50LT5maXJz
dENoaWxkKCk7CiAgICAgICAgIGlmICghZmlyc3QpCi0gICAgICAgICAgICBmaXJzdCA9IGN1cnJl
bnRFbGVtZW50LT5wc2V1ZG9FbGVtZW50KEFGVEVSKTsKKyAgICAgICAgICAgIGZpcnN0ID0gY3Vy
cmVudEVsZW1lbnQtPmFmdGVyUHNldWRvRWxlbWVudCgpOwogICAgICAgICByZXR1cm4gZmlyc3Q7
CiAgICAgfQogICAgIHJldHVybiBmaXJzdENoaWxkKCk7CkBAIC05MzEsMTIgKzkzMSwxMiBAQCBO
b2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUxhc3RDaGlsZCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRWxl
bWVudE5vZGUoKSkgewogICAgICAgICBjb25zdCBFbGVtZW50KiBjdXJyZW50RWxlbWVudCA9IHRv
RWxlbWVudCh0aGlzKTsKLSAgICAgICAgTm9kZSogbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5wc2V1
ZG9FbGVtZW50KEFGVEVSKTsKKyAgICAgICAgTm9kZSogbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5h
ZnRlclBzZXVkb0VsZW1lbnQoKTsKICAgICAgICAgaWYgKGxhc3QpCiAgICAgICAgICAgICByZXR1
cm4gbGFzdDsKICAgICAgICAgbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5sYXN0Q2hpbGQoKTsKICAg
ICAgICAgaWYgKCFsYXN0KQotICAgICAgICAgICAgbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5wc2V1
ZG9FbGVtZW50KEJFRk9SRSk7CisgICAgICAgICAgICBsYXN0ID0gY3VycmVudEVsZW1lbnQtPmJl
Zm9yZVBzZXVkb0VsZW1lbnQoKTsKICAgICAgICAgcmV0dXJuIGxhc3Q7CiAgICAgfQogICAgIHJl
dHVybiBsYXN0Q2hpbGQoKTsKQEAgLTEwNjMsNyArMTA2MywxNCBAQCB2b2lkIE5vZGU6OnJlbW92
ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluCiAKIGJvb2wgTm9kZTo6bmVlZHNTaGFkb3dUcmVlV2Fs
a2VyU2xvdygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChpc1NoYWRvd1Jvb3QoKSB8fCAoaXNFbGVt
ZW50Tm9kZSgpICYmIChpc0luc2VydGlvblBvaW50KCkgfHwgaXNQc2V1ZG9FbGVtZW50KCkgfHwg
dG9FbGVtZW50KHRoaXMpLT5oYXNQc2V1ZG9FbGVtZW50cygpIHx8IHRvRWxlbWVudCh0aGlzKS0+
c2hhZG93Um9vdCgpKSkpOworICAgIGlmIChpc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKCFpc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBjb25zdCBFbGVtZW50KiBhc0VsZW1lbnQgPSB0b0VsZW1lbnQodGhpcyk7CisgICAgaWYg
KGFzRWxlbWVudC0+aXNQc2V1ZG9FbGVtZW50KCkgfHwgYXNFbGVtZW50LT5iZWZvcmVQc2V1ZG9F
bGVtZW50KCkgfHwgYXNFbGVtZW50LT5hZnRlclBzZXVkb0VsZW1lbnQoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIGFzRWxlbWVudC0+aXNJbnNlcnRpb25Qb2ludCgpIHx8IGFz
RWxlbWVudC0+c2hhZG93Um9vdCgpOwogfQogCiBib29sIE5vZGU6OmlzUm9vdEVkaXRhYmxlRWxl
bWVudCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ1RyYXZl
cnNhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdU
cmF2ZXJzYWwuY3BwCShyZXZpc2lvbiAxNTQ1MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZVJlbmRlcmluZ1RyYXZlcnNhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAg
Tm9kZSogbmV4dFNpYmxpbmdTbG93KGNvbnN0IE5vZGUqIG5vZGUpCiAKICAgICBOb2RlKiBwYXJl
bnQgPSB3YWxrZXIudHJhdmVyc2VQYXJlbnQobm9kZSk7CiAgICAgaWYgKHBhcmVudCAmJiBwYXJl
bnQtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRvRWxlbWVudChwYXJlbnQpLT5w
c2V1ZG9FbGVtZW50KEFGVEVSKTsKKyAgICAgICAgcmV0dXJuIHRvRWxlbWVudChwYXJlbnQpLT5h
ZnRlclBzZXVkb0VsZW1lbnQoKTsKIAogICAgIHJldHVybiAwOwogfQpAQCAtNzMsNyArNzMsNyBA
QCBOb2RlKiBwcmV2aW91c1NpYmxpbmdTbG93KGNvbnN0IE5vZGUqIG5vCiAKICAgICBOb2RlKiBw
YXJlbnQgPSB3YWxrZXIudHJhdmVyc2VQYXJlbnQobm9kZSk7CiAgICAgaWYgKHBhcmVudCAmJiBw
YXJlbnQtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRvRWxlbWVudChwYXJlbnQp
LT5wc2V1ZG9FbGVtZW50KEJFRk9SRSk7CisgICAgICAgIHJldHVybiB0b0VsZW1lbnQocGFyZW50
KS0+YmVmb3JlUHNldWRvRWxlbWVudCgpOwogCiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAx
NTQ1MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUHJpbnRDb250ZXh0LmgiCisj
aW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckJSLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRGV0YWlsc01hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlckZpbGVVcGxvYWRDb250
cm9sLmgiCkBAIC05MDIsNiArOTAzLDggQEAgU3RyaW5nIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
RWxlbWVudCogZQogCiBzdGF0aWMgdm9pZCB3cml0ZUNvdW50ZXJWYWx1ZXNGcm9tQ2hpbGRyZW4o
VGV4dFN0cmVhbSYgc3RyZWFtLCBSZW5kZXJPYmplY3QqIHBhcmVudCwgYm9vbCYgaXNGaXJzdENv
dW50ZXIpCiB7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJldHVybjsKICAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBwYXJlbnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc0NvdW50ZXIoKSkg
ewogICAgICAgICAgICAgaWYgKCFpc0ZpcnN0Q291bnRlcikKQEAgLTkyMSwxMCArOTI0LDEwIEBA
IFN0cmluZyBjb3VudGVyVmFsdWVGb3JFbGVtZW50KEVsZW1lbnQqIGUKICAgICBUZXh0U3RyZWFt
IHN0cmVhbTsKICAgICBib29sIGlzRmlyc3RDb3VudGVyID0gdHJ1ZTsKICAgICAvLyBUaGUgY291
bnRlciByZW5kZXJlcnMgc2hvdWxkIGJlIGNoaWxkcmVuIG9mIDpiZWZvcmUgb3IgOmFmdGVyIHBz
ZXVkby1lbGVtZW50cy4KLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBiZWZvcmUgPSBlbGVtZW50LT5w
c2V1ZG9FbGVtZW50UmVuZGVyZXIoQkVGT1JFKSkKLSAgICAgICAgd3JpdGVDb3VudGVyVmFsdWVz
RnJvbUNoaWxkcmVuKHN0cmVhbSwgYmVmb3JlLCBpc0ZpcnN0Q291bnRlcik7Ci0gICAgaWYgKFJl
bmRlck9iamVjdCogYWZ0ZXIgPSBlbGVtZW50LT5wc2V1ZG9FbGVtZW50UmVuZGVyZXIoQUZURVIp
KQotICAgICAgICB3cml0ZUNvdW50ZXJWYWx1ZXNGcm9tQ2hpbGRyZW4oc3RyZWFtLCBhZnRlciwg
aXNGaXJzdENvdW50ZXIpOworICAgIGlmIChQc2V1ZG9FbGVtZW50KiBiZWZvcmUgPSBlbGVtZW50
LT5iZWZvcmVQc2V1ZG9FbGVtZW50KCkpCisgICAgICAgIHdyaXRlQ291bnRlclZhbHVlc0Zyb21D
aGlsZHJlbihzdHJlYW0sIGJlZm9yZS0+cmVuZGVyZXIoKSwgaXNGaXJzdENvdW50ZXIpOworICAg
IGlmIChQc2V1ZG9FbGVtZW50KiBhZnRlciA9IGVsZW1lbnQtPmFmdGVyUHNldWRvRWxlbWVudCgp
KQorICAgICAgICB3cml0ZUNvdW50ZXJWYWx1ZXNGcm9tQ2hpbGRyZW4oc3RyZWFtLCBhZnRlci0+
cmVuZGVyZXIoKSwgaXNGaXJzdENvdW50ZXIpOwogICAgIHJldHVybiBzdHJlYW0ucmVsZWFzZSgp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAko
cmV2aXNpb24gMTU0NTI0KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJl
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lkIGF0dGFjaFJlbmRl
clRyZWUoRWxlbWVudCogY3VycmVudCwgCiAgICAgaWYgKGN1cnJlbnQtPnBhcmVudEVsZW1lbnQo
KSAmJiBjdXJyZW50LT5wYXJlbnRFbGVtZW50KCktPmlzSW5DYW52YXNTdWJ0cmVlKCkpCiAgICAg
ICAgIGN1cnJlbnQtPnNldElzSW5DYW52YXNTdWJ0cmVlKHRydWUpOwogCi0gICAgY3VycmVudC0+
dXBkYXRlUHNldWRvRWxlbWVudChCRUZPUkUpOworICAgIGN1cnJlbnQtPnVwZGF0ZUJlZm9yZVBz
ZXVkb0VsZW1lbnQoTm9DaGFuZ2UpOwogCiAgICAgU3R5bGVSZXNvbHZlclBhcmVudFB1c2hlciBw
YXJlbnRQdXNoZXIoY3VycmVudCk7CiAKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIGF0dGFjaFJl
bmRlclRyZWUoRWxlbWVudCogY3VycmVudCwgCiAgICAgICAgICAgICBjYWNoZS0+dXBkYXRlQ2Fj
aGVBZnRlck5vZGVJc0F0dGFjaGVkKGN1cnJlbnQpOwogICAgIH0KIAotICAgIGN1cnJlbnQtPnVw
ZGF0ZVBzZXVkb0VsZW1lbnQoQUZURVIpOworICAgIGN1cnJlbnQtPnVwZGF0ZUFmdGVyUHNldWRv
RWxlbWVudChOb0NoYW5nZSk7CiAKICAgICBjdXJyZW50LT51cGRhdGVGb2N1c0FwcGVhcmFuY2VB
ZnRlckF0dGFjaElmTmVlZGVkKCk7CiAgICAgCkBAIC00MjksNyArNDI5LDcgQEAgdm9pZCByZXNv
bHZlVHJlZShFbGVtZW50KiBjdXJyZW50LCBDaGFuZwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgY3VycmVudC0+dXBkYXRlUHNldWRvRWxlbWVudChCRUZPUkUsIGNoYW5nZSk7
CisgICAgICAgIGN1cnJlbnQtPnVwZGF0ZUJlZm9yZVBzZXVkb0VsZW1lbnQoY2hhbmdlKTsKIAog
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpcyBnb29kIGVub3VnaCBmb3IgOmhvdmVyICsg
Zm9vLCBidXQgaXQgaXMgbm90IGdvb2QgZW5vdWdoIGZvciA6aG92ZXIgKyBmb28gKyBiYXIuCiAg
ICAgICAgIC8vIEZvciBub3cgd2Ugd2lsbCBqdXN0IHdvcnJ5IGFib3V0IHRoZSBjb21tb24gY2Fz
ZSwgc2luY2UgaXQncyBhIGxvdCB0cmlja2llciB0byBnZXQgdGhlIHNlY29uZCBjYXNlIHJpZ2h0
CkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCByZXNvbHZlVHJlZShFbGVtZW50KiBjdXJyZW50LCBD
aGFuZwogICAgICAgICAgICAgZm9yY2VDaGVja09mQW55RWxlbWVudFNpYmxpbmcgPSBmb3JjZUNo
ZWNrT2ZBbnlFbGVtZW50U2libGluZyB8fCAoY2hpbGRSdWxlc0NoYW5nZWQgJiYgaGFzSW5kaXJl
Y3RBZGphY2VudFJ1bGVzKTsKICAgICAgICAgfQogCi0gICAgICAgIGN1cnJlbnQtPnVwZGF0ZVBz
ZXVkb0VsZW1lbnQoQUZURVIsIGNoYW5nZSk7CisgICAgICAgIGN1cnJlbnQtPnVwZGF0ZUFmdGVy
UHNldWRvRWxlbWVudChjaGFuZ2UpOwogICAgIH0KIAogICAgIGN1cnJlbnQtPmNsZWFyTmVlZHNT
dHlsZVJlY2FsYygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2
aXNpb24gMTU0NTI0KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NTcsNyArNDU3LDcgQEAgYm9vbCBJbnRlcm5hbHM6OnBhdXNlQW5p
bWF0aW9uQXRUaW1lT25QcwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUHNl
dWRvRWxlbWVudCogcHNldWRvRWxlbWVudCA9IGVsZW1lbnQtPnBzZXVkb0VsZW1lbnQocHNldWRv
SWQgPT0gImJlZm9yZSIgPyBCRUZPUkUgOiBBRlRFUik7CisgICAgUHNldWRvRWxlbWVudCogcHNl
dWRvRWxlbWVudCA9IHBzZXVkb0lkID09ICJiZWZvcmUiID8gZWxlbWVudC0+YmVmb3JlUHNldWRv
RWxlbWVudCgpIDogZWxlbWVudC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CiAgICAgaWYgKCFwc2V1
ZG9FbGVtZW50KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC00ODcsNyArNDg3LDcgQEAgYm9vbCBJbnRlcm5hbHM6OnBhdXNlVHJh
bnNpdGlvbkF0VGltZU9uUAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUHNl
dWRvRWxlbWVudCogcHNldWRvRWxlbWVudCA9IGVsZW1lbnQtPnBzZXVkb0VsZW1lbnQocHNldWRv
SWQgPT0gImJlZm9yZSIgPyBCRUZPUkUgOiBBRlRFUik7CisgICAgUHNldWRvRWxlbWVudCogcHNl
dWRvRWxlbWVudCA9IHBzZXVkb0lkID09ICJiZWZvcmUiID8gZWxlbWVudC0+YmVmb3JlUHNldWRv
RWxlbWVudCgpIDogZWxlbWVudC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CiAgICAgaWYgKCFwc2V1
ZG9FbGVtZW50KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7Cg==
</data>
<flag name="review"
          id="231564"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="231567"
          type_id="3"
          status="-"
          setter="gtk-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>