<?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>23358</bug_id>
          
          <creation_ts>2009-01-15 14:55:29 -0800</creation_ts>
          <short_desc>Integrate accelerated rendering into RenderLayer</short_desc>
          <delta_ts>2009-03-02 11:51:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>23359</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dino</cc>
    
    <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>105972</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-15 14:55:29 -0800</bug_when>
    <thetext>This bug is for changes in existing code in RenderLayer and elsewhere in WebCore/rendering to enable acccelerated compositing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108062</commentid>
    <comment_count>1</comment_count>
      <attachid>27267</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-02-02 16:50:46 -0800</bug_when>
    <thetext>Created attachment 27267
Patch, changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108129</commentid>
    <comment_count>2</comment_count>
      <attachid>27267</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-02-03 11:16:53 -0800</bug_when>
    <thetext>Comment on attachment 27267
Patch, changelog.

I don&apos;t think you need to null check viww() in compositor().

Remove the font smoothing stuff from RenderLayer.  That needs more discussion.

Since you complicated the syncing because of lists being dirty, maybe you could pull that into a new function.. updateLayerListsIfNeeded or something.

Don&apos;t just comment out result.move(m_x, m_y).  Take it out in both places.

You should use an OwnPtr for m_backing.

Remove the CSSPropertyNames.h include from RenderLayer.h

The implementation of transparentAncestor is broken.  You want to walk until you hit a layer with isComposited set, and if you encounter a transparent layer before then, return it.  Otherwise return 0.  It should also probably be renamed to something like transparentPaintingAncestor.

r=me making all these changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108142</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-02-03 12:44:03 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/rendering/RenderLayer.cpp
	M	WebCore/rendering/RenderLayer.h
Committed r40544
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27267</attachid>
            <date>2009-02-02 16:50:46 -0800</date>
            <delta_ts>2009-02-03 11:16:53 -0800</delta_ts>
            <desc>Patch, changelog.</desc>
            <filename>23358_patch.txt</filename>
            <type>text/plain</type>
            <size>28598</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGRhOTczOC4uMGRjMmQxZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4OCBAQAorMjAwOS0wMi0wMiAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMzNTgKKworICAgICAgICBIb29rIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGludG8gUmVu
ZGVyTGF5ZXIuCisgICAgICAgICAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6flJlbmRlckxheWVyKToKKyAgICAgICAgSW5p
dCBhbmQgY2xlYW4gdXAgYmFja2luZyBhbmQgdGhlIGhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudCBi
aXQuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXBvc2l0b3Ip
OgorICAgICAgICBTaG9ydGN1dCB0byBnZXQgdG8gdGhlIFJlbmRlckxheWVyQ29tcG9zaXRvci4K
KworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToK
KyAgICAgICAgV2UgbmVlZCB0byBsZXQgZnVsbCByZXBhaW50cyBwcm9wYWdhdGUgdG8gYWxsIGNv
bXBvc2l0aW5nIGxheWVycywgYW5kIAorICAgICAgICB1cGRhdGUgdGhlIGJhY2tpbmcgYWZ0ZXIg
bGF5b3V0IGhlcmUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnRy
YW5zcGFyZW50QW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNwYXJlbmN5Q2xpcEJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXll
cnMpOgorICAgICAgICBBY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IG9wYWNpdHkgbWF5IGJlIHJl
bmRlcmVkIHZpYSB0aGUgY29tcG9zaXRpbmcKKyAgICAgICAgbGF5ZXIgc29tZXRpbWVzLgorICAg
ICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphZGRDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnJlbW92ZU9ubHlUaGlzTGF5ZXIpOgorICAgICAgICBUZWxsIHRoZSBjb21w
b3NpdG9yIHdoZW4gdGhlIFJlbmRlckxheWVyIGhpZXJhcmNoeSBjaGFuZ2VzLgorICAgICAgICAK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAg
IFVwZGF0ZSBsYXllciBnZW9tZXRyeSBhZnRlciBzY3JvbGxpbmcuCisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIpOgorICAgICAgICBXZSBzaG9ydC1j
aXJjdWl0IHBhaW50aW5nIG9uIGNvbXBvc2l0ZWQgbGF5ZXJzLCBiZWNhdXNlIHRoZXNlIGxheWVy
cworICAgICAgICBhcmUgcGFpbnRlZCBvbiBhIGNhbGxiYWNrIGZyb20gdGhlIGNvbXBvc2l0aW5n
IHN5c3RlbS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVz
dExheWVyKToKKyAgICAgICAgT25seSBhcHBseSB0cmFuc2Zvcm1zIGlmIHdlIGFyZSByZW5kZXJp
bmcgdGhlbSBpbiBzb2Z0d2FyZS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6bG9jYWxCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Ym91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmFic29sdXRlQm91
bmRpbmdCb3gpOgorICAgICAgICBSZWZhY3RvciBib3VuZGluZyBib3ggY29kZSB0aGF0IHdlIGNh
biBjb21wdXRlIGxvY2FsLCBhbmQgYW5jZXN0b3ItcmVsYXRpdmUKKyAgICAgICAgYm91bmRpbmcg
Ym94LCBhcyB3ZWxsIGFzIGFic29sdXRlLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjplbnN1cmVCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpjbGVhckJhY2tpbmcpOgorICAgICAgICBSZW5kZXJMYXllckJhY2tpbmcgY3JlYXRpb24gYW5k
IGRlc3RydWN0aW9uLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
ZXRQYXJlbnQpOgorICAgICAgICBUZWxsIHRoZSBjb21wb3NpdG9yIHdoZW4gdGhlIFJlbmRlckxh
eWVyIGhpZXJhcmNoeSBjaGFuZ2VzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
ZGlydHlaT3JkZXJMaXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlydHlT
dGFja2luZ0NvbnRleHRaT3JkZXJMaXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6ZGlydHlPdmVyZmxvd0xpc3QpOgorICAgICAgICBXaGVuIHRoZSB6LW9yZGVyIGFuZCBvdmVy
ZmxvdyBsaXN0cyBjaGFuZ2UsIHdlIG5lZWQgdG8gdGVsbCB0aGUKKyAgICAgICAgY29tcG9zaXRv
ciB0aGF0IHRoZSBjb21wb3NpdGVkIGxheWVycyBuZWVkIHRvIGJlIHJlamlnZ2VyZWQgc29vbi4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlWk9yZGVyTGlz
dHMpOgorICAgICAgICBXaGl0ZXNwYWNlIGNsZWFudXAuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNldEJhY2tpbmdOZWVkc1JlcGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNldEJhY2tpbmdOZWVkc1JlcGFpbnRJblJlY3QpOgorICAgICAg
ICBEaXJ0eSBjb21wb3NpdGVkIGxheWVyIGNvbnRlbnRzIGZvciBwYWludGluZy4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAgICAg
VXBkYXRlIHRoZSBsYXllciBiYWNraW5nIGFmdGVyIHN0eWxlIGNoYW5nZXMuCisKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojppc0NvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJhY2tpbmcp
OgorICAgICAgICBBY2Nlc3NvcnMgZm9yIHRlc3RpbmcgYW5kIGdldHRpbmcgdGhlIGJhY2tpbmcg
Zm9yIHRoaXMgUmVuZGVyTGF5ZXIuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnBhaW50c1dpdGhUcmFuc3BhcmVuY3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnBhaW50c1dpdGhUcmFuc2Zvcm0pOgorICAgICAgICBUcmFuc2Zvcm0gYW5kIG9wYWNp
dHkgY2FuIGJlIGFwcGxpZWQgdmlhIHRoZSBjb21wb3NpdGluZyBsYXllciwgb3IgcmVuZGVyZWQK
KyAgICAgICAgaW4gc29mdHdhcmUuIFRoZXNlIG1ldGhvZHMgdGVsbCB1cyBpZiB3ZSBuZWVkIHRv
IGFjY291bnQgZm9yIHRoZW0gaW4gdGhlCisgICAgICAgIG5vbi1jb21wb3NpdGluZyBwYXRoLgor
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNDb21wb3NpdGluZ0Rl
c2NlbmRhbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEhhc0NvbXBvc2l0
aW5nRGVzY2VuZGFudCk6CisgICAgICAgIE1haW50YWluIGEgYml0IHRvIHRlbGwgaWYgdGhpcyBs
YXllciBoYXMgY29tcG9zaXRlZCBkZXNjZW5kYW50cy4KKwogMjAwOS0wMi0wMiAgQWxleGV5IFBy
b3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggOThiOWY0Zi4uNDJjZjU1MSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNDQsNyArNDQsOSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAKKyNpbmNsdWRlICJDU3RyaW5n
LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2Vs
ZWN0b3IuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5o
IgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAgLTczLDkgKzc1LDE1IEBACiAjaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRlICJTZWxl
Y3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNp
bmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgiCisjZW5kaWYKKwogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNl
bmRpZgpAQCAtMTU2LDYgKzE2NCw5IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJC
b3gqIHJlbmRlcmVyKQogICAgICwgbV9oYXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1f
dmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURl
c2NlbmRhbnQoZmFsc2UpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICwg
bV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoZmFsc2UpCisjZW5kaWYKICAgICAsIG1fbWFycXVl
ZSgwKQogICAgICwgbV9zdGF0aWNYKDApCiAgICAgLCBtX3N0YXRpY1koMCkKQEAgLTE2Myw2ICsx
NzQsOSBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyQm94KiByZW5kZXJlcikKICAg
ICAsIG1fcmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3JuZXIoMCkKICAgICAsIG1fcmVz
aXplcigwKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAsIG1fYmFja2lu
ZygwKQorI2VuZGlmCiB7CiAgICAgaWYgKCFyZW5kZXJlci0+Zmlyc3RDaGlsZCgpICYmIHJlbmRl
cmVyLT5zdHlsZSgpKSB7CiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA9IGZh
bHNlOwpAQCAtMTg4LDYgKzIwMiwxMCBAQCBSZW5kZXJMYXllcjo6flJlbmRlckxheWVyKCkKICAg
ICBkZWxldGUgbV9vdmVyZmxvd0xpc3Q7CiAgICAgZGVsZXRlIG1fbWFycXVlZTsKIAorI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBjbGVhckJhY2tpbmcoKTsKKyNlbmRpZgor
ICAgIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIG5vIGxpbmdlcmluZyBjbGlwIHJlY3RzLgog
ICAgIEFTU0VSVCghbV9jbGlwUmVjdHMpOwogICAgIApAQCAtMjA0LDExICsyMjIsMjYgQEAgUmVu
ZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiAgICAgICAgIG1fcmVzaXplci0+ZGVzdHJveSgpOwog
fQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorUmVuZGVyTGF5ZXJDb21wb3Np
dG9yKiBSZW5kZXJMYXllcjo6Y29tcG9zaXRvcigpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyog
dmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKKyAgICByZXR1cm4gdmlldyA/IHZpZXctPmNvbXBv
c2l0b3IoKSA6IDA7Cit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhib29sIGRvRnVsbFJlcGFp
bnQsIGJvb2wgY2hlY2tGb3JSZXBhaW50KQogewogICAgIGlmIChkb0Z1bGxSZXBhaW50KSB7CiAg
ICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgICAgIGNoZWNrRm9yUmVwYWludCA9IGZhbHNlOworICAgICAgICAvLyBXZSBu
ZWVkIHRoZSBmdWxsIHJlcGFpbnQgdG8gcHJvcGFnYXRlIHRvIGNoaWxkIGxheWVycyBpZiB3ZSBh
cmUgaGFyZHdhcmUgY29tcG9zaXRpbmcuCisgICAgICAgIGlmICghY29tcG9zaXRvcigpLT5pbkNv
bXBvc2l0aW5nTW9kZSgpKQorICAgICAgICAgICAgZG9GdWxsUmVwYWludCA9IGZhbHNlOworI2Vs
c2UKICAgICAgICAgY2hlY2tGb3JSZXBhaW50ID0gZG9GdWxsUmVwYWludCA9IGZhbHNlOworI2Vu
ZGlmCiAgICAgfQogICAgIAogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsgLy8gRm9yIHJlbHBv
c2l0aW9uZWQgbGF5ZXJzIG9yIG5vbi1wb3NpdGlvbmVkIGxheWVycywKQEAgLTI1OSw2ICsyOTIs
MTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoYm9vbCBkb0Z1bGxS
ZXBhaW50LCBib29sIGNoZWNrRm9yUmVwYWludCkKIAogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNo
aWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkK
ICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25zKGRvRnVsbFJlcGFpbnQsIGNoZWNr
Rm9yUmVwYWludCk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYg
KGlzQ29tcG9zaXRlZCgpKQorICAgICAgICBiYWNraW5nKCktPnVwZGF0ZUFmdGVyTGF5b3V0KCk7
CisjZW5kaWYKICAgICAgICAgCiAgICAgLy8gV2l0aCBhbGwgb3VyIGNoaWxkcmVuIHBvc2l0aW9u
ZWQsIG5vdyB1cGRhdGUgb3VyIG1hcnF1ZWUgaWYgd2UgbmVlZCB0by4KICAgICBpZiAobV9tYXJx
dWVlKQpAQCAtNDk1LDExICs1MzMsMTMgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNUcmFuc3BhcmVu
dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlbmRlcmVyKCktPmlzVHJhbnNwYXJlbnQoKSB8fCByZW5k
ZXJlcigpLT5oYXNNYXNrKCk7CiB9CiAKLVJlbmRlckxheWVyKgotUmVuZGVyTGF5ZXI6OnRyYW5z
cGFyZW50QW5jZXN0b3IoKQorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjp0cmFuc3BhcmVudEFu
Y2VzdG9yKCkKIHsKKyAgICBpZiAoaXNDb21wb3NpdGVkKCkpCisgICAgICAgIHJldHVybiAwOwor
CiAgICAgUmVuZGVyTGF5ZXIqIGN1cnIgPSBwYXJlbnQoKTsKLSAgICBmb3IgKCA7IGN1cnIgJiYg
IWN1cnItPmlzVHJhbnNwYXJlbnQoKTsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7IH0KKyAgICBm
b3IgKCA7IGN1cnIgJiYgIWN1cnItPmlzQ29tcG9zaXRlZCgpICYmICFjdXJyLT5wYWludHNXaXRo
VHJhbnNwYXJlbmN5KCk7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkge30KICAgICByZXR1cm4gY3Vy
cjsKIH0KIApAQCAtNTA5LDE2ICs1NDksMTYgQEAgc3RhdGljIEludFJlY3QgdHJhbnNwYXJlbmN5
Q2xpcEJveChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZW5jbG9zaW5nVHJhbnNmb3IKICAg
ICAvLyBwYWludERpcnR5UmVjdCwgYW5kIHRoYXQgc2hvdWxkIGN1dCBkb3duIG9uIHRoZSBhbW91
bnQgd2UgaGF2ZSB0byBwYWludC4gIFN0aWxsIGl0CiAgICAgLy8gd291bGQgYmUgYmV0dGVyIHRv
IHJlc3BlY3QgY2xpcHMuCiAgICAgCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHQgPSBsLT50
cmFuc2Zvcm0oKTsKLSAgICBpZiAodCAmJiByb290TGF5ZXIgIT0gbCkgeworICAgIGlmIChyb290
TGF5ZXIgIT0gbCAmJiBsLT5wYWludHNXaXRoVHJhbnNmb3JtKCkpIHsKICAgICAgICAgLy8gVGhl
IGJlc3Qgd2UgY2FuIGRvIGhlcmUgaXMgdG8gdXNlIGVuY2xvc2VkIGJvdW5kaW5nIGJveGVzIHRv
IGVzdGFibGlzaCBhICJmdXp6eSIgZW5vdWdoIGNsaXAgdG8gZW5jb21wYXNzCiAgICAgICAgIC8v
IHRoZSB0cmFuc2Zvcm1lZCBsYXllciBhbmQgYWxsIG9mIGl0cyBjaGlsZHJlbi4KICAgICAgICAg
aW50IHggPSAwOwogICAgICAgICBpbnQgeSA9IDA7CiAgICAgICAgIGwtPmNvbnZlcnRUb0xheWVy
Q29vcmRzKHJvb3RMYXllciwgeCwgeSk7CisKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNmb3JtOwogICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHgsIHkpOwotICAgICAgICB0
cmFuc2Zvcm0gPSAqdCAqIHRyYW5zZm9ybTsKKyAgICAgICAgdHJhbnNmb3JtID0gKmwtPnRyYW5z
Zm9ybSgpICogdHJhbnNmb3JtOwogICAgICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiBlbmNs
b3NpbmdUcmFuc2Zvcm07CiAKICAgICAgICAgLy8gV2Ugbm93IGhhdmUgYSB0cmFuc2Zvcm0gdGhh
dCB3aWxsIHByb2R1Y2UgYSByZWN0YW5nbGUgaW4gb3VyIHZpZXcncyBzcGFjZS4KQEAgLTU1Miwx
NCArNTkyLDE0IEBAIHN0YXRpYyBJbnRSZWN0IHRyYW5zcGFyZW5jeUNsaXBCb3goY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGVuY2xvc2luZ1RyYW5zZm9yCiAKIHZvaWQgUmVuZGVyTGF5ZXI6
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllcikKIHsKLSAgICBpZiAocC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IChp
c1RyYW5zcGFyZW50KCkgJiYgbV91c2VkVHJhbnNwYXJlbmN5KSkKKyAgICBpZiAocC0+cGFpbnRp
bmdEaXNhYmxlZCgpIHx8IChwYWludHNXaXRoVHJhbnNwYXJlbmN5KCkgJiYgbV91c2VkVHJhbnNw
YXJlbmN5KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFJlbmRlckxheWVyKiBhbmNlc3Rv
ciA9IHRyYW5zcGFyZW50QW5jZXN0b3IoKTsKICAgICBpZiAoYW5jZXN0b3IpCiAgICAgICAgIGFu
Y2VzdG9yLT5iZWdpblRyYW5zcGFyZW5jeUxheWVycyhwLCByb290TGF5ZXIpOwogICAgIAotICAg
IGlmIChpc1RyYW5zcGFyZW50KCkpIHsKKyAgICBpZiAocGFpbnRzV2l0aFRyYW5zcGFyZW5jeSgp
KSB7CiAgICAgICAgIG1fdXNlZFRyYW5zcGFyZW5jeSA9IHRydWU7CiAgICAgICAgIHAtPnNhdmUo
KTsKICAgICAgICAgcC0+Y2xpcCh0cmFuc3BhcmVuY3lDbGlwQm94KFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIHRoaXMsIHJvb3RMYXllcikpOwpAQCAtNjE2LDEwICs2NTYsMTggQEAgdm9pZCBSZW5k
ZXJMYXllcjo6YWRkQ2hpbGQoUmVuZGVyTGF5ZXIqIGNoaWxkLCBSZW5kZXJMYXllciogYmVmb3Jl
Q2hpbGQpCiAgICAgY2hpbGQtPnVwZGF0ZVZpc2liaWxpdHlTdGF0dXMoKTsKICAgICBpZiAoY2hp
bGQtPm1faGFzVmlzaWJsZUNvbnRlbnQgfHwgY2hpbGQtPm1faGFzVmlzaWJsZURlc2NlbmRhbnQp
CiAgICAgICAgIGNoaWxkVmlzaWJpbGl0eUNoYW5nZWQodHJ1ZSk7CisgICAgCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGNvbXBvc2l0b3IoKS0+bGF5ZXJXYXNBZGRlZCh0
aGlzLCBjaGlsZCk7CisjZW5kaWYKIH0KIAogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZW1v
dmVDaGlsZChSZW5kZXJMYXllciogb2xkQ2hpbGQpCiB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgIGNvbXBvc2l0b3IoKS0+bGF5ZXJXaWxsQmVSZW1vdmVkKHRoaXMsIG9s
ZENoaWxkKTsKKyNlbmRpZgorCiAgICAgLy8gcmVtb3ZlIHRoZSBjaGlsZAogICAgIGlmIChvbGRD
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpCiAgICAgICAgIG9sZENoaWxkLT5wcmV2aW91c1NpYmxp
bmcoKS0+c2V0TmV4dFNpYmxpbmcob2xkQ2hpbGQtPm5leHRTaWJsaW5nKCkpOwpAQCAtNjU2LDYg
KzcwNCwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpyZW1vdmVPbmx5VGhpc0xheWVyKCkKICAgICBp
ZiAoIW1fcGFyZW50KQogICAgICAgICByZXR1cm47CiAgICAgCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIGNvbXBvc2l0b3IoKS0+bGF5ZXJXaWxsQmVSZW1vdmVkKG1fcGFy
ZW50LCB0aGlzKTsKKyNlbmRpZgorCiAgICAgLy8gRGlydHkgdGhlIGNsaXAgcmVjdHMuCiAgICAg
Y2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogCkBAIC04MzMsNiArODg1LDEx
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4LCBpbnQgeSwgYm9vbCB1
cGRhdGVTY3JvbGxiYXJzLCBib29sIHJlcGFpCiAgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMg
b2Ygb3VyIGNoaWxkIGxheWVycy4KICAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGNo
aWxkLT51cGRhdGVMYXllclBvc2l0aW9ucyhmYWxzZSwgZmFsc2UpOworCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkKKyAgICAgICAgbV9i
YWNraW5nLT51cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkoKTsKKyNlbmRpZgogICAgIAogICAg
IFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CiAgICAgCkBAIC0xNjU2LDYg
KzE3MTMsMTIgQEAgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgR3JhcGhpY3NDb250ZXh0KiBwLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50
UmVjdCYgcGFpbnREaXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgUGFpbnRSZXN0cmlj
dGlvbiBwYWludFJlc3RyaWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBwYWludGluZ1Jvb3QsIGJvb2wgYXBwbGllZFRyYW5zZm9ybSwgYm9vbCB0ZW1wb3JhcnlD
bGlwUmVjdHMpCiB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIENv
bXBvc2l0ZWQgUmVuZGVyTGF5ZXJzIGFyZSBwYWludGVkIHZpYSB0aGUgYmFja2luZydzIHBhaW50
SW50b0xheWVyKCkuCisgICAgaWYgKGlzQ29tcG9zaXRlZCgpICYmICFiYWNraW5nKCktPnBhaW50
aW5nR29lc1RvV2luZG93KCkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgLy8gQXZv
aWQgcGFpbnRpbmcgbGF5ZXJzIHdoZW4gc3R5bGVzaGVldHMgaGF2ZW4ndCBsb2FkZWQuICBUaGlz
IGVsaW1pbmF0ZXMgRk9VQy4KICAgICAvLyBJdCdzIG9rIG5vdCB0byBkcmF3LCBiZWNhdXNlIGxh
dGVyIG9uLCB3aGVuIGFsbCB0aGUgc3R5bGVzaGVldHMgZG8gbG9hZCwgdXBkYXRlU3R5bGVTZWxl
Y3RvciBvbiB0aGUgRG9jdW1lbnQKICAgICAvLyB3aWxsIGRvIGEgZnVsbCByZXBhaW50KCkuCkBA
IC0xNjY2LDExICsxNzI5LDExIEBAIFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRlckxheWVy
KiByb290TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogcCwKICAgICBpZiAoIXJlbmRlcmVyKCktPm9w
YWNpdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGlzVHJhbnNwYXJlbnQoKSkKKyAg
ICBpZiAocGFpbnRzV2l0aFRyYW5zcGFyZW5jeSgpKQogICAgICAgICBoYXZlVHJhbnNwYXJlbmN5
ID0gdHJ1ZTsKIAogICAgIC8vIEFwcGx5IGEgdHJhbnNmb3JtIGlmIHdlIGhhdmUgb25lLiAgQSBy
ZWZsZWN0aW9uIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSB0cmFuc2Zvcm0sIHNpbmNlIGl0IGlzIGEg
ZmxpcCBhbmQgYSB0cmFuc2xhdGUuCi0gICAgaWYgKG1fdHJhbnNmb3JtICYmICFhcHBsaWVkVHJh
bnNmb3JtKSB7CisgICAgaWYgKHBhaW50c1dpdGhUcmFuc2Zvcm0oKSAmJiAhYXBwbGllZFRyYW5z
Zm9ybSkgewogICAgICAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNhbid0IGJlIGludmVydGVkLCB0
aGVuIGRvbid0IHBhaW50IGFueXRoaW5nLgogICAgICAgICBpZiAoIW1fdHJhbnNmb3JtLT5pc0lu
dmVydGlibGUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3MTAsOSArMTc3MywxNiBAQCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBHcmFwaGljc0Nv
bnRleHQqIHAsCiAgICAgICAgIHAtPnNhdmUoKTsKICAgICAgICAgcC0+Y29uY2F0Q1RNKHRyYW5z
Zm9ybSk7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIGJvb2wg
d2FzU21vb3RoaW5nID0gcC0+dXNpbmdGb250U21vb3RoaW5nKCk7CisgICAgICAgIHAtPnNldFVz
ZUZvbnRTbW9vdGhpbmcoZmFsc2UpOworI2VuZGlmCiAgICAgICAgIC8vIE5vdyBkbyBhIHBhaW50
IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBiZSB1cy4KICAgICAgICAgcGFpbnRMYXll
cih0aGlzLCBwLCB0cmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3QocGFpbnREaXJ0eVJlY3QpLCBo
YXZlVHJhbnNwYXJlbmN5LCBwYWludFJlc3RyaWN0aW9uLCBwYWludGluZ1Jvb3QsIHRydWUsIHRl
bXBvcmFyeUNsaXBSZWN0cyk7Ci0gICAgICAgIAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorICAgICAgICBwLT5zZXRVc2VGb250U21vb3RoaW5nKHdhc1Ntb290aGluZyk7Cisj
ZW5kaWYgICAgICAgIAogICAgICAgICBwLT5yZXN0b3JlKCk7CiAgICAgICAgIAogICAgICAgICAv
LyBSZXN0b3JlIHRoZSBjbGlwLgpAQCAtMTczOCw4ICsxODA4LDE4IEBAIFJlbmRlckxheWVyOjpw
YWludExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCogcCwKICAg
ICBpbnQgdHkgPSB5IC0gcmVuZGVyZXIoKS0+eSgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAvLyBFbnN1cmUgb3VyIGxpc3RzIGFyZSB1cC10by1kYXRlLgorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoY29tcG9zaXRvcigpLT5pbkNvbXBvc2l0
aW5nTW9kZSgpKSB7CisgICAgICAgIGlmICgoaXNTdGFja2luZ0NvbnRleHQoKSAmJiBtX3pPcmRl
ckxpc3RzRGlydHkpIHx8IG1fb3ZlcmZsb3dMaXN0RGlydHkpCisgICAgICAgICAgICBjb21wb3Np
dG9yKCktPnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKHRoaXMpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHVwZGF0ZVpPcmRlckxpc3RzKCk7CisgICAgICAgIHVwZGF0ZU92ZXJmbG93TGlzdCgpOwor
ICAgIH0KKyNlbHNlCiAgICAgdXBkYXRlWk9yZGVyTGlzdHMoKTsKICAgICB1cGRhdGVPdmVyZmxv
d0xpc3QoKTsKKyNlbmRpZgogCiAgICAgYm9vbCBzZWxlY3Rpb25Pbmx5ID0gcGFpbnRSZXN0cmlj
dGlvbiA9PSBQYWludFJlc3RyaWN0aW9uU2VsZWN0aW9uT25seSB8fCBwYWludFJlc3RyaWN0aW9u
ID09IFBhaW50UmVzdHJpY3Rpb25TZWxlY3Rpb25Pbmx5QmxhY2tUZXh0OwogICAgIGJvb2wgZm9y
Y2VCbGFja1RleHQgPSBwYWludFJlc3RyaWN0aW9uID09IFBhaW50UmVzdHJpY3Rpb25TZWxlY3Rp
b25Pbmx5QmxhY2tUZXh0OwpAQCAtMTgzNiw3ICsxOTE2LDcgQEAgUmVuZGVyTGF5ZXI6OnBhaW50
TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgR3JhcGhpY3NDb250ZXh0KiBwLAogICAgIH0K
IAogICAgIC8vIEVuZCBvdXIgdHJhbnNwYXJlbmN5IGxheWVyCi0gICAgaWYgKGlzVHJhbnNwYXJl
bnQoKSAmJiBtX3VzZWRUcmFuc3BhcmVuY3kpIHsKKyAgICBpZiAoaGF2ZVRyYW5zcGFyZW5jeSAm
JiBtX3VzZWRUcmFuc3BhcmVuY3kpIHsKICAgICAgICAgcC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKICAgICAgICAgcC0+cmVzdG9yZSgpOwogICAgICAgICBtX3VzZWRUcmFuc3BhcmVuY3kgPSBm
YWxzZTsKQEAgLTE4OTQsNyArMTk3NCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBoaXRUZXN0
UmVjdCwgY29uc3QgSW50UG9pbnQmIGhpdFRlc3RQb2ludCwgYm9vbCBhcHBsaWVkVHJhbnNmb3Jt
KQogewogICAgIC8vIEFwcGx5IGEgdHJhbnNmb3JtIGlmIHdlIGhhdmUgb25lLgotICAgIGlmICht
X3RyYW5zZm9ybSAmJiAhYXBwbGllZFRyYW5zZm9ybSkgeworICAgIGlmIChwYWludHNXaXRoVHJh
bnNmb3JtKCkgJiYgIWFwcGxpZWRUcmFuc2Zvcm0pIHsKICAgICAgICAgLy8gSWYgdGhlIHRyYW5z
Zm9ybSBjYW4ndCBiZSBpbnZlcnRlZCwgdGhlbiBkb24ndCBoaXQgdGVzdCB0aGlzIGxheWVyIGF0
IGFsbC4KICAgICAgICAgaWYgKCFtX3RyYW5zZm9ybS0+aXNJbnZlcnRpYmxlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKQEAgLTE5MzAsOCArMjAxMCwxOSBAQCBSZW5kZXJMYXllciogUmVuZGVy
TGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBIaXRUZXN0
UmVxdQogICAgIGNhbGN1bGF0ZVJlY3RzKHJvb3RMYXllciwgaGl0VGVzdFJlY3QsIGxheWVyQm91
bmRzLCBiZ1JlY3QsIGZnUmVjdCwgb3V0bGluZVJlY3QpOwogICAgIAogICAgIC8vIEVuc3VyZSBv
dXIgbGlzdHMgYXJlIHVwLXRvLWRhdGUuCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorICAgIGlmIChjb21wb3NpdG9yKCktPmluQ29tcG9zaXRpbmdNb2RlKCkpIHsKKyAgICAgICAg
aWYgKChpc1N0YWNraW5nQ29udGV4dCgpICYmIG1fek9yZGVyTGlzdHNEaXJ0eSkgfHwgbV9vdmVy
Zmxvd0xpc3REaXJ0eSkKKyAgICAgICAgICAgIGNvbXBvc2l0b3IoKS0+dXBkYXRlQ29tcG9zaXRp
bmdMYXllcnModGhpcyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB1cGRhdGVaT3JkZXJM
aXN0cygpOworICAgICAgICB1cGRhdGVPdmVyZmxvd0xpc3QoKTsKKyAgICB9CisjZWxzZQogICAg
IHVwZGF0ZVpPcmRlckxpc3RzKCk7CiAgICAgdXBkYXRlT3ZlcmZsb3dMaXN0KCk7CisjZW5kaWYK
IAogICAgIC8vIFRoaXMgdmFyaWFibGUgdHJhY2tzIHdoaWNoIGxheWVyIHRoZSBtb3VzZSBlbmRz
IHVwIGJlaW5nIGluc2lkZS4gIFRoZSBtaW51dGUgd2UgZmluZCBhbiBpbnNpZGVMYXllciwKICAg
ICAvLyB3ZSBhcmUgZG9uZSBhbmQgY2FuIHJldHVybiBpdC4KQEAgLTIyMDUsNyArMjI5Niw3IEBA
IGJvb2wgUmVuZGVyTGF5ZXI6OmludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IEludFJlY3QmIGxh
eWVyQm91bmRzLCBjb25zdCBJbnRSZWN0CiAgICAgcmV0dXJuIGJvdW5kaW5nQm94KHJvb3RMYXll
cikuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KTsKIH0KIAotSW50UmVjdCBSZW5kZXJMYXllcjo6Ym91
bmRpbmdCb3goY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllcikgY29uc3QKK0ludFJlY3QgUmVu
ZGVyTGF5ZXI6OmxvY2FsQm91bmRpbmdCb3goKSBjb25zdAogewogICAgIC8vIFRoZXJlIGFyZSB0
aHJlZSBzcGVjaWFsIGNhc2VzIHdlIG5lZWQgdG8gY29uc2lkZXIuCiAgICAgLy8gKDEpIElubGlu
ZSBGbG93cy4gIEZvciBpbmxpbmUgZmxvd3Mgd2Ugd2lsbCBjcmVhdGUgYSBib3VuZGluZyBib3gg
dGhhdCBmdWxseSBlbmNvbXBhc3NlcyBhbGwgb2YgdGhlIGxpbmVzIG9jY3VwaWVkIGJ5IHRoZQpA
QCAtMjIyOCw3ICsyMzE5LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3goY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllcikgY29uc3QKICAgICAgICAgaW50IGxlZnQgPSBmaXJz
dEJveC0+eFBvcygpOwogICAgICAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IGZpcnN0Qm94
LT5uZXh0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKICAgICAg
ICAgICAgIGxlZnQgPSBtaW4obGVmdCwgY3Vyci0+eFBvcygpKTsKLSAgICAgICAgcmVzdWx0ID0g
SW50UmVjdChtX3ggKyBsZWZ0LCBtX3kgKyAodG9wIC0gcmVuZGVyZXIoKS0+eSgpKSwgd2lkdGgo
KSwgYm90dG9tIC0gdG9wKTsKKyAgICAgICAgcmVzdWx0ID0gSW50UmVjdChsZWZ0LCAodG9wIC0g
cmVuZGVyZXIoKS0+eSgpKSwgd2lkdGgoKSwgYm90dG9tIC0gdG9wKTsKICAgICB9IGVsc2UgaWYg
KHJlbmRlcmVyKCktPmlzVGFibGVSb3coKSkgewogICAgICAgICAvLyBPdXIgYm91bmRpbmcgYm94
IGlzIGp1c3QgdGhlIHVuaW9uIG9mIGFsbCBvZiBvdXIgY2VsbHMnIGJvcmRlci9vdmVyZmxvdyBy
ZWN0cy4KICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gcmVuZGVyZXIoKS0+Zmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewpAQCAtMjI0
MCw3ICsyMzMxLDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3goY29uc3QgUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllcikgY29uc3QKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
aXRlKG92ZXJmbG93UmVjdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmVz
dWx0Lm1vdmUobV94LCBtX3kpOworICAgICAgICAvL3Jlc3VsdC5tb3ZlKG1feCwgbV95KTsKICAg
ICB9IGVsc2UgewogICAgICAgICBpZiAocmVuZGVyZXIoKS0+aGFzTWFzaygpKQogICAgICAgICAg
ICAgcmVzdWx0ID0gcmVuZGVyZXIoKS0+bWFza0NsaXBSZWN0KCk7CkBAIC0yMjUzLDIyICsyMzQ0
LDMyIEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVy
KiByb290TGF5ZXIpIGNvbnN0CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBoYXZlIHRvIGFk
anVzdCB0aGUgeC95IG9mIHRoaXMgcmVzdWx0IHNvIHRoYXQgaXQgaXMgaW4gdGhlIGNvb3JkaW5h
dGUgc3BhY2Ugb2YgdGhlIGxheWVyLgotICAgICAgICByZXN1bHQubW92ZShtX3gsIG1feSk7Cisg
ICAgICAgIC8vcmVzdWx0Lm1vdmUobV94LCBtX3kpOwogICAgIH0KLSAgICAKLSAgICAvLyBDb252
ZXJ0IHRoZSBib3VuZGluZyBib3ggdG8gYW4gYWJzb2x1dGUgcG9zaXRpb24uICBXZSBjYW4gZG8g
dGhpcyBlYXNpbHkgYnkgbG9va2luZyBhdCB0aGUgZGVsdGEKLSAgICAvLyBiZXR3ZWVuIHRoZSBi
b3VuZGluZyBib3gncyB4cG9zIGFuZCBvdXIgbGF5ZXIncyB4cG9zIGFuZCB0aGVuIGFwcGx5aW5n
IHRoYXQgdG8gdGhlIGFic29sdXRlIGxheWVyQm91bmRzCi0gICAgLy8gcGFzc2VkIGluLgotICAg
IGludCBhYnNYID0gMCwgYWJzWSA9IDA7Ci0gICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdExh
eWVyLCBhYnNYLCBhYnNZKTsKLSAgICByZXN1bHQubW92ZShhYnNYIC0gbV94LCBhYnNZIC0gbV95
KTsKKwogICAgIFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CiAgICAgQVNT
RVJUKHZpZXcpOwogICAgIGlmICh2aWV3KQotICAgICAgICByZXN1bHQuaW5mbGF0ZSh2aWV3LT5t
YXhpbWFsT3V0bGluZVNpemUoKSk7CisgICAgICAgIHJlc3VsdC5pbmZsYXRlKHZpZXctPm1heGlt
YWxPdXRsaW5lU2l6ZSgpKTsgLy8gVXNlZCB0byBhcHBseSBhIGZ1ZGdlIGZhY3RvciB0byBkaXJ0
eS1yZWN0IGNoZWNrcyBvbiBibG9ja3MvdGFibGVzLgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworSW50UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3goY29uc3QgUmVuZGVyTGF5ZXIqIGFu
Y2VzdG9yTGF5ZXIpIGNvbnN0Cit7ICAgIAorICAgIEludFJlY3QgcmVzdWx0ID0gbG9jYWxCb3Vu
ZGluZ0JveCgpOworCisgICAgaW50IGRlbHRhWCA9IDAsIGRlbHRhWSA9IDA7CisgICAgY29udmVy
dFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgZGVsdGFYLCBkZWx0YVkpOworICAgIHJlc3Vs
dC5tb3ZlKGRlbHRhWCwgZGVsdGFZKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitJbnRSZWN0
IFJlbmRlckxheWVyOjphYnNvbHV0ZUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Ym91bmRpbmdCb3gocm9vdCgpKTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJDbGlwUmVj
dHNJbmNsdWRpbmdEZXNjZW5kYW50cygpCiB7CiAgICAgaWYgKCFtX2NsaXBSZWN0cykKQEAgLTIy
OTEsNiArMjM5MiwzOSBAQCB2b2lkIFJlbmRlckxheWVyOjpjbGVhckNsaXBSZWN0cygpCiAgICAg
fQogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorUmVuZGVyTGF5ZXJCYWNr
aW5nKiBSZW5kZXJMYXllcjo6ZW5zdXJlQmFja2luZygpCit7CisgICAgaWYgKCFtX2JhY2tpbmcp
CisgICAgICAgIG1fYmFja2luZyA9IG5ldyBSZW5kZXJMYXllckJhY2tpbmcodGhpcyk7CisgICAg
cmV0dXJuIG1fYmFja2luZzsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJCYWNraW5nKCkK
K3sKKyAgICBkZWxldGUgbV9iYWNraW5nOworICAgIG1fYmFja2luZyA9IDA7Cit9CisjZW5kaWYK
Kwordm9pZCBSZW5kZXJMYXllcjo6c2V0UGFyZW50KFJlbmRlckxheWVyKiBwYXJlbnQpCit7Cisg
ICAgaWYgKHBhcmVudCA9PSBtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX3BhcmVudCAmJiBjb21wb3NpdG9yKCkp
CisgICAgICAgIGNvbXBvc2l0b3IoKS0+bGF5ZXJXaWxsQmVSZW1vdmVkKG1fcGFyZW50LCB0aGlz
KTsKKyNlbmRpZgorICAgIAorICAgIG1fcGFyZW50ID0gcGFyZW50OworICAgIAorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIGNvbXBv
c2l0b3IoKS0+bGF5ZXJXYXNBZGRlZChtX3BhcmVudCwgdGhpcyk7CisjZW5kaWYKK30KKwogc3Rh
dGljIFJlbmRlck9iamVjdCogY29tbW9uQW5jZXN0b3IoUmVuZGVyT2JqZWN0KiBvYmoxLCBSZW5k
ZXJPYmplY3QqIG9iajIpCiB7CiAgICAgaWYgKCFvYmoxIHx8ICFvYmoyKQpAQCAtMjM3OSwyMCAr
MjUxMywyNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVpJbmRleChSZW5kZXJMYXllciog
Zmlyc3QsIFJlbmRlckxheWVyKiBzZWNvbmQpCiAgICAgcmV0dXJuIGZpcnN0LT56SW5kZXgoKSA8
IHNlY29uZC0+ekluZGV4KCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5Wk9yZGVyTGlz
dHMoKQordm9pZCBSZW5kZXJMYXllcjo6ZGlydHlaT3JkZXJMaXN0cyhib29sIHNjaGVkdWxlVXBk
YXRlKQogewogICAgIGlmIChtX3Bvc1pPcmRlckxpc3QpCiAgICAgICAgIG1fcG9zWk9yZGVyTGlz
dC0+Y2xlYXIoKTsKICAgICBpZiAobV9uZWdaT3JkZXJMaXN0KQogICAgICAgICBtX25lZ1pPcmRl
ckxpc3QtPmNsZWFyKCk7CiAgICAgbV96T3JkZXJMaXN0c0RpcnR5ID0gdHJ1ZTsKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoc2NoZWR1bGVVcGRhdGUgJiYgY29t
cG9zaXRvcigpKQorICAgICAgICBjb21wb3NpdG9yKCktPnNldENvbXBvc2l0aW5nTGF5ZXJzTmVl
ZFVwZGF0ZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2NoZWR1bGVVcGRhdGUpOworI2Vu
ZGlmCiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5U3RhY2tpbmdDb250ZXh0Wk9yZGVyTGlz
dHMoKQordm9pZCBSZW5kZXJMYXllcjo6ZGlydHlTdGFja2luZ0NvbnRleHRaT3JkZXJMaXN0cyhi
b29sIHNjaGVkdWxlVXBkYXRlKQogewogICAgIFJlbmRlckxheWVyKiBzYyA9IHN0YWNraW5nQ29u
dGV4dCgpOwogICAgIGlmIChzYykKLSAgICAgICAgc2MtPmRpcnR5Wk9yZGVyTGlzdHMoKTsKKyAg
ICAgICAgc2MtPmRpcnR5Wk9yZGVyTGlzdHMoc2NoZWR1bGVVcGRhdGUpOwogfQogCiB2b2lkIFJl
bmRlckxheWVyOjpkaXJ0eU92ZXJmbG93TGlzdCgpCkBAIC0yNDAwLDEzICsyNTQxLDE4IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OmRpcnR5T3ZlcmZsb3dMaXN0KCkKICAgICBpZiAobV9vdmVyZmxvd0xp
c3QpCiAgICAgICAgIG1fb3ZlcmZsb3dMaXN0LT5jbGVhcigpOwogICAgIG1fb3ZlcmZsb3dMaXN0
RGlydHkgPSB0cnVlOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlm
IChjb21wb3NpdG9yKCkpCisgICAgICAgIGNvbXBvc2l0b3IoKS0+c2V0Q29tcG9zaXRpbmdMYXll
cnNOZWVkVXBkYXRlKCk7CisjZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlWk9y
ZGVyTGlzdHMoKQogewogICAgIGlmICghaXNTdGFja2luZ0NvbnRleHQoKSB8fCAhbV96T3JkZXJM
aXN0c0RpcnR5KQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgZm9yIChSZW5kZXJM
YXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKQogICAgICAgICBpZiAoIW1fcmVmbGVjdGlvbiB8fCByZWZsZWN0aW9uTGF5ZXIoKSAh
PSBjaGlsZCkKICAgICAgICAgICAgIGNoaWxkLT5jb2xsZWN0TGF5ZXJzKG1fcG9zWk9yZGVyTGlz
dCwgbV9uZWdaT3JkZXJMaXN0KTsKQEAgLTI0MTQsNiArMjU2MCw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZVpPcmRlckxpc3RzKCkKICAgICAvLyBTb3J0IHRoZSB0d28gbGlzdHMuCiAgICAg
aWYgKG1fcG9zWk9yZGVyTGlzdCkKICAgICAgICAgc3RkOjpzdGFibGVfc29ydChtX3Bvc1pPcmRl
ckxpc3QtPmJlZ2luKCksIG1fcG9zWk9yZGVyTGlzdC0+ZW5kKCksIGNvbXBhcmVaSW5kZXgpOwor
CiAgICAgaWYgKG1fbmVnWk9yZGVyTGlzdCkKICAgICAgICAgc3RkOjpzdGFibGVfc29ydChtX25l
Z1pPcmRlckxpc3QtPmJlZ2luKCksIG1fbmVnWk9yZGVyTGlzdC0+ZW5kKCksIGNvbXBhcmVaSW5k
ZXgpOwogCkBAIC0yNDcyLDYgKzI2MTksNDAgQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVwYWludElu
Y2x1ZGluZ0Rlc2NlbmRhbnRzKCkKICAgICAgICAgY3Vyci0+cmVwYWludEluY2x1ZGluZ0Rlc2Nl
bmRhbnRzKCk7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCit2b2lkIFJl
bmRlckxheWVyOjpzZXRCYWNraW5nTmVlZHNSZXBhaW50KCkKK3sKKyAgICBBU1NFUlQoaXNDb21w
b3NpdGVkKCkpOworICAgIGlmIChiYWNraW5nKCktPnBhaW50aW5nR29lc1RvV2luZG93KCkpIHsK
KyAgICAgICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRvIHJlcGFpbnQgdGhlIHBsYWNlaG9sZGVyIGRv
Y3VtZW50IGxheWVyLCBwcm9wYWdhdGUgdGhlCisgICAgICAgIC8vIHJlcGFpbnQgdG8gdGhlIG5h
dGl2ZSB2aWV3IHN5c3RlbS4KKyAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCkt
PnZpZXcoKTsKKyAgICAgICAgaWYgKHZpZXcpCisgICAgICAgICAgICB2aWV3LT5yZXBhaW50Vmll
d1JlY3RhbmdsZShhYnNvbHV0ZUJvdW5kaW5nQm94KCkpOworICAgIH0gZWxzZQorICAgICAgICBi
YWNraW5nKCktPnNldENvbnRlbnRzTmVlZERpc3BsYXkoKTsKK30KKwordm9pZCBSZW5kZXJMYXll
cjo6c2V0QmFja2luZ05lZWRzUmVwYWludEluUmVjdChjb25zdCBJbnRSZWN0JiByKQoreworICAg
IEFTU0VSVChpc0NvbXBvc2l0ZWQoKSk7CisgICAgaWYgKGJhY2tpbmcoKS0+cGFpbnRpbmdHb2Vz
VG9XaW5kb3coKSkgeworICAgICAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gcmVwYWludCB0aGUg
cGxhY2Vob2xkZXIgZG9jdW1lbnQgbGF5ZXIsIHByb3BhZ2F0ZSB0aGUKKyAgICAgICAgLy8gcmVw
YWludCB0byB0aGUgbmF0aXZlIHZpZXcgc3lzdGVtLgorICAgICAgICBJbnRSZWN0IGFic1JlY3Qo
cik7CisgICAgICAgIGludCB4ID0gMDsKKyAgICAgICAgaW50IHkgPSAwOworICAgICAgICBjb252
ZXJ0VG9MYXllckNvb3Jkcyhyb290KCksIHgsIHkpOworICAgICAgICBhYnNSZWN0Lm1vdmUoeCwg
eSk7CisKKyAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKKyAg
ICAgICAgaWYgKHZpZXcpCisgICAgICAgICAgICB2aWV3LT5yZXBhaW50Vmlld1JlY3RhbmdsZShh
YnNSZWN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgYmFja2luZygpLT5zZXRDb250ZW50c05lZWRE
aXNwbGF5SW5SZWN0KHIpOworfQorI2VuZGlmCisKIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEJl
T3ZlcmZsb3dPbmx5KCkgY29uc3QKIHsKICAgICByZXR1cm4gKHJlbmRlcmVyKCktPmhhc092ZXJm
bG93Q2xpcCgpIHx8IHJlbmRlcmVyKCktPmhhc1JlZmxlY3Rpb24oKSkgJiYgCkBAIC0yNDgxLDcg
KzI2NjIsNyBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRCZU92ZXJmbG93T25seSgpIGNvbnN0
CiAgICAgICAgICAgICFpc1RyYW5zcGFyZW50KCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnN0
eWxlQ2hhbmdlZChSZW5kZXJTdHlsZTo6RGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqKQordm9pZCBS
ZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFJlbmRlclN0eWxlOjpEaWZmIGRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlKikKIHsKICAgICBib29sIGlzT3ZlcmZsb3dPbmx5ID0gc2hvdWxkQmVPdmVyZmxv
d09ubHkoKTsKICAgICBpZiAoaXNPdmVyZmxvd09ubHkgIT0gbV9pc092ZXJmbG93T25seSkgewpA
QCAtMjUxOSw2ICsyNzAwLDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChSZW5k
ZXJTdHlsZTo6RGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqKQogICAgIAogICAgIHVwZGF0ZVNjcm9s
bENvcm5lclN0eWxlKCk7CiAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7CisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdXBkYXRlVHJhbnNmb3JtKCk7CisKKyAgICBpZiAo
Y29tcG9zaXRvcigpLT51cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUodGhpcywgZGlmZikpCisg
ICAgICAgIGNvbXBvc2l0b3IoKS0+c2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkVXBkYXRlKCk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShkaWZmKTsKKyNlbmRpZgogfQogCiB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRl
eCBmZTQzM2YwLi5hM2RhNWU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTQ0LDYgKzQ0
LDcgQEAKICNpZm5kZWYgUmVuZGVyTGF5ZXJfaAogI2RlZmluZSBSZW5kZXJMYXllcl9oCiAKKyNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTUxLDcgKzUy
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDsKIGNsYXNzIENhY2hlZFJlc291cmNlOwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIFJl
bmRlckZyYW1lU2V0OwpAQCAtNjMsNiArNjMsMTIgQEAgY2xhc3MgUmVuZGVyVGFibGU7CiBjbGFz
cyBSZW5kZXJUZXh0OwogY2xhc3MgUmVuZGVyVmlldzsKIGNsYXNzIFNjcm9sbGJhcjsKK2NsYXNz
IFRyYW5zZm9ybWF0aW9uTWF0cml4OworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOworY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OworI2VuZGlmCiAKIHN0cnVjdCBIaXRUZXN0UmVxdWVzdDsKIApAQCAtMjAwLDYgKzIwNiwxMyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHJlcGFpbnRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIEluZGljYXRlIHRoYXQgdGhl
IGxheWVyIGNvbnRlbnRzIG5lZWQgdG8gYmUgcmVwYWludGVkLiBPbmx5IGhhcyBhbiBlZmZlY3QK
KyAgICAvLyBpZiBsYXllciBjb21wb3NpdGluZyBpcyBiZWluZyB1c2VkLAorICAgIHZvaWQgc2V0
QmFja2luZ05lZWRzUmVwYWludCgpOworICAgIHZvaWQgc2V0QmFja2luZ05lZWRzUmVwYWludElu
UmVjdChjb25zdCBJbnRSZWN0JiByKTsgLy8gciBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBv
ZiB0aGUgbGF5ZXIncyByZW5kZXIgb2JqZWN0CisjZW5kaWYKKwogICAgIHZvaWQgc3R5bGVDaGFu
Z2VkKFJlbmRlclN0eWxlOjpEaWZmLCBjb25zdCBSZW5kZXJTdHlsZSopOwogCiAgICAgUmVuZGVy
TWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZTsgfQpAQCAtMjg4LDYg
KzMwMSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiwgY29uc3QgSW50U2l6ZSYpOwogICAgIGJvb2wgaW5SZXNpemVNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pblJlc2l6ZU1vZGU7IH0KICAgICB2b2lkIHNldEluUmVzaXplTW9kZShib29sIGIp
IHsgbV9pblJlc2l6ZU1vZGUgPSBiOyB9CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgUmVuZGVyTGF5ZXJDb21wb3NpdG9yKiBjb21wb3NpdG9yKCkgY29uc3Q7CisjZW5k
aWYKICAgICAKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKICAgICB2b2lkIHVwZGF0
ZUxheWVyUG9zaXRpb25zKGJvb2wgZG9GdWxsUmVwYWludCA9IGZhbHNlLCBib29sIGNoZWNrRm9y
UmVwYWludCA9IHRydWUpOwpAQCAtMzA1LDggKzMyMiw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJM
YXllciogc3RhY2tpbmdDb250ZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBpc1N0YWNraW5nQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuICFoYXNBdXRvWkluZGV4KCkgfHwgcmVuZGVyZXIoKS0+aXNSZW5k
ZXJWaWV3KCk7IH0KIAotICAgIHZvaWQgZGlydHlaT3JkZXJMaXN0cygpOwotICAgIHZvaWQgZGly
dHlTdGFja2luZ0NvbnRleHRaT3JkZXJMaXN0cygpOworICAgIHZvaWQgZGlydHlaT3JkZXJMaXN0
cyhib29sIHNjaGVkdWxlVXBkYXRlID0gdHJ1ZSk7CisgICAgdm9pZCBkaXJ0eVN0YWNraW5nQ29u
dGV4dFpPcmRlckxpc3RzKGJvb2wgc2NoZWR1bGVVcGRhdGUgPSB0cnVlKTsKICAgICB2b2lkIHVw
ZGF0ZVpPcmRlckxpc3RzKCk7CiAgICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIHBvc1pPcmRlckxp
c3QoKSBjb25zdCB7IHJldHVybiBtX3Bvc1pPcmRlckxpc3Q7IH0KICAgICBWZWN0b3I8UmVuZGVy
TGF5ZXIqPiogbmVnWk9yZGVyTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbmVnWk9yZGVyTGlzdDsg
fQpAQCAtMzUzLDggKzM3MCwxMiBAQCBwdWJsaWM6CiAKICAgICBib29sIGludGVyc2VjdHNEYW1h
Z2VSZWN0KGNvbnN0IEludFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0LCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyKSBjb25zdDsKIAotICAgIC8vIFJldHVy
bnMgYSBib3VuZGluZyBib3ggZm9yIHRoaXMgbGF5ZXIgb25seS4KKyAgICAvLyBCb3VuZGluZyBi
b3ggcmVsYXRpdmUgdG8gc29tZSBhbmNlc3RvciBsYXllci4KICAgICBJbnRSZWN0IGJvdW5kaW5n
Qm94KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIpIGNvbnN0OworICAgIC8vIEJvdW5kaW5n
IGJveCBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhpcyBsYXllci4KKyAgICBJbnRSZWN0IGxvY2Fs
Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICAvLyBCb3VuZGluZyBib3ggcmVsYXRpdmUgdG8gdGhl
IHJvb3QuCisgICAgSW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94KCkgY29uc3Q7CiAKICAgICB2
b2lkIHVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0Jik7CiAKQEAgLTM2OCw2ICszODksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGF0
aWNZKGludCBzdGF0aWNZKSB7IG1fc3RhdGljWSA9IHN0YXRpY1k7IH0KIAogICAgIGJvb2wgaGFz
VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+aGFzVHJhbnNmb3JtKCk7IH0K
KyAgICAvLyBOb3RlIHRoYXQgdGhpcyB0cmFuc2Zvcm0gaGFzIHRoZSB0cmFuc2Zvcm0tb3JpZ2lu
IGJha2VkIGluLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KiB0cmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zZm9ybS5nZXQoKTsgfQogCiAgICAgdm9pZCBkZXN0cm95KFJlbmRlckFy
ZW5hKik7CkBAIC0zNzksNiArNDAxLDI1IEBAIHB1YmxpYzoKICAgICAvLyBPdmVycmlkZGVuIHRv
IHByZXZlbnQgdGhlIG5vcm1hbCBkZWxldGUgZnJvbSBiZWluZyBjYWxsZWQuCiAgICAgdm9pZCBv
cGVyYXRvciBkZWxldGUodm9pZCosIHNpemVfdCk7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgYm9vbCBpc0NvbXBvc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tp
bmcgIT0gMDsgfQorICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZygpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2luZzsgfQorICAgIFJlbmRlckxheWVyQmFja2luZyogZW5zdXJlQmFja2luZygp
OworICAgIHZvaWQgY2xlYXJCYWNraW5nKCk7CisjZWxzZQorICAgIGJvb2wgaXNDb21wb3NpdGVk
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCisgICAgYm9vbCBwYWludHNXaXRo
VHJhbnNwYXJlbmN5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RyYW5zcGFyZW50
KCkgJiYgIWlzQ29tcG9zaXRlZCgpOworICAgIH0KKworICAgIGJvb2wgcGFpbnRzV2l0aFRyYW5z
Zm9ybSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdHJhbnNmb3JtKCkgJiYgIWlzQ29t
cG9zaXRlZCgpOworICAgIH0KKwogcHJpdmF0ZToKICAgICAvLyBUaGUgbm9ybWFsIG9wZXJhdG9y
IG5ldyBpcyBkaXNhbGxvd2VkIG9uIGFsbCByZW5kZXIgb2JqZWN0cy4KICAgICB2b2lkKiBvcGVy
YXRvciBuZXcoc2l6ZV90KSB0aHJvdygpOwpAQCAtMzg2LDcgKzQyNyw3IEBAIHByaXZhdGU6CiBw
cml2YXRlOgogICAgIHZvaWQgc2V0TmV4dFNpYmxpbmcoUmVuZGVyTGF5ZXIqIG5leHQpIHsgbV9u
ZXh0ID0gbmV4dDsgfQogICAgIHZvaWQgc2V0UHJldmlvdXNTaWJsaW5nKFJlbmRlckxheWVyKiBw
cmV2KSB7IG1fcHJldmlvdXMgPSBwcmV2OyB9Ci0gICAgdm9pZCBzZXRQYXJlbnQoUmVuZGVyTGF5
ZXIqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQorICAgIHZvaWQgc2V0UGFyZW50KFJl
bmRlckxheWVyKiBwYXJlbnQpOwogICAgIHZvaWQgc2V0Rmlyc3RDaGlsZChSZW5kZXJMYXllciog
Zmlyc3QpIHsgbV9maXJzdCA9IGZpcnN0OyB9CiAgICAgdm9pZCBzZXRMYXN0Q2hpbGQoUmVuZGVy
TGF5ZXIqIGxhc3QpIHsgbV9sYXN0ID0gbGFzdDsgfQogCkBAIC0zOTYsNiArNDM3LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBQYWludFJl
c3RyaWN0aW9uLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdCwKICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBhcHBsaWVkVHJhbnNmb3JtID0gZmFsc2UsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3Rz
ID0gZmFsc2UpOwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJv
b3RMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBoaXRUZXN0UG9pbnQsIGJvb2wgYXBw
bGllZFRyYW5zZm9ybSA9IGZhbHNlKTsKKwogICAgIHZvaWQgY29tcHV0ZVNjcm9sbERpbWVuc2lv
bnMoYm9vbCogbmVlZEhCYXIgPSAwLCBib29sKiBuZWVkVkJhciA9IDApOwogCiAgICAgYm9vbCBz
aG91bGRCZU92ZXJmbG93T25seSgpIGNvbnN0OwpAQCAtNDI1LDcgKzQ2NywxNiBAQCBwcml2YXRl
OgogICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKICAgICB2b2lkIHVwZGF0ZVJl
c2l6ZXJTdHlsZSgpOwogCi1wcm90ZWN0ZWQ6ICAgCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKSAgICAKKyAgICBib29sIGhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudCgpIGNvbnN0IHsg
cmV0dXJuIG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50OyB9CisgICAgdm9pZCBzZXRIYXNDb21w
b3NpdGluZ0Rlc2NlbmRhbnQoYm9vbCBiKSAgeyBtX2hhc0NvbXBvc2l0aW5nRGVzY2VuZGFudCA9
IGI7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckJh
Y2tpbmc7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKKworcHJvdGVj
dGVkOgogICAgIFJlbmRlckJveCogbV9yZW5kZXJlcjsKIAogICAgIFJlbmRlckxheWVyKiBtX3Bh
cmVudDsKQEAgLTUwMiw2ICs1NTMsMTAgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV92aXNpYmxl
RGVzY2VuZGFudFN0YXR1c0RpcnR5IDogMTsKICAgICBib29sIG1faGFzVmlzaWJsZURlc2NlbmRh
bnQgOiAxOwogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGJvb2wgbV9o
YXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgOiAxOworI2VuZGlmCisKICAgICBSZW5kZXJNYXJxdWVl
KiBtX21hcnF1ZWU7IC8vIFVzZWQgYnkgbGF5ZXJzIHdpdGggb3ZlcmZsb3c6bWFycXVlZQogICAg
IAogICAgIC8vIENhY2hlZCBub3JtYWwgZmxvdyB2YWx1ZXMgZm9yIGFic29sdXRlIHBvc2l0aW9u
ZWQgZWxlbWVudHMgd2l0aCBzdGF0aWMgbGVmdC90b3AgdmFsdWVzLgpAQCAtNTE2LDYgKzU3MSwx
MCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3Jv
bGwgY29ybmVyIGFuZCByZXNpemVyLgogICAgIFJlbmRlclNjcm9sbGJhclBhcnQqIG1fc2Nyb2xs
Q29ybmVyOwogICAgIFJlbmRlclNjcm9sbGJhclBhcnQqIG1fcmVzaXplcjsKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIG1fYmFja2lu
ZzsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="13142"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>