<?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>23584</bug_id>
          
          <creation_ts>2009-01-28 05:02:24 -0800</creation_ts>
          <short_desc>Update application cache code for the latest round of spec changes</short_desc>
          <delta_ts>2009-01-29 00:27:19 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>107315</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-01-28 05:02:24 -0800</bug_when>
    <thetext>The changes mostly affect the update process - events are sent at different time, and caches are associated with documents differently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107316</commentid>
    <comment_count>1</comment_count>
      <attachid>27102</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-01-28 05:30:20 -0800</bug_when>
    <thetext>Created attachment 27102
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107347</commentid>
    <comment_count>2</comment_count>
      <attachid>27102</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2009-01-28 10:49:28 -0800</bug_when>
    <thetext>Comment on attachment 27102
proposed patch


&gt; +    it = m_pendingMasterResourceLoaders.find(loader);
&gt; +    if (it != m_pendingMasterResourceLoaders.end())
&gt; +        m_pendingMasterResourceLoaders.remove(it);
&gt;  

This could just be m_pendingMasterResourceLoaders.remove(loader);

Looks great otherwise! r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107480</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-01-29 00:27:19 -0800</bug_when>
    <thetext>Committed revision 40354.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27102</attachid>
            <date>2009-01-28 05:30:20 -0800</date>
            <delta_ts>2009-01-28 10:49:35 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>RewriteCacheUpdate.txt</filename>
            <type>text/plain</type>
            <size>69549</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDMwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzEgQEAKKzIwMDktMDEtMjggIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NAorICAgICAgICBV
cGRhdGUgYXBwbGljYXRpb24gY2FjaGUgY29kZSBmb3IgdGhlIGxhdGVzdCByb3VuZCBvZiBzcGVj
IGNoYW5nZXMKKworICAgICAgICBUaGUgY2hhbmdlcyBtb3N0bHkgYWZmZWN0IHRoZSB1cGRhdGUg
cHJvY2VzcyAtIGV2ZW50cyBhcmUgc2VudCBhdCBhIGRpZmZlcmVudAorICAgICAgICB0aW1lLCBh
bmQgY2FjaGVzIGFyZSBhc3NvY2lhdGVkIHdpdGggZG9jdW1lbnRzIGVhcmxpZXIuCisKKyAgICAg
ICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXI6Om1haW5SZWNlaXZlZEVycm9yKTogQ2hhbmdlZCBhbiBhbHdheXMgcGFzc2luZyB0
ZXN0IHRvIGFuIGFzc2VydGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpz
aG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSk6IENhY2hlcyBhcmUgbm93IGFz
c29jaWF0ZWQKKyAgICAgICAgd2l0aCBEb2N1bWVudExvYWRlciBiZWZvcmUgYmVpbmcgY29tcGxl
dGUsIGJ1dCB0aGV5IG9ubHkgYWZmZWN0IGxvYWRpbmcgYWZ0ZXIgYmVpbmcgY29tcGxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmdldEFwcGxpY2F0aW9uQ2FjaGVGYWxs
YmFja1Jlc291cmNlKTogRGl0dG8uCisKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpzZXRH
cm91cCk6IEFsbG93IHNldHRpbmcgdGhlIGdyb3VwIHRvIHRoZSBzYW1lIG9uZSwgdG8gc2ltcGxp
ZnkKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlOjppc0NvbXBsZXRlKTogQSBuZXcgbWV0aG9kIHRoYXQgdGVsbHMg
d2hldGhlciB0aGUgY2FjaGUgaXMKKyAgICAgICAgY29tcGxldGUsIGFzIGRlZmluZWQgaW4gSFRN
TDUuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaDogQWRkZWQg
aXNDb21wbGV0ZSgpLgorCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5oOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVVwZGF0ZU9wdGlv
bik6IFBlciBIVE1MNSwgY2FjaGUgdXBkYXRpbmcgc2hvdWxkIHdvcmsgZGlmZmVyZW50bHkKKyAg
ICAgICAgd2hlbiBpbnZva2VkIHdpdGggb3Igd2l0aG91dCBhIGJyb3dzaW5nIGNvbnRleHQgKEZy
YW1lKS4gQSBGcmFtZSBpcyBjdXJyZW50bHkgYWx3YXlzIG5lZWRlZAorICAgICAgICBmb3IgdXBk
YXRpbmcgaW4gV2ViS2l0LCBzbyBhIG5ldyBhcmd1bWVudCB0byB1cGRhdGUoKSB0ZWxscyB3aGV0
aGVyIHdlIHNob3VsZCBwcmV0ZW5kIHRoYXQKKyAgICAgICAgdGhlcmUgaXNuJ3Qgb25lLgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpjYWNoZUlzQmVpbmdVcGRhdGVk
KTogQSBoZWxwZXIgZm9yIEFwcGxpY2F0aW9uQ2FjaGU6OmlzQ29tcGxldGUoKS4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Q29tcGxldGlvblR5cGUpOiBDYWNoZSB1
cGRhdGUgYWxnb3JpdGhtIG5vdyB3YWl0cyBmb3IKKyAgICAgICAgbmUgbWFpbiByZXNvdXJjZXMg
dG8gZmluaXNoIGxvYWRpbmcgaW4gbW9yZSBjYXNlcy4gQSBtZW1iZXIgdmFyaWFibGUgb2YgdGhp
cyB0eXBlIGlzIHVzZWQgdG8KKyAgICAgICAgZGlzdGluZ3Vpc2ggYmV0d2VlbiBkaWZmZXJlbnQg
Y2FzZXMgd2hlbiB3YWl0aW5nLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdy
b3VwOjptX2NhY2hlQ2FuZGlkYXRlcyk6IFRoZSBuZXcgYWxnb3JpdGhtIGRvZXNuJ3QgdHJhY2sg
Y2FjaGUKKyAgICAgICAgY2FuZGlkYXRlcy4gQ2FjaGVzIGFyZSBhc3NvY2lhdGVkIHdpdGggZG9j
dW1lbnRzIG11Y2ggZWFybGllciwgYnV0IHRoZSBvbmVzIHdob3NlIG1haW4gcmVzb3VyY2VzCisg
ICAgICAgIGhhdmUgbm90IGJlZW4gbG9hZGVkIGZyb20gYSBjYWNoZSBhcmUgYmVpbmcgdHJhY2tl
ZCBpbiBhIHBlbmRpbmcgbWFzdGVyIGVudHJ5IGxpc3QuCisKKyAgICAgICAgKiBsb2FkZXIvYXBw
Y2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHA6IChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNh
Y2hlOjp1cGRhdGUpOgorICAgICAgICBBbiBleHBsaWNpdCBjYWxsIHRvIHVwZGF0ZSgpIGludm9r
ZXMgdGhlIGFsZ29yaXRobSB3aXRob3V0IGEgYnJvd3NpbmcgY29udGV4dC4KKworICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXApOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjp+QXBwbGljYXRpb25DYWNoZUdy
b3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0Q2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZWxlY3RDYWNo
ZVdpdGhvdXRNYW5pZmVzdFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
R3JvdXA6OmZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6OmZhaWxlZExvYWRpbmdNYWluUmVzb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzdG9wTG9hZGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpc2Fzc29jaWF0ZURvY3VtZW50TG9h
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2FjaGVEZXN0
cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZXROZXdl
c3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnVwZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZFJlY2VpdmVS
ZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZp
bmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpk
aWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmlu
aXNoTG9hZGluZ01hbmlmZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVH
cm91cDo6Y2FjaGVVcGRhdGVGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZUdyb3VwOjptYW5pZmVzdE5vdEZvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVHcm91cDo6Y2hlY2tJZkxvYWRJc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c3RhcnRMb2FkaW5nRW50cnkpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkZWxpdmVyRGVsYXllZE1haW5SZXNvdXJjZXMp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjphZGRFbnRyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFzc29jaWF0ZURvY3VtZW50
TG9hZGVyV2l0aENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGxDYWNoZUxpc3RlbmVyVGFz
azo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGxDYWNoZUxpc3RlbmVyVGFzazo6cGVy
Zm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbENhY2hlTGlzdGVuZXJUYXNrOjpDYWxs
Q2FjaGVMaXN0ZW5lclRhc2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdy
b3VwOjpwb3N0TGlzdGVuZXJUYXNrKToKKyAgICAgICAgUmV3cm90ZSB0aGUgdXBkYXRlIGFsZ29y
aXRobS4KKwogMjAwOS0wMS0yOCAgRGFyaW4gRmlzaGVyICA8ZGFyaW5AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcAkocmV2aXNpb24gNDAyNDYpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NSwxMCArMjU1LDE0IEBAIHZvaWQgRG9jdW1l
bnRMb2FkZXI6OmNsZWFyRXJyb3JzKCkKIAogdm9pZCBEb2N1bWVudExvYWRlcjo6bWFpblJlY2Vp
dmVkRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IsIGJvb2wgaXNDb21wbGV0ZSkKIHsK
KyAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsKKwogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpCiAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IG1fY2FuZGlk
YXRlQXBwbGljYXRpb25DYWNoZUdyb3VwOwotICAgIGlmICghZ3JvdXAgJiYgbV9hcHBsaWNhdGlv
bkNhY2hlICYmICFtYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlKCkpCisgICAgaWYgKCFncm91
cCAmJiBtX2FwcGxpY2F0aW9uQ2FjaGUpIHsKKyAgICAgICAgQVNTRVJUKCFtYWluUmVzb3VyY2VB
cHBsaWNhdGlvbkNhY2hlKCkpOyAvLyBJZiB0aGUgbWFpbiByZXNvdXJjZSB3ZXJlIGxvYWRlZCBm
cm9tIGEgY2FjaGUsIGl0IHdvdWxkbid0IGZhaWwuCiAgICAgICAgIGdyb3VwID0gbV9hcHBsaWNh
dGlvbkNhY2hlLT5ncm91cCgpOworICAgIH0KICAgICAKICAgICBpZiAoZ3JvdXApCiAgICAgICAg
IGdyb3VwLT5mYWlsZWRMb2FkaW5nTWFpblJlc291cmNlKHRoaXMpOwpAQCAtODY2LDcgKzg3MCw3
IEBAIEFwcGxpY2F0aW9uQ2FjaGUqIERvY3VtZW50TG9hZGVyOjptYWluUmUKIGJvb2wgRG9jdW1l
bnRMb2FkZXI6OnNob3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYgcmVzb3Vy
Y2UpCiB7CiAgICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBhcHBsaWNhdGlvbkNhY2hlKCk7
Ci0gICAgaWYgKCFjYWNoZSkKKyAgICBpZiAoIWNhY2hlIHx8ICFjYWNoZS0+aXNDb21wbGV0ZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJZiB0aGUgcmVzb3VyY2UgaXMgbm90
IGEgSFRUUC9IVFRQUyBHRVQsIHRoZW4gYWJvcnQKQEAgLTg5NCw2ICs4OTgsOCBAQCBib29sIERv
Y3VtZW50TG9hZGVyOjpnZXRBcHBsaWNhdGlvbkNhY2hlCiAgICAgICAgIGlmICghY2FjaGUpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIGlmICghY2FjaGUtPmlzQ29tcGxl
dGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIElmIHRoZSByZXNvdXJj
ZSBpcyBub3QgYSBIVFRQL0hUVFBTIEdFVCwgdGhlbiBhYm9ydAogICAgIGlmICghQXBwbGljYXRp
b25DYWNoZTo6cmVxdWVzdElzSFRUUE9ySFRUUFNHZXQocmVxdWVzdCkpCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAkocmV2aXNpb24gNDAyNDYp
CisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsMTAgKzUxLDE1IEBAIEFwcGxpY2F0aW9uQ2FjaGU6On5BcHBsaWNhdGlv
bkNhY2hlKCkKICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNoZTo6c2V0R3JvdXAoQXBwbGljYXRp
b25DYWNoZUdyb3VwKiBncm91cCkKIHsKLSAgICBBU1NFUlQoIW1fZ3JvdXApOworICAgIEFTU0VS
VCghbV9ncm91cCB8fCBncm91cCA9PSBtX2dyb3VwKTsKICAgICBtX2dyb3VwID0gZ3JvdXA7CiB9
CiAKK2Jvb2wgQXBwbGljYXRpb25DYWNoZTo6aXNDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuICFtX2dyb3VwLT5jYWNoZUlzQmVpbmdVcGRhdGVkKHRoaXMpOworfQorCiB2b2lkIEFwcGxp
Y2F0aW9uQ2FjaGU6OnNldE1hbmlmZXN0UmVzb3VyY2UoUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U+IG1hbmlmZXN0KQogewogICAgIEFTU0VSVChtYW5pZmVzdCk7CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oCShyZXZpc2lvbiA0MDI0
NikKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNyArNTgsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRHcm91
cChBcHBsaWNhdGlvbkNhY2hlR3JvdXAqKTsKICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdy
b3VwKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cDsgfQotICAgIAorCisgICAgYm9vbCBpc0NvbXBs
ZXRlKCkgY29uc3Q7CisKICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlRm9y
UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UqIHJlc291cmNlRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsKTsKIApJbmRleDogV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCShyZXZp
c2lvbiA0MDI0NikKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVH
cm91cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpBcHBsaWNhdGlvbkNhY2hlRwogICAgICwgbV9mcmFtZSgwKQogICAgICwgbV9zdG9y
YWdlSUQoMCkKICAgICAsIG1faXNPYnNvbGV0ZShmYWxzZSkKKyAgICAsIG1fY29tcGxldGlvblR5
cGUoTm9uZSkKICAgICAsIG1faXNDb3B5KGlzQ29weSkKIHsKIH0KQEAgLTYyLDcgKzYzLDcgQEAg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjp+QXBwbGljYXRpb25DYWNoZQogICAgICAgICBBU1NFUlQo
bV9jYWNoZXMuY29udGFpbnMobV9uZXdlc3RDYWNoZS5nZXQoKSkpOwogICAgICAgICBBU1NFUlQo
IW1fY2FjaGVCZWluZ1VwZGF0ZWQpOwogICAgICAgICBBU1NFUlQobV9hc3NvY2lhdGVkRG9jdW1l
bnRMb2FkZXJzLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVChtX2NhY2hlQ2FuZGlkYXRlcy5p
c0VtcHR5KCkpOworICAgICAgICBBU1NFUlQobV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJz
LmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChtX25ld2VzdENhY2hlLT5ncm91cCgpID09IHRo
aXMpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuOwpAQCAtMTI2LDcgKzEyNyw3IEBAIHZvaWQg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZSgKICAgICBpZiAobWFpblJlc291cmNl
Q2FjaGUpIHsKICAgICAgICAgaWYgKG1hbmlmZXN0VVJMID09IG1haW5SZXNvdXJjZUNhY2hlLT5n
cm91cCgpLT5tX21hbmlmZXN0VVJMKSB7CiAgICAgICAgICAgICBtYWluUmVzb3VyY2VDYWNoZS0+
Z3JvdXAoKS0+YXNzb2NpYXRlRG9jdW1lbnRMb2FkZXJXaXRoQ2FjaGUoZG9jdW1lbnRMb2FkZXIs
IG1haW5SZXNvdXJjZUNhY2hlKTsKLSAgICAgICAgICAgIG1haW5SZXNvdXJjZUNhY2hlLT5ncm91
cCgpLT51cGRhdGUoZnJhbWUpOworICAgICAgICAgICAgbWFpblJlc291cmNlQ2FjaGUtPmdyb3Vw
KCktPnVwZGF0ZShmcmFtZSwgQXBwbGljYXRpb25DYWNoZVVwZGF0ZVdpdGhCcm93c2luZ0NvbnRl
eHQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhlIG1haW4gcmVzb3VyY2Ug
d2FzIGxvYWRlZCBmcm9tIGNhY2hlLCBzbyB0aGUgY2FjaGUgbXVzdCBoYXZlIGFuIGVudHJ5IGZv
ciBpdC4gTWFyayBpdCBhcyBmb3JlaWduLgogICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZVJl
c291cmNlKiByZXNvdXJjZSA9IG1haW5SZXNvdXJjZUNhY2hlLT5yZXNvdXJjZUZvclVSTChkb2N1
bWVudExvYWRlci0+dXJsKCkpOwpAQCAtMTQ3LDUzICsxNDgsMjIgQEAgdm9pZCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlKAogICAgIC8vIFRoZSByZXNvdXJjZSB3YXMgbG9hZGVk
IGZyb20gdGhlIG5ldHdvcmssIGNoZWNrIGlmIGl0IGlzIGEgSFRUUC9IVFRQUyBHRVQuICAgIAog
ICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCA9IGZyYW1lLT5sb2FkZXIoKS0+YWN0
aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpOwogCi0gICAgaWYgKCFBcHBsaWNhdGlvbkNh
Y2hlOjpyZXF1ZXN0SXNIVFRQT3JIVFRQU0dldChyZXF1ZXN0KSkgewotICAgICAgICBzZWxlY3RD
YWNoZVdpdGhvdXRNYW5pZmVzdFVSTChmcmFtZSk7CisgICAgaWYgKCFBcHBsaWNhdGlvbkNhY2hl
OjpyZXF1ZXN0SXNIVFRQT3JIVFRQU0dldChyZXF1ZXN0KSkKICAgICAgICAgcmV0dXJuOwotICAg
IH0KIAogICAgIC8vIENoZWNrIHRoYXQgdGhlIHJlc291cmNlIFVSTCBoYXMgdGhlIHNhbWUgc2No
ZW1lL2hvc3QvcG9ydCBhcyB0aGUgbWFuaWZlc3QgVVJMLgotICAgIGlmICghcHJvdG9jb2xIb3N0
QW5kUG9ydEFyZUVxdWFsKG1hbmlmZXN0VVJMLCByZXF1ZXN0LnVybCgpKSkgewotICAgICAgICBz
ZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdFVSTChmcmFtZSk7CisgICAgaWYgKCFwcm90b2NvbEhv
c3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RVUkwsIHJlcXVlc3QudXJsKCkpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQogICAgICAgICAgICAgCiAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBn
cm91cCA9IGNhY2hlU3RvcmFnZSgpLmZpbmRPckNyZWF0ZUNhY2hlR3JvdXAobWFuaWZlc3RVUkwp
OwogCi0gICAgaWYgKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gZ3JvdXAtPm5ld2VzdENhY2hl
KCkpIHsKLSAgICAgICAgQVNTRVJUKGNhY2hlLT5tYW5pZmVzdFJlc291cmNlKCkpOworICAgIGJv
b2wgaXNVcGRhdGluZyA9IGdyb3VwLT5tX2NhY2hlQmVpbmdVcGRhdGVkOwogCi0gICAgICAgIGdy
b3VwLT5hc3NvY2lhdGVEb2N1bWVudExvYWRlcldpdGhDYWNoZShmcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCksIGNhY2hlKTsKKyAgICBkb2N1bWVudExvYWRlci0+c2V0Q2FuZGlkYXRl
QXBwbGljYXRpb25DYWNoZUdyb3VwKGdyb3VwKTsKKyAgICBncm91cC0+bV9wZW5kaW5nTWFzdGVy
UmVzb3VyY2VMb2FkZXJzLmFkZChkb2N1bWVudExvYWRlcik7CiAKLSAgICAgICAgaWYgKCFmcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKQot
ICAgICAgICAgICAgZ3JvdXAtPmZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJjZShmcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpOwotCi0gICAgICAgIGdyb3VwLT51cGRhdGUoZnJhbWUp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJvb2wgaXNVcGRhdGluZyA9IGdyb3VwLT5tX2NhY2hl
QmVpbmdVcGRhdGVkOwotICAgICAgICAgICAgICAgIAotICAgICAgICBpZiAoIWlzVXBkYXRpbmcp
Ci0gICAgICAgICAgICBncm91cC0+bV9jYWNoZUJlaW5nVXBkYXRlZCA9IEFwcGxpY2F0aW9uQ2Fj
aGU6OmNyZWF0ZSgpOwotICAgICAgICBkb2N1bWVudExvYWRlci0+c2V0Q2FuZGlkYXRlQXBwbGlj
YXRpb25DYWNoZUdyb3VwKGdyb3VwKTsKLSAgICAgICAgZ3JvdXAtPm1fY2FjaGVDYW5kaWRhdGVz
LmFkZChkb2N1bWVudExvYWRlcik7Ci0KLSAgICAgICAgY29uc3QgS1VSTCYgdXJsID0gZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5vcmlnaW5hbFVSTCgpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCB0eXBlID0gMDsKLQotICAgICAgICAvLyBJZiB0aGUgcmVz
b3VyY2UgaGFzIGFscmVhZHkgYmVlbiBkb3dubG9hZGVkLCByZW1vdmUgaXQgc28gdGhhdCBpdCB3
aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGltcGxpY2l0IHJlc291cmNlCi0gICAgICAgIGlmIChp
c1VwZGF0aW5nKQotICAgICAgICAgICAgdHlwZSA9IGdyb3VwLT5tX2NhY2hlQmVpbmdVcGRhdGVk
LT5yZW1vdmVSZXNvdXJjZSh1cmwpOwotICAgICAgICAgICAgICAgCi0gICAgICAgIC8vIEFkZCB0
aGUgbWFpbiByZXNvdXJjZSBVUkwgYXMgYW4gaW1wbGljaXQgZW50cnkuCi0gICAgICAgIGdyb3Vw
LT5hZGRFbnRyeSh1cmwsIHR5cGUgfCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkltcGxpY2l0
KTsKLQotICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNM
b2FkaW5nTWFpblJlc291cmNlKCkpCi0gICAgICAgICAgICBncm91cC0+ZmluaXNoZWRMb2FkaW5n
TWFpblJlc291cmNlKGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgIGlmICghaXNVcGRhdGluZykKLSAgICAgICAgICAgIGdyb3VwLT51
cGRhdGUoZnJhbWUpOyAgICAgICAgICAgICAgICAKLSAgICB9ICAgICAgICAgICAgICAgCisgICAg
QVNTRVJUKCFpc1VwZGF0aW5nIHx8IGdyb3VwLT5tX3VwZGF0ZVN0YXR1cyAhPSBJZGxlKTsKKyAg
ICBncm91cC0+dXBkYXRlKGZyYW1lLCBBcHBsaWNhdGlvbkNhY2hlVXBkYXRlV2l0aEJyb3dzaW5n
Q29udGV4dCk7CiB9CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZVdp
dGhvdXRNYW5pZmVzdFVSTChGcmFtZSogZnJhbWUpCkBAIC0yMDgsNDMgKzE3OCwxMDEgQEAgdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlVwogCiAgICAgaWYgKG1haW5SZXNv
dXJjZUNhY2hlKSB7CiAgICAgICAgIG1haW5SZXNvdXJjZUNhY2hlLT5ncm91cCgpLT5hc3NvY2lh
dGVEb2N1bWVudExvYWRlcldpdGhDYWNoZShkb2N1bWVudExvYWRlciwgbWFpblJlc291cmNlQ2Fj
aGUpOwotICAgICAgICBtYWluUmVzb3VyY2VDYWNoZS0+Z3JvdXAoKS0+dXBkYXRlKGZyYW1lKTsK
KyAgICAgICAgbWFpblJlc291cmNlQ2FjaGUtPmdyb3VwKCktPnVwZGF0ZShmcmFtZSwgQXBwbGlj
YXRpb25DYWNoZVVwZGF0ZVdpdGhCcm93c2luZ0NvbnRleHQpOwogICAgIH0KIH0KIAogdm9pZCBB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6OmZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJjZShEb2N1bWVu
dExvYWRlciogbG9hZGVyKQogeworICAgIEFTU0VSVChtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxv
YWRlcnMuY29udGFpbnMobG9hZGVyKSk7CisgICAgQVNTRVJUKG1fY29tcGxldGlvblR5cGUgPT0g
Tm9uZSB8fCBtX3BlbmRpbmdFbnRyaWVzLmlzRW1wdHkoKSk7CiAgICAgY29uc3QgS1VSTCYgdXJs
ID0gbG9hZGVyLT5vcmlnaW5hbFVSTCgpOwotICAgIAotICAgIGlmIChBcHBsaWNhdGlvbkNhY2hl
KiBjYWNoZSA9IGxvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291
cmNlOjpjcmVhdGUodXJsLCBsb2FkZXItPnJlc3BvbnNlKCksIEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZTo6SW1wbGljaXQsIGxvYWRlci0+bWFpblJlc291cmNlRGF0YSgpKTsKLSAgICAgICAgY2Fj
aGUtPmFkZFJlc291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoIW1fY2FjaGVCZWluZ1VwZGF0ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIEFTU0VSVChtX3BlbmRpbmdFbnRyaWVzLmNvbnRhaW5zKHVybCkpOwotIAotICAgIEVu
dHJ5TWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0VudHJpZXMuZmluZCh1cmwpOwotICAgIEFT
U0VSVChpdC0+c2Vjb25kICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpJbXBsaWNpdCk7CiAK
LSAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZSA9IEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgbG9hZGVyLT5yZXNwb25zZSgpLCBpdC0+c2Vj
b25kLCBsb2FkZXItPm1haW5SZXNvdXJjZURhdGEoKSk7CisgICAgc3dpdGNoIChtX2NvbXBsZXRp
b25UeXBlKSB7CisgICAgY2FzZSBOb25lOgorICAgICAgICAvLyBUaGUgbWFpbiByZXNvdXJjZSBm
aW5pc2hlZCBsb2FkaW5nIGJlZm9yZSB0aGUgbWFuaWZlc3Qgd2FzIHJlYWR5LiBJdCB3aWxsIGJl
IGhhbmRsZWQgdmlhIGRpc3BhdGNoTWFpblJlc291cmNlcygpIGxhdGVyLgorICAgICAgICByZXR1
cm47CisgICAgY2FzZSBOb1VwZGF0ZToKKyAgICAgICAgQVNTRVJUKCFtX2NhY2hlQmVpbmdVcGRh
dGVkKTsKKyAgICAgICAgYXNzb2NpYXRlRG9jdW1lbnRMb2FkZXJXaXRoQ2FjaGUobG9hZGVyLCBt
X25ld2VzdENhY2hlLmdldCgpKTsKIAotICAgIEFTU0VSVChtX2NhY2hlQmVpbmdVcGRhdGVkKTsK
LSAgICBtX2NhY2hlQmVpbmdVcGRhdGVkLT5hZGRSZXNvdXJjZShyZXNvdXJjZS5yZWxlYXNlKCkp
OwotICAgIAotICAgIG1fcGVuZGluZ0VudHJpZXMucmVtb3ZlKGl0KTsKKyAgICAgICAgaWYgKEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBtX25ld2VzdENhY2hlLT5yZXNvdXJj
ZUZvclVSTCh1cmwpKSB7CisgICAgICAgICAgICBpZiAoIShyZXNvdXJjZS0+dHlwZSgpICYgQXBw
bGljYXRpb25DYWNoZVJlc291cmNlOjpJbXBsaWNpdCkpIHsKKyAgICAgICAgICAgICAgICByZXNv
dXJjZS0+YWRkVHlwZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkltcGxpY2l0KTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoIXJlc291cmNlLT5zdG9yYWdlSUQoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9uZXdlc3RDYWNoZS0+YWRkUmVzb3VyY2Uo
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCBsb2FkZXItPnJlc3BvbnNlKCks
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6SW1wbGljaXQsIGxvYWRlci0+bWFpblJlc291cmNl
RGF0YSgpKSk7CisKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGYWlsdXJlOgorICAgICAgICAv
LyBDYWNoZSB1cGRhdGUgaGFzIGJlZW4gYSBmYWlsdXJlLCBzbyB0aGVyZSBpcyBubyByZWFzb24g
dG8ga2VlcCB0aGUgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmNvbXBsZXRlIGNhY2hl
CisgICAgICAgIC8vIChpdHMgbWFpbiByZXNvdXJjZSB3YXMgbm90IGNhY2hlZCB5ZXQsIHNvIGl0
IGlzIGxpa2VseSB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjaGFuZ2VkIHNpZ25pZmljYW50bHkgc2Vy
dmVyLXNpZGUpLgorICAgICAgICBBU1NFUlQoIW1fY2FjaGVCZWluZ1VwZGF0ZWQpOyAvLyBBbHJl
YWR5IGNsZWFyZWQgb3V0IGJ5IHN0b3BMb2FkaW5nKCkuCisgICAgICAgIGxvYWRlci0+c2V0QXBw
bGljYXRpb25DYWNoZSgwKTsgLy8gV2lsbCB1bnNldCBjYW5kaWRhdGUsIHRvby4KKyAgICAgICAg
bV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLnJlbW92ZShsb2FkZXIpOworICAgICAgICBwb3N0
TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lciwgbG9h
ZGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wbGV0ZWQ6CisgICAgICAgIEFTU0VS
VChtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMuY29udGFpbnMobG9hZGVyKSk7CisKKyAgICAg
ICAgaWYgKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBtX2NhY2hlQmVpbmdV
cGRhdGVkLT5yZXNvdXJjZUZvclVSTCh1cmwpKSB7CisgICAgICAgICAgICBpZiAoIShyZXNvdXJj
ZS0+dHlwZSgpICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpJbXBsaWNpdCkpIHsKKyAgICAg
ICAgICAgICAgICByZXNvdXJjZS0+YWRkVHlwZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Oklt
cGxpY2l0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJlc291cmNlLT5zdG9yYWdlSUQoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jYWNoZUJlaW5n
VXBkYXRlZC0+YWRkUmVzb3VyY2UoQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJs
LCBsb2FkZXItPnJlc3BvbnNlKCksIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6SW1wbGljaXQs
IGxvYWRlci0+bWFpblJlc291cmNlRGF0YSgpKSk7CisgICAgICAgIC8vIFRoZSAiY2FjaGVkIiBl
dmVudCB3aWxsIGJlIHBvc3RlZCB0byBhbGwgYXNzb2NpYXRlZCBkb2N1bWVudHMgb25jZSB1cGRh
dGUgaXMgY29tcGxldGUuCisgICAgICAgIGJyZWFrOworICAgIH0KIAorICAgIG1fcGVuZGluZ01h
c3RlclJlc291cmNlTG9hZGVycy5yZW1vdmUobG9hZGVyKTsKICAgICBjaGVja0lmTG9hZElzQ29t
cGxldGUoKTsKIH0KIAotdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmZhaWxlZExvYWRpbmdN
YWluUmVzb3VyY2UoRG9jdW1lbnRMb2FkZXIqIHVudXNlZExvYWRlcikKK3ZvaWQgQXBwbGljYXRp
b25DYWNoZUdyb3VwOjpmYWlsZWRMb2FkaW5nTWFpblJlc291cmNlKERvY3VtZW50TG9hZGVyKiBs
b2FkZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRCh1bnVzZWRMb2FkZXIsIG1fY2FjaGVDYW5kaWRh
dGVzLmNvbnRhaW5zKHVudXNlZExvYWRlcikgfHwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJz
LmNvbnRhaW5zKHVudXNlZExvYWRlcikpOworICAgIEFTU0VSVChtX3BlbmRpbmdNYXN0ZXJSZXNv
dXJjZUxvYWRlcnMuY29udGFpbnMobG9hZGVyKSk7CisgICAgQVNTRVJUKG1fY29tcGxldGlvblR5
cGUgPT0gTm9uZSB8fCBtX3BlbmRpbmdFbnRyaWVzLmlzRW1wdHkoKSk7CiAKLSAgICAvLyBOb3Rl
IHRoYXQgY2FjaGVVcGRhdGVGYWlsZWQoKSBjYW4gY2F1c2UgdGhlIGNhY2hlIGdyb3VwIHRvIGJl
IGRlbGV0ZWQuCi0gICAgY2FjaGVVcGRhdGVGYWlsZWQoKTsKKyAgICBzd2l0Y2ggKG1fY29tcGxl
dGlvblR5cGUpIHsKKyAgICBjYXNlIE5vbmU6CisgICAgICAgIC8vIFRoZSBtYWluIHJlc291cmNl
IGZpbmlzaGVkIGxvYWRpbmcgYmVmb3JlIHRoZSBtYW5pZmVzdCB3YXMgcmVhZHkuIEl0IHdpbGwg
YmUgaGFuZGxlZCB2aWEgZGlzcGF0Y2hNYWluUmVzb3VyY2VzKCkgbGF0ZXIuCisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIE5vVXBkYXRlOgorICAgICAgICBBU1NFUlQoIW1fY2FjaGVCZWluZ1Vw
ZGF0ZWQpOworCisgICAgICAgIC8vIFRoZSBtYW5pZmVzdCBkaWRuJ3QgY2hhbmdlLCBhbmQgd2Ug
aGF2ZSBhIHJlbGV2YW50IGNhY2hlIC0gYnV0IHRoZSBtYWluIHJlc291cmNlIGRvd25sb2FkIGZh
aWxlZCBtaWQtd2F5LCBzbyBpdCBjYW5ub3QgYmUgc3RvcmVkIHRvIHRoZSBjYWNoZSwKKyAgICAg
ICAgLy8gYW5kIHRoZSBsb2FkZXIgZG9lcyBub3QgZ2V0IGFzc29jaWF0ZWQgdG8gaXQuIElmIHRo
ZXJlIGFyZSBvdGhlciBtYWluIHJlc291cmNlcyBiZWluZyBkb3dubG9hZGVkIGZvciB0aGlzIGNh
Y2hlIGdyb3VwLCB0aGV5IG1heSBzdGlsbCBzdWNjZWVkLgorICAgICAgICBwb3N0TGlzdGVuZXJU
YXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lciwgbG9hZGVyKTsKKwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEZhaWx1cmU6CisgICAgICAgIC8vIENhY2hlIHVwZGF0
ZSBmYWlsZWQsIHRvby4KKyAgICAgICAgQVNTRVJUKCFtX2NhY2hlQmVpbmdVcGRhdGVkKTsgLy8g
QWxyZWFkeSBjbGVhcmVkIG91dCBieSBzdG9wTG9hZGluZygpLgorICAgICAgICBBU1NFUlQoIWxv
YWRlci0+YXBwbGljYXRpb25DYWNoZSgpIHx8IGxvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpID09
IG1fY2FjaGVCZWluZ1VwZGF0ZWQpOworCisgICAgICAgIGxvYWRlci0+c2V0QXBwbGljYXRpb25D
YWNoZSgwKTsgLy8gV2lsbCB1bnNldCBjYW5kaWRhdGUsIHRvby4KKyAgICAgICAgbV9hc3NvY2lh
dGVkRG9jdW1lbnRMb2FkZXJzLnJlbW92ZShsb2FkZXIpOworICAgICAgICBwb3N0TGlzdGVuZXJU
YXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lciwgbG9hZGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wbGV0ZWQ6CisgICAgICAgIC8vIFRoZSBjYWNoZSBt
YW5pZmVzdCBkaWRuJ3QgbGlzdCB0aGlzIG1haW4gcmVzb3VyY2UsIGFuZCBhbGwgY2FjaGUgZW50
cmllcyB3ZXJlIGFscmVhZHkgdXBkYXRlZCBzdWNjZXNzZnVsbHkgLSBidXQgdGhlIG1haW4gcmVz
b3VyY2UgZmFpbGVkIHRvIGxvYWQsCisgICAgICAgIC8vIHNvIGl0IGNhbm5vdCBiZSBzdG9yZWQg
dG8gdGhlIGNhY2hlLiBJZiB0aGVyZSBhcmUgb3RoZXIgbWFpbiByZXNvdXJjZXMgYmVpbmcgZG93
bmxvYWRlZCBmb3IgdGhpcyBjYWNoZSBncm91cCwgdGhleSBtYXkgc3RpbGwgc3VjY2VlZC4KKyAg
ICAgICAgQVNTRVJUKG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5jb250YWlucyhsb2FkZXIp
KTsKKyAgICAgICAgQVNTRVJUKGxvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpID09IG1fY2FjaGVC
ZWluZ1VwZGF0ZWQpOworICAgICAgICBBU1NFUlQoIWxvYWRlci0+Y2FuZGlkYXRlQXBwbGljYXRp
b25DYWNoZUdyb3VwKCkpOworICAgICAgICBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMucmVt
b3ZlKGxvYWRlcik7CisgICAgICAgIGxvYWRlci0+c2V0QXBwbGljYXRpb25DYWNoZSgwKTsKKwor
ICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JM
aXN0ZW5lciwgbG9hZGVyKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX3BlbmRp
bmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMucmVtb3ZlKGxvYWRlcik7CisgICAgY2hlY2tJZkxvYWRJ
c0NvbXBsZXRlKCk7CiB9CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzdG9wTG9hZGlu
ZygpCkBAIC0yNjcsMzIgKzI5NSwyNiBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c3Rv
cExvYWRpbmcoCiAgICAgfSAgICAKICAgICAKICAgICBtX2NhY2hlQmVpbmdVcGRhdGVkID0gMDsK
KyAgICBtX3BlbmRpbmdFbnRyaWVzLmNsZWFyKCk7CiB9ICAgIAogCiB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cDo6ZGlzYXNzb2NpYXRlRG9jdW1lbnRMb2FkZXIoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlcikKIHsKICAgICBIYXNoU2V0PERvY3VtZW50TG9hZGVyKj46Oml0ZXJhdG9yIGl0ID0gbV9h
c3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmZpbmQobG9hZGVyKTsKLSAgICAKLSAgICBpZiAoaXQg
IT0gbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmVuZCgpKSB7Ci0gICAgICAgIEFTU0VSVCgh
bV9jYWNoZUNhbmRpZGF0ZXMuY29udGFpbnMobG9hZGVyKSk7CisgICAgaWYgKGl0ICE9IG1fYXNz
b2NpYXRlZERvY3VtZW50TG9hZGVycy5lbmQoKSkKICAgICAgICAgbV9hc3NvY2lhdGVkRG9jdW1l
bnRMb2FkZXJzLnJlbW92ZShpdCk7CiAKLSAgICAgICAgLy8gRWl0aGVyIHRoZSBsb2FkZXIgaXMg
YmVpbmcgZGVzdHJveWVkLCBvciBET01BcHBsaWNhdGlvbkNhY2hlOjpzd2FwQ2FjaGUoKSB3YXMg
Y2FsbGVkIGZvciBhbiBvYnNvbGV0ZSBjYWNoZSBncm91cC4KLSAgICAgICAgQVNTRVJUKCFsb2Fk
ZXItPmNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgpKTsKLSAgICAgICAgbG9hZGVyLT5z
ZXRBcHBsaWNhdGlvbkNhY2hlKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX2Nh
Y2hlQ2FuZGlkYXRlcy5jb250YWlucyhsb2FkZXIpKTsKLSAgICAgICAgbV9jYWNoZUNhbmRpZGF0
ZXMucmVtb3ZlKGxvYWRlcik7CisgICAgaXQgPSBtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRl
cnMuZmluZChsb2FkZXIpOworICAgIGlmIChpdCAhPSBtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxv
YWRlcnMuZW5kKCkpCisgICAgICAgIG1fcGVuZGluZ01hc3RlclJlc291cmNlTG9hZGVycy5yZW1v
dmUoaXQpOwogCi0gICAgICAgIC8vIFRoZSBkb2N1bWVudCBsb2FkZXIgaXMgYmVpbmcgZGVzdHJv
eWVkLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IGl0cyBjYWNoZSByZWZlcmVuY2VzLgot
ICAgIH0KKyAgICBsb2FkZXItPnNldEFwcGxpY2F0aW9uQ2FjaGUoMCk7IC8vIFdpbGwgc2V0IGNh
bmRpZGF0ZSB0byAwLCB0b28uCiAKLSAgICBpZiAoIW1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVy
cy5pc0VtcHR5KCkgfHwgIW1fY2FjaGVDYW5kaWRhdGVzLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1f
YXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5pc0VtcHR5KCkgfHwgIW1fcGVuZGluZ01hc3RlclJl
c291cmNlTG9hZGVycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2Nh
Y2hlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gVGhlcmUgaXMgYW4gaW5pdGlhbCBjYWNoZSBh
dHRlbXB0IGluIHByb2dyZXNzLgotICAgICAgICBBU1NFUlQobV9jYWNoZUJlaW5nVXBkYXRlZCk7
CiAgICAgICAgIEFTU0VSVCghbV9uZXdlc3RDYWNoZSk7CiAgICAgICAgIC8vIERlbGV0ZSBvdXJz
ZWx2ZXMsIGNhdXNpbmcgdGhlIGNhY2hlIGF0dGVtcHQgdG8gYmUgc3RvcHBlZC4KICAgICAgICAg
ZGVsZXRlIHRoaXM7CkBAIC0zMDgsMTMgKzMzMCwxNCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cDo6ZGlzYXNzb2NpYXRlCiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjYWNoZURl
c3Ryb3llZChBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKIHsKLSAgICBBU1NFUlQobV9jYWNoZXMu
Y29udGFpbnMoY2FjaGUpKTsKKyAgICBpZiAoIW1fY2FjaGVzLmNvbnRhaW5zKGNhY2hlKSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIG1fY2FjaGVzLnJlbW92ZShjYWNoZSk7CiAKICAgICBp
ZiAobV9jYWNoZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChtX2Fzc29jaWF0ZWREb2N1
bWVudExvYWRlcnMuaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKG1fY2FjaGVDYW5kaWRhdGVz
LmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRl
cnMuaXNFbXB0eSgpKTsKICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICAgfQogfQpAQCAtMzIyLDcg
KzM0NSw2IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjYWNoZURlc3Ryb3kKIHZvaWQg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZXROZXdlc3RDYWNoZShQYXNzUmVmUHRyPEFwcGxpY2F0
aW9uQ2FjaGU+IG5ld2VzdENhY2hlKQogewogICAgIEFTU0VSVCghbV9jYWNoZXMuY29udGFpbnMo
bmV3ZXN0Q2FjaGUuZ2V0KCkpKTsKLSAgICBBU1NFUlQoIW5ld2VzdENhY2hlLT5ncm91cCgpKTsK
IAogICAgIG1fbmV3ZXN0Q2FjaGUgPSBuZXdlc3RDYWNoZTsKIApAQCAtMzQwLDI1ICszNjIsMzcg
QEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6Om1ha2VPYnNvbGV0ZQogICAgIEFTU0VSVCgh
bV9zdG9yYWdlSUQpOwogfQogCi12b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6dXBkYXRlKEZy
YW1lKiBmcmFtZSkKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjp1cGRhdGUoRnJhbWUqIGZy
YW1lLCBBcHBsaWNhdGlvbkNhY2hlVXBkYXRlT3B0aW9uIHVwZGF0ZU9wdGlvbikKIHsKLSAgICBp
ZiAobV91cGRhdGVTdGF0dXMgPT0gQ2hlY2tpbmcgfHwgbV91cGRhdGVTdGF0dXMgPT0gRG93bmxv
YWRpbmcpIAorICAgIGlmIChtX3VwZGF0ZVN0YXR1cyA9PSBDaGVja2luZyB8fCBtX3VwZGF0ZVN0
YXR1cyA9PSBEb3dubG9hZGluZykgeworICAgICAgICBpZiAodXBkYXRlT3B0aW9uID09IEFwcGxp
Y2F0aW9uQ2FjaGVVcGRhdGVXaXRoQnJvd3NpbmdDb250ZXh0KSB7CisgICAgICAgICAgICBwb3N0
TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2hlY2tpbmdMaXN0ZW5lciwg
ZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsKKyAgICAgICAgICAgIGlmIChtX3Vw
ZGF0ZVN0YXR1cyA9PSBEb3dubG9hZGluZykKKyAgICAgICAgICAgICAgICBwb3N0TGlzdGVuZXJU
YXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRG93bmxvYWRpbmdMaXN0ZW5lciwgZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47
CisgICAgfQogCiAgICAgQVNTRVJUKCFtX2ZyYW1lKTsKICAgICBtX2ZyYW1lID0gZnJhbWU7CiAK
ICAgICBtX3VwZGF0ZVN0YXR1cyA9IENoZWNraW5nOwogCi0gICAgY2FsbExpc3RlbmVyc09uQXNz
b2NpYXRlZERvY3VtZW50cygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbENoZWNraW5nTGlzdGVu
ZXIpOworICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDaGVj
a2luZ0xpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOworICAgIGlmICghbV9u
ZXdlc3RDYWNoZSkgeworICAgICAgICBBU1NFUlQodXBkYXRlT3B0aW9uID09IEFwcGxpY2F0aW9u
Q2FjaGVVcGRhdGVXaXRoQnJvd3NpbmdDb250ZXh0KTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFz
aygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbENoZWNraW5nTGlzdGVuZXIsIGZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CisgICAgfQogICAgIAogICAgIEFTU0VSVCghbV9tYW5p
ZmVzdEhhbmRsZSk7CiAgICAgQVNTRVJUKCFtX21hbmlmZXN0UmVzb3VyY2UpOwotICAgIAorICAg
IEFTU0VSVChtX2NvbXBsZXRpb25UeXBlID09IE5vbmUpOworCiAgICAgLy8gRklYTUU6IEhhbmRs
ZSBkZWZlciBsb2FkaW5nCiAgICAgCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV9tYW5p
ZmVzdFVSTCk7CiAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmFwcGx5VXNlckFnZW50KHJlcXVlc3Qp
OworICAgIC8vIEZJWE1FOiBTaG91bGQgYXNrIHRvIHJldmFsaWRhdGUgZnJvbSBvcmlnaW4uCiAg
ICAgCiAgICAgbV9tYW5pZmVzdEhhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUocmVxdWVz
dCwgdGhpcywgbV9mcmFtZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKIH0KQEAgLTM3MiwxNCArNDA2
LDYgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZFJlY2VpdmVSZQogICAgIAogICAg
IEFTU0VSVChoYW5kbGUgPT0gbV9jdXJyZW50SGFuZGxlKTsKIAotICAgIGludCBzdGF0dXNDb2Rl
ID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMDsKLSAgICBpZiAoc3RhdHVzQ29kZSA9
PSA0IHx8IHN0YXR1c0NvZGUgPT0gNSkgewotICAgICAgICAvLyBGSVhNRTogRmFpbGluZyB0byBs
b2FkIHJlc291cmNlcyB0aGF0IGFyZSBub3QgbWFya2VkIGFzIGV4cGxpY2l0IG9yIGZhbGxiYWNr
IHNob3VsZCBub3QgYmUgZmF0YWwuCi0gICAgICAgIC8vIE5vdGUgdGhhdCBjYWNoZVVwZGF0ZUZh
aWxlZCgpIGNhbiBjYXVzZSB0aGUgY2FjaGUgZ3JvdXAgdG8gYmUgZGVsZXRlZC4KLSAgICAgICAg
Y2FjaGVVcGRhdGVGYWlsZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAgICBj
b25zdCBLVVJMJiB1cmwgPSBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKTsKICAgICAKICAgICBBU1NF
UlQoIW1fY3VycmVudFJlc291cmNlKTsKQEAgLTM5MCw2ICs0MTYsMzMgQEAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXA6OmRpZFJlY2VpdmVSZQogICAgIC8vIElmIHRoaXMgaXMgYW4gaW5pdGlh
bCBjYWNoZSBhdHRlbXB0LCB3ZSBzaG91bGQgbm90IGdldCBpbXBsaWNpdCByZXNvdXJjZXMgZGVs
aXZlcmVkIGhlcmUuCiAgICAgaWYgKCFtX25ld2VzdENhY2hlKQogICAgICAgICBBU1NFUlQoISh0
eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpJbXBsaWNpdCkpOworCisgICAgaW50IHN0
YXR1c0NvZGUgPSByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8gMTAwOworICAgIGlmIChzdGF0
dXNDb2RlID09IDQgfHwgc3RhdHVzQ29kZSA9PSA1KSB7CisgICAgICAgIGlmICgodHlwZSAmIEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6RXhwbGljaXQpIHx8ICh0eXBlICYgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlOjpGYWxsYmFjaykpIHsKKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBjYWNo
ZVVwZGF0ZUZhaWxlZCgpIGNhbiBjYXVzZSB0aGUgY2FjaGUgZ3JvdXAgdG8gYmUgZGVsZXRlZC4K
KyAgICAgICAgICAgIGNhY2hlVXBkYXRlRmFpbGVkKCk7CisgICAgICAgIH0gZWxzZSBpZiAocmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDQgfHwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUo
KSA9PSA0MTApIHsKKyAgICAgICAgICAgIC8vIFNraXAgdGhpcyByZXNvdXJjZS4gSXQgaXMgZHJv
cHBlZCBmcm9tIHRoZSBjYWNoZS4KKyAgICAgICAgICAgIG1fY3VycmVudEhhbmRsZS0+Y2FuY2Vs
KCk7CisgICAgICAgICAgICBtX2N1cnJlbnRIYW5kbGUgPSAwOworICAgICAgICAgICAgbV9wZW5k
aW5nRW50cmllcy5yZW1vdmUoaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkpOworICAgICAgICAgICAg
Ly8gTG9hZCB0aGUgbmV4dCByZXNvdXJjZSwgaWYgYW55LgorICAgICAgICAgICAgc3RhcnRMb2Fk
aW5nRW50cnkoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENvcHkgdGhlIHJl
c291cmNlIGFuZCBpdHMgbWV0YWRhdGEgZnJvbSB0aGUgbmV3ZXN0IGFwcGxpY2F0aW9uIGNhY2hl
IGluIGNhY2hlIGdyb3VwIHdob3NlIGNvbXBsZXRlbmVzcyBmbGFnIGlzIGNvbXBsZXRlLCBhbmQg
YWN0CisgICAgICAgICAgICAvLyBhcyBpZiB0aGF0IHdhcyB0aGUgZmV0Y2hlZCByZXNvdXJjZSwg
aWdub3JpbmcgdGhlIHJlc291cmNlIG9idGFpbmVkIGZyb20gdGhlIG5ldHdvcmsuCisgICAgICAg
ICAgICBBU1NFUlQobV9uZXdlc3RDYWNoZSk7CisgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UqIHJlc291cmNlID0gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwoaGFuZGxl
LT5yZXF1ZXN0KCkudXJsKCkpOworICAgICAgICAgICAgQVNTRVJUKHJlc291cmNlKTsKKyAgICAg
ICAgICAgIG1fY2FjaGVCZWluZ1VwZGF0ZWQtPmFkZFJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZTo6Y3JlYXRlKGhhbmRsZS0+cmVxdWVzdCgpLnVybCgpLCByZXNvdXJjZS0+cmVzcG9u
c2UoKSwgcmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPmRhdGEoKSkpOworICAgICAgICAgICAg
Ly8gTG9hZCB0aGUgbmV4dCByZXNvdXJjZSwgaWYgYW55LgorICAgICAgICAgICAgbV9jdXJyZW50
SGFuZGxlLT5jYW5jZWwoKTsKKyAgICAgICAgICAgIG1fY3VycmVudEhhbmRsZSA9IDA7CisgICAg
ICAgICAgICBzdGFydExvYWRpbmdFbnRyeSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAgICAgCiAgICAgbV9jdXJyZW50UmVzb3VyY2UgPSBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U6OmNyZWF0ZSh1cmwsIHJlc3BvbnNlLCB0eXBlKTsKIH0KQEAgLTQyNCwxMyArNDc3LDgg
QEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZpbmlzaExvYQogICAgIG1fY2FjaGVC
ZWluZ1VwZGF0ZWQtPmFkZFJlc291cmNlKG1fY3VycmVudFJlc291cmNlLnJlbGVhc2UoKSk7CiAg
ICAgbV9jdXJyZW50SGFuZGxlID0gMDsKICAgICAKLSAgICAvLyBMb2FkIHRoZSBuZXh0IGZpbGUu
Ci0gICAgaWYgKCFtX3BlbmRpbmdFbnRyaWVzLmlzRW1wdHkoKSkgewotICAgICAgICBzdGFydExv
YWRpbmdFbnRyeSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGNoZWNrSWZM
b2FkSXNDb21wbGV0ZSgpOworICAgIC8vIExvYWQgdGhlIG5leHQgcmVzb3VyY2UsIGlmIGFueS4K
KyAgICBzdGFydExvYWRpbmdFbnRyeSgpOwogfQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZUVycm9yJikK
QEAgLTQ0MCw5ICs0ODgsMTkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZhaWwo
UmVzbwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIC8vIE5vdGUgdGhhdCBjYWNo
ZVVwZGF0ZUZhaWxlZCgpIGNhbiBjYXVzZSB0aGUgY2FjaGUgZ3JvdXAgdG8gYmUgZGVsZXRlZC4K
LSAgICAvLyBGSVhNRTogRmFpbGluZyB0byBsb2FkIHJlc291cmNlcyB0aGF0IGFyZSBub3QgbWFy
a2VkIGFzIGV4cGxpY2l0IG9yIGZhbGxiYWNrIHNob3VsZCBub3QgYmUgZmF0YWwuCi0gICAgY2Fj
aGVVcGRhdGVGYWlsZWQoKTsKKyAgICBpZiAoKG1fY3VycmVudFJlc291cmNlLT50eXBlKCkgJiBB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkV4cGxpY2l0KSB8fCAobV9jdXJyZW50UmVzb3VyY2Ut
PnR5cGUoKSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6RmFsbGJhY2spKSB7CisgICAgICAg
IC8vIE5vdGUgdGhhdCBjYWNoZVVwZGF0ZUZhaWxlZCgpIGNhbiBjYXVzZSB0aGUgY2FjaGUgZ3Jv
dXAgdG8gYmUgZGVsZXRlZC4KKyAgICAgICAgY2FjaGVVcGRhdGVGYWlsZWQoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBDb3B5IHRoZSByZXNvdXJjZSBhbmQgaXRzIG1ldGFkYXRhIGZyb20g
dGhlIG5ld2VzdCBhcHBsaWNhdGlvbiBjYWNoZSBpbiBjYWNoZSBncm91cCB3aG9zZSBjb21wbGV0
ZW5lc3MgZmxhZyBpcyBjb21wbGV0ZSwgYW5kIGFjdAorICAgICAgICAvLyBhcyBpZiB0aGF0IHdh
cyB0aGUgZmV0Y2hlZCByZXNvdXJjZSwgaWdub3JpbmcgdGhlIHJlc291cmNlIG9idGFpbmVkIGZy
b20gdGhlIG5ldHdvcmsuCisgICAgICAgIEFTU0VSVChtX25ld2VzdENhY2hlKTsKKyAgICAgICAg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IG1fbmV3ZXN0Q2FjaGUtPnJlc291
cmNlRm9yVVJMKGhhbmRsZS0+cmVxdWVzdCgpLnVybCgpKTsKKyAgICAgICAgQVNTRVJUKHJlc291
cmNlKTsKKyAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRlZC0+YWRkUmVzb3VyY2UoQXBwbGljYXRp
b25DYWNoZVJlc291cmNlOjpjcmVhdGUoaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCksIHJlc291cmNl
LT5yZXNwb25zZSgpLCByZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+ZGF0YSgpKSk7CisgICAg
ICAgIC8vIExvYWQgdGhlIG5leHQgcmVzb3VyY2UsIGlmIGFueS4KKyAgICAgICAgc3RhcnRMb2Fk
aW5nRW50cnkoKTsKKyAgICB9CiB9CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRS
ZWNlaXZlTWFuaWZlc3RSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
QEAgLTQ4OSwxMSArNTQ3LDEwIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5p
c2hMb2EKICAgICAgICAgaWYgKG5ld2VzdE1hbmlmZXN0LT5kYXRhKCktPnNpemUoKSA9PSBtX21h
bmlmZXN0UmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpICYmCiAgICAgICAgICAgICAhbWVtY21wKG5l
d2VzdE1hbmlmZXN0LT5kYXRhKCktPmRhdGEoKSwgbV9tYW5pZmVzdFJlc291cmNlLT5kYXRhKCkt
PmRhdGEoKSwgbmV3ZXN0TWFuaWZlc3QtPmRhdGEoKS0+c2l6ZSgpKSkgewogCi0gICAgICAgICAg
ICBjYWxsTGlzdGVuZXJzT25Bc3NvY2lhdGVkRG9jdW1lbnRzKCZET01BcHBsaWNhdGlvbkNhY2hl
OjpjYWxsTm9VcGRhdGVMaXN0ZW5lcik7Ci0gICAgICAgICAKLSAgICAgICAgICAgIG1fdXBkYXRl
U3RhdHVzID0gSWRsZTsKLSAgICAgICAgICAgIG1fZnJhbWUgPSAwOworICAgICAgICAgICAgbV9j
b21wbGV0aW9uVHlwZSA9IE5vVXBkYXRlOwogICAgICAgICAgICAgbV9tYW5pZmVzdFJlc291cmNl
ID0gMDsKKyAgICAgICAgICAgIGRlbGl2ZXJEZWxheWVkTWFpblJlc291cmNlcygpOworCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC01MDMsMjYgKzU2MCwyMyBAQCB2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNoTG9hCiAgICAgICAgIGNhY2hlVXBk
YXRlRmFpbGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgICAgIAorCisgICAgQVNT
RVJUKCFtX2NhY2hlQmVpbmdVcGRhdGVkKTsKKyAgICBtX2NhY2hlQmVpbmdVcGRhdGVkID0gQXBw
bGljYXRpb25DYWNoZTo6Y3JlYXRlKCk7CisgICAgbV9jYWNoZUJlaW5nVXBkYXRlZC0+c2V0R3Jv
dXAodGhpcyk7CisKKyAgICBIYXNoU2V0PERvY3VtZW50TG9hZGVyKj46OmNvbnN0X2l0ZXJhdG9y
IG1hc3RlckVuZCA9IG1fcGVuZGluZ01hc3RlclJlc291cmNlTG9hZGVycy5lbmQoKTsKKyAgICBm
b3IgKEhhc2hTZXQ8RG9jdW1lbnRMb2FkZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcGVu
ZGluZ01hc3RlclJlc291cmNlTG9hZGVycy5iZWdpbigpOyBpdGVyICE9IG1hc3RlckVuZDsgKytp
dGVyKQorICAgICAgICBhc3NvY2lhdGVEb2N1bWVudExvYWRlcldpdGhDYWNoZSgqaXRlciwgbV9j
YWNoZUJlaW5nVXBkYXRlZC5nZXQoKSk7CisKICAgICAvLyBXZSBoYXZlIHRoZSBtYW5pZmVzdCwg
bm93IGRvd25sb2FkIHRoZSByZXNvdXJjZXMuCiAgICAgbV91cGRhdGVTdGF0dXMgPSBEb3dubG9h
ZGluZzsKICAgICAKLSAgICBjYWxsTGlzdGVuZXJzT25Bc3NvY2lhdGVkRG9jdW1lbnRzKCZET01B
cHBsaWNhdGlvbkNhY2hlOjpjYWxsRG93bmxvYWRpbmdMaXN0ZW5lcik7CisgICAgcG9zdExpc3Rl
bmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbERvd25sb2FkaW5nTGlzdGVuZXIsIG1f
YXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CisKKyAgICBBU1NFUlQobV9wZW5kaW5nRW50cmll
cy5pc0VtcHR5KCkpOwogCi0jaWZuZGVmIE5ERUJVRwotICAgIC8vIFdlIHNob3VsZCBvbmx5IGhh
dmUgaW1wbGljaXQgZW50cmllcy4KLSAgICB7Ci0gICAgICAgIEVudHJ5TWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3BlbmRpbmdFbnRyaWVzLmVuZCgpOwotICAgICAgICBmb3IgKEVudHJ5TWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ0VudHJpZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQgJiBBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2U6OkltcGxpY2l0KTsKLSAgICB9Ci0jZW5kaWYKLSAgICAKICAgICBpZiAoaXNVcGdy
YWRlQXR0ZW1wdCkgewotICAgICAgICBBU1NFUlQoIW1fY2FjaGVCZWluZ1VwZGF0ZWQpOwotICAg
ICAgICAKLSAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRlZCA9IEFwcGxpY2F0aW9uQ2FjaGU6OmNy
ZWF0ZSgpOwotICAgICAgICAKICAgICAgICAgQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbmV3ZXN0Q2FjaGUtPmVuZCgpOwogICAgICAgICBmb3Ig
KEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmV3
ZXN0Q2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgdW5zaWdu
ZWQgdHlwZSA9IGl0LT5zZWNvbmQtPnR5cGUoKTsKQEAgLTU0OCwxMDUgKzYwMiw5MiBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNoTG9hCiB2b2lkIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6Y2FjaGVVcGRhdGVGYWlsZWQoKQogewogICAgIHN0b3BMb2FkaW5nKCk7Ci0gICAg
ICAgIAotICAgIGNhbGxMaXN0ZW5lcnNPbkFzc29jaWF0ZWREb2N1bWVudHMoJkRPTUFwcGxpY2F0
aW9uQ2FjaGU6OmNhbGxFcnJvckxpc3RlbmVyKTsKLQotICAgIG1fcGVuZGluZ0VudHJpZXMuY2xl
YXIoKTsKICAgICBtX21hbmlmZXN0UmVzb3VyY2UgPSAwOwogCi0gICAgd2hpbGUgKCFtX2NhY2hl
Q2FuZGlkYXRlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgSGFzaFNldDxEb2N1bWVudExvYWRlcio+
OjppdGVyYXRvciBpdCA9IG1fY2FjaGVDYW5kaWRhdGVzLmJlZ2luKCk7Ci0gICAgICAgIAotICAg
ICAgICBBU1NFUlQoKCppdCktPmNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgpID09IHRo
aXMpOwotICAgICAgICAoKml0KS0+c2V0Q2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKDAp
OwotICAgICAgICBtX2NhY2hlQ2FuZGlkYXRlcy5yZW1vdmUoaXQpOwotICAgIH0KLSAgICAKLSAg
ICBtX3VwZGF0ZVN0YXR1cyA9IElkbGU7ICAgIAotICAgIG1fZnJhbWUgPSAwOwotICAgIAotICAg
IGlmIChtX2NhY2hlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fYXNzb2NpYXRlZERv
Y3VtZW50TG9hZGVycy5pc0VtcHR5KCkpOwotICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9Cisg
ICAgLy8gV2FpdCBmb3IgbWFzdGVyIHJlc291cmNlIGxvYWRzIHRvIGZpbmlzaC4KKyAgICBtX2Nv
bXBsZXRpb25UeXBlID0gRmFpbHVyZTsKKyAgICBkZWxpdmVyRGVsYXllZE1haW5SZXNvdXJjZXMo
KTsKIH0KICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjptYW5pZmVzdE5vdEZvdW5k
KCkKIHsKKyAgICBtYWtlT2Jzb2xldGUoKTsKKworICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFw
cGxpY2F0aW9uQ2FjaGU6OmNhbGxPYnNvbGV0ZUxpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVu
dExvYWRlcnMpOworICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNh
bGxFcnJvckxpc3RlbmVyLCBtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMpOworCiAgICAg
c3RvcExvYWRpbmcoKTsKLSAgICAgICAgCi0gICAgY2FsbExpc3RlbmVyc09uQXNzb2NpYXRlZERv
Y3VtZW50cygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbE9ic29sZXRlTGlzdGVuZXIpOwogCi0g
ICAgbV9wZW5kaW5nRW50cmllcy5jbGVhcigpOworICAgIEFTU0VSVChtX3BlbmRpbmdFbnRyaWVz
LmlzRW1wdHkoKSk7CiAgICAgbV9tYW5pZmVzdFJlc291cmNlID0gMDsKIAotICAgIHdoaWxlICgh
bV9jYWNoZUNhbmRpZGF0ZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEhhc2hTZXQ8RG9jdW1lbnRM
b2FkZXIqPjo6aXRlcmF0b3IgaXQgPSBtX2NhY2hlQ2FuZGlkYXRlcy5iZWdpbigpOworICAgIHdo
aWxlICghbV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzLmlzRW1wdHkoKSkgeworICAgICAg
ICBIYXNoU2V0PERvY3VtZW50TG9hZGVyKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nTWFzdGVy
UmVzb3VyY2VMb2FkZXJzLmJlZ2luKCk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoKCppdCkt
PmNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgpID09IHRoaXMpOworICAgICAgICBBU1NF
UlQoISgqaXQpLT5hcHBsaWNhdGlvbkNhY2hlKCkpOwogICAgICAgICAoKml0KS0+c2V0Q2FuZGlk
YXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKDApOwotICAgICAgICBtX2NhY2hlQ2FuZGlkYXRlcy5y
ZW1vdmUoaXQpOworICAgICAgICBtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMucmVtb3Zl
KGl0KTsKICAgICB9CiAKLSAgICBtYWtlT2Jzb2xldGUoKTsKLQogICAgIG1fdXBkYXRlU3RhdHVz
ID0gSWRsZTsgICAgCiAgICAgbV9mcmFtZSA9IDA7CiAgICAgCiAgICAgaWYgKG1fY2FjaGVzLmlz
RW1wdHkoKSkgewogICAgICAgICBBU1NFUlQobV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmlz
RW1wdHkoKSk7CisgICAgICAgIEFTU0VSVCghbV9jYWNoZUJlaW5nVXBkYXRlZCk7CiAgICAgICAg
IGRlbGV0ZSB0aGlzOwogICAgIH0KIH0KIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNo
ZWNrSWZMb2FkSXNDb21wbGV0ZSgpCiB7Ci0gICAgQVNTRVJUKG1fY2FjaGVCZWluZ1VwZGF0ZWQp
OwotICAgIAotICAgIGlmIChtX21hbmlmZXN0SGFuZGxlKQorICAgIGlmIChtX21hbmlmZXN0SGFu
ZGxlIHx8ICFtX3BlbmRpbmdFbnRyaWVzLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5nTWFzdGVyUmVz
b3VyY2VMb2FkZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmICgh
bV9wZW5kaW5nRW50cmllcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAv
LyBXZSdyZSBkb25lICAgIAotICAgIGJvb2wgaXNVcGdyYWRlQXR0ZW1wdCA9IG1fbmV3ZXN0Q2Fj
aGU7Ci0gICAgCi0gICAgbV9jYWNoZUJlaW5nVXBkYXRlZC0+c2V0TWFuaWZlc3RSZXNvdXJjZSht
X21hbmlmZXN0UmVzb3VyY2UucmVsZWFzZSgpKTsKLSAgICAKLSAgICBWZWN0b3I8UmVmUHRyPERv
Y3VtZW50TG9hZGVyPiA+IGRvY3VtZW50TG9hZGVyczsKKyAgICAvLyBXZSdyZSBkb25lLCBhbGwg
cmVzb3VyY2VzIGhhdmUgZmluaXNoZWQgZG93bmxvYWRpbmcgKHN1Y2Nlc3NmdWxseSBvciBub3Qp
LgogCi0gICAgaWYgKGlzVXBncmFkZUF0dGVtcHQpIHsKLSAgICAgICAgQVNTRVJUKG1fY2FjaGVD
YW5kaWRhdGVzLmlzRW1wdHkoKSk7Ci0gICAgICAgIAotICAgICAgICBjb3B5VG9WZWN0b3IobV9h
c3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLCBkb2N1bWVudExvYWRlcnMpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHdoaWxlICghbV9jYWNoZUNhbmRpZGF0ZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBIYXNoU2V0PERvY3VtZW50TG9hZGVyKj46Oml0ZXJhdG9yIGl0ID0gbV9jYWNoZUNhbmRp
ZGF0ZXMuYmVnaW4oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciA9ICppdDsKLSAgICAgICAgICAgIEFTU0VSVCghbG9hZGVyLT5hcHBsaWNhdGlvbkNh
Y2hlKCkpOwotICAgICAgICAgICAgQVNTRVJUKGxvYWRlci0+Y2FuZGlkYXRlQXBwbGljYXRpb25D
YWNoZUdyb3VwKCkgPT0gdGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFzc29jaWF0
ZURvY3VtZW50TG9hZGVyV2l0aENhY2hlKGxvYWRlciwgbV9jYWNoZUJlaW5nVXBkYXRlZC5nZXQo
KSk7Ci0gICAgCi0gICAgICAgICAgICBkb2N1bWVudExvYWRlcnMuYXBwZW5kKGxvYWRlcik7Cisg
ICAgYm9vbCBpc1VwZ3JhZGVBdHRlbXB0ID0gbV9uZXdlc3RDYWNoZTsKIAotICAgICAgICAgICAg
bV9jYWNoZUNhbmRpZGF0ZXMucmVtb3ZlKGl0KTsKKyAgICBzd2l0Y2ggKG1fY29tcGxldGlvblR5
cGUpIHsKKyAgICBjYXNlIE5vbmU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBOb1VwZGF0ZToKKyAgICAgICAgQVNTRVJUKGlzVXBncmFk
ZUF0dGVtcHQpOworICAgICAgICBBU1NFUlQoIW1fY2FjaGVCZWluZ1VwZGF0ZWQpOworICAgICAg
ICBBU1NFUlQobV9zdG9yYWdlSUQpOworICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBs
aWNhdGlvbkNhY2hlOjpjYWxsTm9VcGRhdGVMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRM
b2FkZXJzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGYWlsdXJlOgorICAgICAgICBBU1NF
UlQoIW1fY2FjaGVCZWluZ1VwZGF0ZWQpOworICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01B
cHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRM
b2FkZXJzKTsKKyAgICAgICAgaWYgKG1fY2FjaGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
QVNTRVJUKG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgZGVsZXRlIHRoaXM7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcGxldGVkOiB7CisgICAgICAgIC8vIEZJWE1FOiBG
ZXRjaCB0aGUgcmVzb3VyY2UgZnJvbSBtYW5pZmVzdCBVUkwgYWdhaW4sIGFuZCBjaGVjayB3aGV0
aGVyIGl0IGlzIGlkZW50aWNhbCB0byB0aGUgb25lIHVzZWQgZm9yIHVwZGF0ZSAoaW4gY2FzZSB0
aGUgYXBwbGljYXRpb24gd2FzIHVwZ3JhZGVkIHNlcnZlci1zaWRlIGluIHRoZSBtZWFud2hpbGUp
LgogCi0gICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IG9sZE5ld2VzdENhY2hlID0gKG1fbmV3
ZXN0Q2FjaGUgPT0gbV9jYWNoZUJlaW5nVXBkYXRlZCkgPyAwIDogbV9uZXdlc3RDYWNoZTsKKyAg
ICAgICAgQVNTRVJUKG1fY2FjaGVCZWluZ1VwZGF0ZWQpOworICAgICAgICBtX2NhY2hlQmVpbmdV
cGRhdGVkLT5zZXRNYW5pZmVzdFJlc291cmNlKG1fbWFuaWZlc3RSZXNvdXJjZS5yZWxlYXNlKCkp
OwogCi0gICAgc2V0TmV3ZXN0Q2FjaGUobV9jYWNoZUJlaW5nVXBkYXRlZC5yZWxlYXNlKCkpOwot
ICAgIGNhY2hlU3RvcmFnZSgpLnN0b3JlTmV3ZXN0Q2FjaGUodGhpcyk7CisgICAgICAgIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlPiBvbGROZXdlc3RDYWNoZSA9IChtX25ld2VzdENhY2hlID09IG1f
Y2FjaGVCZWluZ1VwZGF0ZWQpID8gMCA6IG1fbmV3ZXN0Q2FjaGU7CiAKLSAgICBpZiAob2xkTmV3
ZXN0Q2FjaGUpCi0gICAgICAgIGNhY2hlU3RvcmFnZSgpLnJlbW92ZShvbGROZXdlc3RDYWNoZS5n
ZXQoKSk7CisgICAgICAgIHNldE5ld2VzdENhY2hlKG1fY2FjaGVCZWluZ1VwZGF0ZWQucmVsZWFz
ZSgpKTsKKyAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmVOZXdlc3RDYWNoZSh0aGlzKTsKIAot
ICAgIGNhbGxMaXN0ZW5lcnMoaXNVcGdyYWRlQXR0ZW1wdCA/ICZET01BcHBsaWNhdGlvbkNhY2hl
OjpjYWxsVXBkYXRlUmVhZHlMaXN0ZW5lciA6ICZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2Fj
aGVkTGlzdGVuZXIsIAotICAgICAgICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXJzKTsKKyAgICAg
ICAgaWYgKG9sZE5ld2VzdENhY2hlKQorICAgICAgICAgICAgY2FjaGVTdG9yYWdlKCkucmVtb3Zl
KG9sZE5ld2VzdENhY2hlLmdldCgpKTsKIAorICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKGlzVXBn
cmFkZUF0dGVtcHQgPyAmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbFVwZGF0ZVJlYWR5TGlzdGVu
ZXIgOiAmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbENhY2hlZExpc3RlbmVyLCBtX2Fzc29jaWF0
ZWREb2N1bWVudExvYWRlcnMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAg
bV9jb21wbGV0aW9uVHlwZSA9IE5vbmU7CiAgICAgbV91cGRhdGVTdGF0dXMgPSBJZGxlOwogICAg
IG1fZnJhbWUgPSAwOwogfQpAQCAtNjU2LDI3ICs2OTcsMTQgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXA6OnN0YXJ0TG9hZGluZwogICAgIEFTU0VSVChtX2NhY2hlQmVpbmdVcGRhdGVkKTsK
IAogICAgIGlmIChtX3BlbmRpbmdFbnRyaWVzLmlzRW1wdHkoKSkgewotICAgICAgICBjaGVja0lm
TG9hZElzQ29tcGxldGUoKTsKKyAgICAgICAgbV9jb21wbGV0aW9uVHlwZSA9IENvbXBsZXRlZDsK
KyAgICAgICAgZGVsaXZlckRlbGF5ZWRNYWluUmVzb3VyY2VzKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCiAgICAgRW50cnlNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5n
RW50cmllcy5iZWdpbigpOwogCi0gICAgLy8gSWYgdGhpcyBpcyBhbiBpbml0aWFsIGNhY2hlIGF0
dGVtcHQsIHdlIGRvIG5vdCB3YW50IHRvIGZldGNoIGFueSBpbXBsaWNpdCBlbnRyaWVzLAotICAg
IC8vIHNpbmNlIHRob3NlIGFyZSBmZWQgdG8gdXMgYnkgdGhlIG5vcm1hbCBsb2FkZXIgbWFjaGlu
ZXJ5LgotICAgIGlmICghbV9uZXdlc3RDYWNoZSkgewotICAgICAgICAvLyBHZXQgdGhlIGZpcnN0
IFVSTCBpbiB0aGUgZW50cnkgdGFibGUgdGhhdCBpcyBub3QgaW1wbGljaXQKLSAgICAgICAgRW50
cnlNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0VudHJpZXMuZW5kKCk7Ci0gICAg
Ci0gICAgICAgIHdoaWxlIChpdC0+c2Vjb25kICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpJ
bXBsaWNpdCkgewotICAgICAgICAgICAgKytpdDsKLQotICAgICAgICAgICAgaWYgKGl0ID09IGVu
ZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
Y2FsbExpc3RlbmVyc09uQXNzb2NpYXRlZERvY3VtZW50cygmRE9NQXBwbGljYXRpb25DYWNoZTo6
Y2FsbFByb2dyZXNzTGlzdGVuZXIpOworICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0
aW9uQ2FjaGU6OmNhbGxQcm9ncmVzc0xpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRl
cnMpOwogCiAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYW4gdXBncmFkZSBhdHRlbXB0LCB0aGUg
bmV3ZXN0IGNhY2hlIHNob3VsZCBiZSB1c2VkIGFzIGFuIEhUVFAgY2FjaGUuCiAgICAgCkBAIC02
ODQsMjQgKzcxMiw0OSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c3RhcnRMb2FkaW5n
CiAgICAgCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoaXQtPmZpcnN0KTsKICAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+YXBwbHlVc2VyQWdlbnQocmVxdWVzdCk7CisgICAgLy8gRklYTUU6IFNo
b3VsZCBhc2sgdG8gcmV2YWxpZGF0ZSBmcm9tIG9yaWdpbi4KIAogICAgIG1fY3VycmVudEhhbmRs
ZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUocmVxdWVzdCwgdGhpcywgbV9mcmFtZSwgZmFsc2Us
IHRydWUsIGZhbHNlKTsKIH0KIAordm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRlbGl2ZXJE
ZWxheWVkTWFpblJlc291cmNlcygpCit7CisgICAgLy8gTmVlZCB0byBjb3B5IGxvYWRlcnMsIGJl
Y2F1c2UgdGhlIGNhY2hlIGdyb3VwIG1heSBiZSBkZXN0cm95ZWQgYXQgdGhlIGVuZCBvZiBpdGVy
YXRpb24uCisgICAgVmVjdG9yPERvY3VtZW50TG9hZGVyKj4gbG9hZGVyczsKKyAgICBjb3B5VG9W
ZWN0b3IobV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzLCBsb2FkZXJzKTsKKyAgICBzaXpl
X3QgY291bnQgPSBsb2FkZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBj
b3VudDsgKytpKSB7CisgICAgICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBsb2FkZXJzW2ld
OworICAgICAgICBpZiAobG9hZGVyLT5pc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yID0gbG9h
ZGVyLT5tYWluRG9jdW1lbnRFcnJvcigpOworICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCisg
ICAgICAgICAgICBmaW5pc2hlZExvYWRpbmdNYWluUmVzb3VyY2UobG9hZGVyKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZmFpbGVkTG9hZGluZ01haW5SZXNvdXJjZShsb2FkZXIpOworICAg
IH0KKyAgICBpZiAoIWNvdW50KQorICAgICAgICBjaGVja0lmTG9hZElzQ29tcGxldGUoKTsKK30K
Kwogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFkZEVudHJ5KGNvbnN0IFN0cmluZyYgdXJs
LCB1bnNpZ25lZCB0eXBlKQogewogICAgIEFTU0VSVChtX2NhY2hlQmVpbmdVcGRhdGVkKTsKICAg
ICAKICAgICAvLyBEb24ndCBhZGQgdGhlIFVSTCBpZiB3ZSBhbHJlYWR5IGhhdmUgYW4gaW1wbGlj
aXQgcmVzb3VyY2UgaW4gdGhlIGNhY2hlCisgICAgLy8gKGkuZS4sIHRoZSBtYWluIHJlc291cmNl
IGZpbmlzaGVkIGxvYWRpbmcgYmVmb3JlIHRoZSBtYW5pZmVzdCkuCiAgICAgaWYgKEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBtX2NhY2hlQmVpbmdVcGRhdGVkLT5yZXNvdXJj
ZUZvclVSTCh1cmwpKSB7CiAgICAgICAgIEFTU0VSVChyZXNvdXJjZS0+dHlwZSgpICYgQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlOjpJbXBsaWNpdCk7CisgICAgICAgIEFTU0VSVCghbV9mcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKTsKICAg
ICAKICAgICAgICAgcmVzb3VyY2UtPmFkZFR5cGUodHlwZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICAvLyBEb24ndCBhZGQgdGhlIFVSTCBpZiBpdCdzIHRoZSBzYW1lIGFzIHRoZSBt
YW5pZmVzdCBVUkwuCi0gICAgaWYgKG1fbWFuaWZlc3RSZXNvdXJjZSAmJiBtX21hbmlmZXN0UmVz
b3VyY2UtPnVybCgpID09IHVybCkgeworICAgIEFTU0VSVChtX21hbmlmZXN0UmVzb3VyY2UpOwor
ICAgIGlmIChtX21hbmlmZXN0UmVzb3VyY2UtPnVybCgpID09IHVybCkgewogICAgICAgICBtX21h
bmlmZXN0UmVzb3VyY2UtPmFkZFR5cGUodHlwZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC03MTUsNyArNzY4LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFkZEVudHJ5KGNv
bgogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFzc29jaWF0ZURvY3VtZW50TG9hZGVyV2l0
aENhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQog
ewogICAgIC8vIElmIHRlYXJkb3duIHN0YXJ0ZWQgYWxyZWFkeSwgcmV2aXZlIHRoZSBncm91cC4K
LSAgICBpZiAoIW1fbmV3ZXN0Q2FjaGUpCisgICAgaWYgKCFtX25ld2VzdENhY2hlICYmICFtX2Nh
Y2hlQmVpbmdVcGRhdGVkKQogICAgICAgICBtX25ld2VzdENhY2hlID0gY2FjaGU7CiAKICAgICBB
U1NFUlQoIW1faXNPYnNvbGV0ZSk7CkBAIC03MjYsMjcgKzc3OSw0OCBAQCB2b2lkIEFwcGxpY2F0
aW9uQ2FjaGVHcm91cDo6YXNzb2NpYXRlRG9jCiAgICAgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2Fk
ZXJzLmFkZChsb2FkZXIpOwogfQogIAotdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNhbGxM
aXN0ZW5lcnNPbkFzc29jaWF0ZWREb2N1bWVudHMoTGlzdGVuZXJGdW5jdGlvbiBsaXN0ZW5lckZ1
bmN0aW9uKQotewotICAgIFZlY3RvcjxSZWZQdHI8RG9jdW1lbnRMb2FkZXI+ID4gbG9hZGVyczsK
LSAgICBjb3B5VG9WZWN0b3IobV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLCBsb2FkZXJzKTsK
K2NsYXNzIENhbGxDYWNoZUxpc3RlbmVyVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrIHsKKyAgICB0eXBlZGVmIHZvaWQgKERPTUFwcGxpY2F0aW9uQ2FjaGU6OipMaXN0
ZW5lckZ1bmN0aW9uKSgpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbGxDYWNo
ZUxpc3RlbmVyVGFzaz4gY3JlYXRlKExpc3RlbmVyRnVuY3Rpb24gbGlzdGVuZXJGdW5jdGlvbikK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FsbENhY2hlTGlzdGVuZXJUYXNr
KGxpc3RlbmVyRnVuY3Rpb24pKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRh
c2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChjb250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cg
PSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpLT5kb21XaW5kb3coKSkgeworICAgICAg
ICAgICAgaWYgKERPTUFwcGxpY2F0aW9uQ2FjaGUqIGRvbUNhY2hlID0gd2luZG93LT5vcHRpb25h
bEFwcGxpY2F0aW9uQ2FjaGUoKSkKKyAgICAgICAgICAgICAgICAoZG9tQ2FjaGUtPiptX2xpc3Rl
bmVyRnVuY3Rpb24pKCk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FsbENh
Y2hlTGlzdGVuZXJUYXNrKExpc3RlbmVyRnVuY3Rpb24gbGlzdGVuZXJGdW5jdGlvbikKKyAgICAg
ICAgOiBtX2xpc3RlbmVyRnVuY3Rpb24obGlzdGVuZXJGdW5jdGlvbikKKyAgICB7CisgICAgfQor
CisgICAgTGlzdGVuZXJGdW5jdGlvbiBtX2xpc3RlbmVyRnVuY3Rpb247Cit9OwogCi0gICAgY2Fs
bExpc3RlbmVycyhsaXN0ZW5lckZ1bmN0aW9uLCBsb2FkZXJzKTsKK3ZvaWQgQXBwbGljYXRpb25D
YWNoZUdyb3VwOjpwb3N0TGlzdGVuZXJUYXNrKExpc3RlbmVyRnVuY3Rpb24gbGlzdGVuZXJGdW5j
dGlvbiwgY29uc3QgSGFzaFNldDxEb2N1bWVudExvYWRlcio+JiBsb2FkZXJTZXQpCit7CisgICAg
SGFzaFNldDxEb2N1bWVudExvYWRlcio+Ojpjb25zdF9pdGVyYXRvciBsb2FkZXJTZXRFbmQgPSBs
b2FkZXJTZXQuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PERvY3VtZW50TG9hZGVyKj46OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBsb2FkZXJTZXQuYmVnaW4oKTsgaXRlciAhPSBsb2FkZXJTZXRFbmQ7
ICsraXRlcikKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhsaXN0ZW5lckZ1bmN0aW9uLCAqaXRl
cik7CiB9Ci0gICAgCi12b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2FsbExpc3RlbmVycyhM
aXN0ZW5lckZ1bmN0aW9uIGxpc3RlbmVyRnVuY3Rpb24sIGNvbnN0IFZlY3RvcjxSZWZQdHI8RG9j
dW1lbnRMb2FkZXI+ID4mIGxvYWRlcnMpCisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpw
b3N0TGlzdGVuZXJUYXNrKExpc3RlbmVyRnVuY3Rpb24gbGlzdGVuZXJGdW5jdGlvbiwgRG9jdW1l
bnRMb2FkZXIqIGxvYWRlcikKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9hZGVy
cy5zaXplKCk7IGkrKykgewotICAgICAgICBGcmFtZSogZnJhbWUgPSBsb2FkZXJzW2ldLT5mcmFt
ZSgpOwotICAgICAgICBpZiAoIWZyYW1lKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IAotICAgICAgICBBU1NFUlQoZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpID09IGxv
YWRlcnNbaV0pOwotICAgICAgICBET01XaW5kb3cqIHdpbmRvdyA9IGZyYW1lLT5kb21XaW5kb3co
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChET01BcHBsaWNhdGlvbkNhY2hlKiBkb21DYWNoZSA9
IHdpbmRvdy0+b3B0aW9uYWxBcHBsaWNhdGlvbkNhY2hlKCkpCi0gICAgICAgICAgICAoZG9tQ2Fj
aGUtPipsaXN0ZW5lckZ1bmN0aW9uKSgpOwotICAgIH0gICAgCisgICAgRnJhbWUqIGZyYW1lID0g
bG9hZGVyLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBBU1NFUlQoZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpID09IGxvYWRlcik7
CisKKyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soQ2FsbENhY2hlTGlzdGVuZXJUYXNr
OjpjcmVhdGUobGlzdGVuZXJGdW5jdGlvbikpOwogfQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cDo6Y2xlYXJTdG9yYWdlSUQoKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZUdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmgJKHJldmlzaW9uIDQwMjQ2KQorKysgV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDYgKzQ3LDExIEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBj
bGFzcyBGcmFtZTsKIAorZW51bSBBcHBsaWNhdGlvbkNhY2hlVXBkYXRlT3B0aW9uIHsKKyAgICBB
cHBsaWNhdGlvbkNhY2hlVXBkYXRlV2l0aEJyb3dzaW5nQ29udGV4dCwKKyAgICBBcHBsaWNhdGlv
bkNhY2hlVXBkYXRlV2l0aG91dEJyb3dzaW5nQ29udGV4dAorfTsKKwogY2xhc3MgQXBwbGljYXRp
b25DYWNoZUdyb3VwIDogTm9uY29weWFibGUsIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKIHB1Ymxp
YzoKICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAoY29uc3QgS1VSTCYgbWFuaWZlc3RVUkwsIGJv
b2wgaXNDb3B5ID0gZmFsc2UpOyAgICAKQEAgLTY3LDkgKzcyLDExIEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBzdG9yYWdlSUQoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VJRDsgfQogICAgIHZv
aWQgY2xlYXJTdG9yYWdlSUQoKTsKICAgICAKLSAgICB2b2lkIHVwZGF0ZShGcmFtZSopOworICAg
IHZvaWQgdXBkYXRlKEZyYW1lKiwgQXBwbGljYXRpb25DYWNoZVVwZGF0ZU9wdGlvbik7IC8vIEZJ
WE1FOiBGcmFtZSBzaG91bGQgbm90IGJlZSBuZWVkZWQgd2hlbiB1cGRhdGluZyB3aXRvdXQgYnJv
d3NpbmcgY29udGV4dC4KICAgICB2b2lkIGNhY2hlRGVzdHJveWVkKEFwcGxpY2F0aW9uQ2FjaGUq
KTsKIAorICAgIGJvb2wgY2FjaGVJc0JlaW5nVXBkYXRlZChjb25zdCBBcHBsaWNhdGlvbkNhY2hl
KiBjYWNoZSkgY29uc3QgeyByZXR1cm4gY2FjaGUgPT0gbV9jYWNoZUJlaW5nVXBkYXRlZDsgfQor
CiAgICAgQXBwbGljYXRpb25DYWNoZSogbmV3ZXN0Q2FjaGUoKSBjb25zdCB7IHJldHVybiBtX25l
d2VzdENhY2hlLmdldCgpOyB9CiAgICAgdm9pZCBzZXROZXdlc3RDYWNoZShQYXNzUmVmUHRyPEFw
cGxpY2F0aW9uQ2FjaGU+KTsKIApAQCAtODUsOSArOTIsMTAgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIHR5cGVkZWYgdm9pZCAoRE9NQXBwbGljYXRpb25DYWNoZTo6Kkxpc3RlbmVyRnVuY3Rp
b24pKCk7Ci0gICAgdm9pZCBjYWxsTGlzdGVuZXJzT25Bc3NvY2lhdGVkRG9jdW1lbnRzKExpc3Rl
bmVyRnVuY3Rpb24pOwotICAgIHZvaWQgY2FsbExpc3RlbmVycyhMaXN0ZW5lckZ1bmN0aW9uLCBj
b25zdCBWZWN0b3I8UmVmUHRyPERvY3VtZW50TG9hZGVyPiA+JiBsb2FkZXJzKTsKLSAgICAKKyAg
ICB2b2lkIHBvc3RMaXN0ZW5lclRhc2soTGlzdGVuZXJGdW5jdGlvbiwgY29uc3QgSGFzaFNldDxE
b2N1bWVudExvYWRlcio+Jik7CisgICAgdm9pZCBwb3N0TGlzdGVuZXJUYXNrKExpc3RlbmVyRnVu
Y3Rpb24sIGNvbnN0IFZlY3RvcjxSZWZQdHI8RG9jdW1lbnRMb2FkZXI+ID4mIGxvYWRlcnMpOwor
ICAgIHZvaWQgcG9zdExpc3RlbmVyVGFzayhMaXN0ZW5lckZ1bmN0aW9uLCBEb2N1bWVudExvYWRl
ciopOworCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgbGVuZ3RoUmVjZWl2
ZWQpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7
CkBAIC05OCw2ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ01h
bmlmZXN0KCk7CiAgICAgCiAgICAgdm9pZCBzdGFydExvYWRpbmdFbnRyeSgpOworICAgIHZvaWQg
ZGVsaXZlckRlbGF5ZWRNYWluUmVzb3VyY2VzKCk7CiAgICAgdm9pZCBjaGVja0lmTG9hZElzQ29t
cGxldGUoKTsKICAgICB2b2lkIGNhY2hlVXBkYXRlRmFpbGVkKCk7CiAgICAgdm9pZCBtYW5pZmVz
dE5vdEZvdW5kKCk7CkBAIC0xMTEsMjMgKzEyMCwyMiBAQCBwcml2YXRlOgogICAgIEtVUkwgbV9t
YW5pZmVzdFVSTDsKICAgICBVcGRhdGVTdGF0dXMgbV91cGRhdGVTdGF0dXM7CiAgICAgCi0gICAg
Ly8gVGhpcyBpcyB0aGUgbmV3ZXN0IGNhY2hlIGluIHRoZSBncm91cC4KKyAgICAvLyBUaGlzIGlz
IHRoZSBuZXdlc3QgY29tcGxldGUgY2FjaGUgaW4gdGhlIGdyb3VwLgogICAgIFJlZlB0cjxBcHBs
aWNhdGlvbkNhY2hlPiBtX25ld2VzdENhY2hlOwogICAgIAotICAgIC8vIFRoZSBjYWNoZXMgaW4g
dGhpcyBjYWNoZSBncm91cC4KKyAgICAvLyBBbGwgY29tcGxldGUgY2FjaGVzIGluIHRoaXMgY2Fj
aGUgZ3JvdXAuCiAgICAgSGFzaFNldDxBcHBsaWNhdGlvbkNhY2hlKj4gbV9jYWNoZXM7CiAgICAg
CiAgICAgLy8gVGhlIGNhY2hlIGJlaW5nIHVwZGF0ZWQgKGlmIGFueSkuIE5vdGUgdGhhdCBjYWNo
ZSB1cGRhdGluZyBkb2VzIG5vdCBpbW1lZGlhdGVseSBjcmVhdGUgYSBuZXcKICAgICAvLyBBcHBs
aWNhdGlvbkNhY2hlIG9iamVjdCwgc28gdGhpcyBtYXkgYmUgbnVsbCBldmVuIHdoZW4gdXBkYXRl
IHN0YXR1cyBpcyBub3QgSWRsZS4KICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gbV9jYWNo
ZUJlaW5nVXBkYXRlZDsKIAotICAgIC8vIFdoZW4gYSBjYWNoZSBncm91cCBkb2VzIG5vdCB5ZXQg
aGF2ZSBhIGNvbXBsZXRlIGNhY2hlLCB0aGlzIGNvbnRhaW5zIHRoZSBkb2N1bWVudCBsb2FkZXJz
Ci0gICAgLy8gdGhhdCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYWNoZSBvbmNlIGl0
IGhhcyBiZWVuIGRvd25sb2FkZWQuCi0gICAgSGFzaFNldDxEb2N1bWVudExvYWRlcio+IG1fY2Fj
aGVDYW5kaWRhdGVzOworICAgIC8vIExpc3Qgb2YgcGVuZGluZyBtYXN0ZXIgZW50cmllcywgdXNl
ZCBkdXJpbmcgdGhlIHVwZGF0ZSBwcm9jZXNzIHRvIGVuc3VyZSB0aGF0IG5ldyBtYXN0ZXIgZW50
cmllcyBhcmUgY2FjaGVkLgorICAgIEhhc2hTZXQ8RG9jdW1lbnRMb2FkZXIqPiBtX3BlbmRpbmdN
YXN0ZXJSZXNvdXJjZUxvYWRlcnM7CiAgICAgCiAgICAgLy8gVGhlc2UgYXJlIGFsbCB0aGUgZG9j
dW1lbnQgbG9hZGVycyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBpbiB0aGlzIGdy
b3VwLgogICAgIEhhc2hTZXQ8RG9jdW1lbnRMb2FkZXIqPiBtX2Fzc29jaWF0ZWREb2N1bWVudExv
YWRlcnM7Ci0gICAgCisKICAgICAvLyBUaGUgVVJMcyBhbmQgdHlwZXMgb2YgcGVuZGluZyBjYWNo
ZSBlbnRyaWVzLgogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkPiBFbnRyeU1h
cDsKICAgICBFbnRyeU1hcCBtX3BlbmRpbmdFbnRyaWVzOwpAQCAtMTM5LDcgKzE0NywxNiBAQCBw
cml2YXRlOgogICAgIC8vIEFuIG9ic29sZXRlIGNhY2hlIGdyb3VwIGlzIG5ldmVyIHN0b3JlZCwg
YnV0IHRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZSAtIHN0b3JpbmcgbWF5IGZhaWwgZm9yIG11bHRp
cGxlIHJlYXNvbnMsIHN1Y2ggYXMgZXhjZWVkaW5nIGRpc2sgcXVvdGEuCiAgICAgdW5zaWduZWQg
bV9zdG9yYWdlSUQ7CiAgICAgYm9vbCBtX2lzT2Jzb2xldGU7Ci0gIAorCisgICAgLy8gRHVyaW5n
IHVwZGF0ZSwgdGhpcyBpcyB1c2VkIHRvIGhhbmRsZSBhc3luY2hyb25vdXNseSBhcnJpdmluZyBy
ZXN1bHRzLgorICAgIGVudW0gQ29tcGxldGlvblR5cGUgeworICAgICAgICBOb25lLAorICAgICAg
ICBOb1VwZGF0ZSwKKyAgICAgICAgRmFpbHVyZSwKKyAgICAgICAgQ29tcGxldGVkCisgICAgfTsK
KyAgICBDb21wbGV0aW9uVHlwZSBtX2NvbXBsZXRpb25UeXBlOworCiAgICAgLy8gV2hldGhlciB0
aGlzIGNhY2hlIGdyb3VwIGlzIGEgY29weSB0aGF0J3Mgb25seSB1c2VkIGZvciB0cmFuc2ZlcnJp
bmcgdGhlIGNhY2hlIHRvIGFub3RoZXIgZmlsZS4KICAgICBib29sIG1faXNDb3B5OwogICAgIApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5j
cHAJKHJldmlzaW9uIDQwMjQ2KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGlj
YXRpb25DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBET01B
cHBsaWNhdGlvbkNhY2hlOjp1cGRhdGUoRXhjZXB0aQogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIGNhY2hlLT5ncm91cCgpLT51cGRhdGUobV9mcmFtZSk7CisgICAgY2FjaGUtPmdy
b3VwKCktPnVwZGF0ZShtX2ZyYW1lLCBBcHBsaWNhdGlvbkNhY2hlVXBkYXRlV2l0aG91dEJyb3dz
aW5nQ29udGV4dCk7CiB9CiAKIGJvb2wgRE9NQXBwbGljYXRpb25DYWNoZTo6c3dhcENhY2hlKCkK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQwMzA3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDcgQEAKKzIwMDktMDEtMjggIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4
NAorICAgICAgICBVcGRhdGUgYXBwbGljYXRpb24gY2FjaGUgY29kZSBmb3IgdGhlIGxhdGVzdCBy
b3VuZCBvZiBzcGVjIGNoYW5nZXMKKworICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvNDA0
LW1hbmlmZXN0Lmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS80MDQtcmVzb3Vy
Y2UuaHRtbDoKKyAgICAgICAgV2hlbiBpbml0aWFsIGNhY2hlIGF0dGVtcHQgZmFpbHMsIHRoZSBh
cHBsaWNhdGlvbkNhY2hlIHNpbmdsZXRvbiBub3cgZ2V0cyBhbiBlcnJvciBldmVudC4KKworICAg
ICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvZm9yZWlnbi1pZnJhbWUtbWFpbi1leHBlY3RlZC50
eHQ6IENoZWNraW5nLCBkb3dubG9hZGluZyBhbmQgcHJvZ3Jlc3MKKyAgICAgICAgZXZlbnRzIGFy
ZSBub3cgZGlzcGF0Y2hlZCBkdXJpbmcgaW5pdGlhbCBjYWNoZSBhdHRlbXB0LgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9hcHBjYWNoZS9pZGVtcG90ZW50LXVwZGF0ZS1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS9pZGVtcG90ZW50LXVwZGF0ZS5odG1sOgorICAg
ICAgICBFdmVudHMgYXJlIG5vdyBwb3N0ZWQgYXN5bmNocm9ub3VzbHksIHNvIHdlIGNhbm5vdCBh
c3N1bWUgYW55IHN0YXR1cyB3aGVuIGhhbmRsaW5nIGFuIGV2ZW50LgorICAgICAgICBSZXdyb3Rl
IHRoZSB0ZXN0IHRvIG5vIGxvbmdlciByZWx5IG9uIHN5bmNocm9ub3VzIGV2ZW50IGRpc3BhdGNo
LgorCisgICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS9tYW5pZmVzdC1jb250YWluaW5nLWl0
c2VsZi5odG1sOiBDaGFuZ2VkIHRoZSB0ZXN0IHRvIHBhc3Mgb24gcmVsb2FkLAorICAgICAgICB0
byBzaW1wbGlmeSB0ZXN0aW5nIGluIGJyb3dzZXIgKG5vdCByZWxhdGVkIHRvIGFueSBiZWhhdmlv
ciBjaGFuZ2VzKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvbmF2aWdhdGluZy1h
d2F5LXdoaWxlLWNhY2hlLWF0dGVtcHQtaW4tcHJvZ3Jlc3MuaHRtbDogRml4ZWQgdGhlIHRlc3QK
KyAgICAgICAgdG8gbm90IGZhaWwgaW4gYnJvd3NlciBkdWUgdG8gbWlzc2luZyBsYXlvdXRUZXN0
Q29udHJvbGxlci4KKworICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvb2ZmbGluZS1hY2Nl
c3MtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvb2ZmbGluZS1h
Y2Nlc3MuaHRtbDoKKyAgICAgICAgUmVtb3ZlZCBhIHdhcm5pbmcgc2F5aW5nIHRoYXQgb3V0cHV0
IGlzIHRpbWluZyBkZXBlbmRlbnQgLSBJIHRoaW5rIHRoaXMgaXMgbm90IHRydWUgbm93LgorCisg
ICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS9yZW1vdmUtY2FjaGUtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvcmVtb3ZlLWNhY2hlLmh0bWw6CisgICAgICAg
ICogaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvcmVtb3ZlLWNhY2hlLWZyYW1lLTIuaHRt
bDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9yZW1vdmUtY2FjaGUt
ZnJhbWUuaHRtbDoKKyAgICAgICAgQW4gb2Jzb2xldGUgZXZlbnQgaXMgb25seSBkaXNwYXRjaGVk
IGlmIHRoZSBkb2N1bWVudCdzIG1haW4gcmVzb3VyY2Ugd2FzIGFscmVhZHkgaW4gY2FjaGUsCisg
ICAgICAgIG90aGVyd2lzZSwgYW4gZXJyb3IgZXZlbnQgaXMgZGlzcGF0Y2hlZC4gQ2hhbmdlZCB0
aGUgdGVzdCB0byBhZGQgdGhlIG1haW4gcmVzb3VyY2UgdG8gY2FjaGUKKyAgICAgICAgZmlyc3Qu
IEFsc28sIHVwZGF0ZWQgaXQgdG8gbWFrZSB1c2Ugb2YgYWRkaXRpb25hbCBldmVudHMgdGhhdCBh
cmUgbm93IGJlaW5nIHBvc3RlZC4KKworICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvcmVz
b3VyY2VzL29mZmxpbmUtYWNjZXNzLWZyYW1lLmh0bWw6IFVwZGF0ZWQgdG8gZHVtcCBmcmFtZSBl
dmVudHMgbW9yZQorICAgICAgICBjb21wbGV0ZWx5LgorCisgICAgICAgICogaHR0cC90ZXN0cy9h
cHBjYWNoZS93cm9uZy1jb250ZW50LXR5cGUuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2Fw
cGNhY2hlL3dyb25nLXNpZ25hdHVyZS5odG1sOgorICAgICAgICBDaGFuZ2VkIHRvIGV4cGVjdCBh
bmQgdG8gbWFrZSB1c2Ugb2YgZXJyb3IgZXZlbnQgdGhhdCBpcyBub3cgYmVpbmcgcG9zdGVkLgor
CiAyMDA5LTAxLTI3ICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gu
b3JnPgogCiAgICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS80MDQtbWFuaWZlc3QuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlLzQwNC1tYW5pZmVzdC5odG1sCShy
ZXZpc2lvbiA0MDI0NikKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvNDA0LW1h
bmlmZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE1LDkgKzE1LDYgQEAgZnVuY3Rpb24gdW5l
eHBlY3RlZEV2ZW50KG5hbWUpCiAgICAgbG9nKCJGQUlMVVJFOiBVbmV4cGVjdGVkICIgKyBuYW1l
ICsgIiBldmVudC4iKTsKIH0KIAotLy8gVGhpcyBpcyBhIGNhY2hlIGF0dGVtcHQsIHNvIHRoZXJl
IGFyZSBubyBhc3NvY2lhdGVkIGJyb3dzaW5nIGNvbnRleHRzLCBhbmQgdGhlIGV2ZW50cyBhcmUK
LS8vIG9ubHkgZGlzcGF0Y2hlZCB0byBhc3NvY2lhdGVkIGJyb3dzaW5nIGNvbnRleHRzLgotYXBw
bGljYXRpb25DYWNoZS5hZGRFdmVudExpc3RlbmVyKCdjaGVja2luZycsIGZ1bmN0aW9uKCkgeyB1
bmV4cGVjdGVkRXZlbnQoImNoZWNraW5nIikgfSwgZmFsc2UpOwogYXBwbGljYXRpb25DYWNoZS5h
ZGRFdmVudExpc3RlbmVyKCdub3VwZGF0ZScsIGZ1bmN0aW9uKCkgeyB1bmV4cGVjdGVkRXZlbnQo
Im5vdXBkYXRlIikgfSwgZmFsc2UpOwogYXBwbGljYXRpb25DYWNoZS5hZGRFdmVudExpc3RlbmVy
KCdkb3dubG9hZGluZycsIGZ1bmN0aW9uKCkgeyB1bmV4cGVjdGVkRXZlbnQoImRvd25sb2FkaW5n
IikgfSwgZmFsc2UpOwogYXBwbGljYXRpb25DYWNoZS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVz
cycsIGZ1bmN0aW9uKCkgeyB1bmV4cGVjdGVkRXZlbnQoInByb2dyZXNzIikgfSwgZmFsc2UpOwpA
QCAtMjcsNiArMjQsOCBAQCBhcHBsaWNhdGlvbkNhY2hlLmFkZEV2ZW50TGlzdGVuZXIoJ29ic29s
CiAKIGZ1bmN0aW9uIHRlc3QoKQogeworICAgIGlmICghZ290Q2hlY2tpbmdFdmVudCkKKyAgICAg
ICAgbG9nKCJGQUlMVVJFOiBEaWQgbm90IGdldCBhIGNoZWNraW5nIGV2ZW50Iik7CiAgICAgaWYg
KHdpbmRvdy5hcHBsaWNhdGlvbkNhY2hlLnN0YXR1cykKICAgICAgICAgbG9nKCJGQUlMVVJFOiBD
YWNoZSBzdGF0dXMgaXMgbm90IFVOQ0FDSEVELCAiICsgd2luZG93LmFwcGxpY2F0aW9uQ2FjaGUu
c3RhdHVzKTsKIApAQCAtNDgsNyArNDcsMTAgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKIH0KIAotc2V0VGltZW91dCh0ZXN0LCAx
MDApOwordmFyIGdvdENoZWNraW5nRXZlbnQgPSBmYWxzZTsKK2FwcGxpY2F0aW9uQ2FjaGUuYWRk
RXZlbnRMaXN0ZW5lcignY2hlY2tpbmcnLCBmdW5jdGlvbigpIHsgZ290Q2hlY2tpbmdFdmVudCA9
IHRydWU7IH0sIGZhbHNlKTsKKworYXBwbGljYXRpb25DYWNoZS5hZGRFdmVudExpc3RlbmVyKCdl
cnJvcicsIGZ1bmN0aW9uKCkgeyB0ZXN0KCkgfSwgZmFsc2UpOwogCiA8L3NjcmlwdD4KIDxwPlRl
c3QgdGhhdCBzdWJyZXNvdXJjZXMgY2FuIGJlIGxvYWRlZCBpZiBtYW5pZmVzdCBpcyBub3QgYXZh
aWxhYmxlLiBTaG91bGQgc2F5IFNVQ0NFU1MuPC9wPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9hcHBjYWNoZS80MDQtcmVzb3VyY2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2FwcGNhY2hlLzQwNC1yZXNvdXJjZS5odG1sCShyZXZpc2lvbiA0MDI0NikK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvNDA0LXJlc291cmNlLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTE0LDI4ICsxNCwyNSBAQCBmdW5jdGlvbiBsb2cobWVzc2FnZSkKICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1lc3NhZ2Ug
KyAiPGJyPiI7CiB9CiAKLWZ1bmN0aW9uIGNhY2hlQ2FsbGJhY2soKQorZnVuY3Rpb24gdW5leHBl
Y3RlZENhbGxiYWNrKGV2ZW50TmFtZSkKIHsKLSAgICBsb2coIkZBSUw6IEFuIGV2ZW50IHdhcyBk
aXNwYXRjaGVkIG9uIHdpbmRvdy5hcHBsaWNhdGlvbkNhY2hlLCBldmVuIHRob3VnaCBpdCB3YXMg
bm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgY2FjaGUgeWV0LiIpOworICAgIGxvZygiRkFJTDogQW4g
dW5leHBlY3RlZCAiICsgZXZlbnROYW1lICsgIiBldmVudCB3YXMgZGlzcGF0Y2hlZCBvbiB3aW5k
b3cuYXBwbGljYXRpb25DYWNoZS4iKTsKIH0KIAotZnVuY3Rpb24gdGltZW91dCgpCitmdW5jdGlv
biB0ZXN0KCkKIHsKLSAgICBpZiAoYXBwbGljYXRpb25DYWNoZS5zdGF0dXMgIT0gYXBwbGljYXRp
b25DYWNoZS5VTkNBQ0hFRCkgewotICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQsIDEwMCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGFwcGxpY2F0aW9uQ2FjaGUuc3RhdHVzID09
IGFwcGxpY2F0aW9uQ2FjaGUuVU5DQUNIRUQpCisgICAgICAgIGxvZygiU1VDQ0VTUyIpOworICAg
IGVsc2UKKyAgICAgICAgbG9nKCJGQUlMVVJFOiBjYWNoZSBzdGF0dXMgaXMgbm90IHVuY2FjaGVk
OiAiICsgYXBwbGljYXRpb25DYWNoZS5zdGF0dXMpOwogCi0gICAgbG9nKCJTVUNDRVNTIik7CiAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOwogfQogCi1hcHBsaWNhdGlvbkNhY2hlLmFkZEV2ZW50TGlz
dGVuZXIoJ2NhY2hlZCcsIGZ1bmN0aW9uKCkgeyBsb2coImNhY2hlZCIpOyBjYWNoZUNhbGxiYWNr
KCkgfSwgZmFsc2UpOwotYXBwbGljYXRpb25DYWNoZS5hZGRFdmVudExpc3RlbmVyKCdub3VwZGF0
ZScsIGZ1bmN0aW9uKCkgeyBsb2coIm5vdXBkYXRlIik7IGNhY2hlQ2FsbGJhY2soKSB9LCBmYWxz
ZSk7Ci1hcHBsaWNhdGlvbkNhY2hlLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZnVuY3Rpb24o
KSB7IGxvZygiZXJyb3IiKTsgY2FjaGVDYWxsYmFjaygpIH0sIGZhbHNlKTsKLQotc2V0VGltZW91
dCh0aW1lb3V0LCAxMDApOworYXBwbGljYXRpb25DYWNoZS5hZGRFdmVudExpc3RlbmVyKCdjYWNo
ZWQnLCBmdW5jdGlvbigpIHsgdW5leHBlY3RlZENhbGxiYWNrKCJjYWNoZWQiKTsgY2FjaGVDYWxs
YmFjaygpIH0sIGZhbHNlKTsKK2FwcGxpY2F0aW9uQ2FjaGUuYWRkRXZlbnRMaXN0ZW5lcignbm91
cGRhdGUnLCBmdW5jdGlvbigpIHsgdW5leHBlY3RlZENhbGxiYWNrKCJub3VwZGF0ZSIpOyBjYWNo
ZUNhbGxiYWNrKCkgfSwgZmFsc2UpOworYXBwbGljYXRpb25DYWNoZS5hZGRFdmVudExpc3RlbmVy
KCdlcnJvcicsIHRlc3QsIGZhbHNlKTsKIAogPC9zY3JpcHQ+CiA8L2JvZHk+CkluZGV4OiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2ZvcmVpZ24taWZyYW1lLW1haW4tZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvZm9yZWln
bi1pZnJhbWUtbWFpbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQwMjQ2KQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9mb3JlaWduLWlmcmFtZS1tYWluLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDEwIEBACiBUZXN0IGZvciA8cmRhcjovL3Byb2JsZW0v
NjI4NDcwOD4gQXBwQ2FjaGUgY3Jhc2hlcyBpbiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmFk
ZFR5cGUoKS4KIAorY2hlY2tpbmcKK2Rvd25sb2FkaW5nCitwcm9ncmVzcworcHJvZ3Jlc3MKK3By
b2dyZXNzCiBjYWNoZWQKIFNVQ0NFU1MKIApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9h
cHBjYWNoZS9pZGVtcG90ZW50LXVwZGF0ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9pZGVtcG90ZW50LXVwZGF0ZS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDQwMjQ2KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9p
ZGVtcG90ZW50LXVwZGF0ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw1
IEBAIFRlc3Qgd2hhdCBhcHBsaWNhdGlvbkNhY2hlLnVwZGF0ZSgpIGRvZXMKIAogU2hvdWxkIHNh
eSBET05FLCB3aXRoIG5vIGZhaWx1cmVzOgogCi1jaGVja2luZwogRE9ORQogCkluZGV4OiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2lkZW1wb3RlbnQtdXBkYXRlLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9pZGVtcG90ZW50LXVwZGF0
ZS5odG1sCShyZXZpc2lvbiA0MDI0NikKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2Fj
aGUvaWRlbXBvdGVudC11cGRhdGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTUsMzMgKzE1LDI5
IEBAIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJy
ZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKIH0KIAotLy8gQm90aCBjYWNo
ZWQgYW5kIG5vdXBkYXRlIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCB3aGlsZSB0aGUgc3RhdHVzIGlz
IHN0aWxsIENoZWNraW5nIG9yIERvd25sb2FkaW5nLAotLy8gc28gdXBkYXRlKCkgc2hvdWxkIGJl
IGEgbm8tb3AgKHRoZSBzcGVjIHNheXMgdGhhdCBmYWtlIGNoZWNraW5nIGFuZCBkb3dubG9hZGlu
ZyBldmVudHMgbmVlZCB0bwotLy8gYmUgZGlzcGF0Y2hlZCwgYnUgdGhhdCdzIG9ubHkgd2hlbiB0
aGUgdXBkYXRlIGFsZ29yaXRobSBpcyBpbnZva2VkIHdpdGggYSBicm93c2luZyBjb250ZXh0KS4K
LQotZnVuY3Rpb24gdGVzdDEoKQorZnVuY3Rpb24gdGVzdCgpCiB7Ci0gICAgYXBwbGljYXRpb25D
YWNoZS5vbm5vdXBkYXRlID0gZnVuY3Rpb24oKSB7IGxvZygiRkFJTDogcmVjZWl2ZWQgdW5leHBl
Y3RlZCBub3VwZGF0ZSBldmVudCIpIH0KLSAgICBhcHBsaWNhdGlvbkNhY2hlLm9uY2FjaGVkID0g
ZnVuY3Rpb24oKSB7IGxvZygiRkFJTDogcmVjZWl2ZWQgdW5leHBlY3RlZCBjYWNoZWQgZXZlbnQi
KSB9Ci0gICAgYXBwbGljYXRpb25DYWNoZS5vbmNoZWNraW5nID0gZnVuY3Rpb24oKSB7IGxvZygi
RkFJTDogcmVjZWl2ZWQgdW5leHBlY3RlZCBjaGVja2luZyBldmVudCIpIH0KLQorICAgIC8vIER1
cmluZyB1cGRhdGUsIGFkZGl0aW9uYWwgdXBkYXRlKCkgc2hvdWxkIGJlIG5vLW9wICh0aGUgc3Bl
YyBzYXlzIHRoYXQgZmFrZSBjaGVja2luZyBhbmQKKyAgICAvLyBkb3dubG9hZGluZyBldmVudHMg
bmVlZCB0byBiZSBkaXNwYXRjaGVkLCBidXQgdGhhdCdzIG9ubHkgd2hlbiB0aGUgdXBkYXRlIGFs
Z29yaXRobSBpcyBpbnZva2VkCisgICAgLy8gd2l0aCBhIGJyb3dzaW5nIGNvbnRleHQpLgorICAg
IGlmIChhcHBsaWNhdGlvbkNhY2hlLnN0YXR1cyAhPSBhcHBsaWNhdGlvbkNhY2hlLklETEUpCisg
ICAgICAgIGxvZygiRkFJTDogVW5leHBlY3RlZCBjYWNoZSBzdGF0dXMgd2hpbGUgcHJlcGFyaW5n
IHRvIHRlc3Q6ICIgKyBhcHBsaWNhdGlvbkNhY2hlLnN0YXR1cyk7CisgICAgCisgICAgdmFyIGNo
ZWNraW5nQ291bnQgPSAwOworICAgIGFwcGxpY2F0aW9uQ2FjaGUub25jaGVja2luZyA9IGZ1bmN0
aW9uKCkgeyBpZiAoKytjaGVja2luZ0NvdW50ICE9IDEpIGxvZygiRkFJTDogVG9vIG1hbnkgY2hl
Y2tpbmcgZXZlbnRzIHJlY2VpdmVkLiIpIH0KKyAgICAKKyAgICBhcHBsaWNhdGlvbkNhY2hlLnVw
ZGF0ZSgpOworICAgIGFwcGxpY2F0aW9uQ2FjaGUudXBkYXRlKCk7CisgICAgYXBwbGljYXRpb25D
YWNoZS51cGRhdGUoKTsKKyAgICBhcHBsaWNhdGlvbkNhY2hlLnVwZGF0ZSgpOwogICAgIGFwcGxp
Y2F0aW9uQ2FjaGUudXBkYXRlKCk7CiAKLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAg
ICAgICBhcHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBmdW5jdGlvbigpIHsgdGVzdDIoKSB9
Ci0gICAgICAgIGFwcGxpY2F0aW9uQ2FjaGUub25jaGVja2luZyA9IGZ1bmN0aW9uKCkgeyBsb2co
ImNoZWNraW5nIikgfQotICAgICAgICBhcHBsaWNhdGlvbkNhY2hlLnVwZGF0ZSgpOwotICAgIH0s
IDEwKTsKKyAgICBhcHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBkb25lOworICAgIGFwcGxp
Y2F0aW9uQ2FjaGUub25jYWNoZWQgPSBmdW5jdGlvbigpIHsgbG9nKCJGQUlMOiByZWNlaXZlZCB1
bmV4cGVjdGVkIGNhY2hlZCBldmVudCIpIH0KIH0KIAotZnVuY3Rpb24gdGVzdDIoKQorZnVuY3Rp
b24gZG9uZSgpCiB7Ci0gICAgYXBwbGljYXRpb25DYWNoZS5vbm5vdXBkYXRlID0gZnVuY3Rpb24o
KSB7IGxvZygiRkFJTDogcmVjZWl2ZWQgdW5leHBlY3RlZCBub3VwZGF0ZSBldmVudCIpIH0KLSAg
ICBhcHBsaWNhdGlvbkNhY2hlLm9uY2FjaGVkID0gZnVuY3Rpb24oKSB7IGxvZygiRkFJTDogcmVj
ZWl2ZWQgdW5leHBlY3RlZCBjYWNoZWQgZXZlbnQiKSB9Ci0gICAgYXBwbGljYXRpb25DYWNoZS5v
bmNoZWNraW5nID0gZnVuY3Rpb24oKSB7IGxvZygiRkFJTDogcmVjZWl2ZWQgdW5leHBlY3RlZCBj
aGVja2luZyBldmVudCIpIH0KLQotICAgIGFwcGxpY2F0aW9uQ2FjaGUudXBkYXRlKCk7Ci0KICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICBsb2coIkRPTkUiKTsKICAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKQEAgLTQ5LDggKzQ1LDggQEAgZnVuY3Rp
b24gdGVzdDIoKQogICAgIH0sIDEwKTsKIH0KIAotYXBwbGljYXRpb25DYWNoZS5vbm5vdXBkYXRl
ID0gZnVuY3Rpb24oKSB7IHRlc3QxKCkgfQotYXBwbGljYXRpb25DYWNoZS5vbmNhY2hlZCA9IGZ1
bmN0aW9uKCkgeyB0ZXN0MSgpIH0KK2FwcGxpY2F0aW9uQ2FjaGUub25jYWNoZWQgPSB0ZXN0Owor
YXBwbGljYXRpb25DYWNoZS5vbm5vdXBkYXRlID0gdGVzdDsKIAogYXBwbGljYXRpb25DYWNoZS5v
bnVwZGF0ZXJlYWR5ID0gZnVuY3Rpb24oKSB7IGxvZygiRkFJTDogcmVjZWl2ZWQgdW5leHBlY3Rl
ZCB1cGRhdGVyZWFkeSBldmVudCIpIH0KIGFwcGxpY2F0aW9uQ2FjaGUub25lcnJvciA9IGZ1bmN0
aW9uKCkgeyBsb2coIkZBSUw6IHJlY2VpdmVkIHVuZXhwZWN0ZWQgZXJyb3IgZXZlbnQiKSB9Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL21hbmlmZXN0LWNvbnRhaW5pbmct
aXRzZWxmLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNo
ZS9tYW5pZmVzdC1jb250YWluaW5nLWl0c2VsZi5odG1sCShyZXZpc2lvbiA0MDI0NikKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvbWFuaWZlc3QtY29udGFpbmluZy1pdHNlbGYu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTgsNiArMTgsNyBAQCBmdW5jdGlvbiBjYWNoZWQoKQog
fQogCiBhcHBsaWNhdGlvbkNhY2hlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhY2hlZCcsIGNhY2hlZCwg
ZmFsc2UpOworYXBwbGljYXRpb25DYWNoZS5hZGRFdmVudExpc3RlbmVyKCdub3VwZGF0ZScsIGNh
Y2hlZCwgZmFsc2UpOwogCiA8L3NjcmlwdD4KIDwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvYXBwY2FjaGUvbmF2aWdhdGluZy1hd2F5LXdoaWxlLWNhY2hlLWF0dGVtcHQtaW4t
cHJvZ3Jlc3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNh
Y2hlL25hdmlnYXRpbmctYXdheS13aGlsZS1jYWNoZS1hdHRlbXB0LWluLXByb2dyZXNzLmh0bWwJ
KHJldmlzaW9uIDQwMjQ2KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9uYXZp
Z2F0aW5nLWF3YXktd2hpbGUtY2FjaGUtYXR0ZW1wdC1pbi1wcm9ncmVzcy5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC03LDcgKzcsNyBAQCBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CiB9CiAKIGZ1bmN0aW9uIG5hdmlnYXRlQXdheSgpIHsKLSAgICBpZiAobGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogICAgIGVsc2UKICAgICAgICAgd2luZG93
LmxvY2F0aW9uLmhyZWYgPSAiYWJvdXQ6YmxhbmsiCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2FwcGNhY2hlL29mZmxpbmUtYWNjZXNzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL29mZmxpbmUtYWNjZXNzLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNDAyNDYpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL29m
ZmxpbmUtYWNjZXNzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IFRlc3QgdGhhdCBvZmZsaW5lIGFwcGxpY2F0aW9ucyB3b3JrIHdoZW4gdGhlcmUgaXMgbm8gbmV0
d29yayBhY2Nlc3MgKHNpbXVsYXRlZCkuCiAKLVNob3VsZCBzYXkgU1VDQ0VTUyAob3V0cHV0IGlu
IGZyYW1lcyBpcyB0aW1pbmcgZGVwZW5kZW50LCBhbmQgbWF5IGxlZ2FsbHkgZGlmZmVyIGJldHdl
ZW4gcnVucyk6CitTaG91bGQgc2F5IFNVQ0NFU1M6CiAKIFNVQ0NFU1MKICAgCkluZGV4OiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL29mZmxpbmUtYWNjZXNzLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9vZmZsaW5lLWFjY2Vzcy5odG1s
CShyZXZpc2lvbiA0MDI0NikKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvb2Zm
bGluZS1hY2Nlc3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIDxodG1sPgog
PGJvZHk+CiA8cD5UZXN0IHRoYXQgb2ZmbGluZSBhcHBsaWNhdGlvbnMgd29yayB3aGVuIHRoZXJl
IGlzIG5vIG5ldHdvcmsgYWNjZXNzIChzaW11bGF0ZWQpLjwvcD4KLTxwPlNob3VsZCBzYXkgU1VD
Q0VTUyAob3V0cHV0IGluIGZyYW1lcyBpcyB0aW1pbmcgZGVwZW5kZW50LCBhbmQgbWF5IGxlZ2Fs
bHkgZGlmZmVyIGJldHdlZW4gcnVucyk6PC9wPgorPHA+U2hvdWxkIHNheSBTVUNDRVNTOjwvcD4K
IDxkaXYgaWQ9cmVzdWx0PjwvZGl2PgogCiA8c2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9hcHBjYWNoZS9yZW1vdmUtY2FjaGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvcmVtb3ZlLWNhY2hlLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNDAyNDYpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3Jl
bW92ZS1jYWNoZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw5IEBACiBU
ZXN0IHRoYXQgYSA0MDQgcmVzcG9uc2UgZm9yIG1hbmlmZXN0IHJlc3VsdHMgaW4gY2FjaGUgcmVt
b3ZhbC4KIAotRnJhbWUgMTogTWFuaWZlc3QgbG9hZGluZyByZXN1bHRzIGluIDQwNCByZXNwb25z
ZSwgdG8gdGhlIGNhY2hlIGdyb3VwIGJlY29tZXMgb2Jzb2xldGUuCi1GcmFtZSAyOiBNYW5pZmVz
dCBpcyBzdGlsbCA0MDQgLSB0aGUgZG9jdW1lbnQgaXMgbmV2ZXIgYXNzb2NpYXRlZCB3aXRoIGEg
Y2FjaGUuCi1GcmFtZSAzOiBNYW5pZmVzdCBpcyBub3cgYXZhaWxhYmxlLCBzbyB0aGUgZG9jdW1l
bnQgZ2V0cyBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBpbiBhIG5ld2x5IGNyZWF0ZWQgZ3JvdXA7
IHRoZSBvYnNvbGV0ZSBjYWNoZSBncm91cCBpcyBub3QgYWZmZWN0ZWQuCitGcmFtZSAxOiBNYW5p
ZmVzdCBpcyBzdGlsbCBhdmFpbGFibGUsIHNvIGEgbmV3IG1hc3RlciByZXNvdXJjZSBpcyBhZGRl
ZCB0byB0aGUgY2FjaGUuCitGcmFtZSAyOiBNYW5pZmVzdCBsb2FkaW5nIHJlc3VsdHMgaW4gNDA0
IHJlc3BvbnNlLCBzbyB0aGUgY2FjaGUgZ3JvdXAgYmVjb21lcyBvYnNvbGV0ZSwgYW5kIGFuIG9i
c29sZXRlIGV2ZW50IGlzIGRpc3BhdGNoZWQgKGJlY2F1c2UgdGhlIGRvY3VtZW50IGluIGZyYW1l
IHdhcyBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBpbiB0aGUgZ3JvdXApLgorRnJhbWUgMzogTWFu
aWZlc3QgaXMgc3RpbGwgNDA0IC0gdGhlIGRvY3VtZW50IGlzIG5ldmVyIGFzc29jaWF0ZWQgd2l0
aCBhIGNhY2hlLgorRnJhbWUgNDogTWFuaWZlc3QgaXMgbm93IGF2YWlsYWJsZSwgc28gdGhlIGRv
Y3VtZW50IGdldHMgYXNzb2NpYXRlZCB3aXRoIGEgY2FjaGUgaW4gYSBuZXdseSBjcmVhdGVkIGdy
b3VwOyB0aGUgb2Jzb2xldGUgY2FjaGUgZ3JvdXAgaXMgbm90IGFmZmVjdGVkLgogU2hvdWxkIHNh
eSBTVUNDRVNTOgogCiBTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNh
Y2hlL3JlbW92ZS1jYWNoZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvYXBwY2FjaGUvcmVtb3ZlLWNhY2hlLmh0bWwJKHJldmlzaW9uIDQwMjQ2KQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZW1vdmUtY2FjaGUuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMiw5ICsyLDEwIEBACiA8cD5UZXN0IHRoYXQgYSA0MDQgcmVzcG9uc2UgZm9yIG1hbmlm
ZXN0IHJlc3VsdHMgaW4gY2FjaGUgcmVtb3ZhbC48L3A+CiA8Ym9keT4KIDx1bD4KLTxsaT5GcmFt
ZSAxOiBNYW5pZmVzdCBsb2FkaW5nIHJlc3VsdHMgaW4gNDA0IHJlc3BvbnNlLCB0byB0aGUgY2Fj
aGUgZ3JvdXAgYmVjb21lcyBvYnNvbGV0ZS4KLTxsaT5GcmFtZSAyOiBNYW5pZmVzdCBpcyBzdGls
bCA0MDQgLSB0aGUgZG9jdW1lbnQgaXMgbmV2ZXIgYXNzb2NpYXRlZCB3aXRoIGEgY2FjaGUuCi08
bGk+RnJhbWUgMzogTWFuaWZlc3QgaXMgbm93IGF2YWlsYWJsZSwgc28gdGhlIGRvY3VtZW50IGdl
dHMgYXNzb2NpYXRlZCB3aXRoIGEgY2FjaGUgaW4gYSBuZXdseSBjcmVhdGVkIGdyb3VwOyB0aGUg
b2Jzb2xldGUgY2FjaGUgZ3JvdXAgaXMgbm90IGFmZmVjdGVkLgorPGxpPkZyYW1lIDE6IE1hbmlm
ZXN0IGlzIHN0aWxsIGF2YWlsYWJsZSwgc28gYSBuZXcgbWFzdGVyIHJlc291cmNlIGlzIGFkZGVk
IHRvIHRoZSBjYWNoZS4KKzxsaT5GcmFtZSAyOiBNYW5pZmVzdCBsb2FkaW5nIHJlc3VsdHMgaW4g
NDA0IHJlc3BvbnNlLCBzbyB0aGUgY2FjaGUgZ3JvdXAgYmVjb21lcyBvYnNvbGV0ZSwgYW5kIGFu
IG9ic29sZXRlIGV2ZW50IGlzIGRpc3BhdGNoZWQgKGJlY2F1c2UgdGhlIGRvY3VtZW50IGluIGZy
YW1lIHdhcyBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBpbiB0aGUgZ3JvdXApLgorPGxpPkZyYW1l
IDM6IE1hbmlmZXN0IGlzIHN0aWxsIDQwNCAtIHRoZSBkb2N1bWVudCBpcyBuZXZlciBhc3NvY2lh
dGVkIHdpdGggYSBjYWNoZS4KKzxsaT5GcmFtZSA0OiBNYW5pZmVzdCBpcyBub3cgYXZhaWxhYmxl
LCBzbyB0aGUgZG9jdW1lbnQgZ2V0cyBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBpbiBhIG5ld2x5
IGNyZWF0ZWQgZ3JvdXA7IHRoZSBvYnNvbGV0ZSBjYWNoZSBncm91cCBpcyBub3QgYWZmZWN0ZWQu
CiA8L3VsPgogPHA+U2hvdWxkIHNheSBTVUNDRVNTOjwvcD4KIDxkaXYgaWQ9cmVzdWx0PjwvZGl2
PgpAQCAtMzAsMjEgKzMxLDMwIEBAIGZ1bmN0aW9uIHNldE1hbmlmZXN0RGVsZXRlZChzdGF0ZSkK
IGZ1bmN0aW9uIHRlc3QoKQogewogICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpOwotICAgIGFw
cGxpY2F0aW9uQ2FjaGUub25ub3VwZGF0ZSA9IG51bGw7Ci0gICAgYXBwbGljYXRpb25DYWNoZS5v
bmNhY2hlZCA9IG51bGw7CiAKLSAgICBzZXRNYW5pZmVzdERlbGV0ZWQodHJ1ZSk7Ci0gICAgLy8g
VGhlIGZyYW1lIHdpbGwgYmUgYXNzb2NpYXRlZCB0byBhIGNhY2hlLCBidXQgdXBkYXRlIHdpbGwg
b2Jzb2xldGUgaXQuCisgICAgLy8gVGhlIGZyYW1lIHdpbGwgYmUgYXNzb2NpYXRlZCB0byBhIGNh
Y2hlLCBhbmQgaXRzIG1haW4gcmVzb3VyY2Ugd2lsbCBiZSBhZGRlZCB0byB0aGUgY2FjaGUuCiAg
ICAgdmFyIGlmciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwogICAgIGlmci5z
ZXRBdHRyaWJ1dGUoInNyYyIsICJyZXNvdXJjZXMvcmVtb3ZlLWNhY2hlLWZyYW1lLmh0bWwiKTsK
ICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcik7Ci0gICAgd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoIm1lc3NhZ2UiLCB0ZXN0MiwgZmFsc2UpOworICAgIGFwcGxpY2F0aW9uQ2FjaGUu
b25ub3VwZGF0ZSA9IHRlc3QyOwogfQogCiBmdW5jdGlvbiB0ZXN0MigpCiB7Ci0gICAgd2luZG93
LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCB0ZXN0MiwgZmFsc2UpOworICAgIGFwcGxp
Y2F0aW9uQ2FjaGUub25ub3VwZGF0ZSA9IGZ1bmN0aW9uKCkgeyBsb2coIlVuZXhwZWN0ZWQgbm91
cGRhdGUgZXZlbnQiKSB9CisgICAgYXBwbGljYXRpb25DYWNoZS5vbmNhY2hlZCA9IGZ1bmN0aW9u
KCkgeyBsb2coIlVuZXhwZWN0ZWQgY2FjaGVkIGV2ZW50IikgfQorCisgICAgc2V0TWFuaWZlc3RE
ZWxldGVkKHRydWUpOworICAgIC8vIFRoZSBmcmFtZSB3aWxsIGJlIGFzc29jaWF0ZWQgdG8gYSBj
YWNoZSwgYnV0IHVwZGF0ZSB3aWxsIG9ic29sZXRlIGl0LgorICAgIHZhciBpZnIgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICBpZnIuc2V0QXR0cmlidXRlKCJzcmMiLCAi
cmVzb3VyY2VzL3JlbW92ZS1jYWNoZS1mcmFtZS5odG1sIik7CisgICAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChpZnIpOworICAgIGFwcGxpY2F0aW9uQ2FjaGUub25vYnNvbGV0ZSA9IHRlc3Qz
OworfQogCitmdW5jdGlvbiB0ZXN0MygpCit7CisgICAgYXBwbGljYXRpb25DYWNoZS5vbmNoZWNr
aW5nID0gZnVuY3Rpb24oKSB7IGxvZygiVW5leHBlY3RlZCBjaGVja2luZyBldmVudCBhZnRlciBv
YnNvbGV0ZSBldmVudCIpIH0KICAgICBhcHBsaWNhdGlvbkNhY2hlLm9udXBkYXRlcmVhZHkgPSBm
dW5jdGlvbigpIHsgbG9nKCJVbmV4cGVjdGVkIHVwZGF0ZXJlYWR5IGV2ZW50IGFmdGVyIG9ic29s
ZXRlIGV2ZW50IikgfQogICAgIGFwcGxpY2F0aW9uQ2FjaGUub25lcnJvciA9IGZ1bmN0aW9uKCkg
eyBsb2coIlVuZXhwZWN0ZWQgZXJyb3IgZXZlbnQgYWZ0ZXIgb2Jzb2xldGUgZXZlbnQiKSB9CiAg
ICAgYXBwbGljYXRpb25DYWNoZS5vbm5vdXBkYXRlID0gZnVuY3Rpb24oKSB7IGxvZygiVW5leHBl
Y3RlZCBub3VwZGF0ZSBldmVudCBhZnRlciBvYnNvbGV0ZSBldmVudCIpIH0KQEAgLTU0LDI2ICs2
NCwyNiBAQCBmdW5jdGlvbiB0ZXN0MigpCiAgICAgdmFyIGlmciA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImlmcmFtZSIpOwogICAgIGlmci5zZXRBdHRyaWJ1dGUoInNyYyIsICJyZXNvdXJjZXMv
cmVtb3ZlLWNhY2hlLWZyYW1lLmh0bWwiKTsKICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGlmcik7Ci0gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCB0ZXN0MywgZmFs
c2UpOworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgdGVzdDQsIGZhbHNl
KTsKIH0KIAotZnVuY3Rpb24gdGVzdDMoKQorZnVuY3Rpb24gdGVzdDQoKQogewogICAgIHNldE1h
bmlmZXN0RGVsZXRlZChmYWxzZSk7CiAKLSAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
bWVzc2FnZSIsIHRlc3QzLCBmYWxzZSk7CisgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIo
Im1lc3NhZ2UiLCB0ZXN0NCwgZmFsc2UpOwogICAgIGFwcGxpY2F0aW9uQ2FjaGUub251cGRhdGVy
ZWFkeSA9IG51bGw7CiAKICAgICAvLyBUaGUgZnJhbWUgd2lsbCBiZSBhc3NvY2lhdGVkIHRvIGEg
Y2FjaGUuCiAgICAgdmFyIGlmciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwog
ICAgIGlmci5zZXRBdHRyaWJ1dGUoInNyYyIsICJyZXNvdXJjZXMvcmVtb3ZlLWNhY2hlLWZyYW1l
LTIuaHRtbCIpOwogICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyKTsKLSAgICB3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHRlc3Q0LCBmYWxzZSk7CisgICAgd2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCB0ZXN0NSwgZmFsc2UpOwogfQogCi1mdW5jdGlv
biB0ZXN0NCgpCitmdW5jdGlvbiB0ZXN0NSgpCiB7Ci0gICAgbG9nKG9ic29sZXRlID8gIlNVQ0NF
U1MiIDogIkZBSUw6IFRlc3RzIHN0ZXBzIGhhdmUgZmluaXNoZWQsIGJ1dCBtYWluIGZyYW1lIG5l
dmVyIHJlY2VpdmVkIGFuIG9ic29sZXRlIGV2ZW50Iik7CisgICAgbG9nKCJTVUNDRVNTIik7CiAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOwogfQpAQCAtOTAsMTIgKzEwMCw4IEBAIGZ1bmN0aW9uIHJl
c2V0TWFuaWZlc3QoKQogfQogCiBhcHBsaWNhdGlvbkNhY2hlLm9udXBkYXRlcmVhZHkgPSBmdW5j
dGlvbigpIHsgbG9nKCJVbmV4cGVjdGVkIHVwZGF0ZXJlYWR5IGV2ZW50IikgfQotYXBwbGljYXRp
b25DYWNoZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7IGxvZygiVW5leHBlY3RlZCBlcnJvciBldmVu
dCIpIH0KLWFwcGxpY2F0aW9uQ2FjaGUub25ub3VwZGF0ZSA9IGZ1bmN0aW9uKCkgeyBzZXRUaW1l
b3V0KHRlc3QsIDApIH0KLWFwcGxpY2F0aW9uQ2FjaGUub25jYWNoZWQgPSBmdW5jdGlvbigpIHsg
c2V0VGltZW91dCh0ZXN0LCAwKSB9Ci0KLXZhciBvYnNvbGV0ZSA9IGZhbHNlOwotYXBwbGljYXRp
b25DYWNoZS5vbm9ic29sZXRlID0gZnVuY3Rpb24oKSB7IG9ic29sZXRlID0gdHJ1ZTsgfQorYXBw
bGljYXRpb25DYWNoZS5vbm5vdXBkYXRlID0gdGVzdDsKK2FwcGxpY2F0aW9uQ2FjaGUub25jYWNo
ZWQgPSB0ZXN0OwogCiAvLyBJZiB0aGUgbWFuaWZlc3Qgc2NyaXB0IGhhcHBlbmVkIHRvIGJlIGlu
IGEgd3Jvbmcgc3RhdGUsIHJlc2V0IGl0LgogdmFyIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQocmVz
ZXRNYW5pZmVzdCwgMTAwKTsKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUv
d3JvbmctY29udGVudC10eXBlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9hcHBjYWNoZS93cm9uZy1jb250ZW50LXR5cGUuaHRtbAkocmV2aXNpb24gNDAyNDYpCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3dyb25nLWNvbnRlbnQtdHlwZS5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0xOSwyNCArMTksMjEgQEAgZnVuY3Rpb24gY2FjaGVDYWxsYmFj
aygpCiAgICAgbG9nKCJGQUlMOiBBbiBldmVudCB3YXMgZGlzcGF0Y2hlZCBvbiB3aW5kb3cuYXBw
bGljYXRpb25DYWNoZSwgZXZlbiB0aG91Z2ggaXQgd2FzIG5vdCBhc3NvY2lhdGVkIHd1dGggYW55
IGNhY2hlIHlldC4iKTsKIH0KIAotZnVuY3Rpb24gdGltZW91dCgpCitmdW5jdGlvbiB0ZXN0KCkK
IHsKICAgICAvLyBXYWl0IGZvciBjYWNoZSB1cGRhdGUgdG8gZmluaXNoLgotICAgIGlmICh3aW5k
b3cuYXBwbGljYXRpb25DYWNoZS5zdGF0dXMgIT0gMCkgewotICAgICAgICBzZXRUaW1lb3V0KHRp
bWVvdXQsIDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGxvZygiU1VDQ0VT
UyIpOworICAgIGlmICh3aW5kb3cuYXBwbGljYXRpb25DYWNoZS5zdGF0dXMgIT0gd2luZG93LmFw
cGxpY2F0aW9uQ2FjaGUuVU5DQUNIRUQpCisgICAgICAgIGxvZygiRkFJTFVSRTogVW5leHBlY3Rl
ZCBjYWNoZSBzdGF0dXM6ICIgKyB3aW5kb3cuYXBwbGljYXRpb25DYWNoZS5zdGF0dXMpOworICAg
IGVsc2UKKyAgICAgICAgbG9nKCJTVUNDRVNTIik7CisKICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CiB9CiAKLWFwcGxpY2F0aW9uQ2FjaGUuYWRkRXZlbnRMaXN0ZW5lcignY2FjaGVkJywgY2FjaGVD
YWxsYmFjaywgZmFsc2UpOwotYXBwbGljYXRpb25DYWNoZS5hZGRFdmVudExpc3RlbmVyKCdub3Vw
ZGF0ZScsIGNhY2hlQ2FsbGJhY2ssIGZhbHNlKTsKLWFwcGxpY2F0aW9uQ2FjaGUuYWRkRXZlbnRM
aXN0ZW5lcignZXJyb3InLCBjYWNoZUNhbGxiYWNrLCBmYWxzZSk7Ci0KLXNldFRpbWVvdXQodGlt
ZW91dCwgMTAwKTsKK2FwcGxpY2F0aW9uQ2FjaGUuYWRkRXZlbnRMaXN0ZW5lcignY2FjaGVkJywg
ZnVuY3Rpb24oKSB7IGxvZygiY2FjaGVkIik7IGNhY2hlQ2FsbGJhY2soKSB9LCBmYWxzZSk7Cith
cHBsaWNhdGlvbkNhY2hlLmFkZEV2ZW50TGlzdGVuZXIoJ25vdXBkYXRlJywgZnVuY3Rpb24oKSB7
IGxvZygibm91cGRhdGUiKTsgY2FjaGVDYWxsYmFjaygpIH0sIGZhbHNlKTsKK2FwcGxpY2F0aW9u
Q2FjaGUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0ZXN0LCBmYWxzZSk7CiAKIDwvc2NyaXB0
PgogPC9ib2R5PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS93cm9uZy1z
aWduYXR1cmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNh
Y2hlL3dyb25nLXNpZ25hdHVyZS5odG1sCShyZXZpc2lvbiA0MDI0NikKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvYXBwY2FjaGUvd3Jvbmctc2lnbmF0dXJlLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTE5LDI0ICsxOSwyMSBAQCBmdW5jdGlvbiBjYWNoZUNhbGxiYWNrKCkKICAgICBsb2coIkZB
SUw6IEFuIGV2ZW50IHdhcyBkaXNwYXRjaGVkIG9uIHdpbmRvdy5hcHBsaWNhdGlvbkNhY2hlLCBl
dmVuIHRob3VnaCBpdCB3YXMgbm90IGFzc29jaWF0ZWQgd3V0aCBhbnkgY2FjaGUgeWV0LiIpOwog
fQogCi1mdW5jdGlvbiB0aW1lb3V0KCkKK2Z1bmN0aW9uIHRlc3QoKQogewogICAgIC8vIFdhaXQg
Zm9yIGNhY2hlIHVwZGF0ZSB0byBmaW5pc2guCi0gICAgaWYgKHdpbmRvdy5hcHBsaWNhdGlvbkNh
Y2hlLnN0YXR1cyAhPSAwKSB7Ci0gICAgICAgIHNldFRpbWVvdXQodGltZW91dCwgMCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbG9nKCJTVUNDRVNTIik7CisgICAgaWYgKHdp
bmRvdy5hcHBsaWNhdGlvbkNhY2hlLnN0YXR1cyAhPSB3aW5kb3cuYXBwbGljYXRpb25DYWNoZS5V
TkNBQ0hFRCkKKyAgICAgICAgbG9nKCJGQUlMVVJFOiBVbmV4cGVjdGVkIGNhY2hlIHN0YXR1czog
IiArIHdpbmRvdy5hcHBsaWNhdGlvbkNhY2hlLnN0YXR1cyk7CisgICAgZWxzZQorICAgICAgICBs
b2coIlNVQ0NFU1MiKTsKKwogICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKIH0KIAogYXBwbGljYXRp
b25DYWNoZS5hZGRFdmVudExpc3RlbmVyKCdjYWNoZWQnLCBmdW5jdGlvbigpIHsgbG9nKCJjYWNo
ZWQiKTsgY2FjaGVDYWxsYmFjaygpIH0sIGZhbHNlKTsKIGFwcGxpY2F0aW9uQ2FjaGUuYWRkRXZl
bnRMaXN0ZW5lcignbm91cGRhdGUnLCBmdW5jdGlvbigpIHsgbG9nKCJub3VwZGF0ZSIpOyBjYWNo
ZUNhbGxiYWNrKCkgfSwgZmFsc2UpOwotYXBwbGljYXRpb25DYWNoZS5hZGRFdmVudExpc3RlbmVy
KCdlcnJvcicsIGZ1bmN0aW9uKCkgeyBsb2coImVycm9yIik7IGNhY2hlQ2FsbGJhY2soKSB9LCBm
YWxzZSk7Ci0KLXNldFRpbWVvdXQodGltZW91dCwgMTAwKTsKK2FwcGxpY2F0aW9uQ2FjaGUuYWRk
RXZlbnRMaXN0ZW5lcignZXJyb3InLCB0ZXN0LCBmYWxzZSk7CiAKIDwvc2NyaXB0PgogPC9ib2R5
PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvb2ZmbGlu
ZS1hY2Nlc3MtZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2FwcGNhY2hlL3Jlc291cmNlcy9vZmZsaW5lLWFjY2Vzcy1mcmFtZS5odG1sCShyZXZpc2lvbiA0
MDI0NikKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvcmVzb3VyY2VzL29mZmxp
bmUtYWNjZXNzLWZyYW1lLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAgKzEsMjIgQEAKIDxo
dG1sIG1hbmlmZXN0PSIvcmVzb3VyY2VzL25ldHdvcmstc2ltdWxhdG9yLnBocD9wYXRoPS9hcHBj
YWNoZS9yZXNvdXJjZXMvb2ZmbGluZS1hY2Nlc3MubWFuaWZlc3QiPgogPGRpdiBpZD1yZXN1bHQ+
PC9kaXY+Ci08c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9uZXR3b3JrLXNpbXVsYXRvci5waHA/cGF0
aD0vYXBwY2FjaGUvcmVzb3VyY2VzL29mZmxpbmUtYWNjZXNzLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQ+CiBmdW5jdGlvbiBsb2cobWVzc2FnZSkKIHsKICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7CiB9Ci0KLWFwcGxpY2F0
aW9uQ2FjaGUub25jYWNoZWQgPSBmdW5jdGlvbigpIHsgbG9nKCJjYWNoZWQiKTsgdGVzdCgpIH0K
LWFwcGxpY2F0aW9uQ2FjaGUub25ub3VwZGF0ZSA9IGZ1bmN0aW9uKCkgeyBsb2coIm5vdXBkYXRl
Iik7IHRlc3QoKSB9Ci1hcHBsaWNhdGlvbkNhY2hlLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsgbG9n
KCJlcnJvciIpOyB0ZXN0KCkgfQotCithcHBsaWNhdGlvbkNhY2hlLm9uY2hlY2tpbmcgPSBmdW5j
dGlvbigpIHsgbG9nKCJjaGVja2luZyIpOyB9CiBhcHBsaWNhdGlvbkNhY2hlLm9uZG93bmxvYWRp
bmcgPSBmdW5jdGlvbigpIHsgbG9nKCJkb3dubG9hZGluZyIpIH0KIGFwcGxpY2F0aW9uQ2FjaGUu
b25wcm9ncmVzcyA9IGZ1bmN0aW9uKCkgeyBsb2coInByb2dyZXNzIikgfQogYXBwbGljYXRpb25D
YWNoZS5vbnVwZGF0ZXJlYWR5ID0gZnVuY3Rpb24oKSB7IGxvZygidXBkYXRlcmVhZHkiKSB9CiBh
cHBsaWNhdGlvbkNhY2hlLm9ub2Jzb2xldGUgPSBmdW5jdGlvbigpIHsgbG9nKCJvYnNvbGV0ZSIp
IH0KKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvbmV0d29yay1zaW11bGF0b3Iu
cGhwP3BhdGg9L2FwcGNhY2hlL3Jlc291cmNlcy9vZmZsaW5lLWFjY2Vzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgorCithcHBsaWNhdGlvbkNhY2hlLm9uY2FjaGVkID0gZnVuY3Rpb24oKSB7IGxv
ZygiY2FjaGVkIik7IHRlc3QoKSB9CithcHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBmdW5j
dGlvbigpIHsgbG9nKCJub3VwZGF0ZSIpOyB0ZXN0KCkgfQorYXBwbGljYXRpb25DYWNoZS5vbmVy
cm9yID0gZnVuY3Rpb24oKSB7IGxvZygiZXJyb3IiKTsgdGVzdCgpIH0KIAogaWYgKGFwcGxpY2F0
aW9uQ2FjaGUuc3RhdHVzID09IGFwcGxpY2F0aW9uQ2FjaGUuSURMRSkgewogICAgIC8vIFVwZGF0
ZSBmaW5pc2hlZCB3aGlsZSB3ZSB3ZXJlIHdhaXRpbmcgZm9yIG9mZmxpbmUtYWNjZXNzLmpzIHRv
IGxvYWQuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9y
ZW1vdmUtY2FjaGUtZnJhbWUtMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvYXBwY2FjaGUvcmVzb3VyY2VzL3JlbW92ZS1jYWNoZS1mcmFtZS0yLmh0bWwJKHJldmlz
aW9uIDQwMjQ2KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMv
cmVtb3ZlLWNhY2hlLWZyYW1lLTIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTAsNyArMTAsNyBA
QCBmdW5jdGlvbiBsb2cobWVzc2FnZSkKIGZ1bmN0aW9uIHRlc3QoKQogewogICAgIGxvZygiY2Fj
aGVkIikKLSAgICBsb2coInN0YXR1cz0iICsgYXBwbGljYXRpb25DYWNoZS5zdGF0dXMgKyAiIChl
eHBlY3RlZCAzKSIpOworICAgIGxvZygic3RhdHVzPSIgKyBhcHBsaWNhdGlvbkNhY2hlLnN0YXR1
cyk7CiAgICAgYXBwbGljYXRpb25DYWNoZS5vbm5vdXBkYXRlID0gbnVsbDsKIAogICAgIC8vIEFz
c29jaWF0ZWQgdG8gYSBjYWNoZSwgc28gbG9hZGluZyBzaG91bGQgZmFpbApJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvcmVtb3ZlLWNhY2hlLWZyYW1lLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJj
ZXMvcmVtb3ZlLWNhY2hlLWZyYW1lLmh0bWwJKHJldmlzaW9uIDQwMjQ2KQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvcmVtb3ZlLWNhY2hlLWZyYW1lLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTEwLDExICsxMCwxMSBAQCBmdW5jdGlvbiBsb2cobWVzc2FnZSkK
IGZ1bmN0aW9uIG9uT2Jzb2xldGUoKQogewogICAgIGxvZygib2Jzb2xldGUiKQotICAgIGxvZygi
c3RhdHVzPSIgKyBhcHBsaWNhdGlvbkNhY2hlLnN0YXR1cyArICIgKGV4cGVjdGVkIDIpIik7Ci0g
ICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7CisgICAgbG9nKCJzdGF0dXM9IiArIGFwcGxpY2F0
aW9uQ2FjaGUuc3RhdHVzICsgIiAoZXhwZWN0ZWQgNSkiKTsKICAgICBhcHBsaWNhdGlvbkNhY2hl
Lm9ub2Jzb2xldGUgPSBmdW5jdGlvbigpIHsgbG9nKCJvYnNvbGV0ZSIpIH0KICAgICBhcHBsaWNh
dGlvbkNhY2hlLm9udXBkYXRlcmVhZHkgPSBmdW5jdGlvbigpIHsgbG9nKCJ1cGRhdGVyZWFkeSIp
IH0KICAgICBhcHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBmdW5jdGlvbigpIHsgbG9nKCJu
b3VwZGF0ZSIpIH0KKyAgICBhcHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBmdW5jdGlvbigp
IHsgbG9nKCJlcnJvciIpIH0KIAogICAgIC8vIFdlIHN0aWxsIGhhdmUgYSBjYWNoZSwgc28gbG9h
ZGluZyBzaG91bGQgZmFpbAogICAgIHRyeSB7CkBAIC0yNSwyMSArMjUsMjAgQEAgZnVuY3Rpb24g
b25PYnNvbGV0ZSgpCiAgICAgfSBjYXRjaCAoZXgpIHsKICAgICB9CiAgICAgbG9nKCJUaGVyZSBz
aG91bGQgYmUgbm8gbWVzc2FnZXMgYmVsb3cuIik7Ci0gICAgcGFyZW50LnBvc3RNZXNzYWdlKCJm
cmFtZURvbmUgLSBvYnNvbGV0ZSIsICIqIik7CiB9CiAKLWZ1bmN0aW9uIG9uTm9NYW5pZmVzdCgp
CitmdW5jdGlvbiBvbkVycm9yKCkKIHsKICAgICBpZiAoYXBwbGljYXRpb25DYWNoZS5zdGF0dXMg
IT0gYXBwbGljYXRpb25DYWNoZS5VTkNBQ0hFRCAmJiBhcHBsaWNhdGlvbkNhY2hlLnN0YXR1cyAh
PSBhcHBsaWNhdGlvbkNhY2hlLk9CU09MRVRFKSB7CiAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRp
bWVvdXQob25Ob01hbmlmZXN0LCAxMDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bG9nKCJubyBjYWxsYmFjayIpOwotICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpOworICAgIGxv
ZygiZXJyb3IiKTsKICAgICBhcHBsaWNhdGlvbkNhY2hlLm9ub2Jzb2xldGUgPSBmdW5jdGlvbigp
IHsgbG9nKCJvYnNvbGV0ZSIpIH0KICAgICBhcHBsaWNhdGlvbkNhY2hlLm9udXBkYXRlcmVhZHkg
PSBmdW5jdGlvbigpIHsgbG9nKCJ1cGRhdGVyZWFkeSIpIH0KICAgICBhcHBsaWNhdGlvbkNhY2hl
Lm9ubm91cGRhdGUgPSBmdW5jdGlvbigpIHsgbG9nKCJub3VwZGF0ZSIpIH0KKyAgICBhcHBsaWNh
dGlvbkNhY2hlLm9ubm91cGRhdGUgPSBmdW5jdGlvbigpIHsgbG9nKCJlcnJvciIpIH0KIAogICAg
IC8vIEVuc3VyZSB0aGF0IHdlIGFyZSBub3QgYXNzb2NpYXRlZCB3aXRoIGEgY2FjaGUuCiAgICAg
dHJ5IHsKQEAgLTU0LDEzICs1MywxMSBAQCBmdW5jdGlvbiBvbk5vTWFuaWZlc3QoKQogfQogCiBh
cHBsaWNhdGlvbkNhY2hlLm9udXBkYXRlcmVhZHkgPSBmdW5jdGlvbigpIHsgbG9nKCJ1cGRhdGVy
ZWFkeSIpOyBhbGVydCgiVW5leHBlY3RlZCB1cGRhdGVyZWFkeSBldmVudCBpbiBmcmFtZSIpIH0K
LWFwcGxpY2F0aW9uQ2FjaGUub25lcnJvciA9IGZ1bmN0aW9uKCkgeyBsb2coImVycm9yIik7IGFs
ZXJ0KCJVbmV4cGVjdGVkIGVycm9yIGV2ZW50IGluIGZyYW1lIikgfQotYXBwbGljYXRpb25DYWNo
ZS5vbm5vdXBkYXRlID0gZnVuY3Rpb24oKSB7IGxvZygibm91cGRhdGUiKTsgYWxlcnQoIlVuZXhw
ZWN0ZWQgbm91cGRhdGUgZXZlbnQgaW4gZnJhbWUiKSB9CithcHBsaWNhdGlvbkNhY2hlLm9ubm91
cGRhdGUgPSBmdW5jdGlvbigpIHsgbG9nKCJub3VwZGF0ZSIpIH0KIGFwcGxpY2F0aW9uQ2FjaGUu
b25jYWNoZWQgPSBmdW5jdGlvbigpIHsgbG9nKCJjYWNoZWQiKTsgYWxlcnQoIlVuZXhwZWN0ZWQg
Y2FjaGVkIGV2ZW50IGluIGZyYW1lIikgfQogCiBhcHBsaWNhdGlvbkNhY2hlLm9ub2Jzb2xldGUg
PSBvbk9ic29sZXRlOwotCi12YXIgdGltZW91dElkID0gc2V0VGltZW91dChvbk5vTWFuaWZlc3Qs
IDEwMCk7CithcHBsaWNhdGlvbkNhY2hlLm9uZXJyb3IgPSBvbkVycm9yOwogCiA8L3NjcmlwdD4K
IDwvYm9keT4K
</data>
<flag name="review"
          id="13019"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>