<?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>212945</bug_id>
          
          <creation_ts>2020-06-08 18:15:21 -0700</creation_ts>
          <short_desc>Extended Color: Streamline SimpleColor premulitply/unpremultiply code</short_desc>
          <delta_ts>2020-06-09 14:46:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>darin</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1660526</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-08 18:15:21 -0700</bug_when>
    <thetext>Extended Color: Streamline SimpleColor premulitply/unpremultiply code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660527</commentid>
    <comment_count>1</comment_count>
      <attachid>401404</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-08 18:23:01 -0700</bug_when>
    <thetext>Created attachment 401404
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660528</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-08 18:23:40 -0700</bug_when>
    <thetext>Now that the signatures only take SimpleColors, I am not sure if I should just make these members of SimpleColor. For now, this feels a lot more clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660753</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-09 11:21:13 -0700</bug_when>
    <thetext>For simple value types with no hidden state like SimpleColor, I personally want member functions kept to the absolute minimum. Free functions are far more flexible.

But also, I wish this was a different programming language, where syntax and encapsulation weren’t so closely tied together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660792</commentid>
    <comment_count>4</comment_count>
      <attachid>401461</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-09 12:27:46 -0700</bug_when>
    <thetext>Created attachment 401461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660803</commentid>
    <comment_count>5</comment_count>
      <attachid>401461</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-09 12:51:24 -0700</bug_when>
    <thetext>Comment on attachment 401461
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        - Removing overloads that didn&apos;t took the seperated components, keeping 

&quot;didn&apos;t took the separated&quot; is not good grammar, and spells &quot;separated&quot; wrong

&gt; Source/WebCore/ChangeLog:14
&gt; +        - Simplifying the names from makePremultipliedSimpleColor/makeUnpremultipliedSimpleColor
&gt; +          to premultiplyFlooring/premultiplyCeiling/unpremultiply.

The use of &quot;ceil&quot; here as a verb with &quot;ceiling&quot; as its gerund is not awesome.

No call for premultiplying with rounding?

I’m not sure how I feel about these functions with verb names. I think we would call these &quot;premultiplied&quot; rather than &quot;premultiply&quot;, but not sure that fully works with the rest of the naming.

&gt; Source/WebCore/ChangeLog:15
&gt; +        - Where component order is impotant, use valueAsARGB() explicitly to

&quot;impotant&quot;

&gt; Source/WebCore/platform/graphics/Color.cpp:269
&gt; +    // Since premultiplyCeiling() bails on zero alpha, special-case that.

Seems like something we might eventually want to address.

&gt; Source/WebCore/platform/graphics/Color.cpp:270
&gt; +    auto premultFrom = from.alpha() ? premultiplyCeiling(from.toSRGBASimpleColorLossy()) : Color::transparent;

I would have renamed all these &quot;premult&quot; to &quot;premultiplied&quot;.

&gt; Source/WebCore/platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp:83
&gt; +            auto pixelColor = unpremultiply(SimpleColor { *pixel });

I’m not sure I am on board with the strategy where we use valueAsARGB() to emphasize the meaning of the returned integer, but construct SimpleColor from a 32-bit integer with no disambiguation for the meaning there. Maybe there’s a future step coming to solve that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660840</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-09 13:54:19 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 401461 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=401461&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        - Removing overloads that didn&apos;t took the seperated components, keeping 
&gt; 
&gt; &quot;didn&apos;t took the separated&quot; is not good grammar, and spells &quot;separated&quot; wrong
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +        - Simplifying the names from makePremultipliedSimpleColor/makeUnpremultipliedSimpleColor
&gt; &gt; +          to premultiplyFlooring/premultiplyCeiling/unpremultiply.
&gt; 
&gt; The use of &quot;ceil&quot; here as a verb with &quot;ceiling&quot; as its gerund is not awesome.
&gt; 
&gt; No call for premultiplying with rounding?

Agreed, though I stole the name from your patch on 180620 :)

&gt; 
&gt; I’m not sure how I feel about these functions with verb names. I think we
&gt; would call these &quot;premultiplied&quot; rather than &quot;premultiply&quot;, but not sure
&gt; that fully works with the rest of the naming.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        - Where component order is impotant, use valueAsARGB() explicitly to
&gt; 
&gt; &quot;impotant&quot;

Will fix.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:269
&gt; &gt; +    // Since premultiplyCeiling() bails on zero alpha, special-case that.
&gt; 
&gt; Seems like something we might eventually want to address.

Yeah, since we check for 0 already there, we could totally just return transparent there. Will look into that in a follow up.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:270
&gt; &gt; +    auto premultFrom = from.alpha() ? premultiplyCeiling(from.toSRGBASimpleColorLossy()) : Color::transparent;
&gt; 
&gt; I would have renamed all these &quot;premult&quot; to &quot;premultiplied&quot;.

Will fix.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp:83
&gt; &gt; +            auto pixelColor = unpremultiply(SimpleColor { *pixel });
&gt; 
&gt; I’m not sure I am on board with the strategy where we use valueAsARGB() to
&gt; emphasize the meaning of the returned integer, but construct SimpleColor
&gt; from a 32-bit integer with no disambiguation for the meaning there. Maybe
&gt; there’s a future step coming to solve that?

Yeah, my thought was to introduce a makeSimpleColorFromARGB (or some name like that) at some point and remove the constructor. From Simon&apos;s comments in other bugs, the fact that we use ARGB as the format is a bit surprising to some, so might as well make it explicit.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660849</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-09 14:05:11 -0700</bug_when>
    <thetext>Committed r262810: &lt;https://trac.webkit.org/changeset/262810&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660856</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-09 14:06:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/64179100&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660874</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-09 14:46:55 -0700</bug_when>
    <thetext>Maybe at some point we’ll change our minds and use a different class for the premultiplied data. Presumably you can’t use it in a Color and have it work correctly. It’s another aspect of how to interpret the channel values, analogous to color space. And SimpleColor is 4 bytes that are implicitly in the sRGB space and should probably also be implicitly not premultiplied for the same reason. As opposed to a more general &quot;4 channels with no judgment about how they are used&quot;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401404</attachid>
            <date>2020-06-08 18:23:01 -0700</date>
            <delta_ts>2020-06-09 12:27:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212945-20200608182300.patch</filename>
            <type>text/plain</type>
            <size>11426</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mjc2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDIwLTA2LTA4ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogU3RyZWFt
bGluZSBTaW1wbGVDb2xvciBwcmVtdWxpdHBseS91bnByZW11bHRpcGx5IGNvZGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjk0NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbXBsaWZ5IC8gc3RyZWFt
bGluZSB0aGUgcHJlbXVsaXRwbHkvdW5wcmVtdWx0aXBseSBjb2RlIGJ5OgorICAgICAgICAtIFJl
bW92aW5nIG92ZXJsb2FkcyB0aGF0IGRpZG4ndCB0b29rIHRoZSBzZXBlcmF0ZWQgY29tcG9uZW50
cywga2VlcGluZyAKKyAgICAgICAgICBvbmx5IHRoZSBvbmVzIHRha2luZyBhIFNpbXBsZUNvbG9y
CisgICAgICAgIC0gUmVwbGFjaW5nIHRoZSAiY2VpbGluZyIgYm9vbCBpbiBtYWtlUHJlbXVsdGlw
bGllZFNpbXBsZUNvbG9yIGFuZCBjb252ZXJ0aW5nCisgICAgICAgICAgaXQgaW50byB0d28gZnVu
Y3Rpb25zLgorICAgICAgICAtIFNpbXBsaWZ5aW5nIHRoZSBuYW1lcyBmcm9tIG1ha2VQcmVtdWx0
aXBsaWVkU2ltcGxlQ29sb3IvbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yCisgICAgICAg
ICAgdG8gcHJlbXVsdGlwbHlGbG9vcmluZy9wcmVtdWx0aXBseUNlaWxpbmcvdW5wcmVtdWx0aXBs
eS4KKyAgICAgICAgLSBXaGVyZSBjb21wb25lbnQgb3JkZXIgaXMgaW1wb3RhbnQsIHVzZSB2YWx1
ZUFzQVJHQigpIGV4cGxpY2l0bHkgdG8KKyAgICAgICAgICBzaG93IHdoYXQgdGhlIHJlc3VsdGlu
ZyB2YWx1ZSdzIGZvcm1hdCB3aWxsIGJlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICBVcGRhdGUgdG8g
Y2FsbCBwcmVtdWx0aXBseUNlaWxpbmcvdW5wcmVtdWx0aXBseS4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6YmxlbmRQaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tp
bmdTdG9yZTo6cGl4ZWxWYWx1ZSBjb25zdCk6CisgICAgICAgIFVwZGF0ZSB0byBjYWxsIHByZW11
bHRpcGx5Rmxvb3JpbmcvdW5wcmVtdWx0aXBseSBhbmQgdmFsdWVBc0FSR0IoKQorICAgICAgICAK
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJl
bXVsdGlwbHlGbG9vcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBseUNlaWxpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6dW5wcmVtdWx0aXBseUNoYW5uZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6dW5wcmVtdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hh
bm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVs
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29s
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVVucHJlbXVsdGlwbGllZFNpbXBs
ZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgU2ltcGxpZnkgcHJlbXVsaXRwbHkvdW5wcmVtdWx0
aXBseSBpbnRlcmZhY2VzLiBVc2Ugc3RydWN0dXJlZCBiaW5kaW5ncyB0byBtYWtlCisgICAgICAg
IHRoZSBjb2RlIGEgYml0IGVhc2llciB0byBmb2xsb3cgYXMgd2VsbC4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgIFVwZGF0
ZSB0byBjYWxsIHByZW11bHRpcGx5Rmxvb3JpbmcvdW5wcmVtdWx0aXBseSBhbmQgdmFsdWVBc0FS
R0IoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fp
cm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29s
b3IpOgorICAgICAgICBVcGRhdGUgdG8gY2FsbCBwcmVtdWx0aXBseUZsb29yaW5nL3VucHJlbXVs
dGlwbHkgYW5kIHZhbHVlQXNBUkdCKCkuCisKIDIwMjAtMDYtMDggIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgogCiAgICAgICAgIEV4dGVuZGVkIENvbG9yOiBSZW5hbWUgQ29sb3I6Omxp
Z2h0ZW4oKSBhbmQgQ29sb3I6OmRhcmtlbigpIHRvIENvbG9yOjpsaWdodGVuZWQoKSBhbmQgQ29s
b3I6OmRhcmtlbmVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAJKHJldmlzaW9uIDI2Mjc0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDkgKzI2Niw5IEBAIENvbG9y
IGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2wKICAgICBpZiAocHJvZ3Jlc3MgPT0g
MSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgLy8gU2luY2Ug
bWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcigpIGJhaWxzIG9uIHplcm8gYWxwaGEsIHNwZWNp
YWwtY2FzZSB0aGF0LgotICAgIGF1dG8gcHJlbXVsdEZyb20gPSBmcm9tLmFscGhhKCkgPyBtYWtl
UHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGZyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkg
OiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYXV0byBwcmVtdWx0VG8gPSB0by5hbHBoYSgpID8g
bWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcih0by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
KSA6IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICAvLyBTaW5jZSBwcmVtdWx0aXBseUNlaWxpbmco
KSBiYWlscyBvbiB6ZXJvIGFscGhhLCBzcGVjaWFsLWNhc2UgdGhhdC4KKyAgICBhdXRvIHByZW11
bHRGcm9tID0gZnJvbS5pc1Zpc2libGUoKSA/IHByZW11bHRpcGx5Q2VpbGluZyhmcm9tLnRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OworICAgIGF1dG8gcHJl
bXVsdFRvID0gdG8uaXNWaXNpYmxlKCkgPyBwcmVtdWx0aXBseUNlaWxpbmcodG8udG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKSkgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAKICAgICBTaW1wbGVDb2xv
ciBwcmVtdWx0QmxlbmRlZCA9IG1ha2VTaW1wbGVDb2xvcigKICAgICAgICAgV2ViQ29yZTo6Ymxl
bmQocHJlbXVsdEZyb20ucmVkQ29tcG9uZW50KCksIHByZW11bHRUby5yZWRDb21wb25lbnQoKSwg
cHJvZ3Jlc3MpLApAQCAtMjc3LDcgKzI3Nyw3IEBAIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBm
cm9tLCBjb25zdCBDb2wKICAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdEZyb20uYWxwaGFD
b21wb25lbnQoKSwgcHJlbXVsdFRvLmFscGhhQ29tcG9uZW50KCksIHByb2dyZXNzKQogICAgICk7
CiAKLSAgICByZXR1cm4gbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKHByZW11bHRCbGVu
ZGVkKTsKKyAgICByZXR1cm4gdW5wcmVtdWx0aXBseShwcmVtdWx0QmxlbmRlZCk7CiB9CiAKIENv
bG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xv
ciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkocmV2aXNpb24gMjYyNzQ3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTYwLDcgKzE2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgcGl4ZWwgPSBtYWtl
UHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKHBpeGVsLnJlZENvbXBvbmVudCgpLCBwaXhlbC5ncmVl
bkNvbXBvbmVudCgpLCBwaXhlbC5ibHVlQ29tcG9uZW50KCksIHBpeGVsLmFscGhhQ29tcG9uZW50
KCksIGZhbHNlKTsKKyAgICAgICAgICAgIHBpeGVsID0gcHJlbXVsdGlwbHlGbG9vcmluZyhwaXhl
bCk7CiAKICAgICAgICAgdW5zaWduZWQgZCA9IDI1NSAtIGE7CiAKQEAgLTE2OSwxMCArMTY5LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgYiA9IGZhc3REaXZpZGVCeTI1NShiICogYSArIHBpeGVsLmJs
dWVDb21wb25lbnQoKSAqIGQpOwogICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogcGl4
ZWwuYWxwaGFDb21wb25lbnQoKSk7CiAKLSAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkK
LSAgICAgICAgICAgICpkZXN0ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpLnZhbHVlKCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICpkZXN0ID0gbWFrZVVucHJlbXVsdGlwbGllZFNp
bXBsZUNvbG9yKHIsIGcsIGIsIGEpLnZhbHVlKCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbWFr
ZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpOworCisgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFs
cGhhKQorICAgICAgICAgICAgcmVzdWx0ID0gdW5wcmVtdWx0aXBseShyZXN1bHQpOworCisgICAg
ICAgICpkZXN0ID0gcmVzdWx0LnZhbHVlQXNBUkdCKCk7CiAgICAgfQogCiAgICAgc3RhdGljIGJv
b2wgaXNPdmVyU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMjI0LDEwICsyMjYsMTIgQEAg
cHJpdmF0ZToKICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiAhYSkKICAgICAgICAg
ICAgIHJldHVybiAwOwogCisgICAgICAgIGF1dG8gcmVzdWx0ID0gbWFrZVNpbXBsZUNvbG9yKHIs
IGcsIGIsIGEpOworCiAgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkK
LSAgICAgICAgICAgIHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKHIsIGcsIGIs
IGEsIGZhbHNlKS52YWx1ZSgpOworICAgICAgICAgICAgcmVzdWx0ID0gcHJlbXVsdGlwbHlGbG9v
cmluZyhyZXN1bHQpOwogCi0gICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwg
YSkudmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZUFzQVJHQigpOwogICAgIH0K
IAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50PiBtX3BpeGVsczsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJ
KHJldmlzaW9uIDI2Mjc0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzggKzMzLDMzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hh
bm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKQorU2ltcGxl
Q29sb3IgcHJlbXVsdGlwbHlGbG9vcmluZyhTaW1wbGVDb2xvciBjb2xvcikKIHsKLSAgICByZXR1
cm4gZmFzdERpdmlkZUJ5MjU1KGNlaWxpbmcgPyBjICogYSArIDI1NCA6IGMgKiBhKTsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGlmICghYSB8fCBhID09IDI1NSkKKyAgICAg
ICAgcmV0dXJuIGNvbG9yOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoZmFzdERpdmlkZUJ5
MjU1KHIgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGIgKiBh
KSwgYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5wcmVtdWx0aXBsaWVkQ2hhbm5l
bCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQorU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlDZWlsaW5n
KFNpbXBsZUNvbG9yIGNvbG9yKQogewotICAgIHJldHVybiAoZmFzdE11bHRpcGx5QnkyNTUoYykg
KyBhIC0gMSkgLyBhOwotfQotCi1TaW1wbGVDb2xvciBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNv
bG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxpbmcpCi17Ci0gICAgcmV0
dXJuIG1ha2VTaW1wbGVDb2xvcihwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhLCBjZWlsaW5nKSwg
cHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSwgY2VpbGluZyksIHByZW11bHRpcGxpZWRDaGFubmVs
KGIsIGEsIGNlaWxpbmcpLCBhKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAg
IGlmICghYSB8fCBhID09IDI1NSkKKyAgICAgICAgcmV0dXJuIGNvbG9yOworICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3IoZmFzdERpdmlkZUJ5MjU1KHIgKiBhICsgMjU0KSwgZmFzdERpdmlkZUJ5
MjU1KGcgKiBhICsgMjU0KSwgZmFzdERpdmlkZUJ5MjU1KGIgKiBhICsgMjU0KSwgYSk7CiB9CiAK
LVNpbXBsZUNvbG9yIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoU2ltcGxlQ29sb3IgcGl4
ZWxDb2xvcikKK3N0YXRpYyBpbmxpbmUgdWludDhfdCB1bnByZW11bHRpcGx5Q2hhbm5lbCh1aW50
OF90IGMsIHVpbnQ4X3QgYSkKIHsKLSAgICBpZiAocGl4ZWxDb2xvci5pc09wYXF1ZSgpKQotICAg
ICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKLSAgICByZXR1cm4gbWFrZVByZW11bHRpcGxpZWRTaW1w
bGVDb2xvcihwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9u
ZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9u
ZW50KCkpOwotfQotCi1TaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3Io
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCi17Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cih1bnByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGcs
IGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKKyAgICByZXR1cm4gKGZhc3RN
dWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKIH0KIAotU2ltcGxlQ29sb3IgbWFrZVVucHJl
bXVsdGlwbGllZFNpbXBsZUNvbG9yKFNpbXBsZUNvbG9yIHBpeGVsQ29sb3IpCitTaW1wbGVDb2xv
ciB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIGNvbG9yKQogewotICAgIGlmIChwaXhlbENvbG9y
LmlzVmlzaWJsZSgpICYmICFwaXhlbENvbG9yLmlzT3BhcXVlKCkpCi0gICAgICAgIHJldHVybiBt
YWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IocGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKSwg
cGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmJsdWVDb21wb25lbnQoKSwg
cGl4ZWxDb2xvci5hbHBoYUNvbXBvbmVudCgpKTsKLSAgICByZXR1cm4gcGl4ZWxDb2xvcjsKKyAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGlmICghYSB8fCBhID09IDI1NSkKKyAg
ICAgICAgcmV0dXJuIGNvbG9yOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodW5wcmVtdWx0
aXBseUNoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbHlDaGFubmVsKGcsIGEpLCB1bnByZW11bHRp
cGx5Q2hhbm5lbChiLCBhKSwgYSk7CiB9CiAKIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZy
b21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShy
ZXZpc2lvbiAyNjI3NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxMCArOTgsOSBAQCBTaW1wbGVDb2xvciBt
YWtlU2ltcGxlQ29sb3IoY29uc3QgQ29sb3JDCiBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JG
cm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwogU2ltcGxlQ29s
b3IgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZs
b2F0IGssIGZsb2F0IGEpOwogCi1TaW1wbGVDb2xvciBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNv
bG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKTsKLVNp
bXBsZUNvbG9yIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoU2ltcGxlQ29sb3IpOwotU2lt
cGxlQ29sb3IgbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50
IGIsIGludCBhKTsKLVNpbXBsZUNvbG9yIG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihT
aW1wbGVDb2xvcik7CitTaW1wbGVDb2xvciBwcmVtdWx0aXBseUZsb29yaW5nKFNpbXBsZUNvbG9y
KTsKK1NpbXBsZUNvbG9yIHByZW11bHRpcGx5Q2VpbGluZyhTaW1wbGVDb2xvcik7CitTaW1wbGVD
b2xvciB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yKTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQogewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tl
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjYy
NzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw5ICs4
MCw5IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQKICAgICAgICAg
dW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyAr
IHN0cmlkZSAqIHkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbG9naWNhbFNpemUu
d2lkdGgoKTsgeCsrKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4Owot
ICAgICAgICAgICAgYXV0byBwaXhlbENvbG9yID0gbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNv
bG9yKCpwaXhlbCk7CisgICAgICAgICAgICBhdXRvIHBpeGVsQ29sb3IgPSB1bnByZW11bHRpcGx5
KFNpbXBsZUNvbG9yIHsgKnBpeGVsIH0pOwogICAgICAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpXSwgbG9va1Vw
VGFibGVbcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xv
ci5ibHVlQ29tcG9uZW50KCldLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwotICAgICAg
ICAgICAgKnBpeGVsID0gbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihwaXhlbENvbG9yKS52
YWx1ZSgpOworICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbHlDZWlsaW5nKHBpeGVsQ29s
b3IpLnZhbHVlQXNBUkdCKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2Fpcm9fc3VyZmFjZV9t
YXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUu
d2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJv
LmNwcAkocmV2aXNpb24gMjYyNzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUz
LDggQEAgQ29sb3IgbmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IoYwogICAgIGlmIChj
YWlyb19zdXJmYWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVf
SU1BR0UpCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogCi0gICAgU2ltcGxlQ29sb3IqIHBpeGVs
ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8U2ltcGxlQ29sb3IqPihjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAgcmV0dXJuIG1ha2VVbnByZW11bHRpcGxpZWRT
aW1wbGVDb2xvcigqcGl4ZWwpOworICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPHVuc2lnbmVkKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZS5nZXQo
KSkpOworICAgIHJldHVybiB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIHsgKnBpeGVsIH0pOwog
fQogCiB2b2lkIGRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401461</attachid>
            <date>2020-06-09 12:27:46 -0700</date>
            <delta_ts>2020-06-09 12:51:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212945-20200609122746.patch</filename>
            <type>text/plain</type>
            <size>11723</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjgwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDIwLTA2LTA5ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogU3RyZWFt
bGluZSBTaW1wbGVDb2xvciBwcmVtdWxpdHBseS91bnByZW11bHRpcGx5IGNvZGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjk0NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbXBsaWZ5IC8gc3RyZWFt
bGluZSB0aGUgcHJlbXVsaXRwbHkvdW5wcmVtdWx0aXBseSBjb2RlIGJ5OgorICAgICAgICAtIFJl
bW92aW5nIG92ZXJsb2FkcyB0aGF0IGRpZG4ndCB0b29rIHRoZSBzZXBlcmF0ZWQgY29tcG9uZW50
cywga2VlcGluZyAKKyAgICAgICAgICBvbmx5IHRoZSBvbmVzIHRha2luZyBhIFNpbXBsZUNvbG9y
CisgICAgICAgIC0gUmVwbGFjaW5nIHRoZSAiY2VpbGluZyIgYm9vbCBpbiBtYWtlUHJlbXVsdGlw
bGllZFNpbXBsZUNvbG9yIGFuZCBjb252ZXJ0aW5nCisgICAgICAgICAgaXQgaW50byB0d28gZnVu
Y3Rpb25zLgorICAgICAgICAtIFNpbXBsaWZ5aW5nIHRoZSBuYW1lcyBmcm9tIG1ha2VQcmVtdWx0
aXBsaWVkU2ltcGxlQ29sb3IvbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yCisgICAgICAg
ICAgdG8gcHJlbXVsdGlwbHlGbG9vcmluZy9wcmVtdWx0aXBseUNlaWxpbmcvdW5wcmVtdWx0aXBs
eS4KKyAgICAgICAgLSBXaGVyZSBjb21wb25lbnQgb3JkZXIgaXMgaW1wb3RhbnQsIHVzZSB2YWx1
ZUFzQVJHQigpIGV4cGxpY2l0bHkgdG8KKyAgICAgICAgICBzaG93IHdoYXQgdGhlIHJlc3VsdGlu
ZyB2YWx1ZSdzIGZvcm1hdCB3aWxsIGJlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICBVcGRhdGUgdG8g
Y2FsbCBwcmVtdWx0aXBseUNlaWxpbmcvdW5wcmVtdWx0aXBseS4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6YmxlbmRQaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tp
bmdTdG9yZTo6cGl4ZWxWYWx1ZSBjb25zdCk6CisgICAgICAgIFVwZGF0ZSB0byBjYWxsIHByZW11
bHRpcGx5Rmxvb3JpbmcvdW5wcmVtdWx0aXBseSBhbmQgdmFsdWVBc0FSR0IoKQorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVDb2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBseUZs
b29yaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGx5Q2VpbGluZyk6CisgICAgICAg
IChXZWJDb3JlOjp1bnByZW11bHRpcGx5Q2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjp1bnBy
ZW11bHRpcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRDaGFubmVsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IpOiBE
ZWxldGVkLgorICAgICAgICBTaW1wbGlmeSBwcmVtdWxpdHBseS91bnByZW11bHRpcGx5IGludGVy
ZmFjZXMuIFVzZSBzdHJ1Y3R1cmVkIGJpbmRpbmdzIHRvIG1ha2UKKyAgICAgICAgdGhlIGNvZGUg
YSBiaXQgZWFzaWVyIHRvIGZvbGxvdyBhcyB3ZWxsLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwg
cHJlbXVsdGlwbHlGbG9vcmluZy91bnByZW11bHRpcGx5IGFuZCB2YWx1ZUFzQVJHQigpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAg
ICAgIFVwZGF0ZSB0byBjYWxsIHByZW11bHRpcGx5Rmxvb3JpbmcvdW5wcmVtdWx0aXBseSBhbmQg
dmFsdWVBc0FSR0IoKS4gQWxzbyByZW1vdmVzCisgICAgICAgIHJlaW50ZXJwcmV0IGNhc3QgdG8g
U2ltcGxlQ29sb3IsIGluc3RlYWQgZm9sbG93aW5nIHRoZSBtb2RlbCBpbiBJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZAorICAgICAgICBhbmQgY2FzdGluZyB0byB1bnNpZ25lZCwg
YW5kIGJ1aWxkaW5nIHRoZSBTaW1wbGVDb2xvciBmcm9tIHRoYXQuIFRoaXMgd2lsbCBhbGxvdyAK
KyAgICAgICAgU2ltcGxlQ29sb3IgdG8gY2hhbmdlIGl0cyB1bmRlcmx5aW5nIHJlcHJlc2VudGF0
aW9uIGluIHRoZSBmdXR1cmUgd2l0aG91dCBicmVha2luZyB0aGluZ3MuCisKIDIwMjAtMDYtMDkg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEJhc2VBdWRpb1No
YXJlZFVuaXQgc2hvdWxkIHVubXV0ZSBpdHMgY2xpZW50cyBpbiBjYXNlIG9mIHN1c3BlbnNpb24g
ZXZlbiBpZiBub3QgaGF2aW5nIGFueSBhdWRpbyB1bml0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjI4MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
Niw5ICsyNjYsOSBAQCBDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sCiAg
ICAgaWYgKHByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIC8vIFNpbmNlIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoKSBiYWlscyBv
biB6ZXJvIGFscGhhLCBzcGVjaWFsLWNhc2UgdGhhdC4KLSAgICBhdXRvIHByZW11bHRGcm9tID0g
ZnJvbS5hbHBoYSgpID8gbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihmcm9tLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGF1dG8gcHJlbXVs
dFRvID0gdG8uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IodG8udG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKSkgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgLy8gU2luY2Ug
cHJlbXVsdGlwbHlDZWlsaW5nKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRo
YXQuCisgICAgYXV0byBwcmVtdWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/IHByZW11bHRpcGx5Q2Vp
bGluZyhmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50
OworICAgIGF1dG8gcHJlbXVsdFRvID0gdG8uYWxwaGEoKSA/IHByZW11bHRpcGx5Q2VpbGluZyh0
by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIAogICAg
IFNpbXBsZUNvbG9yIHByZW11bHRCbGVuZGVkID0gbWFrZVNpbXBsZUNvbG9yKAogICAgICAgICBX
ZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVsdFRvLnJlZENv
bXBvbmVudCgpLCBwcm9ncmVzcyksCkBAIC0yNzcsNyArMjc3LDcgQEAgQ29sb3IgYmxlbmQoY29u
c3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0
RnJvbS5hbHBoYUNvbXBvbmVudCgpLCBwcmVtdWx0VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jl
c3MpCiAgICAgKTsKIAotICAgIHJldHVybiBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3Io
cHJlbXVsdEJsZW5kZWQpOworICAgIHJldHVybiB1bnByZW11bHRpcGx5KHByZW11bHRCbGVuZGVk
KTsKIH0KIAogQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sb3ImIGZyb20s
IGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lv
biAyNjI4MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgcHVibGljOgogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBw
aXhlbCA9IG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IocGl4ZWwucmVkQ29tcG9uZW50KCks
IHBpeGVsLmdyZWVuQ29tcG9uZW50KCksIHBpeGVsLmJsdWVDb21wb25lbnQoKSwgcGl4ZWwuYWxw
aGFDb21wb25lbnQoKSwgZmFsc2UpOworICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBseUZs
b29yaW5nKHBpeGVsKTsKIAogICAgICAgICB1bnNpZ25lZCBkID0gMjU1IC0gYTsKIApAQCAtMTY5
LDEwICsxNjksMTIgQEAgcHVibGljOgogICAgICAgICBiID0gZmFzdERpdmlkZUJ5MjU1KGIgKiBh
ICsgcGl4ZWwuYmx1ZUNvbXBvbmVudCgpICogZCk7CiAgICAgICAgIGEgKz0gZmFzdERpdmlkZUJ5
MjU1KGQgKiBwaXhlbC5hbHBoYUNvbXBvbmVudCgpKTsKIAotICAgICAgICBpZiAobV9wcmVtdWx0
aXBseUFscGhhKQotICAgICAgICAgICAgKmRlc3QgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwg
YSkudmFsdWUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKmRlc3QgPSBtYWtlVW5wcmVt
dWx0aXBsaWVkU2ltcGxlQ29sb3IociwgZywgYiwgYSkudmFsdWUoKTsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7CisKKyAgICAgICAgaWYgKCFtX3By
ZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICByZXN1bHQgPSB1bnByZW11bHRpcGx5KHJlc3Vs
dCk7CisKKyAgICAgICAgKmRlc3QgPSByZXN1bHQudmFsdWVBc0FSR0IoKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCkBAIC0yMjQsMTAg
KzIyNiwxMiBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmICFh
KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICAgICAgYXV0byByZXN1bHQgPSBtYWtlU2lt
cGxlQ29sb3IociwgZywgYiwgYSk7CisKICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAm
JiBhIDwgMjU1KQotICAgICAgICAgICAgcmV0dXJuIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29s
b3IociwgZywgYiwgYSwgZmFsc2UpLnZhbHVlKCk7CisgICAgICAgICAgICByZXN1bHQgPSBwcmVt
dWx0aXBseUZsb29yaW5nKHJlc3VsdCk7CiAKLSAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cihyLCBnLCBiLCBhKS52YWx1ZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0LnZhbHVlQXNBUkdC
KCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ+IG1fcGl4
ZWxzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUNvbG9yLmNwcAkocmV2aXNpb24gMjYyODAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywzOCArMzMsMzMg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHByZW11
bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEsIGJvb2wgY2VpbGluZyA9IHRy
dWUpCitTaW1wbGVDb2xvciBwcmVtdWx0aXBseUZsb29yaW5nKFNpbXBsZUNvbG9yIGNvbG9yKQog
ewotICAgIHJldHVybiBmYXN0RGl2aWRlQnkyNTUoY2VpbGluZyA/IGMgKiBhICsgMjU0IDogYyAq
IGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CisgICAgaWYgKCFhIHx8IGEgPT0g
MjU1KQorICAgICAgICByZXR1cm4gY29sb3I7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihm
YXN0RGl2aWRlQnkyNTUociAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEpLCBmYXN0RGl2aWRl
QnkyNTUoYiAqIGEpLCBhKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCB1bnByZW11bHRp
cGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCitTaW1wbGVDb2xvciBwcmVtdWx0
aXBseUNlaWxpbmcoU2ltcGxlQ29sb3IgY29sb3IpCiB7Ci0gICAgcmV0dXJuIChmYXN0TXVsdGlw
bHlCeTI1NShjKSArIGEgLSAxKSAvIGE7Ci19Ci0KLVNpbXBsZUNvbG9yIG1ha2VQcmVtdWx0aXBs
aWVkU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEsIGJvb2wgY2VpbGluZykK
LXsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEs
IGNlaWxpbmcpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhLCBjZWlsaW5nKSwgcHJlbXVsdGlw
bGllZENoYW5uZWwoYiwgYSwgY2VpbGluZyksIGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
Y29sb3I7CisgICAgaWYgKCFhIHx8IGEgPT0gMjU1KQorICAgICAgICByZXR1cm4gY29sb3I7Cisg
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihmYXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBm
YXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQp
LCBhKTsKIH0KIAotU2ltcGxlQ29sb3IgbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihTaW1w
bGVDb2xvciBwaXhlbENvbG9yKQorc3RhdGljIGlubGluZSB1aW50MTZfdCB1bnByZW11bHRpcGx5
Q2hhbm5lbCh1aW50OF90IGMsIHVpbnQ4X3QgYSkKIHsKLSAgICBpZiAocGl4ZWxDb2xvci5pc09w
YXF1ZSgpKQotICAgICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKLSAgICByZXR1cm4gbWFrZVByZW11
bHRpcGxpZWRTaW1wbGVDb2xvcihwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9y
LmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9y
LmFscGhhQ29tcG9uZW50KCkpOwotfQotCi1TaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0aXBsaWVk
U2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCi17Ci0gICAgcmV0dXJuIG1h
a2VTaW1wbGVDb2xvcih1bnByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxp
ZWRDaGFubmVsKGcsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKKyAgICBy
ZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKIH0KIAotU2ltcGxlQ29s
b3IgbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKFNpbXBsZUNvbG9yIHBpeGVsQ29sb3Ip
CitTaW1wbGVDb2xvciB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIGNvbG9yKQogewotICAgIGlm
IChwaXhlbENvbG9yLmlzVmlzaWJsZSgpICYmICFwaXhlbENvbG9yLmlzT3BhcXVlKCkpCi0gICAg
ICAgIHJldHVybiBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IocGl4ZWxDb2xvci5yZWRD
b21wb25lbnQoKSwgcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmJsdWVD
b21wb25lbnQoKSwgcGl4ZWxDb2xvci5hbHBoYUNvbXBvbmVudCgpKTsKLSAgICByZXR1cm4gcGl4
ZWxDb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGlmICghYSB8fCBh
ID09IDI1NSkKKyAgICAgICAgcmV0dXJuIGNvbG9yOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IodW5wcmVtdWx0aXBseUNoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbHlDaGFubmVsKGcsIGEp
LCB1bnByZW11bHRpcGx5Q2hhbm5lbChiLCBhKSwgYSk7CiB9CiAKIFNpbXBsZUNvbG9yIG1ha2VT
aW1wbGVDb2xvckZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBm
bG9hdCBhKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVDb2xvci5oCShyZXZpc2lvbiAyNjI4MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxMCArOTgsOSBAQCBT
aW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgQ29sb3JDCiBTaW1wbGVDb2xvciBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEp
OwogU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0s
IGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpOwogCi1TaW1wbGVDb2xvciBtYWtlUHJlbXVsdGlw
bGllZFNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxpbmcg
PSB0cnVlKTsKLVNpbXBsZUNvbG9yIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoU2ltcGxl
Q29sb3IpOwotU2ltcGxlQ29sb3IgbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGludCBy
LCBpbnQgZywgaW50IGIsIGludCBhKTsKLVNpbXBsZUNvbG9yIG1ha2VVbnByZW11bHRpcGxpZWRT
aW1wbGVDb2xvcihTaW1wbGVDb2xvcik7CitTaW1wbGVDb2xvciBwcmVtdWx0aXBseUZsb29yaW5n
KFNpbXBsZUNvbG9yKTsKK1NpbXBsZUNvbG9yIHByZW11bHRpcGx5Q2VpbGluZyhTaW1wbGVDb2xv
cik7CitTaW1wbGVDb2xvciB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yKTsKIAogaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQogewpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAko
cmV2aXNpb24gMjYyODAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MCw5ICs4MCw5IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tl
bmQKICAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVk
Kj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1f
bG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwg
PSByb3cgKyB4OwotICAgICAgICAgICAgYXV0byBwaXhlbENvbG9yID0gbWFrZVVucHJlbXVsdGlw
bGllZFNpbXBsZUNvbG9yKCpwaXhlbCk7CisgICAgICAgICAgICBhdXRvIHBpeGVsQ29sb3IgPSB1
bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIHsgKnBpeGVsIH0pOwogICAgICAgICAgICAgcGl4ZWxD
b2xvciA9IG1ha2VTaW1wbGVDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZENvbXBvbmVu
dCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpXSwgbG9va1VwVGFi
bGVbcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCldLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50
KCkpOwotICAgICAgICAgICAgKnBpeGVsID0gbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihw
aXhlbENvbG9yKS52YWx1ZSgpOworICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbHlDZWls
aW5nKHBpeGVsQ29sb3IpLnZhbHVlQXNBUkdCKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2Fp
cm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1f
bG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRp
dmVJbWFnZUNhaXJvLmNwcAkocmV2aXNpb24gMjYyODAyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDggKzUzLDggQEAgQ29sb3IgbmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3Io
YwogICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UpCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogCi0gICAgU2ltcGxl
Q29sb3IqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8U2ltcGxlQ29sb3IqPihjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAgcmV0dXJuIG1ha2VVbnBy
ZW11bHRpcGxpZWRTaW1wbGVDb2xvcigqcGl4ZWwpOworICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShpbWFnZS5nZXQoKSkpOworICAgIHJldHVybiB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIHsg
KnBpeGVsIH0pOwogfQogCiB2b2lkIGRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0
ciYgaW1hZ2UsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQo=
</data>
<flag name="review"
          id="416862"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>