<?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>56678</bug_id>
          
          <creation_ts>2011-03-18 14:07:23 -0700</creation_ts>
          <short_desc>Add API - QWebUserEnvironment</short_desc>
          <delta_ts>2012-12-26 07:09:55 -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>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>56274</dependson>
    
    <dependson>56482</dependson>
          <blocked>41801</blocked>
    
    <blocked>50895</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robert Hogan">robert</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>kent.hansen</cc>
    
    <cc>kling</cc>
    
    <cc>mikeperry-webkit</cc>
    
    <cc>robert</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>369858</commentid>
    <comment_count>0</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-03-18 14:07:23 -0700</bug_when>
    <thetext>Add API - QWebUserEnvironment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369862</commentid>
    <comment_count>1</comment_count>
      <attachid>86207</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-03-18 14:10:03 -0700</bug_when>
    <thetext>Created attachment 86207
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369868</commentid>
    <comment_count>2</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-03-18 14:14:09 -0700</bug_when>
    <thetext>Still quite raw obviously. It depends on the patches in 56274 and 56482. Ultimately CSS font detection will need to be delegated to this class (or something like it) as well.

See https://trac.webkit.org/wiki/Fingerprinting for what I&apos;m trying to address here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369873</commentid>
    <comment_count>3</comment_count>
      <attachid>86210</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-03-18 14:16:26 -0700</bug_when>
    <thetext>Created attachment 86210
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369897</commentid>
    <comment_count>4</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-03-18 14:33:43 -0700</bug_when>
    <thetext>At first glance this class seems like a bit of a rattle-bag, and I initially intended to find a home in QWebFrame, QWebPage and co. for each of the properties delegated here. But in the end it seemed more developer-friendly to put everything in one place. 

The documentation in the class needs to be clearer that it is not a silver bullet and there needs to be more of the Fingerprinting wiki page in there. I&apos;m also not totally comfortable with leaving Screen and Navigator entirely to QWebFrame::addJavascriptToWindowObject(). It might be better to put all privacy-relevant properties in one place. Also, the class needs a better name.

So I would like feedback on what I&apos;m trying to do, not only here but on 56274 and 56482, which this depends on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369927</commentid>
    <comment_count>5</comment_count>
      <attachid>86218</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-03-18 15:01:30 -0700</bug_when>
    <thetext>Created attachment 86218
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369933</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-18 15:04:58 -0700</bug_when>
    <thetext>Attachment 86218 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/qt/Api/headers.pri&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebKit/qt/Api/qwebuserenvironment.h:21:  #ifndef header guard has wrong style, please use: WTF_qwebuserenvironment_h  [build/header_guard] [5]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370010</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-03-18 16:50:39 -0700</bug_when>
    <thetext>I strongly advice starting a discussion on the mailing list to introduce any important change of API.

APIs are our tools to provide features, but it is at the same time our biggest curse because the smallest error tend to cost us a lot in maintenance, support, and can prevent us from future improvement.

Contributors who do not deal with the downside of mistake in APIs are generally not aware of that.

In this case, I understand what you are trying to do. I want to help you do that since you are doing a good job on the webkit project. But at the same time, I do not think this API is even close to something that can be integrated in a released version of QtWebKit.

First, I think you should explore the possibility of a minimal private API for your project. Since you work both on WebKit.org, and the browser, you have the full flexibility to change the browser to match the implementation.

(Please also note that the timing is pretty bad since we are stabilizing WebKit trunk with the objective of forking for QtWebKit 2.2. The stabilization will surely give less visibility to this particular work)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370113</commentid>
    <comment_count>8</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-03-19 04:54:19 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; 
&gt; First, I think you should explore the possibility of a minimal private API for your project. Since you work both on WebKit.org, and the browser, you have the full flexibility to change the browser to match the implementation.

That&apos;s a really good idea and particularly useful here as the best way of exposing the information browsers need to deal with fingerprinting is likely to develop over time. A private API in DumpRenderTreeSupportQt or similar is exactly the sort of place to get a better handle on the final API requirements.

Do you have any concerns about the changes in 56274 and 56482?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370117</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-03-19 05:15:34 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I strongly advice starting a discussion on the mailing list to introduce any important change of API.
&gt; 
&gt; APIs are our tools to provide features, but it is at the same time our biggest curse because the smallest error tend to cost us a lot in maintenance, support, and can prevent us from future improvement.
&gt; 
&gt; Contributors who do not deal with the downside of mistake in APIs are generally not aware of that.
&gt; 
&gt; In this case, I understand what you are trying to do. I want to help you do that since you are doing a good job on the webkit project. But at the same time, I do not think this API is even close to something that can be integrated in a released version of QtWebKit.
&gt; 
&gt; First, I think you should explore the possibility of a minimal private API for your project. Since you work both on WebKit.org, and the browser, you have the full flexibility to change the browser to match the implementation.
&gt; 
&gt; (Please also note that the timing is pretty bad since we are stabilizing WebKit trunk with the objective of forking for QtWebKit 2.2. The stabilization will surely give less visibility to this particular work)

The API basically exposes the Chrome Client. Also changing most of these will result in wrongly shown contents (especially on mobile platforms), so if not treated the right way it can be a can of wormes. We need to be very careful about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370124</commentid>
    <comment_count>10</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-03-19 05:53:34 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; 
&gt; The API basically exposes the Chrome Client. Also changing most of these will result in wrongly shown contents (especially on mobile platforms), so if not treated the right way it can be a can of wormes. We need to be very careful about this.

You&apos;re right. The pros and cons the client needs to weigh up are outlined here:

https://trac.webkit.org/wiki/Fingerprinting#WindowObject

and in the links there. The approach of Torbutton and Torora is to restrict the size of the actual window, e.g. by multiples of px, so that the rendered content is not horribly disconnected from the actual window size. Another policy a client could use is to fix on a minimum rendered page size and use that regardless if the window is actually larger.

This is not a very pleasant trade-off to have to make and the right choice will differ from platform to platform and client to client.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393089</commentid>
    <comment_count>11</comment_count>
      <attachid>86218</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-04-26 16:55:56 -0700</bug_when>
    <thetext>Comment on attachment 86218
Patch

Agree with Benjamin, a bit more discussion is needed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86207</attachid>
            <date>2011-03-18 14:10:03 -0700</date>
            <delta_ts>2011-03-18 14:16:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56678-20110318210959.patch</filename>
            <type>text/plain</type>
            <size>23528</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE0OTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5YTg0NzY5M2EwMjZmMzcw
MGJjZTQyYjU2YzIzYTY3ZTYxOTY0NTMzLi5mM2YxZTU5MGEyODhmNDNjMjFmMWU1ZTEwYmUxNDhm
NzM4OWYwY2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMtMTggIFJvYmVy
dCBIb2dhbiAgPHJvYmVydEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBBUEkgLSBRV2ViVXNlckVudmlyb25tZW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjY3OAorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6c2NyZWVuUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOgorCiAyMDExLTAz
LTE2ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IDhl
OWMyM2U5YzllMWQzYjhmYmIxZDhhODMwNjhjMmRmM2YyNmNlM2QuLmU0YTgyZTNjNTkyZThkMzgz
ZTNlNzYxYjliNzk4N2JhMDQ5ODVkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApA
QCAtODIsOCArODIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHBhZ2VSZWN0KCkgPSAwOwogICAgICAgICB2aXJ0dWFsIGludCBzY3JlZW5EZXB0aFBl
ckNvbXBvbmVudChpbnQgYml0c1BlckNvbXBvbmVudCkgeyByZXR1cm4gYml0c1BlckNvbXBvbmVu
dDsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKGJvb2wgaXNNb25v
Y2hyb21lKSB7IHJldHVybiBpc01vbm9jaHJvbWU7IH0KLSAgICAgICAgdmlydHVhbCBGbG9hdFJl
Y3Qgc2NyZWVuUmVjdChGbG9hdFJlY3QgcmVjdCkgeyByZXR1cm4gcmVjdDsgfQotICAgICAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KEZsb2F0UmVjdCByZWN0KSB7IHJl
dHVybiByZWN0OyB9CisgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNjcmVlblJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KSB7IHJldHVybiByZWN0OyB9CisgICAgICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IHJldHVybiBy
ZWN0OyB9CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCkgPSAw
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvaGVhZGVycy5wcmkgYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9oZWFkZXJzLnByaQppbmRleCAyOWJiMTI1YjJhMjdmM2FiYzNj
M2QxZDI5ZTZlNWRmYmQyOTlkZTNhLi43Njc4ZTE0MjE1YzE0NTAxMDE3N2M5OWNkZmYzYzBiMjI2
YTc0YjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9oZWFkZXJzLnByaQorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9oZWFkZXJzLnByaQpAQCAtMTIsNCArMTIsNSBAQCBXRUJL
SVRfQVBJX0hFQURFUlMgPSAkJFBXRC9xd2ViZnJhbWUuaCBcCiAgICAgICAgICAgICAgICAgICAg
ICAkJFBXRC9xd2VicGx1Z2luZmFjdG9yeS5oIFwKICAgICAgICAgICAgICAgICAgICAgICQkUFdE
L3F3ZWJoaXN0b3J5LmggXAogICAgICAgICAgICAgICAgICAgICAgJCRQV0QvcXdlYmluc3BlY3Rv
ci5oIFwKLSAgICAgICAgICAgICAgICAgICAgICQkUFdEL3F3ZWJraXR2ZXJzaW9uLmgKKyAgICAg
ICAgICAgICAgICAgICAgICQkUFdEL3F3ZWJraXR2ZXJzaW9uLmggXAorICAgICAgICAgICAgICAg
ICAgICAgJCRQV0QvcXdlYnVzZXJlbnZpcm9ubWVudC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5j
cHAKaW5kZXggZTFiN2I5ZWU0NTQ4NWVmMmFlNGZlMjFjOWIxNTM0N2Q0N2Y1OGFlZS4uODRkYjI1
ODBkY2JhMDdlYWI2ZWUwZDUxMDExNDgwMDE5N2Q3MDBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmNwcApAQCAtMzEwLDYgKzMxMCw3IEBAIFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2
YXRlKFFXZWJQYWdlICpxcSkKICAgICAsIGluc3BlY3RvckZyb250ZW5kKDApCiAgICAgLCBpbnNw
ZWN0b3IoMCkKICAgICAsIGluc3BlY3RvcklzSW50ZXJuYWxPbmx5KGZhbHNlKQorICAgICwgdXNl
ckVudmlyb25tZW50KDApCiB7CiAgICAgV2ViQ29yZTo6SW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVs
c0lmTmVjZXNzYXJ5KCk7CiAgICAgU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRocmVhZGlu
ZygpOwpAQCAtMzY2OCw2ICszNjY5LDM1IEBAIFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqUVdlYlBh
Z2U6Om5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29uc3QKIH0KIAogLyohCisgICAgU2V0cyB0aGUg
UVdlYlVzZXJFbnZpcm9ubWVudCBcYSBtYW5hZ2VyIHJlc3BvbnNpYmxlIGZvciBzZXJ2aW5nIG5l
dHdvcmsgcmVxdWVzdHMgZm9yIHRoaXMKKyAgICBRV2ViUGFnZS4KKworICAgIFxub3RlIEl0IGlz
IGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHRvIGNoYW5nZSB0aGUgbmV0d29yayBhY2Nlc3MgbWFu
YWdlciBhZnRlciB0aGUKKyAgICBRV2ViUGFnZSBoYXMgdXNlZCBpdC4gVGhlIHJlc3VsdHMgb2Yg
ZG9pbmcgdGhpcyBhcmUgdW5kZWZpbmVkLgorCisgICAgXHNhIG5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KCkKKyovCit2b2lkIFFXZWJQYWdlOjpzZXRXZWJVc2VyRW52aXJvbm1lbnQoUVdlYlVzZXJFbnZp
cm9ubWVudCAqbWFuYWdlcikKK3sKKyAgICBpZiAobWFuYWdlciA9PSBkLT51c2VyRW52aXJvbm1l
bnQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZC0+dXNlckVudmlyb25tZW50ICYmIGQtPnVz
ZXJFbnZpcm9ubWVudC0+cGFyZW50KCkgPT0gdGhpcykKKyAgICAgICAgZGVsZXRlIGQtPnVzZXJF
bnZpcm9ubWVudDsKKyAgICBkLT51c2VyRW52aXJvbm1lbnQgPSBtYW5hZ2VyOworfQorCisvKiEK
KyAgICBSZXR1cm5zIHRoZSBRV2ViVXNlckVudmlyb25tZW50IHRoYXQgaXMgcmVzcG9uc2libGUg
Zm9yIHNlcnZpbmcgbmV0d29yaworICAgIHJlcXVlc3RzIGZvciB0aGlzIFFXZWJQYWdlLgorCisg
ICAgXHNhIHNldFdlYlVzZXJFbnZpcm9ubWVudCgpCisqLworUVdlYlVzZXJFbnZpcm9ubWVudCog
UVdlYlBhZ2U6OndlYlVzZXJFbnZpcm9ubWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPnVz
ZXJFbnZpcm9ubWVudDsKK30KKworLyohCiAgICAgU2V0cyB0aGUgUVdlYlBsdWdpbkZhY3Rvcnkg
XGEgZmFjdG9yeSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgcGx1Z2lucyBlbWJlZGRlZCBpbnRv
IHRoaXMKICAgICBRV2ViUGFnZS4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKaW5kZXggZTEyYjQ2
MDE1YTYzOWQ4YTFmNjc3N2MzYTFiOTM3NDAwMDY4MzY1OS4uZmNmNzljZTFhOTUyY2Q1MWFhZGI2
ZjJjYTgyMWYzMThkZGQzYjFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCkBAIC00MSw2ICs0
MSw3IEBAIGNsYXNzIFFXZWJFbGVtZW50OwogY2xhc3MgUVdlYkZyYW1lOwogY2xhc3MgUVdlYk5l
dHdvcmtSZXF1ZXN0OwogY2xhc3MgUVdlYkhpc3Rvcnk7CitjbGFzcyBRV2ViVXNlckVudmlyb25t
ZW50OwogCiBjbGFzcyBRV2ViRnJhbWVEYXRhOwogY2xhc3MgUVdlYkhpc3RvcnlJdGVtOwpAQCAt
MjY1LDYgKzI2Niw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqbWFuYWdlcik7CiAgICAgUU5ldHdvcmtBY2Nlc3NNYW5h
Z2VyICpuZXR3b3JrQWNjZXNzTWFuYWdlcigpIGNvbnN0OwogCisgICAgdm9pZCBzZXRXZWJVc2Vy
RW52aXJvbm1lbnQoUVdlYlVzZXJFbnZpcm9ubWVudCAqbWFuYWdlcik7CisgICAgUVdlYlVzZXJF
bnZpcm9ubWVudCAqd2ViVXNlckVudmlyb25tZW50KCkgY29uc3Q7CisKICAgICB2b2lkIHNldFBs
dWdpbkZhY3RvcnkoUVdlYlBsdWdpbkZhY3RvcnkgKmZhY3RvcnkpOwogICAgIFFXZWJQbHVnaW5G
YWN0b3J5ICpwbHVnaW5GYWN0b3J5KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJwYWdlX3AuaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3Au
aAppbmRleCA4NmY1NGI3MWQ3MjkxNmY4ZDU1ZmRhNjhhNDdjNzkzZWZkMzhiNzhhLi5iM2ZiMDgy
NGI2ZjFkMDA4MDQyNTdkM2Q4MzY5YTA1YWYyN2YyZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBh
Z2VfcC5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKICNpbmNsdWRl
ICJxd2ViaGlzdG9yeS5oIgogI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgorI2luY2x1ZGUgInF3ZWJ1
c2VyZW52aXJvbm1lbnQuaCIKIAogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiS1VS
TC5oIgpAQCAtMjEwLDYgKzIxMSw3IEBAIHB1YmxpYzoKICAgICBRV2ViSW5zcGVjdG9yKiBpbnNw
ZWN0b3I7CiAgICAgYm9vbCBpbnNwZWN0b3JJc0ludGVybmFsT25seTsgLy8gVHJ1ZSBpZiBjcmVh
dGVkIHRocm91Z2ggdGhlIEluc3BlY3QgY29udGV4dCBtZW51IGFjdGlvbgogICAgIFF0OjpEcm9w
QWN0aW9uIG1fbGFzdERyb3BBY3Rpb247CisgICAgUVdlYlVzZXJFbnZpcm9ubWVudCAqdXNlckVu
dmlyb25tZW50OwogCiAgICAgc3RhdGljIGJvb2wgZHJ0UnVuOwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ1c2VyZW52aXJvbm1lbnQuY3BwIGIvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYnVzZXJlbnZpcm9ubWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA0YTAwZjYzYzQ1
NThjNDhkZGFjMWJkODI1N2IyYzc1NjJhOTdhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJ1c2VyZW52aXJvbm1lbnQuY3BwCkBAIC0wLDAgKzEsMjEyIEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDcgU3RhaWtvcyBDb21w
dXRpbmcgU2VydmljZXMgSW5jLgorICAgIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAicXdlYnVzZXJlbnZpcm9ubWVudC5o
IgorCisvKiEKKyAgICBcY2xhc3MgUVdlYlVzZXJFbnZpcm9ubWVudAorICAgIFxzaW5jZSA0LjgK
KyAgICBcYnJpZWYgVGhlIFFXZWJVc2VyRW52aXJvbm1lbnQgY2xhc3MgcHJvdmlkZXMgYW4gb2Jq
ZWN0IHRvIGNvbnRyb2wgdGhlIHF1YWxpdHkgb2YgaW5mb3JtYXRpb24KKyAgICAgICAgICAgYWJv
dXQgdGhlIHVzZXIsIGJyb3dzaW5nIGhpc3RvcnksIGFuZCBkZXNrdG9wIGVudmlyb25tZW50IGV4
cG9zZWQgdG8gd2Vic2l0ZXMgYnkgdGhlIERPTQorICAgICAgICAgICBhbmQgQ1NTIHN0eWxlIHNo
ZWV0cy4KKworICAgIFxpbm1vZHVsZSBRdFdlYktpdAorCisgICAgVGhlIHVzZXIncyBkZXNrdG9w
IGVudmlyb25tZW50LCBicm93c2luZyBoaXN0b3J5LCBicm93c2VyIHdpbmRvdywgYW5kIGluc3Rh
bGxlZCBmb250cyBhcmUganVzdAorICAgIHNvbWUgb2YgdGhlIGVsZW1lbnRzIGV4cG9zZWQgdG8g
d2Vic2l0ZXMgdmlhIEphdmFzY3JpcHQgYW5kIENTUyBzdHlsZSBzaGVldHMuIFdlYnNpdGVzIGNh
biwgYW5kCisgICAgZG8sIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBhICdicm93c2Vy
IGZpbmdlcnByaW50JyBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIgc28gdGhhdCB2aXNpdHMKKyAg
ICBieSB0aGUgdXNlciBjYW4gYmUgdHJhY2tlZC4KKworICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMg
Y2xhc3MgaXMgdG8gYWxsb3cgeW91ciBRdFdlYktpdCBjbGllbnQgdG8gc3BlY2lmeSB0aGUgcXVh
bGl0eSBhbmQgZXh0ZW50IG9mCisgICAgdGhlIGluZm9ybWF0aW9uIGV4cG9zZWQgdG8gd2Vic2l0
ZXMsIGJ5IGVpdGhlciBtYWtpbmcgZGVjaXNpb25zIG9uIGJlaGFsZiBvZiB0aGUgdXNlciBvciBh
bGxvd2luZworICAgIHRoZW0gdG8gY29uZmlndXJlIHRoZSBpbmZvcm1hdGlvbiB0aGVtc2VsdmVz
LiBDb250cm9sbGluZyB0aGlzIGluZm9ybWF0aW9uIGFsbG93cyB5b3VyIFF0V2ViS2l0CisgICAg
Y2xpZW50IHRvIHJlZHVjZSB0aGUgcXVhbGl0eSBvZiBmaW5nZXJwcmludCB0aGF0IGNhbiBiZSBv
YnRhaW5lZCBmcm9tIHRoZSBicm93c2VyLgorCisgICAgSW4gYWRkaXRpb24gdG8gdGhlIERPTSBw
cm9wZXJ0aWVzIGV4cG9zZWQgaW4gdGhpcyBjbGFzcyB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gY29u
c2lkZXIgbWFuYWdpbmcKKyAgICB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBTY3JlZW4gYW5k
IE5hdmlnYXRvciBvYmplY3RzLiBTaW5jZSBpdCBpcyBwb3NzaWJsZSB0byBvdmVybG9hZCB0aGVz
ZQorICAgIG9iamVjdCB1c2luZyBRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVj
dCgpIHRoZXkgYXJlIG5vdCBtYWRlIGF2YWlsYWJsZSBpbgorICAgIFFXZWJVc2VyRW52aXJvbm1l
bnQuCisKKyAgICBcc2EgUVdlYkZyYW1lCisqLworCisvKiEKKyAgICBDb25zdHJ1Y3RzIGFuIGVt
cHR5IFFXZWJVc2VyRW52aXJvbm1lbnQgd2l0aCBwYXJlbnQgXGEgcGFyZW50LgorKi8KK1FXZWJV
c2VyRW52aXJvbm1lbnQ6OlFXZWJVc2VyRW52aXJvbm1lbnQoUU9iamVjdCAqcGFyZW50KQorICAg
IDogUU9iamVjdChwYXJlbnQpCit7Cit9CisKKy8qIQorICAgIERlc3Ryb3lzIHRoZSBRV2ViVXNl
ckVudmlyb25tZW50LgorKi8KK1FXZWJVc2VyRW52aXJvbm1lbnQ6On5RV2ViVXNlckVudmlyb25t
ZW50KCkKK3sKK30KKworCisvKiEKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIEph
dmFTY3JpcHQgZXZhbHVhdGVzIHRoZSByZWZlcnJlciBwcm9wZXJ0eSBvZiB0aGUgRE9NJ3MgRG9j
dW1lbnQKKyAgICBvYmplY3QgKGRvY3VtZW50LnJlZmVycmVyKS4gWW91IG1heSByZWltcGxlbWVu
dCB0aGlzIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgdmFsdWUgYmVmb3JlIGl0CisgICAgaXMgcmV0
dXJuZWQuIEZvciBleGFtcGxlLCB5b3UgbWF5IHdpc2ggdG8gcmVtb3ZlIHRoZSBwYXRoIG9mIHRo
ZSByZWZlcnJpbmcgVVJMIGJ1dCByZXRhaW4gdGhlCisgICAgaG9zdCAoaS5lLiBjb252ZXJ0ICdo
dHRwOi8vZXhhbXBsZS5jb20vcGFnZS5odG1sJyB0byAnaHR0cDovL2V4YW1wbGUuY29tJykuIFRo
ZSB2YWx1ZSBpbgorICAgIGRvY3VtZW50LnJlZmVycmVyLCBlc3BlY2lhbGx5IHdoZW4gbmF2aWdh
dGluZyBiZXR3ZWVuIHNpdGVzLCBjYW4gbGVhayBkYXRhIHRoZSB1c2VyIG1heSBjb25zaWRlcgor
ICAgIHByaXZhdGUgdG8gdGhpcmQgcGFydGllcy4gSWYgeW91IHdpc2ggdG8gbWFuYWdlIHRoaXMg
Y29uY2VybiBvbiBiZWhhbGYgb2YgdGhlIHVzZXIgeW91IGNhbgorICAgIHRydW5jYXRlIG9yIG1v
ZGlmeSB0aGUgdmFsdWUgb2YgZG9jdW1lbnQucmVmZXJyZXIgaGVyZSBpbiBhZGRpdGlvbiB0byBt
b2RpZnlpbmcgdGhlIHZhbHVlcyBvZgorICAgIHRoZSBSZWZlcnJlciBhbmQgT3JpZ2luIEhUVFAg
aGVhZGVycyBieSByZWltcGxlbWVudGluZyBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OmNyZWF0ZVJl
cXVlc3QoKS4KKworICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgdGhlIHZh
bHVlIGluIFxhIHJlZmVycmVyLgorKi8KKworUVN0cmluZyBRV2ViVXNlckVudmlyb25tZW50Ojpy
ZWZlcnJlcihjb25zdCBRU3RyaW5nJiByZWZlcnJlcikgY29uc3QKK3sKKyAgICByZXR1cm4gcmVm
ZXJyZXI7Cit9CisKKy8qIQorICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gSmF2YVNj
cmlwdCBldmFsdWF0ZXMgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIERPTSdzIFdpbmRvdworICAg
IG9iamVjdCAod2luZG93Lm5hbWUpLiBZb3UgbWF5IHJlaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24g
dG8gbW9kaWZ5IHRoZSB2YWx1ZSBiZWZvcmUgaXQKKyAgICBpcyByZXR1cm5lZC4gRm9yIGV4YW1w
bGUsIHlvdSBtYXkgd2lzaCB0byByZXR1cm4gYSBibGFuayB2YWx1ZSBpZiB3aW5kb3cubmFtZSBp
cyBiZWluZyBxdWVyaWVkCisgICAgYnkgb25lIHNpdGUgYnV0IHdhcyBzZXQgYnkgYW5vdGhlci4g
VGhlIHZhbHVlIGluIHdpbmRvdy5uYW1lIHBlcnNpc3RzIHdoZW4gbmF2aWdhdGluZworICAgIGJl
dHdlZW4gc2l0ZXMgc28gbWF5IGxlYWsgZGF0YSB0aGUgdXNlciBjb25zaWRlcnMgcHJpdmF0ZSB0
byB0aGlyZCBwYXJ0aWVzLgorCisgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJu
cyB0aGUgdmFsdWUgaW4gXGEgd2luZG93TmFtZS4KKyovCisKK1FTdHJpbmcgUVdlYlVzZXJFbnZp
cm9ubWVudDo6d2luZG93TmFtZShjb25zdCBRU3RyaW5nJiB3aW5kb3dOYW1lKSBjb25zdAorewor
ICAgIHJldHVybiB3aW5kb3dOYW1lOworfQorCisvKiEKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCB3aGVuIEphdmFTY3JpcHQgZXZhbHVhdGVzIHRoZSBsZW5ndGggcHJvcGVydHkgb2YgdGhl
IERPTSdzIEhpc3RvcnkKKyAgICBvYmplY3QgKGhpc3RvcnkubGVuZ3RoKS4gWW91IG1heSByZWlt
cGxlbWVudCB0aGlzIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgdmFsdWUgYmVmb3JlIGl0CisgICAg
aXMgcmV0dXJuZWQuIFRoZSB2YWx1ZSBpbiBoaXN0b3J5Lmxlbmd0aCBwZXJzaXN0cyB3aGVuIG5h
dmlnYXRpbmcKKyAgICBiZXR3ZWVuIHNpdGVzIHNvIG1heSBsZWFrIGRhdGEgdGhlIHVzZXIgY29u
c2lkZXJzIHByaXZhdGUgdG8gdGhpcmQgcGFydGllcy4KKworICAgIFRoZSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uIHJldHVybnMgdGhlIHZhbHVlIGluIFxhIGxlbmd0aC4KKyovCitRU3RyaW5nIFFX
ZWJVc2VyRW52aXJvbm1lbnQ6Omhpc3RvcnlMZW5ndGgoY29uc3QgUVN0cmluZyYgbGVuZ3RoKSBj
b25zdAoreworICAgIHJldHVybiBsZW5ndGg7Cit9CisKKy8qIQorICAgIFRoaXMgcmVwcmVzZW50
cyB0aGUgcmVjdCBvZiB0aGUgV2luZG93LCBpbmNsdWRpbmcgYWxsIGludGVyZmFjZSBlbGVtZW50
cworICAgIGxpa2UgdG9vbGJhcnMvc2Nyb2xsYmFycyBldGMuIEl0IGlzIHVzZWQgYnkgdGhlIHZp
ZXdwb3J0IG1ldGEgdGFnIGFzIHdlbGwgYXMKKyAgICBieSB0aGUgRE9NIFdpbmRvdyBvYmplY3Qg
Zm9yIHdpbmRvdy5vdXRlckhlaWdodCgpLCB3aW5kb3cub3V0ZXJXaWR0aCgpLAorICAgIHdpbmRv
dy5zY3JlZW5YKCksIGFuZCB3aW5kb3cuc2NyZWVuWSgpLgorICAgIAorICAgIFRoaXMgZnVuY3Rp
b24gaXMgYWxzbyBjYWxsZWQgd2hlbiBDU1MgU3R5bGUgU2hlZXRzIGV2YWx1YXRlIHRoZSB3aWR0
aCwgaGVpZ2h0LCBhc3BlY3QtcmF0aW8gYW5kIG9yaWVudGF0aW9uCisgICAgcHJvcGVydGllcyBv
ZiB0aGUgdmlld3BvcnQsIGUuZy4gQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDAwcHgp
IGFuZCAobWF4LXdpZHRoOiA3MDBweCkuCisgICAgWW91IG1heSByZWltcGxlbWVudCB0aGlzIGZ1
bmN0aW9uIHRvIG1vZGlmeSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgcGFnZSBzbworICAgIHRoYXQg
dGhlIG1lZGlhIHF1ZXJ5IGV2YWx1YXRlcyBhIHJlc3VsdCB0aGF0IGRvZXMgbm90IGxlYWsgdW5u
ZWNlc3NhcnkgaW5mb3JtYXRpb24KKyAgICBhYm91dCB0aGUgdXNlcidzIHNjcmVlbiBlbnZpcm9u
bWVudCBhbmQgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIHlvdSd2ZQorICAg
IHNwZWNpZmllZCBmb3IgdGhlIFNjcmVlbiBhbmQgV2luZG93IERPTSBvYmplY3RzLgorKi8KK1FS
ZWN0RiBRV2ViVXNlckVudmlyb25tZW50Ojp3aW5kb3dSZWN0KGNvbnN0IFFSZWN0RiYgd2luZG93
UmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gd2luZG93UmVjdDsKK30KKworUVJlY3RGIFFXZWJV
c2VyRW52aXJvbm1lbnQ6OnBhZ2VSZWN0KGNvbnN0IFFSZWN0RiYgcGFnZVJlY3QpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHBhZ2VSZWN0OworfQorCisvKiEKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCB3aGVuIEphdmFTY3JpcHQgZXZhbHVhdGVzIHdpbmRvdy5pbm5lckhlaWdodC4KKyAgICBZ
b3UgbWF5IHJlaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSB2YWx1ZSBiZWZv
cmUgaXQgaXMgcmV0dXJuZWQuCisKKyAgICBTaXRlcyBtYXkgY29tcGFyZSB0aGlzIHZhbHVlIHdp
dGggb3V0ZXJIZWlnaHQoKSB0byBtZWFzdXJlIHRoZSBicm93c2VyJ3MKKyAgICB0b29sYmFyLgor
Ki8KK2ludCBRV2ViVXNlckVudmlyb25tZW50Ojppbm5lckhlaWdodChpbnQgaGVpZ2h0LCBpbnQg
em9vbUZhY3RvcikgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQg
LyB6b29tRmFjdG9yKTsKK30KKworLyohCisgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hl
biBKYXZhU2NyaXB0IGV2YWx1YXRlcyB3aW5kb3cuaW5uZXJXaWR0aC4KKyAgICBZb3UgbWF5IHJl
aW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSB2YWx1ZSBiZWZvcmUgaXQgaXMg
cmV0dXJuZWQuCisKKyAgICBTaXRlcyBtYXkgY29tcGFyZSB0aGlzIHZhbHVlIHdpdGggb3V0ZXJX
aWR0aCgpIHRvIG1lYXN1cmUgdGhlIHdpZHRoIG9mIHRoZSBicm93c2VyJ3MKKyAgICBzY3JvbGxi
YXIuCisqLworaW50IFFXZWJVc2VyRW52aXJvbm1lbnQ6OmlubmVyV2lkdGgoaW50IHdpZHRoLCBp
bnQgem9vbUZhY3RvcikgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih3aWR0
aCAvIHpvb21GYWN0b3IpOworfQorCisvKiEKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3
aGVuIEphdmFTY3JpcHQgZXZhbHVhdGVzIHdpbmRvdy5zY3JvbGxYLgorICAgIFlvdSBtYXkgcmVp
bXBsZW1lbnQgdGhpcyBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHZhbHVlIGJlZm9yZSBpdCBpcyBy
ZXR1cm5lZC4KKyovCitpbnQgUVdlYlVzZXJFbnZpcm9ubWVudDo6c2Nyb2xsWChpbnQgc2Nyb2xs
WCwgaW50IHpvb21GYWN0b3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
c2Nyb2xsWCAvIHpvb21GYWN0b3IpOworfQorCisvKiEKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCB3aGVuIEphdmFTY3JpcHQgZXZhbHVhdGVzIHdpbmRvdy5zY3JvbGxZLgorICAgIFlvdSBt
YXkgcmVpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHZhbHVlIGJlZm9yZSBp
dCBpcyByZXR1cm5lZC4KKyovCitpbnQgUVdlYlVzZXJFbnZpcm9ubWVudDo6c2Nyb2xsWShpbnQg
c2Nyb2xsWSwgaW50IHpvb21GYWN0b3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludD4oc2Nyb2xsWSAvIHpvb21GYWN0b3IpOworfQorCisvKiEKKyAgICBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCB3aGVuIENTUyBTdHlsZSBTaGVldHMgZXZhbHVhdGUgdGhlIHdpZHRoLCBoZWln
aHQsIGFzcGVjdC1yYXRpbyBhbmQgb3JpZW50YXRpb24KKyAgICBwcm9wZXJ0aWVzIG9mIHRoZSBk
ZXZpY2UsIGUuZy4gQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6IDQwMHB4KQor
ICAgIGFuZCAobWF4LWRldmljZS13aWR0aDogNzAwcHgpLgorICAgIFlvdSBtYXkgcmVpbXBsZW1l
bnQgdGhpcyBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHZhbHVlIGJlZm9yZSBpdCBpcyByZXR1cm5l
ZC4KKyovCitRUmVjdEYgUVdlYlVzZXJFbnZpcm9ubWVudDo6c2NyZWVuUmVjdChjb25zdCBRUmVj
dEYmIHNjcmVlblJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcmVlblJlY3Q7Cit9CisKKy8q
IQorICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gQ1NTIFN0eWxlIFNoZWV0cyBldmFs
dWF0ZSB0aGUgY29sb3IKKyAgICBwcm9wZXJ0eSBvZiB0aGUgZGV2aWNlLCBlLmcuIEBtZWRpYSBz
Y3JlZW4gYW5kIChtaW4tY29sb3I6IDEpCisgICAgYW5kIChtYXgtY29sb3I6IDIpLgorICAgIFlv
dSBtYXkgcmVpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHZhbHVlIGJlZm9y
ZSBpdCBpcyByZXR1cm5lZC4KKyovCitpbnQgUVdlYlVzZXJFbnZpcm9ubWVudDo6c2NyZWVuRGVw
dGhQZXJDb21wb25lbnQoaW50IGJpdHNQZXJDb21wb25lbnQpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGJpdHNQZXJDb21wb25lbnQ7Cit9CisKKy8qIQorICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
IHdoZW4gQ1NTIFN0eWxlIFNoZWV0cyBldmFsdWF0ZSB0aGUgbW9ub2Nocm9tZQorICAgIHByb3Bl
cnR5IG9mIHRoZSBkZXZpY2UsIGUuZy4gQG1lZGlhIGFsbCBhbmQgKG1vbm9jaHJvbWUpIHsg4oCm
IH0uCisgICAgWW91IG1heSByZWltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUg
dmFsdWUgYmVmb3JlIGl0IGlzIHJldHVybmVkLgorKi8KK2Jvb2wgUVdlYlVzZXJFbnZpcm9ubWVu
dDo6c2NyZWVuSXNNb25vY2hyb21lKGJvb2wgaXNNb25vY2hyb21lKSBjb25zdAoreworICAgIHJl
dHVybiBpc01vbm9jaHJvbWU7Cit9CisKKyNpbmNsdWRlICJtb2NfcXdlYnVzZXJlbnZpcm9ubWVu
dC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VidXNlcmVudmlyb25t
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VidXNlcmVudmlyb25tZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODEyOTQ4OWZkNWE1ODhjZjY4MWJhZDAyM2Y3YWQ3NDE5YWFlNjI2NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ1c2VyZW52aXJvbm1lbnQuaApAQCAt
MCwwICsxLDU4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDcgU3Rh
aWtvcyBDb21wdXRpbmcgU2VydmljZXMgSW5jLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUVdFQlVTRVJFTlZJUk9O
TUVOVF9ICisjZGVmaW5lIFFXRUJVU0VSRU5WSVJPTk1FTlRfSAorCisjaW5jbHVkZSAicXdlYnNl
dHRpbmdzLmgiCisKKyNpbmNsdWRlIDxRdENvcmUvcW9iamVjdC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0OworY2xhc3MgQ2hyb21lQ2xpZW50UXQ7
Cit9CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJVc2VyRW52aXJvbm1lbnQgOiBwdWJsaWMg
UU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIGV4cGxpY2l0IFFXZWJVc2Vy
RW52aXJvbm1lbnQoUU9iamVjdCAqcGFyZW50ID0gMCk7CisgICAgflFXZWJVc2VyRW52aXJvbm1l
bnQoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgUVN0cmluZyByZWZlcnJlcihjb25zdCBR
U3RyaW5nJiByZWZlcnJlcikgY29uc3Q7CisgICAgdmlydHVhbCBRU3RyaW5nIHdpbmRvd05hbWUo
Y29uc3QgUVN0cmluZyYgd2luZG93TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBRU3RyaW5nIGhp
c3RvcnlMZW5ndGgoY29uc3QgUVN0cmluZyYgd2luZG93TmFtZSkgY29uc3Q7CisgICAgdmlydHVh
bCBRUmVjdEYgd2luZG93UmVjdChjb25zdCBRUmVjdEYmIHdpbmRvd1JlY3QpIGNvbnN0OworICAg
IHZpcnR1YWwgUVJlY3RGIHBhZ2VSZWN0KGNvbnN0IFFSZWN0RiYgcGFnZVJlY3QpIGNvbnN0Owor
ICAgIHZpcnR1YWwgaW50IGlubmVySGVpZ2h0KGludCBoZWlnaHQsIGludCB6b29tRmFjdG9yKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGludCBpbm5lcldpZHRoKGludCB3aWR0aCwgaW50IHpvb21GYWN0
b3IpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNjcm9sbFgoaW50IHNjcm9sbFgsIGludCB6b29t
RmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxZKGludCBzY3JvbGxZLCBpbnQg
em9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBRUmVjdEYgc2NyZWVuUmVjdChjb25zdCBR
UmVjdEYmIHNjcmVlblJlY3QpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNjcmVlbkRlcHRoUGVy
Q29tcG9uZW50KGludCBiaXRzUGVyQ29tcG9uZW50KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
c2NyZWVuSXNNb25vY2hyb21lKGJvb2wgaXNNb25vY2hyb21lKSBjb25zdDsKKworICAgIGZyaWVu
ZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OworICAgIGZyaWVuZCBjbGFzcyBX
ZWJDb3JlOjpDaHJvbWVDbGllbnRRdDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBl
OGEyM2RmNmVjN2NkMTVkMTNhOTc1NWJhZjQ3NjQ1M2JhZTYyODBjLi5kN2YxYzQyZTE0OTE3YzZi
NzQ0YTk3NWQ0M2MwZGJkNjk2YTM4NjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBA
CisyMDExLTAzLTE4ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQVBJIC0gUVdlYlVz
ZXJFbnZpcm9ubWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTY2NzgKKworICAgICAgICAqIEFwaS9oZWFkZXJzLnByaToKKyAgICAgICAgKiBBcGkv
cXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUp
OgorICAgICAgICAoUVdlYlBhZ2U6OnNldFdlYlVzZXJFbnZpcm9ubWVudCk6CisgICAgICAgIChR
V2ViUGFnZTo6d2ViVXNlckVudmlyb25tZW50KToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuaDoK
KyAgICAgICAgKiBBcGkvcXdlYnBhZ2VfcC5oOgorICAgICAgICAqIEFwaS9xd2VidXNlcmVudmly
b25tZW50LmNwcDogQWRkZWQuCisgICAgICAgIChRV2ViVXNlckVudmlyb25tZW50OjpRV2ViVXNl
ckVudmlyb25tZW50KToKKyAgICAgICAgKFFXZWJVc2VyRW52aXJvbm1lbnQ6On5RV2ViVXNlckVu
dmlyb25tZW50KToKKyAgICAgICAgKFFXZWJVc2VyRW52aXJvbm1lbnQ6OnJlZmVycmVyKToKKyAg
ICAgICAgKFFXZWJVc2VyRW52aXJvbm1lbnQ6OndpbmRvd05hbWUpOgorICAgICAgICAoUVdlYlVz
ZXJFbnZpcm9ubWVudDo6aGlzdG9yeUxlbmd0aCk6CisgICAgICAgIChRV2ViVXNlckVudmlyb25t
ZW50Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKFFXZWJVc2VyRW52aXJvbm1lbnQ6OnBhZ2VSZWN0
KToKKyAgICAgICAgKFFXZWJVc2VyRW52aXJvbm1lbnQ6OmlubmVySGVpZ2h0KToKKyAgICAgICAg
KFFXZWJVc2VyRW52aXJvbm1lbnQ6OmlubmVyV2lkdGgpOgorICAgICAgICAoUVdlYlVzZXJFbnZp
cm9ubWVudDo6c2Nyb2xsWCk6CisgICAgICAgIChRV2ViVXNlckVudmlyb25tZW50OjpzY3JvbGxZ
KToKKyAgICAgICAgKFFXZWJVc2VyRW52aXJvbm1lbnQ6OnNjcmVlblJlY3QpOgorICAgICAgICAo
UVdlYlVzZXJFbnZpcm9ubWVudDo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQpOgorICAgICAgICAo
UVdlYlVzZXJFbnZpcm9ubWVudDo6c2NyZWVuSXNNb25vY2hyb21lKToKKyAgICAgICAgKiBBcGkv
cXdlYnVzZXJlbnZpcm9ubWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBRdFdlYktpdC5wcm86Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21lQ2xpZW50UXQ6OndpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21lQ2xpZW50UXQ6OnBhZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0
OjpzY3JlZW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpzY3JlZW5E
ZXB0aFBlckNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6c2Ny
ZWVuSXNNb25vY2hyb21lKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRR
dC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6cmVmZXJyZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6d2luZG93TmFtZSk6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oOgorCiAyMDExLTAzLTE3ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0g
V2VpbmlnLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8gYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwppbmRleCA0YjdiYjA1YTIwOWZmOTEyOWIzOTg2NTQy
NTUwNWM1NTU5MDQ2ZDBjLi4zYTEyMDI2Nzk4NjY2MzllYjRhM2NjNDFiZTJmM2M2ZWJmY2UxNjVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybworKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1F0V2ViS2l0LnBybwpAQCAtMTUzLDYgKzE1Myw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgICQkUFdEL0FwaS9xd2ViZGF0YWJhc2UuY3BwIFwKICAgICAkJFBXRC9BcGkvcXdlYmluc3Bl
Y3Rvci5jcHAgXAogICAgICQkUFdEL0FwaS9xd2Via2l0dmVyc2lvbi5jcHAgXAorICAgICQkUFdE
L0FwaS9xd2VidXNlcmVudmlyb25tZW50LmNwcCBcCiAgICAgXAogICAgICQkUFdEL1dlYkNvcmVT
dXBwb3J0L1F0RmFsbGJhY2tXZWJQb3B1cC5jcHAgXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFF0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCmluZGV4IGFjZmE2NjQ0ZmEwYzMyNjA2NDQwZWJiY2Fj
Y2VkZDIyOGI0NDE5ZjUuLjJmMWMyMDBhZjliOTI4MWI0OTNjNzA4MzNmZjgzMzdhMzg5Y2FhYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
UXQuY3BwCkBAIC0xMjQsNiArMTI0LDkgQEAgRmxvYXRSZWN0IENocm9tZUNsaWVudFF0Ojp3aW5k
b3dSZWN0KCkKIHsKICAgICBpZiAoIXBsYXRmb3JtUGFnZUNsaWVudCgpKQogICAgICAgICByZXR1
cm4gRmxvYXRSZWN0KCk7CisgICAgaWYgKG1fd2ViUGFnZSAmJiBtX3dlYlBhZ2UtPndlYlVzZXJF
bnZpcm9ubWVudCgpKQorICAgICAgICByZXR1cm4gbV93ZWJQYWdlLT53ZWJVc2VyRW52aXJvbm1l
bnQoKS0+d2luZG93UmVjdChwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+d2luZG93UmVjdCgpKTsKKwog
ICAgIHJldHVybiBwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+d2luZG93UmVjdCgpOwogfQogCkBAIC0x
MzEsOSArMTM0LDM3IEBAIEZsb2F0UmVjdCBDaHJvbWVDbGllbnRRdDo6cGFnZVJlY3QoKQogewog
ICAgIGlmICghbV93ZWJQYWdlKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBp
ZiAobV93ZWJQYWdlLT53ZWJVc2VyRW52aXJvbm1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2Vi
UGFnZS0+d2ViVXNlckVudmlyb25tZW50KCktPnBhZ2VSZWN0KFFSZWN0RihRUG9pbnRGKDAsIDAp
LCBtX3dlYlBhZ2UtPnZpZXdwb3J0U2l6ZSgpKSk7CisKICAgICByZXR1cm4gRmxvYXRSZWN0KFFS
ZWN0RihRUG9pbnRGKDAsIDApLCBtX3dlYlBhZ2UtPnZpZXdwb3J0U2l6ZSgpKSk7CiB9CiAKK0Zs
b2F0UmVjdCBDaHJvbWVDbGllbnRRdDo6c2NyZWVuUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit7CisgICAgaWYgKG1fd2ViUGFnZSAmJiBtX3dlYlBhZ2UtPndlYlVzZXJFbnZpcm9ubWVudCgp
KQorICAgICAgICByZXR1cm4gbV93ZWJQYWdlLT53ZWJVc2VyRW52aXJvbm1lbnQoKS0+c2NyZWVu
UmVjdChRUmVjdEYocmVjdCkpOworCisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK2ludCBDaHJvbWVD
bGllbnRRdDo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQoaW50IGJpdHNQZXJDb21wb25lbnQpCit7
CisgICAgaWYgKG1fd2ViUGFnZSAmJiBtX3dlYlBhZ2UtPndlYlVzZXJFbnZpcm9ubWVudCgpKQor
ICAgICAgICByZXR1cm4gbV93ZWJQYWdlLT53ZWJVc2VyRW52aXJvbm1lbnQoKS0+c2NyZWVuRGVw
dGhQZXJDb21wb25lbnQoYml0c1BlckNvbXBvbmVudCk7CisKKyAgICByZXR1cm4gYml0c1BlckNv
bXBvbmVudDsKK30KKworYm9vbCBDaHJvbWVDbGllbnRRdDo6c2NyZWVuSXNNb25vY2hyb21lKGJv
b2wgaXNNb25vY2hyb21lKQoreworICAgIGlmIChtX3dlYlBhZ2UgJiYgbV93ZWJQYWdlLT53ZWJV
c2VyRW52aXJvbm1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViUGFnZS0+d2ViVXNlckVudmly
b25tZW50KCktPnNjcmVlbklzTW9ub2Nocm9tZShpc01vbm9jaHJvbWUpOworCisgICAgcmV0dXJu
IGlzTW9ub2Nocm9tZTsKK30KKwogZmxvYXQgQ2hyb21lQ2xpZW50UXQ6OnNjYWxlRmFjdG9yKCkK
IHsKICAgICBpZiAoIW1fd2ViUGFnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAppbmRleCBhMTJjMmVjZTc1ZTM0MzJhMmYyNmMxMzk2MDIz
YjMyNTQ2N2QyMjBjLi43YTExYzUyYzZhZGEyZWJjMmVmOGY5MDE0Yjg0ZGMwN2E5MzBkZjQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0
LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5o
CkBAIC02NSw3ICs2NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKIAogICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBwYWdl
UmVjdCgpOwotCisgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNjcmVlblJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KGlu
dCBiaXRzUGVyQ29tcG9uZW50KTsKKyAgICAgICAgdmlydHVhbCBib29sIHNjcmVlbklzTW9ub2No
cm9tZShib29sIGlzTW9ub2Nocm9tZSk7CisgCiAgICAgICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVG
YWN0b3IoKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZm9jdXMoKTsKQEAgLTE5Niw2ICsxOTks
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
Vmlld3BvcnREYXRhRGlkQ2hhbmdlKGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJikgY29uc3Q7CiAK
KyAgICAgICAgaW50IHNjcmVlbkRlcHRoKGludCk7CisgICAgICAgIAogICAgICAgICBRV2ViUGFn
ZSogbV93ZWJQYWdlOwogICAgICAgICBXZWJDb3JlOjpLVVJMIGxhc3RIb3ZlclVSTDsKICAgICAg
ICAgV1RGOjpTdHJpbmcgbGFzdEhvdmVyVGl0bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAppbmRleCAyN2VkN2Vk
NGFkMDMyYjk2ZTc3ZDZmN2M1Zjk4ZjAyODNlNTNkNDljLi4xYjZlMmIzZDgzYWY3MDYxYTA3Yzky
MGZhOWFkYjBjNzJlMTE3N2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKQEAgLTczMiw2ICs3MzIsMjIgQEAg
U3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwpCiAg
ICAgcmV0dXJuIFN0cmluZygpOwogfQogCitTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRRdDo6cmVm
ZXJyZXIoY29uc3QgU3RyaW5nJiByZWZlcnJlcikKK3sKKyAgICBpZiAobV93ZWJGcmFtZSAmJiBt
X3dlYkZyYW1lLT5wYWdlKCktPndlYlVzZXJFbnZpcm9ubWVudCgpKQorICAgICAgICByZXR1cm4g
bV93ZWJGcmFtZS0+cGFnZSgpLT53ZWJVc2VyRW52aXJvbm1lbnQoKS0+cmVmZXJyZXIocmVmZXJy
ZXIpOworCisgICAgcmV0dXJuIHJlZmVycmVyOworfQorCitTdHJpbmcgRnJhbWVMb2FkZXJDbGll
bnRRdDo6d2luZG93TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG1fd2ViRnJh
bWUgJiYgbV93ZWJGcmFtZS0+cGFnZSgpLT53ZWJVc2VyRW52aXJvbm1lbnQoKSkKKyAgICAgICAg
cmV0dXJuIG1fd2ViRnJhbWUtPnBhZ2UoKS0+d2ViVXNlckVudmlyb25tZW50KCktPndpbmRvd05h
bWUobmFtZSk7CisKKyAgICByZXR1cm4gbmFtZTsKK30KKwogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFF0OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkKIHsKICAgICBpZiAobV93ZWJGcmFtZSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuaAppbmRleCAwMzMzNTk5YzM3ZGRiOGYzNTk4NmJhMTI3Zjc5ODU3OWM3NWVkZmFkLi4x
OGYzYzhkOGY1NWM2MTFlOTI0YzIwZTIzZjVmN2Y3ZmFjMDE1OTc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaApAQCAt
MTg5LDYgKzE4OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29uc3Qg
U3RyaW5nJiB0aXRsZSwgY29uc3QgS1VSTCYpOwogCiAgICAgdmlydHVhbCBTdHJpbmcgdXNlckFn
ZW50KGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyByZWZlcnJlcihj
b25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyB3aW5kb3dOYW1lKGNvbnN0IFN0cmlu
ZyYpOwogCiAgICAgdmlydHVhbCB2b2lkIHNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1lKFdl
YkNvcmU6OkNhY2hlZEZyYW1lKik7CiAgICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1p
dHRlZEZyb21DYWNoZWRGcmFtZShXZWJDb3JlOjpDYWNoZWRGcmFtZSopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86210</attachid>
            <date>2011-03-18 14:16:26 -0700</date>
            <delta_ts>2011-03-18 15:01:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56678-20110318211621.patch</filename>
            <type>text/plain</type>
            <size>23955</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE0OTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5YTg0NzY5M2EwMjZmMzcw
MGJjZTQyYjU2YzIzYTY3ZTYxOTY0NTMzLi4zN2EwZjQzOTY0MjIwNzZjZmE4MzEwY2RlYzU1N2Uy
ZmViOTNjZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDMtMTggIFJvYmVy
dCBIb2dhbiAgPHJvYmVydEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBBUEkgLSBRV2ViVXNlckVudmlyb25tZW50CisKKyAg
ICAgICAgVGhlIFFXZWJVc2VyRW52aXJvbm1lbnQgY2xhc3MgcHJvdmlkZXMgYW4gb2JqZWN0IHRv
IGNvbnRyb2wgdGhlIHF1YWxpdHkgb2YgaW5mb3JtYXRpb24KKyAgICAgICAgYWJvdXQgdGhlIHVz
ZXIsIGJyb3dzaW5nIGhpc3RvcnksIGFuZCBkZXNrdG9wIGVudmlyb25tZW50IGV4cG9zZWQgdG8g
d2Vic2l0ZXMgYnkgdGhlIERPTQorICAgICAgICBhbmQgQ1NTIHN0eWxlIHNoZWV0cy4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY2NzgKKworCisg
ICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNs
aWVudDo6c2NyZWVuUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OnNjcmVl
bkF2YWlsYWJsZVJlY3QpOgorCiAyMDExLTAzLTE2ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IDhlOWMyM2U5YzllMWQzYjhmYmIxZDhhODMwNjhjMmRm
M2YyNmNlM2QuLmU0YTgyZTNjNTkyZThkMzgzZTNlNzYxYjliNzk4N2JhMDQ5ODVkMTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtODIsOCArODIsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHBhZ2VSZWN0KCkgPSAwOwogICAgICAg
ICB2aXJ0dWFsIGludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChpbnQgYml0c1BlckNvbXBvbmVu
dCkgeyByZXR1cm4gYml0c1BlckNvbXBvbmVudDsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgc2Ny
ZWVuSXNNb25vY2hyb21lKGJvb2wgaXNNb25vY2hyb21lKSB7IHJldHVybiBpc01vbm9jaHJvbWU7
IH0KLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgc2NyZWVuUmVjdChGbG9hdFJlY3QgcmVjdCkg
eyByZXR1cm4gcmVjdDsgfQotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzY3JlZW5BdmFpbGFi
bGVSZWN0KEZsb2F0UmVjdCByZWN0KSB7IHJldHVybiByZWN0OyB9CisgICAgICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHNjcmVlblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IHJldHVybiByZWN0
OyB9CisgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KSB7IHJldHVybiByZWN0OyB9CiAgICAgICAgIAogICAgICAgICB2aXJ0
dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCkgPSAwOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9BcGkvaGVhZGVycy5wcmkgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9oZWFkZXJzLnBy
aQppbmRleCAyOWJiMTI1YjJhMjdmM2FiYzNjM2QxZDI5ZTZlNWRmYmQyOTlkZTNhLi43Njc4ZTE0
MjE1YzE0NTAxMDE3N2M5OWNkZmYzYzBiMjI2YTc0YjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9oZWFkZXJzLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9oZWFkZXJz
LnByaQpAQCAtMTIsNCArMTIsNSBAQCBXRUJLSVRfQVBJX0hFQURFUlMgPSAkJFBXRC9xd2ViZnJh
bWUuaCBcCiAgICAgICAgICAgICAgICAgICAgICAkJFBXRC9xd2VicGx1Z2luZmFjdG9yeS5oIFwK
ICAgICAgICAgICAgICAgICAgICAgICQkUFdEL3F3ZWJoaXN0b3J5LmggXAogICAgICAgICAgICAg
ICAgICAgICAgJCRQV0QvcXdlYmluc3BlY3Rvci5oIFwKLSAgICAgICAgICAgICAgICAgICAgICQk
UFdEL3F3ZWJraXR2ZXJzaW9uLmgKKyAgICAgICAgICAgICAgICAgICAgICQkUFdEL3F3ZWJraXR2
ZXJzaW9uLmggXAorICAgICAgICAgICAgICAgICAgICAgJCRQV0QvcXdlYnVzZXJlbnZpcm9ubWVu
dC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKaW5kZXggZTFiN2I5ZWU0NTQ4NWVmMmFlNGZl
MjFjOWIxNTM0N2Q0N2Y1OGFlZS4uODRkYjI1ODBkY2JhMDdlYWI2ZWUwZDUxMDExNDgwMDE5N2Q3
MDBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApAQCAtMzEwLDYgKzMxMCw3IEBAIFFX
ZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKFFXZWJQYWdlICpxcSkKICAgICAsIGluc3Bl
Y3RvckZyb250ZW5kKDApCiAgICAgLCBpbnNwZWN0b3IoMCkKICAgICAsIGluc3BlY3RvcklzSW50
ZXJuYWxPbmx5KGZhbHNlKQorICAgICwgdXNlckVudmlyb25tZW50KDApCiB7CiAgICAgV2ViQ29y
ZTo6SW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVsc0lmTmVjZXNzYXJ5KCk7CiAgICAgU2NyaXB0Q29u
dHJvbGxlcjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwpAQCAtMzY2OCw2ICszNjY5LDM1IEBAIFFO
ZXR3b3JrQWNjZXNzTWFuYWdlciAqUVdlYlBhZ2U6Om5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29u
c3QKIH0KIAogLyohCisgICAgU2V0cyB0aGUgUVdlYlVzZXJFbnZpcm9ubWVudCBcYSBtYW5hZ2Vy
IHJlc3BvbnNpYmxlIGZvciBzZXJ2aW5nIG5ldHdvcmsgcmVxdWVzdHMgZm9yIHRoaXMKKyAgICBR
V2ViUGFnZS4KKworICAgIFxub3RlIEl0IGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHRvIGNo
YW5nZSB0aGUgbmV0d29yayBhY2Nlc3MgbWFuYWdlciBhZnRlciB0aGUKKyAgICBRV2ViUGFnZSBo
YXMgdXNlZCBpdC4gVGhlIHJlc3VsdHMgb2YgZG9pbmcgdGhpcyBhcmUgdW5kZWZpbmVkLgorCisg
ICAgXHNhIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkKKyovCit2b2lkIFFXZWJQYWdlOjpzZXRXZWJV
c2VyRW52aXJvbm1lbnQoUVdlYlVzZXJFbnZpcm9ubWVudCAqbWFuYWdlcikKK3sKKyAgICBpZiAo
bWFuYWdlciA9PSBkLT51c2VyRW52aXJvbm1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
ZC0+dXNlckVudmlyb25tZW50ICYmIGQtPnVzZXJFbnZpcm9ubWVudC0+cGFyZW50KCkgPT0gdGhp
cykKKyAgICAgICAgZGVsZXRlIGQtPnVzZXJFbnZpcm9ubWVudDsKKyAgICBkLT51c2VyRW52aXJv
bm1lbnQgPSBtYW5hZ2VyOworfQorCisvKiEKKyAgICBSZXR1cm5zIHRoZSBRV2ViVXNlckVudmly
b25tZW50IHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHNlcnZpbmcgbmV0d29yaworICAgIHJlcXVl
c3RzIGZvciB0aGlzIFFXZWJQYWdlLgorCisgICAgXHNhIHNldFdlYlVzZXJFbnZpcm9ubWVudCgp
CisqLworUVdlYlVzZXJFbnZpcm9ubWVudCogUVdlYlBhZ2U6OndlYlVzZXJFbnZpcm9ubWVudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPnVzZXJFbnZpcm9ubWVudDsKK30KKworLyohCiAgICAg
U2V0cyB0aGUgUVdlYlBsdWdpbkZhY3RvcnkgXGEgZmFjdG9yeSByZXNwb25zaWJsZSBmb3IgY3Jl
YXRpbmcgcGx1Z2lucyBlbWJlZGRlZCBpbnRvIHRoaXMKICAgICBRV2ViUGFnZS4KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmgKaW5kZXggZTEyYjQ2MDE1YTYzOWQ4YTFmNjc3N2MzYTFiOTM3NDAwMDY4
MzY1OS4uZmNmNzljZTFhOTUyY2Q1MWFhZGI2ZjJjYTgyMWYzMThkZGQzYjFjNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5oCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIFFXZWJFbGVtZW50OwogY2xh
c3MgUVdlYkZyYW1lOwogY2xhc3MgUVdlYk5ldHdvcmtSZXF1ZXN0OwogY2xhc3MgUVdlYkhpc3Rv
cnk7CitjbGFzcyBRV2ViVXNlckVudmlyb25tZW50OwogCiBjbGFzcyBRV2ViRnJhbWVEYXRhOwog
Y2xhc3MgUVdlYkhpc3RvcnlJdGVtOwpAQCAtMjY1LDYgKzI2Niw5IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqbWFuYWdl
cik7CiAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICpuZXR3b3JrQWNjZXNzTWFuYWdlcigpIGNv
bnN0OwogCisgICAgdm9pZCBzZXRXZWJVc2VyRW52aXJvbm1lbnQoUVdlYlVzZXJFbnZpcm9ubWVu
dCAqbWFuYWdlcik7CisgICAgUVdlYlVzZXJFbnZpcm9ubWVudCAqd2ViVXNlckVudmlyb25tZW50
KCkgY29uc3Q7CisKICAgICB2b2lkIHNldFBsdWdpbkZhY3RvcnkoUVdlYlBsdWdpbkZhY3Rvcnkg
KmZhY3RvcnkpOwogICAgIFFXZWJQbHVnaW5GYWN0b3J5ICpwbHVnaW5GYWN0b3J5KCkgY29uc3Q7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaCBiL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAppbmRleCA4NmY1NGI3MWQ3MjkxNmY4ZDU1ZmRh
NjhhNDdjNzkzZWZkMzhiNzhhLi5iM2ZiMDgyNGI2ZjFkMDA4MDQyNTdkM2Q4MzY5YTA1YWYyN2Yy
ZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKKysrIGIv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAicXdlYnBhZ2UuaCIKICNpbmNsdWRlICJxd2ViaGlzdG9yeS5oIgogI2luY2x1ZGUgInF3
ZWJmcmFtZS5oIgorI2luY2x1ZGUgInF3ZWJ1c2VyZW52aXJvbm1lbnQuaCIKIAogI2luY2x1ZGUg
IkludFBvaW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjEwLDYgKzIxMSw3IEBAIHB1Ymxp
YzoKICAgICBRV2ViSW5zcGVjdG9yKiBpbnNwZWN0b3I7CiAgICAgYm9vbCBpbnNwZWN0b3JJc0lu
dGVybmFsT25seTsgLy8gVHJ1ZSBpZiBjcmVhdGVkIHRocm91Z2ggdGhlIEluc3BlY3QgY29udGV4
dCBtZW51IGFjdGlvbgogICAgIFF0OjpEcm9wQWN0aW9uIG1fbGFzdERyb3BBY3Rpb247CisgICAg
UVdlYlVzZXJFbnZpcm9ubWVudCAqdXNlckVudmlyb25tZW50OwogCiAgICAgc3RhdGljIGJvb2wg
ZHJ0UnVuOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ1c2VyZW52
aXJvbm1lbnQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnVzZXJlbnZpcm9ubWVudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzA0YTAwZjYzYzQ1NThjNDhkZGFjMWJkODI1N2IyYzc1NjJhOTdhNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ1c2VyZW52aXJvbm1l
bnQuY3BwCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDcgU3RhaWtvcyBDb21wdXRpbmcgU2VydmljZXMgSW5jLgorICAgIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAicXdlYnVzZXJlbnZpcm9ubWVudC5oIgorCisvKiEKKyAgICBcY2xhc3MgUVdlYlVzZXJF
bnZpcm9ubWVudAorICAgIFxzaW5jZSA0LjgKKyAgICBcYnJpZWYgVGhlIFFXZWJVc2VyRW52aXJv
bm1lbnQgY2xhc3MgcHJvdmlkZXMgYW4gb2JqZWN0IHRvIGNvbnRyb2wgdGhlIHF1YWxpdHkgb2Yg
aW5mb3JtYXRpb24KKyAgICAgICAgICAgYWJvdXQgdGhlIHVzZXIsIGJyb3dzaW5nIGhpc3Rvcnks
IGFuZCBkZXNrdG9wIGVudmlyb25tZW50IGV4cG9zZWQgdG8gd2Vic2l0ZXMgYnkgdGhlIERPTQor
ICAgICAgICAgICBhbmQgQ1NTIHN0eWxlIHNoZWV0cy4KKworICAgIFxpbm1vZHVsZSBRdFdlYktp
dAorCisgICAgVGhlIHVzZXIncyBkZXNrdG9wIGVudmlyb25tZW50LCBicm93c2luZyBoaXN0b3J5
LCBicm93c2VyIHdpbmRvdywgYW5kIGluc3RhbGxlZCBmb250cyBhcmUganVzdAorICAgIHNvbWUg
b2YgdGhlIGVsZW1lbnRzIGV4cG9zZWQgdG8gd2Vic2l0ZXMgdmlhIEphdmFzY3JpcHQgYW5kIENT
UyBzdHlsZSBzaGVldHMuIFdlYnNpdGVzIGNhbiwgYW5kCisgICAgZG8sIHVzZSB0aGlzIGluZm9y
bWF0aW9uIHRvIGNyZWF0ZSBhICdicm93c2VyIGZpbmdlcnByaW50JyBhc3NvY2lhdGVkIHdpdGgg
dGhlIHVzZXIgc28gdGhhdCB2aXNpdHMKKyAgICBieSB0aGUgdXNlciBjYW4gYmUgdHJhY2tlZC4K
KworICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8gYWxsb3cgeW91ciBRdFdlYktp
dCBjbGllbnQgdG8gc3BlY2lmeSB0aGUgcXVhbGl0eSBhbmQgZXh0ZW50IG9mCisgICAgdGhlIGlu
Zm9ybWF0aW9uIGV4cG9zZWQgdG8gd2Vic2l0ZXMsIGJ5IGVpdGhlciBtYWtpbmcgZGVjaXNpb25z
IG9uIGJlaGFsZiBvZiB0aGUgdXNlciBvciBhbGxvd2luZworICAgIHRoZW0gdG8gY29uZmlndXJl
IHRoZSBpbmZvcm1hdGlvbiB0aGVtc2VsdmVzLiBDb250cm9sbGluZyB0aGlzIGluZm9ybWF0aW9u
IGFsbG93cyB5b3VyIFF0V2ViS2l0CisgICAgY2xpZW50IHRvIHJlZHVjZSB0aGUgcXVhbGl0eSBv
ZiBmaW5nZXJwcmludCB0aGF0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBicm93c2VyLgorCisg
ICAgSW4gYWRkaXRpb24gdG8gdGhlIERPTSBwcm9wZXJ0aWVzIGV4cG9zZWQgaW4gdGhpcyBjbGFz
cyB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgbWFuYWdpbmcKKyAgICB0aGUgdmFsdWVz
IHJldHVybmVkIGJ5IHRoZSBTY3JlZW4gYW5kIE5hdmlnYXRvciBvYmplY3RzLiBTaW5jZSBpdCBp
cyBwb3NzaWJsZSB0byBvdmVybG9hZCB0aGVzZQorICAgIG9iamVjdCB1c2luZyBRV2ViRnJhbWU6
OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgpIHRoZXkgYXJlIG5vdCBtYWRlIGF2YWlsYWJs
ZSBpbgorICAgIFFXZWJVc2VyRW52aXJvbm1lbnQuCisKKyAgICBcc2EgUVdlYkZyYW1lCisqLwor
CisvKiEKKyAgICBDb25zdHJ1Y3RzIGFuIGVtcHR5IFFXZWJVc2VyRW52aXJvbm1lbnQgd2l0aCBw
YXJlbnQgXGEgcGFyZW50LgorKi8KK1FXZWJVc2VyRW52aXJvbm1lbnQ6OlFXZWJVc2VyRW52aXJv
bm1lbnQoUU9iamVjdCAqcGFyZW50KQorICAgIDogUU9iamVjdChwYXJlbnQpCit7Cit9CisKKy8q
IQorICAgIERlc3Ryb3lzIHRoZSBRV2ViVXNlckVudmlyb25tZW50LgorKi8KK1FXZWJVc2VyRW52
aXJvbm1lbnQ6On5RV2ViVXNlckVudmlyb25tZW50KCkKK3sKK30KKworCisvKiEKKyAgICBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIEphdmFTY3JpcHQgZXZhbHVhdGVzIHRoZSByZWZlcnJl
ciBwcm9wZXJ0eSBvZiB0aGUgRE9NJ3MgRG9jdW1lbnQKKyAgICBvYmplY3QgKGRvY3VtZW50LnJl
ZmVycmVyKS4gWW91IG1heSByZWltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUg
dmFsdWUgYmVmb3JlIGl0CisgICAgaXMgcmV0dXJuZWQuIEZvciBleGFtcGxlLCB5b3UgbWF5IHdp
c2ggdG8gcmVtb3ZlIHRoZSBwYXRoIG9mIHRoZSByZWZlcnJpbmcgVVJMIGJ1dCByZXRhaW4gdGhl
CisgICAgaG9zdCAoaS5lLiBjb252ZXJ0ICdodHRwOi8vZXhhbXBsZS5jb20vcGFnZS5odG1sJyB0
byAnaHR0cDovL2V4YW1wbGUuY29tJykuIFRoZSB2YWx1ZSBpbgorICAgIGRvY3VtZW50LnJlZmVy
cmVyLCBlc3BlY2lhbGx5IHdoZW4gbmF2aWdhdGluZyBiZXR3ZWVuIHNpdGVzLCBjYW4gbGVhayBk
YXRhIHRoZSB1c2VyIG1heSBjb25zaWRlcgorICAgIHByaXZhdGUgdG8gdGhpcmQgcGFydGllcy4g
SWYgeW91IHdpc2ggdG8gbWFuYWdlIHRoaXMgY29uY2VybiBvbiBiZWhhbGYgb2YgdGhlIHVzZXIg
eW91IGNhbgorICAgIHRydW5jYXRlIG9yIG1vZGlmeSB0aGUgdmFsdWUgb2YgZG9jdW1lbnQucmVm
ZXJyZXIgaGVyZSBpbiBhZGRpdGlvbiB0byBtb2RpZnlpbmcgdGhlIHZhbHVlcyBvZgorICAgIHRo
ZSBSZWZlcnJlciBhbmQgT3JpZ2luIEhUVFAgaGVhZGVycyBieSByZWltcGxlbWVudGluZyBRTmV0
d29ya0FjY2Vzc01hbmFnZXI6OmNyZWF0ZVJlcXVlc3QoKS4KKworICAgIFRoZSBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uIHJldHVybnMgdGhlIHZhbHVlIGluIFxhIHJlZmVycmVyLgorKi8KKworUVN0
cmluZyBRV2ViVXNlckVudmlyb25tZW50OjpyZWZlcnJlcihjb25zdCBRU3RyaW5nJiByZWZlcnJl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gcmVmZXJyZXI7Cit9CisKKy8qIQorICAgIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIHdoZW4gSmF2YVNjcmlwdCBldmFsdWF0ZXMgdGhlIG5hbWUgcHJvcGVy
dHkgb2YgdGhlIERPTSdzIFdpbmRvdworICAgIG9iamVjdCAod2luZG93Lm5hbWUpLiBZb3UgbWF5
IHJlaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSB2YWx1ZSBiZWZvcmUgaXQK
KyAgICBpcyByZXR1cm5lZC4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgd2lzaCB0byByZXR1cm4gYSBi
bGFuayB2YWx1ZSBpZiB3aW5kb3cubmFtZSBpcyBiZWluZyBxdWVyaWVkCisgICAgYnkgb25lIHNp
dGUgYnV0IHdhcyBzZXQgYnkgYW5vdGhlci4gVGhlIHZhbHVlIGluIHdpbmRvdy5uYW1lIHBlcnNp
c3RzIHdoZW4gbmF2aWdhdGluZworICAgIGJldHdlZW4gc2l0ZXMgc28gbWF5IGxlYWsgZGF0YSB0
aGUgdXNlciBjb25zaWRlcnMgcHJpdmF0ZSB0byB0aGlyZCBwYXJ0aWVzLgorCisgICAgVGhlIGRl
ZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgdmFsdWUgaW4gXGEgd2luZG93TmFtZS4K
KyovCisKK1FTdHJpbmcgUVdlYlVzZXJFbnZpcm9ubWVudDo6d2luZG93TmFtZShjb25zdCBRU3Ry
aW5nJiB3aW5kb3dOYW1lKSBjb25zdAoreworICAgIHJldHVybiB3aW5kb3dOYW1lOworfQorCisv
KiEKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIEphdmFTY3JpcHQgZXZhbHVhdGVz
IHRoZSBsZW5ndGggcHJvcGVydHkgb2YgdGhlIERPTSdzIEhpc3RvcnkKKyAgICBvYmplY3QgKGhp
c3RvcnkubGVuZ3RoKS4gWW91IG1heSByZWltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIHRvIG1vZGlm
eSB0aGUgdmFsdWUgYmVmb3JlIGl0CisgICAgaXMgcmV0dXJuZWQuIFRoZSB2YWx1ZSBpbiBoaXN0
b3J5Lmxlbmd0aCBwZXJzaXN0cyB3aGVuIG5hdmlnYXRpbmcKKyAgICBiZXR3ZWVuIHNpdGVzIHNv
IG1heSBsZWFrIGRhdGEgdGhlIHVzZXIgY29uc2lkZXJzIHByaXZhdGUgdG8gdGhpcmQgcGFydGll
cy4KKworICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgdGhlIHZhbHVlIGlu
IFxhIGxlbmd0aC4KKyovCitRU3RyaW5nIFFXZWJVc2VyRW52aXJvbm1lbnQ6Omhpc3RvcnlMZW5n
dGgoY29uc3QgUVN0cmluZyYgbGVuZ3RoKSBjb25zdAoreworICAgIHJldHVybiBsZW5ndGg7Cit9
CisKKy8qIQorICAgIFRoaXMgcmVwcmVzZW50cyB0aGUgcmVjdCBvZiB0aGUgV2luZG93LCBpbmNs
dWRpbmcgYWxsIGludGVyZmFjZSBlbGVtZW50cworICAgIGxpa2UgdG9vbGJhcnMvc2Nyb2xsYmFy
cyBldGMuIEl0IGlzIHVzZWQgYnkgdGhlIHZpZXdwb3J0IG1ldGEgdGFnIGFzIHdlbGwgYXMKKyAg
ICBieSB0aGUgRE9NIFdpbmRvdyBvYmplY3QgZm9yIHdpbmRvdy5vdXRlckhlaWdodCgpLCB3aW5k
b3cub3V0ZXJXaWR0aCgpLAorICAgIHdpbmRvdy5zY3JlZW5YKCksIGFuZCB3aW5kb3cuc2NyZWVu
WSgpLgorICAgIAorICAgIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBDU1MgU3R5
bGUgU2hlZXRzIGV2YWx1YXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhc3BlY3QtcmF0aW8gYW5kIG9y
aWVudGF0aW9uCisgICAgcHJvcGVydGllcyBvZiB0aGUgdmlld3BvcnQsIGUuZy4gQG1lZGlhIHNj
cmVlbiBhbmQgKG1pbi13aWR0aDogNDAwcHgpIGFuZCAobWF4LXdpZHRoOiA3MDBweCkuCisgICAg
WW91IG1heSByZWltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgZGltZW5zaW9u
cyBvZiB0aGUgcGFnZSBzbworICAgIHRoYXQgdGhlIG1lZGlhIHF1ZXJ5IGV2YWx1YXRlcyBhIHJl
c3VsdCB0aGF0IGRvZXMgbm90IGxlYWsgdW5uZWNlc3NhcnkgaW5mb3JtYXRpb24KKyAgICBhYm91
dCB0aGUgdXNlcidzIHNjcmVlbiBlbnZpcm9ubWVudCBhbmQgaXMgY29uc2lzdGVudCB3aXRoIHRo
ZSBjb25maWd1cmF0aW9uIHlvdSd2ZQorICAgIHNwZWNpZmllZCBmb3IgdGhlIFNjcmVlbiBhbmQg
V2luZG93IERPTSBvYmplY3RzLgorKi8KK1FSZWN0RiBRV2ViVXNlckVudmlyb25tZW50Ojp3aW5k
b3dSZWN0KGNvbnN0IFFSZWN0RiYgd2luZG93UmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gd2lu
ZG93UmVjdDsKK30KKworUVJlY3RGIFFXZWJVc2VyRW52aXJvbm1lbnQ6OnBhZ2VSZWN0KGNvbnN0
IFFSZWN0RiYgcGFnZVJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2VSZWN0OworfQorCisv
KiEKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIEphdmFTY3JpcHQgZXZhbHVhdGVz
IHdpbmRvdy5pbm5lckhlaWdodC4KKyAgICBZb3UgbWF5IHJlaW1wbGVtZW50IHRoaXMgZnVuY3Rp
b24gdG8gbW9kaWZ5IHRoZSB2YWx1ZSBiZWZvcmUgaXQgaXMgcmV0dXJuZWQuCisKKyAgICBTaXRl
cyBtYXkgY29tcGFyZSB0aGlzIHZhbHVlIHdpdGggb3V0ZXJIZWlnaHQoKSB0byBtZWFzdXJlIHRo
ZSBicm93c2VyJ3MKKyAgICB0b29sYmFyLgorKi8KK2ludCBRV2ViVXNlckVudmlyb25tZW50Ojpp
bm5lckhlaWdodChpbnQgaGVpZ2h0LCBpbnQgem9vbUZhY3RvcikgY29uc3QKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQgLyB6b29tRmFjdG9yKTsKK30KKworLyohCisgICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBKYXZhU2NyaXB0IGV2YWx1YXRlcyB3aW5kb3cu
aW5uZXJXaWR0aC4KKyAgICBZb3UgbWF5IHJlaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdG8gbW9k
aWZ5IHRoZSB2YWx1ZSBiZWZvcmUgaXQgaXMgcmV0dXJuZWQuCisKKyAgICBTaXRlcyBtYXkgY29t
cGFyZSB0aGlzIHZhbHVlIHdpdGggb3V0ZXJXaWR0aCgpIHRvIG1lYXN1cmUgdGhlIHdpZHRoIG9m
IHRoZSBicm93c2VyJ3MKKyAgICBzY3JvbGxiYXIuCisqLworaW50IFFXZWJVc2VyRW52aXJvbm1l
bnQ6OmlubmVyV2lkdGgoaW50IHdpZHRoLCBpbnQgem9vbUZhY3RvcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCAvIHpvb21GYWN0b3IpOworfQorCisvKiEKKyAg
ICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIEphdmFTY3JpcHQgZXZhbHVhdGVzIHdpbmRv
dy5zY3JvbGxYLgorICAgIFlvdSBtYXkgcmVpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiB0byBtb2Rp
ZnkgdGhlIHZhbHVlIGJlZm9yZSBpdCBpcyByZXR1cm5lZC4KKyovCitpbnQgUVdlYlVzZXJFbnZp
cm9ubWVudDo6c2Nyb2xsWChpbnQgc2Nyb2xsWCwgaW50IHpvb21GYWN0b3IpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oc2Nyb2xsWCAvIHpvb21GYWN0b3IpOworfQorCisv
KiEKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIEphdmFTY3JpcHQgZXZhbHVhdGVz
IHdpbmRvdy5zY3JvbGxZLgorICAgIFlvdSBtYXkgcmVpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiB0
byBtb2RpZnkgdGhlIHZhbHVlIGJlZm9yZSBpdCBpcyByZXR1cm5lZC4KKyovCitpbnQgUVdlYlVz
ZXJFbnZpcm9ubWVudDo6c2Nyb2xsWShpbnQgc2Nyb2xsWSwgaW50IHpvb21GYWN0b3IpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oc2Nyb2xsWSAvIHpvb21GYWN0b3IpOwor
fQorCisvKiEKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIENTUyBTdHlsZSBTaGVl
dHMgZXZhbHVhdGUgdGhlIHdpZHRoLCBoZWlnaHQsIGFzcGVjdC1yYXRpbyBhbmQgb3JpZW50YXRp
b24KKyAgICBwcm9wZXJ0aWVzIG9mIHRoZSBkZXZpY2UsIGUuZy4gQG1lZGlhIHNjcmVlbiBhbmQg
KG1pbi1kZXZpY2Utd2lkdGg6IDQwMHB4KQorICAgIGFuZCAobWF4LWRldmljZS13aWR0aDogNzAw
cHgpLgorICAgIFlvdSBtYXkgcmVpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiB0byBtb2RpZnkgdGhl
IHZhbHVlIGJlZm9yZSBpdCBpcyByZXR1cm5lZC4KKyovCitRUmVjdEYgUVdlYlVzZXJFbnZpcm9u
bWVudDo6c2NyZWVuUmVjdChjb25zdCBRUmVjdEYmIHNjcmVlblJlY3QpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHNjcmVlblJlY3Q7Cit9CisKKy8qIQorICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
IHdoZW4gQ1NTIFN0eWxlIFNoZWV0cyBldmFsdWF0ZSB0aGUgY29sb3IKKyAgICBwcm9wZXJ0eSBv
ZiB0aGUgZGV2aWNlLCBlLmcuIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4tY29sb3I6IDEpCisgICAg
YW5kIChtYXgtY29sb3I6IDIpLgorICAgIFlvdSBtYXkgcmVpbXBsZW1lbnQgdGhpcyBmdW5jdGlv
biB0byBtb2RpZnkgdGhlIHZhbHVlIGJlZm9yZSBpdCBpcyByZXR1cm5lZC4KKyovCitpbnQgUVdl
YlVzZXJFbnZpcm9ubWVudDo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQoaW50IGJpdHNQZXJDb21w
b25lbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJpdHNQZXJDb21wb25lbnQ7Cit9CisKKy8qIQor
ICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gQ1NTIFN0eWxlIFNoZWV0cyBldmFsdWF0
ZSB0aGUgbW9ub2Nocm9tZQorICAgIHByb3BlcnR5IG9mIHRoZSBkZXZpY2UsIGUuZy4gQG1lZGlh
IGFsbCBhbmQgKG1vbm9jaHJvbWUpIHsg4oCmIH0uCisgICAgWW91IG1heSByZWltcGxlbWVudCB0
aGlzIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgdmFsdWUgYmVmb3JlIGl0IGlzIHJldHVybmVkLgor
Ki8KK2Jvb2wgUVdlYlVzZXJFbnZpcm9ubWVudDo6c2NyZWVuSXNNb25vY2hyb21lKGJvb2wgaXNN
b25vY2hyb21lKSBjb25zdAoreworICAgIHJldHVybiBpc01vbm9jaHJvbWU7Cit9CisKKyNpbmNs
dWRlICJtb2NfcXdlYnVzZXJlbnZpcm9ubWVudC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2VidXNlcmVudmlyb25tZW50LmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2VidXNlcmVudmlyb25tZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODEyOTQ4OWZkNWE1ODhjZjY4MWJhZDAy
M2Y3YWQ3NDE5YWFlNjI2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJ1c2VyZW52aXJvbm1lbnQuaApAQCAtMCwwICsxLDU4IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDcgU3RhaWtvcyBDb21wdXRpbmcgU2VydmljZXMgSW5jLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgUVdFQlVTRVJFTlZJUk9OTUVOVF9ICisjZGVmaW5lIFFXRUJVU0VSRU5WSVJP
Tk1FTlRfSAorCisjaW5jbHVkZSAicXdlYnNldHRpbmdzLmgiCisKKyNpbmNsdWRlIDxRdENvcmUv
cW9iamVjdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGcmFtZUxvYWRlckNsaWVu
dFF0OworY2xhc3MgQ2hyb21lQ2xpZW50UXQ7Cit9CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFX
ZWJVc2VyRW52aXJvbm1lbnQgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKworcHVi
bGljOgorICAgIGV4cGxpY2l0IFFXZWJVc2VyRW52aXJvbm1lbnQoUU9iamVjdCAqcGFyZW50ID0g
MCk7CisgICAgflFXZWJVc2VyRW52aXJvbm1lbnQoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgUVN0cmluZyByZWZlcnJlcihjb25zdCBRU3RyaW5nJiByZWZlcnJlcikgY29uc3Q7CisgICAg
dmlydHVhbCBRU3RyaW5nIHdpbmRvd05hbWUoY29uc3QgUVN0cmluZyYgd2luZG93TmFtZSkgY29u
c3Q7CisgICAgdmlydHVhbCBRU3RyaW5nIGhpc3RvcnlMZW5ndGgoY29uc3QgUVN0cmluZyYgd2lu
ZG93TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBRUmVjdEYgd2luZG93UmVjdChjb25zdCBRUmVj
dEYmIHdpbmRvd1JlY3QpIGNvbnN0OworICAgIHZpcnR1YWwgUVJlY3RGIHBhZ2VSZWN0KGNvbnN0
IFFSZWN0RiYgcGFnZVJlY3QpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGlubmVySGVpZ2h0KGlu
dCBoZWlnaHQsIGludCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBpbm5lcldp
ZHRoKGludCB3aWR0aCwgaW50IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNj
cm9sbFgoaW50IHNjcm9sbFgsIGludCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBzY3JvbGxZKGludCBzY3JvbGxZLCBpbnQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVh
bCBRUmVjdEYgc2NyZWVuUmVjdChjb25zdCBRUmVjdEYmIHNjcmVlblJlY3QpIGNvbnN0OworICAg
IHZpcnR1YWwgaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KGludCBiaXRzUGVyQ29tcG9uZW50
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKGJvb2wgaXNNb25v
Y2hyb21lKSBjb25zdDsKKworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudFF0OworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDsKK307CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBlOGEyM2RmNmVjN2NkMTVkMTNhOTc1NWJhZjQ3NjQ1
M2JhZTYyODBjLi4yYzJlYTlkOWMwMmRhYjVkMWY2YWIwNDZiZWVkYjg5YzgzOTRjM2IxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDExLTAzLTE4ICBSb2JlcnQgSG9nYW4gIDxy
b2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgQVBJIC0gUVdlYlVzZXJFbnZpcm9ubWVudAorCisgICAgICAgIFRoZSBR
V2ViVXNlckVudmlyb25tZW50IGNsYXNzIHByb3ZpZGVzIGFuIG9iamVjdCB0byBjb250cm9sIHRo
ZSBxdWFsaXR5IG9mIGluZm9ybWF0aW9uCisgICAgICAgIGFib3V0IHRoZSB1c2VyLCBicm93c2lu
ZyBoaXN0b3J5LCBhbmQgZGVza3RvcCBlbnZpcm9ubWVudCBleHBvc2VkIHRvIHdlYnNpdGVzIGJ5
IHRoZSBET00KKyAgICAgICAgYW5kIENTUyBzdHlsZSBzaGVldHMuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2Njc4CisKKyAgICAgICAgKiBBcGkv
aGVhZGVycy5wcmk6CisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQ
YWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKFFXZWJQYWdlOjpzZXRXZWJV
c2VyRW52aXJvbm1lbnQpOgorICAgICAgICAoUVdlYlBhZ2U6OndlYlVzZXJFbnZpcm9ubWVudCk6
CisgICAgICAgICogQXBpL3F3ZWJwYWdlLmg6CisgICAgICAgICogQXBpL3F3ZWJwYWdlX3AuaDoK
KyAgICAgICAgKiBBcGkvcXdlYnVzZXJlbnZpcm9ubWVudC5jcHA6IEFkZGVkLgorICAgICAgICAo
UVdlYlVzZXJFbnZpcm9ubWVudDo6UVdlYlVzZXJFbnZpcm9ubWVudCk6CisgICAgICAgIChRV2Vi
VXNlckVudmlyb25tZW50Ojp+UVdlYlVzZXJFbnZpcm9ubWVudCk6CisgICAgICAgIChRV2ViVXNl
ckVudmlyb25tZW50OjpyZWZlcnJlcik6CisgICAgICAgIChRV2ViVXNlckVudmlyb25tZW50Ojp3
aW5kb3dOYW1lKToKKyAgICAgICAgKFFXZWJVc2VyRW52aXJvbm1lbnQ6Omhpc3RvcnlMZW5ndGgp
OgorICAgICAgICAoUVdlYlVzZXJFbnZpcm9ubWVudDo6d2luZG93UmVjdCk6CisgICAgICAgIChR
V2ViVXNlckVudmlyb25tZW50OjpwYWdlUmVjdCk6CisgICAgICAgIChRV2ViVXNlckVudmlyb25t
ZW50Ojppbm5lckhlaWdodCk6CisgICAgICAgIChRV2ViVXNlckVudmlyb25tZW50Ojppbm5lcldp
ZHRoKToKKyAgICAgICAgKFFXZWJVc2VyRW52aXJvbm1lbnQ6OnNjcm9sbFgpOgorICAgICAgICAo
UVdlYlVzZXJFbnZpcm9ubWVudDo6c2Nyb2xsWSk6CisgICAgICAgIChRV2ViVXNlckVudmlyb25t
ZW50OjpzY3JlZW5SZWN0KToKKyAgICAgICAgKFFXZWJVc2VyRW52aXJvbm1lbnQ6OnNjcmVlbkRl
cHRoUGVyQ29tcG9uZW50KToKKyAgICAgICAgKFFXZWJVc2VyRW52aXJvbm1lbnQ6OnNjcmVlbklz
TW9ub2Nocm9tZSk6CisgICAgICAgICogQXBpL3F3ZWJ1c2VyZW52aXJvbm1lbnQuaDogQWRkZWQu
CisgICAgICAgICogUXRXZWJLaXQucHJvOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0Ojp3aW5kb3dS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpwYWdlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6c2NyZWVuUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWVDbGllbnRRdDo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnNjcmVlbklzTW9ub2Nocm9tZSk6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50UXQ6OnJlZmVycmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
UXQ6OndpbmRvd05hbWUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuaDoKKwogMjAxMS0wMy0xNyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvUXRXZWJLaXQucHJvIGIvU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8KaW5k
ZXggNGI3YmIwNWEyMDlmZjkxMjliMzk4NjU0MjU1MDVjNTU1OTA0NmQwYy4uM2ExMjAyNjc5ODY2
NjM5ZWI0YTNjYzQxYmUyZjNjNmViZmNlMTY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9RdFdlYktpdC5wcm8KKysrIGIvU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8KQEAgLTE1
Myw2ICsxNTMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC9BcGkvcXdlYmRhdGFiYXNlLmNw
cCBcCiAgICAgJCRQV0QvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwIFwKICAgICAkJFBXRC9BcGkvcXdl
YmtpdHZlcnNpb24uY3BwIFwKKyAgICAkJFBXRC9BcGkvcXdlYnVzZXJlbnZpcm9ubWVudC5jcHAg
XAogICAgIFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuY3Bw
IFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAppbmRl
eCBhY2ZhNjY0NGZhMGMzMjYwNjQ0MGViYmNhY2NlZGQyMjhiNDQxOWY1Li4yZjFjMjAwYWY5Yjky
ODFiNDkzYzcwODMzZmY4MzM3YTM4OWNhYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcApAQCAtMTI0LDYgKzEyNCw5IEBAIEZs
b2F0UmVjdCBDaHJvbWVDbGllbnRRdDo6d2luZG93UmVjdCgpCiB7CiAgICAgaWYgKCFwbGF0Zm9y
bVBhZ2VDbGllbnQoKSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIGlmIChtX3dl
YlBhZ2UgJiYgbV93ZWJQYWdlLT53ZWJVc2VyRW52aXJvbm1lbnQoKSkKKyAgICAgICAgcmV0dXJu
IG1fd2ViUGFnZS0+d2ViVXNlckVudmlyb25tZW50KCktPndpbmRvd1JlY3QocGxhdGZvcm1QYWdl
Q2xpZW50KCktPndpbmRvd1JlY3QoKSk7CisKICAgICByZXR1cm4gcGxhdGZvcm1QYWdlQ2xpZW50
KCktPndpbmRvd1JlY3QoKTsKIH0KIApAQCAtMTMxLDkgKzEzNCwzNyBAQCBGbG9hdFJlY3QgQ2hy
b21lQ2xpZW50UXQ6OnBhZ2VSZWN0KCkKIHsKICAgICBpZiAoIW1fd2ViUGFnZSkKICAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgaWYgKG1fd2ViUGFnZS0+d2ViVXNlckVudmlyb25t
ZW50KCkpCisgICAgICAgIHJldHVybiBtX3dlYlBhZ2UtPndlYlVzZXJFbnZpcm9ubWVudCgpLT5w
YWdlUmVjdChRUmVjdEYoUVBvaW50RigwLCAwKSwgbV93ZWJQYWdlLT52aWV3cG9ydFNpemUoKSkp
OworCiAgICAgcmV0dXJuIEZsb2F0UmVjdChRUmVjdEYoUVBvaW50RigwLCAwKSwgbV93ZWJQYWdl
LT52aWV3cG9ydFNpemUoKSkpOwogfQogCitGbG9hdFJlY3QgQ2hyb21lQ2xpZW50UXQ6OnNjcmVl
blJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChtX3dlYlBhZ2UgJiYgbV93
ZWJQYWdlLT53ZWJVc2VyRW52aXJvbm1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViUGFnZS0+
d2ViVXNlckVudmlyb25tZW50KCktPnNjcmVlblJlY3QoUVJlY3RGKHJlY3QpKTsKKworICAgIHJl
dHVybiByZWN0OworfQorCitpbnQgQ2hyb21lQ2xpZW50UXQ6OnNjcmVlbkRlcHRoUGVyQ29tcG9u
ZW50KGludCBiaXRzUGVyQ29tcG9uZW50KQoreworICAgIGlmIChtX3dlYlBhZ2UgJiYgbV93ZWJQ
YWdlLT53ZWJVc2VyRW52aXJvbm1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViUGFnZS0+d2Vi
VXNlckVudmlyb25tZW50KCktPnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KGJpdHNQZXJDb21wb25l
bnQpOworCisgICAgcmV0dXJuIGJpdHNQZXJDb21wb25lbnQ7Cit9CisKK2Jvb2wgQ2hyb21lQ2xp
ZW50UXQ6OnNjcmVlbklzTW9ub2Nocm9tZShib29sIGlzTW9ub2Nocm9tZSkKK3sKKyAgICBpZiAo
bV93ZWJQYWdlICYmIG1fd2ViUGFnZS0+d2ViVXNlckVudmlyb25tZW50KCkpCisgICAgICAgIHJl
dHVybiBtX3dlYlBhZ2UtPndlYlVzZXJFbnZpcm9ubWVudCgpLT5zY3JlZW5Jc01vbm9jaHJvbWUo
aXNNb25vY2hyb21lKTsKKworICAgIHJldHVybiBpc01vbm9jaHJvbWU7Cit9CisKIGZsb2F0IENo
cm9tZUNsaWVudFF0OjpzY2FsZUZhY3RvcigpCiB7CiAgICAgaWYgKCFtX3dlYlBhZ2UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0Lmgg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKaW5kZXgg
YTEyYzJlY2U3NWUzNDMyYTJmMjZjMTM5NjAyM2IzMjU0NjdkMjIwYy4uN2ExMWM1MmM2YWRhMmVi
YzJlZjhmOTAxNGI4NGRjMDdhOTMwZGY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaApAQCAtNjUsNyArNjUsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7CiAKICAg
ICAgICAgdmlydHVhbCBGbG9hdFJlY3QgcGFnZVJlY3QoKTsKLQorICAgICAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBzY3JlZW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgICAgICB2aXJ0dWFsIGlu
dCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChpbnQgYml0c1BlckNvbXBvbmVudCk7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoYm9vbCBpc01vbm9jaHJvbWUpOworIAog
ICAgICAgICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCk7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIGZvY3VzKCk7CkBAIC0xOTYsNiArMTk5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShjb25zdCBW
aWV3cG9ydEFyZ3VtZW50cyYpIGNvbnN0OwogCisgICAgICAgIGludCBzY3JlZW5EZXB0aChpbnQp
OworICAgICAgICAKICAgICAgICAgUVdlYlBhZ2UqIG1fd2ViUGFnZTsKICAgICAgICAgV2ViQ29y
ZTo6S1VSTCBsYXN0SG92ZXJVUkw7CiAgICAgICAgIFdURjo6U3RyaW5nIGxhc3RIb3ZlclRpdGxl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRRdC5jcHAKaW5kZXggMjdlZDdlZDRhZDAzMmI5NmU3N2Q2ZjdjNWY5OGYwMjgzZTUz
ZDQ5Yy4uMWI2ZTJiM2Q4M2FmNzA2MWEwN2M5MjBmYTlhZGIwYzcyZTExNzdiNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
UXQuY3BwCkBAIC03MzIsNiArNzMyLDIyIEBAIFN0cmluZyBGcmFtZUxvYWRlckNsaWVudFF0Ojp1
c2VyQWdlbnQoY29uc3QgS1VSTCYgdXJsKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAorU3Ry
aW5nIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnJlZmVycmVyKGNvbnN0IFN0cmluZyYgcmVmZXJyZXIp
Cit7CisgICAgaWYgKG1fd2ViRnJhbWUgJiYgbV93ZWJGcmFtZS0+cGFnZSgpLT53ZWJVc2VyRW52
aXJvbm1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViRnJhbWUtPnBhZ2UoKS0+d2ViVXNlckVu
dmlyb25tZW50KCktPnJlZmVycmVyKHJlZmVycmVyKTsKKworICAgIHJldHVybiByZWZlcnJlcjsK
K30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OndpbmRvd05hbWUoY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIGlmIChtX3dlYkZyYW1lICYmIG1fd2ViRnJhbWUtPnBhZ2UoKS0+d2Vi
VXNlckVudmlyb25tZW50KCkpCisgICAgICAgIHJldHVybiBtX3dlYkZyYW1lLT5wYWdlKCktPndl
YlVzZXJFbnZpcm9ubWVudCgpLT53aW5kb3dOYW1lKG5hbWUpOworCisgICAgcmV0dXJuIG5hbWU7
Cit9CisKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigp
CiB7CiAgICAgaWYgKG1fd2ViRnJhbWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKaW5kZXggMDMzMzU5OWMzN2RkYjhm
MzU5ODZiYTEyN2Y3OTg1NzljNzVlZGZhZC4uMThmM2M4ZDhmNTVjNjExZTkyNGMyMGUyM2Y1Zjdm
N2ZhYzAxNTk3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmgKQEAgLTE4OSw2ICsxODksOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IEtVUkwmKTsK
IAogICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2VudChjb25zdCBXZWJDb3JlOjpLVVJMJik7Cisg
ICAgdmlydHVhbCBTdHJpbmcgcmVmZXJyZXIoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBT
dHJpbmcgd2luZG93TmFtZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzYXZl
UGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZShXZWJDb3JlOjpDYWNoZWRGcmFtZSopOwogICAgIHZp
cnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2FjaGVkRnJhbWUoV2ViQ29yZTo6
Q2FjaGVkRnJhbWUqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86218</attachid>
            <date>2011-03-18 15:01:30 -0700</date>
            <delta_ts>2011-04-26 16:55:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56678-20110318220125.patch</filename>
            <type>text/plain</type>
            <size>21906</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE0OTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL2hlYWRlcnMucHJpIGIvU291cmNlL1dlYktpdC9xdC9BcGkvaGVhZGVycy5wcmkKaW5kZXgg
MjliYjEyNWIyYTI3ZjNhYmMzYzNkMWQyOWU2ZTVkZmJkMjk5ZGUzYS4uNzY3OGUxNDIxNWMxNDUw
MTAxNzdjOTljZGZmM2MwYjIyNmE3NGIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9B
cGkvaGVhZGVycy5wcmkKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvaGVhZGVycy5wcmkKQEAg
LTEyLDQgKzEyLDUgQEAgV0VCS0lUX0FQSV9IRUFERVJTID0gJCRQV0QvcXdlYmZyYW1lLmggXAog
ICAgICAgICAgICAgICAgICAgICAgJCRQV0QvcXdlYnBsdWdpbmZhY3RvcnkuaCBcCiAgICAgICAg
ICAgICAgICAgICAgICAkJFBXRC9xd2ViaGlzdG9yeS5oIFwKICAgICAgICAgICAgICAgICAgICAg
ICQkUFdEL3F3ZWJpbnNwZWN0b3IuaCBcCi0gICAgICAgICAgICAgICAgICAgICAkJFBXRC9xd2Vi
a2l0dmVyc2lvbi5oCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC9xd2Via2l0dmVyc2lvbi5o
IFwKKyAgICAgICAgICAgICAgICAgICAgICQkUFdEL3F3ZWJ1c2VyZW52aXJvbm1lbnQuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IGUxYjdiOWVlNDU0ODVlZjJhZTRmZTIxYzliMTUz
NDdkNDdmNThhZWUuLjg0ZGIyNTgwZGNiYTA3ZWFiNmVlMGQ1MTAxMTQ4MDAxOTdkNzAwZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTMxMCw2ICszMTAsNyBAQCBRV2ViUGFnZVBy
aXZhdGU6OlFXZWJQYWdlUHJpdmF0ZShRV2ViUGFnZSAqcXEpCiAgICAgLCBpbnNwZWN0b3JGcm9u
dGVuZCgwKQogICAgICwgaW5zcGVjdG9yKDApCiAgICAgLCBpbnNwZWN0b3JJc0ludGVybmFsT25s
eShmYWxzZSkKKyAgICAsIHVzZXJFbnZpcm9ubWVudCgwKQogewogICAgIFdlYkNvcmU6OkluaXRp
YWxpemVMb2dnaW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOwogICAgIFNjcmlwdENvbnRyb2xsZXI6
OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKQEAgLTM2NjgsNiArMzY2OSwzNSBAQCBRTmV0d29ya0Fj
Y2Vzc01hbmFnZXIgKlFXZWJQYWdlOjpuZXR3b3JrQWNjZXNzTWFuYWdlcigpIGNvbnN0CiB9CiAK
IC8qIQorICAgIFNldHMgdGhlIFFXZWJVc2VyRW52aXJvbm1lbnQgXGEgbWFuYWdlciByZXNwb25z
aWJsZSBmb3Igc2VydmluZyBuZXR3b3JrIHJlcXVlc3RzIGZvciB0aGlzCisgICAgUVdlYlBhZ2Uu
CisKKyAgICBcbm90ZSBJdCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB0byBjaGFuZ2UgdGhl
IG5ldHdvcmsgYWNjZXNzIG1hbmFnZXIgYWZ0ZXIgdGhlCisgICAgUVdlYlBhZ2UgaGFzIHVzZWQg
aXQuIFRoZSByZXN1bHRzIG9mIGRvaW5nIHRoaXMgYXJlIHVuZGVmaW5lZC4KKworICAgIFxzYSBu
ZXR3b3JrQWNjZXNzTWFuYWdlcigpCisqLwordm9pZCBRV2ViUGFnZTo6c2V0V2ViVXNlckVudmly
b25tZW50KFFXZWJVc2VyRW52aXJvbm1lbnQgKm1hbmFnZXIpCit7CisgICAgaWYgKG1hbmFnZXIg
PT0gZC0+dXNlckVudmlyb25tZW50KQorICAgICAgICByZXR1cm47CisgICAgaWYgKGQtPnVzZXJF
bnZpcm9ubWVudCAmJiBkLT51c2VyRW52aXJvbm1lbnQtPnBhcmVudCgpID09IHRoaXMpCisgICAg
ICAgIGRlbGV0ZSBkLT51c2VyRW52aXJvbm1lbnQ7CisgICAgZC0+dXNlckVudmlyb25tZW50ID0g
bWFuYWdlcjsKK30KKworLyohCisgICAgUmV0dXJucyB0aGUgUVdlYlVzZXJFbnZpcm9ubWVudCB0
aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBzZXJ2aW5nIG5ldHdvcmsKKyAgICByZXF1ZXN0cyBmb3Ig
dGhpcyBRV2ViUGFnZS4KKworICAgIFxzYSBzZXRXZWJVc2VyRW52aXJvbm1lbnQoKQorKi8KK1FX
ZWJVc2VyRW52aXJvbm1lbnQqIFFXZWJQYWdlOjp3ZWJVc2VyRW52aXJvbm1lbnQoKSBjb25zdAor
eworICAgIHJldHVybiBkLT51c2VyRW52aXJvbm1lbnQ7Cit9CisKKy8qIQogICAgIFNldHMgdGhl
IFFXZWJQbHVnaW5GYWN0b3J5IFxhIGZhY3RvcnkgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHBs
dWdpbnMgZW1iZWRkZWQgaW50byB0aGlzCiAgICAgUVdlYlBhZ2UuCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZS5oCmluZGV4IGUxMmI0NjAxNWE2MzlkOGExZjY3NzdjM2ExYjkzNzQwMDA2ODM2NTkuLmZj
Zjc5Y2UxYTk1MmNkNTFhYWRiNmYyY2E4MjFmMzE4ZGRkM2IxYzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuaApAQCAtNDEsNiArNDEsNyBAQCBjbGFzcyBRV2ViRWxlbWVudDsKIGNsYXNzIFFXZWJG
cmFtZTsKIGNsYXNzIFFXZWJOZXR3b3JrUmVxdWVzdDsKIGNsYXNzIFFXZWJIaXN0b3J5OworY2xh
c3MgUVdlYlVzZXJFbnZpcm9ubWVudDsKIAogY2xhc3MgUVdlYkZyYW1lRGF0YTsKIGNsYXNzIFFX
ZWJIaXN0b3J5SXRlbTsKQEAgLTI2NSw2ICsyNjYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRO
ZXR3b3JrQWNjZXNzTWFuYWdlcihRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm1hbmFnZXIpOwogICAg
IFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqbmV0d29ya0FjY2Vzc01hbmFnZXIoKSBjb25zdDsKIAor
ICAgIHZvaWQgc2V0V2ViVXNlckVudmlyb25tZW50KFFXZWJVc2VyRW52aXJvbm1lbnQgKm1hbmFn
ZXIpOworICAgIFFXZWJVc2VyRW52aXJvbm1lbnQgKndlYlVzZXJFbnZpcm9ubWVudCgpIGNvbnN0
OworCiAgICAgdm9pZCBzZXRQbHVnaW5GYWN0b3J5KFFXZWJQbHVnaW5GYWN0b3J5ICpmYWN0b3J5
KTsKICAgICBRV2ViUGx1Z2luRmFjdG9yeSAqcGx1Z2luRmFjdG9yeSgpIGNvbnN0OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmggYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2VicGFnZV9wLmgKaW5kZXggODZmNTRiNzFkNzI5MTZmOGQ1NWZkYTY4YTQ3Yzc5
M2VmZDM4Yjc4YS4uYjNmYjA4MjRiNmYxZDAwODA0MjU3ZDNkODM2OWEwNWFmMjdmMmU2ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgInF3
ZWJwYWdlLmgiCiAjaW5jbHVkZSAicXdlYmhpc3RvcnkuaCIKICNpbmNsdWRlICJxd2ViZnJhbWUu
aCIKKyNpbmNsdWRlICJxd2VidXNlcmVudmlyb25tZW50LmgiCiAKICNpbmNsdWRlICJJbnRQb2lu
dC5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTIxMCw2ICsyMTEsNyBAQCBwdWJsaWM6CiAgICAg
UVdlYkluc3BlY3RvciogaW5zcGVjdG9yOwogICAgIGJvb2wgaW5zcGVjdG9ySXNJbnRlcm5hbE9u
bHk7IC8vIFRydWUgaWYgY3JlYXRlZCB0aHJvdWdoIHRoZSBJbnNwZWN0IGNvbnRleHQgbWVudSBh
Y3Rpb24KICAgICBRdDo6RHJvcEFjdGlvbiBtX2xhc3REcm9wQWN0aW9uOworICAgIFFXZWJVc2Vy
RW52aXJvbm1lbnQgKnVzZXJFbnZpcm9ubWVudDsKIAogICAgIHN0YXRpYyBib29sIGRydFJ1bjsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VidXNlcmVudmlyb25tZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ1c2VyZW52aXJvbm1lbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcwNGEwMGY2M2M0NTU4YzQ4ZGRhYzFiZDgyNTdiMmM3NTYyYTk3YTYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VidXNlcmVudmlyb25tZW50LmNwcApA
QCAtMCwwICsxLDIxMiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0IChD
KSAyMDA3IFN0YWlrb3MgQ29tcHV0aW5nIFNlcnZpY2VzIEluYy4KKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDcgQXBwbGUgSW5jLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInF3
ZWJ1c2VyZW52aXJvbm1lbnQuaCIKKworLyohCisgICAgXGNsYXNzIFFXZWJVc2VyRW52aXJvbm1l
bnQKKyAgICBcc2luY2UgNC44CisgICAgXGJyaWVmIFRoZSBRV2ViVXNlckVudmlyb25tZW50IGNs
YXNzIHByb3ZpZGVzIGFuIG9iamVjdCB0byBjb250cm9sIHRoZSBxdWFsaXR5IG9mIGluZm9ybWF0
aW9uCisgICAgICAgICAgIGFib3V0IHRoZSB1c2VyLCBicm93c2luZyBoaXN0b3J5LCBhbmQgZGVz
a3RvcCBlbnZpcm9ubWVudCBleHBvc2VkIHRvIHdlYnNpdGVzIGJ5IHRoZSBET00KKyAgICAgICAg
ICAgYW5kIENTUyBzdHlsZSBzaGVldHMuCisKKyAgICBcaW5tb2R1bGUgUXRXZWJLaXQKKworICAg
IFRoZSB1c2VyJ3MgZGVza3RvcCBlbnZpcm9ubWVudCwgYnJvd3NpbmcgaGlzdG9yeSwgYnJvd3Nl
ciB3aW5kb3csIGFuZCBpbnN0YWxsZWQgZm9udHMgYXJlIGp1c3QKKyAgICBzb21lIG9mIHRoZSBl
bGVtZW50cyBleHBvc2VkIHRvIHdlYnNpdGVzIHZpYSBKYXZhc2NyaXB0IGFuZCBDU1Mgc3R5bGUg
c2hlZXRzLiBXZWJzaXRlcyBjYW4sIGFuZAorICAgIGRvLCB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0
byBjcmVhdGUgYSAnYnJvd3NlciBmaW5nZXJwcmludCcgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2Vy
IHNvIHRoYXQgdmlzaXRzCisgICAgYnkgdGhlIHVzZXIgY2FuIGJlIHRyYWNrZWQuCisKKyAgICBU
aGUgcHVycG9zZSBvZiB0aGlzIGNsYXNzIGlzIHRvIGFsbG93IHlvdXIgUXRXZWJLaXQgY2xpZW50
IHRvIHNwZWNpZnkgdGhlIHF1YWxpdHkgYW5kIGV4dGVudCBvZgorICAgIHRoZSBpbmZvcm1hdGlv
biBleHBvc2VkIHRvIHdlYnNpdGVzLCBieSBlaXRoZXIgbWFraW5nIGRlY2lzaW9ucyBvbiBiZWhh
bGYgb2YgdGhlIHVzZXIgb3IgYWxsb3dpbmcKKyAgICB0aGVtIHRvIGNvbmZpZ3VyZSB0aGUgaW5m
b3JtYXRpb24gdGhlbXNlbHZlcy4gQ29udHJvbGxpbmcgdGhpcyBpbmZvcm1hdGlvbiBhbGxvd3Mg
eW91ciBRdFdlYktpdAorICAgIGNsaWVudCB0byByZWR1Y2UgdGhlIHF1YWxpdHkgb2YgZmluZ2Vy
cHJpbnQgdGhhdCBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgYnJvd3Nlci4KKworICAgIEluIGFk
ZGl0aW9uIHRvIHRoZSBET00gcHJvcGVydGllcyBleHBvc2VkIGluIHRoaXMgY2xhc3MgeW91IHdp
bGwgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIG1hbmFnaW5nCisgICAgdGhlIHZhbHVlcyByZXR1cm5l
ZCBieSB0aGUgU2NyZWVuIGFuZCBOYXZpZ2F0b3Igb2JqZWN0cy4gU2luY2UgaXQgaXMgcG9zc2li
bGUgdG8gb3ZlcmxvYWQgdGhlc2UKKyAgICBvYmplY3QgdXNpbmcgUVdlYkZyYW1lOjphZGRUb0ph
dmFTY3JpcHRXaW5kb3dPYmplY3QoKSB0aGV5IGFyZSBub3QgbWFkZSBhdmFpbGFibGUgaW4KKyAg
ICBRV2ViVXNlckVudmlyb25tZW50LgorCisgICAgXHNhIFFXZWJGcmFtZQorKi8KKworLyohCisg
ICAgQ29uc3RydWN0cyBhbiBlbXB0eSBRV2ViVXNlckVudmlyb25tZW50IHdpdGggcGFyZW50IFxh
IHBhcmVudC4KKyovCitRV2ViVXNlckVudmlyb25tZW50OjpRV2ViVXNlckVudmlyb25tZW50KFFP
YmplY3QgKnBhcmVudCkKKyAgICA6IFFPYmplY3QocGFyZW50KQoreworfQorCisvKiEKKyAgICBE
ZXN0cm95cyB0aGUgUVdlYlVzZXJFbnZpcm9ubWVudC4KKyovCitRV2ViVXNlckVudmlyb25tZW50
Ojp+UVdlYlVzZXJFbnZpcm9ubWVudCgpCit7Cit9CisKKworLyohCisgICAgVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgd2hlbiBKYXZhU2NyaXB0IGV2YWx1YXRlcyB0aGUgcmVmZXJyZXIgcHJvcGVy
dHkgb2YgdGhlIERPTSdzIERvY3VtZW50CisgICAgb2JqZWN0IChkb2N1bWVudC5yZWZlcnJlciku
IFlvdSBtYXkgcmVpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHZhbHVlIGJl
Zm9yZSBpdAorICAgIGlzIHJldHVybmVkLiBGb3IgZXhhbXBsZSwgeW91IG1heSB3aXNoIHRvIHJl
bW92ZSB0aGUgcGF0aCBvZiB0aGUgcmVmZXJyaW5nIFVSTCBidXQgcmV0YWluIHRoZQorICAgIGhv
c3QgKGkuZS4gY29udmVydCAnaHR0cDovL2V4YW1wbGUuY29tL3BhZ2UuaHRtbCcgdG8gJ2h0dHA6
Ly9leGFtcGxlLmNvbScpLiBUaGUgdmFsdWUgaW4KKyAgICBkb2N1bWVudC5yZWZlcnJlciwgZXNw
ZWNpYWxseSB3aGVuIG5hdmlnYXRpbmcgYmV0d2VlbiBzaXRlcywgY2FuIGxlYWsgZGF0YSB0aGUg
dXNlciBtYXkgY29uc2lkZXIKKyAgICBwcml2YXRlIHRvIHRoaXJkIHBhcnRpZXMuIElmIHlvdSB3
aXNoIHRvIG1hbmFnZSB0aGlzIGNvbmNlcm4gb24gYmVoYWxmIG9mIHRoZSB1c2VyIHlvdSBjYW4K
KyAgICB0cnVuY2F0ZSBvciBtb2RpZnkgdGhlIHZhbHVlIG9mIGRvY3VtZW50LnJlZmVycmVyIGhl
cmUgaW4gYWRkaXRpb24gdG8gbW9kaWZ5aW5nIHRoZSB2YWx1ZXMgb2YKKyAgICB0aGUgUmVmZXJy
ZXIgYW5kIE9yaWdpbiBIVFRQIGhlYWRlcnMgYnkgcmVpbXBsZW1lbnRpbmcgUU5ldHdvcmtBY2Nl
c3NNYW5hZ2VyOjpjcmVhdGVSZXF1ZXN0KCkuCisKKyAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRh
dGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBpbiBcYSByZWZlcnJlci4KKyovCisKK1FTdHJpbmcgUVdl
YlVzZXJFbnZpcm9ubWVudDo6cmVmZXJyZXIoY29uc3QgUVN0cmluZyYgcmVmZXJyZXIpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHJlZmVycmVyOworfQorCisvKiEKKyAgICBUaGlzIGZ1bmN0aW9uIGlz
IGNhbGxlZCB3aGVuIEphdmFTY3JpcHQgZXZhbHVhdGVzIHRoZSBuYW1lIHByb3BlcnR5IG9mIHRo
ZSBET00ncyBXaW5kb3cKKyAgICBvYmplY3QgKHdpbmRvdy5uYW1lKS4gWW91IG1heSByZWltcGxl
bWVudCB0aGlzIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgdmFsdWUgYmVmb3JlIGl0CisgICAgaXMg
cmV0dXJuZWQuIEZvciBleGFtcGxlLCB5b3UgbWF5IHdpc2ggdG8gcmV0dXJuIGEgYmxhbmsgdmFs
dWUgaWYgd2luZG93Lm5hbWUgaXMgYmVpbmcgcXVlcmllZAorICAgIGJ5IG9uZSBzaXRlIGJ1dCB3
YXMgc2V0IGJ5IGFub3RoZXIuIFRoZSB2YWx1ZSBpbiB3aW5kb3cubmFtZSBwZXJzaXN0cyB3aGVu
IG5hdmlnYXRpbmcKKyAgICBiZXR3ZWVuIHNpdGVzIHNvIG1heSBsZWFrIGRhdGEgdGhlIHVzZXIg
Y29uc2lkZXJzIHByaXZhdGUgdG8gdGhpcmQgcGFydGllcy4KKworICAgIFRoZSBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uIHJldHVybnMgdGhlIHZhbHVlIGluIFxhIHdpbmRvd05hbWUuCisqLworCitR
U3RyaW5nIFFXZWJVc2VyRW52aXJvbm1lbnQ6OndpbmRvd05hbWUoY29uc3QgUVN0cmluZyYgd2lu
ZG93TmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gd2luZG93TmFtZTsKK30KKworLyohCisgICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBKYXZhU2NyaXB0IGV2YWx1YXRlcyB0aGUgbGVu
Z3RoIHByb3BlcnR5IG9mIHRoZSBET00ncyBIaXN0b3J5CisgICAgb2JqZWN0IChoaXN0b3J5Lmxl
bmd0aCkuIFlvdSBtYXkgcmVpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHZh
bHVlIGJlZm9yZSBpdAorICAgIGlzIHJldHVybmVkLiBUaGUgdmFsdWUgaW4gaGlzdG9yeS5sZW5n
dGggcGVyc2lzdHMgd2hlbiBuYXZpZ2F0aW5nCisgICAgYmV0d2VlbiBzaXRlcyBzbyBtYXkgbGVh
ayBkYXRhIHRoZSB1c2VyIGNvbnNpZGVycyBwcml2YXRlIHRvIHRoaXJkIHBhcnRpZXMuCisKKyAg
ICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBpbiBcYSBsZW5n
dGguCisqLworUVN0cmluZyBRV2ViVXNlckVudmlyb25tZW50OjpoaXN0b3J5TGVuZ3RoKGNvbnN0
IFFTdHJpbmcmIGxlbmd0aCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCisvKiEK
KyAgICBUaGlzIHJlcHJlc2VudHMgdGhlIHJlY3Qgb2YgdGhlIFdpbmRvdywgaW5jbHVkaW5nIGFs
bCBpbnRlcmZhY2UgZWxlbWVudHMKKyAgICBsaWtlIHRvb2xiYXJzL3Njcm9sbGJhcnMgZXRjLiBJ
dCBpcyB1c2VkIGJ5IHRoZSB2aWV3cG9ydCBtZXRhIHRhZyBhcyB3ZWxsIGFzCisgICAgYnkgdGhl
IERPTSBXaW5kb3cgb2JqZWN0IGZvciB3aW5kb3cub3V0ZXJIZWlnaHQoKSwgd2luZG93Lm91dGVy
V2lkdGgoKSwKKyAgICB3aW5kb3cuc2NyZWVuWCgpLCBhbmQgd2luZG93LnNjcmVlblkoKS4KKyAg
ICAKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gQ1NTIFN0eWxlIFNoZWV0
cyBldmFsdWF0ZSB0aGUgd2lkdGgsIGhlaWdodCwgYXNwZWN0LXJhdGlvIGFuZCBvcmllbnRhdGlv
bgorICAgIHByb3BlcnRpZXMgb2YgdGhlIHZpZXdwb3J0LCBlLmcuIEBtZWRpYSBzY3JlZW4gYW5k
IChtaW4td2lkdGg6IDQwMHB4KSBhbmQgKG1heC13aWR0aDogNzAwcHgpLgorICAgIFlvdSBtYXkg
cmVpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIGRpbWVuc2lvbnMgb2YgdGhl
IHBhZ2Ugc28KKyAgICB0aGF0IHRoZSBtZWRpYSBxdWVyeSBldmFsdWF0ZXMgYSByZXN1bHQgdGhh
dCBkb2VzIG5vdCBsZWFrIHVubmVjZXNzYXJ5IGluZm9ybWF0aW9uCisgICAgYWJvdXQgdGhlIHVz
ZXIncyBzY3JlZW4gZW52aXJvbm1lbnQgYW5kIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29uZmln
dXJhdGlvbiB5b3UndmUKKyAgICBzcGVjaWZpZWQgZm9yIHRoZSBTY3JlZW4gYW5kIFdpbmRvdyBE
T00gb2JqZWN0cy4KKyovCitRUmVjdEYgUVdlYlVzZXJFbnZpcm9ubWVudDo6d2luZG93UmVjdChj
b25zdCBRUmVjdEYmIHdpbmRvd1JlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIHdpbmRvd1JlY3Q7
Cit9CisKK1FSZWN0RiBRV2ViVXNlckVudmlyb25tZW50OjpwYWdlUmVjdChjb25zdCBRUmVjdEYm
IHBhZ2VSZWN0KSBjb25zdAoreworICAgIHJldHVybiBwYWdlUmVjdDsKK30KKworLyohCisgICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBKYXZhU2NyaXB0IGV2YWx1YXRlcyB3aW5kb3cu
aW5uZXJIZWlnaHQuCisgICAgWW91IG1heSByZWltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIHRvIG1v
ZGlmeSB0aGUgdmFsdWUgYmVmb3JlIGl0IGlzIHJldHVybmVkLgorCisgICAgU2l0ZXMgbWF5IGNv
bXBhcmUgdGhpcyB2YWx1ZSB3aXRoIG91dGVySGVpZ2h0KCkgdG8gbWVhc3VyZSB0aGUgYnJvd3Nl
cidzCisgICAgdG9vbGJhci4KKyovCitpbnQgUVdlYlVzZXJFbnZpcm9ubWVudDo6aW5uZXJIZWln
aHQoaW50IGhlaWdodCwgaW50IHpvb21GYWN0b3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4oaGVpZ2h0IC8gem9vbUZhY3Rvcik7Cit9CisKKy8qIQorICAgIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIHdoZW4gSmF2YVNjcmlwdCBldmFsdWF0ZXMgd2luZG93LmlubmVyV2lk
dGguCisgICAgWW91IG1heSByZWltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUg
dmFsdWUgYmVmb3JlIGl0IGlzIHJldHVybmVkLgorCisgICAgU2l0ZXMgbWF5IGNvbXBhcmUgdGhp
cyB2YWx1ZSB3aXRoIG91dGVyV2lkdGgoKSB0byBtZWFzdXJlIHRoZSB3aWR0aCBvZiB0aGUgYnJv
d3NlcidzCisgICAgc2Nyb2xsYmFyLgorKi8KK2ludCBRV2ViVXNlckVudmlyb25tZW50Ojppbm5l
cldpZHRoKGludCB3aWR0aCwgaW50IHpvb21GYWN0b3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4od2lkdGggLyB6b29tRmFjdG9yKTsKK30KKworLyohCisgICAgVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBKYXZhU2NyaXB0IGV2YWx1YXRlcyB3aW5kb3cuc2Nyb2xs
WC4KKyAgICBZb3UgbWF5IHJlaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSB2
YWx1ZSBiZWZvcmUgaXQgaXMgcmV0dXJuZWQuCisqLworaW50IFFXZWJVc2VyRW52aXJvbm1lbnQ6
OnNjcm9sbFgoaW50IHNjcm9sbFgsIGludCB6b29tRmFjdG9yKSBjb25zdAoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KHNjcm9sbFggLyB6b29tRmFjdG9yKTsKK30KKworLyohCisgICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBKYXZhU2NyaXB0IGV2YWx1YXRlcyB3aW5kb3cu
c2Nyb2xsWS4KKyAgICBZb3UgbWF5IHJlaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdG8gbW9kaWZ5
IHRoZSB2YWx1ZSBiZWZvcmUgaXQgaXMgcmV0dXJuZWQuCisqLworaW50IFFXZWJVc2VyRW52aXJv
bm1lbnQ6OnNjcm9sbFkoaW50IHNjcm9sbFksIGludCB6b29tRmFjdG9yKSBjb25zdAoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHNjcm9sbFkgLyB6b29tRmFjdG9yKTsKK30KKworLyoh
CisgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBDU1MgU3R5bGUgU2hlZXRzIGV2YWx1
YXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhc3BlY3QtcmF0aW8gYW5kIG9yaWVudGF0aW9uCisgICAg
cHJvcGVydGllcyBvZiB0aGUgZGV2aWNlLCBlLmcuIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4tZGV2
aWNlLXdpZHRoOiA0MDBweCkKKyAgICBhbmQgKG1heC1kZXZpY2Utd2lkdGg6IDcwMHB4KS4KKyAg
ICBZb3UgbWF5IHJlaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSB2YWx1ZSBi
ZWZvcmUgaXQgaXMgcmV0dXJuZWQuCisqLworUVJlY3RGIFFXZWJVc2VyRW52aXJvbm1lbnQ6OnNj
cmVlblJlY3QoY29uc3QgUVJlY3RGJiBzY3JlZW5SZWN0KSBjb25zdAoreworICAgIHJldHVybiBz
Y3JlZW5SZWN0OworfQorCisvKiEKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIENT
UyBTdHlsZSBTaGVldHMgZXZhbHVhdGUgdGhlIGNvbG9yCisgICAgcHJvcGVydHkgb2YgdGhlIGRl
dmljZSwgZS5nLiBAbWVkaWEgc2NyZWVuIGFuZCAobWluLWNvbG9yOiAxKQorICAgIGFuZCAobWF4
LWNvbG9yOiAyKS4KKyAgICBZb3UgbWF5IHJlaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdG8gbW9k
aWZ5IHRoZSB2YWx1ZSBiZWZvcmUgaXQgaXMgcmV0dXJuZWQuCisqLworaW50IFFXZWJVc2VyRW52
aXJvbm1lbnQ6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KGludCBiaXRzUGVyQ29tcG9uZW50KSBj
b25zdAoreworICAgIHJldHVybiBiaXRzUGVyQ29tcG9uZW50OworfQorCisvKiEKKyAgICBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIENTUyBTdHlsZSBTaGVldHMgZXZhbHVhdGUgdGhlIG1v
bm9jaHJvbWUKKyAgICBwcm9wZXJ0eSBvZiB0aGUgZGV2aWNlLCBlLmcuIEBtZWRpYSBhbGwgYW5k
IChtb25vY2hyb21lKSB7IOKApiB9LgorICAgIFlvdSBtYXkgcmVpbXBsZW1lbnQgdGhpcyBmdW5j
dGlvbiB0byBtb2RpZnkgdGhlIHZhbHVlIGJlZm9yZSBpdCBpcyByZXR1cm5lZC4KKyovCitib29s
IFFXZWJVc2VyRW52aXJvbm1lbnQ6OnNjcmVlbklzTW9ub2Nocm9tZShib29sIGlzTW9ub2Nocm9t
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNNb25vY2hyb21lOworfQorCisjaW5jbHVkZSAibW9j
X3F3ZWJ1c2VyZW52aXJvbm1lbnQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnVzZXJlbnZpcm9ubWVudC5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnVzZXJl
bnZpcm9ubWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxMjk0ODlmZDVhNTg4Y2Y2ODFiYWQwMjNmN2FkNzQx
OWFhZTYyNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VidXNl
cmVudmlyb25tZW50LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA3IFN0YWlrb3MgQ29tcHV0aW5nIFNlcnZpY2VzIEluYy4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIFFXRUJVU0VSRU5WSVJPTk1FTlRfSAorI2RlZmluZSBRV0VCVVNFUkVOVklST05NRU5UX0gK
KworI2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5oIgorCisjaW5jbHVkZSA8UXRDb3JlL3FvYmplY3Qu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRRdDsKK2Ns
YXNzIENocm9tZUNsaWVudFF0OworfQorCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViVXNlckVu
dmlyb25tZW50IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBRV2ViVXNlckVudmlyb25tZW50KFFPYmplY3QgKnBhcmVudCA9IDApOworICAg
IH5RV2ViVXNlckVudmlyb25tZW50KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFFTdHJp
bmcgcmVmZXJyZXIoY29uc3QgUVN0cmluZyYgcmVmZXJyZXIpIGNvbnN0OworICAgIHZpcnR1YWwg
UVN0cmluZyB3aW5kb3dOYW1lKGNvbnN0IFFTdHJpbmcmIHdpbmRvd05hbWUpIGNvbnN0OworICAg
IHZpcnR1YWwgUVN0cmluZyBoaXN0b3J5TGVuZ3RoKGNvbnN0IFFTdHJpbmcmIHdpbmRvd05hbWUp
IGNvbnN0OworICAgIHZpcnR1YWwgUVJlY3RGIHdpbmRvd1JlY3QoY29uc3QgUVJlY3RGJiB3aW5k
b3dSZWN0KSBjb25zdDsKKyAgICB2aXJ0dWFsIFFSZWN0RiBwYWdlUmVjdChjb25zdCBRUmVjdEYm
IHBhZ2VSZWN0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBpbm5lckhlaWdodChpbnQgaGVpZ2h0
LCBpbnQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgaW5uZXJXaWR0aChpbnQg
d2lkdGgsIGludCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxYKGlu
dCBzY3JvbGxYLCBpbnQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xs
WShpbnQgc2Nyb2xsWSwgaW50IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgUVJlY3RG
IHNjcmVlblJlY3QoY29uc3QgUVJlY3RGJiBzY3JlZW5SZWN0KSBjb25zdDsKKyAgICB2aXJ0dWFs
IGludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChpbnQgYml0c1BlckNvbXBvbmVudCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHNjcmVlbklzTW9ub2Nocm9tZShib29sIGlzTW9ub2Nocm9tZSkg
Y29uc3Q7CisKKyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDsK
KyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ7Cit9OworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKaW5kZXggZThhMjNkZjZlYzdjZDE1ZDEzYTk3NTViYWY0NzY0NTNiYWU2Mjgw
Yy4uMmMyZWE5ZDljMDJkYWI1ZDFmNmFiMDQ2YmVlZGI4OWM4Mzk0YzNiMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw1MSBAQAorMjAxMS0wMy0xOCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIEFQSSAtIFFXZWJVc2VyRW52aXJvbm1lbnQKKworICAgICAgICBUaGUgUVdlYlVzZXJF
bnZpcm9ubWVudCBjbGFzcyBwcm92aWRlcyBhbiBvYmplY3QgdG8gY29udHJvbCB0aGUgcXVhbGl0
eSBvZiBpbmZvcm1hdGlvbgorICAgICAgICBhYm91dCB0aGUgdXNlciwgYnJvd3NpbmcgaGlzdG9y
eSwgYW5kIGRlc2t0b3AgZW52aXJvbm1lbnQgZXhwb3NlZCB0byB3ZWJzaXRlcyBieSB0aGUgRE9N
CisgICAgICAgIGFuZCBDU1Mgc3R5bGUgc2hlZXRzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjY3OAorCisgICAgICAgICogQXBpL2hlYWRlcnMu
cHJpOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZh
dGU6OlFXZWJQYWdlUHJpdmF0ZSk6CisgICAgICAgIChRV2ViUGFnZTo6c2V0V2ViVXNlckVudmly
b25tZW50KToKKyAgICAgICAgKFFXZWJQYWdlOjp3ZWJVc2VyRW52aXJvbm1lbnQpOgorICAgICAg
ICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIEFwaS9xd2VicGFnZV9wLmg6CisgICAgICAg
ICogQXBpL3F3ZWJ1c2VyZW52aXJvbm1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFXZWJVc2Vy
RW52aXJvbm1lbnQ6OlFXZWJVc2VyRW52aXJvbm1lbnQpOgorICAgICAgICAoUVdlYlVzZXJFbnZp
cm9ubWVudDo6flFXZWJVc2VyRW52aXJvbm1lbnQpOgorICAgICAgICAoUVdlYlVzZXJFbnZpcm9u
bWVudDo6cmVmZXJyZXIpOgorICAgICAgICAoUVdlYlVzZXJFbnZpcm9ubWVudDo6d2luZG93TmFt
ZSk6CisgICAgICAgIChRV2ViVXNlckVudmlyb25tZW50OjpoaXN0b3J5TGVuZ3RoKToKKyAgICAg
ICAgKFFXZWJVc2VyRW52aXJvbm1lbnQ6OndpbmRvd1JlY3QpOgorICAgICAgICAoUVdlYlVzZXJF
bnZpcm9ubWVudDo6cGFnZVJlY3QpOgorICAgICAgICAoUVdlYlVzZXJFbnZpcm9ubWVudDo6aW5u
ZXJIZWlnaHQpOgorICAgICAgICAoUVdlYlVzZXJFbnZpcm9ubWVudDo6aW5uZXJXaWR0aCk6Cisg
ICAgICAgIChRV2ViVXNlckVudmlyb25tZW50OjpzY3JvbGxYKToKKyAgICAgICAgKFFXZWJVc2Vy
RW52aXJvbm1lbnQ6OnNjcm9sbFkpOgorICAgICAgICAoUVdlYlVzZXJFbnZpcm9ubWVudDo6c2Ny
ZWVuUmVjdCk6CisgICAgICAgIChRV2ViVXNlckVudmlyb25tZW50OjpzY3JlZW5EZXB0aFBlckNv
bXBvbmVudCk6CisgICAgICAgIChRV2ViVXNlckVudmlyb25tZW50OjpzY3JlZW5Jc01vbm9jaHJv
bWUpOgorICAgICAgICAqIEFwaS9xd2VidXNlcmVudmlyb25tZW50Lmg6IEFkZGVkLgorICAgICAg
ICAqIFF0V2ViS2l0LnBybzoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6d2luZG93UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6cGFnZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21lQ2xpZW50UXQ6OnNjcmVlblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21lQ2xpZW50UXQ6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudFF0OjpzY3JlZW5Jc01vbm9jaHJvbWUpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFF0Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0
OjpyZWZlcnJlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojp3aW5k
b3dOYW1lKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0Lmg6
CisKIDIwMTEtMDMtMTcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L1F0V2ViS2l0LnBybyBiL1NvdXJjZS9XZWJLaXQvcXQvUXRXZWJLaXQucHJvCmluZGV4IDRiN2Ji
MDVhMjA5ZmY5MTI5YjM5ODY1NDI1NTA1YzU1NTkwNDZkMGMuLjNhMTIwMjY3OTg2NjYzOWViNGEz
Y2M0MWJlMmYzYzZlYmZjZTE2NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvUXRXZWJL
aXQucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvUXRXZWJLaXQucHJvCkBAIC0xNTMsNiArMTUz
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgJCRQV0QvQXBpL3F3ZWJkYXRhYmFzZS5jcHAgXAogICAg
ICQkUFdEL0FwaS9xd2ViaW5zcGVjdG9yLmNwcCBcCiAgICAgJCRQV0QvQXBpL3F3ZWJraXR2ZXJz
aW9uLmNwcCBcCisgICAgJCRQV0QvQXBpL3F3ZWJ1c2VyZW52aXJvbm1lbnQuY3BwIFwKICAgICBc
CiAgICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmNwcCBcCiAgICAg
JCRQV0QvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKaW5kZXggYWNmYTY2
NDRmYTBjMzI2MDY0NDBlYmJjYWNjZWRkMjI4YjQ0MTlmNS4uMmYxYzIwMGFmOWI5MjgxYjQ5M2M3
MDgzM2ZmODMzN2EzODljYWFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKQEAgLTEyNCw2ICsxMjQsOSBAQCBGbG9hdFJlY3Qg
Q2hyb21lQ2xpZW50UXQ6OndpbmRvd1JlY3QoKQogewogICAgIGlmICghcGxhdGZvcm1QYWdlQ2xp
ZW50KCkpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICBpZiAobV93ZWJQYWdlICYm
IG1fd2ViUGFnZS0+d2ViVXNlckVudmlyb25tZW50KCkpCisgICAgICAgIHJldHVybiBtX3dlYlBh
Z2UtPndlYlVzZXJFbnZpcm9ubWVudCgpLT53aW5kb3dSZWN0KHBsYXRmb3JtUGFnZUNsaWVudCgp
LT53aW5kb3dSZWN0KCkpOworCiAgICAgcmV0dXJuIHBsYXRmb3JtUGFnZUNsaWVudCgpLT53aW5k
b3dSZWN0KCk7CiB9CiAKQEAgLTEzMSw5ICsxMzQsMzcgQEAgRmxvYXRSZWN0IENocm9tZUNsaWVu
dFF0OjpwYWdlUmVjdCgpCiB7CiAgICAgaWYgKCFtX3dlYlBhZ2UpCiAgICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKKworICAgIGlmIChtX3dlYlBhZ2UtPndlYlVzZXJFbnZpcm9ubWVudCgpKQor
ICAgICAgICByZXR1cm4gbV93ZWJQYWdlLT53ZWJVc2VyRW52aXJvbm1lbnQoKS0+cGFnZVJlY3Qo
UVJlY3RGKFFQb2ludEYoMCwgMCksIG1fd2ViUGFnZS0+dmlld3BvcnRTaXplKCkpKTsKKwogICAg
IHJldHVybiBGbG9hdFJlY3QoUVJlY3RGKFFQb2ludEYoMCwgMCksIG1fd2ViUGFnZS0+dmlld3Bv
cnRTaXplKCkpKTsKIH0KIAorRmxvYXRSZWN0IENocm9tZUNsaWVudFF0OjpzY3JlZW5SZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV93ZWJQYWdlICYmIG1fd2ViUGFnZS0+
d2ViVXNlckVudmlyb25tZW50KCkpCisgICAgICAgIHJldHVybiBtX3dlYlBhZ2UtPndlYlVzZXJF
bnZpcm9ubWVudCgpLT5zY3JlZW5SZWN0KFFSZWN0RihyZWN0KSk7CisKKyAgICByZXR1cm4gcmVj
dDsKK30KKworaW50IENocm9tZUNsaWVudFF0OjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudChpbnQg
Yml0c1BlckNvbXBvbmVudCkKK3sKKyAgICBpZiAobV93ZWJQYWdlICYmIG1fd2ViUGFnZS0+d2Vi
VXNlckVudmlyb25tZW50KCkpCisgICAgICAgIHJldHVybiBtX3dlYlBhZ2UtPndlYlVzZXJFbnZp
cm9ubWVudCgpLT5zY3JlZW5EZXB0aFBlckNvbXBvbmVudChiaXRzUGVyQ29tcG9uZW50KTsKKwor
ICAgIHJldHVybiBiaXRzUGVyQ29tcG9uZW50OworfQorCitib29sIENocm9tZUNsaWVudFF0Ojpz
Y3JlZW5Jc01vbm9jaHJvbWUoYm9vbCBpc01vbm9jaHJvbWUpCit7CisgICAgaWYgKG1fd2ViUGFn
ZSAmJiBtX3dlYlBhZ2UtPndlYlVzZXJFbnZpcm9ubWVudCgpKQorICAgICAgICByZXR1cm4gbV93
ZWJQYWdlLT53ZWJVc2VyRW52aXJvbm1lbnQoKS0+c2NyZWVuSXNNb25vY2hyb21lKGlzTW9ub2No
cm9tZSk7CisKKyAgICByZXR1cm4gaXNNb25vY2hyb21lOworfQorCiBmbG9hdCBDaHJvbWVDbGll
bnRRdDo6c2NhbGVGYWN0b3IoKQogewogICAgIGlmICghbV93ZWJQYWdlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCmluZGV4IGExMmMyZWNl
NzVlMzQzMmEyZjI2YzEzOTYwMjNiMzI1NDY3ZDIyMGMuLmFiODVmZjE3ZTUzMDNiNDFjMTFjNDYw
Mjc0MmE4ZjViZDZlYzM3MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFF0LmgKQEAgLTY1LDcgKzY1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgd2luZG93UmVjdCgpOwogCiAgICAgICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHBhZ2VSZWN0KCk7Ci0KKyAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
c2NyZWVuUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBpbnQgc2NyZWVu
RGVwdGhQZXJDb21wb25lbnQoaW50IGJpdHNQZXJDb21wb25lbnQpOworICAgICAgICB2aXJ0dWFs
IGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKGJvb2wgaXNNb25vY2hyb21lKTsKKyAKICAgICAgICAg
dmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBmb2N1
cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRRdC5jcHAKaW5kZXggMjdlZDdlZDRhZDAzMmI5NmU3N2Q2ZjdjNWY5OGYwMjgz
ZTUzZDQ5Yy4uMWI2ZTJiM2Q4M2FmNzA2MWEwN2M5MjBmYTlhZGIwYzcyZTExNzdiNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuY3BwCkBAIC03MzIsNiArNzMyLDIyIEBAIFN0cmluZyBGcmFtZUxvYWRlckNsaWVudFF0
Ojp1c2VyQWdlbnQoY29uc3QgS1VSTCYgdXJsKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAor
U3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnJlZmVycmVyKGNvbnN0IFN0cmluZyYgcmVmZXJy
ZXIpCit7CisgICAgaWYgKG1fd2ViRnJhbWUgJiYgbV93ZWJGcmFtZS0+cGFnZSgpLT53ZWJVc2Vy
RW52aXJvbm1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViRnJhbWUtPnBhZ2UoKS0+d2ViVXNl
ckVudmlyb25tZW50KCktPnJlZmVycmVyKHJlZmVycmVyKTsKKworICAgIHJldHVybiByZWZlcnJl
cjsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OndpbmRvd05hbWUoY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGlmIChtX3dlYkZyYW1lICYmIG1fd2ViRnJhbWUtPnBhZ2UoKS0+
d2ViVXNlckVudmlyb25tZW50KCkpCisgICAgICAgIHJldHVybiBtX3dlYkZyYW1lLT5wYWdlKCkt
PndlYlVzZXJFbnZpcm9ubWVudCgpLT53aW5kb3dOYW1lKG5hbWUpOworCisgICAgcmV0dXJuIG5h
bWU7Cit9CisKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNv
bigpCiB7CiAgICAgaWYgKG1fd2ViRnJhbWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKaW5kZXggMDMzMzU5OWMzN2Rk
YjhmMzU5ODZiYTEyN2Y3OTg1NzljNzVlZGZhZC4uMThmM2M4ZDhmNTVjNjExZTkyNGMyMGUyM2Y1
ZjdmN2ZhYzAxNTk3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKQEAgLTE4OSw2ICsxODksOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IEtVUkwm
KTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2VudChjb25zdCBXZWJDb3JlOjpLVVJMJik7
CisgICAgdmlydHVhbCBTdHJpbmcgcmVmZXJyZXIoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVh
bCBTdHJpbmcgd2luZG93TmFtZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBz
YXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZShXZWJDb3JlOjpDYWNoZWRGcmFtZSopOwogICAg
IHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2FjaGVkRnJhbWUoV2ViQ29y
ZTo6Q2FjaGVkRnJhbWUqKTsK
</data>
<flag name="review"
          id="78452"
          type_id="1"
          status="-"
          setter="vestbo"
    />
          </attachment>
      

    </bug>

</bugzilla>