<?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>39594</bug_id>
          
          <creation_ts>2010-05-24 06:03:50 -0700</creation_ts>
          <short_desc>[v8] ScriptDebugServer should dispatch renderer messages while JS is paused</short_desc>
          <delta_ts>2010-05-25 05:32:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</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="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>abarth</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>229713</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-05-24 06:03:50 -0700</bug_when>
    <thetext>[v8] ScriptDebugServer should dispatch renderer messages while JS is paused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229720</commentid>
    <comment_count>1</comment_count>
      <attachid>56879</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-05-24 06:31:57 -0700</bug_when>
    <thetext>Created attachment 56879
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229721</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-24 06:34:29 -0700</bug_when>
    <thetext>Attachment 56879 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebDevToolsAgentImpl.cpp:136:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKit/chromium/src/WebDevToolsAgentImpl.cpp:143:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229723</commentid>
    <comment_count>3</comment_count>
      <attachid>56881</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-05-24 06:42:56 -0700</bug_when>
    <thetext>Created attachment 56881
patch

Fixed style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229828</commentid>
    <comment_count>4</comment_count>
      <attachid>56881</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-24 11:33:51 -0700</bug_when>
    <thetext>Comment on attachment 56881
patch

WebCore/bindings/js/ScriptDebugServer.cpp:343
 +          (this-&gt;*callback)(copy[i]);

Nit: I generally do not use such a reflection in the native code. Having ::dispatchDidContinue or a single event listener class with an event type would be my preference.


WebCore/bindings/v8/ScriptDebugServer.h:85
 +      class ClientMessageLoop {
It might be useful to declare it in a separate header to minimize the amount of imports on the client.


WebKit/chromium/public/WebDevToolsAgentClient.h:59
 +      class ClientMessageLoop {
Should we name it differently? Like WebKitClientMessageLoop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230194</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-05-25 03:04:36 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; WebCore/bindings/v8/ScriptDebugServer.h:85
&gt;  +      class ClientMessageLoop {
&gt; It might be useful to declare it in a separate header to minimize the amount of imports on the client.
&gt; 
ScriptDebugServer.h is included there anyway to set implementation of the loop so I&apos;d rather leave it this way because it emphasizes that the message loop is used from the debugger.
 
&gt; WebKit/chromium/public/WebDevToolsAgentClient.h:59
&gt;  +      class ClientMessageLoop {
&gt; Should we name it differently? Like WebKitClientMessageLoop?
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230195</commentid>
    <comment_count>6</comment_count>
      <attachid>56999</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-05-25 03:05:27 -0700</bug_when>
    <thetext>Created attachment 56999
patch that I&apos;m going to land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230221</commentid>
    <comment_count>7</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-05-25 04:46:21 -0700</bug_when>
    <thetext>Committed r60154</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230223</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-25 05:01:52 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/60154 might have broken Chromium Mac Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230229</commentid>
    <comment_count>9</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-05-25 05:32:30 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; http://trac.webkit.org/changeset/60154 might have broken Chromium Mac Release

Fixed in r60155.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56879</attachid>
            <date>2010-05-24 06:31:57 -0700</date>
            <delta_ts>2010-05-24 06:42:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>message-loop.patch</filename>
            <type>text/plain</type>
            <size>35023</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MGFhMGRjYy4uNWM4YTdhNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMC0wNS0yNCAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlciBpcyBub3cgaW1wbGVtZW50ZWQg
YXMgRGVidWdFdmVudExpc3RlbmVyIHdoaWNoIG1lYW5zIGl0IGRvZXNuJ3QKKyAgICAgICAgZGVw
ZW5kIG9uIHY4IGRlYnVnZ2luZyBwcm90b2NvbCwgaW5zdGVhZCBpdCB1c2VzIEV4ZWNTdGF0ZSB0
byBjb2xsZWN0IGRlYnVnZ2luZworICAgICAgICBpbmZvIGFuZCBwYXNzIGl0IHRvIHRoZSBsaXN0
ZW5lcnMuCisKKyAgICAgICAgTmV3IGltcGxlbWVudGF0aW9uIG9mIFNjcmlwdERlYnVnU2VydmVy
IHVzZXMgbWV0aG9kcyBwcm92aWRlZCBieSBjbGllbnQgdG8gZGlzcGF0Y2gKKyAgICAgICAgaXRz
IG1lc3NhZ2VzIHdoaWxlIEpTIGlzIHBhdXNlZChwcmV2aW91c2x5IHRoZSBtZXNzYWdlcyB3YXMg
ZGlzcGF0Y2hlZCBpbiBhIGNhbGxiYWNrCisgICAgICAgIHBhc3NlZCB0byB2OCBhbG9uZyB3aXRo
IERlYnVnRXZlbnRIYW5kbGVyKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzk1OTQKKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVn
U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRj
aERpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRj
aERpZENvbnRpbnVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNw
YXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMpOiBDaGFuZ2VkIG1ldGhvZCBzaWduYXR1cmUgdG8gYWxs
b3cKKyAgICAgICAgaW52b2NhdGlvbiBvZiBTY3JpcHREZWJ1Z0xpc3RlbmVyIG1ldGhvZHMgdGhh
dCBoYXZlIG5vbi1lbXB0eSBhcmd1bWVudCBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdERlYnVnU2VydmVyOjpyZW1vdmVMaXN0ZW5lcik6IEV4ZWN1dGlvbiBpcyByZXN1bWVkKG5l
c3RlZCBtZXNzYWdlIGxvb3AgaXMgdGVybWluYXRlZCkgd2hlbgorICAgICAgICBjb3JyZXNwb25k
aW5nIGRlYnVnZ2VyIHdpbmRvdyBjbG9zZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y29udGludWVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjpzdGVwSW50b1N0YXRlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcE92ZXJTdGF0ZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBPdXRPZkZ1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjp2OERlYnVnRXZlbnRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z0V2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaWRSZXN1bWUpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6Q2xpZW50TWVzc2FnZUxvb3A6On5DbGllbnRNZXNzYWdlTG9vcCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0Q2xpZW50TWVzc2FnZUxvb3ApOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhdXNlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHREZWJ1
Z0xpc3RlbmVyLmg6IENoYW5nZWQgZGlkUGF1c2Ugc2lnbmF0dXJlIHRvIGV4cGxpY2l0bHkgcGFz
cyBTY3JpcHRTdGF0ZQorICAgICAgICB3aGVyZSBleGVjdXRpb24gaXMgcGF1c2VkLgorCiAyMDEw
LTA1LTI0ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmNwcAppbmRleCA4ZjQ3NmI0Li45NGQ3ZTczIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdERlYnVnU2VydmVyLmNwcApAQCAtMjQ1LDExICsyNDUsMTYgQEAgSmF2YVNjcmlwdENhbGxG
cmFtZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWUoKQogICAgIHJldHVybiBt
X2N1cnJlbnRDYWxsRnJhbWUuZ2V0KCk7CiB9CiAKLVNjcmlwdFN0YXRlKiBTY3JpcHREZWJ1Z1Nl
cnZlcjo6Y3VycmVudENhbGxGcmFtZVN0YXRlKCkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
c3BhdGNoRGlkUGF1c2UoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCiB7Ci0gICAgaWYg
KCFtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fY3VycmVudENhbGxG
cmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsgICAgICAgIAor
ICAgIEFTU0VSVChtX3BhdXNlZCk7CisgICAgU2NyaXB0U3RhdGUqIHN0YXRlID0gbV9jdXJyZW50
Q2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOyAgICAg
ICAgCisgICAgbGlzdGVuZXItPmRpZFBhdXNlKHN0YXRlKTsKK30KKwordm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRDb250aW51ZShTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5l
cikKK3sKKyAgICBsaXN0ZW5lci0+ZGlkQ29udGludWUoKTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVu
ZXJzLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSkKQEAgLTMzNSw3ICszNDAsNyBAQCB2
b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoY29uc3Qg
TGlzdGVuZXJTZXQmIGxpc3RlbmVycwogICAgIFZlY3RvcjxTY3JpcHREZWJ1Z0xpc3RlbmVyKj4g
Y29weTsKICAgICBjb3B5VG9WZWN0b3IobGlzdGVuZXJzLCBjb3B5KTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIChjb3B5W2ldLT4qY2FsbGJh
Y2spKCk7CisgICAgICAgICh0aGlzLT4qY2FsbGJhY2spKGNvcHlbaV0pOwogfQogCiB2b2lkIFNj
cmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoSmF2YVNjcmlwdEV4
ZWN1dGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBQYWdlKiBwYWdlKQpAQCAtNDMxLDcgKzQzNiw3IEBA
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQoUGFnZSogcGFnZSkKICAgICBt
X3BhdXNlT25OZXh0U3RhdGVtZW50ID0gZmFsc2U7CiAgICAgbV9wYXVzZWQgPSB0cnVlOwogCi0g
ICAgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKCZTY3JpcHREZWJ1Z0xpc3RlbmVyOjpkaWRQ
YXVzZSwgcGFnZSk7CisgICAgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKCZTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZSwgcGFnZSk7CiAKICAgICBzZXRKYXZhU2NyaXB0UGF1
c2VkKHBhZ2UtPmdyb3VwKCksIHRydWUpOwogCkBAIC00NDYsNyArNDUxLDcgQEAgdm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6cGF1c2VJZk5lZWRlZChQYWdlKiBwYWdlKQogCiAgICAgbV9wYXVzZWQg
PSBmYWxzZTsKIAotICAgIGRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycygmU2NyaXB0RGVidWdM
aXN0ZW5lcjo6ZGlkQ29udGludWUsIHBhZ2UpOworICAgIGRpc3BhdGNoRnVuY3Rpb25Ub0xpc3Rl
bmVycygmU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkQ29udGludWUsIHBhZ2UpOwogfQog
CiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjYWxsRXZlbnQoY29uc3QgRGVidWdnZXJDYWxsRnJh
bWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKaW5kZXggNDc0MDU4NS4uY2Zh
ZGEyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtMzQsNyAr
MzQsNiBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRC
cmVha3BvaW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJUaW1lci5o
IgogCiAjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXIuaD4KQEAgLTg2LDEzICs4NSwxMiBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1
Z1NlcnZlcj4qID0gMCk7CiAKICAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjdXJyZW50Q2FsbEZy
YW1lKCk7Ci0gICAgU2NyaXB0U3RhdGUqIGN1cnJlbnRDYWxsRnJhbWVTdGF0ZSgpOwogCiAgICAg
dm9pZCBwYWdlQ3JlYXRlZChQYWdlKik7CiAKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoU2V0
PFNjcmlwdERlYnVnTGlzdGVuZXIqPiBMaXN0ZW5lclNldDsKLSAgICB0eXBlZGVmIHZvaWQgKFNj
cmlwdERlYnVnTGlzdGVuZXI6OipKYXZhU2NyaXB0RXhlY3V0aW9uQ2FsbGJhY2spKCk7CisgICAg
dHlwZWRlZiB2b2lkIChTY3JpcHREZWJ1Z1NlcnZlcjo6KkphdmFTY3JpcHRFeGVjdXRpb25DYWxs
YmFjaykoU2NyaXB0RGVidWdMaXN0ZW5lciopOwogCiAgICAgU2NyaXB0RGVidWdTZXJ2ZXIoKTsK
ICAgICB+U2NyaXB0RGVidWdTZXJ2ZXIoKTsKQEAgLTEwOSw2ICsxMDcsOCBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoSmF2YVNjcmlwdEV4ZWN1dGlv
bkNhbGxiYWNrLCBQYWdlKik7CiAgICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMo
Y29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgSmF2YVNjcmlwdEV4ZWN1dGlvbkNhbGxiYWNr
IGNhbGxiYWNrKTsKKyAgICB2b2lkIGRpc3BhdGNoRGlkUGF1c2UoU2NyaXB0RGVidWdMaXN0ZW5l
ciopOworICAgIHZvaWQgZGlzcGF0Y2hEaWRDb250aW51ZShTY3JpcHREZWJ1Z0xpc3RlbmVyKik7
CiAgICAgdm9pZCBkaXNwYXRjaERpZFBhcnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0
ZW5lcnMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlKTsKICAgICB2b2lkIGRpc3BhdGNo
RmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBjb25zdCBK
U0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVn
U2VydmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmlu
ZGV4IGNlMjU4ZmIuLjBjMzNiZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwCkBAIC00NCw3ICs0NCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNj
cmlwdERlYnVnU2VydmVyOjpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBTY3JpcHREZWJ1Z1Nl
cnZlcjo6c19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciA9IDA7CitzdGF0aWMgRnJhbWUqIHJl
dHJpZXZlRnJhbWUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKK3sKKyAgICBpZiAo
Y29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gVGVzdCB0aGF0
IGNvbnRleHQgaGFzIGFzc29jaWF0ZWQgZ2xvYmFsIGRvbSB3aW5kb3cgb2JqZWN0LgorICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4dC0+R2xvYmFsKCk7CisgICAgaWYg
KGdsb2JhbC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ2xvYmFsID0gVjhE
T01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4RE9NV2luZG93OjpHZXRUZW1wbGF0ZSgpLCBn
bG9iYWwpOworICAgIGlmIChnbG9iYWwuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHJldHVybiBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQpOworfQogCiBTY3JpcHRE
ZWJ1Z1NlcnZlciYgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpCiB7CkBAIC01NCw3ICs2OSw3
IEBAIFNjcmlwdERlYnVnU2VydmVyJiBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkKIAogU2Ny
aXB0RGVidWdTZXJ2ZXI6OlNjcmlwdERlYnVnU2VydmVyKCkKICAgICA6IG1fcGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZShEb250UGF1c2VPbkV4Y2VwdGlvbnMpCi0gICAgLCBtX2N1cnJlbnRDYWxsRnJh
bWVTdGF0ZSgwKQorICAgICwgbV9wYXVzZWRQYWdlKDApCiB7CiB9CiAKQEAgLTczLDggKzg4LDcg
QEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5l
ciogbGlzdGVuZXIsIFBhZ2UqIHBhZ2UpCiAgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5zaXplKCkp
IHsKICAgICAgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOwogICAgICAgICBBU1NF
UlQoIW1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPklzVW5kZWZpbmVkKCkpOwotICAgICAgICB2ODo6
RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVyMigmU2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01l
c3NhZ2UpOwotICAgICAgICB2ODo6RGVidWc6OlNldEhvc3REaXNwYXRjaEhhbmRsZXIoJlNjcmlw
dERlYnVnU2VydmVyOjpvblY4RGVidWdIb3N0RGlzcGF0Y2gsIDEwMCAvKiBtcyAqLyk7CisgICAg
ICAgIHY4OjpEZWJ1Zzo6U2V0RGVidWdFdmVudExpc3RlbmVyMigmU2NyaXB0RGVidWdTZXJ2ZXI6
OnY4RGVidWdFdmVudENhbGxiYWNrKTsKICAgICB9CiAgICAgbV9saXN0ZW5lcnNNYXAuc2V0KHBh
Z2UsIGxpc3RlbmVyKTsKICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHBh
Z2UtPm1haW5GcmFtZSgpKTsKQEAgLTk3LDE3ICsxMTEsMTQgQEAgdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2Uq
IHBhZ2UKICAgICBpZiAoIW1fbGlzdGVuZXJzTWFwLmNvbnRhaW5zKHBhZ2UpKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBpZiAobV9wYXVzZWRQYWdlID09IHBhZ2UpCisgICAgICAgIGNvbnRpbnVl
UHJvZ3JhbSgpOworCiAgICAgbV9saXN0ZW5lcnNNYXAucmVtb3ZlKHBhZ2UpOwogCi0gICAgaWYg
KG1fbGlzdGVuZXJzTWFwLmlzRW1wdHkoKSkgewotICAgICAgICB2ODo6RGVidWc6OlNldE1lc3Nh
Z2VIYW5kbGVyMigwKTsKLSAgICAgICAgdjg6OkRlYnVnOjpTZXRIb3N0RGlzcGF0Y2hIYW5kbGVy
KDApOwotICAgIH0KKyAgICBpZiAobV9saXN0ZW5lcnNNYXAuaXNFbXB0eSgpKQorICAgICAgICB2
ODo6RGVidWc6OlNldERlYnVnRXZlbnRMaXN0ZW5lcigwKTsKICAgICAvLyBGSVhNRTogUmVtb3Zl
IGFsbCBicmVha3BvaW50cyBzZXQgYnkgdGhlIGFnZW50LgotICAgIC8vIEZJWE1FOiBGb3JjZSBj
b250aW51ZSBpZiBkZXRhY2ggaGFwcGVuZWQgaW4gbmVzc3RlZCBtZXNzYWdlIGxvb3Agd2hpbGUK
LSAgICAvLyBkZWJ1Z2dlciB3YXMgcGF1c2VkIG9uIGEgYnJlYWtwb2ludChhcyBsb25nIGFzIHRo
ZXJlIGFyZSBvdGhlcgotICAgIC8vIGF0dGFjaGVkIGFnZW50cyB2OCB3aWxsIHdhaXQgZm9yIGV4
cGxpY2l0J2NvbnRpbnVlJyBtZXNzYWdlKS4KLSAgICAvLyBGSVhNRTogc2VuZCBjb250aW51ZSBj
b21tYW5kIHRvIHY4IGlmIG5lY2Vzc2FyeTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpCkBAIC0xNTIsOCArMTYzLDggQEAgdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cygpCiAgICAgdjg6OkxvY2FsPHY4OjpD
b250ZXh0PiBkZWJ1Z2dlckNvbnRleHQgPSB2ODo6RGVidWc6OkdldERlYnVnQ29udGV4dCgpOwog
ICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoZGVidWdnZXJDb250ZXh0KTsKIAot
ICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRCcmVha3BvaW50c0FjdGl2YXRlZCA9IHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2
ODo6U3RyaW5nOjpOZXcoImNsZWFyQnJlYWtwb2ludHMiKSkpOwotICAgIHY4OjpEZWJ1Zzo6Q2Fs
bChzZXRCcmVha3BvaW50c0FjdGl2YXRlZCk7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+
IGNsZWFyQnJlYWtwb2ludHMgPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVn
Z2VyU2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJjbGVhckJyZWFrcG9pbnRzIikp
KTsKKyAgICB2ODo6RGVidWc6OkNhbGwoY2xlYXJCcmVha3BvaW50cyk7CiAjZW5kaWYKIH0KIApA
QCAtMTc5LDkgKzE5MCw5IEBAIFNjcmlwdERlYnVnU2VydmVyOjpQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlIFNjcmlwdERlYnVnU2VydmVyOjpwYXVzZU9uRXhjZXB0aW9uc1N0CiAgICAgdjg6OkhhbmRs
ZVNjb3BlIHNjb3BlOwogICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkRl
YnVnOjpHZXREZWJ1Z0NvbnRleHQoKSk7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4g
Y3VycmVudENhbGxGcmFtZUZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3Qo
bV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygicGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSIpKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0g
djg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0
KHY4OjpTdHJpbmc6Ok5ldygicGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSIpKSk7CiAgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCkgfTsKLSAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gY3VycmVudENhbGxGcmFtZUZ1bmN0aW9u
LT5DYWxsKG1fZGVidWdnZXJTY3JpcHQuZ2V0KCksIDAsIGFyZ3YpOworICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiByZXN1bHQgPSBmdW5jdGlvbi0+Q2FsbChtX2RlYnVnZ2VyU2NyaXB0LmdldCgp
LCAwLCBhcmd2KTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NyaXB0RGVidWdTZXJ2ZXI6OlBh
dXNlT25FeGNlcHRpb25zU3RhdGU+KHJlc3VsdC0+SW50MzJWYWx1ZSgpKTsKICNlbHNlCiAgICAg
cmV0dXJuIERvbnRQYXVzZU9uRXhjZXB0aW9uczsKQEAgLTE5NSwxNyArMjA2LDE3IEBAIHZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSBwYXVzZU9uCiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIHY4OjpD
b250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQoKSk7
CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gY3VycmVudENhbGxGcmFtZUZ1bmN0aW9u
ID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+
R2V0KHY4OjpTdHJpbmc6Ok5ldygic2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSIpKSk7CisgICAg
djg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHNldFBhdXNlT25FeGNlcHRpb25zRnVuY3Rpb24gPSB2
ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5HZXQo
djg6OlN0cmluZzo6TmV3KCJzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIikpKTsKICAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0geyB2ODo6SW50MzI6Ok5ldyhwYXVzZU9uRXhjZXB0
aW9uc1N0YXRlKSB9OwotICAgIGN1cnJlbnRDYWxsRnJhbWVGdW5jdGlvbi0+Q2FsbChtX2RlYnVn
Z2VyU2NyaXB0LmdldCgpLCAxLCBhcmd2KTsKKyAgICBzZXRQYXVzZU9uRXhjZXB0aW9uc0Z1bmN0
aW9uLT5DYWxsKG1fZGVidWdnZXJTY3JpcHQuZ2V0KCksIDEsIGFyZ3YpOwogI2VuZGlmCiB9CiAK
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCiB7CiAjaWYgRU5BQkxF
KFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCi0gICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5
cGVcIjpcInJlcXVlc3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCJ9Iik7Ci0gICAgdjg6OkRl
YnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNo
YXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsK
KyAgICBpZiAobV9wYXVzZWRQYWdlKQorICAgICAgICBtX2NsaWVudE1lc3NhZ2VMb29wLT5xdWl0
Tm93KCk7CiAgICAgZGlkUmVzdW1lKCk7CiAjZW5kaWYKIH0KQEAgLTIxMywzNSArMjI0LDM2IEBA
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCiB2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpzdGVwSW50b1N0YXRlbWVudCgpCiB7CiAjaWYgRU5BQkxFKFY4X1NDUklQVF9E
RUJVR19TRVJWRVIpCi0gICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVl
c3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCIsXCJhcmd1bWVudHNcIjp7XCJzdGVwYWN0aW9u
XCI6XCJpblwifX0iKTsKLSAgICB2ODo6RGVidWc6OlNlbmRDb21tYW5kKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDE2X3QqPihjbWQuY2hhcmFjdGVycygpKSwgY21kLmxlbmd0aCgpLCBuZXcg
djg6OkRlYnVnOjpDbGllbnREYXRhKCkpOwotICAgIGRpZFJlc3VtZSgpOworICAgIEFTU0VSVCht
X3BhdXNlZFBhZ2UpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2
ODo6U3RyaW5nOjpOZXcoInN0ZXBJbnRvU3RhdGVtZW50IikpKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gYXJndltdID0geyBtX2V4ZWN1dGlvblN0YXRlLmdldCgpIH07CisgICAgZnVuY3Rp
b24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJndik7CisgICAgY29udGludWVQ
cm9ncmFtKCk7CiAjZW5kaWYKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcE92ZXJT
dGF0ZW1lbnQoKQogewogI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQotICAgIFN0
cmluZyBjbWQoIntcInNlcVwiOjEsXCJ0eXBlXCI6XCJyZXF1ZXN0XCIsXCJjb21tYW5kXCI6XCJj
b250aW51ZVwiLFwiYXJndW1lbnRzXCI6e1wic3RlcGFjdGlvblwiOlwibmV4dFwifX0iKTsKLSAg
ICB2ODo6RGVidWc6OlNlbmRDb21tYW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3Qq
PihjbWQuY2hhcmFjdGVycygpKSwgY21kLmxlbmd0aCgpLCBuZXcgdjg6OkRlYnVnOjpDbGllbnRE
YXRhKCkpOwotICAgIGRpZFJlc3VtZSgpOworICAgIEFTU0VSVChtX3BhdXNlZFBhZ2UpOworICAg
IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rp
b24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInN0
ZXBPdmVyU3RhdGVtZW50IikpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0g
eyBtX2V4ZWN1dGlvblN0YXRlLmdldCgpIH07CisgICAgZnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dl
clNjcmlwdC5nZXQoKSwgMSwgYXJndik7CisgICAgY29udGludWVQcm9ncmFtKCk7CiAjZW5kaWYK
IH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcE91dE9mRnVuY3Rpb24oKQogewogI2lm
IEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQotICAgIFN0cmluZyBjbWQoIntcInNlcVwi
OjEsXCJ0eXBlXCI6XCJyZXF1ZXN0XCIsXCJjb21tYW5kXCI6XCJjb250aW51ZVwiLFwiYXJndW1l
bnRzXCI6e1wic3RlcGFjdGlvblwiOlwib3V0XCJ9fSIpOwotICAgIHY4OjpEZWJ1Zzo6U2VuZENv
bW1hbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGNtZC5jaGFyYWN0ZXJzKCkp
LCBjbWQubGVuZ3RoKCksIG5ldyB2ODo6RGVidWc6OkNsaWVudERhdGEoKSk7Ci0gICAgZGlkUmVz
dW1lKCk7CisgICAgQVNTRVJUKG1fcGF1c2VkUGFnZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVu
Y3Rpb24+IGZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dl
clNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygic3RlcE91dE9mRnVuY3Rpb24iKSkp
OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7IG1fZXhlY3V0aW9uU3RhdGUu
Z2V0KCkgfTsKKyAgICBmdW5jdGlvbi0+Q2FsbChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLCAxLCBh
cmd2KTsKKyAgICBjb250aW51ZVByb2dyYW0oKTsKICNlbmRpZgogfQogCi1TY3JpcHRTdGF0ZSog
U2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVTdGF0ZSgpCi17Ci0gICAgcmV0dXJu
IG1fY3VycmVudENhbGxGcmFtZVN0YXRlOwotfQotCiBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxs
RnJhbWU+IFNjcmlwdERlYnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lKCkKIHsKICAgICBpZiAo
IW1fY3VycmVudENhbGxGcmFtZSkgewpAQCAtMjUzLDgzICsyNjUsNDggQEAgUGFzc1JlZlB0cjxK
YXZhU2NyaXB0Q2FsbEZyYW1lPiBTY3JpcHREZWJ1Z1NlcnZlcjo6Y3VycmVudENhbGxGcmFtZSgp
CiAgICAgcmV0dXJuIG1fY3VycmVudENhbGxGcmFtZTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6b25WOERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3NhZ2UmIG1lc3NhZ2Up
Ci17Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmhhbmRsZVY4RGVidWdNZXNzYWdl
KG1lc3NhZ2UpOwotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpvblY4RGVidWdIb3N0RGlz
cGF0Y2goKQotewotICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5oYW5kbGVWOERlYnVn
SG9zdERpc3BhdGNoKCk7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZVY4RGVi
dWdIb3N0RGlzcGF0Y2goKQorI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQordm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6djhEZWJ1Z0V2ZW50Q2FsbGJhY2soY29uc3Qgdjg6OkRlYnVn
OjpFdmVudERldGFpbHMmIGV2ZW50RGV0YWlscykKIHsKLSAgICBpZiAoIXNfbWVzc2FnZUxvb3BE
aXNwYXRjaEhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxXZWJDb3JlOjpQ
YWdlKj4gcGFnZXM7Ci0gICAgZm9yIChMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9saXN0
ZW5lcnNNYXAuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnNNYXAuZW5kKCk7ICsraXQpCi0gICAg
ICAgIHBhZ2VzLmFwcGVuZChpdC0+Zmlyc3QpOwotICAgIAotICAgIHNfbWVzc2FnZUxvb3BEaXNw
YXRjaEhhbmRsZXIocGFnZXMpOworICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5oYW5k
bGVWOERlYnVnRXZlbnQoZXZlbnREZXRhaWxzKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6aGFuZGxlVjhEZWJ1Z01lc3NhZ2UoY29uc3Qgdjg6OkRlYnVnOjpNZXNzYWdlJiBtZXNzYWdl
KQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z0V2ZW50KGNvbnN0IHY4OjpE
ZWJ1Zzo6RXZlbnREZXRhaWxzJiBldmVudERldGFpbHMpCiB7Ci0gICAgdjg6OkhhbmRsZVNjb3Bl
IHNjb3BlOwotCi0gICAgaWYgKCFtZXNzYWdlLklzRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gSWdub3JlIHVuc3VwcG9ydGVkIGV2ZW50IHR5cGVzLgotICAgIGlmIChtZXNzYWdl
LkdldEV2ZW50KCkgIT0gdjg6OkFmdGVyQ29tcGlsZSAmJiBtZXNzYWdlLkdldEV2ZW50KCkgIT0g
djg6OkJyZWFrICYmIG1lc3NhZ2UuR2V0RXZlbnQoKSAhPSB2ODo6RXhjZXB0aW9uKQorICAgIHY4
OjpEZWJ1Z0V2ZW50IGV2ZW50ID0gZXZlbnREZXRhaWxzLkdldEV2ZW50KCk7CisgICAgaWYgKGV2
ZW50ICE9IHY4OjpCcmVhayAmJiBldmVudCAhPSB2ODo6RXhjZXB0aW9uICYmIGV2ZW50ICE9IHY4
OjpBZnRlckNvbXBpbGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQgPSBtZXNzYWdlLkdldEV2ZW50Q29udGV4dCgpOwotICAgIC8vIElmIHRo
ZSBjb250ZXh0IGlzIGZyb20gb25lIG9mIHRoZSBpbnBlY3RlZCB0YWJzIGl0IHNob3VsZCBoYXZl
IGl0cyBjb250ZXh0Ci0gICAgLy8gZGF0YS4gU2tpcCBldmVudHMgZnJvbSB1bmtub3duIGNvbnRl
eHRzLgotICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGV2ZW50Q29udGV4dCA9IGV2ZW50RGV0YWlscy5HZXRFdmVu
dENvbnRleHQoKTsKKyAgICBBU1NFUlQoIWV2ZW50Q29udGV4dC5Jc0VtcHR5KCkpOwogCi0gICAg
Ly8gVGVzdCB0aGF0IGNvbnRleHQgaGFzIGFzc29jaWF0ZWQgZ2xvYmFsIGRvbSB3aW5kb3cgb2Jq
ZWN0LgotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4dC0+R2xvYmFs
KCk7Ci0gICAgaWYgKGdsb2JhbC5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGds
b2JhbCA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOERPTVdpbmRvdzo6R2V0VGVt
cGxhdGUoKSwgZ2xvYmFsKTsKLSAgICBpZiAoZ2xvYmFsLklzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAgRnJhbWUqIGZyYW1lID0gVjhQ
cm94eTo6cmV0cmlldmVGcmFtZShjb250ZXh0KTsKKyAgICBGcmFtZSogZnJhbWUgPSByZXRyaWV2
ZUZyYW1lKGV2ZW50Q29udGV4dCk7CiAgICAgaWYgKGZyYW1lKSB7CiAgICAgICAgIFNjcmlwdERl
YnVnTGlzdGVuZXIqIGxpc3RlbmVyID0gbV9saXN0ZW5lcnNNYXAuZ2V0KGZyYW1lLT5wYWdlKCkp
OwogICAgICAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlLkdldEV2
ZW50KCkgPT0gdjg6OkFmdGVyQ29tcGlsZSkgewotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOworICAgICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgICAgICAgICAgaWYg
KGV2ZW50ID09IHY4OjpBZnRlckNvbXBpbGUpIHsKICAgICAgICAgICAgICAgICB2ODo6Q29udGV4
dDo6U2NvcGUgY29udGV4dFNjb3BlKHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCkpOwotICAg
ICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBhcmdzID0gdjg6Ok9iamVjdDo6TmV3
KCk7Ci0gICAgICAgICAgICAgICAgYXJncy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiZXZlbnREYXRh
IiksIG1lc3NhZ2UuR2V0RXZlbnREYXRhKCkpOwogICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8
djg6OkZ1bmN0aW9uPiBvbkFmdGVyQ29tcGlsZUZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5j
dGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygi
Z2V0QWZ0ZXJDb21waWxlU2NyaXB0IikpKTsKLSAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gYXJndltdID0geyBtZXNzYWdlLkdldEV4ZWN1dGlvblN0YXRlKCksIGFyZ3MgfTsK
LSAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBvbkFmdGVyQ29t
cGlsZUZ1bmN0aW9uLT5DYWxsKG1fZGVidWdnZXJTY3JpcHQuZ2V0KCksIDIsIGFyZ3YpOworICAg
ICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7IGV2ZW50RGV0YWls
cy5HZXRFdmVudERhdGEoKSB9OworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSA9IG9uQWZ0ZXJDb21waWxlRnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5n
ZXQoKSwgMSwgYXJndik7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgp
KTsKICAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOwogICAgICAgICAgICAgICAgIGRpc3BhdGNo
RGlkUGFyc2VTb3VyY2UobGlzdGVuZXIsIG9iamVjdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KG1lc3NhZ2UuR2V0RXZlbnQoKSA9PSB2ODo6QnJlYWsgfHwgbWVzc2FnZS5HZXRFdmVudCgpID09
IHY4OjpFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBtX2V4ZWN1dGlvblN0YXRlLnNldChtZXNzYWdlLkdldEV4ZWN1dGlvblN0YXRl
KCkpOwotICAgICAgICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gbWFpbldvcmxk
U2NyaXB0U3RhdGUoZnJhbWUpOwotICAgICAgICAgICAgICAgIGxpc3RlbmVyLT5kaWRQYXVzZSgp
OwotICAgICAgICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gMDsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gdjg6OkJyZWFrIHx8IGV2ZW50ID09IHY4OjpFeGNlcHRp
b24pIHsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1dGlvblN0YXRlLnNldChldmVudERldGFpbHMu
R2V0RXhlY3V0aW9uU3RhdGUoKSk7CisgICAgICAgICAgICAgICAgbV9wYXVzZWRQYWdlID0gZnJh
bWUtPnBhZ2UoKTsKKyAgICAgICAgICAgICAgICBTY3JpcHRTdGF0ZSogY3VycmVudENhbGxGcmFt
ZVN0YXRlID0gbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpOworICAgICAgICAgICAgICAgIGxp
c3RlbmVyLT5kaWRQYXVzZShjdXJyZW50Q2FsbEZyYW1lU3RhdGUpOworCisgICAgICAgICAgICAg
ICAgLy8gV2FpdCBmb3IgY29udGludWUgb3Igc3RlcCBjb21tYW5kLgorICAgICAgICAgICAgICAg
IG1fY2xpZW50TWVzc2FnZUxvb3AtPnJ1bihtX3BhdXNlZFBhZ2UpOworICAgICAgICAgICAgICAg
IEFTU0VSVCghbV9wYXVzZWRQYWdlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
LQotICAgIGlmICghaGFuZGxlZCAmJiAhbWVzc2FnZS5XaWxsU3RhcnRSdW5uaW5nKCkpCi0gICAg
ICAgIGNvbnRpbnVlUHJvZ3JhbSgpOwogfQorI2VuZGlmCiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OmRpc3BhdGNoRGlkUGFyc2VTb3VyY2UoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIs
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQogewpAQCAtMzU0LDYgKzMzMSw3IEBAIHZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlc3VtZSgpCiB7CiAgICAgbV9jdXJyZW50Q2FsbEZy
YW1lLmNsZWFyKCk7CiAgICAgbV9leGVjdXRpb25TdGF0ZS5jbGVhcigpOworICAgIG1fcGF1c2Vk
UGFnZSA9IDA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCA2ZWYwYWZkLi43YzhjNWNjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC0zNiwxMiArMzYsMTIgQEAKICNpbmNsdWRl
ICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlICJTY3JpcHRCcmVha3BvaW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx2OC1k
ZWJ1Zy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC03NywxNSArNzcsMTggQEAgcHVibGljOgogICAgIHZvaWQgcmVjb21waWxlQWxsSlNG
dW5jdGlvbnNTb29uKCkgeyB9CiAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1l
cjxTY3JpcHREZWJ1Z1NlcnZlcj4qID0gMCkgeyB9CiAKLSAgICBTY3JpcHRTdGF0ZSogY3VycmVu
dENhbGxGcmFtZVN0YXRlKCk7Ci0KICAgICB2b2lkIHBhZ2VDcmVhdGVkKFBhZ2UqKSB7IH0KIAog
ICAgIC8vIHY4LXNwZWNpZmljIG1ldGhvZHMuCiAgICAgdm9pZCBzZXREZWJ1Z2dlclNjcmlwdFNv
dXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdFNvdXJjZSk7CiAKLSAgICB0eXBlZGVmIHZvaWQgKCpN
ZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcikoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlBhZ2UqPiYp
OwotICAgIHN0YXRpYyB2b2lkIHNldE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKE1lc3NhZ2VM
b29wRGlzcGF0Y2hIYW5kbGVyIG1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKSB7IHNfbWVzc2Fn
ZUxvb3BEaXNwYXRjaEhhbmRsZXIgPSBtZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcjsgfQorICAg
IGNsYXNzIENsaWVudE1lc3NhZ2VMb29wIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
fkNsaWVudE1lc3NhZ2VMb29wKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBydW4oUGFnZSop
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHF1aXROb3coKSA9IDA7CisgICAgfTsKKyAgICB2
b2lkIHNldENsaWVudE1lc3NhZ2VMb29wKFBhc3NPd25QdHI8Q2xpZW50TWVzc2FnZUxvb3A+IGNs
aWVudE1lc3NhZ2VMb29wKSB7IG1fY2xpZW50TWVzc2FnZUxvb3AgPSBjbGllbnRNZXNzYWdlTG9v
cDsgfQogCiAgICAgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjdXJyZW50Q2FsbEZy
YW1lKCk7CiAKQEAgLTkzLDE0ICs5NiwxMyBAQCBwcml2YXRlOgogICAgIFNjcmlwdERlYnVnU2Vy
dmVyKCk7CiAgICAgflNjcmlwdERlYnVnU2VydmVyKCkgeyB9CiAKLSAgICBzdGF0aWMgdm9pZCBv
blY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSk7Ci0gICAg
c3RhdGljIHZvaWQgb25WOERlYnVnSG9zdERpc3BhdGNoKCk7Ci0KLSAgICB2b2lkIGhhbmRsZVY4
RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSk7Ci0gICAgdm9p
ZCBoYW5kbGVWOERlYnVnSG9zdERpc3BhdGNoKCk7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJV
R19TRVJWRVIpCisgICAgc3RhdGljIHZvaWQgdjhEZWJ1Z0V2ZW50Q2FsbGJhY2soY29uc3Qgdjg6
OkRlYnVnOjpFdmVudERldGFpbHMmIGV2ZW50RGV0YWlscyk7CisgICAgdm9pZCBoYW5kbGVWOERl
YnVnRXZlbnQoY29uc3Qgdjg6OkRlYnVnOjpFdmVudERldGFpbHMmIGV2ZW50RGV0YWlscyk7Cisj
ZW5kaWYKIAogICAgIHZvaWQgZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShTY3JpcHREZWJ1Z0xpc3Rl
bmVyKiBsaXN0ZW5lciwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBzb3VyY2VPYmplY3QpOwotICAg
IAorCiAgICAgdm9pZCBlbnN1cmVEZWJ1Z2dlclNjcmlwdENvbXBpbGVkKCk7CiAgICAgdm9pZCBk
aWRSZXN1bWUoKTsKIApAQCAtMTA5LDExICsxMTEsMTAgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
bV9kZWJ1Z2dlclNjcmlwdFNvdXJjZTsKICAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIG1fcGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZTsKICAgICBPd25IYW5kbGU8djg6Ok9iamVjdD4gbV9kZWJ1Z2dl
clNjcmlwdDsKLSAgICBTY3JpcHRTdGF0ZSogbV9jdXJyZW50Q2FsbEZyYW1lU3RhdGU7CiAgICAg
UmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IG1fY3VycmVudENhbGxGcmFtZTsKICAgICBPd25I
YW5kbGU8djg6Ok9iamVjdD4gbV9leGVjdXRpb25TdGF0ZTsKLQotICAgIHN0YXRpYyBNZXNzYWdl
TG9vcERpc3BhdGNoSGFuZGxlciBzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyOworICAgIE93
blB0cjxDbGllbnRNZXNzYWdlTG9vcD4gbV9jbGllbnRNZXNzYWdlTG9vcDsKKyAgICBQYWdlKiBt
X3BhdXNlZFBhZ2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDNiMzZhNGEuLmI0NDQxZDYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xNjI4LDkgKzE2Mjgs
OCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZAogICAgIG1fZnJvbnRlbmQtPmZhaWxlZFRvUGFy
c2VTY3JpcHRTb3VyY2UodXJsLCBkYXRhLCBmaXJzdExpbmUsIGVycm9yTGluZSwgZXJyb3JNZXNz
YWdlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXVzZSgpCit2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhdXNlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsK
LSAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVk
KCkuY3VycmVudENhbGxGcmFtZVN0YXRlKCk7CiAgICAgQVNTRVJUKHNjcmlwdFN0YXRlKTsKICAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5p
bmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gY2FsbEZyYW1lcyA9IGluamVjdGVkU2NyaXB0LmNhbGxGcmFtZXMoKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBhOTBiMjk5Li45Y2I5ZTM0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0yNDEsNyArMjQxLDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBm
aXJzdExpbmUpOwogICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxp
bmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1
c2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoU2NyaXB0U3RhdGUqKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ29udGludWUoKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRE
ZWJ1Z0xpc3RlbmVyLmgKaW5kZXggNWE4NWRhMS4uYzY2OWY1ZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L1NjcmlwdERlYnVnTGlzdGVuZXIuaApAQCAtMzIsNiArMzIsOCBAQAogCiAjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiAKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFN0cmluZzsKQEAgLTQyLDcgKzQ0LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgIHNvdXJjZUlE
LCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2Uo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKFNjcmlwdFN0YXRlKikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZSgpID0gMDsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDA3
ZTZlZGIuLjUzNzFiMjggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEwLTA1LTI0
ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNjcmlwdERlYnVnU2VydmVyIGlzIG5v
dyBpbXBsZW1lbnRlZCBhcyBEZWJ1Z0V2ZW50TGlzdGVuZXIgd2hpY2ggbWVhbnMgaXQgZG9lc24n
dAorICAgICAgICBkZXBlbmQgb24gdjggZGVidWdnaW5nIHByb3RvY29sLCBpbnN0ZWFkIGl0IHVz
ZXMgRXhlY1N0YXRlIHRvIGNvbGxlY3QgZGVidWdnaW5nCisgICAgICAgIGluZm8gYW5kIHBhc3Mg
aXQgdG8gdGhlIGxpc3RlbmVycy4KKworICAgICAgICBOZXcgaW1wbGVtZW50YXRpb24gb2YgU2Ny
aXB0RGVidWdTZXJ2ZXIgdXNlcyBtZXRob2RzIHByb3ZpZGVkIGJ5IGNsaWVudCB0byBkaXNwYXRj
aAorICAgICAgICBpdHMgbWVzc2FnZXMgd2hpbGUgSlMgaXMgcGF1c2VkKHByZXZpb3VzbHkgdGhl
IG1lc3NhZ2VzIHdhcyBkaXNwYXRjaGVkIGluIGEgY2FsbGJhY2sKKyAgICAgICAgcGFzc2VkIHRv
IHY4IGFsb25nIHdpdGggRGVidWdFdmVudEhhbmRsZXIpLgorCisgICAgICAgIFBhdXNlIGNvbW1h
bmQgaXMgZGlzcGF0Y2hlZCBvbiBJTyB0aHJlYWQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NTk0CisKKyAgICAgICAgKiBwdWJsaWMvV2ViRGV2
VG9vbHNBZ2VudENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50Q2xp
ZW50OjpDbGllbnRNZXNzYWdlTG9vcDo6fkNsaWVudE1lc3NhZ2VMb29wKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRGV2VG9vbHNBZ2VudENsaWVudDo6Y3JlYXRlQ2xpZW50TWVzc2FnZUxvb3ApOiBS
ZXR1cm5zIGFuIG9iamVjdCB0aGF0IGFsbG93cyB0byBydW4KKyAgICAgICAgbmVzdGVkIGNsaWVu
dCBtZXNzYWdlIGxvb3Agd2hpbGUgc2NyaXB0IGV4ZWN1dGlvbiBpcyBwYXVzZWQgb24gYSBicmVh
a3BvaW50LgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFu
ZGxlcik6CisgICAgICAgICogc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmg6CisgICAgICAgICog
c3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6On5XZWJEZXZUb29sc0FnZW50SW1wbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjphdHRhY2gpOgorICAgICAg
ICAqIHNyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qczoKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29u
c3RydWN0b3IuRGVidWdnZXJTY3JpcHQuZ2V0QWZ0ZXJDb21waWxlU2NyaXB0KToKKyAgICAgICAg
KGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuc3RlcEludG9TdGF0ZW1l
bnQpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5z
dGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRl
YnVnZ2VyU2NyaXB0LnN0ZXBPdXRPZkZ1bmN0aW9uKToKKyAgICAgICAgKiBzcmMvanMvSW5zcGVj
dG9yQ29udHJvbGxlckltcGwuanM6CisgICAgICAgIChkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5k
SW1wbCk6CisgICAgICAgIChlbHNlLmRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3Rv
dHlwZS5wYXVzZUluRGVidWdnZXIpOiBQYXVzZSBjb21tYW5kIHNob3VsZCBiZSBoYW5kbGVkIG9u
IElPCisgICAgICAgIHRocmVhZCBzbyB0aGF0IHNjcmlwdCBjYW4gYmUgcGF1c2VkIGV2ZW4gaWYg
aXQncyBpbiBhbiBpbmZpbml0ZSBsb29wLgorCiAyMDEwLTA1LTIxICBUb255IENoYW5nICA8dG9u
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGV2VG9vbHNBZ2VudENsaWVudC5oIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50LmgKaW5kZXggZDc4
YTZmMS4uNjc5OTBhZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZU
b29sc0FnZW50Q2xpZW50LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29s
c0FnZW50Q2xpZW50LmgKQEAgLTU2LDYgKzU2LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdl
YkNTdHJpbmcgaW5qZWN0ZWRTY3JpcHRTb3VyY2UoKSB7IHJldHVybiBXZWJDU3RyaW5nKCk7IH0K
ICAgICB2aXJ0dWFsIFdlYkNTdHJpbmcgaW5qZWN0ZWRTY3JpcHREaXNwYXRjaGVyU291cmNlKCkg
eyByZXR1cm4gV2ViQ1N0cmluZygpOyB9CiAKKyAgICBjbGFzcyBDbGllbnRNZXNzYWdlTG9vcCB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5DbGllbnRNZXNzYWdlTG9vcCgpIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcXVp
dE5vdygpID0gMDsKKyAgICB9OworICAgIHZpcnR1YWwgQ2xpZW50TWVzc2FnZUxvb3AqIGNyZWF0
ZUNsaWVudE1lc3NhZ2VMb29wKCkgeyByZXR1cm4gMDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgfldl
YkRldlRvb2xzQWdlbnRDbGllbnQoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVi
dWdnZXJBZ2VudE1hbmFnZXIuY3BwCmluZGV4IGQzZjdmZWEuLmUxNGNmNjQgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuY3BwCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuY3BwCkBAIC03Myw0MiArNzMsNiBA
QCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UKIAogCi12b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2Vy
Ojpob3N0RGlzcGF0Y2hIYW5kbGVyKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpQYWdlKj4mIHBhZ2Vz
KQotewotICAgIGlmICghc19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKHNfaW5Ib3N0RGlzcGF0Y2hIYW5kbGVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzX2luSG9zdERpc3BhdGNoSGFuZGxlciA9IHRydWU7Ci0KLSAgICBWZWN0b3I8V2Vi
Vmlld0ltcGwqPiB2aWV3czsKLSAgICAvLyAxLiBEaXNhYmxlIGFjdGl2ZSBvYmplY3RzIGFuZCBp
bnB1dCBldmVudHMuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWdlcy5zaXplKCk7IGkr
KykgewotICAgICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gcGFnZXNbaV07Ci0gICAgICAgIFdl
YlZpZXdJbXBsKiB2aWV3ID0gV2ViVmlld0ltcGw6OmZyb21QYWdlKHBhZ2UpOwotICAgICAgICBz
X3BhZ2VEZWZlcnJlcnMuc2V0KHZpZXcgLCBuZXcgV2ViQ29yZTo6UGFnZUdyb3VwTG9hZERlZmVy
cmVyKHBhZ2UsIHRydWUpKTsKLSAgICAgICAgdmlld3MuYXBwZW5kKHZpZXcpOwotICAgICAgICB2
aWV3LT5zZXRJZ25vcmVJbnB1dEV2ZW50cyh0cnVlKTsKLSAgICB9Ci0KLSAgICAvLyAyLiBQcm9j
ZXNzIG1lc3NhZ2VzLgotICAgIHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoKTsKLQotICAg
IC8vIDMuIEJyaW5nIHRoaW5ncyBiYWNrLgotICAgIGZvciAoVmVjdG9yPFdlYlZpZXdJbXBsKj46
Oml0ZXJhdG9yIGl0ID0gdmlld3MuYmVnaW4oKTsgaXQgIT0gdmlld3MuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgaWYgKHNfcGFnZURlZmVycmVycy5jb250YWlucygqaXQpKSB7Ci0gICAgICAgICAg
ICAvLyBUaGUgdmlldyB3YXMgbm90IGNsb3NlZCBkdXJpbmcgdGhlIGRpc3BhdGNoLgotICAgICAg
ICAgICAgKCppdCktPnNldElnbm9yZUlucHV0RXZlbnRzKGZhbHNlKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBkZWxldGVBbGxWYWx1ZXMoc19wYWdlRGVmZXJyZXJzKTsKLSAgICBzX3BhZ2VEZWZl
cnJlcnMuY2xlYXIoKTsKLQotICAgIHNfaW5Ib3N0RGlzcGF0Y2hIYW5kbGVyID0gZmFsc2U7Ci19
Ci0KIHZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnSG9zdERpc3BhdGNoSGFuZGxlcigp
CiB7CiAgICAgaWYgKCFzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyIHx8ICFzX2F0dGFjaGVk
QWdlbnRzTWFwKQpAQCAtMjkyLDcgKzI1Niw2IEBAIHZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6
OmV4ZWN1dGVEZWJ1Z2dlckNvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBpbnQgY2FsCiB2
b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihX
ZWJEZXZUb29sc0FnZW50OjpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBoYW5kbGVyKQogewog
ICAgIHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgPSBoYW5kbGVyOwotICAgIFdlYkNvcmU6
OlNjcmlwdERlYnVnU2VydmVyOjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihEZWJ1Z2dl
ckFnZW50TWFuYWdlcjo6aG9zdERpc3BhdGNoSGFuZGxlcik7CiB9CiAKIHZvaWQgRGVidWdnZXJB
Z2VudE1hbmFnZXI6OnNldEhvc3RJZChXZWJGcmFtZUltcGwqIHdlYmZyYW1lLCBpbnQgaG9zdElk
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5o
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5oCmluZGV4IGE4YmM3
YTMuLjA1MWYzZTIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2Vu
dE1hbmFnZXIuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2Vy
LmgKQEAgLTEwMCw3ICsxMDAsNiBAQCBwcml2YXRlOgogICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2Vy
KCk7CiAgICAgfkRlYnVnZ2VyQWdlbnRNYW5hZ2VyKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBob3N0
RGlzcGF0Y2hIYW5kbGVyKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpQYWdlKj4mKTsKICAgICBzdGF0
aWMgdm9pZCBkZWJ1Z0hvc3REaXNwYXRjaEhhbmRsZXIoKTsKICAgICBzdGF0aWMgdm9pZCBvblY4
RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSk7CiAgICAgc3Rh
dGljIHZvaWQgc2VuZENvbW1hbmRUb1Y4KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgY21kLApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAppbmRleCAwOTY5ZDM3
Li5hNjBjNGYzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdl
bnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBs
LmNwcApAQCAtNDMsMTEgKzQzLDEzIEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIK
ICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91
cC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJBZ2Vu
dEltcGwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlNjcmlw
dERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2Ny
aXB0U3RhdGUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgpAQCAtMTI5LDYgKzEzMSw4MCBA
QCBwdWJsaWM6CiAgICAgfQogfTsKIAorY2xhc3MgQ2xpZW50TWVzc2FnZUxvb3BBZGFwdGVyIDog
cHVibGljIFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpDbGllbnRNZXNzYWdlTG9vcCB7Citw
dWJsaWM6CisgICAgc3RhdGljIHZvaWQgZW5zdXJlQ2xpZW50TWVzc2FnZUxvb3BDcmVhdGVkKFdl
YkRldlRvb2xzQWdlbnRDbGllbnQqIGNsaWVudCkgeworICAgICAgICBpZiAoc19pbnN0YW5jZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc19pbnN0YW5jZSA9IG5ldyBDbGllbnRNZXNz
YWdlTG9vcEFkYXB0ZXIoY2xpZW50LT5jcmVhdGVDbGllbnRNZXNzYWdlTG9vcCgpKTsKKyAgICAg
ICAgV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldENsaWVudE1lc3NhZ2VM
b29wKHNfaW5zdGFuY2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGluc3BlY3RlZFZpZXdD
bG9zZWQoV2ViVmlld0ltcGwqIHZpZXcpIHsKKyAgICAgICAgc19pbnN0YW5jZS0+bV9mcm96ZW5W
aWV3cy5yZW1vdmUodmlldyk7CisgICAgfQorCitwcml2YXRlOgorICAgIENsaWVudE1lc3NhZ2VM
b29wQWRhcHRlcihQYXNzT3duUHRyPFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudENsaWVudDo6Q2xp
ZW50TWVzc2FnZUxvb3A+IG1lc3NhZ2VMb29wKQorICAgICAgICA6IG1fcnVubmluZyhmYWxzZSkK
KyAgICAgICAgLCBtX21lc3NhZ2VMb29wKG1lc3NhZ2VMb29wKSB7IH0KKworCisgICAgdmlydHVh
bCB2b2lkIHJ1bihQYWdlKiBwYWdlKQorICAgIHsKKyAgICAgICAgaWYgKG1fcnVubmluZykKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9ydW5uaW5nID0gdHJ1ZTsKKworICAgICAgICBW
ZWN0b3I8V2ViVmlld0ltcGwqPiB2aWV3czsKKworICAgICAgICAvLyAxLiBEaXNhYmxlIGlucHV0
IGV2ZW50cy4KKyAgICAgICAgSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9ICBw
YWdlLT5ncm91cCgpLnBhZ2VzKCkuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxQYWdlKj46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gIHBhZ2UtPmdyb3VwKCkucGFnZXMoKS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFdlYlZpZXdJbXBsKiB2aWV3ID0gV2ViVmlld0lt
cGw6OmZyb21QYWdlKCppdCk7CisgICAgICAgICAgICBtX2Zyb3plblZpZXdzLmFkZCh2aWV3KTsK
KyAgICAgICAgICAgIHZpZXdzLmFwcGVuZCh2aWV3KTsKKyAgICAgICAgICAgIHZpZXctPnNldEln
bm9yZUlucHV0RXZlbnRzKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gMi4gRGlzYWJs
ZSBhY3RpdmUgb2JqZWN0cworICAgICAgICBXZWJWaWV3Ojp3aWxsRW50ZXJNb2RhbExvb3AoKTsK
KworICAgICAgICAvLyAzLiBQcm9jZXNzIG1lc3NhZ2VzIHVudGlsIHF1aXROb3cgaXMgY2FsbGVk
LgorICAgICAgICBtX21lc3NhZ2VMb29wLT5ydW4oKTsKKworICAgICAgICAvLyA0LiBSZXN1bWUg
YWN0aXZlIG9iamVjdHMKKyAgICAgICAgV2ViVmlldzo6ZGlkRXhpdE1vZGFsTG9vcCgpOworCisg
ICAgICAgIC8vIDUuIFJlc3VtZSBpbnB1dCBldmVudHMuCisgICAgICAgIGZvciAoVmVjdG9yPFdl
YlZpZXdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gdmlld3MuYmVnaW4oKTsgaXQgIT0gdmlld3MuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChtX2Zyb3plblZpZXdzLmNvbnRhaW5zKCppdCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdmlldyB3YXMgbm90IGNsb3NlZCBkdXJpbmcgdGhl
IGRpc3BhdGNoLgorICAgICAgICAgICAgICAgICgqaXQpLT5zZXRJZ25vcmVJbnB1dEV2ZW50cyhm
YWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA2LiBBbGwgdmll
d3MgaGF2ZSBiZWVuIHJlc3VtZWQsIGNsZWFyIHRoZSBzZXQuCisgICAgICAgIG1fZnJvemVuVmll
d3MuY2xlYXIoKTsKKworICAgICAgICBtX3J1bm5pbmcgPSBmYWxzZTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcXVpdE5vdygpCisgICAgeworICAgICAgICBtX21lc3NhZ2VMb29wLT5xdWl0
Tm93KCk7CisgICAgfQorCisgICAgYm9vbCBtX3J1bm5pbmc7CisgICAgT3duUHRyPFdlYktpdDo6
V2ViRGV2VG9vbHNBZ2VudENsaWVudDo6Q2xpZW50TWVzc2FnZUxvb3A+IG1fbWVzc2FnZUxvb3A7
CisgICAgdHlwZWRlZiBIYXNoU2V0PFdlYlZpZXdJbXBsKj4gRnJvemVuVmlld3NTZXQ7CisgICAg
RnJvemVuVmlld3NTZXQgbV9mcm96ZW5WaWV3czsKKyAgICBzdGF0aWMgQ2xpZW50TWVzc2FnZUxv
b3BBZGFwdGVyKiBzX2luc3RhbmNlOworCit9OworCitDbGllbnRNZXNzYWdlTG9vcEFkYXB0ZXIq
IENsaWVudE1lc3NhZ2VMb29wQWRhcHRlcjo6c19pbnN0YW5jZSA9IDA7CisKIH0gLy8gIG5hbWVz
cGFjZQogCiBXZWJEZXZUb29sc0FnZW50SW1wbDo6V2ViRGV2VG9vbHNBZ2VudEltcGwoCkBAIC0x
NDksNiArMjI1LDcgQEAgV2ViRGV2VG9vbHNBZ2VudEltcGw6OldlYkRldlRvb2xzQWdlbnRJbXBs
KAogV2ViRGV2VG9vbHNBZ2VudEltcGw6On5XZWJEZXZUb29sc0FnZW50SW1wbCgpCiB7CiAgICAg
RGVidWdnZXJBZ2VudE1hbmFnZXI6Om9uV2ViVmlld0Nsb3NlZChtX3dlYlZpZXdJbXBsKTsKKyAg
ICBDbGllbnRNZXNzYWdlTG9vcEFkYXB0ZXI6Omluc3BlY3RlZFZpZXdDbG9zZWQobV93ZWJWaWV3
SW1wbCk7CiAgICAgZGlzcG9zZVV0aWxpdHlDb250ZXh0KCk7CiB9CiAKQEAgLTE2NCw2ICsyNDEs
MTEgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6YXR0YWNoKCkKIHsKICAgICBpZiAobV9h
dHRhY2hlZCkKICAgICAgICAgcmV0dXJuOworCisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19T
RVJWRVIpCisgICAgQ2xpZW50TWVzc2FnZUxvb3BBZGFwdGVyOjplbnN1cmVDbGllbnRNZXNzYWdl
TG9vcENyZWF0ZWQobV9jbGllbnQpOworI2VuZGlmCisKICAgICBtX2RlYnVnZ2VyQWdlbnRJbXBs
LnNldCgKICAgICAgICAgbmV3IERlYnVnZ2VyQWdlbnRJbXBsKG1fd2ViVmlld0ltcGwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnREZWxlZ2F0ZVN0dWIuZ2V0
KCksCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2NyaXB0Lmpz
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qcwppbmRleCA3YzRkMTI2
Li43ZTViNDMwIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2Ny
aXB0LmpzCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMKQEAg
LTQzLDkgKzQzLDkgQEAgRGVidWdnZXJTY3JpcHQuX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPSBE
ZWJ1Z2dlclNjcmlwdC5QYXVzZU9uRXhjZXB0aW9uc1N0YXRlLkQKIERlYnVnLmNsZWFyQnJlYWtP
bkV4Y2VwdGlvbigpOwogRGVidWcuY2xlYXJCcmVha09uVW5jYXVnaHRFeGNlcHRpb24oKTsKIAot
RGVidWdnZXJTY3JpcHQuZ2V0QWZ0ZXJDb21waWxlU2NyaXB0ID0gZnVuY3Rpb24oZXhlY1N0YXRl
LCBhcmdzKQorRGVidWdnZXJTY3JpcHQuZ2V0QWZ0ZXJDb21waWxlU2NyaXB0ID0gZnVuY3Rpb24o
ZXZlbnREYXRhKQogewotICAgIHJldHVybiBEZWJ1Z2dlclNjcmlwdC5fZm9ybWF0U2NyaXB0KGFy
Z3MuZXZlbnREYXRhLnNjcmlwdF8uc2NyaXB0Xyk7CisgICAgcmV0dXJuIERlYnVnZ2VyU2NyaXB0
Ll9mb3JtYXRTY3JpcHQoZXZlbnREYXRhLnNjcmlwdF8uc2NyaXB0Xyk7CiB9CiAKIERlYnVnZ2Vy
U2NyaXB0LmdldFNjcmlwdHMgPSBmdW5jdGlvbihjb250ZXh0RGF0YSkKQEAgLTEzNywxNyArMTM3
LDE3IEBAIERlYnVnZ2VyU2NyaXB0LmN1cnJlbnRDYWxsRnJhbWUgPSBmdW5jdGlvbihleGVjU3Rh
dGUsIGFyZ3MpCiAgICAgcmV0dXJuIHRvcEZyYW1lOwogfQogCi1EZWJ1Z2dlclNjcmlwdC5zdGVw
SW50b1N0YXRlbWVudCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK0RlYnVnZ2VyU2NyaXB0
LnN0ZXBJbnRvU3RhdGVtZW50ID0gZnVuY3Rpb24oZXhlY1N0YXRlKQogewogICAgIGV4ZWNTdGF0
ZS5wcmVwYXJlU3RlcChEZWJ1Zy5TdGVwQWN0aW9uLlN0ZXBJbiwgMSk7CiB9CiAKLURlYnVnZ2Vy
U2NyaXB0LnN0ZXBPdmVyU3RhdGVtZW50ID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQorRGVi
dWdnZXJTY3JpcHQuc3RlcE92ZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihleGVjU3RhdGUpCiB7CiAg
ICAgZXhlY1N0YXRlLnByZXBhcmVTdGVwKERlYnVnLlN0ZXBBY3Rpb24uU3RlcE5leHQsIDEpOwog
fQogCi1EZWJ1Z2dlclNjcmlwdC5zdGVwT3V0T2ZGdW5jdGlvbiA9IGZ1bmN0aW9uKGV4ZWNTdGF0
ZSwgYXJncykKK0RlYnVnZ2VyU2NyaXB0LnN0ZXBPdXRPZkZ1bmN0aW9uID0gZnVuY3Rpb24oZXhl
Y1N0YXRlKQogewogICAgIGV4ZWNTdGF0ZS5wcmVwYXJlU3RlcChEZWJ1Zy5TdGVwQWN0aW9uLlN0
ZXBPdXQsIDEpOwogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0
b3JDb250cm9sbGVySW1wbC5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29u
dHJvbGxlckltcGwuanMKaW5kZXggNWMzZThiZC4uNThjNmQwYyAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcworKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCkBAIC05NCw3ICs5NCw2
IEBAIGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsID0gZnVuY3Rpb24oKQogICAgIHRoaXMu
aW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInJlbW92ZUJyZWFrcG9pbnQiKTsK
ICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJhY3RpdmF0ZUJy
ZWFrcG9pbnRzIik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRl
XygiZGVhY3RpdmF0ZUJyZWFrcG9pbnRzIik7Ci0gICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29u
dHJvbGxlckRlbGVnYXRlXygicGF1c2VJbkRlYnVnZ2VyIik7CiAgICAgdGhpcy5pbnN0YWxsSW5z
cGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygicmVzdW1lRGVidWdnZXIiKTsKICAgICB0aGlzLmlu
c3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzdGVwSW50b1N0YXRlbWVudEluRGVi
dWdnZXIiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJz
dGVwT3V0T2ZGdW5jdGlvbkluRGVidWdnZXIiKTsKQEAgLTIxNyw2ICsyMTYsMTMgQEAgZGV2dG9v
bHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnNldFBhdXNlT25FeGNlcHRpb25zID0g
ZnVuY3Rpb24odmFsdWUpCiAgICAgcmV0dXJuIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdl
bnQoKS5zZXRQYXVzZU9uRXhjZXB0aW9ucyh2YWx1ZSk7CiB9OwogCit9IGVsc2UgeworCitkZXZ0
b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUucGF1c2VJbkRlYnVnZ2VyID0gZnVu
Y3Rpb24oKQoreworICAgIFJlbW90ZURlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yLkRlYnVnZ2VyUGF1
c2VTY3JpcHQoKTsKK307CisKIH0KIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56881</attachid>
            <date>2010-05-24 06:42:56 -0700</date>
            <delta_ts>2010-05-25 03:05:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>nested-loop2.patch</filename>
            <type>text/plain</type>
            <size>35033</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MGFhMGRjYy4uNWM4YTdhNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMC0wNS0yNCAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlciBpcyBub3cgaW1wbGVtZW50ZWQg
YXMgRGVidWdFdmVudExpc3RlbmVyIHdoaWNoIG1lYW5zIGl0IGRvZXNuJ3QKKyAgICAgICAgZGVw
ZW5kIG9uIHY4IGRlYnVnZ2luZyBwcm90b2NvbCwgaW5zdGVhZCBpdCB1c2VzIEV4ZWNTdGF0ZSB0
byBjb2xsZWN0IGRlYnVnZ2luZworICAgICAgICBpbmZvIGFuZCBwYXNzIGl0IHRvIHRoZSBsaXN0
ZW5lcnMuCisKKyAgICAgICAgTmV3IGltcGxlbWVudGF0aW9uIG9mIFNjcmlwdERlYnVnU2VydmVy
IHVzZXMgbWV0aG9kcyBwcm92aWRlZCBieSBjbGllbnQgdG8gZGlzcGF0Y2gKKyAgICAgICAgaXRz
IG1lc3NhZ2VzIHdoaWxlIEpTIGlzIHBhdXNlZChwcmV2aW91c2x5IHRoZSBtZXNzYWdlcyB3YXMg
ZGlzcGF0Y2hlZCBpbiBhIGNhbGxiYWNrCisgICAgICAgIHBhc3NlZCB0byB2OCBhbG9uZyB3aXRo
IERlYnVnRXZlbnRIYW5kbGVyKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzk1OTQKKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVn
U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRj
aERpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRj
aERpZENvbnRpbnVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNw
YXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMpOiBDaGFuZ2VkIG1ldGhvZCBzaWduYXR1cmUgdG8gYWxs
b3cKKyAgICAgICAgaW52b2NhdGlvbiBvZiBTY3JpcHREZWJ1Z0xpc3RlbmVyIG1ldGhvZHMgdGhh
dCBoYXZlIG5vbi1lbXB0eSBhcmd1bWVudCBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdERlYnVnU2VydmVyOjpyZW1vdmVMaXN0ZW5lcik6IEV4ZWN1dGlvbiBpcyByZXN1bWVkKG5l
c3RlZCBtZXNzYWdlIGxvb3AgaXMgdGVybWluYXRlZCkgd2hlbgorICAgICAgICBjb3JyZXNwb25k
aW5nIGRlYnVnZ2VyIHdpbmRvdyBjbG9zZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y29udGludWVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjpzdGVwSW50b1N0YXRlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcE92ZXJTdGF0ZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBPdXRPZkZ1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjp2OERlYnVnRXZlbnRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z0V2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaWRSZXN1bWUpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6Q2xpZW50TWVzc2FnZUxvb3A6On5DbGllbnRNZXNzYWdlTG9vcCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0Q2xpZW50TWVzc2FnZUxvb3ApOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhdXNlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHREZWJ1
Z0xpc3RlbmVyLmg6IENoYW5nZWQgZGlkUGF1c2Ugc2lnbmF0dXJlIHRvIGV4cGxpY2l0bHkgcGFz
cyBTY3JpcHRTdGF0ZQorICAgICAgICB3aGVyZSBleGVjdXRpb24gaXMgcGF1c2VkLgorCiAyMDEw
LTA1LTI0ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmNwcAppbmRleCA4ZjQ3NmI0Li45NGQ3ZTczIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdERlYnVnU2VydmVyLmNwcApAQCAtMjQ1LDExICsyNDUsMTYgQEAgSmF2YVNjcmlwdENhbGxG
cmFtZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWUoKQogICAgIHJldHVybiBt
X2N1cnJlbnRDYWxsRnJhbWUuZ2V0KCk7CiB9CiAKLVNjcmlwdFN0YXRlKiBTY3JpcHREZWJ1Z1Nl
cnZlcjo6Y3VycmVudENhbGxGcmFtZVN0YXRlKCkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
c3BhdGNoRGlkUGF1c2UoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCiB7Ci0gICAgaWYg
KCFtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fY3VycmVudENhbGxG
cmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsgICAgICAgIAor
ICAgIEFTU0VSVChtX3BhdXNlZCk7CisgICAgU2NyaXB0U3RhdGUqIHN0YXRlID0gbV9jdXJyZW50
Q2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOyAgICAg
ICAgCisgICAgbGlzdGVuZXItPmRpZFBhdXNlKHN0YXRlKTsKK30KKwordm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRDb250aW51ZShTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5l
cikKK3sKKyAgICBsaXN0ZW5lci0+ZGlkQ29udGludWUoKTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVu
ZXJzLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSkKQEAgLTMzNSw3ICszNDAsNyBAQCB2
b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoY29uc3Qg
TGlzdGVuZXJTZXQmIGxpc3RlbmVycwogICAgIFZlY3RvcjxTY3JpcHREZWJ1Z0xpc3RlbmVyKj4g
Y29weTsKICAgICBjb3B5VG9WZWN0b3IobGlzdGVuZXJzLCBjb3B5KTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIChjb3B5W2ldLT4qY2FsbGJh
Y2spKCk7CisgICAgICAgICh0aGlzLT4qY2FsbGJhY2spKGNvcHlbaV0pOwogfQogCiB2b2lkIFNj
cmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoSmF2YVNjcmlwdEV4
ZWN1dGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBQYWdlKiBwYWdlKQpAQCAtNDMxLDcgKzQzNiw3IEBA
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQoUGFnZSogcGFnZSkKICAgICBt
X3BhdXNlT25OZXh0U3RhdGVtZW50ID0gZmFsc2U7CiAgICAgbV9wYXVzZWQgPSB0cnVlOwogCi0g
ICAgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKCZTY3JpcHREZWJ1Z0xpc3RlbmVyOjpkaWRQ
YXVzZSwgcGFnZSk7CisgICAgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKCZTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZSwgcGFnZSk7CiAKICAgICBzZXRKYXZhU2NyaXB0UGF1
c2VkKHBhZ2UtPmdyb3VwKCksIHRydWUpOwogCkBAIC00NDYsNyArNDUxLDcgQEAgdm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6cGF1c2VJZk5lZWRlZChQYWdlKiBwYWdlKQogCiAgICAgbV9wYXVzZWQg
PSBmYWxzZTsKIAotICAgIGRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycygmU2NyaXB0RGVidWdM
aXN0ZW5lcjo6ZGlkQ29udGludWUsIHBhZ2UpOworICAgIGRpc3BhdGNoRnVuY3Rpb25Ub0xpc3Rl
bmVycygmU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkQ29udGludWUsIHBhZ2UpOwogfQog
CiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjYWxsRXZlbnQoY29uc3QgRGVidWdnZXJDYWxsRnJh
bWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKaW5kZXggNDc0MDU4NS4uY2Zh
ZGEyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtMzQsNyAr
MzQsNiBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRC
cmVha3BvaW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJUaW1lci5o
IgogCiAjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXIuaD4KQEAgLTg2LDEzICs4NSwxMiBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1
Z1NlcnZlcj4qID0gMCk7CiAKICAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjdXJyZW50Q2FsbEZy
YW1lKCk7Ci0gICAgU2NyaXB0U3RhdGUqIGN1cnJlbnRDYWxsRnJhbWVTdGF0ZSgpOwogCiAgICAg
dm9pZCBwYWdlQ3JlYXRlZChQYWdlKik7CiAKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoU2V0
PFNjcmlwdERlYnVnTGlzdGVuZXIqPiBMaXN0ZW5lclNldDsKLSAgICB0eXBlZGVmIHZvaWQgKFNj
cmlwdERlYnVnTGlzdGVuZXI6OipKYXZhU2NyaXB0RXhlY3V0aW9uQ2FsbGJhY2spKCk7CisgICAg
dHlwZWRlZiB2b2lkIChTY3JpcHREZWJ1Z1NlcnZlcjo6KkphdmFTY3JpcHRFeGVjdXRpb25DYWxs
YmFjaykoU2NyaXB0RGVidWdMaXN0ZW5lciopOwogCiAgICAgU2NyaXB0RGVidWdTZXJ2ZXIoKTsK
ICAgICB+U2NyaXB0RGVidWdTZXJ2ZXIoKTsKQEAgLTEwOSw2ICsxMDcsOCBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoSmF2YVNjcmlwdEV4ZWN1dGlv
bkNhbGxiYWNrLCBQYWdlKik7CiAgICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMo
Y29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgSmF2YVNjcmlwdEV4ZWN1dGlvbkNhbGxiYWNr
IGNhbGxiYWNrKTsKKyAgICB2b2lkIGRpc3BhdGNoRGlkUGF1c2UoU2NyaXB0RGVidWdMaXN0ZW5l
ciopOworICAgIHZvaWQgZGlzcGF0Y2hEaWRDb250aW51ZShTY3JpcHREZWJ1Z0xpc3RlbmVyKik7
CiAgICAgdm9pZCBkaXNwYXRjaERpZFBhcnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0
ZW5lcnMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlKTsKICAgICB2b2lkIGRpc3BhdGNo
RmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBjb25zdCBK
U0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVn
U2VydmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmlu
ZGV4IGNlMjU4ZmIuLjBjMzNiZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwCkBAIC00NCw3ICs0NCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNj
cmlwdERlYnVnU2VydmVyOjpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBTY3JpcHREZWJ1Z1Nl
cnZlcjo6c19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciA9IDA7CitzdGF0aWMgRnJhbWUqIHJl
dHJpZXZlRnJhbWUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKK3sKKyAgICBpZiAo
Y29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gVGVzdCB0aGF0
IGNvbnRleHQgaGFzIGFzc29jaWF0ZWQgZ2xvYmFsIGRvbSB3aW5kb3cgb2JqZWN0LgorICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4dC0+R2xvYmFsKCk7CisgICAgaWYg
KGdsb2JhbC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ2xvYmFsID0gVjhE
T01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4RE9NV2luZG93OjpHZXRUZW1wbGF0ZSgpLCBn
bG9iYWwpOworICAgIGlmIChnbG9iYWwuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHJldHVybiBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQpOworfQogCiBTY3JpcHRE
ZWJ1Z1NlcnZlciYgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpCiB7CkBAIC01NCw3ICs2OSw3
IEBAIFNjcmlwdERlYnVnU2VydmVyJiBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkKIAogU2Ny
aXB0RGVidWdTZXJ2ZXI6OlNjcmlwdERlYnVnU2VydmVyKCkKICAgICA6IG1fcGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZShEb250UGF1c2VPbkV4Y2VwdGlvbnMpCi0gICAgLCBtX2N1cnJlbnRDYWxsRnJh
bWVTdGF0ZSgwKQorICAgICwgbV9wYXVzZWRQYWdlKDApCiB7CiB9CiAKQEAgLTczLDggKzg4LDcg
QEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5l
ciogbGlzdGVuZXIsIFBhZ2UqIHBhZ2UpCiAgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5zaXplKCkp
IHsKICAgICAgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOwogICAgICAgICBBU1NF
UlQoIW1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPklzVW5kZWZpbmVkKCkpOwotICAgICAgICB2ODo6
RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVyMigmU2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01l
c3NhZ2UpOwotICAgICAgICB2ODo6RGVidWc6OlNldEhvc3REaXNwYXRjaEhhbmRsZXIoJlNjcmlw
dERlYnVnU2VydmVyOjpvblY4RGVidWdIb3N0RGlzcGF0Y2gsIDEwMCAvKiBtcyAqLyk7CisgICAg
ICAgIHY4OjpEZWJ1Zzo6U2V0RGVidWdFdmVudExpc3RlbmVyMigmU2NyaXB0RGVidWdTZXJ2ZXI6
OnY4RGVidWdFdmVudENhbGxiYWNrKTsKICAgICB9CiAgICAgbV9saXN0ZW5lcnNNYXAuc2V0KHBh
Z2UsIGxpc3RlbmVyKTsKICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHBh
Z2UtPm1haW5GcmFtZSgpKTsKQEAgLTk3LDE3ICsxMTEsMTQgQEAgdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2Uq
IHBhZ2UKICAgICBpZiAoIW1fbGlzdGVuZXJzTWFwLmNvbnRhaW5zKHBhZ2UpKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBpZiAobV9wYXVzZWRQYWdlID09IHBhZ2UpCisgICAgICAgIGNvbnRpbnVl
UHJvZ3JhbSgpOworCiAgICAgbV9saXN0ZW5lcnNNYXAucmVtb3ZlKHBhZ2UpOwogCi0gICAgaWYg
KG1fbGlzdGVuZXJzTWFwLmlzRW1wdHkoKSkgewotICAgICAgICB2ODo6RGVidWc6OlNldE1lc3Nh
Z2VIYW5kbGVyMigwKTsKLSAgICAgICAgdjg6OkRlYnVnOjpTZXRIb3N0RGlzcGF0Y2hIYW5kbGVy
KDApOwotICAgIH0KKyAgICBpZiAobV9saXN0ZW5lcnNNYXAuaXNFbXB0eSgpKQorICAgICAgICB2
ODo6RGVidWc6OlNldERlYnVnRXZlbnRMaXN0ZW5lcigwKTsKICAgICAvLyBGSVhNRTogUmVtb3Zl
IGFsbCBicmVha3BvaW50cyBzZXQgYnkgdGhlIGFnZW50LgotICAgIC8vIEZJWE1FOiBGb3JjZSBj
b250aW51ZSBpZiBkZXRhY2ggaGFwcGVuZWQgaW4gbmVzc3RlZCBtZXNzYWdlIGxvb3Agd2hpbGUK
LSAgICAvLyBkZWJ1Z2dlciB3YXMgcGF1c2VkIG9uIGEgYnJlYWtwb2ludChhcyBsb25nIGFzIHRo
ZXJlIGFyZSBvdGhlcgotICAgIC8vIGF0dGFjaGVkIGFnZW50cyB2OCB3aWxsIHdhaXQgZm9yIGV4
cGxpY2l0J2NvbnRpbnVlJyBtZXNzYWdlKS4KLSAgICAvLyBGSVhNRTogc2VuZCBjb250aW51ZSBj
b21tYW5kIHRvIHY4IGlmIG5lY2Vzc2FyeTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpCkBAIC0xNTIsOCArMTYzLDggQEAgdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cygpCiAgICAgdjg6OkxvY2FsPHY4OjpD
b250ZXh0PiBkZWJ1Z2dlckNvbnRleHQgPSB2ODo6RGVidWc6OkdldERlYnVnQ29udGV4dCgpOwog
ICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoZGVidWdnZXJDb250ZXh0KTsKIAot
ICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRCcmVha3BvaW50c0FjdGl2YXRlZCA9IHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2
ODo6U3RyaW5nOjpOZXcoImNsZWFyQnJlYWtwb2ludHMiKSkpOwotICAgIHY4OjpEZWJ1Zzo6Q2Fs
bChzZXRCcmVha3BvaW50c0FjdGl2YXRlZCk7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+
IGNsZWFyQnJlYWtwb2ludHMgPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVn
Z2VyU2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJjbGVhckJyZWFrcG9pbnRzIikp
KTsKKyAgICB2ODo6RGVidWc6OkNhbGwoY2xlYXJCcmVha3BvaW50cyk7CiAjZW5kaWYKIH0KIApA
QCAtMTc5LDkgKzE5MCw5IEBAIFNjcmlwdERlYnVnU2VydmVyOjpQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlIFNjcmlwdERlYnVnU2VydmVyOjpwYXVzZU9uRXhjZXB0aW9uc1N0CiAgICAgdjg6OkhhbmRs
ZVNjb3BlIHNjb3BlOwogICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkRl
YnVnOjpHZXREZWJ1Z0NvbnRleHQoKSk7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4g
Y3VycmVudENhbGxGcmFtZUZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3Qo
bV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygicGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSIpKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0g
djg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0
KHY4OjpTdHJpbmc6Ok5ldygicGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSIpKSk7CiAgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCkgfTsKLSAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gY3VycmVudENhbGxGcmFtZUZ1bmN0aW9u
LT5DYWxsKG1fZGVidWdnZXJTY3JpcHQuZ2V0KCksIDAsIGFyZ3YpOworICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiByZXN1bHQgPSBmdW5jdGlvbi0+Q2FsbChtX2RlYnVnZ2VyU2NyaXB0LmdldCgp
LCAwLCBhcmd2KTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NyaXB0RGVidWdTZXJ2ZXI6OlBh
dXNlT25FeGNlcHRpb25zU3RhdGU+KHJlc3VsdC0+SW50MzJWYWx1ZSgpKTsKICNlbHNlCiAgICAg
cmV0dXJuIERvbnRQYXVzZU9uRXhjZXB0aW9uczsKQEAgLTE5NSwxNyArMjA2LDE3IEBAIHZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSBwYXVzZU9uCiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIHY4OjpD
b250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQoKSk7
CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gY3VycmVudENhbGxGcmFtZUZ1bmN0aW9u
ID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+
R2V0KHY4OjpTdHJpbmc6Ok5ldygic2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSIpKSk7CisgICAg
djg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHNldFBhdXNlT25FeGNlcHRpb25zRnVuY3Rpb24gPSB2
ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5HZXQo
djg6OlN0cmluZzo6TmV3KCJzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIikpKTsKICAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0geyB2ODo6SW50MzI6Ok5ldyhwYXVzZU9uRXhjZXB0
aW9uc1N0YXRlKSB9OwotICAgIGN1cnJlbnRDYWxsRnJhbWVGdW5jdGlvbi0+Q2FsbChtX2RlYnVn
Z2VyU2NyaXB0LmdldCgpLCAxLCBhcmd2KTsKKyAgICBzZXRQYXVzZU9uRXhjZXB0aW9uc0Z1bmN0
aW9uLT5DYWxsKG1fZGVidWdnZXJTY3JpcHQuZ2V0KCksIDEsIGFyZ3YpOwogI2VuZGlmCiB9CiAK
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCiB7CiAjaWYgRU5BQkxF
KFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCi0gICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5
cGVcIjpcInJlcXVlc3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCJ9Iik7Ci0gICAgdjg6OkRl
YnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNo
YXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsK
KyAgICBpZiAobV9wYXVzZWRQYWdlKQorICAgICAgICBtX2NsaWVudE1lc3NhZ2VMb29wLT5xdWl0
Tm93KCk7CiAgICAgZGlkUmVzdW1lKCk7CiAjZW5kaWYKIH0KQEAgLTIxMywzNSArMjI0LDM2IEBA
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCiB2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpzdGVwSW50b1N0YXRlbWVudCgpCiB7CiAjaWYgRU5BQkxFKFY4X1NDUklQVF9E
RUJVR19TRVJWRVIpCi0gICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVl
c3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCIsXCJhcmd1bWVudHNcIjp7XCJzdGVwYWN0aW9u
XCI6XCJpblwifX0iKTsKLSAgICB2ODo6RGVidWc6OlNlbmRDb21tYW5kKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDE2X3QqPihjbWQuY2hhcmFjdGVycygpKSwgY21kLmxlbmd0aCgpLCBuZXcg
djg6OkRlYnVnOjpDbGllbnREYXRhKCkpOwotICAgIGRpZFJlc3VtZSgpOworICAgIEFTU0VSVCht
X3BhdXNlZFBhZ2UpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2
ODo6U3RyaW5nOjpOZXcoInN0ZXBJbnRvU3RhdGVtZW50IikpKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gYXJndltdID0geyBtX2V4ZWN1dGlvblN0YXRlLmdldCgpIH07CisgICAgZnVuY3Rp
b24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJndik7CisgICAgY29udGludWVQ
cm9ncmFtKCk7CiAjZW5kaWYKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcE92ZXJT
dGF0ZW1lbnQoKQogewogI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQotICAgIFN0
cmluZyBjbWQoIntcInNlcVwiOjEsXCJ0eXBlXCI6XCJyZXF1ZXN0XCIsXCJjb21tYW5kXCI6XCJj
b250aW51ZVwiLFwiYXJndW1lbnRzXCI6e1wic3RlcGFjdGlvblwiOlwibmV4dFwifX0iKTsKLSAg
ICB2ODo6RGVidWc6OlNlbmRDb21tYW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3Qq
PihjbWQuY2hhcmFjdGVycygpKSwgY21kLmxlbmd0aCgpLCBuZXcgdjg6OkRlYnVnOjpDbGllbnRE
YXRhKCkpOwotICAgIGRpZFJlc3VtZSgpOworICAgIEFTU0VSVChtX3BhdXNlZFBhZ2UpOworICAg
IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rp
b24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInN0
ZXBPdmVyU3RhdGVtZW50IikpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0g
eyBtX2V4ZWN1dGlvblN0YXRlLmdldCgpIH07CisgICAgZnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dl
clNjcmlwdC5nZXQoKSwgMSwgYXJndik7CisgICAgY29udGludWVQcm9ncmFtKCk7CiAjZW5kaWYK
IH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcE91dE9mRnVuY3Rpb24oKQogewogI2lm
IEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQotICAgIFN0cmluZyBjbWQoIntcInNlcVwi
OjEsXCJ0eXBlXCI6XCJyZXF1ZXN0XCIsXCJjb21tYW5kXCI6XCJjb250aW51ZVwiLFwiYXJndW1l
bnRzXCI6e1wic3RlcGFjdGlvblwiOlwib3V0XCJ9fSIpOwotICAgIHY4OjpEZWJ1Zzo6U2VuZENv
bW1hbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGNtZC5jaGFyYWN0ZXJzKCkp
LCBjbWQubGVuZ3RoKCksIG5ldyB2ODo6RGVidWc6OkNsaWVudERhdGEoKSk7Ci0gICAgZGlkUmVz
dW1lKCk7CisgICAgQVNTRVJUKG1fcGF1c2VkUGFnZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVu
Y3Rpb24+IGZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dl
clNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygic3RlcE91dE9mRnVuY3Rpb24iKSkp
OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7IG1fZXhlY3V0aW9uU3RhdGUu
Z2V0KCkgfTsKKyAgICBmdW5jdGlvbi0+Q2FsbChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLCAxLCBh
cmd2KTsKKyAgICBjb250aW51ZVByb2dyYW0oKTsKICNlbmRpZgogfQogCi1TY3JpcHRTdGF0ZSog
U2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVTdGF0ZSgpCi17Ci0gICAgcmV0dXJu
IG1fY3VycmVudENhbGxGcmFtZVN0YXRlOwotfQotCiBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxs
RnJhbWU+IFNjcmlwdERlYnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lKCkKIHsKICAgICBpZiAo
IW1fY3VycmVudENhbGxGcmFtZSkgewpAQCAtMjUzLDgzICsyNjUsNDggQEAgUGFzc1JlZlB0cjxK
YXZhU2NyaXB0Q2FsbEZyYW1lPiBTY3JpcHREZWJ1Z1NlcnZlcjo6Y3VycmVudENhbGxGcmFtZSgp
CiAgICAgcmV0dXJuIG1fY3VycmVudENhbGxGcmFtZTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6b25WOERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3NhZ2UmIG1lc3NhZ2Up
Ci17Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmhhbmRsZVY4RGVidWdNZXNzYWdl
KG1lc3NhZ2UpOwotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpvblY4RGVidWdIb3N0RGlz
cGF0Y2goKQotewotICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5oYW5kbGVWOERlYnVn
SG9zdERpc3BhdGNoKCk7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZVY4RGVi
dWdIb3N0RGlzcGF0Y2goKQorI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQordm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6djhEZWJ1Z0V2ZW50Q2FsbGJhY2soY29uc3Qgdjg6OkRlYnVn
OjpFdmVudERldGFpbHMmIGV2ZW50RGV0YWlscykKIHsKLSAgICBpZiAoIXNfbWVzc2FnZUxvb3BE
aXNwYXRjaEhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxXZWJDb3JlOjpQ
YWdlKj4gcGFnZXM7Ci0gICAgZm9yIChMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9saXN0
ZW5lcnNNYXAuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnNNYXAuZW5kKCk7ICsraXQpCi0gICAg
ICAgIHBhZ2VzLmFwcGVuZChpdC0+Zmlyc3QpOwotICAgIAotICAgIHNfbWVzc2FnZUxvb3BEaXNw
YXRjaEhhbmRsZXIocGFnZXMpOworICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5oYW5k
bGVWOERlYnVnRXZlbnQoZXZlbnREZXRhaWxzKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6aGFuZGxlVjhEZWJ1Z01lc3NhZ2UoY29uc3Qgdjg6OkRlYnVnOjpNZXNzYWdlJiBtZXNzYWdl
KQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z0V2ZW50KGNvbnN0IHY4OjpE
ZWJ1Zzo6RXZlbnREZXRhaWxzJiBldmVudERldGFpbHMpCiB7Ci0gICAgdjg6OkhhbmRsZVNjb3Bl
IHNjb3BlOwotCi0gICAgaWYgKCFtZXNzYWdlLklzRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gSWdub3JlIHVuc3VwcG9ydGVkIGV2ZW50IHR5cGVzLgotICAgIGlmIChtZXNzYWdl
LkdldEV2ZW50KCkgIT0gdjg6OkFmdGVyQ29tcGlsZSAmJiBtZXNzYWdlLkdldEV2ZW50KCkgIT0g
djg6OkJyZWFrICYmIG1lc3NhZ2UuR2V0RXZlbnQoKSAhPSB2ODo6RXhjZXB0aW9uKQorICAgIHY4
OjpEZWJ1Z0V2ZW50IGV2ZW50ID0gZXZlbnREZXRhaWxzLkdldEV2ZW50KCk7CisgICAgaWYgKGV2
ZW50ICE9IHY4OjpCcmVhayAmJiBldmVudCAhPSB2ODo6RXhjZXB0aW9uICYmIGV2ZW50ICE9IHY4
OjpBZnRlckNvbXBpbGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQgPSBtZXNzYWdlLkdldEV2ZW50Q29udGV4dCgpOwotICAgIC8vIElmIHRo
ZSBjb250ZXh0IGlzIGZyb20gb25lIG9mIHRoZSBpbnBlY3RlZCB0YWJzIGl0IHNob3VsZCBoYXZl
IGl0cyBjb250ZXh0Ci0gICAgLy8gZGF0YS4gU2tpcCBldmVudHMgZnJvbSB1bmtub3duIGNvbnRl
eHRzLgotICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGV2ZW50Q29udGV4dCA9IGV2ZW50RGV0YWlscy5HZXRFdmVu
dENvbnRleHQoKTsKKyAgICBBU1NFUlQoIWV2ZW50Q29udGV4dC5Jc0VtcHR5KCkpOwogCi0gICAg
Ly8gVGVzdCB0aGF0IGNvbnRleHQgaGFzIGFzc29jaWF0ZWQgZ2xvYmFsIGRvbSB3aW5kb3cgb2Jq
ZWN0LgotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4dC0+R2xvYmFs
KCk7Ci0gICAgaWYgKGdsb2JhbC5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGds
b2JhbCA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOERPTVdpbmRvdzo6R2V0VGVt
cGxhdGUoKSwgZ2xvYmFsKTsKLSAgICBpZiAoZ2xvYmFsLklzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAgRnJhbWUqIGZyYW1lID0gVjhQ
cm94eTo6cmV0cmlldmVGcmFtZShjb250ZXh0KTsKKyAgICBGcmFtZSogZnJhbWUgPSByZXRyaWV2
ZUZyYW1lKGV2ZW50Q29udGV4dCk7CiAgICAgaWYgKGZyYW1lKSB7CiAgICAgICAgIFNjcmlwdERl
YnVnTGlzdGVuZXIqIGxpc3RlbmVyID0gbV9saXN0ZW5lcnNNYXAuZ2V0KGZyYW1lLT5wYWdlKCkp
OwogICAgICAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlLkdldEV2
ZW50KCkgPT0gdjg6OkFmdGVyQ29tcGlsZSkgewotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOworICAgICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgICAgICAgICAgaWYg
KGV2ZW50ID09IHY4OjpBZnRlckNvbXBpbGUpIHsKICAgICAgICAgICAgICAgICB2ODo6Q29udGV4
dDo6U2NvcGUgY29udGV4dFNjb3BlKHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCkpOwotICAg
ICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBhcmdzID0gdjg6Ok9iamVjdDo6TmV3
KCk7Ci0gICAgICAgICAgICAgICAgYXJncy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiZXZlbnREYXRh
IiksIG1lc3NhZ2UuR2V0RXZlbnREYXRhKCkpOwogICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8
djg6OkZ1bmN0aW9uPiBvbkFmdGVyQ29tcGlsZUZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5j
dGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygi
Z2V0QWZ0ZXJDb21waWxlU2NyaXB0IikpKTsKLSAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gYXJndltdID0geyBtZXNzYWdlLkdldEV4ZWN1dGlvblN0YXRlKCksIGFyZ3MgfTsK
LSAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBvbkFmdGVyQ29t
cGlsZUZ1bmN0aW9uLT5DYWxsKG1fZGVidWdnZXJTY3JpcHQuZ2V0KCksIDIsIGFyZ3YpOworICAg
ICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7IGV2ZW50RGV0YWls
cy5HZXRFdmVudERhdGEoKSB9OworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSA9IG9uQWZ0ZXJDb21waWxlRnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5n
ZXQoKSwgMSwgYXJndik7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgp
KTsKICAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOwogICAgICAgICAgICAgICAgIGRpc3BhdGNo
RGlkUGFyc2VTb3VyY2UobGlzdGVuZXIsIG9iamVjdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KG1lc3NhZ2UuR2V0RXZlbnQoKSA9PSB2ODo6QnJlYWsgfHwgbWVzc2FnZS5HZXRFdmVudCgpID09
IHY4OjpFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBtX2V4ZWN1dGlvblN0YXRlLnNldChtZXNzYWdlLkdldEV4ZWN1dGlvblN0YXRl
KCkpOwotICAgICAgICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gbWFpbldvcmxk
U2NyaXB0U3RhdGUoZnJhbWUpOwotICAgICAgICAgICAgICAgIGxpc3RlbmVyLT5kaWRQYXVzZSgp
OwotICAgICAgICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gMDsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gdjg6OkJyZWFrIHx8IGV2ZW50ID09IHY4OjpFeGNlcHRp
b24pIHsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1dGlvblN0YXRlLnNldChldmVudERldGFpbHMu
R2V0RXhlY3V0aW9uU3RhdGUoKSk7CisgICAgICAgICAgICAgICAgbV9wYXVzZWRQYWdlID0gZnJh
bWUtPnBhZ2UoKTsKKyAgICAgICAgICAgICAgICBTY3JpcHRTdGF0ZSogY3VycmVudENhbGxGcmFt
ZVN0YXRlID0gbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpOworICAgICAgICAgICAgICAgIGxp
c3RlbmVyLT5kaWRQYXVzZShjdXJyZW50Q2FsbEZyYW1lU3RhdGUpOworCisgICAgICAgICAgICAg
ICAgLy8gV2FpdCBmb3IgY29udGludWUgb3Igc3RlcCBjb21tYW5kLgorICAgICAgICAgICAgICAg
IG1fY2xpZW50TWVzc2FnZUxvb3AtPnJ1bihtX3BhdXNlZFBhZ2UpOworICAgICAgICAgICAgICAg
IEFTU0VSVCghbV9wYXVzZWRQYWdlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
LQotICAgIGlmICghaGFuZGxlZCAmJiAhbWVzc2FnZS5XaWxsU3RhcnRSdW5uaW5nKCkpCi0gICAg
ICAgIGNvbnRpbnVlUHJvZ3JhbSgpOwogfQorI2VuZGlmCiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OmRpc3BhdGNoRGlkUGFyc2VTb3VyY2UoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIs
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQogewpAQCAtMzU0LDYgKzMzMSw3IEBAIHZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlc3VtZSgpCiB7CiAgICAgbV9jdXJyZW50Q2FsbEZy
YW1lLmNsZWFyKCk7CiAgICAgbV9leGVjdXRpb25TdGF0ZS5jbGVhcigpOworICAgIG1fcGF1c2Vk
UGFnZSA9IDA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCA2ZWYwYWZkLi43YzhjNWNjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC0zNiwxMiArMzYsMTIgQEAKICNpbmNsdWRl
ICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlICJTY3JpcHRCcmVha3BvaW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx2OC1k
ZWJ1Zy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC03NywxNSArNzcsMTggQEAgcHVibGljOgogICAgIHZvaWQgcmVjb21waWxlQWxsSlNG
dW5jdGlvbnNTb29uKCkgeyB9CiAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1l
cjxTY3JpcHREZWJ1Z1NlcnZlcj4qID0gMCkgeyB9CiAKLSAgICBTY3JpcHRTdGF0ZSogY3VycmVu
dENhbGxGcmFtZVN0YXRlKCk7Ci0KICAgICB2b2lkIHBhZ2VDcmVhdGVkKFBhZ2UqKSB7IH0KIAog
ICAgIC8vIHY4LXNwZWNpZmljIG1ldGhvZHMuCiAgICAgdm9pZCBzZXREZWJ1Z2dlclNjcmlwdFNv
dXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdFNvdXJjZSk7CiAKLSAgICB0eXBlZGVmIHZvaWQgKCpN
ZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcikoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlBhZ2UqPiYp
OwotICAgIHN0YXRpYyB2b2lkIHNldE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKE1lc3NhZ2VM
b29wRGlzcGF0Y2hIYW5kbGVyIG1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKSB7IHNfbWVzc2Fn
ZUxvb3BEaXNwYXRjaEhhbmRsZXIgPSBtZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcjsgfQorICAg
IGNsYXNzIENsaWVudE1lc3NhZ2VMb29wIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
fkNsaWVudE1lc3NhZ2VMb29wKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBydW4oUGFnZSop
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHF1aXROb3coKSA9IDA7CisgICAgfTsKKyAgICB2
b2lkIHNldENsaWVudE1lc3NhZ2VMb29wKFBhc3NPd25QdHI8Q2xpZW50TWVzc2FnZUxvb3A+IGNs
aWVudE1lc3NhZ2VMb29wKSB7IG1fY2xpZW50TWVzc2FnZUxvb3AgPSBjbGllbnRNZXNzYWdlTG9v
cDsgfQogCiAgICAgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjdXJyZW50Q2FsbEZy
YW1lKCk7CiAKQEAgLTkzLDE0ICs5NiwxMyBAQCBwcml2YXRlOgogICAgIFNjcmlwdERlYnVnU2Vy
dmVyKCk7CiAgICAgflNjcmlwdERlYnVnU2VydmVyKCkgeyB9CiAKLSAgICBzdGF0aWMgdm9pZCBv
blY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSk7Ci0gICAg
c3RhdGljIHZvaWQgb25WOERlYnVnSG9zdERpc3BhdGNoKCk7Ci0KLSAgICB2b2lkIGhhbmRsZVY4
RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSk7Ci0gICAgdm9p
ZCBoYW5kbGVWOERlYnVnSG9zdERpc3BhdGNoKCk7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJV
R19TRVJWRVIpCisgICAgc3RhdGljIHZvaWQgdjhEZWJ1Z0V2ZW50Q2FsbGJhY2soY29uc3Qgdjg6
OkRlYnVnOjpFdmVudERldGFpbHMmIGV2ZW50RGV0YWlscyk7CisgICAgdm9pZCBoYW5kbGVWOERl
YnVnRXZlbnQoY29uc3Qgdjg6OkRlYnVnOjpFdmVudERldGFpbHMmIGV2ZW50RGV0YWlscyk7Cisj
ZW5kaWYKIAogICAgIHZvaWQgZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShTY3JpcHREZWJ1Z0xpc3Rl
bmVyKiBsaXN0ZW5lciwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBzb3VyY2VPYmplY3QpOwotICAg
IAorCiAgICAgdm9pZCBlbnN1cmVEZWJ1Z2dlclNjcmlwdENvbXBpbGVkKCk7CiAgICAgdm9pZCBk
aWRSZXN1bWUoKTsKIApAQCAtMTA5LDExICsxMTEsMTAgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
bV9kZWJ1Z2dlclNjcmlwdFNvdXJjZTsKICAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIG1fcGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZTsKICAgICBPd25IYW5kbGU8djg6Ok9iamVjdD4gbV9kZWJ1Z2dl
clNjcmlwdDsKLSAgICBTY3JpcHRTdGF0ZSogbV9jdXJyZW50Q2FsbEZyYW1lU3RhdGU7CiAgICAg
UmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IG1fY3VycmVudENhbGxGcmFtZTsKICAgICBPd25I
YW5kbGU8djg6Ok9iamVjdD4gbV9leGVjdXRpb25TdGF0ZTsKLQotICAgIHN0YXRpYyBNZXNzYWdl
TG9vcERpc3BhdGNoSGFuZGxlciBzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyOworICAgIE93
blB0cjxDbGllbnRNZXNzYWdlTG9vcD4gbV9jbGllbnRNZXNzYWdlTG9vcDsKKyAgICBQYWdlKiBt
X3BhdXNlZFBhZ2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDNiMzZhNGEuLmI0NDQxZDYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xNjI4LDkgKzE2Mjgs
OCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZAogICAgIG1fZnJvbnRlbmQtPmZhaWxlZFRvUGFy
c2VTY3JpcHRTb3VyY2UodXJsLCBkYXRhLCBmaXJzdExpbmUsIGVycm9yTGluZSwgZXJyb3JNZXNz
YWdlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXVzZSgpCit2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhdXNlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsK
LSAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVk
KCkuY3VycmVudENhbGxGcmFtZVN0YXRlKCk7CiAgICAgQVNTRVJUKHNjcmlwdFN0YXRlKTsKICAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5p
bmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gY2FsbEZyYW1lcyA9IGluamVjdGVkU2NyaXB0LmNhbGxGcmFtZXMoKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBhOTBiMjk5Li45Y2I5ZTM0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0yNDEsNyArMjQxLDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBm
aXJzdExpbmUpOwogICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxp
bmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1
c2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoU2NyaXB0U3RhdGUqKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ29udGludWUoKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRE
ZWJ1Z0xpc3RlbmVyLmgKaW5kZXggNWE4NWRhMS4uYzY2OWY1ZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L1NjcmlwdERlYnVnTGlzdGVuZXIuaApAQCAtMzIsNiArMzIsOCBAQAogCiAjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiAKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFN0cmluZzsKQEAgLTQyLDcgKzQ0LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgIHNvdXJjZUlE
LCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2Uo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKFNjcmlwdFN0YXRlKikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZSgpID0gMDsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDA3
ZTZlZGIuLjUzNzFiMjggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEwLTA1LTI0
ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNjcmlwdERlYnVnU2VydmVyIGlzIG5v
dyBpbXBsZW1lbnRlZCBhcyBEZWJ1Z0V2ZW50TGlzdGVuZXIgd2hpY2ggbWVhbnMgaXQgZG9lc24n
dAorICAgICAgICBkZXBlbmQgb24gdjggZGVidWdnaW5nIHByb3RvY29sLCBpbnN0ZWFkIGl0IHVz
ZXMgRXhlY1N0YXRlIHRvIGNvbGxlY3QgZGVidWdnaW5nCisgICAgICAgIGluZm8gYW5kIHBhc3Mg
aXQgdG8gdGhlIGxpc3RlbmVycy4KKworICAgICAgICBOZXcgaW1wbGVtZW50YXRpb24gb2YgU2Ny
aXB0RGVidWdTZXJ2ZXIgdXNlcyBtZXRob2RzIHByb3ZpZGVkIGJ5IGNsaWVudCB0byBkaXNwYXRj
aAorICAgICAgICBpdHMgbWVzc2FnZXMgd2hpbGUgSlMgaXMgcGF1c2VkKHByZXZpb3VzbHkgdGhl
IG1lc3NhZ2VzIHdhcyBkaXNwYXRjaGVkIGluIGEgY2FsbGJhY2sKKyAgICAgICAgcGFzc2VkIHRv
IHY4IGFsb25nIHdpdGggRGVidWdFdmVudEhhbmRsZXIpLgorCisgICAgICAgIFBhdXNlIGNvbW1h
bmQgaXMgZGlzcGF0Y2hlZCBvbiBJTyB0aHJlYWQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NTk0CisKKyAgICAgICAgKiBwdWJsaWMvV2ViRGV2
VG9vbHNBZ2VudENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50Q2xp
ZW50OjpDbGllbnRNZXNzYWdlTG9vcDo6fkNsaWVudE1lc3NhZ2VMb29wKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRGV2VG9vbHNBZ2VudENsaWVudDo6Y3JlYXRlQ2xpZW50TWVzc2FnZUxvb3ApOiBS
ZXR1cm5zIGFuIG9iamVjdCB0aGF0IGFsbG93cyB0byBydW4KKyAgICAgICAgbmVzdGVkIGNsaWVu
dCBtZXNzYWdlIGxvb3Agd2hpbGUgc2NyaXB0IGV4ZWN1dGlvbiBpcyBwYXVzZWQgb24gYSBicmVh
a3BvaW50LgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFu
ZGxlcik6CisgICAgICAgICogc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmg6CisgICAgICAgICog
c3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6On5XZWJEZXZUb29sc0FnZW50SW1wbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjphdHRhY2gpOgorICAgICAg
ICAqIHNyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qczoKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29u
c3RydWN0b3IuRGVidWdnZXJTY3JpcHQuZ2V0QWZ0ZXJDb21waWxlU2NyaXB0KToKKyAgICAgICAg
KGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuc3RlcEludG9TdGF0ZW1l
bnQpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5z
dGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRl
YnVnZ2VyU2NyaXB0LnN0ZXBPdXRPZkZ1bmN0aW9uKToKKyAgICAgICAgKiBzcmMvanMvSW5zcGVj
dG9yQ29udHJvbGxlckltcGwuanM6CisgICAgICAgIChkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5k
SW1wbCk6CisgICAgICAgIChlbHNlLmRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3Rv
dHlwZS5wYXVzZUluRGVidWdnZXIpOiBQYXVzZSBjb21tYW5kIHNob3VsZCBiZSBoYW5kbGVkIG9u
IElPCisgICAgICAgIHRocmVhZCBzbyB0aGF0IHNjcmlwdCBjYW4gYmUgcGF1c2VkIGV2ZW4gaWYg
aXQncyBpbiBhbiBpbmZpbml0ZSBsb29wLgorCiAyMDEwLTA1LTIxICBUb255IENoYW5nICA8dG9u
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGV2VG9vbHNBZ2VudENsaWVudC5oIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50LmgKaW5kZXggZDc4
YTZmMS4uNjc5OTBhZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZU
b29sc0FnZW50Q2xpZW50LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29s
c0FnZW50Q2xpZW50LmgKQEAgLTU2LDYgKzU2LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdl
YkNTdHJpbmcgaW5qZWN0ZWRTY3JpcHRTb3VyY2UoKSB7IHJldHVybiBXZWJDU3RyaW5nKCk7IH0K
ICAgICB2aXJ0dWFsIFdlYkNTdHJpbmcgaW5qZWN0ZWRTY3JpcHREaXNwYXRjaGVyU291cmNlKCkg
eyByZXR1cm4gV2ViQ1N0cmluZygpOyB9CiAKKyAgICBjbGFzcyBDbGllbnRNZXNzYWdlTG9vcCB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5DbGllbnRNZXNzYWdlTG9vcCgpIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcXVp
dE5vdygpID0gMDsKKyAgICB9OworICAgIHZpcnR1YWwgQ2xpZW50TWVzc2FnZUxvb3AqIGNyZWF0
ZUNsaWVudE1lc3NhZ2VMb29wKCkgeyByZXR1cm4gMDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgfldl
YkRldlRvb2xzQWdlbnRDbGllbnQoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVi
dWdnZXJBZ2VudE1hbmFnZXIuY3BwCmluZGV4IGQzZjdmZWEuLmUxNGNmNjQgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuY3BwCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuY3BwCkBAIC03Myw0MiArNzMsNiBA
QCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UKIAogCi12b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2Vy
Ojpob3N0RGlzcGF0Y2hIYW5kbGVyKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpQYWdlKj4mIHBhZ2Vz
KQotewotICAgIGlmICghc19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKHNfaW5Ib3N0RGlzcGF0Y2hIYW5kbGVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzX2luSG9zdERpc3BhdGNoSGFuZGxlciA9IHRydWU7Ci0KLSAgICBWZWN0b3I8V2Vi
Vmlld0ltcGwqPiB2aWV3czsKLSAgICAvLyAxLiBEaXNhYmxlIGFjdGl2ZSBvYmplY3RzIGFuZCBp
bnB1dCBldmVudHMuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWdlcy5zaXplKCk7IGkr
KykgewotICAgICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gcGFnZXNbaV07Ci0gICAgICAgIFdl
YlZpZXdJbXBsKiB2aWV3ID0gV2ViVmlld0ltcGw6OmZyb21QYWdlKHBhZ2UpOwotICAgICAgICBz
X3BhZ2VEZWZlcnJlcnMuc2V0KHZpZXcgLCBuZXcgV2ViQ29yZTo6UGFnZUdyb3VwTG9hZERlZmVy
cmVyKHBhZ2UsIHRydWUpKTsKLSAgICAgICAgdmlld3MuYXBwZW5kKHZpZXcpOwotICAgICAgICB2
aWV3LT5zZXRJZ25vcmVJbnB1dEV2ZW50cyh0cnVlKTsKLSAgICB9Ci0KLSAgICAvLyAyLiBQcm9j
ZXNzIG1lc3NhZ2VzLgotICAgIHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoKTsKLQotICAg
IC8vIDMuIEJyaW5nIHRoaW5ncyBiYWNrLgotICAgIGZvciAoVmVjdG9yPFdlYlZpZXdJbXBsKj46
Oml0ZXJhdG9yIGl0ID0gdmlld3MuYmVnaW4oKTsgaXQgIT0gdmlld3MuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgaWYgKHNfcGFnZURlZmVycmVycy5jb250YWlucygqaXQpKSB7Ci0gICAgICAgICAg
ICAvLyBUaGUgdmlldyB3YXMgbm90IGNsb3NlZCBkdXJpbmcgdGhlIGRpc3BhdGNoLgotICAgICAg
ICAgICAgKCppdCktPnNldElnbm9yZUlucHV0RXZlbnRzKGZhbHNlKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBkZWxldGVBbGxWYWx1ZXMoc19wYWdlRGVmZXJyZXJzKTsKLSAgICBzX3BhZ2VEZWZl
cnJlcnMuY2xlYXIoKTsKLQotICAgIHNfaW5Ib3N0RGlzcGF0Y2hIYW5kbGVyID0gZmFsc2U7Ci19
Ci0KIHZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnSG9zdERpc3BhdGNoSGFuZGxlcigp
CiB7CiAgICAgaWYgKCFzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyIHx8ICFzX2F0dGFjaGVk
QWdlbnRzTWFwKQpAQCAtMjkyLDcgKzI1Niw2IEBAIHZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6
OmV4ZWN1dGVEZWJ1Z2dlckNvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBpbnQgY2FsCiB2
b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihX
ZWJEZXZUb29sc0FnZW50OjpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBoYW5kbGVyKQogewog
ICAgIHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgPSBoYW5kbGVyOwotICAgIFdlYkNvcmU6
OlNjcmlwdERlYnVnU2VydmVyOjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihEZWJ1Z2dl
ckFnZW50TWFuYWdlcjo6aG9zdERpc3BhdGNoSGFuZGxlcik7CiB9CiAKIHZvaWQgRGVidWdnZXJB
Z2VudE1hbmFnZXI6OnNldEhvc3RJZChXZWJGcmFtZUltcGwqIHdlYmZyYW1lLCBpbnQgaG9zdElk
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5o
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5oCmluZGV4IGE4YmM3
YTMuLjA1MWYzZTIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2Vu
dE1hbmFnZXIuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2Vy
LmgKQEAgLTEwMCw3ICsxMDAsNiBAQCBwcml2YXRlOgogICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2Vy
KCk7CiAgICAgfkRlYnVnZ2VyQWdlbnRNYW5hZ2VyKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBob3N0
RGlzcGF0Y2hIYW5kbGVyKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpQYWdlKj4mKTsKICAgICBzdGF0
aWMgdm9pZCBkZWJ1Z0hvc3REaXNwYXRjaEhhbmRsZXIoKTsKICAgICBzdGF0aWMgdm9pZCBvblY4
RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSk7CiAgICAgc3Rh
dGljIHZvaWQgc2VuZENvbW1hbmRUb1Y4KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgY21kLApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAppbmRleCAwOTY5ZDM3
Li42M2IwMjI5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdl
bnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBs
LmNwcApAQCAtNDMsMTEgKzQzLDEzIEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIK
ICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91
cC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJBZ2Vu
dEltcGwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlNjcmlw
dERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2Ny
aXB0U3RhdGUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgpAQCAtMTI5LDYgKzEzMSw4MiBA
QCBwdWJsaWM6CiAgICAgfQogfTsKIAorY2xhc3MgQ2xpZW50TWVzc2FnZUxvb3BBZGFwdGVyIDog
cHVibGljIFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpDbGllbnRNZXNzYWdlTG9vcCB7Citw
dWJsaWM6CisgICAgc3RhdGljIHZvaWQgZW5zdXJlQ2xpZW50TWVzc2FnZUxvb3BDcmVhdGVkKFdl
YkRldlRvb2xzQWdlbnRDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIGlmIChzX2luc3Rh
bmNlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzX2luc3RhbmNlID0gbmV3IENsaWVu
dE1lc3NhZ2VMb29wQWRhcHRlcihjbGllbnQtPmNyZWF0ZUNsaWVudE1lc3NhZ2VMb29wKCkpOwor
ICAgICAgICBXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0Q2xpZW50TWVz
c2FnZUxvb3Aoc19pbnN0YW5jZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgaW5zcGVjdGVk
Vmlld0Nsb3NlZChXZWJWaWV3SW1wbCogdmlldykKKyAgICB7CisgICAgICAgIHNfaW5zdGFuY2Ut
Pm1fZnJvemVuVmlld3MucmVtb3ZlKHZpZXcpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDbGll
bnRNZXNzYWdlTG9vcEFkYXB0ZXIoUGFzc093blB0cjxXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRD
bGllbnQ6OkNsaWVudE1lc3NhZ2VMb29wPiBtZXNzYWdlTG9vcCkKKyAgICAgICAgOiBtX3J1bm5p
bmcoZmFsc2UpCisgICAgICAgICwgbV9tZXNzYWdlTG9vcChtZXNzYWdlTG9vcCkgeyB9CisKKwor
ICAgIHZpcnR1YWwgdm9pZCBydW4oUGFnZSogcGFnZSkKKyAgICB7CisgICAgICAgIGlmIChtX3J1
bm5pbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fcnVubmluZyA9IHRydWU7CisK
KyAgICAgICAgVmVjdG9yPFdlYlZpZXdJbXBsKj4gdmlld3M7CisKKyAgICAgICAgLy8gMS4gRGlz
YWJsZSBpbnB1dCBldmVudHMuCisgICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSAgcGFnZS0+Z3JvdXAoKS5wYWdlcygpLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hT
ZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9ICBwYWdlLT5ncm91cCgpLnBhZ2VzKCkuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBXZWJWaWV3SW1wbCogdmlldyA9
IFdlYlZpZXdJbXBsOjpmcm9tUGFnZSgqaXQpOworICAgICAgICAgICAgbV9mcm96ZW5WaWV3cy5h
ZGQodmlldyk7CisgICAgICAgICAgICB2aWV3cy5hcHBlbmQodmlldyk7CisgICAgICAgICAgICB2
aWV3LT5zZXRJZ25vcmVJbnB1dEV2ZW50cyh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IDIuIERpc2FibGUgYWN0aXZlIG9iamVjdHMKKyAgICAgICAgV2ViVmlldzo6d2lsbEVudGVyTW9k
YWxMb29wKCk7CisKKyAgICAgICAgLy8gMy4gUHJvY2VzcyBtZXNzYWdlcyB1bnRpbCBxdWl0Tm93
IGlzIGNhbGxlZC4KKyAgICAgICAgbV9tZXNzYWdlTG9vcC0+cnVuKCk7CisKKyAgICAgICAgLy8g
NC4gUmVzdW1lIGFjdGl2ZSBvYmplY3RzCisgICAgICAgIFdlYlZpZXc6OmRpZEV4aXRNb2RhbExv
b3AoKTsKKworICAgICAgICAvLyA1LiBSZXN1bWUgaW5wdXQgZXZlbnRzLgorICAgICAgICBmb3Ig
KFZlY3RvcjxXZWJWaWV3SW1wbCo+OjppdGVyYXRvciBpdCA9IHZpZXdzLmJlZ2luKCk7IGl0ICE9
IHZpZXdzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAobV9mcm96ZW5WaWV3cy5jb250
YWlucygqaXQpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHZpZXcgd2FzIG5vdCBjbG9zZWQg
ZHVyaW5nIHRoZSBkaXNwYXRjaC4KKyAgICAgICAgICAgICAgICAoKml0KS0+c2V0SWdub3JlSW5w
dXRFdmVudHMoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
Ni4gQWxsIHZpZXdzIGhhdmUgYmVlbiByZXN1bWVkLCBjbGVhciB0aGUgc2V0LgorICAgICAgICBt
X2Zyb3plblZpZXdzLmNsZWFyKCk7CisKKyAgICAgICAgbV9ydW5uaW5nID0gZmFsc2U7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIHF1aXROb3coKQorICAgIHsKKyAgICAgICAgbV9tZXNzYWdl
TG9vcC0+cXVpdE5vdygpOworICAgIH0KKworICAgIGJvb2wgbV9ydW5uaW5nOworICAgIE93blB0
cjxXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRDbGllbnQ6OkNsaWVudE1lc3NhZ2VMb29wPiBtX21l
c3NhZ2VMb29wOworICAgIHR5cGVkZWYgSGFzaFNldDxXZWJWaWV3SW1wbCo+IEZyb3plblZpZXdz
U2V0OworICAgIEZyb3plblZpZXdzU2V0IG1fZnJvemVuVmlld3M7CisgICAgc3RhdGljIENsaWVu
dE1lc3NhZ2VMb29wQWRhcHRlciogc19pbnN0YW5jZTsKKworfTsKKworQ2xpZW50TWVzc2FnZUxv
b3BBZGFwdGVyKiBDbGllbnRNZXNzYWdlTG9vcEFkYXB0ZXI6OnNfaW5zdGFuY2UgPSAwOworCiB9
IC8vICBuYW1lc3BhY2UKIAogV2ViRGV2VG9vbHNBZ2VudEltcGw6OldlYkRldlRvb2xzQWdlbnRJ
bXBsKApAQCAtMTQ5LDYgKzIyNyw3IEBAIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpXZWJEZXZUb29s
c0FnZW50SW1wbCgKIFdlYkRldlRvb2xzQWdlbnRJbXBsOjp+V2ViRGV2VG9vbHNBZ2VudEltcGwo
KQogewogICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpvbldlYlZpZXdDbG9zZWQobV93ZWJWaWV3
SW1wbCk7CisgICAgQ2xpZW50TWVzc2FnZUxvb3BBZGFwdGVyOjppbnNwZWN0ZWRWaWV3Q2xvc2Vk
KG1fd2ViVmlld0ltcGwpOwogICAgIGRpc3Bvc2VVdGlsaXR5Q29udGV4dCgpOwogfQogCkBAIC0x
NjQsNiArMjQzLDExIEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmF0dGFjaCgpCiB7CiAg
ICAgaWYgKG1fYXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShWOF9TQ1JJ
UFRfREVCVUdfU0VSVkVSKQorICAgIENsaWVudE1lc3NhZ2VMb29wQWRhcHRlcjo6ZW5zdXJlQ2xp
ZW50TWVzc2FnZUxvb3BDcmVhdGVkKG1fY2xpZW50KTsKKyNlbmRpZgorCiAgICAgbV9kZWJ1Z2dl
ckFnZW50SW1wbC5zZXQoCiAgICAgICAgIG5ldyBEZWJ1Z2dlckFnZW50SW1wbChtX3dlYlZpZXdJ
bXBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWJ1Z2dlckFnZW50RGVsZWdh
dGVTdHViLmdldCgpLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dl
clNjcmlwdC5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMKaW5k
ZXggN2M0ZDEyNi4uN2U1YjQzMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9E
ZWJ1Z2dlclNjcmlwdC5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2Ny
aXB0LmpzCkBAIC00Myw5ICs0Myw5IEBAIERlYnVnZ2VyU2NyaXB0Ll9wYXVzZU9uRXhjZXB0aW9u
c1N0YXRlID0gRGVidWdnZXJTY3JpcHQuUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZS5ECiBEZWJ1Zy5j
bGVhckJyZWFrT25FeGNlcHRpb24oKTsKIERlYnVnLmNsZWFyQnJlYWtPblVuY2F1Z2h0RXhjZXB0
aW9uKCk7CiAKLURlYnVnZ2VyU2NyaXB0LmdldEFmdGVyQ29tcGlsZVNjcmlwdCA9IGZ1bmN0aW9u
KGV4ZWNTdGF0ZSwgYXJncykKK0RlYnVnZ2VyU2NyaXB0LmdldEFmdGVyQ29tcGlsZVNjcmlwdCA9
IGZ1bmN0aW9uKGV2ZW50RGF0YSkKIHsKLSAgICByZXR1cm4gRGVidWdnZXJTY3JpcHQuX2Zvcm1h
dFNjcmlwdChhcmdzLmV2ZW50RGF0YS5zY3JpcHRfLnNjcmlwdF8pOworICAgIHJldHVybiBEZWJ1
Z2dlclNjcmlwdC5fZm9ybWF0U2NyaXB0KGV2ZW50RGF0YS5zY3JpcHRfLnNjcmlwdF8pOwogfQog
CiBEZWJ1Z2dlclNjcmlwdC5nZXRTY3JpcHRzID0gZnVuY3Rpb24oY29udGV4dERhdGEpCkBAIC0x
MzcsMTcgKzEzNywxNyBAQCBEZWJ1Z2dlclNjcmlwdC5jdXJyZW50Q2FsbEZyYW1lID0gZnVuY3Rp
b24oZXhlY1N0YXRlLCBhcmdzKQogICAgIHJldHVybiB0b3BGcmFtZTsKIH0KIAotRGVidWdnZXJT
Y3JpcHQuc3RlcEludG9TdGF0ZW1lbnQgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCitEZWJ1
Z2dlclNjcmlwdC5zdGVwSW50b1N0YXRlbWVudCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSkKIHsKICAg
ICBleGVjU3RhdGUucHJlcGFyZVN0ZXAoRGVidWcuU3RlcEFjdGlvbi5TdGVwSW4sIDEpOwogfQog
Ci1EZWJ1Z2dlclNjcmlwdC5zdGVwT3ZlclN0YXRlbWVudCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwg
YXJncykKK0RlYnVnZ2VyU2NyaXB0LnN0ZXBPdmVyU3RhdGVtZW50ID0gZnVuY3Rpb24oZXhlY1N0
YXRlKQogewogICAgIGV4ZWNTdGF0ZS5wcmVwYXJlU3RlcChEZWJ1Zy5TdGVwQWN0aW9uLlN0ZXBO
ZXh0LCAxKTsKIH0KIAotRGVidWdnZXJTY3JpcHQuc3RlcE91dE9mRnVuY3Rpb24gPSBmdW5jdGlv
bihleGVjU3RhdGUsIGFyZ3MpCitEZWJ1Z2dlclNjcmlwdC5zdGVwT3V0T2ZGdW5jdGlvbiA9IGZ1
bmN0aW9uKGV4ZWNTdGF0ZSkKIHsKICAgICBleGVjU3RhdGUucHJlcGFyZVN0ZXAoRGVidWcuU3Rl
cEFjdGlvbi5TdGVwT3V0LCAxKTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
anMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0lu
c3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCmluZGV4IDVjM2U4YmQuLjU4YzZkMGMgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcwpAQCAt
OTQsNyArOTQsNiBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbCA9IGZ1bmN0aW9uKCkK
ICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZW1vdmVCcmVh
a3BvaW50Iik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygi
YWN0aXZhdGVCcmVha3BvaW50cyIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xs
ZXJEZWxlZ2F0ZV8oImRlYWN0aXZhdGVCcmVha3BvaW50cyIpOwotICAgIHRoaXMuaW5zdGFsbElu
c3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInBhdXNlSW5EZWJ1Z2dlciIpOwogICAgIHRoaXMu
aW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInJlc3VtZURlYnVnZ2VyIik7CiAg
ICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic3RlcEludG9TdGF0
ZW1lbnRJbkRlYnVnZ2VyIik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRl
bGVnYXRlXygic3RlcE91dE9mRnVuY3Rpb25JbkRlYnVnZ2VyIik7CkBAIC0yMTcsNiArMjE2LDEz
IEBAIGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zZXRQYXVzZU9uRXhj
ZXB0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKQogICAgIHJldHVybiBkZXZ0b29scy50b29scy5nZXRE
ZWJ1Z2dlckFnZW50KCkuc2V0UGF1c2VPbkV4Y2VwdGlvbnModmFsdWUpOwogfTsKIAorfSBlbHNl
IHsKKworZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnBhdXNlSW5EZWJ1
Z2dlciA9IGZ1bmN0aW9uKCkKK3sKKyAgICBSZW1vdGVEZWJ1Z2dlckNvbW1hbmRFeGVjdXRvci5E
ZWJ1Z2dlclBhdXNlU2NyaXB0KCk7Cit9OworCiB9CiAKIAo=
</data>
<flag name="review"
          id="41361"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56999</attachid>
            <date>2010-05-25 03:05:27 -0700</date>
            <delta_ts>2010-05-25 03:05:27 -0700</delta_ts>
            <desc>patch that I&apos;m going to land</desc>
            <filename>nested-loop4.patch</filename>
            <type>text/plain</type>
            <size>35136</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzQ5MzE3NS4uNWUyYjY1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMC0wNS0yNCAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlciBpcyBub3cgaW1wbGVtZW50ZWQg
YXMgRGVidWdFdmVudExpc3RlbmVyIHdoaWNoIG1lYW5zIGl0IGRvZXNuJ3QKKyAgICAgICAgZGVw
ZW5kIG9uIHY4IGRlYnVnZ2luZyBwcm90b2NvbCwgaW5zdGVhZCBpdCB1c2VzIEV4ZWNTdGF0ZSB0
byBjb2xsZWN0IGRlYnVnZ2luZworICAgICAgICBpbmZvIGFuZCBwYXNzIGl0IHRvIHRoZSBsaXN0
ZW5lcnMuCisKKyAgICAgICAgTmV3IGltcGxlbWVudGF0aW9uIG9mIFNjcmlwdERlYnVnU2VydmVy
IHVzZXMgbWV0aG9kcyBwcm92aWRlZCBieSBjbGllbnQgdG8gZGlzcGF0Y2gKKyAgICAgICAgaXRz
IG1lc3NhZ2VzIHdoaWxlIEpTIGlzIHBhdXNlZChwcmV2aW91c2x5IHRoZSBtZXNzYWdlcyB3YXMg
ZGlzcGF0Y2hlZCBpbiBhIGNhbGxiYWNrCisgICAgICAgIHBhc3NlZCB0byB2OCBhbG9uZyB3aXRo
IERlYnVnRXZlbnRIYW5kbGVyKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzk1OTQKKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVn
U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRj
aERpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRj
aERpZENvbnRpbnVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNw
YXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMpOiBDaGFuZ2VkIG1ldGhvZCBzaWduYXR1cmUgdG8gYWxs
b3cKKyAgICAgICAgaW52b2NhdGlvbiBvZiBTY3JpcHREZWJ1Z0xpc3RlbmVyIG1ldGhvZHMgdGhh
dCBoYXZlIG5vbi1lbXB0eSBhcmd1bWVudCBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdERlYnVnU2VydmVyOjpyZW1vdmVMaXN0ZW5lcik6IEV4ZWN1dGlvbiBpcyByZXN1bWVkKG5l
c3RlZCBtZXNzYWdlIGxvb3AgaXMgdGVybWluYXRlZCkgd2hlbgorICAgICAgICBjb3JyZXNwb25k
aW5nIGRlYnVnZ2VyIHdpbmRvdyBjbG9zZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y29udGludWVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjpzdGVwSW50b1N0YXRlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcE92ZXJTdGF0ZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBPdXRPZkZ1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjp2OERlYnVnRXZlbnRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z0V2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaWRSZXN1bWUpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6Q2xpZW50TWVzc2FnZUxvb3A6On5DbGllbnRNZXNzYWdlTG9vcCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0Q2xpZW50TWVzc2FnZUxvb3ApOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhdXNlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHREZWJ1
Z0xpc3RlbmVyLmg6IENoYW5nZWQgZGlkUGF1c2Ugc2lnbmF0dXJlIHRvIGV4cGxpY2l0bHkgcGFz
cyBTY3JpcHRTdGF0ZQorICAgICAgICB3aGVyZSBleGVjdXRpb24gaXMgcGF1c2VkLgorCiAyMDEw
LTA1LTI1ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBGaXggdGhl
IEdUSysgYnVpbGQsIFBsdWdpbkluZm9TdG9yZSB3YXMgcmVtb3ZlZC4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggOGY0NzZiNC4uOTRkN2U3MyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTI0NSwxMSArMjQ1LDE2
IEBAIEphdmFTY3JpcHRDYWxsRnJhbWUqIFNjcmlwdERlYnVnU2VydmVyOjpjdXJyZW50Q2FsbEZy
YW1lKCkKICAgICByZXR1cm4gbV9jdXJyZW50Q2FsbEZyYW1lLmdldCgpOwogfQogCi1TY3JpcHRT
dGF0ZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVTdGF0ZSgpCit2b2lkIFNj
cmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhdXNlKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxp
c3RlbmVyKQogewotICAgIGlmICghbV9wYXVzZWQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBtX2N1cnJlbnRDYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7ICAgICAgICAKKyAgICBBU1NFUlQobV9wYXVzZWQpOworICAgIFNjcmlwdFN0YXRl
KiBzdGF0ZSA9IG1fY3VycmVudENhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsgICAgICAgIAorICAgIGxpc3RlbmVyLT5kaWRQYXVzZShzdGF0ZSk7Cit9
CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkQ29udGludWUoU2NyaXB0RGVi
dWdMaXN0ZW5lciogbGlzdGVuZXIpCit7CisgICAgbGlzdGVuZXItPmRpZENvbnRpbnVlKCk7CiB9
CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFyc2VTb3VyY2UoY29uc3Qg
TGlzdGVuZXJTZXQmIGxpc3RlbmVycywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UpCkBA
IC0zMzUsNyArMzQwLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hGdW5jdGlv
blRvTGlzdGVuZXJzKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMKICAgICBWZWN0b3I8U2Ny
aXB0RGVidWdMaXN0ZW5lcio+IGNvcHk7CiAgICAgY29weVRvVmVjdG9yKGxpc3RlbmVycywgY29w
eSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3B5LnNpemUoKTsgKytpKQotICAgICAg
ICAoY29weVtpXS0+KmNhbGxiYWNrKSgpOworICAgICAgICAodGhpcy0+KmNhbGxiYWNrKShjb3B5
W2ldKTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hGdW5jdGlvblRvTGlz
dGVuZXJzKEphdmFTY3JpcHRFeGVjdXRpb25DYWxsYmFjayBjYWxsYmFjaywgUGFnZSogcGFnZSkK
QEAgLTQzMSw3ICs0MzYsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpwYXVzZUlmTmVlZGVk
KFBhZ2UqIHBhZ2UpCiAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IGZhbHNlOwogICAgIG1f
cGF1c2VkID0gdHJ1ZTsKIAotICAgIGRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycygmU2NyaXB0
RGVidWdMaXN0ZW5lcjo6ZGlkUGF1c2UsIHBhZ2UpOworICAgIGRpc3BhdGNoRnVuY3Rpb25Ub0xp
c3RlbmVycygmU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UsIHBhZ2UpOwogCiAg
ICAgc2V0SmF2YVNjcmlwdFBhdXNlZChwYWdlLT5ncm91cCgpLCB0cnVlKTsKIApAQCAtNDQ2LDcg
KzQ1MSw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQoUGFnZSogcGFn
ZSkKIAogICAgIG1fcGF1c2VkID0gZmFsc2U7CiAKLSAgICBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0
ZW5lcnMoJlNjcmlwdERlYnVnTGlzdGVuZXI6OmRpZENvbnRpbnVlLCBwYWdlKTsKKyAgICBkaXNw
YXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoJlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZENv
bnRpbnVlLCBwYWdlKTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y2FsbEV2ZW50KGNv
bnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgaW50cHRyX3Qgc291cmNl
SUQsIGludCBsaW5lTnVtYmVyKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5o
CmluZGV4IDQ3NDA1ODUuLmNmYWRhMjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVn
U2VydmVyLmgKQEAgLTM0LDcgKzM0LDYgQEAKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiU2NyaXB0QnJlYWtwb2ludC5oIgotI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgi
CiAjaW5jbHVkZSAiVGltZXIuaCIKIAogI2luY2x1ZGUgPGRlYnVnZ2VyL0RlYnVnZ2VyLmg+CkBA
IC04NiwxMyArODUsMTIgQEAgcHVibGljOgogICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlv
bnMoVGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+KiA9IDApOwogCiAgICAgSmF2YVNjcmlwdENhbGxG
cmFtZSogY3VycmVudENhbGxGcmFtZSgpOwotICAgIFNjcmlwdFN0YXRlKiBjdXJyZW50Q2FsbEZy
YW1lU3RhdGUoKTsKIAogICAgIHZvaWQgcGFnZUNyZWF0ZWQoUGFnZSopOwogCiBwcml2YXRlOgog
ICAgIHR5cGVkZWYgSGFzaFNldDxTY3JpcHREZWJ1Z0xpc3RlbmVyKj4gTGlzdGVuZXJTZXQ7Ci0g
ICAgdHlwZWRlZiB2b2lkIChTY3JpcHREZWJ1Z0xpc3RlbmVyOjoqSmF2YVNjcmlwdEV4ZWN1dGlv
bkNhbGxiYWNrKSgpOworICAgIHR5cGVkZWYgdm9pZCAoU2NyaXB0RGVidWdTZXJ2ZXI6OipKYXZh
U2NyaXB0RXhlY3V0aW9uQ2FsbGJhY2spKFNjcmlwdERlYnVnTGlzdGVuZXIqKTsKIAogICAgIFNj
cmlwdERlYnVnU2VydmVyKCk7CiAgICAgflNjcmlwdERlYnVnU2VydmVyKCk7CkBAIC0xMDksNiAr
MTA3LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJz
KEphdmFTY3JpcHRFeGVjdXRpb25DYWxsYmFjaywgUGFnZSopOwogICAgIHZvaWQgZGlzcGF0Y2hG
dW5jdGlvblRvTGlzdGVuZXJzKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIEphdmFTY3Jp
cHRFeGVjdXRpb25DYWxsYmFjayBjYWxsYmFjayk7CisgICAgdm9pZCBkaXNwYXRjaERpZFBhdXNl
KFNjcmlwdERlYnVnTGlzdGVuZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoRGlkQ29udGludWUoU2Ny
aXB0RGVidWdMaXN0ZW5lciopOwogICAgIHZvaWQgZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShjb25z
dCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSk7
CiAgICAgdm9pZCBkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQm
IGxpc3RlbmVycywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIGludCBlcnJvckxpbmUs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dERlYnVnU2VydmVyLmNwcAppbmRleCBjZTI1OGZiLi4wYzMzYmVmIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtNDQsNyArNDQsMjIgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1TY3JpcHREZWJ1Z1NlcnZlcjo6TWVzc2FnZUxvb3BEaXNwYXRjaEhh
bmRsZXIgU2NyaXB0RGVidWdTZXJ2ZXI6OnNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgPSAw
Oworc3RhdGljIEZyYW1lKiByZXRyaWV2ZUZyYW1lKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNv
bnRleHQpCit7CisgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIC8vIFRlc3QgdGhhdCBjb250ZXh0IGhhcyBhc3NvY2lhdGVkIGdsb2JhbCBkb20gd2lu
ZG93IG9iamVjdC4KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGNvbnRleHQt
Pkdsb2JhbCgpOworICAgIGlmIChnbG9iYWwuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGdsb2JhbCA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOERPTVdpbmRv
dzo6R2V0VGVtcGxhdGUoKSwgZ2xvYmFsKTsKKyAgICBpZiAoZ2xvYmFsLklzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gVjhQcm94eTo6cmV0cmlldmVGcmFtZShjb250
ZXh0KTsKK30KIAogU2NyaXB0RGVidWdTZXJ2ZXImIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQo
KQogewpAQCAtNTQsNyArNjksNyBAQCBTY3JpcHREZWJ1Z1NlcnZlciYgU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpCiAKIFNjcmlwdERlYnVnU2VydmVyOjpTY3JpcHREZWJ1Z1NlcnZlcigpCiAg
ICAgOiBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUoRG9udFBhdXNlT25FeGNlcHRpb25zKQotICAg
ICwgbV9jdXJyZW50Q2FsbEZyYW1lU3RhdGUoMCkKKyAgICAsIG1fcGF1c2VkUGFnZSgwKQogewog
fQogCkBAIC03Myw4ICs4OCw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVy
KFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlKQogICAgIGlmICghbV9s
aXN0ZW5lcnNNYXAuc2l6ZSgpKSB7CiAgICAgICAgIGVuc3VyZURlYnVnZ2VyU2NyaXB0Q29tcGls
ZWQoKTsKICAgICAgICAgQVNTRVJUKCFtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5Jc1VuZGVmaW5l
ZCgpKTsKLSAgICAgICAgdjg6OkRlYnVnOjpTZXRNZXNzYWdlSGFuZGxlcjIoJlNjcmlwdERlYnVn
U2VydmVyOjpvblY4RGVidWdNZXNzYWdlKTsKLSAgICAgICAgdjg6OkRlYnVnOjpTZXRIb3N0RGlz
cGF0Y2hIYW5kbGVyKCZTY3JpcHREZWJ1Z1NlcnZlcjo6b25WOERlYnVnSG9zdERpc3BhdGNoLCAx
MDAgLyogbXMgKi8pOworICAgICAgICB2ODo6RGVidWc6OlNldERlYnVnRXZlbnRMaXN0ZW5lcjIo
JlNjcmlwdERlYnVnU2VydmVyOjp2OERlYnVnRXZlbnRDYWxsYmFjayk7CiAgICAgfQogICAgIG1f
bGlzdGVuZXJzTWFwLnNldChwYWdlLCBsaXN0ZW5lcik7CiAgICAgVjhQcm94eSogcHJveHkgPSBW
OFByb3h5OjpyZXRyaWV2ZShwYWdlLT5tYWluRnJhbWUoKSk7CkBAIC05NywxNyArMTExLDE0IEBA
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVu
ZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlCiAgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5jb250YWlu
cyhwYWdlKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fcGF1c2VkUGFnZSA9PSBwYWdl
KQorICAgICAgICBjb250aW51ZVByb2dyYW0oKTsKKwogICAgIG1fbGlzdGVuZXJzTWFwLnJlbW92
ZShwYWdlKTsKIAotICAgIGlmIChtX2xpc3RlbmVyc01hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
djg6OkRlYnVnOjpTZXRNZXNzYWdlSGFuZGxlcjIoMCk7Ci0gICAgICAgIHY4OjpEZWJ1Zzo6U2V0
SG9zdERpc3BhdGNoSGFuZGxlcigwKTsKLSAgICB9CisgICAgaWYgKG1fbGlzdGVuZXJzTWFwLmlz
RW1wdHkoKSkKKyAgICAgICAgdjg6OkRlYnVnOjpTZXREZWJ1Z0V2ZW50TGlzdGVuZXIoMCk7CiAg
ICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgYnJlYWtwb2ludHMgc2V0IGJ5IHRoZSBhZ2VudC4KLSAg
ICAvLyBGSVhNRTogRm9yY2UgY29udGludWUgaWYgZGV0YWNoIGhhcHBlbmVkIGluIG5lc3N0ZWQg
bWVzc2FnZSBsb29wIHdoaWxlCi0gICAgLy8gZGVidWdnZXIgd2FzIHBhdXNlZCBvbiBhIGJyZWFr
cG9pbnQoYXMgbG9uZyBhcyB0aGVyZSBhcmUgb3RoZXIKLSAgICAvLyBhdHRhY2hlZCBhZ2VudHMg
djggd2lsbCB3YWl0IGZvciBleHBsaWNpdCdjb250aW51ZScgbWVzc2FnZSkuCi0gICAgLy8gRklY
TUU6IHNlbmQgY29udGludWUgY29tbWFuZCB0byB2OCBpZiBuZWNlc3Nhcnk7CiB9CiAKIHZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwg
dW5zaWduZWQgbGluZU51bWJlciwgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50KQpAQCAtMTUy
LDggKzE2Myw4IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNsZWFyQnJlYWtwb2ludHMoKQog
ICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gZGVidWdnZXJDb250ZXh0ID0gdjg6OkRlYnVnOjpH
ZXREZWJ1Z0NvbnRleHQoKTsKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGRl
YnVnZ2VyQ29udGV4dCk7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gc2V0QnJlYWtw
b2ludHNBY3RpdmF0ZWQgPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2Vy
U2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJjbGVhckJyZWFrcG9pbnRzIikpKTsK
LSAgICB2ODo6RGVidWc6OkNhbGwoc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQpOworICAgIHY4OjpI
YW5kbGU8djg6OkZ1bmN0aW9uPiBjbGVhckJyZWFrcG9pbnRzID0gdjg6OkxvY2FsPHY4OjpGdW5j
dGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygi
Y2xlYXJCcmVha3BvaW50cyIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxsKGNsZWFyQnJlYWtwb2lu
dHMpOwogI2VuZGlmCiB9CiAKQEAgLTE3OSw5ICsxOTAsOSBAQCBTY3JpcHREZWJ1Z1NlcnZlcjo6
UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2VPbkV4Y2VwdGlv
bnNTdAogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICB2ODo6Q29udGV4dDo6U2NvcGUg
Y29udGV4dFNjb3BlKHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCkpOwogCi0gICAgdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb24+IGN1cnJlbnRDYWxsRnJhbWVGdW5jdGlvbiA9IHY4OjpMb2NhbDx2
ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5n
OjpOZXcoInBhdXNlT25FeGNlcHRpb25zU3RhdGUiKSkpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uPiBmdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdn
ZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInBhdXNlT25FeGNlcHRpb25zU3Rh
dGUiKSkpOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7IHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpIH07Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IGN1cnJl
bnRDYWxsRnJhbWVGdW5jdGlvbi0+Q2FsbChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLCAwLCBhcmd2
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gZnVuY3Rpb24tPkNhbGwobV9k
ZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMCwgYXJndik7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNj
cmlwdERlYnVnU2VydmVyOjpQYXVzZU9uRXhjZXB0aW9uc1N0YXRlPihyZXN1bHQtPkludDMyVmFs
dWUoKSk7CiAjZWxzZQogICAgIHJldHVybiBEb250UGF1c2VPbkV4Y2VwdGlvbnM7CkBAIC0xOTUs
MTcgKzIwNiwxNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9u
c1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2VPbgogICAgIHY4OjpIYW5kbGVTY29w
ZSBzY29wZTsKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKHY4OjpEZWJ1Zzo6
R2V0RGVidWdDb250ZXh0KCkpOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGN1cnJl
bnRDYWxsRnJhbWVGdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVi
dWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInNldFBhdXNlT25FeGNlcHRp
b25zU3RhdGUiKSkpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRQYXVzZU9uRXhj
ZXB0aW9uc0Z1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dl
clNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygic2V0UGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSIpKSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgdjg6OkludDMy
OjpOZXcocGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSkgfTsKLSAgICBjdXJyZW50Q2FsbEZyYW1lRnVu
Y3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJndik7CisgICAgc2V0UGF1
c2VPbkV4Y2VwdGlvbnNGdW5jdGlvbi0+Q2FsbChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLCAxLCBh
cmd2KTsKICNlbmRpZgogfQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjb250aW51ZVByb2dy
YW0oKQogewogI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQotICAgIFN0cmluZyBj
bWQoIntcInNlcVwiOjEsXCJ0eXBlXCI6XCJyZXF1ZXN0XCIsXCJjb21tYW5kXCI6XCJjb250aW51
ZVwifSIpOwotICAgIHY4OjpEZWJ1Zzo6U2VuZENvbW1hbmQocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MTZfdCo+KGNtZC5jaGFyYWN0ZXJzKCkpLCBjbWQubGVuZ3RoKCksIG5ldyB2ODo6RGVi
dWc6OkNsaWVudERhdGEoKSk7CisgICAgaWYgKG1fcGF1c2VkUGFnZSkKKyAgICAgICAgbV9jbGll
bnRNZXNzYWdlTG9vcC0+cXVpdE5vdygpOwogICAgIGRpZFJlc3VtZSgpOwogI2VuZGlmCiB9CkBA
IC0yMTMsMzUgKzIyNCwzNiBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjb250aW51ZVByb2dy
YW0oKQogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcEludG9TdGF0ZW1lbnQoKQogewogI2lm
IEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQotICAgIFN0cmluZyBjbWQoIntcInNlcVwi
OjEsXCJ0eXBlXCI6XCJyZXF1ZXN0XCIsXCJjb21tYW5kXCI6XCJjb250aW51ZVwiLFwiYXJndW1l
bnRzXCI6e1wic3RlcGFjdGlvblwiOlwiaW5cIn19Iik7Ci0gICAgdjg6OkRlYnVnOjpTZW5kQ29t
bWFuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSks
IGNtZC5sZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsKLSAgICBkaWRSZXN1
bWUoKTsKKyAgICBBU1NFUlQobV9wYXVzZWRQYWdlKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj4gZnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2Vy
U2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJzdGVwSW50b1N0YXRlbWVudCIpKSk7
CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgbV9leGVjdXRpb25TdGF0ZS5n
ZXQoKSB9OworICAgIGZ1bmN0aW9uLT5DYWxsKG1fZGVidWdnZXJTY3JpcHQuZ2V0KCksIDEsIGFy
Z3YpOworICAgIGNvbnRpbnVlUHJvZ3JhbSgpOwogI2VuZGlmCiB9CiAKIHZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OnN0ZXBPdmVyU3RhdGVtZW50KCkKIHsKICNpZiBFTkFCTEUoVjhfU0NSSVBUX0RF
QlVHX1NFUlZFUikKLSAgICBTdHJpbmcgY21kKCJ7XCJzZXFcIjoxLFwidHlwZVwiOlwicmVxdWVz
dFwiLFwiY29tbWFuZFwiOlwiY29udGludWVcIixcImFyZ3VtZW50c1wiOntcInN0ZXBhY3Rpb25c
IjpcIm5leHRcIn19Iik7Ci0gICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwgbmV3
IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsKLSAgICBkaWRSZXN1bWUoKTsKKyAgICBBU1NFUlQo
bV9wYXVzZWRQYWdlKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSB2
ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5HZXQo
djg6OlN0cmluZzo6TmV3KCJzdGVwT3ZlclN0YXRlbWVudCIpKSk7CisgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgbV9leGVjdXRpb25TdGF0ZS5nZXQoKSB9OworICAgIGZ1bmN0
aW9uLT5DYWxsKG1fZGVidWdnZXJTY3JpcHQuZ2V0KCksIDEsIGFyZ3YpOworICAgIGNvbnRpbnVl
UHJvZ3JhbSgpOwogI2VuZGlmCiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBPdXRP
ZkZ1bmN0aW9uKCkKIHsKICNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKLSAgICBT
dHJpbmcgY21kKCJ7XCJzZXFcIjoxLFwidHlwZVwiOlwicmVxdWVzdFwiLFwiY29tbWFuZFwiOlwi
Y29udGludWVcIixcImFyZ3VtZW50c1wiOntcInN0ZXBhY3Rpb25cIjpcIm91dFwifX0iKTsKLSAg
ICB2ODo6RGVidWc6OlNlbmRDb21tYW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3Qq
PihjbWQuY2hhcmFjdGVycygpKSwgY21kLmxlbmd0aCgpLCBuZXcgdjg6OkRlYnVnOjpDbGllbnRE
YXRhKCkpOwotICAgIGRpZFJlc3VtZSgpOworICAgIEFTU0VSVChtX3BhdXNlZFBhZ2UpOworICAg
IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rp
b24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInN0
ZXBPdXRPZkZ1bmN0aW9uIikpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0g
eyBtX2V4ZWN1dGlvblN0YXRlLmdldCgpIH07CisgICAgZnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dl
clNjcmlwdC5nZXQoKSwgMSwgYXJndik7CisgICAgY29udGludWVQcm9ncmFtKCk7CiAjZW5kaWYK
IH0KIAotU2NyaXB0U3RhdGUqIFNjcmlwdERlYnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lU3Rh
dGUoKQotewotICAgIHJldHVybiBtX2N1cnJlbnRDYWxsRnJhbWVTdGF0ZTsKLX0KLQogUGFzc1Jl
ZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBTY3JpcHREZWJ1Z1NlcnZlcjo6Y3VycmVudENhbGxG
cmFtZSgpCiB7CiAgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpIHsKQEAgLTI1Myw4MyArMjY1
LDQ4IEBAIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gU2NyaXB0RGVidWdTZXJ2ZXI6
OmN1cnJlbnRDYWxsRnJhbWUoKQogICAgIHJldHVybiBtX2N1cnJlbnRDYWxsRnJhbWU7CiB9CiAK
LXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UoY29uc3Qgdjg6OkRlYnVn
OjpNZXNzYWdlJiBtZXNzYWdlKQotewotICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5o
YW5kbGVWOERlYnVnTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6b25WOERlYnVnSG9zdERpc3BhdGNoKCkKLXsKLSAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hh
cmVkKCkuaGFuZGxlVjhEZWJ1Z0hvc3REaXNwYXRjaCgpOwotfQotCi12b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpoYW5kbGVWOERlYnVnSG9zdERpc3BhdGNoKCkKKyNpZiBFTkFCTEUoVjhfU0NSSVBU
X0RFQlVHX1NFUlZFUikKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnY4RGVidWdFdmVudENhbGxi
YWNrKGNvbnN0IHY4OjpEZWJ1Zzo6RXZlbnREZXRhaWxzJiBldmVudERldGFpbHMpCiB7Ci0gICAg
aWYgKCFzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBWZWN0b3I8V2ViQ29yZTo6UGFnZSo+IHBhZ2VzOwotICAgIGZvciAoTGlzdGVuZXJzTWFwOjpp
dGVyYXRvciBpdCA9IG1fbGlzdGVuZXJzTWFwLmJlZ2luKCk7IGl0ICE9IG1fbGlzdGVuZXJzTWFw
LmVuZCgpOyArK2l0KQotICAgICAgICBwYWdlcy5hcHBlbmQoaXQtPmZpcnN0KTsKLSAgICAKLSAg
ICBzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKHBhZ2VzKTsKKyAgICBTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2hhcmVkKCkuaGFuZGxlVjhEZWJ1Z0V2ZW50KGV2ZW50RGV0YWlscyk7CiB9CiAKLXZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZVY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1
Zzo6TWVzc2FnZSYgbWVzc2FnZSkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZVY4RGVi
dWdFdmVudChjb25zdCB2ODo6RGVidWc6OkV2ZW50RGV0YWlscyYgZXZlbnREZXRhaWxzKQogewot
ICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLQotICAgIGlmICghbWVzc2FnZS5Jc0V2ZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElnbm9yZSB1bnN1cHBvcnRlZCBldmVudCB0eXBl
cy4KLSAgICBpZiAobWVzc2FnZS5HZXRFdmVudCgpICE9IHY4OjpBZnRlckNvbXBpbGUgJiYgbWVz
c2FnZS5HZXRFdmVudCgpICE9IHY4OjpCcmVhayAmJiBtZXNzYWdlLkdldEV2ZW50KCkgIT0gdjg6
OkV4Y2VwdGlvbikKKyAgICB2ODo6RGVidWdFdmVudCBldmVudCA9IGV2ZW50RGV0YWlscy5HZXRF
dmVudCgpOworICAgIGlmIChldmVudCAhPSB2ODo6QnJlYWsgJiYgZXZlbnQgIT0gdjg6OkV4Y2Vw
dGlvbiAmJiBldmVudCAhPSB2ODo6QWZ0ZXJDb21waWxlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gbWVzc2FnZS5HZXRFdmVudENvbnRl
eHQoKTsKLSAgICAvLyBJZiB0aGUgY29udGV4dCBpcyBmcm9tIG9uZSBvZiB0aGUgaW5wZWN0ZWQg
dGFicyBpdCBzaG91bGQgaGF2ZSBpdHMgY29udGV4dAotICAgIC8vIGRhdGEuIFNraXAgZXZlbnRz
IGZyb20gdW5rbm93biBjb250ZXh0cy4KLSAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBldmVudENvbnRleHQgPSBl
dmVudERldGFpbHMuR2V0RXZlbnRDb250ZXh0KCk7CisgICAgQVNTRVJUKCFldmVudENvbnRleHQu
SXNFbXB0eSgpKTsKIAotICAgIC8vIFRlc3QgdGhhdCBjb250ZXh0IGhhcyBhc3NvY2lhdGVkIGds
b2JhbCBkb20gd2luZG93IG9iamVjdC4KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2Jh
bCA9IGNvbnRleHQtPkdsb2JhbCgpOwotICAgIGlmIChnbG9iYWwuSXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnbG9iYWwgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIo
VjhET01XaW5kb3c6OkdldFRlbXBsYXRlKCksIGdsb2JhbCk7Ci0gICAgaWYgKGdsb2JhbC5Jc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAg
IEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWUoY29udGV4dCk7CisgICAgRnJh
bWUqIGZyYW1lID0gcmV0cmlldmVGcmFtZShldmVudENvbnRleHQpOwogICAgIGlmIChmcmFtZSkg
ewogICAgICAgICBTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciA9IG1fbGlzdGVuZXJzTWFw
LmdldChmcmFtZS0+cGFnZSgpKTsKICAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAg
ICBpZiAobWVzc2FnZS5HZXRFdmVudCgpID09IHY4OjpBZnRlckNvbXBpbGUpIHsKLSAgICAgICAg
ICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHY4OjpIYW5kbGVTY29wZSBzY29w
ZTsKKyAgICAgICAgICAgIGlmIChldmVudCA9PSB2ODo6QWZ0ZXJDb21waWxlKSB7CiAgICAgICAg
ICAgICAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZSh2ODo6RGVidWc6OkdldERl
YnVnQ29udGV4dCgpKTsKLSAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gYXJn
cyA9IHY4OjpPYmplY3Q6Ok5ldygpOwotICAgICAgICAgICAgICAgIGFyZ3MtPlNldCh2ODo6U3Ry
aW5nOjpOZXcoImV2ZW50RGF0YSIpLCBtZXNzYWdlLkdldEV2ZW50RGF0YSgpKTsKICAgICAgICAg
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gb25BZnRlckNvbXBpbGVGdW5jdGlvbiA9
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdl
dCh2ODo6U3RyaW5nOjpOZXcoImdldEFmdGVyQ29tcGlsZVNjcmlwdCIpKSk7Ci0gICAgICAgICAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgbWVzc2FnZS5HZXRFeGVjdXRp
b25TdGF0ZSgpLCBhcmdzIH07Ci0gICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlID0gb25BZnRlckNvbXBpbGVGdW5jdGlvbi0+Q2FsbChtX2RlYnVnZ2VyU2NyaXB0Lmdl
dCgpLCAyLCBhcmd2KTsKKyAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJn
dltdID0geyBldmVudERldGFpbHMuR2V0RXZlbnREYXRhKCkgfTsKKyAgICAgICAgICAgICAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBvbkFmdGVyQ29tcGlsZUZ1bmN0aW9uLT5DYWxs
KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCksIDEsIGFyZ3YpOwogICAgICAgICAgICAgICAgIEFTU0VS
VCh2YWx1ZS0+SXNPYmplY3QoKSk7CiAgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBvYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKTsKICAgICAg
ICAgICAgICAgICBkaXNwYXRjaERpZFBhcnNlU291cmNlKGxpc3RlbmVyLCBvYmplY3QpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLkdldEV2ZW50KCkgPT0gdjg6OkJyZWFrIHx8IG1l
c3NhZ2UuR2V0RXZlbnQoKSA9PSB2ODo6RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgaGFu
ZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbV9leGVjdXRpb25TdGF0ZS5zZXQobWVzc2Fn
ZS5HZXRFeGVjdXRpb25TdGF0ZSgpKTsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRDYWxsRnJh
bWVTdGF0ZSA9IG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZyYW1lKTsKLSAgICAgICAgICAgICAgICBs
aXN0ZW5lci0+ZGlkUGF1c2UoKTsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRDYWxsRnJhbWVT
dGF0ZSA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IHY4OjpCcmVhayB8fCBl
dmVudCA9PSB2ODo6RXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgbV9leGVjdXRpb25TdGF0
ZS5zZXQoZXZlbnREZXRhaWxzLkdldEV4ZWN1dGlvblN0YXRlKCkpOworICAgICAgICAgICAgICAg
IG1fcGF1c2VkUGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgICAgICAgICAgICAgU2NyaXB0U3Rh
dGUqIGN1cnJlbnRDYWxsRnJhbWVTdGF0ZSA9IG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZyYW1lKTsK
KyAgICAgICAgICAgICAgICBsaXN0ZW5lci0+ZGlkUGF1c2UoY3VycmVudENhbGxGcmFtZVN0YXRl
KTsKKworICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIGNvbnRpbnVlIG9yIHN0ZXAgY29tbWFu
ZC4KKyAgICAgICAgICAgICAgICBtX2NsaWVudE1lc3NhZ2VMb29wLT5ydW4obV9wYXVzZWRQYWdl
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fcGF1c2VkUGFnZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBpZiAoIWhhbmRsZWQgJiYgIW1lc3NhZ2UuV2lsbFN0
YXJ0UnVubmluZygpKQotICAgICAgICBjb250aW51ZVByb2dyYW0oKTsKIH0KKyNlbmRpZgogCiB2
b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhcnNlU291cmNlKFNjcmlwdERlYnVn
TGlzdGVuZXIqIGxpc3RlbmVyLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKIHsKQEAg
LTM1NCw2ICszMzEsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaWRSZXN1bWUoKQogewog
ICAgIG1fY3VycmVudENhbGxGcmFtZS5jbGVhcigpOwogICAgIG1fZXhlY3V0aW9uU3RhdGUuY2xl
YXIoKTsKKyAgICBtX3BhdXNlZFBhZ2UgPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKaW5kZXggNmVmMGFmZC4uN2M4
YzVjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtMzYsMTIg
KzM2LDEyIEBACiAjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0QnJlYWtwb2ludC5oIgotI2luY2x1ZGUg
IlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSA8djgtZGVidWcuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzcsMTUgKzc3LDE4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpIHsgfQogICAgIHZvaWQgcmVjb21waWxl
QWxsSlNGdW5jdGlvbnMoVGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+KiA9IDApIHsgfQogCi0gICAg
U2NyaXB0U3RhdGUqIGN1cnJlbnRDYWxsRnJhbWVTdGF0ZSgpOwotCiAgICAgdm9pZCBwYWdlQ3Jl
YXRlZChQYWdlKikgeyB9CiAKICAgICAvLyB2OC1zcGVjaWZpYyBtZXRob2RzLgogICAgIHZvaWQg
c2V0RGVidWdnZXJTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzY3JpcHRTb3VyY2UpOwogCi0g
ICAgdHlwZWRlZiB2b2lkICgqTWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpQYWdlKj4mKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRNZXNzYWdlTG9vcERpc3Bh
dGNoSGFuZGxlcihNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBtZXNzYWdlTG9vcERpc3BhdGNo
SGFuZGxlcikgeyBzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyID0gbWVzc2FnZUxvb3BEaXNw
YXRjaEhhbmRsZXI7IH0KKyAgICBjbGFzcyBDbGllbnRNZXNzYWdlTG9vcCB7CisgICAgcHVibGlj
OgorICAgICAgICB2aXJ0dWFsIH5DbGllbnRNZXNzYWdlTG9vcCgpIHsgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgcnVuKFBhZ2UqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBxdWl0Tm93KCkg
PSAwOworICAgIH07CisgICAgdm9pZCBzZXRDbGllbnRNZXNzYWdlTG9vcChQYXNzT3duUHRyPENs
aWVudE1lc3NhZ2VMb29wPiBjbGllbnRNZXNzYWdlTG9vcCkgeyBtX2NsaWVudE1lc3NhZ2VMb29w
ID0gY2xpZW50TWVzc2FnZUxvb3A7IH0KIAogICAgIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxG
cmFtZT4gY3VycmVudENhbGxGcmFtZSgpOwogCkBAIC05MywxNCArOTYsMTMgQEAgcHJpdmF0ZToK
ICAgICBTY3JpcHREZWJ1Z1NlcnZlcigpOwogICAgIH5TY3JpcHREZWJ1Z1NlcnZlcigpIHsgfQog
Ci0gICAgc3RhdGljIHZvaWQgb25WOERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3Nh
Z2UmIG1lc3NhZ2UpOwotICAgIHN0YXRpYyB2b2lkIG9uVjhEZWJ1Z0hvc3REaXNwYXRjaCgpOwot
Ci0gICAgdm9pZCBoYW5kbGVWOERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3NhZ2Um
IG1lc3NhZ2UpOwotICAgIHZvaWQgaGFuZGxlVjhEZWJ1Z0hvc3REaXNwYXRjaCgpOworI2lmIEVO
QUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQorICAgIHN0YXRpYyB2b2lkIHY4RGVidWdFdmVu
dENhbGxiYWNrKGNvbnN0IHY4OjpEZWJ1Zzo6RXZlbnREZXRhaWxzJiBldmVudERldGFpbHMpOwor
ICAgIHZvaWQgaGFuZGxlVjhEZWJ1Z0V2ZW50KGNvbnN0IHY4OjpEZWJ1Zzo6RXZlbnREZXRhaWxz
JiBldmVudERldGFpbHMpOworI2VuZGlmCiAKICAgICB2b2lkIGRpc3BhdGNoRGlkUGFyc2VTb3Vy
Y2UoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
c291cmNlT2JqZWN0KTsKLSAgICAKKwogICAgIHZvaWQgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21w
aWxlZCgpOwogICAgIHZvaWQgZGlkUmVzdW1lKCk7CiAKQEAgLTEwOSwxMSArMTExLDEwIEBAIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1fZGVidWdnZXJTY3JpcHRTb3VyY2U7CiAgICAgUGF1c2VPbkV4
Y2VwdGlvbnNTdGF0ZSBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGU7CiAgICAgT3duSGFuZGxlPHY4
OjpPYmplY3Q+IG1fZGVidWdnZXJTY3JpcHQ7Ci0gICAgU2NyaXB0U3RhdGUqIG1fY3VycmVudENh
bGxGcmFtZVN0YXRlOwogICAgIFJlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBtX2N1cnJlbnRD
YWxsRnJhbWU7CiAgICAgT3duSGFuZGxlPHY4OjpPYmplY3Q+IG1fZXhlY3V0aW9uU3RhdGU7Ci0K
LSAgICBzdGF0aWMgTWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgc19tZXNzYWdlTG9vcERpc3Bh
dGNoSGFuZGxlcjsKKyAgICBPd25QdHI8Q2xpZW50TWVzc2FnZUxvb3A+IG1fY2xpZW50TWVzc2Fn
ZUxvb3A7CisgICAgUGFnZSogbV9wYXVzZWRQYWdlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAzYjM2
YTRhLi5iNDQ0MWQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cApAQCAtMTYyOCw5ICsxNjI4LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmYWlsZWRU
b1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGQKICAgICBtX2Zy
b250ZW5kLT5mYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKHVybCwgZGF0YSwgZmlyc3RMaW5lLCBl
cnJvckxpbmUsIGVycm9yTWVzc2FnZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkUGF1c2UoKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXVzZShTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUpCiB7Ci0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gU2NyaXB0
RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmN1cnJlbnRDYWxsRnJhbWVTdGF0ZSgpOwogICAgIEFTU0VS
VChzY3JpcHRTdGF0ZSk7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2lu
amVjdGVkU2NyaXB0SG9zdC0+aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwogICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNhbGxGcmFtZXMgPSBpbmplY3RlZFNjcmlwdC5j
YWxsRnJhbWVzKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXgg
YTkwYjI5OS4uOWNiOWUzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aApAQCAtMjQxLDcgKzI0MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJz
ZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lKTsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9Q
YXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmly
c3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFBhdXNlKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKFNjcmlw
dFN0YXRlKik7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKCk7CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oCmluZGV4IDVhODVkYTEuLmM2NjlmNWUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgKQEAgLTMyLDYgKzMyLDgg
QEAKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogCisjaW5jbHVkZSAiU2NyaXB0
U3RhdGUuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTdHJpbmc7CkBAIC00Miw3
ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShjb25z
dCBTdHJpbmcmICBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0
YSwgaW50IGZpcnN0TGluZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291
cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUs
IGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFBhdXNlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVzZShTY3Jp
cHRTdGF0ZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoKSA9IDA7CiB9Owog
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA4ZDZkOGI1Li4zNDVhZmFmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw0MCBAQAorMjAxMC0wNS0yNCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTY3Jp
cHREZWJ1Z1NlcnZlciBpcyBub3cgaW1wbGVtZW50ZWQgYXMgRGVidWdFdmVudExpc3RlbmVyIHdo
aWNoIG1lYW5zIGl0IGRvZXNuJ3QKKyAgICAgICAgZGVwZW5kIG9uIHY4IGRlYnVnZ2luZyBwcm90
b2NvbCwgaW5zdGVhZCBpdCB1c2VzIEV4ZWNTdGF0ZSB0byBjb2xsZWN0IGRlYnVnZ2luZworICAg
ICAgICBpbmZvIGFuZCBwYXNzIGl0IHRvIHRoZSBsaXN0ZW5lcnMuCisKKyAgICAgICAgTmV3IGlt
cGxlbWVudGF0aW9uIG9mIFNjcmlwdERlYnVnU2VydmVyIHVzZXMgbWV0aG9kcyBwcm92aWRlZCBi
eSBjbGllbnQgdG8gZGlzcGF0Y2gKKyAgICAgICAgaXRzIG1lc3NhZ2VzIHdoaWxlIEpTIGlzIHBh
dXNlZChwcmV2aW91c2x5IHRoZSBtZXNzYWdlcyB3YXMgZGlzcGF0Y2hlZCBpbiBhIGNhbGxiYWNr
CisgICAgICAgIHBhc3NlZCB0byB2OCBhbG9uZyB3aXRoIERlYnVnRXZlbnRIYW5kbGVyKS4KKwor
ICAgICAgICBQYXVzZSBjb21tYW5kIGlzIGRpc3BhdGNoZWQgb24gSU8gdGhyZWFkLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTU5NAorCisgICAg
ICAgICogcHVibGljL1dlYkRldlRvb2xzQWdlbnRDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6
V2ViRGV2VG9vbHNBZ2VudENsaWVudDo6Q2xpZW50TWVzc2FnZUxvb3A6On5DbGllbnRNZXNzYWdl
TG9vcCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRDbGllbnQ6OmNyZWF0ZUNs
aWVudE1lc3NhZ2VMb29wKTogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBhbGxvd3MgdG8gcnVuCisg
ICAgICAgIG5lc3RlZCBjbGllbnQgbWVzc2FnZSBsb29wIHdoaWxlIHNjcmlwdCBleGVjdXRpb24g
aXMgcGF1c2VkIG9uIGEgYnJlYWtwb2ludC4KKyAgICAgICAgKiBzcmMvRGVidWdnZXJBZ2VudE1h
bmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c2V0TWVz
c2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpOgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50TWFu
YWdlci5oOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6Oik6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjp+V2Vi
RGV2VG9vbHNBZ2VudEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1w
bDo6YXR0YWNoKToKKyAgICAgICAgKiBzcmMvanMvRGVidWdnZXJTY3JpcHQuanM6CisgICAgICAg
IChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0LmdldEFmdGVyQ29tcGls
ZVNjcmlwdCk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2Ny
aXB0LnN0ZXBJbnRvU3RhdGVtZW50KToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0
b3IuRGVidWdnZXJTY3JpcHQuc3RlcE92ZXJTdGF0ZW1lbnQpOgorICAgICAgICAoZGVidWdnZXJT
Y3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5zdGVwT3V0T2ZGdW5jdGlvbik6CisgICAg
ICAgICogc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzOgorICAgICAgICAoZGV2dG9v
bHMuSW5zcGVjdG9yQmFja2VuZEltcGwpOgorICAgICAgICAoZWxzZS5kZXZ0b29scy5JbnNwZWN0
b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUucGF1c2VJbkRlYnVnZ2VyKTogUGF1c2UgY29tbWFuZCBz
aG91bGQgYmUgaGFuZGxlZCBvbiBJTworICAgICAgICB0aHJlYWQgc28gdGhhdCBzY3JpcHQgY2Fu
IGJlIHBhdXNlZCBldmVuIGlmIGl0J3MgaW4gYW4gaW5maW5pdGUgbG9vcC4KKwogMjAxMC0wNS0y
NSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJEZXZUb29sc0FnZW50Q2xpZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRl
dlRvb2xzQWdlbnRDbGllbnQuaAppbmRleCBkNzhhNmYxLi5kMzYwNDNhIDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRldlRvb2xzQWdlbnRDbGllbnQuaAorKysgYi9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkRldlRvb2xzQWdlbnRDbGllbnQuaApAQCAtNTYsNiArNTYs
MTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViQ1N0cmluZyBpbmplY3RlZFNjcmlwdFNvdXJj
ZSgpIHsgcmV0dXJuIFdlYkNTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgV2ViQ1N0cmluZyBpbmpl
Y3RlZFNjcmlwdERpc3BhdGNoZXJTb3VyY2UoKSB7IHJldHVybiBXZWJDU3RyaW5nKCk7IH0KIAor
ICAgIGNsYXNzIFdlYktpdENsaWVudE1lc3NhZ2VMb29wIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHZpcnR1YWwgfldlYktpdENsaWVudE1lc3NhZ2VMb29wKCkgeyB9CisgICAgICAgIHZpcnR1YWwg
dm9pZCBydW4oKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBxdWl0Tm93KCkgPSAwOworICAg
IH07CisgICAgdmlydHVhbCBXZWJLaXRDbGllbnRNZXNzYWdlTG9vcCogY3JlYXRlQ2xpZW50TWVz
c2FnZUxvb3AoKSB7IHJldHVybiAwOyB9CisKIHByb3RlY3RlZDoKICAgICB+V2ViRGV2VG9vbHNB
Z2VudENsaWVudCgpIHsgfQogfTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVi
dWdnZXJBZ2VudE1hbmFnZXIuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50
TWFuYWdlci5jcHAKaW5kZXggZDNmN2ZlYS4uZTE0Y2Y2NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAKQEAgLTczLDQyICs3Myw2IEBAIHByaXZhdGU6
CiB9IC8vIG5hbWVzcGFjZQogCiAKLXZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6Omhvc3REaXNw
YXRjaEhhbmRsZXIoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlBhZ2UqPiYgcGFnZXMpCi17Ci0gICAg
aWYgKCFzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoc19pbkhvc3REaXNwYXRjaEhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNf
aW5Ib3N0RGlzcGF0Y2hIYW5kbGVyID0gdHJ1ZTsKLQotICAgIFZlY3RvcjxXZWJWaWV3SW1wbCo+
IHZpZXdzOwotICAgIC8vIDEuIERpc2FibGUgYWN0aXZlIG9iamVjdHMgYW5kIGlucHV0IGV2ZW50
cy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZ2VzLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBwYWdlc1tpXTsKLSAgICAgICAgV2ViVmlld0ltcGwq
IHZpZXcgPSBXZWJWaWV3SW1wbDo6ZnJvbVBhZ2UocGFnZSk7Ci0gICAgICAgIHNfcGFnZURlZmVy
cmVycy5zZXQodmlldyAsIG5ldyBXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIocGFnZSwg
dHJ1ZSkpOwotICAgICAgICB2aWV3cy5hcHBlbmQodmlldyk7Ci0gICAgICAgIHZpZXctPnNldEln
bm9yZUlucHV0RXZlbnRzKHRydWUpOwotICAgIH0KLQotICAgIC8vIDIuIFByb2Nlc3MgbWVzc2Fn
ZXMuCi0gICAgc19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcigpOwotCi0gICAgLy8gMy4gQnJp
bmcgdGhpbmdzIGJhY2suCi0gICAgZm9yIChWZWN0b3I8V2ViVmlld0ltcGwqPjo6aXRlcmF0b3Ig
aXQgPSB2aWV3cy5iZWdpbigpOyBpdCAhPSB2aWV3cy5lbmQoKTsgKytpdCkgewotICAgICAgICBp
ZiAoc19wYWdlRGVmZXJyZXJzLmNvbnRhaW5zKCppdCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSB2
aWV3IHdhcyBub3QgY2xvc2VkIGR1cmluZyB0aGUgZGlzcGF0Y2guCi0gICAgICAgICAgICAoKml0
KS0+c2V0SWdub3JlSW5wdXRFdmVudHMoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGRl
bGV0ZUFsbFZhbHVlcyhzX3BhZ2VEZWZlcnJlcnMpOwotICAgIHNfcGFnZURlZmVycmVycy5jbGVh
cigpOwotCi0gICAgc19pbkhvc3REaXNwYXRjaEhhbmRsZXIgPSBmYWxzZTsKLX0KLQogdm9pZCBE
ZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdIb3N0RGlzcGF0Y2hIYW5kbGVyKCkKIHsKICAgICBp
ZiAoIXNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgfHwgIXNfYXR0YWNoZWRBZ2VudHNNYXAp
CkBAIC0yOTIsNyArMjU2LDYgQEAgdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZXhlY3V0ZURl
YnVnZ2VyQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIGludCBjYWwKIHZvaWQgRGVidWdn
ZXJBZ2VudE1hbmFnZXI6OnNldE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKFdlYkRldlRvb2xz
QWdlbnQ6Ok1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyIGhhbmRsZXIpCiB7CiAgICAgc19tZXNz
YWdlTG9vcERpc3BhdGNoSGFuZGxlciA9IGhhbmRsZXI7Ci0gICAgV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OnNldE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKERlYnVnZ2VyQWdlbnRNYW5h
Z2VyOjpob3N0RGlzcGF0Y2hIYW5kbGVyKTsKIH0KIAogdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdl
cjo6c2V0SG9zdElkKFdlYkZyYW1lSW1wbCogd2ViZnJhbWUsIGludCBob3N0SWQpCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmggYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmgKaW5kZXggYThiYzdhMy4uMDUxZjNl
MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5o
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuaApAQCAtMTAw
LDcgKzEwMCw2IEBAIHByaXZhdGU6CiAgICAgRGVidWdnZXJBZ2VudE1hbmFnZXIoKTsKICAgICB+
RGVidWdnZXJBZ2VudE1hbmFnZXIoKTsKIAotICAgIHN0YXRpYyB2b2lkIGhvc3REaXNwYXRjaEhh
bmRsZXIoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlBhZ2UqPiYpOwogICAgIHN0YXRpYyB2b2lkIGRl
YnVnSG9zdERpc3BhdGNoSGFuZGxlcigpOwogICAgIHN0YXRpYyB2b2lkIG9uVjhEZWJ1Z01lc3Nh
Z2UoY29uc3Qgdjg6OkRlYnVnOjpNZXNzYWdlJiBtZXNzYWdlKTsKICAgICBzdGF0aWMgdm9pZCBz
ZW5kQ29tbWFuZFRvVjgoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBjbWQsCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCmluZGV4IDA5NjlkMzcuLjM4NTM1NGYg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3Bw
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCkBAIC00
MywxMSArNDMsMTMgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgogI2luY2x1ZGUg
Ik5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJQcm9maWxlckFnZW50SW1wbC5oIgog
I2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2
ZXIuaCIKICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5o
IgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCkBAIC0xMjksNiArMTMxLDgyIEBAIHB1YmxpYzoK
ICAgICB9CiB9OwogCitjbGFzcyBDbGllbnRNZXNzYWdlTG9vcEFkYXB0ZXIgOiBwdWJsaWMgV2Vi
Q29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OkNsaWVudE1lc3NhZ2VMb29wIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgdm9pZCBlbnN1cmVDbGllbnRNZXNzYWdlTG9vcENyZWF0ZWQoV2ViRGV2VG9vbHNB
Z2VudENsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgaWYgKHNfaW5zdGFuY2UpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIHNfaW5zdGFuY2UgPSBuZXcgQ2xpZW50TWVzc2FnZUxv
b3BBZGFwdGVyKGNsaWVudC0+Y3JlYXRlQ2xpZW50TWVzc2FnZUxvb3AoKSk7CisgICAgICAgIFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRDbGllbnRNZXNzYWdlTG9vcChz
X2luc3RhbmNlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBpbnNwZWN0ZWRWaWV3Q2xvc2Vk
KFdlYlZpZXdJbXBsKiB2aWV3KQorICAgIHsKKyAgICAgICAgc19pbnN0YW5jZS0+bV9mcm96ZW5W
aWV3cy5yZW1vdmUodmlldyk7CisgICAgfQorCitwcml2YXRlOgorICAgIENsaWVudE1lc3NhZ2VM
b29wQWRhcHRlcihQYXNzT3duUHRyPFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudENsaWVudDo6V2Vi
S2l0Q2xpZW50TWVzc2FnZUxvb3A+IG1lc3NhZ2VMb29wKQorICAgICAgICA6IG1fcnVubmluZyhm
YWxzZSkKKyAgICAgICAgLCBtX21lc3NhZ2VMb29wKG1lc3NhZ2VMb29wKSB7IH0KKworCisgICAg
dmlydHVhbCB2b2lkIHJ1bihQYWdlKiBwYWdlKQorICAgIHsKKyAgICAgICAgaWYgKG1fcnVubmlu
ZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9ydW5uaW5nID0gdHJ1ZTsKKworICAg
ICAgICBWZWN0b3I8V2ViVmlld0ltcGwqPiB2aWV3czsKKworICAgICAgICAvLyAxLiBEaXNhYmxl
IGlucHV0IGV2ZW50cy4KKyAgICAgICAgSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9ICBwYWdlLT5ncm91cCgpLnBhZ2VzKCkuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxQ
YWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gIHBhZ2UtPmdyb3VwKCkucGFnZXMoKS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFdlYlZpZXdJbXBsKiB2aWV3ID0gV2Vi
Vmlld0ltcGw6OmZyb21QYWdlKCppdCk7CisgICAgICAgICAgICBtX2Zyb3plblZpZXdzLmFkZCh2
aWV3KTsKKyAgICAgICAgICAgIHZpZXdzLmFwcGVuZCh2aWV3KTsKKyAgICAgICAgICAgIHZpZXct
PnNldElnbm9yZUlucHV0RXZlbnRzKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gMi4g
RGlzYWJsZSBhY3RpdmUgb2JqZWN0cworICAgICAgICBXZWJWaWV3Ojp3aWxsRW50ZXJNb2RhbExv
b3AoKTsKKworICAgICAgICAvLyAzLiBQcm9jZXNzIG1lc3NhZ2VzIHVudGlsIHF1aXROb3cgaXMg
Y2FsbGVkLgorICAgICAgICBtX21lc3NhZ2VMb29wLT5ydW4oKTsKKworICAgICAgICAvLyA0LiBS
ZXN1bWUgYWN0aXZlIG9iamVjdHMKKyAgICAgICAgV2ViVmlldzo6ZGlkRXhpdE1vZGFsTG9vcCgp
OworCisgICAgICAgIC8vIDUuIFJlc3VtZSBpbnB1dCBldmVudHMuCisgICAgICAgIGZvciAoVmVj
dG9yPFdlYlZpZXdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gdmlld3MuYmVnaW4oKTsgaXQgIT0gdmll
d3MuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChtX2Zyb3plblZpZXdzLmNvbnRhaW5z
KCppdCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdmlldyB3YXMgbm90IGNsb3NlZCBkdXJp
bmcgdGhlIGRpc3BhdGNoLgorICAgICAgICAgICAgICAgICgqaXQpLT5zZXRJZ25vcmVJbnB1dEV2
ZW50cyhmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA2LiBB
bGwgdmlld3MgaGF2ZSBiZWVuIHJlc3VtZWQsIGNsZWFyIHRoZSBzZXQuCisgICAgICAgIG1fZnJv
emVuVmlld3MuY2xlYXIoKTsKKworICAgICAgICBtX3J1bm5pbmcgPSBmYWxzZTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcXVpdE5vdygpCisgICAgeworICAgICAgICBtX21lc3NhZ2VMb29w
LT5xdWl0Tm93KCk7CisgICAgfQorCisgICAgYm9vbCBtX3J1bm5pbmc7CisgICAgT3duUHRyPFdl
YktpdDo6V2ViRGV2VG9vbHNBZ2VudENsaWVudDo6V2ViS2l0Q2xpZW50TWVzc2FnZUxvb3A+IG1f
bWVzc2FnZUxvb3A7CisgICAgdHlwZWRlZiBIYXNoU2V0PFdlYlZpZXdJbXBsKj4gRnJvemVuVmll
d3NTZXQ7CisgICAgRnJvemVuVmlld3NTZXQgbV9mcm96ZW5WaWV3czsKKyAgICBzdGF0aWMgQ2xp
ZW50TWVzc2FnZUxvb3BBZGFwdGVyKiBzX2luc3RhbmNlOworCit9OworCitDbGllbnRNZXNzYWdl
TG9vcEFkYXB0ZXIqIENsaWVudE1lc3NhZ2VMb29wQWRhcHRlcjo6c19pbnN0YW5jZSA9IDA7CisK
IH0gLy8gIG5hbWVzcGFjZQogCiBXZWJEZXZUb29sc0FnZW50SW1wbDo6V2ViRGV2VG9vbHNBZ2Vu
dEltcGwoCkBAIC0xNDksNiArMjI3LDkgQEAgV2ViRGV2VG9vbHNBZ2VudEltcGw6OldlYkRldlRv
b2xzQWdlbnRJbXBsKAogV2ViRGV2VG9vbHNBZ2VudEltcGw6On5XZWJEZXZUb29sc0FnZW50SW1w
bCgpCiB7CiAgICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6Om9uV2ViVmlld0Nsb3NlZChtX3dlYlZp
ZXdJbXBsKTsKKyNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKKyAgICBDbGllbnRN
ZXNzYWdlTG9vcEFkYXB0ZXI6Omluc3BlY3RlZFZpZXdDbG9zZWQobV93ZWJWaWV3SW1wbCk7Cisj
ZW5kaWYKICAgICBkaXNwb3NlVXRpbGl0eUNvbnRleHQoKTsKIH0KIApAQCAtMTY0LDYgKzI0NSwx
MSBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjphdHRhY2goKQogewogICAgIGlmIChtX2F0
dGFjaGVkKQogICAgICAgICByZXR1cm47CisKKyNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NF
UlZFUikKKyAgICBDbGllbnRNZXNzYWdlTG9vcEFkYXB0ZXI6OmVuc3VyZUNsaWVudE1lc3NhZ2VM
b29wQ3JlYXRlZChtX2NsaWVudCk7CisjZW5kaWYKKwogICAgIG1fZGVidWdnZXJBZ2VudEltcGwu
c2V0KAogICAgICAgICBuZXcgRGVidWdnZXJBZ2VudEltcGwobV93ZWJWaWV3SW1wbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVidWdnZXJBZ2VudERlbGVnYXRlU3R1Yi5nZXQo
KSwKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2NyaXB0LmpzCmluZGV4IDdjNGQxMjYu
LjdlNWI0MzAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJTY3Jp
cHQuanMKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qcwpAQCAt
NDMsOSArNDMsOSBAQCBEZWJ1Z2dlclNjcmlwdC5fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9IERl
YnVnZ2VyU2NyaXB0LlBhdXNlT25FeGNlcHRpb25zU3RhdGUuRAogRGVidWcuY2xlYXJCcmVha09u
RXhjZXB0aW9uKCk7CiBEZWJ1Zy5jbGVhckJyZWFrT25VbmNhdWdodEV4Y2VwdGlvbigpOwogCi1E
ZWJ1Z2dlclNjcmlwdC5nZXRBZnRlckNvbXBpbGVTY3JpcHQgPSBmdW5jdGlvbihleGVjU3RhdGUs
IGFyZ3MpCitEZWJ1Z2dlclNjcmlwdC5nZXRBZnRlckNvbXBpbGVTY3JpcHQgPSBmdW5jdGlvbihl
dmVudERhdGEpCiB7Ci0gICAgcmV0dXJuIERlYnVnZ2VyU2NyaXB0Ll9mb3JtYXRTY3JpcHQoYXJn
cy5ldmVudERhdGEuc2NyaXB0Xy5zY3JpcHRfKTsKKyAgICByZXR1cm4gRGVidWdnZXJTY3JpcHQu
X2Zvcm1hdFNjcmlwdChldmVudERhdGEuc2NyaXB0Xy5zY3JpcHRfKTsKIH0KIAogRGVidWdnZXJT
Y3JpcHQuZ2V0U2NyaXB0cyA9IGZ1bmN0aW9uKGNvbnRleHREYXRhKQpAQCAtMTM3LDE3ICsxMzcs
MTcgQEAgRGVidWdnZXJTY3JpcHQuY3VycmVudENhbGxGcmFtZSA9IGZ1bmN0aW9uKGV4ZWNTdGF0
ZSwgYXJncykKICAgICByZXR1cm4gdG9wRnJhbWU7CiB9CiAKLURlYnVnZ2VyU2NyaXB0LnN0ZXBJ
bnRvU3RhdGVtZW50ID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQorRGVidWdnZXJTY3JpcHQu
c3RlcEludG9TdGF0ZW1lbnQgPSBmdW5jdGlvbihleGVjU3RhdGUpCiB7CiAgICAgZXhlY1N0YXRl
LnByZXBhcmVTdGVwKERlYnVnLlN0ZXBBY3Rpb24uU3RlcEluLCAxKTsKIH0KIAotRGVidWdnZXJT
Y3JpcHQuc3RlcE92ZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCitEZWJ1
Z2dlclNjcmlwdC5zdGVwT3ZlclN0YXRlbWVudCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSkKIHsKICAg
ICBleGVjU3RhdGUucHJlcGFyZVN0ZXAoRGVidWcuU3RlcEFjdGlvbi5TdGVwTmV4dCwgMSk7CiB9
CiAKLURlYnVnZ2VyU2NyaXB0LnN0ZXBPdXRPZkZ1bmN0aW9uID0gZnVuY3Rpb24oZXhlY1N0YXRl
LCBhcmdzKQorRGVidWdnZXJTY3JpcHQuc3RlcE91dE9mRnVuY3Rpb24gPSBmdW5jdGlvbihleGVj
U3RhdGUpCiB7CiAgICAgZXhlY1N0YXRlLnByZXBhcmVTdGVwKERlYnVnLlN0ZXBBY3Rpb24uU3Rl
cE91dCwgMSk7CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3Rv
ckNvbnRyb2xsZXJJbXBsLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250
cm9sbGVySW1wbC5qcwppbmRleCA1YzNlOGJkLi41OGM2ZDBjIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKQEAgLTk0LDcgKzk0LDYg
QEAgZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5p
bnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygicmVtb3ZlQnJlYWtwb2ludCIpOwog
ICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImFjdGl2YXRlQnJl
YWtwb2ludHMiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVf
KCJkZWFjdGl2YXRlQnJlYWtwb2ludHMiKTsKLSAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250
cm9sbGVyRGVsZWdhdGVfKCJwYXVzZUluRGVidWdnZXIiKTsKICAgICB0aGlzLmluc3RhbGxJbnNw
ZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZXN1bWVEZWJ1Z2dlciIpOwogICAgIHRoaXMuaW5z
dGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInN0ZXBJbnRvU3RhdGVtZW50SW5EZWJ1
Z2dlciIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInN0
ZXBPdXRPZkZ1bmN0aW9uSW5EZWJ1Z2dlciIpOwpAQCAtMjE3LDYgKzIxNiwxMyBAQCBkZXZ0b29s
cy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuc2V0UGF1c2VPbkV4Y2VwdGlvbnMgPSBm
dW5jdGlvbih2YWx1ZSkKICAgICByZXR1cm4gZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2Vu
dCgpLnNldFBhdXNlT25FeGNlcHRpb25zKHZhbHVlKTsKIH07CiAKK30gZWxzZSB7CisKK2RldnRv
b2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wYXVzZUluRGVidWdnZXIgPSBmdW5j
dGlvbigpCit7CisgICAgUmVtb3RlRGVidWdnZXJDb21tYW5kRXhlY3V0b3IuRGVidWdnZXJQYXVz
ZVNjcmlwdCgpOworfTsKKwogfQogCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>