<?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>178978</bug_id>
          
          <creation_ts>2017-10-27 22:08:31 -0700</creation_ts>
          <short_desc>[WSL] Synthesize constructors for structs</short_desc>
          <delta_ts>2018-10-13 19:17:40 -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>WebGPU</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>MOVED</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>
          
          <blocked>176199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1365665</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-27 22:08:31 -0700</bug_when>
    <thetext>This will let you put pointers inside structs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365724</commentid>
    <comment_count>1</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-28 08:55:09 -0700</bug_when>
    <thetext>Object literals are a little tricky because of something like this:

struct Foo {
    int x;
}

struct Bar {
    uint x;
}

void func(Foo f) { ... }
void func(Bar f) { ... }

func({3});

This is a case where the contents of the object literal will participate in function overload resolution.

However, if the goal is simply to be able to specify the contents of a struct in a variable initializer, we don&apos;t actually need object literals; we can just synthesize a constructor for each struct which contains members for each field. This means that the author will have to state which type they are constructing, which means that the contents are not considered when performing function overload resolution (and function overload resolution is unchanged.

For arrays, you can&apos;t put a pointer or an array reference anywhere into an array, which means that variable initializers are no more powerful than regular assignments; therefore, we don&apos;t really need array literals.

Retitling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365725</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-28 08:58:50 -0700</bug_when>
    <thetext>We already synthesize field accesses to structs; adding synthesized constructors shouldn&apos;t be too difficult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365753</commentid>
    <comment_count>3</comment_count>
      <attachid>325264</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-28 11:36:34 -0700</bug_when>
    <thetext>Created attachment 325264
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365760</commentid>
    <comment_count>4</comment_count>
      <attachid>325267</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-28 15:04:28 -0700</bug_when>
    <thetext>Created attachment 325267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366167</commentid>
    <comment_count>5</comment_count>
      <attachid>325267</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-30 13:56:59 -0700</bug_when>
    <thetext>Comment on attachment 325267
Patch

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

&gt; Tools/ChangeLog:12
&gt; +        Similar to how we synthesize field accesses, we can also synthesize constructors
&gt; +        which initialize each member of the struct. This is more powerful than making
&gt; +        the author write these constructors, because, in logical mode, the native
&gt; +        implementation can assign to pointer fields in the struct, which the author can&apos;t
&gt; +        do.

I think that the more canonically-C++-like way to solve this problem is to just add support for struct/array literals.

Like the NullLiteral and the GenericLiteral (that creates IntLiteral and friends), this will have a corresponding type variable, which will only unify with either arrays or structs.

You might as well make this sensible from day one.  For example, {1, 2, 3} should unify with either T[3] where T unified with 1, 2, and 3; or a struct with three fields, whose types (T, U, and V) unify with the values (1, 2, 3).  But {f = 4, g = 6} should only unify with structs that have exactly &quot;f&quot; and &quot;g&quot; as their fields (in any order), and their types unify with 4, 6.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468965</commentid>
    <comment_count>6</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 19:17:40 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/163</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325264</attachid>
            <date>2017-10-28 11:36:34 -0700</date>
            <delta_ts>2017-10-28 15:04:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178978-20171028113633.patch</filename>
            <type>text/plain</type>
            <size>11846</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0MTUwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzU4OTU4MDc4ZDBmYzUyYTUyNDM5NDJmMzlkMjc4YWFm
NWY5MmJkNS4uM2Q0MTM4NGQwMmMwODhlNGRlMTZhZGI5NDdmNzI1M2YxNDVhMDBiYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3
IEBACisyMDE3LTEwLTI4ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CisKKyAgICAgICAgU3ludGhlc2l6ZSBjb25zdHJ1Y3RvcnMgZm9yIHN0cnVjdHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODk3OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbWlsYXIgdG8gaG93IHdl
IHN5bnRoZXNpemUgZmllbGQgYWNjZXNzZXMsIHdlIGNhbiBhbHNvIHN5bnRoZXNpemUgY29uc3Ry
dWN0b3JzCisgICAgICAgIHdoaWNoIGluaXRpYWxpemUgZWFjaCBtZW1iZXIgb2YgdGhlIHN0cnVj
dC4gVGhpcyBpcyBtb3JlIHBvd2VyZnVsIHRoYW4gbWFraW5nCisgICAgICAgIHRoZSBhdXRob3Ig
d3JpdGUgdGhlc2UgY29uc3RydWN0b3JzLCBiZWNhdXNlLCBpbiBsb2dpY2FsIG1vZGUsIHRoZSBu
YXRpdmUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gY2FuIGFzc2lnbiB0byBwb2ludGVyIGZpZWxk
cyBpbiB0aGUgc3RydWN0LCB3aGljaCB0aGUgYXV0aG9yIGNhbid0CisgICAgICAgIGRvLgorCisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29y
cy5qczoKKyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlVHlwZVBhcmFt
ZXRlcnMpOgorICAgICAgICAoc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy4pOgorICAgICAgICAo
c3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5zZXR1cEltcGxlbWVudGF0aW9uRGF0YSk6CisgICAg
ICAgIChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmNyZWF0ZUZpZWxkVHlwZSk6CisgICAgICAg
IChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKToKKyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RB
Y2Nlc3NvcnMuY3JlYXRlVHlwZVJlZik6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5qczoKKyAgICAgICAgKHRlc3RzLmJpdFN1YnNjcmlwdEFjY2Vzc29y
KToKKyAgICAgICAgKHRlc3RzLmZpZWxkQ29uc3RydWN0b3IpOgorCiAyMDE3LTEwLTI3ICBTdGVw
aGFuIFN6YWJvICA8c3RlcGhhbi5zemFib0Bzb255LmNvbT4KIAogICAgICAgICBbV2luXSBEZXRl
Y3QgVmlzdWFsIFN0dWRpbyAyMDE3IGxvY2F0aW9uCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzIGIvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwppbmRleCBm
NzgxNmYyYjI1MmU5YmE0ZGE5ZWM4NGRlZjYxMWM1NWU0YmZlM2E5Li42NDMxZjYzYmZjNDA3NGYz
NGE1YmRjNmRmMGRhZjQ5YzEwMTA0Y2RlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCisrKyBiL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMKQEAgLTI5LDM5
ICsyOSw2NSBAQCBmdW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pCiAg
ICAgZm9yIChsZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygpKSB7CiAgICAgICAgIGlm
ICghKHR5cGUgaW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgIAorICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBlUGFyYW1ldGVycygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiB0eXBlLnR5cGVQYXJhbWV0ZXJzLm1hcCgKKyAgICAgICAgICAg
ICAgICB0eXBlUGFyYW1ldGVyID0+IHR5cGVQYXJhbWV0ZXIudmlzaXQobmV3IFR5cGVQYXJhbWV0
ZXJSZXdyaXRlcigpKSk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgZnVuY3Rpb24gY3JlYXRl
VHlwZUFyZ3VtZW50cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlUGFyYW1l
dGVycy5tYXAodHlwZVBhcmFtZXRlciA9PiB0eXBlUGFyYW1ldGVyLnZpc2l0KG5ldyBBdXRvV3Jh
cHBlcigpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVR5
cGVSZWYoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gVHlwZVJlZi5pbnN0YW50aWF0
ZSh0eXBlLCBjcmVhdGVUeXBlQXJndW1lbnRzKCkpOworICAgICAgICB9CisgICAgCisgICAgICAg
IGxldCBpc0Nhc3QgPSBmYWxzZTsKKyAgICAgICAgbGV0IHNoYWRlclR5cGU7CisgICAgICAgIGxl
dCB0eXBlUGFyYW1ldGVyczsKKyAgICAgICAgbGV0IG5hdGl2ZUZ1bmM7CisgICAgICAgIGxldCBm
aWVsZFBhcmFtZXRlcnMgPSBbXTsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHNldHVwQmFz
ZUltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jKSB7CisgICAgICAgICAgICBuYXRpdmVGdW5j
Lmluc3RhbnRpYXRlSW1wbGVtZW50YXRpb24gPSBzdWJzdGl0dXRpb24gPT4geworICAgICAgICAg
ICAgICAgIGxldCBuZXdUeXBlID0gdHlwZS5pbnN0YW50aWF0ZShuYXRpdmVGdW5jLnR5cGVQYXJh
bWV0ZXJzLm1hcCh0eXBlUGFyYW1ldGVyID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IHN1
YnN0aXR1dGUgPSBzdWJzdGl0dXRpb24ubWFwLmdldCh0eXBlUGFyYW1ldGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzdWJzdGl0dXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJOdWxsIHN1YnN0aXR1dGUgZm9yIHR5cGUgcGFyYW1ldGVyICIgKyB0eXBl
UGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGU7CisgICAg
ICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgIHJldHVybiB7dHlwZTogbmV3VHlwZX07
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgbmF0aXZlRnVuYy52aXNpdEltcGxlbWVudGF0
aW9uRGF0YSA9IChpbXBsZW1lbnRhdGlvbkRhdGEsIHZpc2l0b3IpID0+IHsKKyAgICAgICAgICAg
ICAgICAvLyBWaXNpdGluZyB0aGUgdHlwZSBmaXJzdCBlbnN1cmVzIHRoYXQgdGhlIHN0cnVjdCBs
YXlvdXQgYnVpbGRlciBmaWd1cmVzIG91dCB0aGUgZmllbGQncworICAgICAgICAgICAgICAgIC8v
IG9mZnNldC4KKyAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEudHlwZS52aXNpdCh2
aXNpdG9yKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBuYXRpdmVGdW5jLmRpZExheW91
dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVudGF0aW9uRGF0YSA9PiB7Cisg
ICAgICAgICAgICAgICAgbGV0IHN0cnVjdFNpemUgPSBpbXBsZW1lbnRhdGlvbkRhdGEudHlwZS5z
aXplOworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3RTaXplID09IG51bGwpCisgICAgICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gc3RydWN0IHNpemUgZm9yICIgKyBuYXRpdmVG
dW5jKTsKKyAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEuc3RydWN0U2l6ZSA9IHN0
cnVjdFNpemU7CisgICAgICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBm
b3IgKGxldCBmaWVsZCBvZiB0eXBlLmZpZWxkcykgewotICAgICAgICAgICAgZnVuY3Rpb24gY3Jl
YXRlVHlwZVBhcmFtZXRlcnMoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biB0eXBlLnR5cGVQYXJhbWV0ZXJzLm1hcCgKLSAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFt
ZXRlciA9PiB0eXBlUGFyYW1ldGVyLnZpc2l0KG5ldyBUeXBlUGFyYW1ldGVyUmV3cml0ZXIoKSkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBmdW5jdGlvbiBjcmVh
dGVUeXBlQXJndW1lbnRzKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHlwZVBhcmFtZXRlcnMubWFwKHR5cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFtZXRlci52aXNpdChu
ZXcgQXV0b1dyYXBwZXIoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAg
ICAgICBmdW5jdGlvbiBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCBpbXBsZW1l
bnRhdGlvbikKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzZXR1cEJhc2VJbXBsZW1l
bnRhdGlvbkRhdGEobmF0aXZlRnVuYyk7CisgICAgICAgICAgICAgICAgbGV0IGJhc2VJbnN0YW50
aWF0ZUltcGxlbWVudGF0aW9uID0gbmF0aXZlRnVuYy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9u
OwogICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMuaW5zdGFudGlhdGVJbXBsZW1lbnRhdGlvbiA9
IHN1YnN0aXR1dGlvbiA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBuZXdUeXBlID0gdHlw
ZS5pbnN0YW50aWF0ZShuYXRpdmVGdW5jLnR5cGVQYXJhbWV0ZXJzLm1hcCh0eXBlUGFyYW1ldGVy
ID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdWJzdGl0dXRlID0gc3Vic3RpdHV0
aW9uLm1hcC5nZXQodHlwZVBhcmFtZXRlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXN1YnN0aXR1dGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJOdWxsIHN1YnN0aXR1dGUgZm9yIHR5cGUgcGFyYW1ldGVyICIgKyB0eXBlUGFyYW1ldGVyKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJzdGl0dXRlOwotICAgICAgICAgICAg
ICAgICAgICB9KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7dHlwZTogbmV3VHlwZSwg
ZmllbGROYW1lOiBmaWVsZC5uYW1lfTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAg
ICAgIG5hdGl2ZUZ1bmMudmlzaXRJbXBsZW1lbnRhdGlvbkRhdGEgPSAoaW1wbGVtZW50YXRpb25E
YXRhLCB2aXNpdG9yKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0aW5nIHRoZSB0
eXBlIGZpcnN0IGVuc3VyZXMgdGhhdCB0aGUgc3RydWN0IGxheW91dCBidWlsZGVyIGZpZ3VyZXMg
b3V0IHRoZSBmaWVsZCdzCi0gICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldC4KLSAgICAgICAg
ICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLnR5cGUudmlzaXQodmlzaXRvcik7Ci0gICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGJhc2VJbnN0
YW50aWF0ZUltcGxlbWVudGF0aW9uKHN1YnN0aXR1dGlvbik7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5maWVsZE5hbWUgPSBmaWVsZC5uYW1lOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsZXQgYmFzZURp
ZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9IG5hdGl2ZUZ1bmMuZGlkTGF5b3V0
U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRhOwogICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMu
ZGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRhID0gaW1wbGVtZW50YXRpb25EYXRh
ID0+IHsKLSAgICAgICAgICAgICAgICAgICAgbGV0IHN0cnVjdFNpemUgPSBpbXBsZW1lbnRhdGlv
bkRhdGEudHlwZS5zaXplOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0U2l6ZSA9PSBu
dWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBzdHJ1Y3Qg
c2l6ZSBmb3IgIiArIG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgICAgICAgICBiYXNlRGlkTGF5
b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRhKGltcGxlbWVudGF0aW9uRGF0YSk7CiAgICAg
ICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGltcGxlbWVudGF0aW9uRGF0YS50eXBlLmZpZWxk
QnlOYW1lKGltcGxlbWVudGF0aW9uRGF0YS5maWVsZE5hbWUpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWZpZWxkKQogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJD
b3VsZCBub3QgZmluZCBmaWVsZCIpOwpAQCAtNzMsNyArOTksNiBAQCBmdW5jdGlvbiBzeW50aGVz
aXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pCiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIk5vIG9mZnNldCBmb3IgIiArIG5hdGl2ZUZ1bmMpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLm9mZnNldCA9
IG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLnN0cnVjdFNp
emUgPSBzdHJ1Y3RTaXplOwogICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEu
ZmllbGRTaXplID0gZmllbGRTaXplOwogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAg
ICAgbmF0aXZlRnVuYy5pbXBsZW1lbnRhdGlvbiA9IChhcmd1bWVudExpc3QsIG5vZGUpID0+IHsK
QEAgLTkxLDE2ICsxMTYsNiBAQCBmdW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHBy
b2dyYW0pCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGUu
dmlzaXQobmV3IFN1YnN0aXR1dGlvbih0eXBlLnR5cGVQYXJhbWV0ZXJzLCB0eXBlUGFyYW1ldGVy
cykpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBmdW5jdGlvbiBj
cmVhdGVUeXBlUmVmKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVHlw
ZVJlZi5pbnN0YW50aWF0ZSh0eXBlLCBjcmVhdGVUeXBlQXJndW1lbnRzKCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBsZXQgaXNDYXN0ID0gZmFsc2U7Ci0gICAg
ICAgICAgICBsZXQgc2hhZGVyVHlwZTsKLSAgICAgICAgICAgIGxldCB0eXBlUGFyYW1ldGVyczsK
LSAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jOwogCiAgICAgICAgICAgICAvLyBUaGUgZ2V0dGVy
OiBvcGVyYXRvci5maWVsZAogICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBjcmVhdGVUeXBl
UGFyYW1ldGVycygpOwpAQCAtMTU3LDYgKzE3Miw1MSBAQCBmdW5jdGlvbiBzeW50aGVzaXplU3Ry
dWN0QWNjZXNzb3JzKHByb2dyYW0pCiAgICAgICAgICAgICBzZXR1cEFuZGVyKCJ0aHJlYWRncm91
cCIpOwogICAgICAgICAgICAgc2V0dXBBbmRlcigiZGV2aWNlIik7CiAgICAgICAgICAgICBzZXR1
cEFuZGVyKCJjb25zdGFudCIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmaWVsZFBhcmFt
ZXRlcnMucHVzaChuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0ZUZp
ZWxkVHlwZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBmaWVsZCBj
b25zdHJ1Y3RvcgorICAgICAgICBpc0Nhc3QgPSB0cnVlOworICAgICAgICB0eXBlUGFyYW1ldGVy
cyA9IGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCk7CisgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0
aXZlRnVuYyh0eXBlLm9yaWdpbiwgIm9wZXJhdG9yIGNhc3QiLCBjcmVhdGVUeXBlUmVmKCksIHR5
cGVQYXJhbWV0ZXJzLCBmaWVsZFBhcmFtZXRlcnMsIGlzQ2FzdCwgc2hhZGVyVHlwZSk7CisgICAg
ICAgIHNldHVwQmFzZUltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jKTsKKyAgICAgICAgbGV0
IGJhc2VJbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uID0gbmF0aXZlRnVuYy5pbnN0YW50aWF0ZUlt
cGxlbWVudGF0aW9uOworICAgICAgICBuYXRpdmVGdW5jLmluc3RhbnRpYXRlSW1wbGVtZW50YXRp
b24gPSBzdWJzdGl0dXRpb24gPT4geworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGJhc2VJbnN0
YW50aWF0ZUltcGxlbWVudGF0aW9uKHN1YnN0aXR1dGlvbik7CisgICAgICAgICAgICByZXN1bHQu
ZmllbGRJbmZvID0gQXJyYXkuZnJvbSh0eXBlLmZpZWxkcykubWFwKGZpZWxkID0+IHsgcmV0dXJu
IHtuYW1lOiBmaWVsZC5uYW1lfTsgfSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9CisgICAgICAgIGxldCBiYXNlRGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25E
YXRhID0gbmF0aXZlRnVuYy5kaWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGE7Cisg
ICAgICAgIG5hdGl2ZUZ1bmMuZGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRhID0g
aW1wbGVtZW50YXRpb25EYXRhID0+IHsKKyAgICAgICAgICAgIGJhc2VEaWRMYXlvdXRTdHJ1Y3Rz
SW5JbXBsZW1lbnRhdGlvbkRhdGEoaW1wbGVtZW50YXRpb25EYXRhKTsKKyAgICAgICAgICAgIGZv
ciAobGV0IGZpZWxkSW5mbyBvZiBpbXBsZW1lbnRhdGlvbkRhdGEuZmllbGRJbmZvKSB7CisgICAg
ICAgICAgICAgICAgbGV0IGZpZWxkID0gaW1wbGVtZW50YXRpb25EYXRhLnR5cGUuZmllbGRCeU5h
bWUoZmllbGRJbmZvLm5hbWUpOworICAgICAgICAgICAgICAgIGlmICghZmllbGQpCisgICAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgZmllbGQiKTsKKyAg
ICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gZmllbGQub2Zmc2V0OworICAgICAgICAgICAgICAg
IGxldCBmaWVsZFNpemUgPSBmaWVsZC50eXBlLnNpemU7CisgICAgICAgICAgICAgICAgaWYgKGZp
ZWxkU2l6ZSA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5v
IGZpZWxkIHNpemUgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAgICAgICAgICAgICBpZiAob2Zm
c2V0ID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gb2Zm
c2V0IGZvciAiICsgbmF0aXZlRnVuYyk7CisgICAgICAgIAorICAgICAgICAgICAgICAgIGZpZWxk
SW5mby5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgZmllbGRJbmZvLmZpZWxkU2l6
ZSA9IGZpZWxkU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgbmF0aXZl
RnVuYy5pbXBsZW1lbnRhdGlvbiA9IChhcmd1bWVudExpc3QsIG5vZGUpID0+IHsKKyAgICAgICAg
ICAgIGxldCBuYXRpdmVGdW5jSW5zdGFuY2UgPSBub2RlLm5hdGl2ZUZ1bmNJbnN0YW5jZTsKKyAg
ICAgICAgICAgIGxldCBpbXBsZW1lbnRhdGlvbkRhdGEgPSBuYXRpdmVGdW5jSW5zdGFuY2UuaW1w
bGVtZW50YXRpb25EYXRhOworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBF
QnVmZmVyKGltcGxlbWVudGF0aW9uRGF0YS5zdHJ1Y3RTaXplKSwgMCk7CisgICAgICAgICAgICBp
ZiAoYXJndW1lbnRMaXN0Lmxlbmd0aCAhPSBpbXBsZW1lbnRhdGlvbkRhdGEuZmllbGRJbmZvLmxl
bmd0aCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBudW1iZXIg
b2YgcGFyYW1ldGVycyB0byBmaWVsZCBjb25zdHJ1Y3RvciAiICsgbmF0aXZlRnVuYyk7CisgICAg
ICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50TGlzdC5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgICAgIGxldCBmaWVsZEluZm8gPSBpbXBsZW1lbnRhdGlvbkRhdGEuZmllbGRJ
bmZvW2ldOworICAgICAgICAgICAgICAgIHJlc3VsdC5wbHVzKGZpZWxkSW5mby5vZmZzZXQpLmNv
cHlGcm9tKGFyZ3VtZW50TGlzdFtpXSwgZmllbGRJbmZvLmZpZWxkU2l6ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9OworICAgICAgICBwcm9n
cmFtLmFkZChuYXRpdmVGdW5jKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VGVzdC5qcwppbmRleCAxNTlmYTAwZTJkYTk4MjJhMDc3OGU1ZjA3MmJkNWNkZDE2Njc3YTE0Li4w
NDE4M2U1NjU2MTRkMzY1MjBhNTk1YmUzYTAzNjIxNzBjMmFiZmRjIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Rlc3QuanMKQEAgLTI5ODMsMTMgKzI5ODMsNiBAQCB0ZXN0cy5iaXRTdWJz
Y3JpcHRBY2Nlc3NvciA9IGZ1bmN0aW9uKCkKICAgICAgICAgICAgIHVpbnQgZjsKICAgICAgICAg
ICAgIHVpbnQgZzsKICAgICAgICAgfQotICAgICAgICBvcGVyYXRvciBGb28odWludCBmLCB1aW50
IGcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZvbyByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1
bHQuZiA9IGY7Ci0gICAgICAgICAgICByZXN1bHQuZyA9IGc7Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9CiAgICAgICAgIGludCBvcGVyYXRvci5oKEZvbyBmb28pCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBpbnQoKGZvby5mICYgMHhmZmZmKSB8ICgoZm9vLmcg
JiAweGZmZmYpIDw8IDE2KSk7CkBAIC02NTcxLDYgKzY1NjQsNDYgQEAgdGVzdHMuYW5kUmV0dXJu
ZWRBcnJheVJlZiA9IGZ1bmN0aW9uKCkKICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDM1NCk7CiB9CiAKK3Rlc3RzLmZpZWxkQ29uc3Ry
dWN0b3IgPSBmdW5jdGlvbigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAg
ICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50MiB2ID0gaW50MigzLCA0KTsK
KyAgICAgICAgICAgIHJldHVybiB2WzBdOworICAgICAgICB9CisgICAgICAgIGludCBmb28yKCkK
KyAgICAgICAgeworICAgICAgICAgICAgaW50MiB2ID0gaW50MigzLCA0KTsKKyAgICAgICAgICAg
IHJldHVybiB2WzFdOworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBNeVN0cnVjdCB7CisgICAg
ICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIHVpbnQgeTsKKyAgICAgICAgfQorICAgICAgICBp
bnQgZm9vMygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBNeVN0cnVjdCgzLCA0KS54
OworICAgICAgICB9CisgICAgICAgIHVpbnQgZm9vNCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBNeVN0cnVjdCgzLCA0KS55OworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBNeVN0
cnVjdDIgeworICAgICAgICAgICAgdGhyZWFkIGludCogeDsKKyAgICAgICAgfTsKKyAgICAgICAg
aW50IGZvbzUoKSB7CisgICAgICAgICAgICBpbnQgeCA9IDc7CisgICAgICAgICAgICByZXR1cm4g
Kk15U3RydWN0MigmeCkueDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgMyk7CisgICAgY2hlY2tJ
bnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW10sIFtdKSwgNCk7Cisg
ICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28zIiwgW10sIFtd
KSwgMyk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
NCIsIFtdLCBbXSksIDQpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vNSIsIFtdLCBbXSksIDcpOworfQorCiBva1RvVGVzdCA9IHRydWU7CiAKIGxldCB0
ZXN0RmlsdGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325267</attachid>
            <date>2017-10-28 15:04:28 -0700</date>
            <delta_ts>2017-11-02 18:42:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178978-20171028150427.patch</filename>
            <type>text/plain</type>
            <size>17051</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0MTUwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzU4OTU4MDc4ZDBmYzUyYTUyNDM5NDJmMzlkMjc4YWFm
NWY5MmJkNS4uM2Q0MTM4NGQwMmMwODhlNGRlMTZhZGI5NDdmNzI1M2YxNDVhMDBiYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3
IEBACisyMDE3LTEwLTI4ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CisKKyAgICAgICAgU3ludGhlc2l6ZSBjb25zdHJ1Y3RvcnMgZm9yIHN0cnVjdHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODk3OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbWlsYXIgdG8gaG93IHdl
IHN5bnRoZXNpemUgZmllbGQgYWNjZXNzZXMsIHdlIGNhbiBhbHNvIHN5bnRoZXNpemUgY29uc3Ry
dWN0b3JzCisgICAgICAgIHdoaWNoIGluaXRpYWxpemUgZWFjaCBtZW1iZXIgb2YgdGhlIHN0cnVj
dC4gVGhpcyBpcyBtb3JlIHBvd2VyZnVsIHRoYW4gbWFraW5nCisgICAgICAgIHRoZSBhdXRob3Ig
d3JpdGUgdGhlc2UgY29uc3RydWN0b3JzLCBiZWNhdXNlLCBpbiBsb2dpY2FsIG1vZGUsIHRoZSBu
YXRpdmUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gY2FuIGFzc2lnbiB0byBwb2ludGVyIGZpZWxk
cyBpbiB0aGUgc3RydWN0LCB3aGljaCB0aGUgYXV0aG9yIGNhbid0CisgICAgICAgIGRvLgorCisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29y
cy5qczoKKyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlVHlwZVBhcmFt
ZXRlcnMpOgorICAgICAgICAoc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy4pOgorICAgICAgICAo
c3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5zZXR1cEltcGxlbWVudGF0aW9uRGF0YSk6CisgICAg
ICAgIChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmNyZWF0ZUZpZWxkVHlwZSk6CisgICAgICAg
IChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKToKKyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RB
Y2Nlc3NvcnMuY3JlYXRlVHlwZVJlZik6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5qczoKKyAgICAgICAgKHRlc3RzLmJpdFN1YnNjcmlwdEFjY2Vzc29y
KToKKyAgICAgICAgKHRlc3RzLmZpZWxkQ29uc3RydWN0b3IpOgorCiAyMDE3LTEwLTI3ICBTdGVw
aGFuIFN6YWJvICA8c3RlcGhhbi5zemFib0Bzb255LmNvbT4KIAogICAgICAgICBbV2luXSBEZXRl
Y3QgVmlzdWFsIFN0dWRpbyAyMDE3IGxvY2F0aW9uCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCmluZGV4IGI1YWUwZmU0OWZjZWRjOGZhNzZhNjY3
OTNjZmUwY2IxZjA4YjQ1NzEuLjhiMjY2MjE3MmFkZTY1YWQwMzJmNTUxZmY0M2Y0OWFiYjk0NWMz
MjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNz
aW9uLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9u
LmpzCkBAIC0xMjksNyArMTI5LDYgQEAgY2xhc3MgQ2FsbEV4cHJlc3Npb24gZXh0ZW5kcyBFeHBy
ZXNzaW9uIHsKICAgICAgICAgdGhpcy5fcmV0dXJuVHlwZS50eXBlID0gcmV0dXJuVHlwZTsKICAg
ICAgICAgdGhpcy5fbmFtZSA9ICJvcGVyYXRvciBjYXN0IjsKICAgICAgICAgdGhpcy5faXNDYXN0
ID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fdHlwZUFyZ3VtZW50cyA9IFtdOwogICAgIH0KICAgICAK
ICAgICBzZXRDYXN0RGF0YShyZXR1cm5UeXBlKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCmluZGV4IDFlZGRkMWEwMzQyOTYwZDRkOTVjODIx
ZTQ4ZDM0ZDc3YWU5NzE3MWMuLjc2ZGMyMjc4YzE3ZjIwMGE1ZGMwYTQ2NTFhMGJhNWE3NWMyMmZk
N2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGli
cmFyeS5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJh
cnkuanMKQEAgLTE5OCwxNCArMTk4LDYgQEAgdHlwZWRlZiB1aW50MiA9IHZlYzI8dWludD47CiB0
eXBlZGVmIGZsb2F0MiA9IHZlYzI8ZmxvYXQ+OwogdHlwZWRlZiBkb3VibGUyID0gdmVjMjxkb3Vi
bGU+OwogCi1vcGVyYXRvcjxUPiB2ZWMyPFQ+KFQgeCwgVCB5KQotewotICAgIHZlYzI8VD4gcmVz
dWx0OwotICAgIHJlc3VsdC54ID0geDsKLSAgICByZXN1bHQueSA9IHk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQogYm9vbCBvcGVyYXRvcj09PFQ6RXF1YXRhYmxlPih2ZWMyPFQ+IGEsIHZlYzI8
VD4gYikKIHsKICAgICByZXR1cm4gYS54ID09IGIueCAmJiBhLnkgPT0gYi55OwpAQCAtMjMxLDE1
ICsyMjMsNiBAQCB0eXBlZGVmIHVpbnQzID0gdmVjMzx1aW50PjsKIHR5cGVkZWYgZmxvYXQzID0g
dmVjMzxmbG9hdD47CiB0eXBlZGVmIGRvdWJsZTMgPSB2ZWMzPGRvdWJsZT47CiAKLW9wZXJhdG9y
PFQ+IHZlYzM8VD4oVCB4LCBUIHksIFQgeikKLXsKLSAgICB2ZWMzPFQ+IHJlc3VsdDsKLSAgICBy
ZXN1bHQueCA9IHg7Ci0gICAgcmVzdWx0LnkgPSB5OwotICAgIHJlc3VsdC56ID0gejsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiBvcGVyYXRvcjxUPiB2ZWMzPFQ+KHZlYzI8VD4gdjIsIFQgeikK
IHsKICAgICB2ZWMzPFQ+IHJlc3VsdDsKQEAgLTI4NiwxNiArMjY5LDYgQEAgdHlwZWRlZiB1aW50
NCA9IHZlYzQ8dWludD47CiB0eXBlZGVmIGZsb2F0NCA9IHZlYzQ8ZmxvYXQ+OwogdHlwZWRlZiBk
b3VibGU0ID0gdmVjNDxkb3VibGU+OwogCi1vcGVyYXRvcjxUPiB2ZWM0PFQ+KFQgeCwgVCB5LCBU
IHosIFQgdykKLXsKLSAgICB2ZWM0PFQ+IHJlc3VsdDsKLSAgICByZXN1bHQueCA9IHg7Ci0gICAg
cmVzdWx0LnkgPSB5OwotICAgIHJlc3VsdC56ID0gejsKLSAgICByZXN1bHQudyA9IHc7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQogb3BlcmF0b3I8VD4gdmVjNDxUPih2ZWMyPFQ+IHYyLCBUIHos
IFQgdykKIHsKICAgICB2ZWM0PFQ+IHJlc3VsdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMgYi9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCmluZGV4IGY3
ODE2ZjJiMjUyZTliYTRkYTllYzg0ZGVmNjExYzU1ZTRiZmUzYTkuLjVkNzVmZmY1OTU2MDY0Y2Nm
N2E4ZDlmY2QwM2ZiZmYyOGE2NzVlMzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMKKysrIGIvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwpAQCAtMjksMzkg
KzI5LDY5IEBAIGZ1bmN0aW9uIHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSkKICAg
ICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0udHlwZXMudmFsdWVzKCkpIHsKICAgICAgICAgaWYg
KCEodHlwZSBpbnN0YW5jZW9mIFN0cnVjdFR5cGUpKQogICAgICAgICAgICAgY29udGludWU7Cisg
ICAgCisgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHR5cGUudHlwZVBhcmFtZXRlcnMubWFwKAorICAgICAgICAgICAg
ICAgIHR5cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFtZXRlci52aXNpdChuZXcgVHlwZVBhcmFtZXRl
clJld3JpdGVyKCkpKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBmdW5jdGlvbiBjcmVhdGVU
eXBlQXJndW1lbnRzKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHR5cGVQYXJhbWV0
ZXJzLm1hcCh0eXBlUGFyYW1ldGVyID0+IHR5cGVQYXJhbWV0ZXIudmlzaXQobmV3IEF1dG9XcmFw
cGVyKCkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlw
ZVJlZigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBUeXBlUmVmLmluc3RhbnRpYXRl
KHR5cGUsIGNyZWF0ZVR5cGVBcmd1bWVudHMoKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiBjcmVhdGVGaWVsZFR5cGUoZmllbGQsIHR5cGVQYXJhbWV0ZXJzKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZmllbGQudHlwZS52aXNpdChuZXcgU3Vic3RpdHV0aW9uKHR5cGUu
dHlwZVBhcmFtZXRlcnMsIHR5cGVQYXJhbWV0ZXJzKSk7CisgICAgICAgIH0KKyAgICAKKyAgICAg
ICAgbGV0IGlzQ2FzdCA9IGZhbHNlOworICAgICAgICBsZXQgc2hhZGVyVHlwZTsKKyAgICAgICAg
bGV0IHR5cGVQYXJhbWV0ZXJzOworICAgICAgICBsZXQgbmF0aXZlRnVuYzsKKyAgICAgICAgCisg
ICAgICAgIGZ1bmN0aW9uIHNldHVwQmFzZUltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jKSB7
CisgICAgICAgICAgICBuYXRpdmVGdW5jLmluc3RhbnRpYXRlSW1wbGVtZW50YXRpb24gPSBzdWJz
dGl0dXRpb24gPT4geworICAgICAgICAgICAgICAgIGxldCBuZXdUeXBlID0gdHlwZS5pbnN0YW50
aWF0ZShuYXRpdmVGdW5jLnR5cGVQYXJhbWV0ZXJzLm1hcCh0eXBlUGFyYW1ldGVyID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgbGV0IHN1YnN0aXR1dGUgPSBzdWJzdGl0dXRpb24ubWFwLmdldCh0
eXBlUGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJzdGl0dXRlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIHN1YnN0aXR1dGUgZm9y
IHR5cGUgcGFyYW1ldGVyICIgKyB0eXBlUGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN1YnN0aXR1dGU7CisgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAg
IHJldHVybiB7dHlwZTogbmV3VHlwZX07CisgICAgICAgICAgICB9OworICAgICAgICAgICAgbmF0
aXZlRnVuYy52aXNpdEltcGxlbWVudGF0aW9uRGF0YSA9IChpbXBsZW1lbnRhdGlvbkRhdGEsIHZp
c2l0b3IpID0+IHsKKyAgICAgICAgICAgICAgICAvLyBWaXNpdGluZyB0aGUgdHlwZSBmaXJzdCBl
bnN1cmVzIHRoYXQgdGhlIHN0cnVjdCBsYXlvdXQgYnVpbGRlciBmaWd1cmVzIG91dCB0aGUgZmll
bGQncworICAgICAgICAgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgICAgICAgICBpbXBsZW1l
bnRhdGlvbkRhdGEudHlwZS52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBuYXRpdmVGdW5jLmRpZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9IGlt
cGxlbWVudGF0aW9uRGF0YSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHN0cnVjdFNpemUgPSBp
bXBsZW1lbnRhdGlvbkRhdGEudHlwZS5zaXplOworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3RT
aXplID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gc3Ry
dWN0IHNpemUgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAgICAgICAgICAgICBpbXBsZW1lbnRh
dGlvbkRhdGEuc3RydWN0U2l6ZSA9IHN0cnVjdFNpemU7CisgICAgICAgICAgICB9OworICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0eXBlLmZpZWxkcykgewot
ICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlwZVBhcmFtZXRlcnMoKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLnR5cGVQYXJhbWV0ZXJzLm1hcCgKLSAgICAg
ICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlciA9PiB0eXBlUGFyYW1ldGVyLnZpc2l0KG5ldyBU
eXBlUGFyYW1ldGVyUmV3cml0ZXIoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBlQXJndW1lbnRzKCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVBhcmFtZXRlcnMubWFwKHR5cGVQYXJhbWV0ZXIg
PT4gdHlwZVBhcmFtZXRlci52aXNpdChuZXcgQXV0b1dyYXBwZXIoKSkpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCiAgICAgICAgICAgICBmdW5jdGlvbiBzZXR1cEltcGxlbWVudGF0aW9u
RGF0YShuYXRpdmVGdW5jLCBpbXBsZW1lbnRhdGlvbikKICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBzZXR1cEJhc2VJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYyk7CisgICAgICAg
ICAgICAgICAgbGV0IGJhc2VJbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uID0gbmF0aXZlRnVuYy5p
bnN0YW50aWF0ZUltcGxlbWVudGF0aW9uOwogICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMuaW5z
dGFudGlhdGVJbXBsZW1lbnRhdGlvbiA9IHN1YnN0aXR1dGlvbiA9PiB7Ci0gICAgICAgICAgICAg
ICAgICAgIGxldCBuZXdUeXBlID0gdHlwZS5pbnN0YW50aWF0ZShuYXRpdmVGdW5jLnR5cGVQYXJh
bWV0ZXJzLm1hcCh0eXBlUGFyYW1ldGVyID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxl
dCBzdWJzdGl0dXRlID0gc3Vic3RpdHV0aW9uLm1hcC5nZXQodHlwZVBhcmFtZXRlcik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YnN0aXR1dGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIHN1YnN0aXR1dGUgZm9yIHR5cGUgcGFyYW1l
dGVyICIgKyB0eXBlUGFyYW1ldGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dWJzdGl0dXRlOwotICAgICAgICAgICAgICAgICAgICB9KSk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB7dHlwZTogbmV3VHlwZSwgZmllbGROYW1lOiBmaWVsZC5uYW1lfTsKLSAgICAgICAg
ICAgICAgICB9OwotICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMudmlzaXRJbXBsZW1lbnRhdGlv
bkRhdGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFZpc2l0aW5nIHRoZSB0eXBlIGZpcnN0IGVuc3VyZXMgdGhhdCB0aGUgc3RydWN0
IGxheW91dCBidWlsZGVyIGZpZ3VyZXMgb3V0IHRoZSBmaWVsZCdzCi0gICAgICAgICAgICAgICAg
ICAgIC8vIG9mZnNldC4KLSAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLnR5
cGUudmlzaXQodmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAg
ICAgbGV0IHJlc3VsdCA9IGJhc2VJbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uKHN1YnN0aXR1dGlv
bik7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5maWVsZE5hbWUgPSBmaWVsZC5uYW1lOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBsZXQgYmFzZURpZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0
YSA9IG5hdGl2ZUZ1bmMuZGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRhOwogICAg
ICAgICAgICAgICAgIG5hdGl2ZUZ1bmMuZGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25E
YXRhID0gaW1wbGVtZW50YXRpb25EYXRhID0+IHsKLSAgICAgICAgICAgICAgICAgICAgbGV0IHN0
cnVjdFNpemUgPSBpbXBsZW1lbnRhdGlvbkRhdGEudHlwZS5zaXplOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RydWN0U2l6ZSA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJObyBzdHJ1Y3Qgc2l6ZSBmb3IgIiArIG5hdGl2ZUZ1bmMpOworICAgICAg
ICAgICAgICAgICAgICBiYXNlRGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRhKGlt
cGxlbWVudGF0aW9uRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGltcGxl
bWVudGF0aW9uRGF0YS50eXBlLmZpZWxkQnlOYW1lKGltcGxlbWVudGF0aW9uRGF0YS5maWVsZE5h
bWUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkKQogICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBmaWVsZCIpOwpAQCAtNzMsNyAr
MTAzLDYgQEAgZnVuY3Rpb24gc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycyhwcm9ncmFtKQogICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBvZmZzZXQgZm9yICIgKyBu
YXRpdmVGdW5jKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlt
cGxlbWVudGF0aW9uRGF0YS5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlt
cGxlbWVudGF0aW9uRGF0YS5zdHJ1Y3RTaXplID0gc3RydWN0U2l6ZTsKICAgICAgICAgICAgICAg
ICAgICAgaW1wbGVtZW50YXRpb25EYXRhLmZpZWxkU2l6ZSA9IGZpZWxkU2l6ZTsKICAgICAgICAg
ICAgICAgICB9OwogICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMuaW1wbGVtZW50YXRpb24gPSAo
YXJndW1lbnRMaXN0LCBub2RlKSA9PiB7CkBAIC04NiwyNiArMTE1LDExIEBAIGZ1bmN0aW9uIHN5
bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGltcGxlbWVudGF0aW9uRGF0YS5maWVsZFNpemUpOwogICAgICAgICAgICAgICAgIH07CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUZpZWxk
VHlwZSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGUu
dmlzaXQobmV3IFN1YnN0aXR1dGlvbih0eXBlLnR5cGVQYXJhbWV0ZXJzLCB0eXBlUGFyYW1ldGVy
cykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBmdW5jdGlvbiBj
cmVhdGVUeXBlUmVmKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVHlw
ZVJlZi5pbnN0YW50aWF0ZSh0eXBlLCBjcmVhdGVUeXBlQXJndW1lbnRzKCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBsZXQgaXNDYXN0ID0gZmFsc2U7Ci0gICAg
ICAgICAgICBsZXQgc2hhZGVyVHlwZTsKLSAgICAgICAgICAgIGxldCB0eXBlUGFyYW1ldGVyczsK
LSAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jOwogCiAgICAgICAgICAgICAvLyBUaGUgZ2V0dGVy
OiBvcGVyYXRvci5maWVsZAogICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBjcmVhdGVUeXBl
UGFyYW1ldGVycygpOwogICAgICAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAot
ICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9yLiIgKyBmaWVsZC5uYW1lLCBj
cmVhdGVGaWVsZFR5cGUoKSwgdHlwZVBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgZmllbGQu
b3JpZ2luLCAib3BlcmF0b3IuIiArIGZpZWxkLm5hbWUsIGNyZWF0ZUZpZWxkVHlwZShmaWVsZCwg
dHlwZVBhcmFtZXRlcnMpLCB0eXBlUGFyYW1ldGVycywKICAgICAgICAgICAgICAgICBbbmV3IEZ1
bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVUeXBlUmVmKCkpXSwgaXNDYXN0
LCBzaGFkZXJUeXBlKTsKICAgICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2
ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7CiAgICAg
ICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBFQnVmZmVyKGZpZWxkU2l6ZSks
IDApOwpAQCAtMTIwLDcgKzEzNCw3IEBAIGZ1bmN0aW9uIHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3Nv
cnMocHJvZ3JhbSkKICAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvci4iICsg
ZmllbGQubmFtZSArICI9IiwgY3JlYXRlVHlwZVJlZigpLCB0eXBlUGFyYW1ldGVycywKICAgICAg
ICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKGZpZWxk
Lm9yaWdpbiwgbnVsbCwgY3JlYXRlVHlwZVJlZigpKSwKLSAgICAgICAgICAgICAgICAgICAgbmV3
IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVGaWVsZFR5cGUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBj
cmVhdGVGaWVsZFR5cGUoZmllbGQsIHR5cGVQYXJhbWV0ZXJzKSkKICAgICAgICAgICAgICAgICBd
LAogICAgICAgICAgICAgICAgIGlzQ2FzdCwgc2hhZGVyVHlwZSk7CiAgICAgICAgICAgICBzZXR1
cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2UsIHZhbHVlXSwgb2Zmc2V0LCBz
dHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKQEAgLTEzNiw3ICsxNTAsNyBAQCBmdW5jdGlvbiBz
eW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOwogICAgICAg
ICAgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKLSAgICAgICAgICAgICAgICAg
ICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3ImLiIgKyBmaWVsZC5uYW1lLCBuZXcgUHRyVHlwZShm
aWVsZC5vcmlnaW4sIGFkZHJlc3NTcGFjZSwgY3JlYXRlRmllbGRUeXBlKCkpLAorICAgICAgICAg
ICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvciYuIiArIGZpZWxkLm5hbWUsIG5ldyBQ
dHJUeXBlKGZpZWxkLm9yaWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVGaWVsZFR5cGUoZmllbGQs
IHR5cGVQYXJhbWV0ZXJzKSksCiAgICAgICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzLAog
ICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRnVuY1Bh
cmFtZXRlcigKQEAgLTE1OCw1ICsxNzIsNTEgQEAgZnVuY3Rpb24gc3ludGhlc2l6ZVN0cnVjdEFj
Y2Vzc29ycyhwcm9ncmFtKQogICAgICAgICAgICAgc2V0dXBBbmRlcigiZGV2aWNlIik7CiAgICAg
ICAgICAgICBzZXR1cEFuZGVyKCJjb25zdGFudCIpOwogICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBUaGUgZmllbGQgY29uc3RydWN0b3IKKyAgICAgICAgaXNDYXN0ID0gdHJ1ZTsKKyAg
ICAgICAgdHlwZVBhcmFtZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOworICAgICAgICBs
ZXQgZmllbGRQYXJhbWV0ZXJzID0gW107CisgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHR5cGUu
ZmllbGRzKQorICAgICAgICAgICAgZmllbGRQYXJhbWV0ZXJzLnB1c2gobmV3IEZ1bmNQYXJhbWV0
ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVGaWVsZFR5cGUoZmllbGQsIHR5cGVQYXJhbWV0
ZXJzKSkpOworICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmModHlwZS5vcmlnaW4s
ICJvcGVyYXRvciBjYXN0IiwgY3JlYXRlVHlwZVJlZigpLCB0eXBlUGFyYW1ldGVycywgZmllbGRQ
YXJhbWV0ZXJzLCBpc0Nhc3QsIHNoYWRlclR5cGUpOworICAgICAgICBzZXR1cEJhc2VJbXBsZW1l
bnRhdGlvbkRhdGEobmF0aXZlRnVuYyk7CisgICAgICAgIGxldCBiYXNlSW5zdGFudGlhdGVJbXBs
ZW1lbnRhdGlvbiA9IG5hdGl2ZUZ1bmMuaW5zdGFudGlhdGVJbXBsZW1lbnRhdGlvbjsKKyAgICAg
ICAgbmF0aXZlRnVuYy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uID0gc3Vic3RpdHV0aW9uID0+
IHsKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBiYXNlSW5zdGFudGlhdGVJbXBsZW1lbnRhdGlv
bihzdWJzdGl0dXRpb24pOworICAgICAgICAgICAgcmVzdWx0LmZpZWxkSW5mbyA9IEFycmF5LmZy
b20odHlwZS5maWVsZHMpLm1hcChmaWVsZCA9PiB7IHJldHVybiB7bmFtZTogZmllbGQubmFtZX07
IH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBsZXQg
YmFzZURpZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9IG5hdGl2ZUZ1bmMuZGlk
TGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRhOworICAgICAgICBuYXRpdmVGdW5jLmRp
ZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVudGF0aW9uRGF0YSA9
PiB7CisgICAgICAgICAgICBiYXNlRGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRh
KGltcGxlbWVudGF0aW9uRGF0YSk7CisgICAgICAgICAgICBmb3IgKGxldCBmaWVsZEluZm8gb2Yg
aW1wbGVtZW50YXRpb25EYXRhLmZpZWxkSW5mbykgeworICAgICAgICAgICAgICAgIGxldCBmaWVs
ZCA9IGltcGxlbWVudGF0aW9uRGF0YS50eXBlLmZpZWxkQnlOYW1lKGZpZWxkSW5mby5uYW1lKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWZpZWxkKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpZWxkIik7CisgICAgICAgICAgICAgICAgbGV0IG9m
ZnNldCA9IGZpZWxkLm9mZnNldDsKKyAgICAgICAgICAgICAgICBsZXQgZmllbGRTaXplID0gZmll
bGQudHlwZS5zaXplOworICAgICAgICAgICAgICAgIGlmIChmaWVsZFNpemUgPT0gbnVsbCkKKyAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBmaWVsZCBzaXplIGZvciAiICsg
bmF0aXZlRnVuYyk7CisgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBudWxsKQorICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIG9mZnNldCBmb3IgIiArIG5hdGl2ZUZ1
bmMpOworICAgICAgICAKKyAgICAgICAgICAgICAgICBmaWVsZEluZm8ub2Zmc2V0ID0gb2Zmc2V0
OworICAgICAgICAgICAgICAgIGZpZWxkSW5mby5maWVsZFNpemUgPSBmaWVsZFNpemU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIG5hdGl2ZUZ1bmMuaW1wbGVtZW50YXRpb24g
PSAoYXJndW1lbnRMaXN0LCBub2RlKSA9PiB7CisgICAgICAgICAgICBsZXQgbmF0aXZlRnVuY0lu
c3RhbmNlID0gbm9kZS5uYXRpdmVGdW5jSW5zdGFuY2U7CisgICAgICAgICAgICBsZXQgaW1wbGVt
ZW50YXRpb25EYXRhID0gbmF0aXZlRnVuY0luc3RhbmNlLmltcGxlbWVudGF0aW9uRGF0YTsKKyAg
ICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1ZmZlcihpbXBsZW1lbnRhdGlv
bkRhdGEuc3RydWN0U2l6ZSksIDApOworICAgICAgICAgICAgaWYgKGFyZ3VtZW50TGlzdC5sZW5n
dGggIT0gaW1wbGVtZW50YXRpb25EYXRhLmZpZWxkSW5mby5sZW5ndGgpCisgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdG8gZmll
bGQgY29uc3RydWN0b3IgIiArIG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBhcmd1bWVudExpc3QubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBsZXQg
ZmllbGRJbmZvID0gaW1wbGVtZW50YXRpb25EYXRhLmZpZWxkSW5mb1tpXTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQucGx1cyhmaWVsZEluZm8ub2Zmc2V0KS5jb3B5RnJvbShhcmd1bWVudExpc3Rb
aV0sIGZpZWxkSW5mby5maWVsZFNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVz
dC5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKaW5kZXggMTU5ZmEw
MGUyZGE5ODIyYTA3NzhlNWYwNzJiZDVjZGQxNjY3N2ExNC4uYWViZTBlZmY2NTFiYTU3ZGUzNWUy
MGZhMjkzZmViN2ViNDI1YTMwYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVGVzdC5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmpz
CkBAIC0yODQ5LDEzICsyODQ5LDYgQEAgdGVzdHMuZ2VuZXJpY0FjY2Vzc29ycyA9IGZ1bmN0aW9u
KCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGJhci54ICsgYmFyLnk7CiAgICAgICAg
IH0KLSAgICAgICAgb3BlcmF0b3I8VD4gQmFyPFQ+KFQgeCwgVCB5KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBCYXI8VD4gcmVzdWx0OwotICAgICAgICAgICAgcmVzdWx0LnggPSB4OwotICAgICAg
ICAgICAgcmVzdWx0LnkgPSB5OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fQogICAgICAgICB2b2lkIHNldHVwKHRocmVhZCBGb288aW50PiogZm9vKQogICAgICAgICB7CiAg
ICAgICAgICAgICBmb28tPnggPSAxOwpAQCAtMjk4MywxMyArMjk3Niw2IEBAIHRlc3RzLmJpdFN1
YnNjcmlwdEFjY2Vzc29yID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgdWludCBmOwogICAgICAg
ICAgICAgdWludCBnOwogICAgICAgICB9Ci0gICAgICAgIG9wZXJhdG9yIEZvbyh1aW50IGYsIHVp
bnQgZykKLSAgICAgICAgewotICAgICAgICAgICAgRm9vIHJlc3VsdDsKLSAgICAgICAgICAgIHJl
c3VsdC5mID0gZjsKLSAgICAgICAgICAgIHJlc3VsdC5nID0gZzsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KICAgICAgICAgaW50IG9wZXJhdG9yLmgoRm9vIGZvbykKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGludCgoZm9vLmYgJiAweGZmZmYpIHwgKChmb28u
ZyAmIDB4ZmZmZikgPDwgMTYpKTsKQEAgLTM3NjIsMTMgKzM3NDgsNiBAQCB0ZXN0cy5nZW5lcmlj
Q2FzdEluZmVyID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgVCByZWFsOwogICAgICAgICAgICAg
VCBpbWFnOwogICAgICAgICB9Ci0gICAgICAgIG9wZXJhdG9yPFQ+IENvbXBsZXg8VD4oVCByZWFs
LCBUIGltYWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENvbXBsZXg8VD4gcmVzdWx0OwotICAg
ICAgICAgICAgcmVzdWx0LnJlYWwgPSByZWFsOwotICAgICAgICAgICAgcmVzdWx0LmltYWcgPSBp
bWFnOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQogICAgICAgICBpbnQg
Zm9vKCkKICAgICAgICAgewogICAgICAgICAgICAgQ29tcGxleDxpbnQ+IHggPSBDb21wbGV4PGlu
dD4oMSwgMik7CkBAIC02NTcxLDYgKzY1NTAsNjUgQEAgdGVzdHMuYW5kUmV0dXJuZWRBcnJheVJl
ZiA9IGZ1bmN0aW9uKCkKICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdLCBbXSksIDM1NCk7CiB9CiAKK3Rlc3RzLmZpZWxkQ29uc3RydWN0b3IgPSBm
dW5jdGlvbigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9v
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50MiB2ID0gaW50MigzLCA0KTsKKyAgICAgICAg
ICAgIHJldHVybiB2WzBdOworICAgICAgICB9CisgICAgICAgIGludCBmb28yKCkKKyAgICAgICAg
eworICAgICAgICAgICAgaW50MiB2ID0gaW50MigzLCA0KTsKKyAgICAgICAgICAgIHJldHVybiB2
WzFdOworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBNeVN0cnVjdCB7CisgICAgICAgICAgICBp
bnQgeDsKKyAgICAgICAgICAgIHVpbnQgeTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vMygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBNeVN0cnVjdCgzLCA0KS54OworICAgICAg
ICB9CisgICAgICAgIHVpbnQgZm9vNCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBN
eVN0cnVjdCgzLCA0KS55OworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBNeVN0cnVjdDIgewor
ICAgICAgICAgICAgdGhyZWFkIGludCogeDsKKyAgICAgICAgfTsKKyAgICAgICAgaW50IGZvbzUo
KSB7CisgICAgICAgICAgICBpbnQgeCA9IDc7CisgICAgICAgICAgICByZXR1cm4gKk15U3RydWN0
MigmeCkueDsKKyAgICAgICAgfQorICAgICAgICBzdHJ1Y3QgTXlTdHJ1Y3QzPFMsIFQ+IHsKKyAg
ICAgICAgICAgIFMgeDsKKyAgICAgICAgICAgIFQgeTsKKyAgICAgICAgfQorICAgICAgICBpbnQg
Zm9vNigpIHsKKyAgICAgICAgICAgIHJldHVybiBNeVN0cnVjdDM8aW50LCB1aW50PigzLCA0KS54
OworICAgICAgICB9CisgICAgICAgIHVpbnQgZm9vNygpIHsKKyAgICAgICAgICAgIHJldHVybiBN
eVN0cnVjdDM8aW50LCB1aW50PigzLCA0KS55OworICAgICAgICB9CisgICAgICAgIFMgYmFyPFM+
KFMgeCkgeworICAgICAgICAgICAgcmV0dXJuIE15U3RydWN0MzxTLCB1aW50Pih4LCA0KS54Owor
ICAgICAgICB9CisgICAgICAgIGludCBmb284KCkgeworICAgICAgICAgICAgcmV0dXJuIGJhcjxp
bnQ+KDMpOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLCAzKTsKKyAgICBjaGVja0ludChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzIiLCBbXSwgW10pLCA0KTsKKyAgICBjaGVja0lu
dChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzMiLCBbXSwgW10pLCAzKTsKKyAg
ICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb280IiwgW10sIFtd
KSwgNCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb281
IiwgW10sIFtdKSwgNyk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb282IiwgW10sIFtdKSwgMyk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiZm9vNyIsIFtdLCBbXSksIDQpOworICAgIGNoZWNrSW50KHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vOCIsIFtdLCBbXSksIDMpOworfQorCiBva1RvVGVz
dCA9IHRydWU7CiAKIGxldCB0ZXN0RmlsdGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcgYnkg
ZGVmYXVsdAo=
</data>
<flag name="review"
          id="344775"
          type_id="1"
          status="-"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>