<?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>152940</bug_id>
          
          <creation_ts>2016-01-08 21:27:05 -0800</creation_ts>
          <short_desc>Add display-list drawing hooks to platform-specific GraphicsContext files</short_desc>
          <delta_ts>2016-01-12 08:45:30 -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>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>152808</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1154107</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-08 21:27:05 -0800</bug_when>
    <thetext>Add display-list drawing hooks to platform-specific GraphicsContext files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154111</commentid>
    <comment_count>1</comment_count>
      <attachid>268611</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-08 21:29:07 -0800</bug_when>
    <thetext>Created attachment 268611
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154114</commentid>
    <comment_count>2</comment_count>
      <attachid>268612</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-08 21:36:31 -0800</bug_when>
    <thetext>Created attachment 268612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154120</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-08 22:08:15 -0800</bug_when>
    <thetext>https://trac.webkit.org/r194816</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154538</commentid>
    <comment_count>4</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-01-11 16:35:28 -0800</bug_when>
    <thetext>This change may be causing the Speedometer/Full.html Performance test to fail:

&lt;https://build.webkit.org/builders/Apple%20El%20Capitan%20Release%20WK2%20%28Perf%29/builds/832&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154627</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-11 22:21:59 -0800</bug_when>
    <thetext>That&apos;s odd:

Running Speedometer/Full.html (151 of 151)
error: Speedometer/Full.html
GraphicsContext::roundToDevicePixels() is not yet compatible with recording contexts.
GraphicsContext::roundToDevicePixels() is not yet compatible with recording contexts.

The new code should not be enabled by default.

Zalan, can you look to see if I messed up with roundToDevicePixels()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154640</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-12 00:30:31 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; That&apos;s odd:
&gt; 
&gt; Running Speedometer/Full.html (151 of 151)
&gt; error: Speedometer/Full.html
&gt; GraphicsContext::roundToDevicePixels() is not yet compatible with recording
&gt; contexts.
&gt; GraphicsContext::roundToDevicePixels() is not yet compatible with recording
&gt; contexts.
&gt; 
&gt; The new code should not be enabled by default.
&gt; 
&gt; Zalan, can you look to see if I messed up with roundToDevicePixels()?

Yes, the condition looks wrong in GraphicsContext::roundToDevicePixels

if (!isRecording()) {
    WTFLogAlways(&quot;GraphicsContext::roundToDevicePixels() is not yet compatible with recording contexts.&quot;);
    return frect;
}

I&apos;ve just fixed it in r194889</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154701</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-12 08:45:30 -0800</bug_when>
    <thetext>Weird that didn&apos;t break any layout tests.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268611</attachid>
            <date>2016-01-08 21:29:07 -0800</date>
            <delta_ts>2016-01-08 21:36:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152940-20160108212835.patch</filename>
            <type>text/plain</type>
            <size>43757</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0ODE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTFlZWNiYzgyN2NiYzNm
ZTA3YjgzMGUyMmVlYThmMTU3ZGZlMGZmMy4uMTcxMTIyMzk3OGU3NDVhMGViMDBjZTc2M2E2Mjcy
NDBlM2NmYzBiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDExOCBAQAogMjAxNi0wMS0wOCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgZGlzcGxh
eS1saXN0IGRyYXdpbmcgaG9va3MgdG8gcGxhdGZvcm0tc3BlY2lmaWMgR3JhcGhpY3NDb250ZXh0
IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTI5NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
YWxsIGludG8gdGhlIGRpc3BsYXkgbGlzdCByZWNvcmRlciBmb3IgdG9wLWxldmVsIGVudHJ5cG9p
bnRzIGltcGxlbWVudGVkIGluIHBsYXRmb3JtLXNwZWNpZmljCisgICAgICAgIGZpbGVzLgorICAg
ICAgICAKKyAgICAgICAgVGhlIGNvbnZlbnRpb24gaXMgdGhhdCBpZiBhIGZ1bmN0aW9uIGJlZ2lu
cyB3aXRoICJwbGF0Zm9ybSIsIGl0J3Mgbm90IGEgdG9wLWxldmVsCisgICAgICAgIGVudHJ5IHBv
aW50LCBhbmQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlcmUncyBhIHBsYXRmb3JtIGNv
bnRleHQgKGkuZS4gbm90CisgICAgICAgIHJlY29yZGluZywgYW5kIG5vdCBwYWludGluZ0Rpc2Fi
bGVkKS4KKyAgICAgICAgCisgICAgICAgIEEgZmV3IGluc3RhbmNlcyBhcmUgc3R1YmJlZCBvdXQg
dW50aWwgd2UgaGF2ZSBhIG1vcmUgY29tcGxldGUgZGlzcGxheSBsaXN0IGltcGxlbWVudGF0aW9u
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxs
aXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHln
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm90YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQ
bGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9y
ZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0
dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xpcEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJl
Z2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNv
bmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tu
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxs
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNo
b3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU2hvdWxkU21vb3RoRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKToKKworMjAx
Ni0wMS0wOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKwogICAgICAg
ICBBZGQgRGlzcGxheUxpc3QgaG9va3MgaW50byBHcmFwaGljc0NvbnRleHQKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjkzMgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRl
eCA1MjlkNmVmZjdmZTY3NjZlY2FjYzFiNjk2ZWRhZjc1ZTg0NTkyN2NiLi4xMWUwYzMzZjFlN2I3
OGRjZjQxYzVkNjE3Zjk0NTcxMDZiMWY1NGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTY4Miw2ICs2ODIsMTEg
QEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb24KICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm4gMDsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIC8v
IEZJWE1FOiBUZXh0IGRyYXdpbmcgd2l0aCBkaXNwbGF5IGxpc3RzIFRCRC4KKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCiAgICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9p
bnQsIGZyb20sIHRvKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDI5
ZWVjM2YwOWI2YTk4MmNlZGVlMzVjZWJkZmIyNzZiMGYyNzE0ZWQuLmU5M2VjNzQ4YWQzZWJhZGNk
Y2FjMDFkMThmMjlmYjBlNGI5NDg1NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAK
QEAgLTM3LDYgKzM3LDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1
ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgog
I2luY2x1ZGUgIkRyYXdFcnJvclVuZGVybGluZS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMjAxLDYgKzIwMiwxMSBAQCBBZmZpbmVU
cmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlKSBjb25z
dAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBBZmZpbmVUcmFu
c2Zvcm0oKTsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5
cygiR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBy
ZWNvcmRpbmcgY29udGV4dHMuIik7CisgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsK
KyAgICB9CisKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwogICAg
IGNhaXJvX21hdHJpeF90IG07CiAgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0pOwpAQCAtMjE0
LDEyICsyMjAsMTQgQEAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9y
bVN0YXRlKCkKIHsKKyAgICBBU1NFUlQoIWlzUmVjb3JkaW5nKCkpOwogICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5zYXZlKCk7CiAgICAgbV9kYXRhLT5zYXZlKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCiB7CisgICAgQVNTRVJUKCFpc1JlY29yZGlu
ZygpKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVzdG9yZSgpOwogICAgIG1fZGF0YS0+cmVz
dG9yZSgpOwogCkBAIC0yMzAsMTEgKzIzOCwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVz
dG9yZVBsYXRmb3JtU3RhdGUoKQogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0
aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3Jk
aW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5kcmF3UmVjdChyZWN0LCBi
b3JkZXJUaGlja25lc3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJUKCFy
ZWN0LmlzRW1wdHkoKSk7CiAKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpLT5j
cigpOwpAQCAtMjQ3LDcgKzI2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0KQogICAgICAgICBGbG9hdFJlY3QgcihyZWN0KTsK
ICAgICAgICAgci5pbmZsYXRlKC0uNWYpOwogICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHIu
eCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKLSAgICAgICAgY2Fpcm9fc2V0X2xp
bmVfd2lkdGgoY3IsIDEuMCk7CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCAxLjAp
OyAvLyBib3JkZXJUaGlja25lc3M/CiAgICAgICAgIGNhaXJvX3N0cm9rZShjcik7CiAgICAgfQog
CkBAIC0yNTYsNyArMjY5LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05h
dGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGltYWdlU2l6ZSk7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlz
UmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5kcmF3TmF0aXZl
SW1hZ2UoaW1hZ2VQdHIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBibGVuZE1v
ZGUsIG9yaWVudGF0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIE5hdGl2ZUlt
YWdlUHRyIGltYWdlID0gaW1hZ2VQdHI7CiAKQEAgLTI5NSw2ICszMTQsMTEgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5
TGlzdFJlY29yZGVyLT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IgPSB0aGlzLT5zdHJva2VDb2xv
cigpOwogICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwogICAgIGJvb2wg
aXNWZXJ0aWNhbExpbmUgPSAocG9pbnQxLngoKSArIHRoaWNrbmVzcyA9PSBwb2ludDIueCgpKTsK
QEAgLTM4NCw2ICs0MDgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlM
aXN0UmVjb3JkZXItPmRyYXdFbGxpcHNlKHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKICAgICBjYWlyb19z
YXZlKGNyKTsKICAgICBmbG9hdCB5UmFkaXVzID0gLjUgKiByZWN0LmhlaWdodCgpOwpAQCAtNDE0
LDYgKzQ0MywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6
ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cwogICAgIGlmIChucG9pbnRzIDw9
IDEpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAg
IG1fZGlzcGxheUxpc3RSZWNvcmRlci0+ZHJhd0NvbnZleFBvbHlnb24obnBvaW50cywgcG9pbnRz
LCBzaG91bGRBbnRpYWxpYXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2Fpcm9f
dCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKIAogICAgIGNhaXJvX3NhdmUoY3IpOwpA
QCAtNDQ0LDYgKzQ3OCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHln
b24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbgogICAgIGlmIChudW1Q
b2ludHMgPD0gMSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsK
KyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5jbGlwQ29udmV4UG9seWdvbihudW1Qb2lu
dHMsIHBvaW50cywgYW50aWFsaWFzZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Y2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKIAogICAgIGNhaXJvX25ld19w
YXRoKGNyKTsKQEAgLTQ2NCw2ICs1MDMsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRo
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsK
KyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5maWxsUGF0aChwYXRoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0KCktPmNy
KCk7CiAgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5j
b250ZXh0KCkpOwogICAgIHNoYWRvd0FuZEZpbGxDdXJyZW50Q2Fpcm9QYXRoKCp0aGlzKTsKQEAg
LTQ3NCw2ICs1MTgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBt
X2Rpc3BsYXlMaXN0UmVjb3JkZXItPnN0cm9rZVBhdGgocGF0aCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwogICAg
IHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgp
KTsKICAgICBzaGFkb3dBbmRTdHJva2VDdXJyZW50Q2Fpcm9QYXRoKCp0aGlzKTsKQEAgLTQ4NCw2
ICs1MzMsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
KyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXIt
PmZpbGxSZWN0KHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2Fpcm9fdCog
Y3IgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJl
Y3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICBzaGFk
b3dBbmRGaWxsQ3VycmVudENhaXJvUGF0aCgqdGhpcyk7CkBAIC00OTQsNiArNTQ4LDExIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVj
b3JkZXItPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwog
ICAgIGlmIChoYXNTaGFkb3coKSkKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNoYWRvd0Js
dXIoKS5kcmF3UmVjdFNoYWRvdygqdGhpcywgRmxvYXRSb3VuZGVkUmVjdChyZWN0KSk7CiAKQEAg
LTUwNSw2ICs1NjQsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRl
ci0+Y2xpcChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGNhaXJvX3QqIGNy
ID0gcGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0
LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgY2Fpcm9f
ZmlsbF9ydWxlX3Qgc2F2ZWRGaWxsUnVsZSA9IGNhaXJvX2dldF9maWxsX3J1bGUoY3IpOwpAQCAt
NTI3LDYgKzU5MSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0
aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9k
aXNwbGF5TGlzdFJlY29yZGVyLT5jbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpLT5jcigp
OwogICAgIGlmICghcGF0aC5pc051bGwoKSkKICAgICAgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0
KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCkpOwpAQCAtNTUyLDYgKzYyMSwxNCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZQogCiBJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xp
cEJvdW5kcygpIGNvbnN0CiB7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlz
KCJHZXR0aW5nIHRoZSBjbGlwIGJvdW5kcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIGRpc3BsYXkg
bGlzdHMiKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoLTIwNDgsIC0yMDQ4LCA0MDk2LCA0MDk2
KTsgLy8gRklYTUU6IGRpc3BsYXkgbGlzdHMuCisgICAgfQorCiAgICAgZG91YmxlIHgxLCB4Miwg
eTEsIHkyOwogICAgIGNhaXJvX2NsaXBfZXh0ZW50cyhwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwg
JngxLCAmeTEsICZ4MiwgJnkyKTsKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJl
Y3QoeDEsIHkxLCB4MiAtIHgxLCB5MiAtIHkxKSk7CkBAIC02NjMsNiArNzQwLDExIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBEYXNoQXJyYXkmCiAgICAgaWYgKHdpZHRocy5zaXplKCkgPD0gMCkKICAgICAgICAg
cmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlz
dFJlY29yZGVyLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVVbmRlcmxpbmVzLCBzdHJva2VUaGlja25lc3MoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwogCiAgICAgRmxv
YXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRl
eHQocG9pbnQsIHdpZHRocy5sYXN0KCksIHByaW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsKQEAg
LTcyMCw2ICs4MDIsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdAogCiBGbG9hdFJlY3QgR3Jh
cGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgZnJlY3Qs
IFJvdW5kaW5nTW9kZSkKIHsKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm4gZnJlY3Q7CisKKyAgICBpZiAoIWlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgV1RGTG9n
QWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKSBpcyBub3QgeWV0
IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7CisgICAgICAgIHJldHVybiBm
cmVjdDsKKyAgICB9CisKICAgICBGbG9hdFJlY3QgcmVzdWx0OwogICAgIGRvdWJsZSB4ID0gZnJl
Y3QueCgpOwogICAgIGRvdWJsZSB5ID0gZnJlY3QueSgpOwpAQCAtNzYwLDYgKzg1MCwxMSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3Jk
aW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT50cmFuc2xhdGUoeCwgeSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpOwogICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgeCwgeSk7CiAgICAgbV9kYXRh
LT50cmFuc2xhdGUoeCwgeSk7CkBAIC03ODIsNiArODc3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBBU1NFUlQo
IWlzUmVjb3JkaW5nKCkpOworCiAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgocGxhdGZvcm1Db250
ZXh0KCktPmNyKCksIHN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKQEAgLTc5Myw2ICs4OTAsOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBz
dHJva2VTdHlsZSkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAKKyAgICBBU1NFUlQoIWlzUmVjb3JkaW5nKCkpOworCiAgICAgc3dpdGNoIChzdHJva2VTdHls
ZSkgewogICAgIGNhc2UgTm9TdHJva2U6CiAgICAgICAgIC8vIEZJWE1FOiBpcyBpdCB0aGUgcmln
aHQgd2F5IHRvIGVtdWxhdGUgTm9TdHJva2U/CkBAIC04MjIsNiArOTIxLDExIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYg
KGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5jb25jYXRD
VE0odHJhbnNmb3JtKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGNhaXJvX3QqIGNy
ID0gcGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgY29uc3QgY2Fpcm9fbWF0cml4X3QgbWF0
cml4ID0gY2Fpcm9fbWF0cml4X3QodHJhbnNmb3JtKTsKICAgICBjYWlyb190cmFuc2Zvcm0oY3Is
ICZtYXRyaXgpOwpAQCAtODMzLDYgKzkzNywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7Cisg
ICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oKSBpcyBub3QgY29t
cGF0aWJsZSB3aXRoIHJlY29yZGluZyBjb250ZXh0cy4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgY29u
c3QgY2Fpcm9fbWF0cml4X3QgbWF0cml4ID0gY2Fpcm9fbWF0cml4X3QodHJhbnNmb3JtKTsKICAg
ICBjYWlyb19zZXRfbWF0cml4KGNyLCAmbWF0cml4KTsKQEAgLTg3MCw2ICs5NzksOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9w
YWNpdHkpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgQVNTRVJUKCFpc1JlY29yZGluZygpKTsKKwogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1D
b250ZXh0KCktPmNyKCk7CiAgICAgY2Fpcm9fcHVzaF9ncm91cChjcik7CiAgICAgbV9kYXRhLT5s
YXllcnMuYXBwZW5kKG9wYWNpdHkpOwpAQCAtODgwLDYgKzk5MSw4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBBU1NFUlQoIWlzUmVjb3JkaW5nKCkp
OworCiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKIAogICAgIGNh
aXJvX3BvcF9ncm91cF90b19zb3VyY2UoY3IpOwpAQCAtODk3LDYgKzEwMTAsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3Jk
aW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5jbGVhclJlY3QocmVjdCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpOwogCiAgICAgY2Fpcm9fc2F2ZShjcik7CkBAIC05MTEsNiArMTAyOSwxMSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IHdpZHRoKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNv
cmRlci0+c3Ryb2tlUmVjdChyZWN0LCB3aWR0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwogICAgIGNhaXJvX3Nh
dmUoY3IpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwpAQCAtOTI0LDYgKzEwNDcsMTEgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7
CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+c2V0TGluZUNhcChsaW5lQ2FwKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGNhaXJvX2xpbmVfY2FwX3QgY2Fpcm9DYXAgPSBD
QUlST19MSU5FX0NBUF9CVVRUOwogICAgIHN3aXRjaCAobGluZUNhcCkgewogICAgIGNhc2UgQnV0
dENhcDoKQEAgLTk1MCw2ICsxMDc4LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Rhc2hBcnJh
eUFsbFplcm8oY29uc3QgRGFzaEFycmF5JiBkYXNoZXMpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkK
IHsKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPnNldExp
bmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBpZiAoaXNEYXNoQXJyYXlBbGxaZXJvKGRhc2hlcykpCiAgICAgICAgIGNhaXJvX3NldF9kYXNo
KHBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCAwLCAwLCAwKTsKICAgICBlbHNlCkBAIC05NjEsNiAr
MTA5NywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGlu
ZUpvaW4pCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5z
ZXRMaW5lSm9pbihsaW5lSm9pbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBjYWly
b19saW5lX2pvaW5fdCBjYWlyb0pvaW4gPSBDQUlST19MSU5FX0pPSU5fTUlURVI7CiAgICAgc3dp
dGNoIChsaW5lSm9pbikgewogICAgIGNhc2UgTWl0ZXJKb2luOgpAQCAtMTAxMyw2ICsxMTU0LDEx
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVj
b3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5jbGlwT3V0KHBhdGgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKTsKICAgICBkb3VibGUgeDEsIHkxLCB4MiwgeTI7CiAgICAgY2Fpcm9fY2xp
cF9leHRlbnRzKGNyLCAmeDEsICZ5MSwgJngyLCAmeTIpOwpAQCAtMTAzMCw2ICsxMTc2LDExIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmco
KSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPnJvdGF0ZShyYWRpYW5zKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGNhaXJvX3JvdGF0ZShwbGF0Zm9ybUNvbnRleHQo
KS0+Y3IoKSwgcmFkaWFucyk7CiAgICAgbV9kYXRhLT5yb3RhdGUocmFkaWFucyk7CiB9CkBAIC0x
MDM5LDYgKzExOTAsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3Jk
ZXItPnNjYWxlKHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2Fpcm9fc2Nh
bGUocGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
CiAgICAgbV9kYXRhLT5zY2FsZShzaXplKTsKIH0KQEAgLTEwNDgsNiArMTIwNCwxMSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHIpCiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5n
KCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5jbGlwT3V0KHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKTsKICAgICBkb3VibGUgeDEsIHkxLCB4MiwgeTI7CiAgICAgY2Fpcm9fY2xpcF9leHRlbnRz
KGNyLCAmeDEsICZ5MSwgJngyLCAmeTIpOwpAQCAtMTA2NCw2ICsxMjI1LDggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QsIGNvbnMKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICBBU1NFUlQoIWlzUmVjb3JkaW5nKCkpOworCiAgICAgaWYgKGhhc1NoYWRvdygp
KQogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2hhZG93Qmx1cigpLmRyYXdSZWN0U2hhZG93
KCp0aGlzLCByZWN0KTsKIApAQCAtMTA4Miw2ICsxMjQ1LDExIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhY29sb3IuaXNWYWxpZCgpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rp
c3BsYXlMaXN0UmVjb3JkZXItPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgY29sb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHRoaXMt
Pm11c3RVc2VTaGFkb3dCbHVyKCkpCiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zaGFkb3dC
bHVyKCkuZHJhd0luc2V0U2hhZG93KCp0aGlzLCByZWN0LCByb3VuZGVkSG9sZVJlY3QpOwogCkBA
IC0xMDk5LDggKzEyNjcsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXQKICAgICBjYWlyb19y
ZXN0b3JlKGNyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJs
ZW5kTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCiB7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5
TGlzdFJlY29yZGVyLT5kcmF3UGF0dGVybihpbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gaW1h
Z2UubmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIXN1cmZhY2UpIC8vIElm
IGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1
cm47CkBAIC0xMTE0LDYgKzEyOTAsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgQVNTRVJUKCFpc1JlY29yZGluZygpKTsKKwogICAg
IC8vIFdoZW4gdHJ1ZSwgdXNlIHRoZSBkZWZhdWx0IENhaXJvIGJhY2tlbmQgYW50aWFsaWFzIG1v
ZGUgKHVzdWFsbHkgdGhpcwogICAgIC8vIGVuYWJsZXMgc3RhbmRhcmQgJ2dyYXlzY2FsZScgYW50
aWFsaWFzaW5nKTsgZmFsc2UgdG8gZXhwbGljaXRseSBkaXNhYmxlCiAgICAgLy8gYW50aWFsaWFz
aW5nLiBUaGlzIGlzIHRoZSBzYW1lIHN0cmF0ZWd5IGFzIHVzZWQgaW4gZHJhd0NvbnZleFBvbHln
b24oKS4KQEAgLTExMjIsMTEgKzEzMDAsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFs
aXR5IHF1YWxpdHkpCiB7CisgICAgQVNTRVJUKCFpc1JlY29yZGluZygpKTsKKwogICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHF1YWxpdHkpOwogfQog
CiBib29sIEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAogewor
ICAgIGlmIChpc1JlY29yZGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1
cm4gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShjYWlyb19nZXRfdGFyZ2V0KHBsYXRmb3JtQ29udGV4
dCgpLT5jcigpKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0dMOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKaW5kZXggYzQ1ZGMxOWNjOTljZGYyZDgyNTlmZTczOGZmY2YyZDc0OTNhYmVlZS4uNzE0OWY0
Mjg1NWNhNWU5YmZlODE3MTI4ODE4MjZjZGQ0ZGMxY2ViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApA
QCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVk
ZSAiQ29yZUdyYXBoaWNzU1BJLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgog
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZUNHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTE0MSw2ICsx
NDIsOCBAQCBDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBj
b25zdAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKIHsKICAgICBB
U1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7CisgICAgQVNTRVJUKCFpc1JlY29yZGluZygpKTsK
KwogICAgIC8vIE5vdGU6IERvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhpcyBjbGFz
cyBpbXBsZW1lbnRhdGlvbiwgc2luY2Ugd2Ugd2FudCB0byBhdm9pZCB0aGUgZXh0cmEKICAgICAv
LyBzYXZlIG9mIHRoZSBzZWNvbmRhcnkgY29udGV4dCAoaW4gR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlQ0cuaCkuCiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShwbGF0Zm9ybUNvbnRleHQo
KSk7CkBAIC0xNTAsNiArMTUzLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9y
bVN0YXRlKCkKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCiB7
CiAgICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOworICAgIEFTU0VSVCghaXNSZWNvcmRp
bmcoKSk7CisKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRo
aXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJh
CiAgICAgLy8gcmVzdG9yZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUocGxh
dGZvcm1Db250ZXh0KCkpOwpAQCAtMTYyLDYgKzE2NywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxv
YXRTaQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+ZHJh
d05hdGl2ZUltYWdlKGltYWdlUHRyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwg
YmxlbmRNb2RlLCBvcmllbnRhdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoaW1hZ2VQdHIpOwogCiAgICAgZmxvYXQgY3Vyckhl
aWdodCA9IG9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBDR0ltYWdlR2V0V2lkdGgo
aW1hZ2UuZ2V0KCkpIDogQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSk7CkBAIC0yNzksNiAr
Mjg5LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29y
ZGVyLT5kcmF3UGF0dGVybihpbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAg
IENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQsIGRlc3RSZWN0KTsKQEAgLTM3OSw2ICszOTQsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNv
cmRlci0+ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBwYXR0
ZXJucyBhbmQgZ3JhZGllbnRzIGxpa2UgZHJhd1BhdGggZG9lcywgaXQgcHJvYmFibHkgc2hvdWxk
LgogICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwogCkBAIC00MTIsNiArNDMyLDExIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50CiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2Up
CiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1f
ZGlzcGxheUxpc3RSZWNvcmRlci0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgZmxvYXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7
CiAgICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9IChwb2ludDEueCgpICsgdGhpY2tuZXNzID09IHBv
aW50Mi54KCkpOwogICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gaXNWZXJ0aWNhbExpbmUgPyBwb2lu
dDIueSgpIC0gcG9pbnQxLnkoKSA6IHBvaW50Mi54KCkgLSBwb2ludDEueCgpOwpAQCAtNDk3LDYg
KzUyMiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRl
ci0+ZHJhd0VsbGlwc2UocmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBQYXRo
IHBhdGg7CiAgICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwogICAgIGRyYXdQYXRoKHBhdGgpOwpA
QCAtNTIwLDYgKzU1MCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHln
b24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KgogICAgIGlmIChudW1i
ZXJPZlBvaW50cyA8PSAxKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmco
KSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmRyYXdDb252ZXhQb2x5Z29uKG51
bWJlck9mUG9pbnRzLCBwb2ludHMsIGFudGlhbGlhc2VkKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAg
ICBpZiAoYW50aWFsaWFzZWQgIT0gc2hvdWxkQW50aWFsaWFzKCkpCkBAIC01NDEsNiArNTc2LDEx
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtYmVy
T2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqCiAgICAgaWYgKG51bWJlck9mUG9pbnRzIDw9IDEp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1f
ZGlzcGxheUxpc3RSZWNvcmRlci0+Y2xpcENvbnZleFBvbHlnb24obnVtYmVyT2ZQb2ludHMsIHBv
aW50cywgYW50aWFsaWFzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAoYW50aWFsaWFzICE9
IHNob3VsZEFudGlhbGlhcygpKQpAQCAtNTU5LDYgKzU5OSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rp
c3BsYXlMaXN0UmVjb3JkZXItPmFwcGx5U3Ryb2tlUGF0dGVybigpOworICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdl
dFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKQEAgLTU3OCw2ICs2MjMsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAg
ICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+YXBwbHlGaWxsUGF0dGVybigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNm
b3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKQEAgLTYyNCw2ICs2NzQsMTEgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVy
LT5kcmF3UGF0aChwYXRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIApAQCAtNjYxLDYgKzcxNiwxMSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBp
ZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmZpbGxQ
YXRoKHBhdGgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVu
dCkgewpAQCAtNzE1LDYgKzc3NSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7Cisg
ICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+c3Ryb2tlUGF0aChwYXRoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7CiAKICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CkBAIC03NzIsNiArODM3
LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAg
aWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5maWxs
UmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGll
bnQpIHsKQEAgLTgyMCw2ICs4OTAsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygp
KSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+ZmlsbFJlY3QocmVjdCwgY29sb3Ip
OworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsK
IApAQCAtODQ5LDYgKzkyNCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVCgh
aXNSZWNvcmRpbmcoKSk7CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOwogICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwpAQCAtODkxLDYg
Kzk2OCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdAogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAg
ICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwg
cm91bmRlZEhvbGVSZWN0LCBjb2xvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgUGF0aCBwYXRo
OwpAQCAtOTMyLDYgKzEwMTQsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RS
ZWNvcmRlci0+Y2xpcChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENHQ29u
dGV4dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogICAgIG1fZGF0YS0+Y2xp
cChyZWN0KTsKIH0KQEAgLTk0MSw2ICsxMDI4LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBt
X2Rpc3BsYXlMaXN0UmVjb3JkZXItPmNsaXBPdXQocmVjdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICAvLyBGSVhNRTogVXNpbmcgQ0dSZWN0SW5maW5pdGUgaXMgbXVjaCBmYXN0ZXIg
dGhhbiBnZXR0aW5nIHRoZSBjbGlwIGJvdW5kaW5nIGJveC4gSG93ZXZlciwgZHVlCiAgICAgLy8g
dG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwgQ0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUgdXNl
ZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQgdGhhdAogICAgIC8vIGhhcyBjZXJ0YWluIHRy
YW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRyYW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFuZCBk
dWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUzPgpAQCAtOTUzLDExICsxMDQ1LDMzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBD
R0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAg
ICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+Y2xpcE91dChwYXRoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgQ0dDb250ZXh0QWRkUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgQ0dDb250ZXh0R2V0Q2xpcEJv
dW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkK
KyAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9y
bVBhdGgoKSk7CisgICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKK30KKwog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxl
IGNsaXBSdWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNv
cmRlci0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAo
cGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dS
ZWN0WmVybyk7CkBAIC05NzksNiArMTA5MywxMiBAQCBJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6
Y2xpcEJvdW5kcygpIGNvbnN0CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIFdU
RkxvZ0Fsd2F5cygiR2V0dGluZyB0aGUgY2xpcCBib3VuZHMgbm90IHlldCBzdXBwb3J0ZWQgd2l0
aCBkaXNwbGF5IGxpc3RzIik7CisgICAgICAgIHJldHVybiBJbnRSZWN0KC0yMDQ4LCAtMjA0OCwg
NDA5NiwgNDA5Nik7IC8vIEZJWE1FOiBkaXNwbGF5IGxpc3RzLgorICAgIH0KKworCiAgICAgcmV0
dXJuIGVuY2xvc2luZ0ludFJlY3QoQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3Jt
Q29udGV4dCgpKSk7CiB9CiAKQEAgLTk4Nyw2ICsxMTA3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIEFTU0VSVCghaXNS
ZWNvcmRpbmcoKSk7CisKICAgICBzYXZlKCk7CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwpAQCAtOTk5LDYgKzExMjEsOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFpc1JlY29yZGluZygp
KTsKKwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAg
Q0dDb250ZXh0RW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dCk7CiAKQEAgLTEwNDIsNiArMTE2
Nyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9h
dFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFpc1JlY29yZGluZygpKTsKICAg
ICAKICAgICAvLyBGSVhNRTogd2UgY291bGQgYXZvaWQgdGhlIHNoYWRvdyBzZXR1cCBjb3N0IHdo
ZW4gd2Uga25vdyB3ZSdsbCByZW5kZXIgdGhlIHNoYWRvdyBvdXJzZWx2ZXMuCiAKQEAgLTEwOTIs
NiArMTIxOSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBs
aW1pdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICAvLyBNYXliZSB0aGlzIHNob3VsZCBi
ZSBwYXJ0IG9mIHRoZSBzdGF0ZS4KKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5zZXRN
aXRlckxpbWl0KGxpbWl0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENHQ29udGV4
dFNldE1pdGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKIH0KIApAQCAtMTA5OSw2
ICsxMjMzLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
KworICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRl
ci0+Y2xlYXJSZWN0KHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQ0dDb250ZXh0
Q2xlYXJSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByKTsKIH0KIApAQCAtMTEwNyw2ICsxMjQ3LDEx
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxp
c3RSZWNvcmRlci0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsK
IAogICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CkBAIC0xMTcxLDYgKzEzMTYsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBjYXApCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzUmVj
b3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5zZXRMaW5lQ2FwKGNh
cCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBzd2l0Y2ggKGNhcCkgewogICAgIGNh
c2UgQnV0dENhcDoKICAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQo
KSwga0NHTGluZUNhcEJ1dHQpOwpAQCAtMTE4OSw2ICsxMzQwLDExIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9m
ZnNldCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPnNl
dExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKICAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgpOyArK2kpCkBAIC0xMjAz
LDYgKzEzNTksMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2lu
IGpvaW4pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVy
LT5zZXRMaW5lSm9pbihqb2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIHN3aXRj
aCAoam9pbikgewogICAgIGNhc2UgTWl0ZXJKb2luOgogICAgICAgICBDR0NvbnRleHRTZXRMaW5l
Sm9pbihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7CkBAIC0xMjIxLDIyICsx
MzgzLDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGZpbGxSdWxlKQogICAgIGNsaXBQYXRoKHBhdGgsIGZpbGxSdWxlKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dDb250ZXh0QmVn
aW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRmb3Jt
Q29udGV4dCgpLCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkp
KTsKLSAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQotICAgICAgICBDR0NvbnRleHRBZGRQYXRoKHBs
YXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAgICBDR0NvbnRleHRFT0Ns
aXAocGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5z
Y2FsZShzaXplKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENHQ29udGV4dFNjYWxl
Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAg
IG1fZGF0YS0+c2NhbGUoc2l6ZSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9y
bUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CkBAIC0xMjQ2LDYgKzE0MDIsMTIgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgewor
ICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPnJvdGF0ZShhbmdsZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBDR0NvbnRleHRSb3RhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCks
IGFuZ2xlKTsKICAgICBtX2RhdGEtPnJvdGF0ZShhbmdsZSk7CiAgICAgbV9kYXRhLT5tX3VzZXJU
b0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CkBAIC0xMjU1LDYgKzE0
MTcsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKKworICAg
IGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+dHJh
bnNsYXRlKHgsIHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQ0dDb250ZXh0VHJh
bnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKICAgICBtX2RhdGEtPnRyYW5zbGF0
ZSh4LCB5KTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRl
bnRpdHkgPSBmYWxzZTsKQEAgLTEyNjQsNiArMTQzMiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKKworICAgIGlmIChpc1JlY29y
ZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+Y29uY2F0Q1RNKHRyYW5z
Zm9ybSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBDR0NvbnRleHRDb25jYXRDVE0o
cGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5jb25jYXRDVE0odHJh
bnNmb3JtKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRl
bnRpdHkgPSBmYWxzZTsKQEAgLTEyNzMsNiArMTQ0NywxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKKworICAgIGlmIChpc1JlY29yZGlu
ZygpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oKSBp
cyBub3QgY29tcGF0aWJsZSB3aXRoIHJlY29yZGluZyBjb250ZXh0cy4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIENHQ29udGV4dFNldENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJh
bnNmb3JtKTsKICAgICBtX2RhdGEtPnNldENUTSh0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwpAQCAtMTI4Myw2
ICsxNDYzLDExIEBAIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNs
dWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKIAorICAgIGlmIChpc1Jl
Y29yZGluZygpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0OjpnZXRD
VE0oKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7Cisg
ICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKKyAgICB9CisKICAgICAvLyBUaGUgQ1RN
IHVzdWFsbHkgaW5jbHVkZXMgdGhlIGRldmljZVNjYWxlRmFjdG9yIGV4Y2VwdCBpbiBXZWJLaXQg
MSB3aGVuIHRoZQogICAgIC8vIGNvbnRlbnQgaXMgbm9uLWNvbXBvc2l0ZWQsIHNpbmNlIHRoZSBz
Y2FsZSBmYWN0b3IgaXMgaW50ZWdyYXRlZCBhdCBhIGxvd2VyCiAgICAgLy8gbGV2ZWwuIFRvIGd1
YXJhbnRlZSB0aGUgZGV2aWNlU2NhbGUgaXMgaW5jbHVkZWQsIHdlIGNhbiB1c2UgdGhpcyBDRyBB
UEkuCkBAIC0xMjk3LDYgKzE0ODIsMTEgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91
bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW8KICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gcmVjdDsKIAorICAgIGlmICgh
aXNSZWNvcmRpbmcoKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6
cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIHJlY29yZGlu
ZyBjb250ZXh0cy4iKTsKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfQorCiAgICAgLy8gSXQg
aXMgbm90IGVub3VnaCBqdXN0IHRvIHJvdW5kIHRvIHBpeGVscyBpbiBkZXZpY2Ugc3BhY2UuIFRo
ZSByb3RhdGlvbiBwYXJ0IG9mIHRoZQogICAgIC8vIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHRv
IGRldmljZSBzcGFjZSBjYW4gbWVzcyB3aXRoIHRoaXMgY29udmVyc2lvbiBpZiB3ZSBoYXZlIGEK
ICAgICAvLyByb3RhdGluZyBpbWFnZSBsaWtlIHRoZSBoYW5kcyBvZiB0aGUgd29ybGQgY2xvY2sg
d2lkZ2V0LiBXZSBqdXN0IG5lZWQgdGhlIHNjYWxlLCBzbwpAQCAtMTM1NSw2ICsxNTQ1LDExIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBEYXNoQXJyYXkmCiAgICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlM
aXN0UmVjb3JkZXItPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRv
dWJsZUxpbmVzLCBzdHJva2VUaGlja25lc3MoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwogCiAgICAgRmxvYXRS
ZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQo
cG9pbnQsIHdpZHRocy5sYXN0KCksIHByaW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsKQEAgLTEz
ODcsNiArMTU4MiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25z
dCBVUkwmIGxpbmssIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7Cisg
ICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMg
bm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVjb3JkaW5nIGNvbnRleHRzLiIpOworICAgICAgICBy
ZXR1cm47IC8vIEZJWE1FIGZvciBkaXNwbGF5IGxpc3RzLgorICAgIH0KKwogICAgIFJldGFpblB0
cjxDRlVSTFJlZj4gdXJsUmVmID0gbGluay5jcmVhdGVDRlVSTCgpOwogICAgIGlmICghdXJsUmVm
KQogICAgICAgICByZXR1cm47CkBAIC0xNDM4LDYgKzE2MzgsMTAgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRQorICAg
IGlmIChpc1JlY29yZGluZygpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoaXNMYXllckNv
bnRleHQpCiAgICAgICAgIG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgfD0gSXNMYXllckNHQ29udGV4
dDsKICAgICBlbHNlCkBAIC0xNDQ5LDYgKzE2NTMsMTAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6
OmlzQ0FMYXllckNvbnRleHQoKSBjb25zdAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIC8vIEZJWE1FCisgICAgaWYgKGlzUmVjb3JkaW5n
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBtX2RhdGEtPm1fY29udGV4
dEZsYWdzICYgSXNMYXllckNHQ29udGV4dDsKIH0KIApAQCAtMTQ1Nyw2ICsxNjY1LDEwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxl
cmF0ZWQpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgLy8gRklYTUUKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgaWYgKGlzQWNjZWxlcmF0ZWQpCiAgICAgICAgIG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgfD0g
SXNBY2NlbGVyYXRlZENHQ29udGV4dDsKICAgICBlbHNlCkBAIC0xNDY4LDYgKzE2ODAsMTAgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBG
SVhNRQorICAgIGlmIChpc1JlY29yZGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICByZXR1cm4gbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7
CiB9CiAKQEAgLTE0NzYsNiArMTY5Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIEFTU0VSVCghaXNSZWNv
cmRpbmcoKSk7CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgVGV4dE1vZGVGaWxsOgpAQCAtMTQ5Niw2
ICsxNzE0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNSZWNvcmRpbmcoKSk7CisKICAgICBzZXRDR1N0
cm9rZUNvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBjb2xvcik7CiB9CiAKQEAgLTE1MDMsNiArMTcy
NCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhm
bG9hdCB0aGlja25lc3MpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKCFpc1JlY29yZGluZygpKTsKKwogICAgIENHQ29udGV4dFNl
dExpbmVXaWR0aChwbGF0Zm9ybUNvbnRleHQoKSwgc3RkOjptYXgodGhpY2tuZXNzLCAwLmYpKTsK
IH0KIApAQCAtMTUxMCw2ICsxNzM0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIWlzUmVjb3JkaW5nKCkpOwor
CiAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGNvbG9yKTsKIH0KIApAQCAt
MTUxNyw2ICsxNzQ0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxk
QW50aWFsaWFzKGJvb2wgZW5hYmxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNSZWNvcmRpbmcoKSk7CisKICAgICBDR0Nv
bnRleHRTZXRTaG91bGRBbnRpYWxpYXMocGxhdGZvcm1Db250ZXh0KCksIGVuYWJsZSk7CiB9CiAK
QEAgLTE1MjQsNiArMTc1NCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNo
b3VsZFNtb290aEZvbnRzKGJvb2wgZW5hYmxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNSZWNvcmRpbmcoKSk7CisKICAg
ICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxl
KTsKIH0KIApAQCAtMTUzMSw2ICsxNzY0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtQWxwaGEoZmxvYXQgYWxwaGEpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFpc1JlY29yZGluZygpKTsKKwogICAgIENH
Q29udGV4dFNldEFscGhhKHBsYXRmb3JtQ29udGV4dCgpLCBhbHBoYSk7CiB9CiAKQEAgLTE1Mzks
NiArMTc3NSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBtb2RlLCBCbGVuCiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgQVNTRVJUKCFpc1JlY29yZGluZygpKTsK
KwogICAgIENHQmxlbmRNb2RlIHRhcmdldCA9IGtDR0JsZW5kTW9kZU5vcm1hbDsKICAgICBpZiAo
YmxlbmRNb2RlICE9IEJsZW5kTW9kZU5vcm1hbCkgewogICAgICAgICBzd2l0Y2ggKGJsZW5kTW9k
ZSkgewpAQCAtMTY1MCw2ICsxODg4LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBBU1NFUlQoIWlzUmVj
b3JkaW5nKCkpOworCiAgICAgLy8gQ29yZUdyYXBoaWNzIGV4cGVjdHMgdGhlIGJhc2UgQ1RNIG9m
IGEgSGlEUEkgY29udGV4dCB0byBoYXZlIHRoZSBzY2FsZSBmYWN0b3IgYXBwbGllZCB0byBpdC4K
ICAgICAvLyBGYWlsaW5nIHRvIGNoYW5nZSB0aGUgYmFzZSBsZXZlbCBDVE0gd2lsbCBjYXVzZSBj
ZXJ0YWluIENHIGZlYXR1cmVzLCBzdWNoIGFzIGZvY3VzIHJpbmdzLAogICAgIC8vIHRvIGRyYXcg
d2l0aCBhIHNjYWxlIGZhY3RvciBvZiAxIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2NhbGUgZmFj
dG9yLgpAQCAtMTY2MSw2ICsxOTAxLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
RmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIEFTU0VSVCghaXNSZWNvcmRpbmcoKSk7
CisKICAgICAvLyBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlk
IGNvbG9ycy4KICAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0
dGVybikgewogICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKQEAgLTE2NzYsNiAr
MTkxOCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIEFTU0VSVCghaXNSZWNvcmRpbmcoKSk7CisKICAgICAvLyBDR0Nv
bnRleHRTdHJva2VFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgogICAg
IGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybikgewog
ICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268612</attachid>
            <date>2016-01-08 21:36:31 -0800</date>
            <delta_ts>2016-01-08 21:53:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152940-20160108213558.patch</filename>
            <type>text/plain</type>
            <size>43767</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0ODE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTFlZWNiYzgyN2NiYzNm
ZTA3YjgzMGUyMmVlYThmMTU3ZGZlMGZmMy4uMTcxMTIyMzk3OGU3NDVhMGViMDBjZTc2M2E2Mjcy
NDBlM2NmYzBiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDExOCBAQAogMjAxNi0wMS0wOCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgZGlzcGxh
eS1saXN0IGRyYXdpbmcgaG9va3MgdG8gcGxhdGZvcm0tc3BlY2lmaWMgR3JhcGhpY3NDb250ZXh0
IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTI5NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
YWxsIGludG8gdGhlIGRpc3BsYXkgbGlzdCByZWNvcmRlciBmb3IgdG9wLWxldmVsIGVudHJ5cG9p
bnRzIGltcGxlbWVudGVkIGluIHBsYXRmb3JtLXNwZWNpZmljCisgICAgICAgIGZpbGVzLgorICAg
ICAgICAKKyAgICAgICAgVGhlIGNvbnZlbnRpb24gaXMgdGhhdCBpZiBhIGZ1bmN0aW9uIGJlZ2lu
cyB3aXRoICJwbGF0Zm9ybSIsIGl0J3Mgbm90IGEgdG9wLWxldmVsCisgICAgICAgIGVudHJ5IHBv
aW50LCBhbmQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlcmUncyBhIHBsYXRmb3JtIGNv
bnRleHQgKGkuZS4gbm90CisgICAgICAgIHJlY29yZGluZywgYW5kIG5vdCBwYWludGluZ0Rpc2Fi
bGVkKS4KKyAgICAgICAgCisgICAgICAgIEEgZmV3IGluc3RhbmNlcyBhcmUgc3R1YmJlZCBvdXQg
dW50aWwgd2UgaGF2ZSBhIG1vcmUgY29tcGxldGUgZGlzcGxheSBsaXN0IGltcGxlbWVudGF0aW9u
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxs
aXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHln
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm90YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQ
bGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9y
ZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0
dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xpcEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJl
Z2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNv
bmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tu
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxs
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNo
b3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU2hvdWxkU21vb3RoRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKToKKworMjAx
Ni0wMS0wOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKwogICAgICAg
ICBBZGQgRGlzcGxheUxpc3QgaG9va3MgaW50byBHcmFwaGljc0NvbnRleHQKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjkzMgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRl
eCA1MjlkNmVmZjdmZTY3NjZlY2FjYzFiNjk2ZWRhZjc1ZTg0NTkyN2NiLi4xMWUwYzMzZjFlN2I3
OGRjZjQxYzVkNjE3Zjk0NTcxMDZiMWY1NGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTY4Miw2ICs2ODIsMTEg
QEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb24KICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm4gMDsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIC8v
IEZJWE1FOiBUZXh0IGRyYXdpbmcgd2l0aCBkaXNwbGF5IGxpc3RzIFRCRC4KKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCiAgICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9p
bnQsIGZyb20sIHRvKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDI5
ZWVjM2YwOWI2YTk4MmNlZGVlMzVjZWJkZmIyNzZiMGYyNzE0ZWQuLjAzNGRhZDE5ZTY3YTM1MGNk
MzdhODRhNjc3NmZjZTM0MGFhMmNiNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAK
QEAgLTM3LDYgKzM3LDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1
ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgog
I2luY2x1ZGUgIkRyYXdFcnJvclVuZGVybGluZS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMjAxLDYgKzIwMiwxMSBAQCBBZmZpbmVU
cmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlKSBjb25z
dAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBBZmZpbmVUcmFu
c2Zvcm0oKTsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5
cygiR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBy
ZWNvcmRpbmcgY29udGV4dHMuIik7CisgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsK
KyAgICB9CisKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwogICAg
IGNhaXJvX21hdHJpeF90IG07CiAgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0pOwpAQCAtMjE0
LDEyICsyMjAsMTQgQEAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9y
bVN0YXRlKCkKIHsKKyAgICBBU1NFUlQoIWlzUmVjb3JkaW5nKCkpOwogICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5zYXZlKCk7CiAgICAgbV9kYXRhLT5zYXZlKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCiB7CisgICAgQVNTRVJUKCFpc1JlY29yZGlu
ZygpKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVzdG9yZSgpOwogICAgIG1fZGF0YS0+cmVz
dG9yZSgpOwogCkBAIC0yMzAsMTEgKzIzOCwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVz
dG9yZVBsYXRmb3JtU3RhdGUoKQogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0
aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3Jk
aW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5kcmF3UmVjdChyZWN0LCBi
b3JkZXJUaGlja25lc3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJUKCFy
ZWN0LmlzRW1wdHkoKSk7CiAKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpLT5j
cigpOwpAQCAtMjQ3LDcgKzI2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0KQogICAgICAgICBGbG9hdFJlY3QgcihyZWN0KTsK
ICAgICAgICAgci5pbmZsYXRlKC0uNWYpOwogICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHIu
eCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKLSAgICAgICAgY2Fpcm9fc2V0X2xp
bmVfd2lkdGgoY3IsIDEuMCk7CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCAxLjAp
OyAvLyBib3JkZXJUaGlja25lc3M/CiAgICAgICAgIGNhaXJvX3N0cm9rZShjcik7CiAgICAgfQog
CkBAIC0yNTYsNyArMjY5LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05h
dGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGltYWdlU2l6ZSk7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlz
UmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5kcmF3TmF0aXZl
SW1hZ2UoaW1hZ2VQdHIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBibGVuZE1v
ZGUsIG9yaWVudGF0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIE5hdGl2ZUlt
YWdlUHRyIGltYWdlID0gaW1hZ2VQdHI7CiAKQEAgLTI5NSw2ICszMTQsMTEgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5
TGlzdFJlY29yZGVyLT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IgPSB0aGlzLT5zdHJva2VDb2xv
cigpOwogICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwogICAgIGJvb2wg
aXNWZXJ0aWNhbExpbmUgPSAocG9pbnQxLngoKSArIHRoaWNrbmVzcyA9PSBwb2ludDIueCgpKTsK
QEAgLTM4NCw2ICs0MDgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlM
aXN0UmVjb3JkZXItPmRyYXdFbGxpcHNlKHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKICAgICBjYWlyb19z
YXZlKGNyKTsKICAgICBmbG9hdCB5UmFkaXVzID0gLjUgKiByZWN0LmhlaWdodCgpOwpAQCAtNDE0
LDYgKzQ0MywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6
ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cwogICAgIGlmIChucG9pbnRzIDw9
IDEpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAg
IG1fZGlzcGxheUxpc3RSZWNvcmRlci0+ZHJhd0NvbnZleFBvbHlnb24obnBvaW50cywgcG9pbnRz
LCBzaG91bGRBbnRpYWxpYXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2Fpcm9f
dCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKIAogICAgIGNhaXJvX3NhdmUoY3IpOwpA
QCAtNDQ0LDYgKzQ3OCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHln
b24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbgogICAgIGlmIChudW1Q
b2ludHMgPD0gMSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsK
KyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5jbGlwQ29udmV4UG9seWdvbihudW1Qb2lu
dHMsIHBvaW50cywgYW50aWFsaWFzZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Y2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKIAogICAgIGNhaXJvX25ld19w
YXRoKGNyKTsKQEAgLTQ2NCw2ICs1MDMsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRo
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsK
KyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5maWxsUGF0aChwYXRoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0KCktPmNy
KCk7CiAgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5j
b250ZXh0KCkpOwogICAgIHNoYWRvd0FuZEZpbGxDdXJyZW50Q2Fpcm9QYXRoKCp0aGlzKTsKQEAg
LTQ3NCw2ICs1MTgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBt
X2Rpc3BsYXlMaXN0UmVjb3JkZXItPnN0cm9rZVBhdGgocGF0aCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwogICAg
IHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgp
KTsKICAgICBzaGFkb3dBbmRTdHJva2VDdXJyZW50Q2Fpcm9QYXRoKCp0aGlzKTsKQEAgLTQ4NCw2
ICs1MzMsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
KyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXIt
PmZpbGxSZWN0KHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2Fpcm9fdCog
Y3IgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJl
Y3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICBzaGFk
b3dBbmRGaWxsQ3VycmVudENhaXJvUGF0aCgqdGhpcyk7CkBAIC00OTQsNiArNTQ4LDExIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVj
b3JkZXItPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwog
ICAgIGlmIChoYXNTaGFkb3coKSkKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNoYWRvd0Js
dXIoKS5kcmF3UmVjdFNoYWRvdygqdGhpcywgRmxvYXRSb3VuZGVkUmVjdChyZWN0KSk7CiAKQEAg
LTUwNSw2ICs1NjQsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRl
ci0+Y2xpcChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGNhaXJvX3QqIGNy
ID0gcGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0
LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgY2Fpcm9f
ZmlsbF9ydWxlX3Qgc2F2ZWRGaWxsUnVsZSA9IGNhaXJvX2dldF9maWxsX3J1bGUoY3IpOwpAQCAt
NTI3LDYgKzU5MSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0
aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9k
aXNwbGF5TGlzdFJlY29yZGVyLT5jbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpLT5jcigp
OwogICAgIGlmICghcGF0aC5pc051bGwoKSkKICAgICAgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0
KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCkpOwpAQCAtNTUyLDYgKzYyMSwxNCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZQogCiBJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xp
cEJvdW5kcygpIGNvbnN0CiB7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKKworICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIFdU
RkxvZ0Fsd2F5cygiR2V0dGluZyB0aGUgY2xpcCBib3VuZHMgbm90IHlldCBzdXBwb3J0ZWQgd2l0
aCBkaXNwbGF5IGxpc3RzIik7CisgICAgICAgIHJldHVybiBJbnRSZWN0KC0yMDQ4LCAtMjA0OCwg
NDA5NiwgNDA5Nik7IC8vIEZJWE1FOiBkaXNwbGF5IGxpc3RzLgorICAgIH0KKwogICAgIGRvdWJs
ZSB4MSwgeDIsIHkxLCB5MjsKICAgICBjYWlyb19jbGlwX2V4dGVudHMocGxhdGZvcm1Db250ZXh0
KCktPmNyKCksICZ4MSwgJnkxLCAmeDIsICZ5Mik7CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QoRmxvYXRSZWN0KHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSkpOwpAQCAtNjYzLDYgKzc0MCwx
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAgIGlmICh3aWR0aHMuc2l6ZSgpIDw9IDAp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1f
ZGlzcGxheUxpc3RSZWNvcmRlci0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgd2lkdGhzLCBwcmlu
dGluZywgZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlVGhpY2tuZXNzKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgQ29sb3IgbG9jYWxTdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsK
IAogICAgIEZsb2F0UmVjdCBib3VuZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2lu
Z01vZGVGb3JUZXh0KHBvaW50LCB3aWR0aHMubGFzdCgpLCBwcmludGluZywgbG9jYWxTdHJva2VD
b2xvcik7CkBAIC03MjAsNiArODAyLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQKIAogRmxv
YXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJl
Y3QmIGZyZWN0LCBSb3VuZGluZ01vZGUpCiB7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuIGZyZWN0OworCisgICAgaWYgKCFpc1JlY29yZGluZygpKSB7CisgICAg
ICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKCkg
aXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVjb3JkaW5nIGNvbnRleHRzLiIpOworICAgICAg
ICByZXR1cm4gZnJlY3Q7CisgICAgfQorCiAgICAgRmxvYXRSZWN0IHJlc3VsdDsKICAgICBkb3Vi
bGUgeCA9IGZyZWN0LngoKTsKICAgICBkb3VibGUgeSA9IGZyZWN0LnkoKTsKQEAgLTc2MCw2ICs4
NTAsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlm
IChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+dHJhbnNs
YXRlKHgsIHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2Fpcm9fdCogY3IgPSBw
bGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKICAgICBjYWlyb190cmFuc2xhdGUoY3IsIHgsIHkpOwog
ICAgIG1fZGF0YS0+dHJhbnNsYXRlKHgsIHkpOwpAQCAtNzgyLDYgKzg3Nyw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlj
a25lc3MpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgQVNTRVJUKCFpc1JlY29yZGluZygpKTsKKwogICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKHBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLCBzdHJva2VUaGlja25lc3MpOwogfQogCkBAIC03OTMsNiAr
ODkwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgQVNTRVJUKCFpc1JlY29yZGluZygpKTsKKwogICAgIHN3aXRjaCAo
c3Ryb2tlU3R5bGUpIHsKICAgICBjYXNlIE5vU3Ryb2tlOgogICAgICAgICAvLyBGSVhNRTogaXMg
aXQgdGhlIHJpZ2h0IHdheSB0byBlbXVsYXRlIE5vU3Ryb2tlPwpAQCAtODIyLDYgKzkyMSwxMSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRl
ci0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBj
YWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwogICAgIGNvbnN0IGNhaXJvX21h
dHJpeF90IG1hdHJpeCA9IGNhaXJvX21hdHJpeF90KHRyYW5zZm9ybSk7CiAgICAgY2Fpcm9fdHJh
bnNmb3JtKGNyLCAmbWF0cml4KTsKQEAgLTgzMyw2ICs5MzcsMTEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRp
bmcoKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKCkg
aXMgbm90IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dCgpLT5jcigp
OwogICAgIGNvbnN0IGNhaXJvX21hdHJpeF90IG1hdHJpeCA9IGNhaXJvX21hdHJpeF90KHRyYW5z
Zm9ybSk7CiAgICAgY2Fpcm9fc2V0X21hdHJpeChjciwgJm1hdHJpeCk7CkBAIC04NzAsNiArOTc5
LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCBvcGFjaXR5KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIEFTU0VSVCghaXNSZWNvcmRpbmcoKSk7CisKICAgICBjYWlyb190KiBjciA9
IHBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwogICAgIGNhaXJvX3B1c2hfZ3JvdXAoY3IpOwogICAg
IG1fZGF0YS0+bGF5ZXJzLmFwcGVuZChvcGFjaXR5KTsKQEAgLTg4MCw2ICs5OTEsOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgQVNTRVJUKCFpc1Jl
Y29yZGluZygpKTsKKwogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0KCktPmNyKCk7
CiAKICAgICBjYWlyb19wb3BfZ3JvdXBfdG9fc291cmNlKGNyKTsKQEAgLTg5Nyw2ICsxMDEwLDEx
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlm
IChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+Y2xlYXJS
ZWN0KHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2Fpcm9fdCogY3IgPSBw
bGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKIAogICAgIGNhaXJvX3NhdmUoY3IpOwpAQCAtOTExLDYg
KzEwMjksMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3Bs
YXlMaXN0UmVjb3JkZXItPnN0cm9rZVJlY3QocmVjdCwgd2lkdGgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKICAg
ICBjYWlyb19zYXZlKGNyKTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKQEAgLTkyNCw2ICsxMDQ3LDExIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNv
cmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPnNldExpbmVDYXAobGlu
ZUNhcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBjYWlyb19saW5lX2NhcF90IGNh
aXJvQ2FwID0gQ0FJUk9fTElORV9DQVBfQlVUVDsKICAgICBzd2l0Y2ggKGxpbmVDYXApIHsKICAg
ICBjYXNlIEJ1dHRDYXA6CkBAIC05NTAsNiArMTA3OCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
aXNEYXNoQXJyYXlBbGxaZXJvKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzKQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRh
c2hPZmZzZXQpCiB7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29y
ZGVyLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgaWYgKGlzRGFzaEFycmF5QWxsWmVybyhkYXNoZXMpKQogICAgICAgICBjYWly
b19zZXRfZGFzaChwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgMCwgMCwgMCk7CiAgICAgZWxzZQpA
QCAtOTYxLDYgKzEwOTcsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExp
bmVKb2luIGxpbmVKb2luKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RS
ZWNvcmRlci0+c2V0TGluZUpvaW4obGluZUpvaW4pOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgY2Fpcm9fbGluZV9qb2luX3QgY2Fpcm9Kb2luID0gQ0FJUk9fTElORV9KT0lOX01JVEVS
OwogICAgIHN3aXRjaCAobGluZUpvaW4pIHsKICAgICBjYXNlIE1pdGVySm9pbjoKQEAgLTEwMTMs
NiArMTE1NCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBw
YXRoKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+Y2xp
cE91dChwYXRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGNhaXJvX3QqIGNyID0g
cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgZG91YmxlIHgxLCB5MSwgeDIsIHkyOwogICAg
IGNhaXJvX2NsaXBfZXh0ZW50cyhjciwgJngxLCAmeTEsICZ4MiwgJnkyKTsKQEAgLTEwMzAsNiAr
MTE3NiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlz
UmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5yb3RhdGUocmFk
aWFucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBjYWlyb19yb3RhdGUocGxhdGZv
cm1Db250ZXh0KCktPmNyKCksIHJhZGlhbnMpOwogICAgIG1fZGF0YS0+cm90YXRlKHJhZGlhbnMp
OwogfQpAQCAtMTAzOSw2ICsxMTkwLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNpemUpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5
TGlzdFJlY29yZGVyLT5zY2FsZShzaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGNhaXJvX3NjYWxlKHBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOwogICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7CiB9CkBAIC0xMDQ4LDYgKzEyMDQs
MTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByKQog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChp
c1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+Y2xpcE91dChy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1D
b250ZXh0KCktPmNyKCk7CiAgICAgZG91YmxlIHgxLCB5MSwgeDIsIHkyOwogICAgIGNhaXJvX2Ns
aXBfZXh0ZW50cyhjciwgJngxLCAmeTEsICZ4MiwgJnkyKTsKQEAgLTEwNjQsNiArMTIyNSw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByZWN0LCBjb25zCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgQVNTRVJUKCFpc1JlY29yZGluZygpKTsKKwogICAgIGlmICho
YXNTaGFkb3coKSkKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNoYWRvd0JsdXIoKS5kcmF3
UmVjdFNoYWRvdygqdGhpcywgcmVjdCk7CiAKQEAgLTEwODIsNiArMTI0NSwxMSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlz
VmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAg
ICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0
LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGlmICh0aGlzLT5tdXN0VXNlU2hhZG93Qmx1cigpKQogICAgICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+c2hhZG93Qmx1cigpLmRyYXdJbnNldFNoYWRvdygqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVS
ZWN0KTsKIApAQCAtMTA5OSw4ICsxMjY3LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0CiAg
ICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0
dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBCbGVuZE1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogeworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAg
IG1fZGlzcGxheUxpc3RSZWNvcmRlci0+ZHJhd1BhdHRlcm4oaW1hZ2UsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3AsIGRlc3RSZWN0LCBibGVuZE1vZGUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3Vy
ZmFjZSA9IGltYWdlLm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgaWYgKCFzdXJm
YWNlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KICAg
ICAgICAgcmV0dXJuOwpAQCAtMTExNCw2ICsxMjkwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIEFTU0VSVCghaXNSZWNvcmRpbmco
KSk7CisKICAgICAvLyBXaGVuIHRydWUsIHVzZSB0aGUgZGVmYXVsdCBDYWlybyBiYWNrZW5kIGFu
dGlhbGlhcyBtb2RlICh1c3VhbGx5IHRoaXMKICAgICAvLyBlbmFibGVzIHN0YW5kYXJkICdncmF5
c2NhbGUnIGFudGlhbGlhc2luZyk7IGZhbHNlIHRvIGV4cGxpY2l0bHkgZGlzYWJsZQogICAgIC8v
IGFudGlhbGlhc2luZy4gVGhpcyBpcyB0aGUgc2FtZSBzdHJhdGVneSBhcyB1c2VkIGluIGRyYXdD
b252ZXhQb2x5Z29uKCkuCkBAIC0xMTIyLDExICsxMzAwLDE2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBv
bGF0aW9uUXVhbGl0eSBxdWFsaXR5KQogeworICAgIEFTU0VSVCghaXNSZWNvcmRpbmcoKSk7CisK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShxdWFs
aXR5KTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkg
Y29uc3QKIHsKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CiAgICAgcmV0dXJuIGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoY2Fpcm9fZ2V0X3RhcmdldChwbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKSkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9HTDsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwCmluZGV4IGM0NWRjMTljYzk5Y2RmMmQ4MjU5ZmU3MzhmZmNmMmQ3NDkzYWJl
ZWUuLjcxNDlmNDI4NTVjYTVlOWJmZTgxNzEyODgxODI2Y2RkNGRjMWNlYmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgogI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVj
b3JkZXIuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCkBA
IC0xNDEsNiArMTQyLDggQEAgQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1D
b250ZXh0KCkgY29uc3QKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgp
CiB7CiAgICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOworICAgIEFTU0VSVCghaXNSZWNv
cmRpbmcoKSk7CisKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGlu
IHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4
dHJhCiAgICAgLy8gc2F2ZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgogICAgIENHQ29udGV4dFNhdmVHU3RhdGUocGxhdGZv
cm1Db250ZXh0KCkpOwpAQCAtMTUwLDYgKzE1Myw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
YXZlUGxhdGZvcm1TdGF0ZSgpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3Jt
U3RhdGUoKQogewogICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKKyAgICBBU1NFUlQo
IWlzUmVjb3JkaW5nKCkpOworCiAgICAgLy8gTm90ZTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9u
IHdpdGhpbiB0aGlzIGNsYXNzIGltcGxlbWVudGF0aW9uLCBzaW5jZSB3ZSB3YW50IHRvIGF2b2lk
IHRoZSBleHRyYQogICAgIC8vIHJlc3RvcmUgb2YgdGhlIHNlY29uZGFyeSBjb250ZXh0IChpbiBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oKS4KICAgICBDR0NvbnRleHRSZXN0b3Jl
R1N0YXRlKHBsYXRmb3JtQ29udGV4dCgpKTsKQEAgLTE2Miw2ICsxNjcsMTEgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShQYXNzTmF0aXZlSW1hZ2VQdHIgaW1hZ2VQdHIs
IGNvbnN0IEZsb2F0U2kKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVj
b3JkZXItPmRyYXdOYXRpdmVJbWFnZShpbWFnZVB0ciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKGltYWdlUHRyKTsKIAogICAgIGZs
b2F0IGN1cnJIZWlnaHQgPSBvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpID8gQ0dJbWFn
ZUdldFdpZHRoKGltYWdlLmdldCgpKSA6IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpOwpA
QCAtMjc5LDYgKzI4OSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxh
eUxpc3RSZWNvcmRlci0+ZHJhd1BhdHRlcm4oaW1hZ2UsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3AsIGRlc3RSZWN0LCBibGVuZE1vZGUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAg
Q0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBkZXN0UmVjdCk7CkBAIC0zNzksNiArMzk0LDEx
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3Bs
YXlMaXN0UmVjb3JkZXItPmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBo
YW5kbGUgcGF0dGVybnMgYW5kIGdyYWRpZW50cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0IHByb2Jh
Ymx5IHNob3VsZC4KICAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKIApAQCAtNDEyLDYgKzQz
MiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludAogICAgIGlmIChzdHJva2VTdHlsZSgpID09
IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgewor
ICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRo
aWNrbmVzcygpOwogICAgIGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAocG9pbnQxLngoKSArIHRoaWNr
bmVzcyA9PSBwb2ludDIueCgpKTsKICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IGlzVmVydGljYWxM
aW5lID8gcG9pbnQyLnkoKSAtIHBvaW50MS55KCkgOiBwb2ludDIueCgpIC0gcG9pbnQxLngoKTsK
QEAgLTQ5Nyw2ICs1MjIsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlM
aXN0UmVjb3JkZXItPmRyYXdFbGxpcHNlKHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKICAgICBkcmF3UGF0
aChwYXRoKTsKQEAgLTUyMCw2ICs1NTAsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdD
b252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCoKICAg
ICBpZiAobnVtYmVyT2ZQb2ludHMgPD0gMSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlz
UmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5kcmF3Q29udmV4
UG9seWdvbihudW1iZXJPZlBvaW50cywgcG9pbnRzLCBhbnRpYWxpYXNlZCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dCgpOwogCiAgICAgaWYgKGFudGlhbGlhc2VkICE9IHNob3VsZEFudGlhbGlhcygpKQpAQCAtNTQx
LDYgKzU3NiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6
ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KgogICAgIGlmIChudW1iZXJPZlBv
aW50cyA8PSAxKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgewor
ICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmNsaXBDb252ZXhQb2x5Z29uKG51bWJlck9m
UG9pbnRzLCBwb2ludHMsIGFudGlhbGlhcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKGFu
dGlhbGlhcyAhPSBzaG91bGRBbnRpYWxpYXMoKSkKQEAgLTU1OSw2ICs1OTksMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAg
ICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5hcHBseVN0cm9rZVBhdHRlcm4oKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmluZVRy
YW5zZm9ybShnZXRVc2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkpOwogCkBAIC01NzgsNiArNjIzLDEx
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmco
KSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmFwcGx5RmlsbFBhdHRlcm4oKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFm
ZmluZVRyYW5zZm9ybShnZXRVc2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkpOwogCkBAIC02MjQsNiAr
Njc0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRo
KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxp
c3RSZWNvcmRlci0+ZHJhd1BhdGgocGF0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKQEAgLTY2MSw2ICs3MTYsMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29y
ZGVyLT5maWxsUGF0aChwYXRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5m
aWxsR3JhZGllbnQpIHsKQEAgLTcxNSw2ICs3NzUsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
IHx8IHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRp
bmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPnN0cm9rZVBhdGgocGF0aCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBs
YXRmb3JtQ29udGV4dCgpOwogCiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwpAQCAt
NzcyLDYgKzgzNywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNv
cmRlci0+ZmlsbFJlY3QocmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKG1fc3RhdGUu
ZmlsbEdyYWRpZW50KSB7CkBAIC04MjAsNiArODkwLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNS
ZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmZpbGxSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmls
bENvbG9yKCk7CiAKQEAgLTg0OSw2ICs5MjQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29ucwog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBBU1NFUlQoIWlzUmVjb3JkaW5nKCkpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsK
QEAgLTg5MSw2ICs5NjgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXQKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmco
KSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAg
IFBhdGggcGF0aDsKQEAgLTkzMiw2ICsxMDE0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rp
c3BsYXlMaXN0UmVjb3JkZXItPmNsaXAocmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKICAgICBt
X2RhdGEtPmNsaXAocmVjdCk7CiB9CkBAIC05NDEsNiArMTAyOCwxMSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsK
KyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5jbGlwT3V0KHJlY3QpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgLy8gRklYTUU6IFVzaW5nIENHUmVjdEluZmluaXRlIGlzIG11
Y2ggZmFzdGVyIHRoYW4gZ2V0dGluZyB0aGUgY2xpcCBib3VuZGluZyBib3guIEhvd2V2ZXIsIGR1
ZQogICAgIC8vIHRvIDxyZGFyOi8vcHJvYmxlbS8xMjU4NDQ5Mj4sIENHUmVjdEluZmluaXRlIGNh
bid0IGJlIHVzZWQgd2l0aCBhbiBhY2NlbGVyYXRlZCBjb250ZXh0IHRoYXQKICAgICAvLyBoYXMg
Y2VydGFpbiB0cmFuc2Zvcm1zIHRoYXQgYXJlbid0IGp1c3QgYSB0cmFuc2xhdGlvbiBvciBhIHNj
YWxlLiBBbmQgZHVlIHRvIDxyZGFyOi8vcHJvYmxlbS8xNDYzNDQ1Mz4KQEAgLTk1MywxMSArMTA0
NSwzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAgICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNSZWNvcmRpbmco
KSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmNsaXBPdXQocGF0aCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250
ZXh0KCkpOworICAgIENHQ29udGV4dEFkZFJlY3QocGxhdGZvcm1Db250ZXh0KCksIENHQ29udGV4
dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIGlmICghcGF0aC5p
c0VtcHR5KCkpCisgICAgICAgIENHQ29udGV4dEFkZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBh
dGgucGxhdGZvcm1QYXRoKCkpOworICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQo
KSk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3Bs
YXlMaXN0UmVjb3JkZXItPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNv
bnRleHQsIENHUmVjdFplcm8pOwpAQCAtOTc5LDYgKzEwOTMsMTIgQEAgSW50UmVjdCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgewor
ICAgICAgICBXVEZMb2dBbHdheXMoIkdldHRpbmcgdGhlIGNsaXAgYm91bmRzIG5vdCB5ZXQgc3Vw
cG9ydGVkIHdpdGggZGlzcGxheSBsaXN0cyIpOworICAgICAgICByZXR1cm4gSW50UmVjdCgtMjA0
OCwgLTIwNDgsIDQwOTYsIDQwOTYpOyAvLyBGSVhNRTogZGlzcGxheSBsaXN0cy4KKyAgICB9CisK
KwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0Jv
eChwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCkBAIC05ODcsNiArMTEwNyw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0
eSkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBB
U1NFUlQoIWlzUmVjb3JkaW5nKCkpOworCiAgICAgc2F2ZSgpOwogCiAgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKQEAgLTk5OSw2ICsxMTIxLDkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNS
ZWNvcmRpbmcoKSk7CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dCgpOwogICAgIENHQ29udGV4dEVuZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHQpOwogCkBAIC0x
MDQyLDYgKzExNjcsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3co
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbgogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNSZWNvcmRp
bmcoKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGF2b2lkIHRoZSBzaGFkb3cgc2V0
dXAgY29zdCB3aGVuIHdlIGtub3cgd2UnbGwgcmVuZGVyIHRoZSBzaGFkb3cgb3Vyc2VsdmVzLgog
CkBAIC0xMDkyLDYgKzEyMTksMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGlt
aXQoZmxvYXQgbGltaXQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgLy8gTWF5YmUgdGhp
cyBzaG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNv
cmRlci0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7CiB9CiAK
QEAgLTEwOTksNiArMTIzMywxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlM
aXN0UmVjb3JkZXItPmNsZWFyUmVjdChyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IENHQ29udGV4dENsZWFyUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcik7CiB9CiAKQEAgLTExMDcs
NiArMTI0NywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBt
X2Rpc3BsYXlMaXN0UmVjb3JkZXItPnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgewpAQCAtMTE3MSw2
ICsxMzE2LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2Fw
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKKworICAg
IGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+c2V0
TGluZUNhcChjYXApOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgc3dpdGNoIChjYXAp
IHsKICAgICBjYXNlIEJ1dHRDYXA6CiAgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZv
cm1Db250ZXh0KCksIGtDR0xpbmVDYXBCdXR0KTsKQEAgLTExODksNiArMTM0MCwxMSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZs
b2F0IGRhc2hPZmZzZXQpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJl
Y29yZGVyLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7CiAgICAgICAgIGZsb2F0IGxlbmd0
aCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytp
KQpAQCAtMTIwMyw2ICsxMzU5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9p
bihMaW5lSm9pbiBqb2luKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKKworICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxp
c3RSZWNvcmRlci0+c2V0TGluZUpvaW4oam9pbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBzd2l0Y2ggKGpvaW4pIHsKICAgICBjYXNlIE1pdGVySm9pbjoKICAgICAgICAgQ0dDb250
ZXh0U2V0TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luTWl0ZXIpOwpAQCAt
MTIyMSwyMiArMTM4MywxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25z
dCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBmaWxsUnVsZSkKICAgICBjbGlwUGF0aChwYXRoLCBmaWxs
UnVsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBh
dGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENH
Q29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVj
dChwbGF0Zm9ybUNvbnRleHQoKSwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3Jt
Q29udGV4dCgpKSk7Ci0gICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgQ0dDb250ZXh0
QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0gICAgQ0dD
b250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgIGlmIChpc1JlY29yZGluZygpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3RS
ZWNvcmRlci0+c2NhbGUoc2l6ZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBDR0Nv
bnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKTsKICAgICBtX2RhdGEtPnNjYWxlKHNpemUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZp
Y2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwpAQCAtMTI0Niw2ICsxNDAyLDEy
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzUmVjb3Jk
aW5nKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5yb3RhdGUoYW5nbGUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQ0dDb250ZXh0Um90YXRlQ1RNKHBsYXRmb3Jt
Q29udGV4dCgpLCBhbmdsZSk7CiAgICAgbV9kYXRhLT5yb3RhdGUoYW5nbGUpOwogICAgIG1fZGF0
YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwpAQCAt
MTI1NSw2ICsxNDE3LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQg
eCwgZmxvYXQgeSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVj
b3JkZXItPnRyYW5zbGF0ZSh4LCB5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENH
Q29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgeCwgeSk7CiAgICAgbV9kYXRh
LT50cmFuc2xhdGUoeCwgeSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CkBAIC0xMjY0LDYgKzE0MzIsMTIgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmNvbmNh
dENUTSh0cmFuc2Zvcm0pOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQ0dDb250ZXh0
Q29uY2F0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+Y29u
Y2F0Q1RNKHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CkBAIC0xMjczLDYgKzE0NDcsMTIgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
aXNSZWNvcmRpbmcoKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6
c2V0Q1RNKCkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZvcm1Db250
ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsKICAgICBt
X2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsK
QEAgLTEyODMsNiArMTQ2MywxMSBAQCBBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Ojpn
ZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CiAKKyAg
ICBpZiAoaXNSZWNvcmRpbmcoKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29u
dGV4dDo6Z2V0Q1RNKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVjb3JkaW5nIGNvbnRl
eHRzLiIpOworICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgfQorCiAgICAg
Ly8gVGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBleGNlcHQg
aW4gV2ViS2l0IDEgd2hlbiB0aGUKICAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3NpdGVkLCBz
aW5jZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgogICAgIC8vIGxl
dmVsLiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBjYW4gdXNl
IHRoaXMgQ0cgQVBJLgpAQCAtMTI5Nyw2ICsxNDgyLDExIEBAIEZsb2F0UmVjdCBHcmFwaGljc0Nv
bnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGlu
Z01vCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHJlY3Q7CiAK
KyAgICBpZiAoIWlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0
aCByZWNvcmRpbmcgY29udGV4dHMuIik7CisgICAgICAgIHJldHVybiByZWN0OworICAgIH0KKwog
ICAgIC8vIEl0IGlzIG5vdCBlbm91Z2gganVzdCB0byByb3VuZCB0byBwaXhlbHMgaW4gZGV2aWNl
IHNwYWNlLiBUaGUgcm90YXRpb24gcGFydCBvZiB0aGUKICAgICAvLyBhZmZpbmUgdHJhbnNmb3Jt
IG1hdHJpeCB0byBkZXZpY2Ugc3BhY2UgY2FuIG1lc3Mgd2l0aCB0aGlzIGNvbnZlcnNpb24gaWYg
d2UgaGF2ZSBhCiAgICAgLy8gcm90YXRpbmcgaW1hZ2UgbGlrZSB0aGUgaGFuZHMgb2YgdGhlIHdv
cmxkIGNsb2NrIHdpZGdldC4gV2UganVzdCBuZWVkIHRoZSBzY2FsZSwgc28KQEAgLTEzNTUsNiAr
MTU0NSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAgIGlmICghd2lkdGhzLnNpemUo
KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpIHsKKyAgICAgICAg
bV9kaXNwbGF5TGlzdFJlY29yZGVyLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3aWR0aHMsIHBy
aW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlVGhpY2tuZXNzKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgQ29sb3IgbG9jYWxTdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKIAog
ICAgIEZsb2F0UmVjdCBib3VuZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01v
ZGVGb3JUZXh0KHBvaW50LCB3aWR0aHMubGFzdCgpLCBwcmludGluZywgbG9jYWxTdHJva2VDb2xv
cik7CkBAIC0xMzg3LDYgKzE1ODIsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZv
clJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoaXNSZWNvcmRp
bmcoKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9y
UmVjdCgpIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIHJlY29yZGluZyBjb250ZXh0cy4iKTsK
KyAgICAgICAgcmV0dXJuOyAvLyBGSVhNRSBmb3IgZGlzcGxheSBsaXN0cy4KKyAgICB9CisKICAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybFJlZiA9IGxpbmsuY3JlYXRlQ0ZVUkwoKTsKICAgICBp
ZiAoIXVybFJlZikKICAgICAgICAgcmV0dXJuOwpAQCAtMTQzOCw2ICsxNjM4LDEwIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQp
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8g
RklYTUUKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYg
KGlzTGF5ZXJDb250ZXh0KQogICAgICAgICBtX2RhdGEtPm1fY29udGV4dEZsYWdzIHw9IElzTGF5
ZXJDR0NvbnRleHQ7CiAgICAgZWxzZQpAQCAtMTQ0OSw2ICsxNjUzLDEwIEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBGSVhNRQorICAgIGlmIChp
c1JlY29yZGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gbV9kYXRh
LT5tX2NvbnRleHRGbGFncyAmIElzTGF5ZXJDR0NvbnRleHQ7CiB9CiAKQEAgLTE0NTcsNiArMTY2
NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9v
bCBpc0FjY2VsZXJhdGVkKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIC8vIEZJWE1FCisgICAgaWYgKGlzUmVjb3JkaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGlmIChpc0FjY2VsZXJhdGVkKQogICAgICAgICBtX2RhdGEtPm1fY29udGV4
dEZsYWdzIHw9IElzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7CiAgICAgZWxzZQpAQCAtMTQ2OCw2ICsx
NjgwLDEwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNv
bnN0CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgLy8gRklYTUUKKyAgICBpZiAoaXNSZWNvcmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCiAgICAgcmV0dXJuIG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgJiBJc0FjY2VsZXJhdGVk
Q0dDb250ZXh0OwogfQogCkBAIC0xNDc2LDYgKzE2OTIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBBU1NF
UlQoIWlzUmVjb3JkaW5nKCkpOworCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFRleHRNb2RlRmlsbDoK
QEAgLTE0OTYsNiArMTcxNCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0
cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIWlzUmVjb3JkaW5nKCkpOworCiAg
ICAgc2V0Q0dTdHJva2VDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IpOwogfQogCkBAIC0x
NTAzLDYgKzE3MjQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VU
aGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNSZWNvcmRpbmcoKSk7CisKICAgICBD
R0NvbnRleHRTZXRMaW5lV2lkdGgocGxhdGZvcm1Db250ZXh0KCksIHN0ZDo6bWF4KHRoaWNrbmVz
cywgMC5mKSk7CiB9CiAKQEAgLTE1MTAsNiArMTczNCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFpc1JlY29y
ZGluZygpKTsKKwogICAgIHNldENHRmlsbENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBjb2xvcik7
CiB9CiAKQEAgLTE1MTcsNiArMTc0NCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIWlzUmVjb3JkaW5nKCkpOwor
CiAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKHBsYXRmb3JtQ29udGV4dCgpLCBlbmFi
bGUpOwogfQogCkBAIC0xNTI0LDYgKzE3NTQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29sIGVuYWJsZSkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIWlzUmVjb3JkaW5n
KCkpOworCiAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMocGxhdGZvcm1Db250ZXh0
KCksIGVuYWJsZSk7CiB9CiAKQEAgLTE1MzEsNiArMTc2NCw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUFscGhhKGZsb2F0IGFscGhhKQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNSZWNvcmRpbmcoKSk7
CisKICAgICBDR0NvbnRleHRTZXRBbHBoYShwbGF0Zm9ybUNvbnRleHQoKSwgYWxwaGEpOwogfQog
CkBAIC0xNTM5LDYgKzE3NzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1D
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgbW9kZSwgQmxlbgogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIEFTU0VSVCghaXNSZWNv
cmRpbmcoKSk7CisKICAgICBDR0JsZW5kTW9kZSB0YXJnZXQgPSBrQ0dCbGVuZE1vZGVOb3JtYWw7
CiAgICAgaWYgKGJsZW5kTW9kZSAhPSBCbGVuZE1vZGVOb3JtYWwpIHsKICAgICAgICAgc3dpdGNo
IChibGVuZE1vZGUpIHsKQEAgLTE2NTAsNiArMTg4OCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Ip
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgQVNT
RVJUKCFpc1JlY29yZGluZygpKTsKKwogICAgIC8vIENvcmVHcmFwaGljcyBleHBlY3RzIHRoZSBi
YXNlIENUTSBvZiBhIEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFwcGxp
ZWQgdG8gaXQuCiAgICAgLy8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RNIHdp
bGwgY2F1c2UgY2VydGFpbiBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1cyByaW5ncywKICAgICAv
LyB0byBkcmF3IHdpdGggYSBzY2FsZSBmYWN0b3Igb2YgMSByYXRoZXIgdGhhbiB0aGUgYWN0dWFs
IHNjYWxlIGZhY3Rvci4KQEAgLTE2NjEsNiArMTkwMSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBBU1NFUlQoIWlzUmVj
b3JkaW5nKCkpOworCiAgICAgLy8gQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3Qgb25seSBzdXBw
b3J0cyBzb2xpZCBjb2xvcnMuCiAgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3Rh
dGUuZmlsbFBhdHRlcm4pIHsKICAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CkBA
IC0xNjc2LDYgKzE5MTgsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBBU1NFUlQoIWlzUmVjb3JkaW5nKCkpOworCiAg
ICAgLy8gQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNv
bG9ycy4KICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBh
dHRlcm4pIHsKICAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsK
</data>
<flag name="review"
          id="293585"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>