<?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>26032</bug_id>
          
          <creation_ts>2009-05-26 15:09:07 -0700</creation_ts>
          <short_desc>Chromium needs a frameless loader for workers</short_desc>
          <delta_ts>2009-05-27 23:12:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>ap</cc>
    
    <cc>fishd</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123201</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-26 15:09:07 -0700</bug_when>
    <thetext>Since chromium loads workers in a separate process from the frame, it needs a loader which doesn&apos;t rely on frames in order to do the loading.  (This won&apos;t allow loaders to be used on other threads and is only needed for the chromium port.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123333</commentid>
    <comment_count>1</comment_count>
      <attachid>30718</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-27 15:48:08 -0700</bug_when>
    <thetext>Created attachment 30718
Proposed fix.

Although these is no chromium specific code, it is a chromium specific directory for two reasons:
1. I expect that only chromium will use it.
2. It is so similar to ResourceLoader/SubresourceLoader that to land it in the main directory those classes should be refactored but I haven&apos;t been able to figure out how to do that without adding many more virtual function calls and more complexity to those classes (which is badness).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123337</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-05-27 16:48:26 -0700</bug_when>
    <thetext>Hmm... duplication of complicated code vs. making complicated code more complex ;-)

How bad would the refactoring be?  It seems like that is the better long term solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123361</commentid>
    <comment_count>3</comment_count>
      <attachid>30718</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-27 23:11:59 -0700</bug_when>
    <thetext>Comment on attachment 30718
Proposed fix.

Withdrawing for now...

Will consider a dummy frame instead.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30718</attachid>
            <date>2009-05-27 15:48:08 -0700</date>
            <delta_ts>2009-05-27 23:11:59 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug26032.txt</filename>
            <type>text/plain</type>
            <size>46396</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGNlOThmMS4uMDA3MTAwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAwOS0wNS0yNiAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQnVnIDI2MDMyOiBDaHJvbWl1bSBuZWVkcyBhIGZyYW1lbGVzcyBsb2Fk
ZXIgZm9yIHdvcmtlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI2MDMyCisKKyAgICAgICAgQWRkIGNsYXNzZXMgd2hpY2ggYXJlIHNpbWlsYXIgdG8g
UmVzb3VyY2VMb2FkZXIgYW5kIFN1YnJlc291cmNlTG9hZGVyCisgICAgICAgIGJ1dCBkbyBub3Qg
ZGVwZW5kb24gdGhlIEZyYW1lIG9yIERvY3VtZW50LiAgVGhlc2UgYXJlIG9ubHkgZm9yIHVzZSBp
bgorICAgICAgICBjaHJvbWl1bSBmb3Igbm93IHNvIHRoYXQgaXQgY2FuIGxvYWQgcmVzb3VyY2Vz
IGZyb20gdGhlIHdvcmtlciBwcm9jZXNzLgorCisgICAgICAgIE5vIHRlc3RzIGJlY2F1c2UgaXQg
aXMgbm90IHVzZWQgeWV0LgorCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0ZyYW1lbGVzc1Jl
c291cmNlTG9hZGVyLmNwcDogQWRkZWQuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0ZyYW1l
bGVzc1Jlc291cmNlTG9hZGVyLmg6IEFkZGVkLgorICAgICAgICAqIGxvYWRlci9jaHJvbWl1bS9G
cmFtZWxlc3NSZXNvdXJjZUxvYWRlckhvc3QuaDogQWRkZWQuCisgICAgICAgICogbG9hZGVyL2No
cm9taXVtL0ZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyLmNwcDogQWRkZWQuCisgICAgICAgICog
bG9hZGVyL2Nocm9taXVtL0ZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyLmg6IEFkZGVkLgorICAg
ICAgICAqIGxvYWRlci9jaHJvbWl1bS9GcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlckNsaWVudC5o
OiBBZGRlZC4KKwogMjAwOS0wNS0yNiAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXIuY3Bw
IGIvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NTFiZWUKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9GcmFtZWxlc3NSZXNvdXJjZUxvYWRlci5jcHAK
QEAgLTAsMCArMSw0NjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgIChDKSAyMDA3IEdyYWhhbSBE
ZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZyYW1lbGVzc1Jlc291cmNlTG9hZGVyLmgiCisKKyNpbmNsdWRlICJGcmFtZWxlc3NSZXNv
dXJjZUxvYWRlckhvc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUg
IlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRnJhbWVsZXNzUmVzb3VyY2VM
b2FkZXI6OnJlc291cmNlRGF0YSgpCit7CisgICAgaWYgKG1fcmVzb3VyY2VEYXRhKQorICAgICAg
ICByZXR1cm4gbV9yZXNvdXJjZURhdGE7CisKKyAgICBpZiAoUmVzb3VyY2VIYW5kbGU6OnN1cHBv
cnRzQnVmZmVyZWREYXRhKCkgJiYgbV9oYW5kbGUpCisgICAgICAgIHJldHVybiBtX2hhbmRsZS0+
YnVmZmVyZWREYXRhKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworRnJhbWVsZXNzUmVzb3VyY2VM
b2FkZXI6OkZyYW1lbGVzc1Jlc291cmNlTG9hZGVyKEZyYW1lbGVzc1Jlc291cmNlTG9hZGVySG9z
dCogaG9zdCwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRl
bnRTbmlmZiwgYm9vbCBkZWZlcnNMb2FkaW5nKQorICAgIDogbV9ob3N0KGhvc3QpCisgICAgLCBt
X2lkZW50aWZpZXIoMCkKKyAgICAsIG1fcmVhY2hlZFRlcm1pbmFsU3RhdGUoZmFsc2UpCisgICAg
LCBtX2NhbmNlbGxlZChmYWxzZSkKKyAgICAsIG1fY2FsbGVkRGlkRmluaXNoTG9hZChmYWxzZSkK
KyAgICAsIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyhzZW5kUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKQorICAgICwgbV9zaG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQorICAg
ICwgbV9zaG91bGRCdWZmZXJEYXRhKHRydWUpCisgICAgLCBtX2RlZmVyc0xvYWRpbmcoZGVmZXJz
TG9hZGluZykKK3sKK30KKworRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6On5GcmFtZWxlc3NSZXNv
dXJjZUxvYWRlcigpCit7CisgICAgQVNTRVJUKG1fcmVhY2hlZFRlcm1pbmFsU3RhdGUpOworfQor
Cit2b2lkIEZyYW1lbGVzc1Jlc291cmNlTG9hZGVyOjpyZWxlYXNlUmVzb3VyY2VzKCkKK3sKKyAg
ICBBU1NFUlQoIW1fcmVhY2hlZFRlcm1pbmFsU3RhdGUpOworCisgICAgLy8gSXQncyBwb3NzaWJs
ZSB0aGF0IHdoZW4gd2UgcmVsZWFzZSB0aGUgaGFuZGxlLCBpdCB3aWxsIGJlCisgICAgLy8gZGVh
bGxvY2F0ZWQgYW5kIHJlbGVhc2UgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0Lgor
ICAgIC8vIFdlIG5lZWQgdG8gcmV0YWluIHRvIGF2b2lkIGFjY2Vzc2luZyB0aGUgb2JqZWN0IGFm
dGVyIGl0CisgICAgLy8gaGFzIGJlZW4gZGVhbGxvY2F0ZWQgYW5kIGFsc28gdG8gYXZvaWQgcmVl
bnRlcmluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWZQdHI8RnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI+
IHByb3RlY3Rvcih0aGlzKTsKKworICAgIG1faG9zdCA9IDA7CisKKyAgICAvLyBXZSBuZWVkIHRv
IHNldCByZWFjaGVkVGVybWluYWxTdGF0ZSB0byB0cnVlIGJlZm9yZSB3ZSByZWxlYXNlCisgICAg
Ly8gdGhlIHJlc291cmNlcyB0byBwcmV2ZW50IGEgZG91YmxlIGRlYWxsb2Mgb2YgV2ViVmlldyA8
cmRhcjovL3Byb2JsZW0vNDM3MjYyOD4KKyAgICBtX3JlYWNoZWRUZXJtaW5hbFN0YXRlID0gdHJ1
ZTsKKworICAgIG1faWRlbnRpZmllciA9IDA7CisKKyAgICBpZiAobV9oYW5kbGUpIHsKKyAgICAg
ICAgLy8gQ2xlYXIgb3V0IHRoZSBSZXNvdXJjZUhhbmRsZSdzIGNsaWVudCBzbyB0aGF0IGl0IGRv
ZXNuJ3QgdHJ5IHRvIGNhbGwKKyAgICAgICAgLy8gdXMgYmFjayBhZnRlciB3ZSByZWxlYXNlIGl0
LgorICAgICAgICBtX2hhbmRsZS0+c2V0Q2xpZW50KDApOworICAgICAgICBtX2hhbmRsZSA9IDA7
CisgICAgfQorCisgICAgbV9yZXNvdXJjZURhdGEgPSAwOworICAgIG1fZGVmZXJyZWRSZXF1ZXN0
ID0gUmVzb3VyY2VSZXF1ZXN0KCk7Cit9CisKK2Jvb2wgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6
OmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIEFTU0VSVCghbV9o
YW5kbGUpOworICAgIEFTU0VSVChtX2RlZmVycmVkUmVxdWVzdC5pc051bGwoKSk7CisKKyAgICBS
ZXNvdXJjZVJlcXVlc3QgY2xpZW50UmVxdWVzdChyZXF1ZXN0KTsKKyAgICB3aWxsU2VuZFJlcXVl
c3QoY2xpZW50UmVxdWVzdCwgUmVzb3VyY2VSZXNwb25zZSgpKTsKKyAgICBpZiAoY2xpZW50UmVx
dWVzdC5pc051bGwoKSkgeworICAgICAgICBkaWRGYWlsKG1faG9zdC0+Y2FuY2VsbGVkRXJyb3Io
cmVxdWVzdCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1faG9z
dC0+c2NoZWR1bGVBcmNoaXZlTG9hZCh0aGlzLCBjbGllbnRSZXF1ZXN0LCByZXF1ZXN0LnVybCgp
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKQorICAgIGlmIChtX2hvc3QtPnNjaGVkdWxlQXBwbGljYXRpb25DYWNoZUxvYWQodGhp
cywgY2xpZW50UmVxdWVzdCwgcmVxdWVzdC51cmwoKSkpCisgICAgICAgIHJldHVybiB0cnVlOwor
I2VuZGlmCisKKyAgICBpZiAobV9kZWZlcnNMb2FkaW5nKSB7CisgICAgICAgIG1fZGVmZXJyZWRS
ZXF1ZXN0ID0gY2xpZW50UmVxdWVzdDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKGNsaWVudFJlcXVlc3QsIHRoaXMs
IDAsIG1fZGVmZXJzTG9hZGluZywgbV9zaG91bGRDb250ZW50U25pZmYsIHRydWUpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6OnNldERlZmVy
c0xvYWRpbmcoYm9vbCBkZWZlcnMpCit7CisgICAgbV9kZWZlcnNMb2FkaW5nID0gZGVmZXJzOwor
ICAgIGlmIChtX2hhbmRsZSkKKyAgICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xvYWRpbmcoZGVm
ZXJzKTsKKyAgICBpZiAoIWRlZmVycyAmJiAhbV9kZWZlcnJlZFJlcXVlc3QuaXNOdWxsKCkpIHsK
KyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV9kZWZlcnJlZFJlcXVlc3QpOworICAg
ICAgICBtX2RlZmVycmVkUmVxdWVzdCA9IFJlc291cmNlUmVxdWVzdCgpOworICAgICAgICBsb2Fk
KHJlcXVlc3QpOworICAgIH0KK30KKwordm9pZCBGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6c2V0
U2hvdWxkQnVmZmVyRGF0YShib29sIHNob3VsZEJ1ZmZlckRhdGEpCit7CisgICAgbV9zaG91bGRC
dWZmZXJEYXRhID0gc2hvdWxkQnVmZmVyRGF0YTsKKworICAgIC8vIFJlc2V0IGFueSBhbHJlYWR5
IGJ1ZmZlcmVkIGRhdGEuCisgICAgaWYgKCFtX3Nob3VsZEJ1ZmZlckRhdGEpCisgICAgICAgIG1f
cmVzb3VyY2VEYXRhID0gMDsKK30KKwordm9pZCBGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6YWRk
RGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBib29sIGFsbEF0T25jZSkKK3sKKyAg
ICBpZiAoIW1fc2hvdWxkQnVmZmVyRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGFs
bEF0T25jZSkgeworICAgICAgICBtX3Jlc291cmNlRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KGRhdGEsIGxlbmd0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoUmVzb3Vy
Y2VIYW5kbGU6OnN1cHBvcnRzQnVmZmVyZWREYXRhKCkpIHsKKyAgICAgICAgLy8gQnVmZmVyIGRh
dGEgb25seSBpZiB0aGUgY29ubmVjdGlvbiBoYXMgaGFuZGVkIHVzIHRoZSBkYXRhIGJlY2F1c2Ug
aXMgaGFzIHN0b3BwZWQgYnVmZmVyaW5nIGl0LgorICAgICAgICBpZiAobV9yZXNvdXJjZURhdGEp
CisgICAgICAgICAgICBtX3Jlc291cmNlRGF0YS0+YXBwZW5kKGRhdGEsIGxlbmd0aCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKCFtX3Jlc291cmNlRGF0YSkKKyAgICAgICAgICAgIG1fcmVz
b3VyY2VEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9yZXNvdXJjZURhdGEtPmFwcGVuZChkYXRhLCBsZW5ndGgpOwor
ICAgIH0KK30KKwordm9pZCBGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6Y2xlYXJSZXNvdXJjZURh
dGEoKQoreworICAgIGlmIChtX3Jlc291cmNlRGF0YSkKKyAgICAgICAgbV9yZXNvdXJjZURhdGEt
PmNsZWFyKCk7Cit9CisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorYm9v
bCBGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6c2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZy
b21BcHBsaWNhdGlvbkNhY2hlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQoreworICAgIGlmICht
X2hvc3QtPnNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSh0
aGlzLCBtX3JlcXVlc3QsIGNhY2hlKSkgeworICAgICAgICBoYW5kbGUoKS0+Y2FuY2VsKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYK
Kwordm9pZCBGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25z
ZSkKK3sKKyAgICAvLyBQcm90ZWN0IHRoaXMgaW4gdGhpcyBkZWxlZ2F0ZSBtZXRob2Qgc2luY2Ug
dGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4gZG8KKyAgICAvLyBhbnl0aGluZyBpbmNsdWRp
bmcgcG9zc2libHkgZGVyZWZpbmcgdGhpczsgb25lIGV4YW1wbGUgb2YgdGhpcyBpcyBSYWRhciAz
MjY2MjE2LgorICAgIFJlZlB0cjxGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcj4gcHJvdGVjdG9yKHRo
aXMpOworCisgICAgQVNTRVJUKCFtX3JlYWNoZWRUZXJtaW5hbFN0YXRlKTsKKworICAgIGlmICht
X3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpIHsKKyAgICAgICAgaWYgKCFtX2lkZW50aWZpZXIp
IHsKKyAgICAgICAgICAgIG1faWRlbnRpZmllciA9IG1faG9zdC0+Y3JlYXRlVW5pcXVlSWRlbnRp
ZmllcigpOworICAgICAgICAgICAgbV9ob3N0LT5hc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVx
dWVzdChtX2lkZW50aWZpZXIsIHJlcXVlc3QpOworICAgICAgICB9CisKKyAgICAgICAgbV9ob3N0
LT53aWxsU2VuZFJlcXVlc3QodGhpcywgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAg
fQorCisgICAgbV9yZXF1ZXN0ID0gcmVxdWVzdDsKK30KKwordm9pZCBGcmFtZWxlc3NSZXNvdXJj
ZUxvYWRlcjo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxv
bmcpCit7Cit9CisKK3ZvaWQgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBBU1NFUlQoIW1f
cmVhY2hlZFRlcm1pbmFsU3RhdGUpOworCisgICAgLy8gUHJvdGVjdCB0aGlzIGluIHRoaXMgZGVs
ZWdhdGUgbWV0aG9kIHNpbmNlIHRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCisgICAg
Ly8gYW55dGhpbmcgaW5jbHVkaW5nIHBvc3NpYmx5IGRlcmVmaW5nIHRoaXM7IG9uZSBleGFtcGxl
IG9mIHRoaXMgaXMgUmFkYXIgMzI2NjIxNi4KKyAgICBSZWZQdHI8RnJhbWVsZXNzUmVzb3VyY2VM
b2FkZXI+IHByb3RlY3Rvcih0aGlzKTsKKworICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKKwor
ICAgIGlmIChGb3JtRGF0YSogZGF0YSA9IG1fcmVxdWVzdC5odHRwQm9keSgpKQorICAgICAgICBk
YXRhLT5yZW1vdmVHZW5lcmF0ZWRGaWxlc0lmTmVlZGVkKCk7CisKKyAgICBpZiAobV9zZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzKQorICAgICAgICBtX2hvc3QtPmRpZFJlY2VpdmVSZXNwb25zZSh0
aGlzLCBtX3Jlc3BvbnNlKTsKK30KKwordm9pZCBGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6ZGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgbG9uZyBsb25nIGxlbmd0
aFJlY2VpdmVkLCBib29sIGFsbEF0T25jZSkKK3sKKyAgICAvLyBUaGUgZm9sbG93aW5nIGFzc2Vy
dGlvbnMgYXJlIG5vdCBxdWl0ZSB2YWxpZCBoZXJlLCBzaW5jZSBhIHN1YmNsYXNzCisgICAgLy8g
bWlnaHQgb3ZlcnJpZGUgZGlkUmVjZWl2ZURhdGEgaW4gYSB3YXkgdGhhdCBpbnZhbGlkYXRlcyB0
aGVtLiBUaGlzCisgICAgLy8gaGFwcGVucyB3aXRoIHRoZSBzdGVwcyBsaXN0ZWQgaW4gMzI2NjIx
NgorICAgIC8vIEFTU0VSVChjb24gPT0gY29ubmVjdGlvbik7CisgICAgLy8gQVNTRVJUKCFtX3Jl
YWNoZWRUZXJtaW5hbFN0YXRlKTsKKworICAgIC8vIFByb3RlY3QgdGhpcyBpbiB0aGlzIGRlbGVn
YXRlIG1ldGhvZCBzaW5jZSB0aGUgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGNhbiBkbworICAgIC8v
IGFueXRoaW5nIGluY2x1ZGluZyBwb3NzaWJseSBkZXJlZmluZyB0aGlzOyBvbmUgZXhhbXBsZSBv
ZiB0aGlzIGlzIFJhZGFyIDMyNjYyMTYuCisgICAgUmVmUHRyPEZyYW1lbGVzc1Jlc291cmNlTG9h
ZGVyPiBwcm90ZWN0b3IodGhpcyk7CisKKyAgICBhZGREYXRhKGRhdGEsIGxlbmd0aCwgYWxsQXRP
bmNlKTsKKyAgICAvLyBGSVhNRTogSWYgd2UgZ2V0IGEgcmVzb3VyY2Ugd2l0aCBtb3JlIHRoYW4g
MkIgYnl0ZXMsIHRoaXMgY29kZSB3b24ndCBkbyB0aGUgcmlnaHQgdGhpbmcuCisgICAgLy8gSG93
ZXZlciwgd2l0aCB0b2RheSdzIGNvbXB1dGVycyBhbmQgbmV0d29ya2luZyBzcGVlZHMsIHRoaXMg
d29uJ3QgaGFwcGVuIGluIHByYWN0aWNlLgorICAgIC8vIENvdWxkIGJlIGFuIGlzc3VlIHdpdGgg
YSBnaWFudCBsb2NhbCBmaWxlLgorICAgIGlmIChtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Mp
CisgICAgICAgIG1faG9zdC0+ZGlkUmVjZWl2ZURhdGEodGhpcywgZGF0YSwgbGVuZ3RoLCBzdGF0
aWNfY2FzdDxpbnQ+KGxlbmd0aFJlY2VpdmVkKSk7Cit9CisKK3ZvaWQgRnJhbWVsZXNzUmVzb3Vy
Y2VMb2FkZXI6OndpbGxTdG9wQnVmZmVyaW5nRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKQoreworICAgIGlmICghbV9zaG91bGRCdWZmZXJEYXRhKQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQoIW1fcmVzb3VyY2VEYXRhKTsKKyAgICBtX3Jlc291cmNlRGF0YSA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgRnJhbWVsZXNzUmVzb3Vy
Y2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIC8vIElmIGxvYWQgaGFzIGJlZW4g
Y2FuY2VsbGVkIGFmdGVyIGZpbmlzaGluZyAod2hpY2ggY291bGQgaGFwcGVuIHdpdGggYQorICAg
IC8vIEphdmFTY3JpcHQgdGhhdCBjaGFuZ2VzIHRoZSB3aW5kb3cgbG9jYXRpb24pLCBkbyBub3Ro
aW5nLgorICAgIGlmIChtX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCgh
bV9yZWFjaGVkVGVybWluYWxTdGF0ZSk7CisKKyAgICBkaWRGaW5pc2hMb2FkaW5nT25lUGFydCgp
OworICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKK30KKwordm9pZCBGcmFtZWxlc3NSZXNvdXJjZUxv
YWRlcjo6ZGlkRmluaXNoTG9hZGluZ09uZVBhcnQoKQoreworICAgIGlmIChtX2NhbmNlbGxlZCkK
KyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghbV9yZWFjaGVkVGVybWluYWxTdGF0ZSk7CisK
KyAgICBpZiAobV9jYWxsZWREaWRGaW5pc2hMb2FkKQorICAgICAgICByZXR1cm47CisgICAgbV9j
YWxsZWREaWRGaW5pc2hMb2FkID0gdHJ1ZTsKKyAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzKQorICAgICAgICBtX2hvc3QtPmRpZEZpbmlzaExvYWQodGhpcyk7Cit9CisKK3ZvaWQg
RnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCit7CisgICAgaWYgKG1fY2FuY2VsbGVkKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJU
KCFtX3JlYWNoZWRUZXJtaW5hbFN0YXRlKTsKKworICAgIC8vIFByb3RlY3QgdGhpcyBpbiB0aGlz
IGRlbGVnYXRlIG1ldGhvZCBzaW5jZSB0aGUgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGNhbiBkbwor
ICAgIC8vIGFueXRoaW5nIGluY2x1ZGluZyBwb3NzaWJseSBkZXJlZmluZyB0aGlzOyBvbmUgZXhh
bXBsZSBvZiB0aGlzIGlzIFJhZGFyIDMyNjYyMTYuCisgICAgUmVmUHRyPEZyYW1lbGVzc1Jlc291
cmNlTG9hZGVyPiBwcm90ZWN0b3IodGhpcyk7CisKKyAgICBpZiAoRm9ybURhdGEqIGRhdGEgPSBt
X3JlcXVlc3QuaHR0cEJvZHkoKSkKKyAgICAgICAgZGF0YS0+cmVtb3ZlR2VuZXJhdGVkRmlsZXNJ
Zk5lZWRlZCgpOworCisgICAgaWYgKG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyAmJiAhbV9j
YWxsZWREaWRGaW5pc2hMb2FkKQorICAgICAgICBtX2hvc3QtPmRpZEZhaWxUb0xvYWQodGhpcywg
ZXJyb3IpOworCisgICAgcmVsZWFzZVJlc291cmNlcygpOworfQorCit2b2lkIEZyYW1lbGVzc1Jl
c291cmNlTG9hZGVyOjpkaWRDYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7Cisg
ICAgQVNTRVJUKCFtX2NhbmNlbGxlZCk7CisgICAgQVNTRVJUKCFtX3JlYWNoZWRUZXJtaW5hbFN0
YXRlKTsKKworICAgIGlmIChGb3JtRGF0YSogZGF0YSA9IG1fcmVxdWVzdC5odHRwQm9keSgpKQor
ICAgICAgICBkYXRhLT5yZW1vdmVHZW5lcmF0ZWRGaWxlc0lmTmVlZGVkKCk7CisKKyAgICAvLyBU
aGlzIGZsYWcgcHJldmVudHMgYmFkIGJlaGF2aW9yIHdoZW4gbG9hZHMgdGhhdCBmaW5pc2ggY2F1
c2UgdGhlCisgICAgLy8gbG9hZCBpdHNlbGYgdG8gYmUgY2FuY2VsbGVkICh3aGljaCBjb3VsZCBo
YXBwZW4gd2l0aCBhIGphdmFzY3JpcHQgdGhhdAorICAgIC8vIGNoYW5nZXMgdGhlIHdpbmRvdyBs
b2NhdGlvbikuIFRoaXMgaXMgdXNlZCB0byBwcmV2ZW50IGJvdGggdGhlIGJvZHkKKyAgICAvLyBv
ZiB0aGlzIG1ldGhvZCBhbmQgdGhlIGJvZHkgb2YgY29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6
IHJ1bm5pbmcKKyAgICAvLyBmb3IgYSBzaW5nbGUgZGVsZWdhdGUuIENhbmNlbGxpbmcgd2lucy4K
KyAgICBtX2NhbmNlbGxlZCA9IHRydWU7CisKKyAgICBpZiAobV9oYW5kbGUpCisgICAgICAgIG1f
aGFuZGxlLT5jbGVhckF1dGhlbnRpY2F0aW9uKCk7CisKKyAgICBtX2hvc3QtPmNhbmNlbFBlbmRp
bmdTdWJzdGl0dXRlTG9hZCh0aGlzKTsKKyAgICBpZiAobV9oYW5kbGUpIHsKKyAgICAgICAgbV9o
YW5kbGUtPmNhbmNlbCgpOworICAgICAgICBtX2hhbmRsZSA9IDA7CisgICAgfQorICAgIGlmICht
X3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgJiYgIW1fY2FsbGVkRGlkRmluaXNoTG9hZCkKKyAg
ICAgICAgbV9ob3N0LT5kaWRGYWlsVG9Mb2FkKHRoaXMsIGVycm9yKTsKKworICAgIHJlbGVhc2VS
ZXNvdXJjZXMoKTsKK30KKwordm9pZCBGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6Y2FuY2VsKCkK
K3sKKyAgICBjYW5jZWwoUmVzb3VyY2VFcnJvcigpKTsKK30KKwordm9pZCBGcmFtZWxlc3NSZXNv
dXJjZUxvYWRlcjo6Y2FuY2VsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGlm
IChtX3JlYWNoZWRUZXJtaW5hbFN0YXRlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFlcnJv
ci5pc051bGwoKSkKKyAgICAgICAgZGlkQ2FuY2VsKGVycm9yKTsKKyAgICBlbHNlCisgICAgICAg
IGRpZENhbmNlbChjYW5jZWxsZWRFcnJvcigpKTsKK30KKworY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6OnJlc3BvbnNlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9yZXNwb25zZTsKK30KKworUmVzb3VyY2VFcnJvciBGcmFtZWxlc3NSZXNvdXJjZUxvYWRl
cjo6Y2FuY2VsbGVkRXJyb3IoKQoreworICAgIHJldHVybiBtX2hvc3QtPmNhbmNlbGxlZEVycm9y
KG1fcmVxdWVzdCk7Cit9CisKK1Jlc291cmNlRXJyb3IgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6
OmJsb2NrZWRFcnJvcigpCit7CisgICAgcmV0dXJuIG1faG9zdC0+YmxvY2tlZEVycm9yKG1fcmVx
dWVzdCk7Cit9CisKK1Jlc291cmNlRXJyb3IgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6OmNhbm5v
dFNob3dVUkxFcnJvcigpCit7CisgICAgcmV0dXJuIG1faG9zdC0+Y2Fubm90U2hvd1VSTEVycm9y
KG1fcmVxdWVzdCk7Cit9CisKK3ZvaWQgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5k
UmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKQorICAgIGlmICghcmVkaXJlY3RSZXNwb25zZS5pc051bGwoKSAm
JiAhcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKHJlcXVlc3QudXJsKCksIHJlZGlyZWN0UmVz
cG9uc2UudXJsKCkpKSB7CisgICAgICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNl
RnJvbUFwcGxpY2F0aW9uQ2FjaGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYKKyAgICB3aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Cit9CisK
K3ZvaWQgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6OmRpZFNlbmREYXRhKFJlc291cmNlSGFuZGxl
KiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFs
Qnl0ZXNUb0JlU2VudCkKK3sKKyAgICBkaWRTZW5kRGF0YShieXRlc1NlbnQsIHRvdGFsQnl0ZXNU
b0JlU2VudCk7Cit9CisKK3ZvaWQgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgaWYgKHJlc3Bv
bnNlLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAgPT0gNCB8fCByZXNwb25zZS5odHRwU3RhdHVzQ29k
ZSgpIC8gMTAwID09IDUpIHsKKyAgICAgICAgaWYgKHNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3Vy
Y2VGcm9tQXBwbGljYXRpb25DYWNoZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZgorICAgIGRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7Cit9CisKK3ZvaWQgRnJhbWVs
ZXNzUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
Y2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IGxlbmd0aFJlY2VpdmVkKQoreworICAgIGRpZFJl
Y2VpdmVEYXRhKGRhdGEsIGxlbmd0aCwgbGVuZ3RoUmVjZWl2ZWQsIGZhbHNlKTsKK30KKwordm9p
ZCBGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRs
ZSopCit7CisgICAgZGlkRmluaXNoTG9hZGluZygpOworfQorCit2b2lkIEZyYW1lbGVzc1Jlc291
cmNlTG9hZGVyOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCit7CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICBpZiAo
IWVycm9yLmlzQ2FuY2VsbGF0aW9uKCkpIHsKKyAgICAgICAgaWYgKG1faG9zdC0+c2NoZWR1bGVM
b2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKHRoaXMsIG1fcmVxdWVzdCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgZGlkRmFpbChlcnJvcik7
Cit9CisKK3ZvaWQgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6Ondhc0Jsb2NrZWQoUmVzb3VyY2VI
YW5kbGUqKQoreworICAgIGRpZEZhaWwoYmxvY2tlZEVycm9yKCkpOworfQorCit2b2lkIEZyYW1l
bGVzc1Jlc291cmNlTG9hZGVyOjpjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikKK3sKKyAg
ICBkaWRGYWlsKGNhbm5vdFNob3dVUkxFcnJvcigpKTsKK30KKworYm9vbCBGcmFtZWxlc3NSZXNv
dXJjZUxvYWRlcjo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQoreworICAgIFJlZlB0cjxG
cmFtZWxlc3NSZXNvdXJjZUxvYWRlcj4gcHJvdGVjdG9yKHRoaXMpOworICAgIHJldHVybiBtX2hv
c3QtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKHRoaXMpOworfQorCit2b2lkIEZyYW1lbGVz
c1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3sKKyAgICAvLyBQcm90ZWN0IHRo
aXMgaW4gdGhpcyBkZWxlZ2F0ZSBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2lu
ZyBjYW4gZG8KKyAgICAvLyBhbnl0aGluZyBpbmNsdWRpbmcgcG9zc2libHkgZGVyZWZpbmcgdGhp
czsgb25lIGV4YW1wbGUgb2YgdGhpcyBpcyBSYWRhciAzMjY2MjE2LgorICAgIFJlZlB0cjxGcmFt
ZWxlc3NSZXNvdXJjZUxvYWRlcj4gcHJvdGVjdG9yKHRoaXMpOworICAgIG1faG9zdC0+ZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHRoaXMsIGNoYWxsZW5nZSk7Cit9CisKK3ZvaWQg
RnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6OmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCit7CisgICAgLy8gUHJv
dGVjdCB0aGlzIGluIHRoaXMgZGVsZWdhdGUgbWV0aG9kIHNpbmNlIHRoZSBhZGRpdGlvbmFsIHBy
b2Nlc3NpbmcgY2FuIGRvCisgICAgLy8gYW55dGhpbmcgaW5jbHVkaW5nIHBvc3NpYmx5IGRlcmVm
aW5nIHRoaXM7IG9uZSBleGFtcGxlIG9mIHRoaXMgaXMgUmFkYXIgMzI2NjIxNi4KKyAgICBSZWZQ
dHI8RnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBtX2hvc3Qt
PmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHRoaXMsIGNoYWxsZW5nZSk7Cit9CisK
K3ZvaWQgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKK3sKKyAgICBjYW5jZWwoKTsKK30KKwordm9pZCBG
cmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUq
LCBDYWNoZVN0b3JhZ2VQb2xpY3kmIHBvbGljeSkKK3sKKyAgICAvLyBXaGVuIGluIHByaXZhdGUg
YnJvd3NpbmcgbW9kZSwgcHJldmVudCBjYWNoaW5nIHRvIGRpc2sKKyAgICBpZiAocG9saWN5ID09
IFN0b3JhZ2VBbGxvd2VkICYmIG1faG9zdC0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQorICAg
ICAgICBwb2xpY3kgPSBTdG9yYWdlQWxsb3dlZEluTWVtb3J5T25seTsKK30KKworI2lmIFBMQVRG
T1JNKE1BQykKK05TQ2FjaGVkVVJMUmVzcG9uc2UqIEZyYW1lbGVzc1Jlc291cmNlTG9hZGVyOjp3
aWxsQ2FjaGVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJl
c3BvbnNlKQoreworICAgIGlmICghbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9ob3N0LT53aWxsQ2FjaGVSZXNwb25zZSh0aGlzLCBp
ZGVudGlmaWVyKCksIHJlc3BvbnNlKTsKK30KKyNlbmRpZgorCit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2xvYWRlci9jaHJvbWl1bS9GcmFtZWxlc3NSZXNvdXJjZUxvYWRlci5oIGIvV2ViQ29yZS9s
b2FkZXIvY2hyb21pdW0vRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44MTUxYjhjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9s
b2FkZXIvY2hyb21pdW0vRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXIuaApAQCAtMCwwICsxLDE1MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXJfaAorI2Rl
ZmluZSBGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcl9oCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291
cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEFwcGxpY2F0
aW9uQ2FjaGU7CisgICAgY2xhc3MgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXJIb3N0OworICAgIGNs
YXNzIFJlc291cmNlSGFuZGxlOworICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKKworICAgIGNsYXNz
IEZyYW1lbGVzc1Jlc291cmNlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RnJhbWVsZXNzUmVz
b3VyY2VMb2FkZXI+LCBwcm90ZWN0ZWQgUmVzb3VyY2VIYW5kbGVDbGllbnQgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgdmlydHVhbCB+RnJhbWVsZXNzUmVzb3VyY2VMb2FkZXIoKTsKKworICAgICAg
ICB2b2lkIGNhbmNlbCgpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOworICAgICAgICBSZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKCk7CisgICAg
ICAgIFJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKCk7CisgICAgICAgIFJlc291cmNlRXJyb3Ig
Y2Fubm90U2hvd1VSTEVycm9yKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xv
YWRpbmcoYm9vbCk7CisKKyAgICAgICAgdm9pZCBzZXRJZGVudGlmaWVyKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllcikgeyBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOyB9CisgICAgICAgIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCisg
ICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUmVzb3VyY2VzKCk7CisgICAgICAgIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lk
IGFkZERhdGEoY29uc3QgY2hhciosIGludCwgYm9vbCBhbGxBdE9uY2UpOworICAgICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiByZXNvdXJjZURhdGEoKTsKKyAgICAgICAgdm9p
ZCBjbGVhclJlc291cmNlRGF0YSgpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJl
cXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RS
ZXNwb25zZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25n
IGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFy
KiwgaW50LCBsb25nIGxvbmcgbGVuZ3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsKKyAgICAg
ICAgdm9pZCB3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEoY29uc3QgY2hhciosIGludCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
OworICAgICAgICB2b2lkIGRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENh
bmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworCisgICAgICAgIC8v
IFJlc291cmNlSGFuZGxlQ2xpZW50CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVl
c3QoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRh
KFJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQg
bG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNv
bnN0IGNoYXIqLCBpbnQsIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOworICAgICAgICB2aXJ0
dWFsIHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgd2lsbFN0b3BCdWZmZXJpbmdEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkgeyB3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEoZGF0YSwgbGVuZ3RoKTsg
fQorICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoUmVzb3Vy
Y2VIYW5kbGUqKSB7IHJldHVybiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpOyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKSB7IGRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UpOyB9CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpIHsgZGlkQ2FuY2Vs
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY2hhbGxlbmdlKTsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKSB7IHJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNoYWxsZW5n
ZSk7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlKFJlc291cmNlSGFu
ZGxlKiwgQ2FjaGVTdG9yYWdlUG9saWN5Jik7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICB2
aXJ0dWFsIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHdpbGxDYWNoZVJlc3BvbnNlKFJlc291cmNlSGFu
ZGxlKiwgTlNDYWNoZWRVUkxSZXNwb25zZSopOworI2VuZGlmCisjaWYgVVNFKENGTkVUV09SSykK
KyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZENhY2hlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUq
LCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKTsKKyNlbmRpZgorCisgICAgICAgIFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZS5nZXQoKTsgfQorICAgICAgICBi
b29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX3NlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3M7IH0KKworICAgICAgICB2b2lkIHNldFNob3VsZEJ1ZmZlckRhdGEo
Ym9vbCBzaG91bGRCdWZmZXJEYXRhKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgRnJhbWVs
ZXNzUmVzb3VyY2VMb2FkZXIoRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXJIb3N0KiwgYm9vbCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBkZWZl
cnNMb2FkaW5nKTsKKworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAg
ICAgIGJvb2wgc2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hl
KEFwcGxpY2F0aW9uQ2FjaGUqID0gMCk7CisjZW5kaWYKKworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2FuY2VsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nT25lUGFydCgpOworCisgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdDsgfQorICAgICAgICBib29sIHJlYWNoZWRUZXJt
aW5hbFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFjaGVkVGVybWluYWxTdGF0ZTsgfQorICAg
ICAgICBib29sIGNhbmNlbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuY2VsbGVkOyB9CisgICAg
ICAgIGJvb2wgZGVmZXJzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZGVmZXJzTG9hZGluZzsg
fQorCisgICAgICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7CisgICAgICAgIFJl
c291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgRnJh
bWVsZXNzUmVzb3VyY2VMb2FkZXJIb3N0KiBtX2hvc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBtX3Jlc291cmNlRGF0YTsKKworICAgICAgICB1bnNpZ25lZCBsb25nIG1faWRlbnRpZmllcjsK
KworICAgICAgICBib29sIG1fcmVhY2hlZFRlcm1pbmFsU3RhdGU7CisgICAgICAgIGJvb2wgbV9j
YW5jZWxsZWQ7CisgICAgICAgIGJvb2wgbV9jYWxsZWREaWRGaW5pc2hMb2FkOworCisgICAgICAg
IGJvb2wgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOworICAgICAgICBib29sIG1fc2hvdWxk
Q29udGVudFNuaWZmOworICAgICAgICBib29sIG1fc2hvdWxkQnVmZmVyRGF0YTsKKyAgICAgICAg
Ym9vbCBtX2RlZmVyc0xvYWRpbmc7CisgICAgICAgIFJlc291cmNlUmVxdWVzdCBtX2RlZmVycmVk
UmVxdWVzdDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBG
cmFtZWxlc3NSZXNvdXJjZUxvYWRlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9jaHJv
bWl1bS9GcmFtZWxlc3NSZXNvdXJjZUxvYWRlckhvc3QuaCBiL1dlYkNvcmUvbG9hZGVyL2Nocm9t
aXVtL0ZyYW1lbGVzc1Jlc291cmNlTG9hZGVySG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmEzN2NiNGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2xvYWRlci9j
aHJvbWl1bS9GcmFtZWxlc3NSZXNvdXJjZUxvYWRlckhvc3QuaApAQCAtMCwwICsxLDc2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXJIb3N0X2gKKyNk
ZWZpbmUgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXJIb3N0X2gKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKKyAgICBjbGFzcyBGcmFtZWxlc3NSZXNv
dXJjZUxvYWRlcjsKKworICAgIGVudW0gRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXJIb3N0U3RhdGUg
eworICAgICAgICBIb3N0U3RhdGVQcm92aXNpb25hbCwKKyAgICB9OworCisgICAgY2xhc3MgRnJh
bWVsZXNzUmVzb3VyY2VMb2FkZXJIb3N0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
fkZyYW1lbGVzc1Jlc291cmNlTG9hZGVySG9zdCgpIHsgfQorICAgICAgICB2aXJ0dWFsIEZyYW1l
bGVzc1Jlc291cmNlTG9hZGVySG9zdFN0YXRlIHN0YXRlKCkgY29uc3QgPSAwOworICAgICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY3JlYXRlVW5pcXVlSWRlbnRpZmllcigpID0gMDsKKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TG9jYWxMb2FkRmFpbGVkKGNvbnN0IFN0cmluZyYgdXJs
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVx
dWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgY2xp
ZW50UmVxdWVzdCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KEZy
YW1lbGVzc1Jlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiBjbGllbnRSZXF1ZXN0LCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSA9IDA7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXIqLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZEZhaWxUb0xvYWQoRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9y
JikgPSAwOworICAgICAgICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFJlc291cmNl
RXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0ID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWQoRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXIq
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShG
cmFtZWxlc3NSZXNvdXJjZUxvYWRlciopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShGcmFtZWxlc3NSZXNvdXJjZUxvYWRlciosIGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXIq
LCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpID0gMDsKKyAgICAgICAgdmlydHVhbCBS
ZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBj
b25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZUFyY2hpdmVMb2FkKEZyYW1l
bGVzc1Jlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgS1VSTCYp
ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIHNjaGVkdWxlQXBwbGljYXRpb25DYWNoZUxvYWQo
RnJhbWVsZXNzUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBL
VVJMJikgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNv
dXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKEZyYW1lbGVzc1Jlc291cmNlTG9hZGVyKiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgQXBwbGljYXRpb25DYWNoZSogPSAwKSA9IDA7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBjYW5jZWxQZW5kaW5nU3Vic3RpdHV0ZUxvYWQoRnJhbWVsZXNzUmVzb3VyY2VM
b2FkZXIqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVk
KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRXh0cmFGaWVsZHNUb1N1YnJlc291cmNl
UmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRG
cmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlcihGcmFtZWxlc3NSZXNvdXJjZUxvYWRlciopID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyKEZy
YW1lbGVzc1Jlc291cmNlTG9hZGVyKikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc3VicmVz
b3VyY2VMb2FkZXJGaW5pc2hlZExvYWRpbmdPbmVQYXJ0KEZyYW1lbGVzc1Jlc291cmNlTG9hZGVy
KikgPSAwOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgdmlydHVhbCBOU0NhY2hlZFVSTFJl
c3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShGcmFtZWxlc3NSZXNvdXJjZUxvYWRlciosIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgTlNDYWNoZWRVUkxSZXNwb25zZSopID0gMDsKKyNlbmRpZgor
ICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYW1lbGVzc1Jl
c291cmNlTG9hZGVySG9zdF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9G
cmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9G
cmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjg5NWU0YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvbG9hZGVyL2Nocm9t
aXVtL0ZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyLmNwcApAQCAtMCwwICsxLDI2MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
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
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnJhbWVsZXNzU3VicmVzb3Vy
Y2VMb2FkZXIuaCIKKworI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVs
ZXNzUmVzb3VyY2VMb2FkZXJIb3N0LmgiCisjaW5jbHVkZSAiRnJhbWVsZXNzU3VicmVzb3VyY2VM
b2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLVVJMOworY2xhc3MgRG9jdW1lbnQ7CitjbGFz
cyBTdHJpbmc7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CisKK0ZyYW1lbGVzc1N1YnJlc291cmNl
TG9hZGVyOjpGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlcihGcmFtZWxlc3NSZXNvdXJjZUxvYWRl
ckhvc3QqIGhvc3QsIEZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGJv
b2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJv
b2wgZGVmZXJzTG9hZGluZykKKyAgICA6IEZyYW1lbGVzc1Jlc291cmNlTG9hZGVyKGhvc3QsIHNl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIHNob3VsZENvbnRlbnRTbmlmZiwgZGVmZXJzTG9hZGlu
ZykKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fbG9hZGluZ011bHRpcGFydENvbnRl
bnQoZmFsc2UpCit7Cit9CisKK0ZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyOjp+RnJhbWVsZXNz
U3VicmVzb3VyY2VMb2FkZXIoKQoreworfQorCitQYXNzUmVmUHRyPEZyYW1lbGVzc1N1YnJlc291
cmNlTG9hZGVyPiBGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKEZyYW1lbGVzc1Jl
c291cmNlTG9hZGVySG9zdCogaG9zdCwgRnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXJDbGllbnQq
IGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNraXBDYW5Mb2Fk
Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50
U25pZmYsIGJvb2wgZGVmZXJzTG9hZGluZykKK3sKKyAgICBBU1NFUlQocmVxdWVzdC5odHRwUmVm
ZXJyZXIoKSk7CisKKyAgICBpZiAoIWhvc3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KCFza2lwQ2FuTG9hZENoZWNrICYmIGhvc3QtPnN0YXRlKCkgPT0gSG9zdFN0YXRlUHJvdmlzaW9u
YWwpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3Qg
PSByZXF1ZXN0OworCisgICAgaWYgKCFza2lwQ2FuTG9hZENoZWNrCisgICAgICAgICAgICAmJiBG
cmFtZUxvYWRlcjo6cmVzdHJpY3RBY2Nlc3NUb0xvY2FsKCkKKyAgICAgICAgICAgICYmICFGcmFt
ZUxvYWRlcjo6Y2FuTG9hZChyZXF1ZXN0LnVybCgpLCBTdHJpbmcoKSwgY2xpZW50LT5zZWN1cml0
eU9yaWdpbigpKSkgeworICAgICAgICBob3N0LT5yZXBvcnRMb2NhbExvYWRGYWlsZWQocmVxdWVz
dC51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChG
cmFtZUxvYWRlcjo6c2hvdWxkSGlkZVJlZmVycmVyKHJlcXVlc3QudXJsKCksIHJlcXVlc3QuaHR0
cFJlZmVycmVyKCkpKQorICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUFJlZmVycmVyKCk7Cisg
ICAgRnJhbWVMb2FkZXI6OmFkZEhUVFBPcmlnaW5JZk5lZWRlZChuZXdSZXF1ZXN0LCBjbGllbnQt
Pm91dGdvaW5nT3JpZ2luKCkpOworCisgICAgLy8gVXNlIHRoZSBvcmlnaW5hbCByZXF1ZXN0J3Mg
Y2FjaGUgcG9saWN5IGZvciB0d28gcmVhc29uczoKKyAgICAvLyAxLiBGb3IgUE9TVCByZXF1ZXN0
cywgd2UgbXV0YXRlIHRoZSBjYWNoZSBwb2xpY3kgZm9yIHRoZSBtYWluIHJlc291cmNlLAorICAg
IC8vICAgIGJ1dCB3ZSBkbyBub3Qgd2FudCB0aGlzIHRvIGFwcGx5IHRvIHN1YnJlc291cmNlcwor
ICAgIC8vIDIuIERlbGVnYXRlcyB0aGF0IG1vZGlmeSB0aGUgY2FjaGUgcG9saWN5IHVzaW5nIHdp
bGxTZW5kUmVxdWVzdDogc2hvdWxkCisgICAgLy8gICAgbm90IGFmZmVjdCBhbnkgb3RoZXIgcmVz
b3VyY2VzLiBTdWNoIGNoYW5nZXMgbmVlZCB0byBiZSBkb25lCisgICAgLy8gICAgcGVyIHJlcXVl
c3QuCisgICAgaWYgKG5ld1JlcXVlc3QuaXNDb25kaXRpb25hbCgpKQorICAgICAgICBuZXdSZXF1
ZXN0LnNldENhY2hlUG9saWN5KFJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhKTsKKyAgICBlbHNlCisg
ICAgICAgIG5ld1JlcXVlc3Quc2V0Q2FjaGVQb2xpY3koY2xpZW50LT5jYWNoZVBvbGljeSgpKTsK
KworICAgIGhvc3QtPmFkZEV4dHJhRmllbGRzVG9TdWJyZXNvdXJjZVJlcXVlc3QobmV3UmVxdWVz
dCk7CisKKyAgICBSZWZQdHI8RnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXI+IHN1YmxvYWRlcihh
ZG9wdFJlZihuZXcgRnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXIoaG9zdCwgY2xpZW50LCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBzaG91bGRDb250ZW50U25pZmYsIGRlZmVyc0xvYWRpbmcp
KSk7CisgICAgaWYgKCFzdWJsb2FkZXItPmxvYWQobmV3UmVxdWVzdCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIHN1YmxvYWRlci5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRnJhbWVs
ZXNzU3VicmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIG5l
d1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit7Cisg
ICAgLy8gU3RvcmUgdGhlIHByZXZpb3VzIFVSTCBiZWNhdXNlIHRoZSBjYWxsIHRvIFJlc291cmNl
TG9hZGVyOjp3aWxsU2VuZFJlcXVlc3Qgd2lsbCBtb2RpZnkgaXQuCisgICAgS1VSTCBwcmV2aW91
c1VSTCA9IHJlcXVlc3QoKS51cmwoKTsKKworICAgIEZyYW1lbGVzc1Jlc291cmNlTG9hZGVyOjp3
aWxsU2VuZFJlcXVlc3QobmV3UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgaWYgKCFw
cmV2aW91c1VSTC5pc051bGwoKSAmJiAhbmV3UmVxdWVzdC5pc051bGwoKSAmJiBwcmV2aW91c1VS
TCAhPSBuZXdSZXF1ZXN0LnVybCgpICYmIG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+d2ls
bFNlbmRSZXF1ZXN0KHRoaXMsIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworfQorCit2
b2lkIEZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyOjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25n
IGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQor
eworICAgIFJlZlB0cjxGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsK
KworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKHRoaXMs
IGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KKwordm9pZCBGcmFtZWxlc3NTdWJy
ZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHIpCit7CisgICAgQVNTRVJUKCFyLmlzTnVsbCgpKTsKKworICAgIGlmIChyLmlzTXVsdGlwYXJ0
KCkpCisgICAgICAgIG1fbG9hZGluZ011bHRpcGFydENvbnRlbnQgPSB0cnVlOworCisgICAgLy8g
UmVmZXJlbmNlIHRoZSBvYmplY3QgaW4gdGhpcyBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9uYWwg
cHJvY2Vzc2luZyBjYW4gZG8KKyAgICAvLyBhbnl0aGluZyBpbmNsdWRpbmcgcmVtb3ZpbmcgdGhl
IGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0OyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIDMy
NjYyMTYuCisgICAgUmVmUHRyPEZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyPiBwcm90ZWN0KHRo
aXMpOworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVJl
c3BvbnNlKHRoaXMsIHIpOworCisgICAgLy8gVGhlIGxvYWRlciBjYW4gY2FuY2VsIGEgbG9hZCBp
ZiBpdCByZWNlaXZlcyBhIG11bHRpcGFydCByZXNwb25zZSBmb3IgYSBub24taW1hZ2UuCisgICAg
aWYgKHJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZWxl
c3NSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHIpOworCisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gYnVmZmVyID0gcmVzb3VyY2VEYXRhKCk7CisgICAgaWYgKG1fbG9hZGluZ011
bHRpcGFydENvbnRlbnQgJiYgYnVmZmVyICYmIGJ1ZmZlci0+c2l6ZSgpKSB7CisgICAgICAgIC8v
IFNpbmNlIGEgc3VicmVzb3VyY2UgbG9hZGVyIGRvZXMgbm90IGxvYWQgbXVsdGlwYXJ0IHNlY3Rp
b25zIHByb2dyZXNzaXZlbHksCisgICAgICAgIC8vIGRlbGl2ZXIgdGhlIHByZXZpb3VzbHkgcmVj
ZWl2ZWQgZGF0YSB0byB0aGUgbG9hZGVyIGFsbCBhdCBvbmNlIG5vdy4KKyAgICAgICAgLy8gVGhl
biBjbGVhciB0aGUgZGF0YSB0byBtYWtlIHdheSBmb3IgdGhlIG5leHQgbXVsdGlwYXJ0IHNlY3Rp
b24uCisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNl
aXZlRGF0YSh0aGlzLCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOworICAgICAgICBj
bGVhclJlc291cmNlRGF0YSgpOworCisgICAgICAgIC8vIEFmdGVyIHRoZSBmaXJzdCBtdWx0aXBh
cnQgc2VjdGlvbiBpcyBjb21wbGV0ZSwgc2lnbmFsIHRvIGRlbGVnYXRlcyB0aGF0IHRoaXMgbG9h
ZCBpcyAiZmluaXNoZWQiIC4KKyAgICAgICAgbV9ob3N0LT5zdWJyZXNvdXJjZUxvYWRlckZpbmlz
aGVkTG9hZGluZ09uZVBhcnQodGhpcyk7CisgICAgICAgIGRpZEZpbmlzaExvYWRpbmdPbmVQYXJ0
KCk7CisgICAgfQorfQorCit2b2lkIEZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBsb25nIGxvbmcgbGVuZ3RoUmVj
ZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKQoreworICAgIC8vIFJlZmVyZW5jZSB0aGUgb2JqZWN0IGlu
IHRoaXMgbWV0aG9kIHNpbmNlIHRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCisgICAg
Ly8gYW55dGhpbmcgaW5jbHVkaW5nIHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlz
IG9iamVjdDsgb25lIGV4YW1wbGUgb2YgdGhpcyBpcyAzMjY2MjE2LgorICAgIFJlZlB0cjxGcmFt
ZWxlc3NTdWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgIEZyYW1lbGVzc1Jl
c291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgsIGxlbmd0aFJlY2VpdmVk
LCBhbGxBdE9uY2UpOworCisgICAgLy8gQSBzdWJyZXNvdXJjZSBsb2FkZXIgZG9lcyBub3QgbG9h
ZCBtdWx0aXBhcnQgc2VjdGlvbnMgcHJvZ3Jlc3NpdmVseS4KKyAgICAvLyBTbyBkb24ndCBkZWxp
dmVyIGFueSBkYXRhIHRvIHRoZSBsb2FkZXIgeWV0LgorICAgIGlmICghbV9sb2FkaW5nTXVsdGlw
YXJ0Q29udGVudCAmJiBtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRh
KHRoaXMsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgRnJhbWVsZXNzU3VicmVzb3VyY2VMb2Fk
ZXI6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIGlmIChjYW5jZWxsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIEFTU0VSVCghcmVhY2hlZFRlcm1pbmFsU3RhdGUoKSk7CisKKyAgICAvLyBD
YWxsaW5nIHJlbW92ZUZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyIHdpbGwgbGlrZWx5IHJlc3Vs
dCBpbiBhIGNhbGwgdG8gZGVyZWYsIHNvIHdlIG11c3QgcHJvdGVjdCBvdXJzZWx2ZXMuCisgICAg
UmVmUHRyPEZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOworCisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsK
KworICAgIG1faGFuZGxlID0gMDsKKworICAgIGlmIChjYW5jZWxsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1faG9zdC0+cmVtb3ZlRnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXIodGhpcyk7
CisgICAgRnJhbWVsZXNzUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoKTsKK30KKwor
dm9pZCBGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikKK3sKKyAgICBpZiAoY2FuY2VsbGVkKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBBU1NFUlQoIXJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpOworCisgICAgLy8gQ2FsbGluZyByZW1v
dmVGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlciB3aWxsIGxpa2VseSByZXN1bHQgaW4gYSBjYWxs
IHRvIGRlcmVmLCBzbyB3ZSBtdXN0IHByb3RlY3Qgb3Vyc2VsdmVzLgorICAgIFJlZlB0cjxGcmFt
ZWxlc3NTdWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwodGhpcywgZXJyb3IpOworCisgICAgbV9oYW5k
bGUgPSAwOworCisgICAgaWYgKGNhbmNlbGxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9o
b3N0LT5yZW1vdmVGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlcih0aGlzKTsKKyAgICBGcmFtZWxl
c3NSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbChlcnJvcik7Cit9CisKK3ZvaWQgRnJhbWVsZXNzU3Vi
cmVzb3VyY2VMb2FkZXI6OmRpZENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sK
KyAgICBBU1NFUlQoIXJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpOworCisgICAgLy8gQ2FsbGluZyBy
ZW1vdmVGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlciB3aWxsIGxpa2VseSByZXN1bHQgaW4gYSBj
YWxsIHRvIGRlcmVmLCBzbyB3ZSBtdXN0IHByb3RlY3Qgb3Vyc2VsdmVzLgorICAgIFJlZlB0cjxG
cmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgIGlmIChtX2Ns
aWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwodGhpcywgZXJyb3IpOworCisgICAgaWYg
KGNhbmNlbGxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9ob3N0LT5yZW1vdmVGcmFtZWxl
c3NTdWJyZXNvdXJjZUxvYWRlcih0aGlzKTsKKyAgICBGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6
ZGlkQ2FuY2VsKGVycm9yKTsKK30KKworYm9vbCBGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlcjo6
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQoreworICAgIFJlZlB0cjxGcmFtZWxlc3NTdWJy
ZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgIGJvb2wgc2hvdWxkVXNlOworICAg
IGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+Z2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Uo
dGhpcywgc2hvdWxkVXNlKSkKKyAgICAgICAgcmV0dXJuIHNob3VsZFVzZTsKKworICAgIHJldHVy
biBGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsK
K30KKwordm9pZCBGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2Up
Cit7CisgICAgUmVmUHRyPEZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMp
OworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKHRoaXMsIGNoYWxsZW5nZSk7CisKKyAgICAvLyBUaGUgU3ViUmVz
b3VyY2VMb2FkZXJDbGllbnQgbWF5IGhhdmUgY2FuY2VsbGVkIHRoaXMgRnJhbWVsZXNzUmVzb3Vy
Y2VMb2FkZXIgaW4gcmVzcG9uc2UgdG8gdGhlIGNoYWxsZW5nZS4KKyAgICAvLyBJZiB0aGF0J3Mg
dGhlIGNhc2UsIGRvbid0IGNhbGwgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLgor
ICAgIGlmIChyZWFjaGVkVGVybWluYWxTdGF0ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBG
cmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KGNoYWxsZW5nZSk7Cit9CisKK3ZvaWQgRnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXI6OnJlY2Vp
dmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2Up
Cit7CisgICAgQVNTRVJUKCFyZWFjaGVkVGVybWluYWxTdGF0ZSgpKTsKKworICAgIFJlZlB0cjxG
cmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgIGlmIChtX2Ns
aWVudCkKKyAgICAgICAgbV9jbGllbnQtPnJlY2VpdmVkQ2FuY2VsbGF0aW9uKHRoaXMsIGNoYWxs
ZW5nZSk7CisKKyAgICBGcmFtZWxlc3NSZXNvdXJjZUxvYWRlcjo6cmVjZWl2ZWRDYW5jZWxsYXRp
b24oY2hhbGxlbmdlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vRnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXIuaCBiL1dl
YkNvcmUvbG9hZGVyL2Nocm9taXVtL0ZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhYjdkYgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0ZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyLmgKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZyYW1lbGVzc1N1YnJlc291cmNlTG9h
ZGVyX2gKKyNkZWZpbmUgRnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXJfaAorCisjaW5jbHVkZSAi
RnJhbWVsZXNzUmVzb3VyY2VMb2FkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
c3RydWN0IFJlc291cmNlUmVxdWVzdDsKKyAgICBjbGFzcyBGcmFtZWxlc3NTdWJyZXNvdXJjZUxv
YWRlckNsaWVudDsKKworICAgIGNsYXNzIEZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyIDogcHVi
bGljIEZyYW1lbGVzc1Jlc291cmNlTG9hZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyPiBjcmVhdGUoRnJhbWVsZXNz
UmVzb3VyY2VMb2FkZXJIb3N0KiwgRnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNraXBDYW5Mb2FkQ2hlY2sgPSBmYWxzZSwgYm9v
bCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSwgYm9vbCBzaG91bGRDb250ZW50U25p
ZmYgPSB0cnVlLCBib29sIGRlZmVyc0xvYWRpbmcgPSB0cnVlKTsKKworICAgICAgICB2b2lkIGNs
ZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IDA7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEZy
YW1lbGVzc1N1YnJlc291cmNlTG9hZGVyKEZyYW1lbGVzc1Jlc291cmNlTG9hZGVySG9zdCosIEZy
YW1lbGVzc1N1YnJlc291cmNlTG9hZGVyQ2xpZW50KiwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBkZWZlcnNMb2FkaW5nKTsKKyAg
ICAgICAgdmlydHVhbCB+RnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXIoKTsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
U2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25n
IHRvdGFsQnl0ZXNUb0JlU2VudCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCwgbG9uZyBsb25nIGxlbmd0aFJlY2VpdmVkLCBi
b29sIGFsbEF0T25jZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAg
ICAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2Fu
Y2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRDYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworCisgICAgICAgIEZyYW1l
bGVzc1N1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKKyAgICAgICAgYm9vbCBtX2xv
YWRpbmdNdWx0aXBhcnRDb250ZW50OworICAgIH07CisKK30gLy8gV2ViQ29yZQorCisjZW5kaWYg
Ly8gRnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2Fk
ZXIvY2hyb21pdW0vRnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaCBiL1dlYkNvcmUv
bG9hZGVyL2Nocm9taXVtL0ZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4MTMxZAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0ZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyQ2xpZW50
LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhbWVsZXNzU3VicmVzb3Vy
Y2VMb2FkZXJDbGllbnRfaAorI2RlZmluZSBGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlckNsaWVu
dF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOworICAgIGNsYXNzIEZyYW1lbGVzc1N1YnJlc291cmNlTG9hZGVyOworICAgIGNsYXNz
IFJlc291cmNlRXJyb3I7CisgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAgICBjbGFzcyBT
ZWN1cml0eU9yaWdpbjsKKworICAgIHN0cnVjdCBSZXNvdXJjZVJlcXVlc3Q7CisKKyAgICBjbGFz
cyBGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAg
ICB2aXJ0dWFsIH5GcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlckNsaWVudCgpIHsgfQorCisgICAg
ICAgIC8vIHJlcXVlc3QgbWF5IGJlIG1vZGlmaWVkCisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxs
U2VuZFJlcXVlc3QoRnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGlyZWN0UmVzcG9uc2UqLykgeyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlcios
IHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyp0
b3RhbEJ5dGVzVG9CZVNlbnQqLykgeyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZShGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKEZyYW1lbGVz
c1N1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8p
IHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhGcmFtZWxlc3NTdWJy
ZXNvdXJjZUxvYWRlciopIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChGcmFtZWxl
c3NTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KKworICAgICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRnJhbWVsZXNzU3Vi
cmVzb3VyY2VMb2FkZXIqLCBib29sJiAvKnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKi8pIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoRnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5j
ZWxsYXRpb24oRnJhbWVsZXNzU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYpIHsgfQorCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIG91dGdvaW5nT3JpZ2lu
KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbigpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBv
bGljeSBjYWNoZVBvbGljeSgpIGNvbnN0ID0gMDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFtZWxlc3NTdWJyZXNvdXJjZUxvYWRlckNsaWVudF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>