<?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>35927</bug_id>
          
          <creation_ts>2010-03-09 10:24:07 -0800</creation_ts>
          <short_desc>Add IndexedDatabase class and plumbing out of Chromium port</short_desc>
          <delta_ts>2010-03-10 09:09:35 -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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>fishd</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>197652</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-09 10:24:07 -0800</bug_when>
    <thetext>This change is mostly just adding the plumbing necessary for the IndexedDatabaseRequest and IndexedDatabaseSync (not written yet).

This code is non-functional, so no tests (yet).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197656</commentid>
    <comment_count>1</comment_count>
      <attachid>50326</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-09 10:27:06 -0800</bug_when>
    <thetext>Created attachment 50326
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197658</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-09 10:31:09 -0800</bug_when>
    <thetext>Attachment 50326 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/storage/IndexedDatabaseImpl.cpp:47:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/storage/IndexedDatabaseImpl.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 16 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>197798</commentid>
    <comment_count>3</comment_count>
      <attachid>50326</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-09 15:05:04 -0800</bug_when>
    <thetext>Comment on attachment 50326
patch

&gt; +++ b/WebCore/platform/chromium/ChromiumBridge.h
...
&gt; +        // IndexedDB ----------------------------------------------------------
&gt; +        static PassRefPtr&lt;IndexedDatabase&gt; getIndexedDatabase();

ordinarily, we drop the &quot;get&quot; prefix for accessors like this.  it should just be
indexedDatabase().


&gt; +++ b/WebCore/storage/IndexedDatabase.h
...
&gt; +namespace WebCore {
&gt; +
&gt; +class IndexedDatabase : public ThreadSafeShared&lt;IndexedDatabase&gt; {

It might helpful to add some comments here about the threading model.


&gt; +++ b/WebCore/storage/IndexedDatabaseImpl.cpp
...
&gt; +namespace WebCore {
&gt; +
&gt; +IndexedDatabaseImpl* IndexedDatabaseImpl::s_indexedDatabaseImpl = 0;

I didn&apos;t think it was WebKit style to use the &quot;s_&quot; prefix.  I prefer it
myself since I think it helps code readability.  Do you know if there
is any rule about this?


&gt; +
&gt; +PassRefPtr&lt;IndexedDatabaseImpl&gt; IndexedDatabaseImpl::get()
&gt; +{
&gt; +    if (!s_indexedDatabaseImpl)
&gt; +        s_indexedDatabaseImpl = new IndexedDatabaseImpl();
&gt; +    ASSERT(s_indexedDatabaseImpl);
&gt; +    return s_indexedDatabaseImpl;
&gt; +}
&gt; +
&gt; +IndexedDatabaseImpl::IndexedDatabaseImpl() {
&gt; +    // FIXME: Make this thread safe.
&gt; +    ASSERT(!s_indexedDatabaseImpl);
&gt; +    s_indexedDatabaseImpl = this;
&gt; +}
&gt; +
&gt; +IndexedDatabaseImpl::~IndexedDatabaseImpl() {

brackets on the next line.


&gt; +++ b/WebKit/chromium/public/WebKitClient.h

&gt; -    // Database ------------------------------------------------------------
&gt; +    // HTML5 Database ------------------------------------------------------

&quot;SQL Database&quot; would be better since this API is not part of HTML5.


&gt; +    // Indexed Database ----------------------------------------------------
&gt; +
&gt; +    virtual WebIndexedDatabase* getIndexedDatabase() { return 0; }

indexedDatabase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197799</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-09 15:05:28 -0800</bug_when>
    <thetext>Those are just style nits.  The patch looks great otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197805</commentid>
    <comment_count>5</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-09 15:24:36 -0800</bug_when>
    <thetext>Given that we&apos;re in different time zones and there are many more patches coming where I can clean up other issues if they arise, can I get a r+ please?

As for s_ IIRC, this is one of the accepted styles, but not the preferred one.  I&apos;ll figure out which is preferred and change it, but I still think s_ is much better than any of the other ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198143</commentid>
    <comment_count>6</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-10 08:00:19 -0800</bug_when>
    <thetext>&gt; &gt; +++ b/WebCore/storage/IndexedDatabaseImpl.cpp
&gt; ...
&gt; &gt; +namespace WebCore {
&gt; &gt; +
&gt; &gt; +IndexedDatabaseImpl* IndexedDatabaseImpl::s_indexedDatabaseImpl = 0;
&gt; 
&gt; I didn&apos;t think it was WebKit style to use the &quot;s_&quot; prefix.  I prefer it
&gt; myself since I think it helps code readability.  Do you know if there
&gt; is any rule about this?

There isn&apos;t.  More code justUsesThisStyle.  Some uses s_.  I think using local variable syntax is really terrible for readability, but I&apos;ll change it since you asked.

&gt; 
&gt; 
&gt; &gt; +++ b/WebKit/chromium/public/WebKitClient.h
&gt; 
&gt; &gt; -    // Database ------------------------------------------------------------
&gt; &gt; +    // HTML5 Database ------------------------------------------------------
&gt; 
&gt; &quot;SQL Database&quot; would be better since this API is not part of HTML5.

I added the HTML 5 because it&apos;s out of order alphabetically without it (and that&apos;s what the other file has).  If we wanted to change it, it probably should be in a subsequent patch that moves the code as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198167</commentid>
    <comment_count>7</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-10 09:09:35 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/55784</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50326</attachid>
            <date>2010-03-09 10:27:06 -0800</date>
            <delta_ts>2010-03-09 15:55:28 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27895</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWUyZWNjNC4uNjAxNmZiYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwzNSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIEFkZCBJbmRleGVkRGF0YWJhc2UgY2xhc3MgYW5kIGhv
b2sgaXQgdXAuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTkyNworCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIG1vc3RseSBqdXN0IGFkZGluZyB0aGUg
cGx1bWJpbmcgbmVjZXNzYXJ5IGZvcgorICAgICAgICB0aGUgSW5kZXhlZERhdGFiYXNlUmVxdWVz
dCBhbmQgSW5kZXhlZERhdGFiYXNlU3luYyAobm90IHdyaXR0ZW4KKyAgICAgICAgeWV0KS4KKwor
ICAgICAgICBUaGlzIGNvZGUgaXMgbm9uLWZ1bmN0aW9uYWwsIHNvIG5vIHRlc3RzICh5ZXQpLgor
CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6CisgICAg
ICAgICogc3RvcmFnZS9JbmRleGVkRGF0YWJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkluZGV4ZWREYXRhYmFzZTo6Z2V0KToKKyAgICAgICAgKiBzdG9yYWdlL0luZGV4ZWREYXRh
YmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkluZGV4ZWREYXRhYmFzZTo6fkluZGV4
ZWREYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VJbXBsLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbmRleGVkRGF0YWJhc2VJbXBsOjpnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5kZXhlZERhdGFiYXNlSW1wbDo6SW5kZXhlZERhdGFiYXNlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmRleGVkRGF0YWJhc2VJbXBsOjp+SW5kZXhlZERhdGFiYXNl
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleGVkRGF0YWJhc2VJbXBsOjpvcGVuKToKKyAg
ICAgICAgKiBzdG9yYWdlL0luZGV4ZWREYXRhYmFzZUltcGwuaDogQWRkZWQuCisgICAgICAgICog
c3RvcmFnZS9jaHJvbWl1bS9JbmRleGVkRGF0YWJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkluZGV4ZWREYXRhYmFzZTo6Z2V0KToKKworMjAxMC0wMy0wOSAgSmVyZW15IE9ybG93
ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKwogICAgICAgICBCYWJ5IHN0ZXBzIHRvd2FyZHMgSW5kZXhlZERCOiBTdGFydCBpbXBs
ZW1lbnRpbmcgY2FsbGJhY2tzLgogICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5k
IGJ1ZyBVUkwgKE9PUFMhKQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwIGIvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCA3YjJkZmY3Li5h
MDNlMWE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTc2Miw2ICs3NjIsOSBAQAogICAg
ICAgICAjIERvbid0IGJ1aWxkIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuICBXZSBoYXZlIG91ciBv
d24gaW1wbGVtZW50YXRpb24uCiAgICAgICAgICcuLi9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3Bh
dGNoZXIuY3BwJywKIAorICAgICAgICAjIERvbid0IGJ1aWxkIEluZGV4ZWREYXRhYmFzZS4gIFdl
IGhhdmUgb3VyIG93biBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgJy4uL3N0b3JhZ2UvSW5kZXhl
ZERhdGFiYXNlLmNwcCcsCisKICAgICAgICAgIyBVc2UgaGlzdG9yeS9CYWNrRm9yd2FyZExpc3RD
aHJvbWl1bS5jcHAgaW5zdGVhZC4KICAgICAgICAgJy4uL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0
LmNwcCcsCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggZjExMjZjZS4uMTMwMWM2YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTMyMjMsNiArMzIyMyw3IEBA
CiAgICAgICAgICAgICAnc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCcsCiAgICAgICAgICAgICAnc3Rv
cmFnZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2Uv
Y2hyb21pdW0vSW5kZXhlZERhdGFiYXNlLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9jaHJv
bWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2Uv
Y2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9jaHJvbWl1
bS9RdW90YVRyYWNrZXIuaCcsCkBAIC0zMjQ0LDYgKzMyNDUsMTAgQEAKICAgICAgICAgICAgICdz
dG9yYWdlL0lEQkRhdGFiYXNlUmVxdWVzdC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQlJl
cXVlc3QuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQlJlcXVlc3QuaCcsCisgICAgICAg
ICAgICAnc3RvcmFnZS9JbmRleGVkRGF0YWJhc2UuY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdl
L0luZGV4ZWREYXRhYmFzZS5oJywKKyAgICAgICAgICAgICdzdG9yYWdlL0luZGV4ZWREYXRhYmFz
ZUltcGwuY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL0luZGV4ZWREYXRhYmFzZUltcGwuaCcs
CiAgICAgICAgICAgICAnc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmNwcCcsCiAgICAg
ICAgICAgICAnc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmgnLAogICAgICAgICAgICAg
J3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9DaHJvbWl1bUJyaWRnZS5oCmluZGV4IGY2NzJkMTEuLjllYjQxOTYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKQEAgLTU3LDYgKzU3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwogICAg
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKICAgICBjbGFzcyBJbWFnZTsKKyAgICBjbGFzcyBJbmRl
eGVkRGF0YWJhc2U7CiAgICAgY2xhc3MgSW50UmVjdDsKICAgICBjbGFzcyBLVVJMOwogICAgIGNs
YXNzIFN0cmluZzsKQEAgLTEzNiw2ICsxMzcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHN0YXRpYyBsb25nIGxvbmcgZGF0YWJhc2VHZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHZm
c0ZpbGVOYW1lKTsKICNlbmRpZgogCisgICAgICAgIC8vIEluZGV4ZWREQiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluZGV4ZWREYXRhYmFzZT4gZ2V0SW5kZXhlZERhdGFiYXNlKCk7CisK
ICAgICAgICAgLy8gSmF2YVNjcmlwdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgc3RhdGljIHZvaWQgbm90aWZ5SlNPdXRP
Zk1lbW9yeShGcmFtZSopOwogICAgICAgICBzdGF0aWMgYm9vbCBhbGxvd1NjcmlwdERlc3BpdGVT
ZXR0aW5ncyhjb25zdCBLVVJMJiBkb2N1bWVudFVSTCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0
b3JhZ2UvSW5kZXhlZERhdGFiYXNlLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJh
c2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NzQ5NGUKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlLmNwcApAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmRleGVkRGF0YWJhc2Uu
aCIKKworI2luY2x1ZGUgIkluZGV4ZWREYXRhYmFzZUltcGwuaCIKKworI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQorI2Vycm9yICJDaHJvbWl1bSBzaG91bGQgbm90IGNvbXBpbGUgdGhpcyBmaWxlIGFu
ZCBpbnN0ZWFkIGRlZmluZSBpdHMgb3duIHZlcnNpb24gb2YgdGhpcyBmYWN0b3J5IHRoYXQgbmF2
aWdhdGVzIHRoZSBtdWx0aS1wcm9jZXNzIGJvdW5kcnkuIgorI2VuZGlmCisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElu
ZGV4ZWREYXRhYmFzZT4gSW5kZXhlZERhdGFiYXNlOjpnZXQoKQoreworICAgIHJldHVybiBJbmRl
eGVkRGF0YWJhc2VJbXBsOjpnZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
c3RvcmFnZS9JbmRleGVkRGF0YWJhc2UuaCBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJh
c2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTY5MWJiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZS5oCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworI2lmbmRlZiBJbmRleGVkRGF0YWJhc2VfaAorI2RlZmluZSBJbmRleGVkRGF0YWJhc2Vf
aAorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5kZXhlZERhdGFiYXNlIDog
cHVibGljIFRocmVhZFNhZmVTaGFyZWQ8SW5kZXhlZERhdGFiYXNlPiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5kZXhlZERhdGFiYXNlPiBnZXQoKTsKKyAgICB2aXJ0dWFsIH5J
bmRleGVkRGF0YWJhc2UoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgYm9vbCBtb2RpZnlEYXRhYmFzZSwg
RXhjZXB0aW9uQ29kZSYpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCisKKyNlbmRpZiAvLyBJbmRleGVkRGF0YWJhc2VfaAorCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlSW1wbC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhl
ZERhdGFiYXNlSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhh
MjgxNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VJ
bXBsLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bmRleGVkRGF0YWJhc2VJbXBsLmgiCisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbmRl
eGVkRGF0YWJhc2VJbXBsKiBJbmRleGVkRGF0YWJhc2VJbXBsOjpzX2luZGV4ZWREYXRhYmFzZUlt
cGwgPSAwOworCitQYXNzUmVmUHRyPEluZGV4ZWREYXRhYmFzZUltcGw+IEluZGV4ZWREYXRhYmFz
ZUltcGw6OmdldCgpCit7CisgICAgaWYgKCFzX2luZGV4ZWREYXRhYmFzZUltcGwpCisgICAgICAg
IHNfaW5kZXhlZERhdGFiYXNlSW1wbCA9IG5ldyBJbmRleGVkRGF0YWJhc2VJbXBsKCk7CisgICAg
QVNTRVJUKHNfaW5kZXhlZERhdGFiYXNlSW1wbCk7CisgICAgcmV0dXJuIHNfaW5kZXhlZERhdGFi
YXNlSW1wbDsKK30KKworSW5kZXhlZERhdGFiYXNlSW1wbDo6SW5kZXhlZERhdGFiYXNlSW1wbCgp
IHsKKyAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHRocmVhZCBzYWZlLgorICAgIEFTU0VSVCghc19p
bmRleGVkRGF0YWJhc2VJbXBsKTsKKyAgICBzX2luZGV4ZWREYXRhYmFzZUltcGwgPSB0aGlzOwor
fQorCitJbmRleGVkRGF0YWJhc2VJbXBsOjp+SW5kZXhlZERhdGFiYXNlSW1wbCgpIHsKKyAgICAv
LyBGSVhNRTogTWFrZSB0aGlzIHRocmVhZCBzYWZlLgorICAgIEFTU0VSVChzX2luZGV4ZWREYXRh
YmFzZUltcGwgPT0gdGhpcyk7CisgICAgc19pbmRleGVkRGF0YWJhc2VJbXBsID0gMDsKK30KKwor
dm9pZCBJbmRleGVkRGF0YWJhc2VJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBkZXNjcmlwdGlvbiwgYm9vbCBtb2RpZnlEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYp
Cit7CisgICAgLy8gRklYTUU6IFdyaXRlLgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZUltcGwuaCBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVk
RGF0YWJhc2VJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxOGRl
ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VJbXBs
LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIEluZGV4ZWREYXRhYmFzZUltcGxfaAorI2RlZmlu
ZSBJbmRleGVkRGF0YWJhc2VJbXBsX2gKKworI2luY2x1ZGUgIkluZGV4ZWREYXRhYmFzZS5oIgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSW5kZXhlZERhdGFiYXNlSW1wbCA6IHB1YmxpYyBJbmRleGVkRGF0YWJhc2UgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4ZWREYXRhYmFzZUltcGw+IGdldCgpOwor
ICAgIHZpcnR1YWwgfkluZGV4ZWREYXRhYmFzZUltcGwoKTsKKworICAgIHZpcnR1YWwgdm9pZCBv
cGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgYm9vbCBt
b2RpZnlEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYpOworCitwcml2YXRlOgorICAgIEluZGV4ZWRE
YXRhYmFzZUltcGwoKTsKKworICAgIC8vIFdlIG9ubHkgY3JlYXRlIG9uZSBpbnN0YW5jZSBvZiB0
aGlzIGNsYXNzIGF0IGEgdGltZS4KKyAgICBzdGF0aWMgSW5kZXhlZERhdGFiYXNlSW1wbCogc19p
bmRleGVkRGF0YWJhc2VJbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKKworI2VuZGlmIC8vIEluZGV4ZWREYXRhYmFzZUltcGxfaAorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3N0b3JhZ2UvY2hyb21pdW0vSW5kZXhlZERhdGFiYXNlLmNwcCBiL1dlYkNvcmUvc3RvcmFn
ZS9jaHJvbWl1bS9JbmRleGVkRGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmVmMDRjZDIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvY2hy
b21pdW0vSW5kZXhlZERhdGFiYXNlLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbmRleGVkRGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIkNocm9taXVt
QnJpZGdlLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPEluZGV4ZWREYXRhYmFzZT4gSW5kZXhlZERhdGFiYXNlOjpn
ZXQoKQoreworICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Z2V0SW5kZXhlZERhdGFiYXNlKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA2YmRiNGZmLi4xNGRmZTdkIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wMy0wOSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgSW5kZXhlZERhdGFiYXNlIGNsYXNzIGFuZCBob29rIGl0IHVwLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU5MjcKKworICAgICAgICBU
aGlzIGNoYW5nZSBpcyBtb3N0bHkganVzdCBhZGRpbmcgdGhlIHBsdW1iaW5nIG5lY2Vzc2FyeSBm
b3IKKyAgICAgICAgdGhlIEluZGV4ZWREYXRhYmFzZVJlcXVlc3QgYW5kIEluZGV4ZWREYXRhYmFz
ZVN5bmMgKG5vdCB3cml0dGVuCisgICAgICAgIHlldCkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lw
OgorICAgICAgICAqIHB1YmxpYy9XZWJJbmRleGVkRGF0YWJhc2UuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkluZGV4ZWREYXRhYmFzZTo6fldlYkluZGV4ZWREYXRhYmFzZSk6CisgICAg
ICAgICogcHVibGljL1dlYktpdENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRDbGll
bnQ6OmdldEluZGV4ZWREYXRhYmFzZSk6CisgICAgICAgICogc3JjL0Nocm9taXVtQnJpZGdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpnZXRJbmRleGVkRGF0YWJhc2Up
OgorICAgICAgICAqIHNyYy9JbmRleGVkRGF0YWJhc2VQcm94eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW5kZXhlZERhdGFiYXNlUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbmRleGVkRGF0YWJhc2VQcm94eTo6SW5kZXhlZERhdGFiYXNlUHJveHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5kZXhlZERhdGFiYXNlUHJveHk6On5JbmRleGVkRGF0YWJhc2VQcm94eSk6
CisgICAgICAgIChXZWJDb3JlOjpJbmRleGVkRGF0YWJhc2VQcm94eTo6b3Blbik6CisgICAgICAg
ICogc3JjL0luZGV4ZWREYXRhYmFzZVByb3h5Lmg6IEFkZGVkLgorCiAyMDEwLTAzLTA4ICBKZXJl
bXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMGJlZjQ3My4uM2YzYjlmYiAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAKQEAgLTEyNiw2ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSFRU
UEJvZHkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbWFnZS5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkltYWdlRGVjb2Rlci5oJywKKyAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkluZGV4ZWREYXRhYmFzZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYklu
cHV0RWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYklucHV0RXZlbnQuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJLaXQuaCcsCkBAIC0yNDAsNiArMjQxLDggQEAK
ICAgICAgICAgICAgICAgICAnc3JjL2d0ay9XZWJGb250SW5mby5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvZ3RrL1dlYkZvbnRJbmZvLmgnLAogICAgICAgICAgICAgICAgICdzcmMvZ3RrL1dl
YklucHV0RXZlbnRGYWN0b3J5LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9JbmRleGVkRGF0
YWJhc2VQcm94eS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvSW5kZXhlZERhdGFiYXNlUHJv
eHkuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgnLAogICAgICAgICAgICAg
ICAgICdzcmMvbGludXgvV2ViRm9udFJlbmRlcmluZy5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJbmRleGVkRGF0YWJhc2UuaCBiL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSW5kZXhlZERhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMjE0ODJiNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViSW5kZXhlZERhdGFiYXNlLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFdlYkluZGV4ZWRE
YXRhYmFzZV9oCisjZGVmaW5lIFdlYkluZGV4ZWREYXRhYmFzZV9oCisKKyNpbmNsdWRlICJXZWJD
b21tb24uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlN0cmluZzsKKworLy8g
VGhlIGVudHJ5IHBvaW50IGludG8gdGhlIEluZGV4ZWREYXRhYmFzZSBBUEkuICBUaGVzZSBjbGFz
c2VzIG1hdGNoIHRoZWlyIF9fX19fUmVxdWVzdCBhbmQKKy8vIF9fX19fU3luYyBjb3VudGVycGFy
dHMgaW4gdGhlIHNwZWMsIGJ1dCBvcGVyYXRlIG9ubHkgaW4gYW4gYXN5bmMgbWFubmVyLgorLy8g
aHR0cDovL2Rldi53My5vcmcvMjAwNi93ZWJhcGkvV2ViU2ltcGxlREIvCitjbGFzcyBXZWJJbmRl
eGVkRGF0YWJhc2UgeworcHVibGljOgorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZW50cnkgYmFj
ayBpbnRvIFdlYktpdCBmb3IgdGhpcyBBUEkuCisKKyAgICB2aXJ0dWFsIH5XZWJJbmRleGVkRGF0
YWJhc2UoKSB7IH0KKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZXR1cm4gYW4gQXN5bmNS
ZXR1cm48PiBvYmplY3QuCisgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgV2ViU3RyaW5nJiBu
YW1lLCBjb25zdCBXZWJTdHJpbmcmIGRlc2NyaXB0aW9uLCBib29sIG1vZGlmeURhdGFiYXNlLCBp
bnQmIGV4Y2VwdGlvbkNvZGUpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gV2ViU3RvcmFnZU5hbWVzcGFjZV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYktpdENsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRD
bGllbnQuaAppbmRleCAwNDI4MzNiLi5lMTg2MzI5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYktpdENsaWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
S2l0Q2xpZW50LmgKQEAgLTQ5LDYgKzQ5LDcgQEAgY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhv
c3Q7CiBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudDsKIGNsYXNzIFdlYkNsaXBi
b2FyZDsKIGNsYXNzIFdlYkNvb2tpZUphcjsKK2NsYXNzIFdlYkluZGV4ZWREYXRhYmFzZTsKIGNs
YXNzIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbDsKIGNsYXNzIFdlYk1pbWVSZWdpc3RyeTsKIGNsYXNz
IFdlYlBsdWdpbkxpc3RCdWlsZGVyOwpAQCAtMTI3LDcgKzEyOCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgaXNMaW5rVmlzaXRlZCh1bnNpZ25lZCBsb25nIGxvbmcgbGlua0hhc2gpIHsg
cmV0dXJuIGZhbHNlOyB9CiAKIAotICAgIC8vIERhdGFiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhUTUw1IERh
dGFiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiAjaWZkZWYgV0lOMzIKICAgICB0eXBlZGVmIEhBTkRMRSBGaWxlSGFuZGxlOwpAQCAt
MTUwLDYgKzE1MSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBsb25nIGxvbmcgZGF0YWJhc2VH
ZXRGaWxlU2l6ZShjb25zdCBXZWJTdHJpbmcmIHZmc0ZpbGVOYW1lKSB7IHJldHVybiAwOyB9CiAK
IAorICAgIC8vIEluZGV4ZWQgRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmlydHVhbCBXZWJJbmRleGVkRGF0YWJhc2Uq
IGdldEluZGV4ZWREYXRhYmFzZSgpIHsgcmV0dXJuIDA7IH0KKworCiAgICAgLy8gS2V5Z2VuIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKICAgICAvLyBIYW5kbGUgdGhlIDxrZXlnZW4+IHRhZyBmb3IgZ2VuZXJhdGluZyBjbGll
bnQgY2VydGlmaWNhdGVzCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVt
QnJpZGdlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwCmluZGV4
IDY3ODExYmQuLjVlNmIwYjMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21p
dW1CcmlkZ2UuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3Bw
CkBAIC03Nyw2ICs3Nyw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbmRleGVkRGF0YWJhc2VQcm94eS5oIgogI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dFNraWEuaCIKQEAgLTM4OSw2ICszOTAsMTUgQEAgbG9uZyBsb25nIENocm9taXVtQnJpZGdlOjpk
YXRhYmFzZUdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCiB9CiAjZW5kaWYK
IAorLy8gSW5kZXhlZCBEYXRhYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEluZGV4ZWREYXRhYmFzZT4g
Q2hyb21pdW1CcmlkZ2U6OmdldEluZGV4ZWREYXRhYmFzZSgpCit7CisgICAgLy8gVGhlcmUncyBu
byByZWFzb24gd2h5IHdlIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgcHJveHkgZWFjaCB0aW1lLCBi
dXQKKyAgICAvLyB0aGVyZSdzIGFsc28gbm8gc3Ryb25nIHJlYXNvbiBub3QgdG8uCisgICAgcmV0
dXJuIEluZGV4ZWREYXRhYmFzZVByb3h5OjpjcmVhdGUoKTsKK30KKwogLy8gS2V5Z2VuIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxs
ZW5nZVN0cmluZygKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5kZXhlZERhdGFi
YXNlUHJveHkuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JbmRleGVkRGF0YWJhc2VQcm94eS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA5ODY0MQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5kZXhlZERhdGFiYXNlUHJveHkuY3BwCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZGV4ZWREYXRh
YmFzZVByb3h5LmgiCisKKyNpbmNsdWRlICJXZWJJbmRleGVkRGF0YWJhc2UuaCIKKyNpbmNsdWRl
ICJXZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SW5kZXhl
ZERhdGFiYXNlPiBJbmRleGVkRGF0YWJhc2VQcm94eTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEluZGV4ZWREYXRhYmFzZVByb3h5KCkpOworfQorCitJbmRleGVkRGF0YWJh
c2VQcm94eTo6SW5kZXhlZERhdGFiYXNlUHJveHkoKQorICAgIDogbV93ZWJJbmRleGVkRGF0YWJh
c2UoV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+Z2V0SW5kZXhlZERhdGFiYXNlKCkpCit7Cit9CisK
K0luZGV4ZWREYXRhYmFzZVByb3h5Ojp+SW5kZXhlZERhdGFiYXNlUHJveHkoKQoreworfQorCit2
b2lkIEluZGV4ZWREYXRhYmFzZVByb3h5OjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBkZXNjcmlwdGlvbiwgYm9vbCBtb2RpZnlEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgbV93ZWJJbmRleGVkRGF0YWJhc2UtPm9wZW4obmFtZSwgZGVzY3JpcHRpb24s
IG1vZGlmeURhdGFiYXNlLCBlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL0luZGV4ZWREYXRhYmFzZVByb3h5LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lu
ZGV4ZWREYXRhYmFzZVByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YTRiYWMyYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5kZXhlZERh
dGFiYXNlUHJveHkuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgSW5kZXhlZERhdGFiYXNlUHJv
eHlfaAorI2RlZmluZSBJbmRleGVkRGF0YWJhc2VQcm94eV9oCisKKyNpbmNsdWRlICJJbmRleGVk
RGF0YWJhc2UuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2Ug
V2ViS2l0IHsgY2xhc3MgV2ViSW5kZXhlZERhdGFiYXNlOyB9CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSW5kZXhlZERhdGFiYXNlUHJveHkgOiBwdWJsaWMgSW5kZXhlZERhdGFiYXNl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleGVkRGF0YWJhc2U+IGNyZWF0
ZSgpOworICAgIHZpcnR1YWwgfkluZGV4ZWREYXRhYmFzZVByb3h5KCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24s
IGJvb2wgbW9kaWZ5RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKyAgICBJ
bmRleGVkRGF0YWJhc2VQcm94eSgpOworCisgICAgLy8gV2UgZG9uJ3Qgb3duIHRoaXMgcG9pbnRl
ci4KKyAgICBXZWJLaXQ6OldlYkluZGV4ZWREYXRhYmFzZSogbV93ZWJJbmRleGVkRGF0YWJhc2U7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSW5k
ZXhlZERhdGFiYXNlUHJveHlfaAorCg==
</data>
<flag name="review"
          id="33434"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="33485"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>