<?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>34924</bug_id>
          
          <creation_ts>2010-02-14 05:11:09 -0800</creation_ts>
          <short_desc>Add checks if setNeedsWillValidateCheck() and setNeedsValidityCheck() are called correctly</short_desc>
          <delta_ts>2010-03-23 04:47:32 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>31716</dependson>
          <blocked>31718</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>190308</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-02-14 05:11:09 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=31716#c20
&gt; It almost seems that despite our bad experiences, caching the old value would
&gt; be helpful, not for optimizing the result of the functions to fetch the
&gt; validity state, but for getting the state changes correct. It&apos;s quite fragile
&gt; to both have functions to answer &quot;is this valid&quot; and then scattered code to
&gt; invalidate when those constraints change. How would someone changing the
&gt; functions know to go update the call sites where those states could change.
&gt; 
&gt; How would notice if we forgot to call one of these state change functions?
&gt; Maybe we need to devise a debugging feature to catch mistakes.
&gt; 
&gt; If we do cache a value I think it should be a single three-state concept: &quot;will
&gt; not validate&quot;, &quot;valid&quot;, &quot;invalid&quot;. Treating these as independent makes the code
&gt; more complicated in places where they overlap. I know the DOM API for this
&gt; treats them separately, but the style code would be much simpler if it used a
&gt; single three-state concept.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190314</commentid>
    <comment_count>1</comment_count>
      <attachid>48721</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-02-14 05:40:27 -0800</bug_when>
    <thetext>Created attachment 48721
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190315</commentid>
    <comment_count>2</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-02-14 05:47:36 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; &gt; If we do cache a value I think it should be a single three-state concept: &quot;will
&gt; &gt; not validate&quot;, &quot;valid&quot;, &quot;invalid&quot;. Treating these as independent makes the code
&gt; &gt; more complicated in places where they overlap. I know the DOM API for this
&gt; &gt; treats them separately, but the style code would be much simpler if it used a
&gt; &gt; single three-state concept.

I couldn&apos;t apply the single three-state concept.
According to the HTML5, the validity state should work even if willValidate is false. So the patch introduces two boolean members.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202496</commentid>
    <comment_count>3</comment_count>
      <attachid>48721</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-03-22 08:17:54 -0700</bug_when>
    <thetext>Comment on attachment 48721
Proposed patch

in HTMLInputElement::setValue, it looks like

+ setNeedsValidityCheck();

can be lifted above the &quot;inputType() == FILE&quot; if-clause because its called on both branches.

This looks reasonable.  I&apos;m not an expert on validity checks, but this patch has been sitting around for a month and seems to prove the codebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202989</commentid>
    <comment_count>4</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-03-23 04:04:41 -0700</bug_when>
    <thetext>Thank you for reviewing.

(In reply to comment #3)
&gt; + setNeedsValidityCheck();
&gt; 
&gt; can be lifted above the &quot;inputType() == FILE&quot; if-clause because its called on
&gt; both branches.

setNeedsValidityCehck() should be called
  after updating the value &amp;&amp; before style recalc.
So this code is the best.

I&apos;m adding a comment about it, and landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203000</commentid>
    <comment_count>5</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-03-23 04:47:32 -0700</bug_when>
    <thetext>Landed as r56385.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48721</attachid>
            <date>2010-02-14 05:40:27 -0800</date>
            <delta_ts>2010-03-22 08:17:54 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-34924-20100214224024.patch</filename>
            <type>text/plain</type>
            <size>13990</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDk2MWNmMC4uYTdlNjYwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMC0wMi0xNCAgS2VudCBUYW11cmEg
IDx0a2VudEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIGNoZWNrcyBpZiBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCkg
YW5kCisgICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpIGFyZSBjYWxsZWQgY29ycmVjdGx5
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5MjQK
KworICAgICAgICBJbnRyb2R1Y2UgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6bV93aWxsVmFsaWRh
dGUgYW5kCisgICAgICAgIG1faXNWYWxpZC4gVGhleSBhcmUgdGhlIGNhY2hlcyBvZiB3aWxsVmFs
aWRhdGUoKSBhbmQKKyAgICAgICAgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpLiBzZXROZWVk
c1dpbGxWYWxpZGF0ZUNoZWNrKCkgdXBkYXRlcworICAgICAgICBtX3dpbGxWYWxpZGF0ZSBhbmQg
c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCkgdXBkYXRlcyBtX2lzVmFsaWQuCisKKyAgICAgICAgd2ls
bFZhbGlkYXRlKCkgYW5kIGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSBoYXZlIGFzc2VydGlv
bnMgdG8KKyAgICAgICAgY2hlY2sgbV93aWxsdmFsaWRhdGUgb3IgbV9pc1ZhbGlkIGhhcyB0aGUg
Y29ycmVjdCBzdGF0ZS4gSWYKKyAgICAgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpIG9y
IHNldE5lZWRzVmFsaWRpdHlDaGVjaygpIGlzIG5lZWRlZAorICAgICAgICB0byBiZSBjYWxsZWQg
YW5kIGlzIG5vdCBjYWxsZWQsIHRoZXNlIGFzc2VydGlvbnMgZmFpbC4KKworICAgICAgICAqIGh0
bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVt
ZW50OjpyZWNhbGNXaWxsVmFsaWRhdGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6cmVjYWxjV2ls
bFZhbGlkYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9s
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpyZWNhbGNXaWxsVmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250
cm9sRWxlbWVudDo6d2lsbFZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2spOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRhdGlvbk1lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9sRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROZWVkc1Zh
bGlkaXR5Q2hlY2spOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oOgor
ICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjpzZXRJbnB1dFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6cmVjYWxjV2lsbFZhbGlkYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0Tm9uRGlydHlWYWx1ZSk6CisKIDIwMTAt
MDItMTMgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25F
bGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaAppbmRleCBmNWI5YjYy
Li5mNGRmNTcxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaAor
KysgYi9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaApAQCAtNTcsMTEgKzU3LDEwIEBA
IHB1YmxpYzoKICAgICBTdHJpbmcgdmFsdWUoKSBjb25zdDsKICAgICB2b2lkIHNldFZhbHVlKGNv
bnN0IFN0cmluZyYpOwogCi0gICAgdmlydHVhbCBib29sIHdpbGxWYWxpZGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgCiBwcml2YXRlOgogICAgIGVudW0gVHlwZSB7IFNVQk1JVCwg
UkVTRVQsIEJVVFRPTiB9OwogICAgIHZpcnR1YWwgYm9vbCBpc09wdGlvbmFsRm9ybUNvbnRyb2wo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxp
ZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBUeXBlIG1fdHlwZTsKICAgICBi
b29sIG1fYWN0aXZlU3VibWl0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNl
dEVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgKaW5kZXggMDkw
MDMxNy4uNDU3ZmU5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1l
bnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCkBAIC00Nyw4ICs0
Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0Owog
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJl
bmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9s
VHlwZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHdpbGxWYWxpZGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Citwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCByZWNhbGNXaWxsVmFs
aWRhdGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogfTsKIAogfSAvL25hbWVzcGFjZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDZmMjRlMGMuLmQ4ZTFiZmIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysg
Yi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTU3LDYgKzU3LDgg
QEAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2MKICAgICAsIG1fcmVhZE9ubHkoZmFsc2UpCiAgICAg
LCBtX3JlcXVpcmVkKGZhbHNlKQogICAgICwgbV92YWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSkK
KyAgICAsIG1fd2lsbFZhbGlkYXRlKGZhbHNlKQorICAgICwgbV9pc1ZhbGlkKHRydWUpCiB7CiAg
ICAgaWYgKCFtX2Zvcm0pCiAgICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKQEAg
LTkwLDcgKzkyLDYgQEAgVmFsaWRpdHlTdGF0ZSogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFs
aWRpdHkoKQogCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKLSAgICBib29sIG9sZFdpbGxWYWxpZGF0ZSA9
IHdpbGxWYWxpZGF0ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpCiAgICAg
ICAgIG1faGFzTmFtZSA9ICFhdHRyLT5pc0VtcHR5KCk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IGRpc2FibGVkQXR0cikgewpAQCAtMTEyLDEyICsxMTMsMTMgQEAgdm9pZCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0
dHIpCiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVxdWlyZWRBdHRyKSB7CiAgICAg
ICAgIGJvb2wgb2xkUmVxdWlyZWQgPSBtX3JlcXVpcmVkOwogICAgICAgICBtX3JlcXVpcmVkID0g
IWF0dHItPmlzTnVsbCgpOwotICAgICAgICBpZiAob2xkUmVxdWlyZWQgIT0gbV9yZXF1aXJlZCkK
LSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaWYgKG9sZFJlcXVp
cmVkICE9IG1fcmVxdWlyZWQpIHsKKyAgICAgICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygp
OworICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOyAvLyBVcGRhdGVzIGZvciA6cmVx
dWlyZWQgOm9wdGlvbmFsIGNsYXNzZXMuCisgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAg
SFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotICAgIGlmIChvbGRXaWxs
VmFsaWRhdGUgIT0gd2lsbFZhbGlkYXRlKCkpCi0gICAgICAgIHNldE5lZWRzV2lsbFZhbGlkYXRl
Q2hlY2soKTsKKyAgICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7CiB9CiAKIHZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKQEAgLTI5OSwyNiArMzAxLDM2IEBAIHNob3J0
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKICAgICByZXR1cm4gRWxl
bWVudDo6dGFiSW5kZXgoKTsKIH0KIAotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp3aWxs
VmFsaWRhdGUoKSBjb25zdAorYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWNhbGNXaWxs
VmFsaWRhdGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnRhdGlvbiBzaGFsbCBi
ZSBjb21wbGV0ZWQgd2l0aCB0aGVzZSBjaGVja3M6Ci0gICAgLy8gICAgICBUaGUgY29udHJvbCBk
b2VzIG5vdCBoYXZlIGEgcmVwZXRpdGlvbiB0ZW1wbGF0ZSBhcyBhbiBhbmNlc3Rvci4KLSAgICAv
LyAgICAgIFRoZSBjb250cm9sIGRvZXMgbm90IGhhdmUgYSBkYXRhbGlzdCBlbGVtZW50IGFzIGFu
IGFuY2VzdG9yLgotICAgIC8vICAgICAgVGhlIGNvbnRyb2wgaXMgbm90IGFuIG91dHB1dCBlbGVt
ZW50LgorICAgIC8vIEZJWE1FOiBDaGVjayBpZiB0aGUgY29udHJvbCBkb2VzIG5vdCBoYXZlIGEg
ZGF0YWxpc3QgZWxlbWVudCBhcyBhbiBhbmNlc3Rvci4KICAgICByZXR1cm4gbV9mb3JtICYmIG1f
aGFzTmFtZSAmJiAhbV9kaXNhYmxlZCAmJiAhbV9yZWFkT25seTsKIH0KIAotU3RyaW5nIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkKK2Jvb2wgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6d2lsbFZhbGlkYXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdmFsaWRpdHko
KS0+dmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICAvLyBJZiB0aGUgZm9sbG93aW5nIGFzc2VydGlv
biBmYWlscywgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpIGlzIG5vdAorICAgIC8vIGNhbGxl
ZCBjb3JyZWN0bHkgd2hlbiBzb21ldGhpbmcgd2hpY2ggY2hhbmdlcyByZWNhbGNXaWxsVmFsaWRh
dGUoKSByZXN1bHQKKyAgICAvLyBpcyB1cGRhdGVkLgorICAgIEFTU0VSVChtX3dpbGxWYWxpZGF0
ZSA9PSByZWNhbGNXaWxsVmFsaWRhdGUoKSk7CisgICAgcmV0dXJuIG1fd2lsbFZhbGlkYXRlOwog
fQogCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlkYXRlQ2hl
Y2soKQogeworICAgIGJvb2wgbmV3V2lsbFZhbGlkYXRlID0gcmVjYWxjV2lsbFZhbGlkYXRlKCk7
CisgICAgaWYgKG1fd2lsbFZhbGlkYXRlID09IG5ld1dpbGxWYWxpZGF0ZSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fd2lsbFZhbGlkYXRlID0gbmV3V2lsbFZhbGlkYXRlOwogICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKICAgICAvLyBGSVhNRTogU2hvdy9oaWRlIGEgdmFsaWRhdGlvbiBtZXNz
YWdlLgogfQogCitTdHJpbmcgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRhdGlvbk1lc3Nh
Z2UoKQoreworICAgIHJldHVybiB2YWxpZGl0eSgpLT52YWxpZGF0aW9uTWVzc2FnZSgpOworfQor
CiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoKQogewogICAgIGlm
ICh3aWxsVmFsaWRhdGUoKSAmJiAhaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSB7CkBAIC0z
MjksMTIgKzM0MSwyMiBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRp
dHkoKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKQoreworICAgIC8vIElmIHRoZSBmb2xsb3dpbmcg
YXNzZXJ0aW9uIGZhaWxzLCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKSBpcyBub3QgY2FsbGVkCisg
ICAgLy8gY29ycmVjdGx5IHdoZW4gc29tZXRoaW5nIHdoaWNoIGNoYW5nZXMgdmFsaWRpdHkgaXMg
dXBkYXRlZC4KKyAgICBBU1NFUlQobV9pc1ZhbGlkID09IHZhbGlkaXR5KCktPnZhbGlkKCkpOwor
ICAgIHJldHVybiBtX2lzVmFsaWQ7Cit9CisKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCkKIHsKLSAgICBpZiAod2lsbFZhbGlkYXRlKCkpIHsKKyAg
ICBib29sIG5ld0lzVmFsaWQgPSB2YWxpZGl0eSgpLT52YWxpZCgpOworICAgIGlmICh3aWxsVmFs
aWRhdGUoKSAmJiBuZXdJc1ZhbGlkICE9IG1faXNWYWxpZCkgewogICAgICAgICAvLyBVcGRhdGUg
c3R5bGUgZm9yIHBzZXVkbyBjbGFzc2VzIHN1Y2ggYXMgOnZhbGlkIDppbnZhbGlkLgogICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgfQorICAgIG1faXNWYWxpZCA9IG5ld0lzVmFs
aWQ7CiAgICAgLy8gRklYTUU6IHNob3cvaGlkZSBhIHZhbGlkYXRpb24gbWVzc2FnZS4KIH0KIApA
QCAtMzY5LDExICszOTEsNiBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRGVmYXVs
dEJ1dHRvbkZvckZvcm0oKSBjb25zdAogICAgIHJldHVybiBpc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0
b24oKSAmJiBtX2Zvcm0gJiYgbV9mb3JtLT5kZWZhdWx0QnV0dG9uKCkgPT0gdGhpczsKIH0KIAot
Ym9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkK
LXsKLSAgICByZXR1cm4gdmFsaWRpdHkoKS0+dmFsaWQoKTsKLX0KLQogdm9pZCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpyZW1vdmVGcm9tRm9ybSgpCiB7CiAgICAgaWYgKCFtX2Zvcm0pCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIGIvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCAxMTcwODdiLi4zMTI1NjdkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCisrKyBiL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHNob3J0IHRhYkluZGV4KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgd2lsbFZhbGlkYXRlKCkgY29uc3Q7CisgICAgYm9vbCB3aWxsVmFsaWRhdGUoKSBjb25z
dDsKICAgICBTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2UoKTsKICAgICBib29sIGNoZWNrVmFsaWRp
dHkoKTsKICAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdoZW4gYSB2YWxpZGF0aW9uIGNvbnN0
cmFpbnQgb3IgY29udHJvbCB2YWx1ZSBpcyBjaGFuZ2VkLgpAQCAtMTI1LDYgKzEyNSw3IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIHJlbW92ZUZyb21Gb3JtKCk7CiAgICAgLy8gVGhpcyBtdXN0IGJl
IGNhbGxlZCBhbnkgdGltZSB0aGUgcmVzdWx0IG9mIHdpbGxWYWxpZGF0ZSgpIGhhcyBjaGFuZ2Vk
LgogICAgIHZvaWQgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOworICAgIHZpcnR1YWwgYm9v
bCByZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhU
TUxGb3JtRWxlbWVudCogdmlydHVhbEZvcm0oKSBjb25zdDsKQEAgLTEzOCw2ICsxMzksMTAgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fcmVhZE9ubHkgOiAxOwogICAgIGJvb2wgbV9yZXF1aXJlZCA6
IDE7CiAgICAgYm9vbCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyIDogMTsKKyAgICBib29sIG1fd2ls
bFZhbGlkYXRlIDogMTsKKyAgICAvLyBDYWNoZSBvZiB2YWxpZGl0eSgpLT52YWxpZCgpLgorICAg
IC8vICJjYW5kaWRhdGUgZm9yIGNvbnN0cmFpbnQgdmFsaWRhdGlvbiIgZG9lc24ndCBhZmZlY3Qg
dG8gbV9pc1ZhbGlkLgorICAgIGJvb2wgbV9pc1ZhbGlkIDogMTsKIH07CiAKIGNsYXNzIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVu
dCB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggNWI5MTIzZC4uMzE3Mjk4OCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtODAyLDcgKzgwMiw2IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6c2V0SW5wdXRUeXBlKGNvbnN0IFN0cmluZyYgdCkKICAgICAvLyB0eXBlIGNo
YW5nZSwgb3RoZXJ3aXNlIGEgSmF2YVNjcmlwdCBwcm9ncmFtbWVyIHdvdWxkIGJlIGFibGUgdG8g
c2V0IGEgdGV4dAogICAgIC8vIGZpZWxkJ3MgdmFsdWUgdG8gc29tZXRoaW5nIGxpa2UgL2V0Yy9w
YXNzd2QgYW5kIHRoZW4gY2hhbmdlIGl0IHRvIGEgZmlsZSBmaWVsZC4KICAgICBpZiAoaW5wdXRU
eXBlKCkgIT0gbmV3VHlwZSkgewotICAgICAgICBib29sIG9sZFdpbGxWYWxpZGF0ZSA9IHdpbGxW
YWxpZGF0ZSgpOwogICAgICAgICBpZiAobmV3VHlwZSA9PSBGSUxFICYmIG1faGF2ZVR5cGUpCiAg
ICAgICAgICAgICAvLyBTZXQgdGhlIGF0dHJpYnV0ZSBiYWNrIHRvIHRoZSBvbGQgdmFsdWUuCiAg
ICAgICAgICAgICAvLyBVc2VmdWwgaW4gY2FzZSB3ZSB3ZXJlIGNhbGxlZCBmcm9tIGluc2lkZSBw
YXJzZU1hcHBlZEF0dHJpYnV0ZS4KQEAgLTg1OSw5ICs4NTgsOCBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnNldElucHV0VHlwZShjb25zdCBTdHJpbmcmIHQpCiAgICAgICAgICAgICBjaGVja2Vk
UmFkaW9CdXR0b25zKHRoaXMpLmFkZEJ1dHRvbih0aGlzKTsKICAgICAgICAgfQogCisgICAgICAg
IHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNo
ZWNrKCk7Ci0gICAgICAgIGlmIChvbGRXaWxsVmFsaWRhdGUgIT0gd2lsbFZhbGlkYXRlKCkpCi0g
ICAgICAgICAgICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7CiAgICAgICAgIElucHV0RWxl
bWVudDo6bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCh0aGlzKTsKICAgICB9CiAgICAgbV9oYXZlVHlw
ZSA9IHRydWU7CkBAIC0xMTQzLDggKzExNDEsMTEgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiAgICAgICAgICAgICAg
ICB8fCBhdHRyLT5uYW1lKCkgPT0gaW5jcmVtZW50YWxBdHRyKQogICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1pbkF0dHIKLSAgICAg
ICAgICAgICB8fCBhdHRyLT5uYW1lKCkgPT0gbWF4QXR0cgotICAgICAgICAgICAgIHx8IGF0dHIt
Pm5hbWUoKSA9PSBtdWx0aXBsZUF0dHIKKyAgICAgICAgICAgICB8fCBhdHRyLT5uYW1lKCkgPT0g
bWF4QXR0cikgeworICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKKyAgICAgICAgaWYg
KGlucHV0VHlwZSgpID09IFJBTkdFKQorICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygp
OworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG11bHRpcGxlQXR0cgogICAgICAgICAg
ICAgIHx8IGF0dHItPm5hbWUoKSA9PSBwYXR0ZXJuQXR0cgogICAgICAgICAgICAgIHx8IGF0dHIt
Pm5hbWUoKSA9PSBwcmVjaXNpb25BdHRyCiAgICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09
IHN0ZXBBdHRyKQpAQCAtMTU2NCwxMCArMTU2NSwxMiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgc2VuZENoYW5nZUV2ZW50KQogCiAg
ICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CiAgICAgaWYgKHN0
b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkpIHsKLSAgICAgICAgaWYgKGlucHV0VHlw
ZSgpID09IEZJTEUpCisgICAgICAgIGlmIChpbnB1dFR5cGUoKSA9PSBGSUxFKSB7CiAgICAgICAg
ICAgICBtX2ZpbGVMaXN0LT5jbGVhcigpOwotICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNl
dE5lZWRzVmFsaWRpdHlDaGVjaygpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9k
YXRhLnNldFZhbHVlKHNhbml0aXplVmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIHNldE5lZWRz
VmFsaWRpdHlDaGVjaygpOwogICAgICAgICAgICAgaWYgKGlzVGV4dEZpZWxkKCkpIHsKICAgICAg
ICAgICAgICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOwogICAgICAgICAg
ICAgICAgIGlmIChpbkRvY3VtZW50KCkpCkBAIC0xNTc3LDggKzE1ODAsMTAgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIHNlbmRDaGFu
Z2VFdmVudCkKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZW5kZXJlcigp
LT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0g
ICAgfSBlbHNlCisgICAgfSBlbHNlIHsKICAgICAgICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0ciwg
c2FuaXRpemVWYWx1ZSh2YWx1ZSkpOworICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsK
KyAgICB9CiAKICAgICBpZiAoaXNUZXh0RmllbGQoKSkgewogICAgICAgICB1bnNpZ25lZCBtYXgg
PSBtX2RhdGEudmFsdWUoKS5sZW5ndGgoKTsKQEAgLTE1OTUsNyArMTYwMCw2IEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBzZW5kQ2hh
bmdlRXZlbnQpCiAgICAgICAgIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogCiAg
ICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOwotICAgIHNldE5l
ZWRzVmFsaWRpdHlDaGVjaygpOwogfQogCiBkb3VibGUgSFRNTElucHV0RWxlbWVudDo6cGFyc2VU
b0RvdWJsZShjb25zdCBTdHJpbmcmIHNyYywgZG91YmxlIGRlZmF1bHRWYWx1ZSkgY29uc3QKQEAg
LTI2MDMsMTEgKzI2MDcsMTAgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjphZGRTdWJyZXNvdXJj
ZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnMKICAgICBhZGRTdWJy
ZXNvdXJjZVVSTCh1cmxzLCBzcmMoKSk7CiB9CiAKLWJvb2wgSFRNTElucHV0RWxlbWVudDo6d2ls
bFZhbGlkYXRlKCkgY29uc3QKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6cmVjYWxjV2lsbFZhbGlk
YXRlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBzaGFsbCBjaGVjayBmb3IgbmV3IFdG
MiBpbnB1dCB0eXBlcyB0b28KLSAgICByZXR1cm4gSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZTo6d2lsbFZhbGlkYXRlKCkgJiYgaW5wdXRUeXBlKCkgIT0gSElEREVOICYmCi0gICAgICAg
ICAgIGlucHV0VHlwZSgpICE9IEJVVFRPTiAmJiBpbnB1dFR5cGUoKSAhPSBSRVNFVDsKKyAgICBy
ZXR1cm4gSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6cmVjYWxjV2lsbFZhbGlkYXRl
KCkKKyAgICAgICAgJiYgaW5wdXRUeXBlKCkgIT0gSElEREVOICYmIGlucHV0VHlwZSgpICE9IEJV
VFRPTiAmJiBpbnB1dFR5cGUoKSAhPSBSRVNFVDsKIH0KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1l
bnQ6OnNlcmlhbGl6ZUZvck51bWJlclR5cGUoZG91YmxlIG51bWJlcikKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oCmluZGV4IDQwOTMwYWMuLjk1MmM5MWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApA
QCAtMjU3LDggKzI1Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNv
dXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKICAgICAKLSAgICB2
aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29uc3Q7Ci0KICAgICAvLyBDb252ZXJ0cyB0aGUg
c3BlY2lmaWVkIHN0cmluZyB0byBhIGZsb2F0aW5nIG51bWJlci4KICAgICAvLyBJZiB0aGUgY29u
dmVyc2lvbiBmYWlscywgdGhlIHJldHVybiB2YWx1ZSBpcyBmYWxzZS4gVGFrZSBjYXJlIHRoYXQg
bGVhZGluZyBvciB0cmFpbGluZyB1bm5lY2Vzc2FyeSBjaGFyYWN0ZXJzIG1ha2UgZmFpbHVyZXMu
ICBUaGlzIHJldHVybnMgZmFsc2UgZm9yIGFuIGVtcHR5IHN0cmluZyBpbnB1dC4KICAgICAvLyBU
aGUgZG91YmxlKiBwYXJhbWV0ZXIgbWF5IGJlIDAuCkBAIC0yOTEsNiArMjg5LDcgQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc09wdGlvbmFsRm9ybUNvbnRyb2woKSBjb25zdCB7IHJl
dHVybiAhaXNSZXF1aXJlZEZvcm1Db250cm9sKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZXF1
aXJlZEZvcm1Db250cm9sKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxp
ZGF0ZSgpIGNvbnN0OwogCiAgICAgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGNyZWF0ZVRl
bXBvcmFyeUZvcm1Gb3JJc0luZGV4KCk7CiAgICAgLy8gSGVscGVyIGZvciBnZXRBbGxvd2VkVmFs
dWVTdGVwKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5j
cHAgYi9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggNzliZjQ1Zi4u
ZWM1ZjIyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
CisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAtMjkxLDYgKzI5
MSw3IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0Tm9uRGlydHlWYWx1ZShjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3ZhbHVlID0gbm9ybWFsaXpl
ZFZhbHVlOworICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogICAgIG1faXNEaXJ0eSA9IGZh
bHNlOwogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CiAgICAg
dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKQEAgLTMwNSw3ICszMDYsNiBAQCB2
b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldE5vbkRpcnR5VmFsdWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICAgc2V0U2VsZWN0aW9uUmFuZ2UoZW5kT2ZTdHJpbmcsIGVuZE9mU3RyaW5n
KTsKICAgICB9CiAKLSAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKICAgICBub3RpZnlGb3Jt
U3RhdGVDaGFuZ2VkKHRoaXMpOwogfQogCg==
</data>
<flag name="review"
          id="31444"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>