<?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>36817</bug_id>
          
          <creation_ts>2010-03-30 05:37:22 -0700</creation_ts>
          <short_desc>Web Inspector [v8]: provide v8 binding for InspectorFrontendHost</short_desc>
          <delta_ts>2010-04-02 05:56:13 -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>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>205959</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-30 05:37:22 -0700</bug_when>
    <thetext>WebKit/chromium/src/WebDevToolsFrontendImpl.cpp provides Chromium-specific implementation for InspectorFrontendHost(look at WebDevToolsFrontendImpl constructor). Most of the code can be generated and the rest should reside in bindings layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207817</commentid>
    <comment_count>1</comment_count>
      <attachid>52406</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-02 02:03:37 -0700</bug_when>
    <thetext>Created attachment 52406
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207825</commentid>
    <comment_count>2</comment_count>
      <attachid>52406</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-04-02 02:35:12 -0700</bug_when>
    <thetext>Comment on attachment 52406
patch

Could you merge WebDevToolsFrontendImpl and InspectorFrontendClientImpl? I realize there is a life time clash, but I think we should fix this!


&gt; +
&gt; +        Implement InspectorFrontendHost::showContextMenu for v8.

Use Web Inspector prefix.

&gt;  
&gt; +#include &quot;V8MouseEvent.h&quot;
&gt;  #include &quot;V8Binding.h&quot;

Mind alphabetic order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207828</commentid>
    <comment_count>3</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-02 02:52:42 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 52406 [details])
&gt; Could you merge WebDevToolsFrontendImpl and InspectorFrontendClientImpl? I
&gt; realize there is a life time clash, but I think we should fix this!
&gt; 
Filed bug on this: https://bugs.webkit.org/show_bug.cgi?id=37021

&gt; 
&gt; &gt; +
&gt; &gt; +        Implement InspectorFrontendHost::showContextMenu for v8.
&gt; 
&gt; Use Web Inspector prefix.
&gt; 
Done.

&gt; &gt;  
&gt; &gt; +#include &quot;V8MouseEvent.h&quot;
&gt; &gt;  #include &quot;V8Binding.h&quot;
&gt; 
&gt; Mind alphabetic order.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207836</commentid>
    <comment_count>4</comment_count>
      <attachid>52409</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-02 05:54:15 -0700</bug_when>
    <thetext>Created attachment 52409
patch that I&apos;m going to land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207838</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-02 05:56:13 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	C	WebCore/inspector/InspectorFrontendClientLocal.h =&gt; WebKit/chromium/src/InspectorFrontendClientImpl.h
	M	WebCore/ChangeLog
	M	WebCore/WebCore.Inspector.exp
	M	WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp
	M	WebCore/inspector/InspectorFrontendClient.h
	M	WebCore/inspector/InspectorFrontendClientLocal.cpp
	M	WebCore/inspector/InspectorFrontendClientLocal.h
	M	WebCore/inspector/InspectorFrontendHost.cpp
	M	WebCore/inspector/InspectorFrontendHost.h
	M	WebKit/chromium/ChangeLog
	M	WebKit/chromium/WebKit.gyp
	A	WebKit/chromium/src/InspectorFrontendClientImpl.cpp
	M	WebKit/chromium/src/WebDevToolsFrontendImpl.cpp
	M	WebKit/chromium/src/WebDevToolsFrontendImpl.h
	M	WebKit/chromium/src/js/DebuggerAgent.js
	M	WebKit/chromium/src/js/DevTools.js
Committed r56999</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52406</attachid>
            <date>2010-04-02 02:03:37 -0700</date>
            <delta_ts>2010-04-02 05:54:15 -0700</delta_ts>
            <desc>patch</desc>
            <filename>frontend-client-chrome.patch</filename>
            <type>text/plain</type>
            <size>43552</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2VlZmU2Ni4uMWZiMzRmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMC0wNC0wMiAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93
Q29udGV4dE1lbnUgZm9yIHY4LgorCisgICAgICAgIE1vdmUgaW5zcGVjdG9yIGZyb250ZW5kIGNv
bnRleHQgbWVudSBjb2RlIGZyb20gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdG8gSW5zcGVjdG9y
RnJvbnRlbmRIb3N0IGFzIGl0J3MgcGxhdGZvcm0gaW5kZXBlbmRlbnQuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2ODE3CisKKyAgICAgICAgKiBX
ZWJDb3JlLkluc3BlY3Rvci5leHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5z
cGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SW5zcGVj
dG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnVDYWxsYmFjayk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjp+SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsOjp3aW5kb3dPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJv
dmlkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6
ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6RnJv
bnRlbmRNZW51UHJvdmlkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlk
ZXI6On5Gcm9udGVuZE1lbnVQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1l
bnVQcm92aWRlcjo6cG9wdWxhdGVDb250ZXh0TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9u
dGVuZE1lbnVQcm92aWRlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNvbnRleHRNZW51Q2xlYXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Okluc3BlY3RvckZyb250ZW5kSG9zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRpc2Nvbm5lY3RDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4
dE1lbnUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKToKKwogMjAxMC0w
NC0wMiAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5JbnNwZWN0b3IuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rvci5leHAKaW5kZXggZjc3
NDczOS4uMGNhN2NkNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rvci5leHAK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rvci5leHAKQEAgLTI0LDYgKzI0LDUgQEAgX19a
TjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTRmcm9udGVuZExvYWRlZEV2
CiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyN3Jlc3RvcmVBdHRh
Y2hlZFdpbmRvd0hlaWdodEV2CiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwxMm1vdmVXaW5kb3dCeUVmZgogX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsMTVjYW5BdHRhY2hXaW5kb3dFdgotX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsMTVzaG93Q29udGV4dE1lbnVFUE5TXzVFdmVudEVSS04zV1RGNlZlY3Rv
cklQTlNfMTVDb250ZXh0TWVudUl0ZW1FTG0wRUVFCiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwxN3NldEF0dGFjaGVkV2luZG93RWIKIF9fWk43V2ViQ29yZTI4SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDI2Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHRFagpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JGcm9udGVu
ZEhvc3RDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JG
cm9udGVuZEhvc3RDdXN0b20uY3BwCmluZGV4IGI4MjMwMzQuLmIwNTZjMGMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9t
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckZyb250ZW5k
SG9zdEN1c3RvbS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCiAKKyNpbmNsdWRl
ICJWOE1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOFBy
b3h5LmgiCiAKQEAgLTQxLDYgKzQyLDQwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnVD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogeworICAgIGlmIChhcmdzLkxlbmd0
aCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBldmVudFdyYXBwZXIgPSB2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3Qo
YXJnc1swXSk7CisgICAgaWYgKCFWOE1vdXNlRXZlbnQ6OmluZm8uZXF1YWxzKFY4RE9NV3JhcHBl
cjo6ZG9tV3JhcHBlclR5cGUoZXZlbnRXcmFwcGVyKSkpCisgICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7CisKKyAgICBFdmVudCogZXZlbnQgPSBWOEV2ZW50Ojp0b05hdGl2ZShldmVudFdy
YXBwZXIpOworICAgIGlmICghYXJnc1sxXS0+SXNBcnJheSgpKQorICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOworCisgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6TG9j
YWw8djg6OkFycmF5Pjo6Q2FzdChhcmdzWzFdKTsKKyAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVt
Kj4gaXRlbXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LT5MZW5ndGgoKTsg
KytpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpdGVtID0gdjg6OkxvY2FsPHY4
OjpPYmplY3Q+OjpDYXN0KGFycmF5LT5HZXQodjg6OkludGVnZXI6Ok5ldyhpKSkpOworICAgICAg
ICB2ODo6TG9jYWw8djg6OlZhbHVlPiBsYWJlbCA9IGl0ZW0tPkdldCh2ODo6U3RyaW5nOjpOZXco
ImxhYmVsIikpOworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBpZCA9IGl0ZW0tPkdldCh2
ODo6U3RyaW5nOjpOZXcoImlkIikpOworICAgICAgICBpZiAobGFiZWwtPklzVW5kZWZpbmVkKCkg
fHwgaWQtPklzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICBpdGVtcy5hcHBlbmQobmV3IENvbnRl
eHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZygpKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgQ29udGV4dE1lbnVBY3Rpb24gdHlwZWRJZCA9IHN0YXRpY19jYXN0PENvbnRl
eHRNZW51QWN0aW9uPigKKyAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRh
ZyArIGlkLT5Ub0ludDMyKCktPlZhbHVlKCkpOworICAgICAgICAgIGl0ZW1zLmFwcGVuZChuZXcg
Q29udGV4dE1lbnVJdGVtKEFjdGlvblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZWRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGxhYmVsKSkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KiBmcm9udGVuZEhvc3QgPSBW
OEluc3BlY3RvckZyb250ZW5kSG9zdDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgZnJv
bnRlbmRIb3N0LT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIGl0ZW1zKTsKKwogICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENsaWVudC5oCmluZGV4IDA1ODM0NmIuLjBjZTYwMmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaApAQCAtNjAsOCArNjAsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSA9IDA7CiAg
ICAgCiAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCosIGNvbnN0IFZl
Y3RvcjxDb250ZXh0TWVudUl0ZW0qPiYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5jcHAKaW5kZXggMTg4OGZiZC4uMDc3ZmM2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKQEAgLTM0LDEwICszNCw2IEBACiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNv
bnRleHRNZW51LmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiQ29udGV4dE1lbnVJdGVtLmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVQcm92aWRlci5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCkBAIC01MSw2NyArNDcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEZyb250ZW5kTWVudVByb3ZpZGVyIDogcHVibGljIENvbnRleHRNZW51UHJvdmlkZXIgewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyb250ZW5kTWVudVByb3ZpZGVyPiBjcmVh
dGUoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCogZnJvbnRlbmRDbGllbnQsIFNjcmlwdE9i
amVjdCB3ZWJJbnNwZWN0b3IsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZyb250ZW5kTWVudVByb3ZpZGVy
KGZyb250ZW5kQ2xpZW50LCB3ZWJJbnNwZWN0b3IsIGl0ZW1zKSk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgZGlzY29ubmVjdCgpCi0gICAgewotICAgICAgICBtX3dlYkluc3BlY3RvciA9IFNjcmlw
dE9iamVjdCgpOwotICAgICAgICBtX2Zyb250ZW5kQ2xpZW50ID0gMDsKLSAgICB9Ci0gICAgCi1w
cml2YXRlOgotICAgIEZyb250ZW5kTWVudVByb3ZpZGVyKEluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwqIGZyb250ZW5kQ2xpZW50LCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yLCAgY29uc3Qg
VmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcykKLSAgICAgICAgOiBtX2Zyb250ZW5kQ2xp
ZW50KGZyb250ZW5kQ2xpZW50KQotICAgICAgICAsIG1fd2ViSW5zcGVjdG9yKHdlYkluc3BlY3Rv
cikKLSAgICAgICAgLCBtX2l0ZW1zKGl0ZW1zKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IH5Gcm9udGVuZE1lbnVQcm92aWRlcigpCi0gICAgewotICAgICAgICBjb250ZXh0TWVudUNsZWFy
ZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlQ29udGV4dE1lbnUo
Q29udGV4dE1lbnUqIG1lbnUpCi0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1faXRlbXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtZW51LT5hcHBlbmRJdGVtKCptX2l0
ZW1zW2ldKTsKLSAgICB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51SXRlbVNl
bGVjdGVkKENvbnRleHRNZW51SXRlbSogaXRlbSkKLSAgICB7Ci0gICAgICAgIGludCBpdGVtTnVt
YmVyID0gaXRlbS0+YWN0aW9uKCkgLSBDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnOwotCi0g
ICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3Bh
dGNoIik7Ci0gICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJjb250ZXh0TWVudUl0ZW1T
ZWxlY3RlZCIpOwotICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChpdGVtTnVtYmVyKTsK
LSAgICAgICAgZnVuY3Rpb24uY2FsbCgpOwotICAgIH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
Y29udGV4dE1lbnVDbGVhcmVkKCkKLSAgICB7Ci0KLSAgICAgICAgaWYgKG1fZnJvbnRlbmRDbGll
bnQpIHsKLSAgICAgICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3Bl
Y3RvciwgImRpc3BhdGNoIik7Ci0gICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgi
Y29udGV4dE1lbnVDbGVhcmVkIik7Ci0gICAgICAgICAgICBmdW5jdGlvbi5jYWxsKCk7Ci0KLSAg
ICAgICAgICAgIG1fZnJvbnRlbmRDbGllbnQtPm1fbWVudVByb3ZpZGVyID0gMDsKLSAgICAgICAg
fQotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9pdGVtcyk7Ci0gICAgICAgIG1faXRlbXMuY2xl
YXIoKTsKLSAgICB9Ci0KLSAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKiBtX2Zyb250
ZW5kQ2xpZW50OwotICAgIFNjcmlwdE9iamVjdCBtX3dlYkluc3BlY3RvcjsKLSAgICBWZWN0b3I8
Q29udGV4dE1lbnVJdGVtKj4gbV9pdGVtczsKLX07Ci0KIHN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUgPSAiaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQi
Owogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodCA9IDMwMDsKIHN0
YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTAuMGY7CkBAIC0xMjEs
NyArNTYsNiBAQCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsKEluc3BlY3RvckNvbnRyb2xsZXIqCiAgICAgOiBtX2luc3BlY3RvckNvbnRy
b2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAsIG1fZnJvbnRlbmRQYWdlKGZyb250ZW5k
UGFnZSkKICAgICAsIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSgwKQotICAgICwgbV9tZW51UHJvdmlk
ZXIoMCkKIHsKIH0KIApAQCAtMTI5LDggKzYzLDYgQEAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoKQogewogICAgIGlmIChtX2Zyb250
ZW5kSG9zdCkKICAgICAgICAgbV9mcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDbGllbnQoKTsKLSAg
ICBpZiAobV9tZW51UHJvdmlkZXIpCi0gICAgICAgIG1fbWVudVByb3ZpZGVyLT5kaXNjb25uZWN0
KCk7CiAgICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gMDsKICAgICBtX2Zyb250ZW5kUGFnZSA9
IDA7CiAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyID0gMDsKQEAgLTE0Myw3ICs3NSw3IEBAIHZv
aWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCiAg
ICAgLy8gRklYTUU6IGRvbid0IGtlZXAgcmVmZXJlbmNlIHRvIHRoZSBzY3JpcHQgc3RhdGUKICAg
ICBtX2Zyb250ZW5kU2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKGRlYnVnZ2VyV29y
bGQoKSwgbV9mcm9udGVuZFBhZ2UpOwogICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fZnJv
bnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckJhY2tlbmQiLCBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmluc3BlY3RvckJhY2tlbmQoKSk7Ci0gICAgbV9mcm9udGVuZEhvc3QgPSBJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX2Zyb250ZW5kSG9zdCA9IEluc3BlY3Rv
ckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMsIG1fZnJvbnRlbmRQYWdlKTsKICAgICBTY3JpcHRH
bG9iYWxPYmplY3Q6OnNldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0b3JGcm9udGVu
ZEhvc3QiLCBtX2Zyb250ZW5kSG9zdC5nZXQoKSk7CiB9CiAKQEAgLTE4MywyMCArMTE1LDYgQEAg
dm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjptb3ZlV2luZG93QnkoZmxvYXQgeCwg
ZmxvYXQgeSkKICAgICBtX2Zyb250ZW5kUGFnZS0+Y2hyb21lKCktPnNldFdpbmRvd1JlY3QoZnJh
bWVSZWN0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpzaG93Q29u
dGV4dE1lbnUoRXZlbnQqIGV2ZW50LCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0
ZW1zKQotewotICAgIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JPYmo7Ci0gICAgaWYgKCFTY3Jp
cHRHbG9iYWxPYmplY3Q6OmdldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJXZWJJbnNwZWN0b3Ii
LCB3ZWJJbnNwZWN0b3JPYmopKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJlZlB0cjxGcm9udGVuZE1lbnVQcm92aWRl
cj4gbWVudVByb3ZpZGVyID0gRnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSh0aGlzLCB3ZWJJ
bnNwZWN0b3JPYmosIGl0ZW1zKTsKLSAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIqIG1lbnVDb250
cm9sbGVyID0gbV9mcm9udGVuZFBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpOwotICAgIG1l
bnVDb250cm9sbGVyLT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIG1lbnVQcm92aWRlcik7Ci0gICAg
bV9tZW51UHJvdmlkZXIgPSBtZW51UHJvdmlkZXIuZ2V0KCk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCkKIHsK
ICAgICBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oCmluZGV4IDkxOGM0NzkuLjA2N2QyOTkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmgKQEAgLTM3LDcgKzM3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGcm9u
dGVuZE1lbnVQcm92aWRlcjsKIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CiBjbGFzcyBJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q7CiBjbGFzcyBQYWdlOwpAQCAtNTUsOCArNTQsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGNhbkF0dGFjaFdpbmRvdygpOwogICAgIHZpcnR1YWwgdm9pZCBj
aGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
c2hvd0NvbnRleHRNZW51KEV2ZW50KiwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+Jik7
Ci0gICAgCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KHVuc2lnbmVkKSA9IDA7CiAKQEAgLTcyLDcgKzY5LDYgQEAgcHJpdmF0ZToKICAgICBTY3Jp
cHRTdGF0ZSogbV9mcm9udGVuZFNjcmlwdFN0YXRlOwogICAgIC8vIFRPRE8oeXVyeXMpOiB0aGlz
IHJlZiBzaG91bGRuJ3QgYmUgbmVlZGVkLgogICAgIFJlZlB0cjxJbnNwZWN0b3JGcm9udGVuZEhv
c3Q+IG1fZnJvbnRlbmRIb3N0OwotICAgIEZyb250ZW5kTWVudVByb3ZpZGVyKiBtX21lbnVQcm92
aWRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCmluZGV4IDIzYmU0NGMuLjFhMGI0ODMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcApAQCAtNDUsNiArNDUsNyBA
QAogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJTY3JpcHRGdW5jdGlvbkNhbGwuaCIKIAog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBA
IC01Myw4ICs1NCw3MiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUluc3BlY3RvckZyb250ZW5kSG9zdDo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQpCitjbGFzcyBGcm9udGVuZE1lbnVQcm92aWRlciA6
IHB1YmxpYyBDb250ZXh0TWVudVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGcm9udGVuZE1lbnVQcm92aWRlcj4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kSG9zdCog
ZnJvbnRlbmRIb3N0LCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yLCBjb25zdCBWZWN0b3I8Q29u
dGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBGcm9udGVuZE1lbnVQcm92aWRlcihmcm9udGVuZEhvc3QsIHdlYkluc3BlY3RvciwgaXRlbXMp
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkaXNjb25uZWN0KCkKKyAgICB7CisgICAgICAgIG1f
d2ViSW5zcGVjdG9yID0gU2NyaXB0T2JqZWN0KCk7CisgICAgICAgIG1fZnJvbnRlbmRIb3N0ID0g
MDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEZyb250ZW5kTWVudVByb3ZpZGVyKEluc3Bl
Y3RvckZyb250ZW5kSG9zdCogZnJvbnRlbmRIb3N0LCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9y
LCAgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcykKKyAgICAgICAgOiBtX2Zy
b250ZW5kSG9zdChmcm9udGVuZEhvc3QpCisgICAgICAgICwgbV93ZWJJbnNwZWN0b3Iod2ViSW5z
cGVjdG9yKQorICAgICAgICAsIG1faXRlbXMoaXRlbXMpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgfkZyb250ZW5kTWVudVByb3ZpZGVyKCkKKyAgICB7CisgICAgICAgIGNvbnRleHRNZW51
Q2xlYXJlZCgpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVDb250ZXh0
TWVudShDb250ZXh0TWVudSogbWVudSkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1lbnUtPmFwcGVuZEl0ZW0o
Km1faXRlbXNbaV0pOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQorICAgIHsKKyAgICAgICAgaWYgKG1f
ZnJvbnRlbmRIb3N0KSB7CisgICAgICAgICAgICBpbnQgaXRlbU51bWJlciA9IGl0ZW0tPmFjdGlv
bigpIC0gQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzsKKworICAgICAgICAgICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsKKyAgICAg
ICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCIp
OworICAgICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaXRlbU51bWJlcik7CisgICAg
ICAgICAgICBmdW5jdGlvbi5jYWxsKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdmly
dHVhbCB2b2lkIGNvbnRleHRNZW51Q2xlYXJlZCgpCisgICAgeworICAgICAgICBpZiAobV9mcm9u
dGVuZEhvc3QpIHsKKyAgICAgICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dl
Ykluc3BlY3RvciwgImRpc3BhdGNoIik7CisgICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudCgiY29udGV4dE1lbnVDbGVhcmVkIik7CisgICAgICAgICAgICBmdW5jdGlvbi5jYWxsKCk7
CisKKyAgICAgICAgICAgIG1fZnJvbnRlbmRIb3N0LT5tX21lbnVQcm92aWRlciA9IDA7CisgICAg
ICAgIH0KKyAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1faXRlbXMpOworICAgICAgICBtX2l0ZW1z
LmNsZWFyKCk7CisgICAgfQorCisgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KiBtX2Zyb250ZW5k
SG9zdDsKKyAgICBTY3JpcHRPYmplY3QgbV93ZWJJbnNwZWN0b3I7CisgICAgVmVjdG9yPENvbnRl
eHRNZW51SXRlbSo+IG1faXRlbXM7Cit9OworCitJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdChJbnNwZWN0b3JGcm9udGVuZENsaWVudCogY2xpZW50LCBQYWdlKiBm
cm9udGVuZFBhZ2UpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2Zyb250ZW5kUGFn
ZShmcm9udGVuZFBhZ2UpCisgICAgLCBtX21lbnVQcm92aWRlcigwKQogewogfQogCkBAIC02Niw2
ICsxMzEsOSBAQCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6On5JbnNwZWN0b3JGcm9udGVuZEhvc3Qo
KQogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRpc2Nvbm5lY3RDbGllbnQoKQogewogICAg
IG1fY2xpZW50ID0gMDsKKyAgICBpZiAobV9tZW51UHJvdmlkZXIpCisgICAgICAgIG1fbWVudVBy
b3ZpZGVyLT5kaXNjb25uZWN0KCk7CisgICAgbV9mcm9udGVuZFBhZ2UgPSAwOwogfQogCiB2b2lk
IEluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKCkKQEAgLTE2OSw4ICsyMzcsMTcgQEAgdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNvcHlUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKIAog
dm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQs
IGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCiB7Ci0gICAgaWYgKG1fY2xp
ZW50KQotICAgICAgICBtX2NsaWVudC0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBpdGVtcyk7Cisg
ICAgQVNTRVJUKG1fZnJvbnRlbmRQYWdlKTsKKyAgICBTY3JpcHRTdGF0ZSogZnJvbnRlbmRTY3Jp
cHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5k
UGFnZSk7CisgICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsKKyAgICBpZiAoIVNjcmlw
dEdsb2JhbE9iamVjdDo6Z2V0KGZyb250ZW5kU2NyaXB0U3RhdGUsICJXZWJJbnNwZWN0b3IiLCB3
ZWJJbnNwZWN0b3JPYmopKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFJlZlB0cjxGcm9udGVuZE1lbnVQcm92aWRlcj4gbWVudVBy
b3ZpZGVyID0gRnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSh0aGlzLCB3ZWJJbnNwZWN0b3JP
YmosIGl0ZW1zKTsKKyAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIqIG1lbnVDb250cm9sbGVyID0g
bV9mcm9udGVuZFBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpOworICAgIG1lbnVDb250cm9s
bGVyLT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIG1lbnVQcm92aWRlcik7CisgICAgbV9tZW51UHJv
dmlkZXIgPSBtZW51UHJvdmlkZXIuZ2V0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgKaW5kZXggZjViYTlkNy4u
NmMzNGFjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgKQEAg
LTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb250ZXh0TWVudUl0
ZW07CiBjbGFzcyBFdmVudDsKK2NsYXNzIEZyb250ZW5kTWVudVByb3ZpZGVyOwogY2xhc3MgSW5z
cGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBOb2Rl
OwpAQCAtNDksOSArNTAsOSBAQCBjbGFzcyBOb2RlOwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PgogewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckZyb250ZW5kSG9zdD4gY3JlYXRlKElu
c3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yRnJvbnRlbmRIb3N0PiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVu
dCwgUGFnZSogZnJvbnRlbmRQYWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJbnNwZWN0b3JGcm9udGVuZEhvc3QoY2xpZW50KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KGNsaWVudCwgZnJvbnRlbmRQYWdlKSk7CiAgICAg
fQogCiAgICAgfkluc3BlY3RvckZyb250ZW5kSG9zdCgpOwpAQCAtNzksOSArODAsMTIgQEAgcHVi
bGljOgogICAgIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2ZW50KiwgY29uc3QgVmVjdG9yPENvbnRl
eHRNZW51SXRlbSo+JiBpdGVtcyk7CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0KEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQpOworICAgIGZyaWVuZCBjbGFzcyBG
cm9udGVuZE1lbnVQcm92aWRlcjsKKyAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQqIGNsaWVudCwgUGFnZSogZnJvbnRlbmRQYWdlKTsKIAogICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50KiBtX2NsaWVudDsKKyAgICBQYWdlKiBtX2Zyb250ZW5kUGFnZTsK
KyAgICBGcm9udGVuZE1lbnVQcm92aWRlciogbV9tZW51UHJvdmlkZXI7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxMTNjODEyLi4yNzU4N2VkIDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNC0wMiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1
cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbXBsZW1lbnQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgaW4gQ2hyb21pdW0g
YW5kIHJlbW92ZSBhbGwgY3VzdG9tIGJpbmRpbmdzIGZvciB0aGUgaG9zdCBtZXRob2RzIGZyb20g
V2ViRGV2VG9vbHNGcm9udGVuZEltcGwuIAorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNjgxNworCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAg
ICAgKiBzcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBs
Ojp+SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRJbXBsOjp3aW5kb3dPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKFdl
YktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjpmcm9udGVuZExvYWRlZCk6CisgICAg
ICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6bW92ZVdpbmRvd0J5KToK
KyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjpsb2NhbGl6ZWRT
dHJpbmdzVVJMKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBs
OjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVu
dEltcGw6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50SW1wbDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudEltcGw6OmNhbkF0dGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Okluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50SW1wbDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjpkZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2Vi
S2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6OmNoYW5nZUF0dGFjaGVkV2luZG93SGVp
Z2h0KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjppbnNw
ZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKiBzcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJ
bXBsLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpXZWJEZXZUb29sc0Zy
b250ZW5kSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjp+
V2ViRGV2VG9vbHNGcm9udGVuZEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zy
b250ZW5kSW1wbDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0Zy
b250ZW5kSW1wbC5oOgorICAgICAgICAqIHNyYy9qcy9EZWJ1Z2dlckFnZW50LmpzOgorICAgICAg
ICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuZG9IYW5kbGVCYWNrdHJhY2VSZXNw
b25zZV8pOgorICAgICAgICAqIHNyYy9qcy9EZXZUb29scy5qczoKKyAgICAgICAgKCk6CisKIDIw
MTAtMDQtMDEgIEpheSBDaXZlbGxpICA8amNpdmVsbGlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggNThiMjUzNC4uZmU1NDUw
NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKQEAgLTI2Myw2ICsyNjMsOCBAQAogICAgICAgICAgICAgICAgICdz
cmMvSW5kZXhlZERhdGFiYXNlUHJveHkuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9JbnNwZWN0
b3JDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9JbnNwZWN0b3JDbGllbnRJ
bXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBs
LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9JbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwu
aCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9saW51eC9XZWJGb250UmVuZGVyaW5nLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL2xpbnV4L1dlYlJlbmRlclRoZW1lLmNwcCcsCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5jcHAgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFjOGYyNwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsLmNwcApAQCAtMCww
ICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudEltcGwuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlY4
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUg
IldlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJEZXZUb29sc0Zyb250
ZW5kSW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRJbXBsKFBhZ2UqIGZyb250ZW5kUGFnZSwgV2ViRGV2VG9vbHNGcm9udGVuZENsaWVudCogY2xp
ZW50LCBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCogZnJvbnRlbmQpCisgICAgOiBtX2Zyb250ZW5k
UGFnZShmcm9udGVuZFBhZ2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2Zyb250
ZW5kKGZyb250ZW5kKQoreworfQorCitJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6On5JbnNw
ZWN0b3JGcm9udGVuZENsaWVudEltcGwoKQoreworICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKKyAg
ICAgICAgbV9mcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDbGllbnQoKTsKKyAgICBtX2NsaWVudCA9
IDA7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjp3aW5kb3dPYmplY3RD
bGVhcmVkKCkKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gZnJhbWVDb250ZXh0ID0gVjhQcm94eTo6Y29udGV4dChtX2Zyb250
ZW5kUGFnZS0+bWFpbkZyYW1lKCkpOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2Nv
cGUoZnJhbWVDb250ZXh0KTsKKworICAgIG1fZnJvbnRlbmRIb3N0ID0gSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZFBhZ2UpOworICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBmcm9udGVuZEhvc3RPYmogPSB0b1Y4KG1fZnJvbnRlbmRIb3N0LmdldCgpKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGZyYW1lQ29udGV4dC0+R2xvYmFsKCk7
CisKKyAgICBnbG9iYWwtPlNldCh2ODo6U3RyaW5nOjpOZXcoIkluc3BlY3RvckZyb250ZW5kSG9z
dCIpLCBmcm9udGVuZEhvc3RPYmopOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
SW1wbDo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIG1fZnJvbnRlbmQtPmZyb250ZW5kTG9hZGVk
KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjptb3ZlV2luZG93Qnko
ZmxvYXQgeCwgZmxvYXQgeSkKK3sKK30KKworU3RyaW5nIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
SW1wbDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCit7CisgICAgcmV0dXJuICIiOworfQorCitTdHJp
bmcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjpoaWRkZW5QYW5lbHMoKQoreworICAgIHJl
dHVybiAiIjsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6OmJyaW5nVG9G
cm9udCgpCit7CisgICAgbV9jbGllbnQtPmFjdGl2YXRlV2luZG93KCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjpjbG9zZVdpbmRvdygpCit7CisgICAgbV9jbGllbnQt
PmNsb3NlV2luZG93KCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjpj
YW5BdHRhY2hXaW5kb3coKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50SW1wbDo6YXR0YWNoV2luZG93KCkKK3sKKyAgICBtX2NsaWVudC0+ZG9j
a1dpbmRvdygpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6ZGV0YWNo
V2luZG93KCkKK3sKKyAgICBtX2NsaWVudC0+dW5kb2NrV2luZG93KCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNp
Z25lZCkKK3sKKyAgICAvLyBEbyBub3RoaW5nOworfQorICAgIAordm9pZCBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudEltcGw6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKK3sKKyAg
ICAvLyBEbyBub3RoaW5nOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsLmggYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMjcwODUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5oCkBAIC0wLDAgKzEs
ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbF9oCisjZGVmaW5lIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50SW1wbF9oCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENs
aWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZEhvc3Q7CitjbGFzcyBQYWdlOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRGV2VG9vbHNGcm9udGVuZENsaWVudDsKK2NsYXNz
IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOworCitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dEltcGwgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBOb25jb3B5YWJsZSAgeworcHVibGlj
OgorICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbChXZWJDb3JlOjpQYWdlKiwgV2ViRGV2
VG9vbHNGcm9udGVuZENsaWVudCosIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKik7CisgICAgdmly
dHVhbCB+SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsKCk7CisKKyAgICAvLyBJbnNwZWN0b3JG
cm9udGVuZENsaWVudCBtZXRob2RzOgorICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dPYmplY3RDbGVh
cmVkKCk7CisgICAgdmlydHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpOworCisgICAgdmlydHVhbCBXZWJD
b3JlOjpTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
U3RyaW5nIGhpZGRlblBhbmVscygpOworCisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgp
OworICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOworCisgICAgdmlydHVhbCBib29sIGNh
bkF0dGFjaFdpbmRvdygpOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGNoYW5nZUF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgaW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBX
ZWJDb3JlOjpQYWdlKiBtX2Zyb250ZW5kUGFnZTsKKyAgICBXZWJEZXZUb29sc0Zyb250ZW5kQ2xp
ZW50KiBtX2NsaWVudDsKKyAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCogbV9mcm9udGVuZDsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2Zyb250ZW5kSG9z
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKaW5kZXggZjc0MWIyMi4uMGE2
YzhkZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5k
SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1w
bC5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckJhY2tlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAg
LTEwMSw2ICsxMDIsOSBAQCBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6V2ViRGV2VG9vbHNGcm9u
dGVuZEltcGwoCiAgICAgLCBtX2FwcGxpY2F0aW9uTG9jYWxlKGFwcGxpY2F0aW9uTG9jYWxlKQog
ICAgICwgbV9sb2FkZWQoZmFsc2UpCiB7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBt
X3dlYlZpZXdJbXBsLT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpYy0+c2V0
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobmV3IEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbCht
X3dlYlZpZXdJbXBsLT5wYWdlKCksIG1fY2xpZW50LCB0aGlzKSk7CisKICAgICBXZWJGcmFtZUlt
cGwqIGZyYW1lID0gbV93ZWJWaWV3SW1wbC0+bWFpbkZyYW1lSW1wbCgpOwogICAgIHY4OjpIYW5k
bGVTY29wZSBzY29wZTsKICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBmcmFtZUNvbnRleHQg
PSBWOFByb3h5Ojpjb250ZXh0KGZyYW1lLT5mcmFtZSgpKTsKQEAgLTExOCw2OSArMTIyLDEwIEBA
IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgKICAgICAg
ICAgIkRlYnVnZ2VyUGF1c2VTY3JpcHQiLAogICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bDo6anNEZWJ1Z2dlclBhdXNlU2NyaXB0KTsKICAgICBkZWJ1Z2dlckNvbW1hbmRFeGVjdXRvck9i
ai5idWlsZCgpOwotCi0gICAgQm91bmRPYmplY3QgZGV2VG9vbHNIb3N0KGZyYW1lQ29udGV4dCwg
dGhpcywgIkluc3BlY3RvckZyb250ZW5kSG9zdCIpOwotICAgIGRldlRvb2xzSG9zdC5hZGRQcm90
b0Z1bmN0aW9uKAotICAgICAgICAibG9hZGVkIiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVu
ZEltcGw6OmpzTG9hZGVkKTsKLSAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAg
ICAgICAgInBsYXRmb3JtIiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzUGxh
dGZvcm0pOwotICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAotICAgICAgICAicG9y
dCIsCi0gICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1BvcnQpOwotICAgIGRldlRv
b2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAotICAgICAgICAiY29weVRleHQiLAotICAgICAgICBX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNDb3B5VGV4dCk7Ci0gICAgZGV2VG9vbHNIb3N0LmFk
ZFByb3RvRnVuY3Rpb24oCi0gICAgICAgICJhY3RpdmF0ZVdpbmRvdyIsCi0gICAgICAgIFdlYkRl
dlRvb2xzRnJvbnRlbmRJbXBsOjpqc0FjdGl2YXRlV2luZG93KTsKLSAgICBkZXZUb29sc0hvc3Qu
YWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAgImNsb3NlV2luZG93IiwKLSAgICAgICAgV2ViRGV2
VG9vbHNGcm9udGVuZEltcGw6OmpzQ2xvc2VXaW5kb3cpOwotICAgIGRldlRvb2xzSG9zdC5hZGRQ
cm90b0Z1bmN0aW9uKAotICAgICAgICAiYXR0YWNoIiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9u
dGVuZEltcGw6OmpzRG9ja1dpbmRvdyk7Ci0gICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rp
b24oCi0gICAgICAgICJkZXRhY2giLAotICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6
anNVbmRvY2tXaW5kb3cpOwotICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAotICAg
ICAgICAibG9jYWxpemVkU3RyaW5nc1VSTCIsCi0gICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsOjpqc0xvY2FsaXplZFN0cmluZ3NVUkwpOwotICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1
bmN0aW9uKAotICAgICAgICAiaGlkZGVuUGFuZWxzIiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9u
dGVuZEltcGw6OmpzSGlkZGVuUGFuZWxzKTsKLSAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5j
dGlvbigKLSAgICAgICAgInNldHRpbmciLAotICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bDo6anNTZXR0aW5nKTsKLSAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAg
ICAgInNldFNldHRpbmciLAotICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTZXRT
ZXR0aW5nKTsKLSAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAgImJy
aW5nVG9Gcm9udCIsCi0gICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0JyaW5nVG9G
cm9udCk7Ci0gICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rpb24oCi0gICAgICAgICJpbnNw
ZWN0ZWRVUkxDaGFuZ2VkIiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzSW5z
cGVjdGVkVVJMQ2hhbmdlZCk7Ci0gICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rpb24oCi0g
ICAgICAgICJzaG93Q29udGV4dE1lbnUiLAotICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bDo6anNTaG93Q29udGV4dE1lbnUpOwotICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9u
KAotICAgICAgICAiY2FuQXR0YWNoV2luZG93IiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVu
ZEltcGw6OmpzQ2FuQXR0YWNoV2luZG93KTsKLSAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5j
dGlvbigKLSAgICAgICAgInNldEF0dGFjaGVkV2luZG93SGVpZ2h0IiwKLSAgICAgICAgV2ViRGV2
VG9vbHNGcm9udGVuZEltcGw6OmpzU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOwotICAgIGRldlRv
b2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAotICAgICAgICAibW92ZVdpbmRvd0J5IiwKLSAgICAg
ICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzTW92ZVdpbmRvd0J5KTsKLSAgICBkZXZUb29s
c0hvc3QuYnVpbGQoKTsKIH0KIAogV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6On5XZWJEZXZUb29s
c0Zyb250ZW5kSW1wbCgpCiB7Ci0gICAgaWYgKG1fbWVudVByb3ZpZGVyKQotICAgICAgICBtX21l
bnVQcm92aWRlci0+ZGlzY29ubmVjdCgpOwogfQogCiB2b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsOjpkaXNwYXRjaE1lc3NhZ2VGcm9tQWdlbnQoY29uc3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0
YSYgZGF0YSkKQEAgLTE5Nyw2ICsxNDIsMjIgQEAgdm9pZCBXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bDo6ZGlzcGF0Y2hNZXNzYWdlRnJvbUFnZW50KGNvbnN0IFdlYkRldlRvb2xzTWVzc2FnZUQKICAg
ICBleGVjdXRlU2NyaXB0KHYpOwogfQogCit2b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpm
cm9udGVuZExvYWRlZCgpCit7CisgICAgbV9sb2FkZWQgPSB0cnVlOworCisgICAgLy8gR3JhbnQg
dGhlIGRldnRvb2xzIHBhZ2UgdGhlIGFiaWxpdHkgdG8gaGF2ZSBzb3VyY2UgdmlldyBpZnJhbWVz
LgorICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBtX3dlYlZpZXdJbXBsLT5wYWdlKCktPm1h
aW5GcmFtZSgpLT5kb21XaW5kb3coKS0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBvcmlnaW4tPmdy
YW50VW5pdmVyc2FsQWNjZXNzKCk7CisKKyAgICBmb3IgKFZlY3RvcjxWZWN0b3I8U3RyaW5nPiA+
OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0luY29taW5nTWVzc2FnZXMuYmVnaW4oKTsKKyAgICAg
ICAgIGl0ICE9IG1fcGVuZGluZ0luY29taW5nTWVzc2FnZXMuZW5kKCk7CisgICAgICAgICArK2l0
KSB7CisgICAgICAgIGV4ZWN1dGVTY3JpcHQoKml0KTsKKyAgICB9CisgICAgbV9wZW5kaW5nSW5j
b21pbmdNZXNzYWdlcy5jbGVhcigpOworfQorCiB2b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBs
OjpleGVjdXRlU2NyaXB0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2KQogewogICAgIFdlYkZyYW1l
SW1wbCogZnJhbWUgPSBtX3dlYlZpZXdJbXBsLT5tYWluRnJhbWVJbXBsKCk7CkBAIC0yMTIsMTI1
ICsxNzMsMTEgQEAgdm9pZCBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6ZXhlY3V0ZVNjcmlwdChj
b25zdCBWZWN0b3I8U3RyaW5nPiYgdikKICAgICBmdW5jdGlvbi0+Q2FsbChmcmFtZUNvbnRleHQt
Pkdsb2JhbCgpLCBhcmdzLnNpemUoKSwgYXJncy5kYXRhKCkpOwogfQogCi12b2lkIFdlYkRldlRv
b2xzRnJvbnRlbmRJbXBsOjpkaXNwYXRjaE9uV2ViSW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgbWV0
aG9kTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJhbSkKLXsKLSAgICBXZWJGcmFtZUltcGwqIGZyYW1l
ID0gbV93ZWJWaWV3SW1wbC0+bWFpbkZyYW1lSW1wbCgpOwotICAgIHY4OjpIYW5kbGVTY29wZSBz
Y29wZTsKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBmcmFtZUNvbnRleHQgPSBWOFByb3h5
Ojpjb250ZXh0KGZyYW1lLT5mcmFtZSgpKTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4
dFNjb3BlKGZyYW1lQ29udGV4dCk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2ViSW5z
cGVjdG9yID0gZnJhbWVDb250ZXh0LT5HbG9iYWwoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiV2Vi
SW5zcGVjdG9yIikpOwotICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3ItPklzT2JqZWN0KCkpOwotICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2ViSW5zcGVjdG9yT2JqID0gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdCh3ZWJJbnNwZWN0b3IpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IG1ldGhvZCA9IHdlYkluc3BlY3Rvck9iai0+R2V0KFRvVjhTdHJpbmcobWV0aG9kTmFtZSkpOwot
ICAgIEFTU0VSVChtZXRob2QtPklzRnVuY3Rpb24oKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6RnVu
Y3Rpb24+IG1ldGhvZEZ1bmMgPSB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QobWV0aG9k
KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJnc1tdID0gewotICAgICAgVG9WOFN0cmlu
ZyhwYXJhbSkKLSAgICB9OwotICAgIG1ldGhvZEZ1bmMtPkNhbGwoZnJhbWVDb250ZXh0LT5HbG9i
YWwoKSwgMSwgYXJncyk7Ci19Ci0KIHZvaWQgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OnNlbmRS
cGNNZXNzYWdlKGNvbnN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEpCiB7CiAgICAgbV9j
bGllbnQtPnNlbmRNZXNzYWdlVG9BZ2VudChkYXRhKTsKIH0KIAotdm9pZCBXZWJEZXZUb29sc0Zy
b250ZW5kSW1wbDo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVt
KQotewotICAgIGludCBpdGVtTnVtYmVyID0gaXRlbS0+YWN0aW9uKCkgLSBDb250ZXh0TWVudUl0
ZW1CYXNlQ3VzdG9tVGFnOwotICAgIGRpc3BhdGNoT25XZWJJbnNwZWN0b3IoImNvbnRleHRNZW51
SXRlbVNlbGVjdGVkIiwgU3RyaW5nOjpudW1iZXIoaXRlbU51bWJlcikpOwotfQotCi12b2lkIFdl
YkRldlRvb2xzRnJvbnRlbmRJbXBsOjpjb250ZXh0TWVudUNsZWFyZWQoKQotewotICAgIGRpc3Bh
dGNoT25XZWJJbnNwZWN0b3IoImNvbnRleHRNZW51Q2xlYXJlZCIsICIiKTsKLX0KLQotdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0xvYWRlZChjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9u
dGVuZCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKj4odjg6OkV4dGVybmFs
OjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOwotICAgIGZyb250ZW5kLT5tX2xvYWRlZCA9
IHRydWU7Ci0KLSAgICAvLyBHcmFudCB0aGUgZGV2dG9vbHMgcGFnZSB0aGUgYWJpbGl0eSB0byBo
YXZlIHNvdXJjZSB2aWV3IGlmcmFtZXMuCi0gICAgUGFnZSogcGFnZSA9IFY4UHJveHk6OnJldHJp
ZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpLT5wYWdlKCk7Ci0gICAgU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiA9IHBhZ2UtPm1haW5GcmFtZSgpLT5kb21XaW5kb3coKS0+c2VjdXJpdHlPcmlnaW4o
KTsKLSAgICBvcmlnaW4tPmdyYW50VW5pdmVyc2FsQWNjZXNzKCk7Ci0KLSAgICBmb3IgKFZlY3Rv
cjxWZWN0b3I8U3RyaW5nPiA+OjppdGVyYXRvciBpdCA9IGZyb250ZW5kLT5tX3BlbmRpbmdJbmNv
bWluZ01lc3NhZ2VzLmJlZ2luKCk7Ci0gICAgICAgICBpdCAhPSBmcm9udGVuZC0+bV9wZW5kaW5n
SW5jb21pbmdNZXNzYWdlcy5lbmQoKTsKLSAgICAgICAgICsraXQpIHsKLSAgICAgICAgZnJvbnRl
bmQtPmV4ZWN1dGVTY3JpcHQoKml0KTsKLSAgICB9Ci0gICAgZnJvbnRlbmQtPm1fcGVuZGluZ0lu
Y29taW5nTWVzc2FnZXMuY2xlYXIoKTsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQot
Ci0vLyBzdGF0aWMKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bDo6anNQbGF0Zm9ybShjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotI2lmIGRlZmluZWQo
T1NfTUFDT1NYKQotICAgIHJldHVybiB2OFN0cmluZygibWFjIik7Ci0jZWxpZiBkZWZpbmVkKE9T
X0xJTlVYKQotICAgIHJldHVybiB2OFN0cmluZygibGludXgiKTsKLSNlbGlmIGRlZmluZWQoT1Nf
V0lOKQotICAgIHJldHVybiB2OFN0cmluZygid2luZG93cyIpOwotI2Vsc2UKLSAgICByZXR1cm4g
djhTdHJpbmcoInVua25vd24iKTsKLSNlbmRpZgotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzUG9ydChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQotewotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZh
bHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNDb3B5VGV4dChjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQotewotICAgIFN0cmluZyB0ZXh0ID0gV2ViQ29yZTo6dG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxDaGVjayhhcmdzWzBdKTsKLSAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2Fy
ZCgpLT53cml0ZVBsYWluVGV4dCh0ZXh0KTsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwot
fQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzQWN0
aXZhdGVXaW5kb3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBXZWJEZXZUb29s
c0Zyb250ZW5kSW1wbCogZnJvbnRlbmQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0Zyb250ZW5k
SW1wbCo+KHY4OjpFeHRlcm5hbDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1ZSgpKTsKLSAgICBm
cm9udGVuZC0+bV9jbGllbnQtPmFjdGl2YXRlV2luZG93KCk7Ci0gICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsOjpqc0Nsb3NlV2luZG93KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGwqIGZyb250ZW5kID0gc3RhdGljX2Nhc3Q8V2ViRGV2VG9vbHNG
cm9udGVuZEltcGwqPih2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUoKSk7
Ci0gICAgZnJvbnRlbmQtPm1fY2xpZW50LT5jbG9zZVdpbmRvdygpOwotICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250
ZW5kSW1wbDo6anNEb2NrV2luZG93KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAg
V2ViRGV2VG9vbHNGcm9udGVuZEltcGwqIGZyb250ZW5kID0gc3RhdGljX2Nhc3Q8V2ViRGV2VG9v
bHNGcm9udGVuZEltcGwqPih2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUo
KSk7Ci0gICAgZnJvbnRlbmQtPm1fY2xpZW50LT5kb2NrV2luZG93KCk7Ci0gICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsOjpqc1VuZG9ja1dpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewot
ICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9udGVuZCA9IHN0YXRpY19jYXN0PFdlYkRl
dlRvb2xzRnJvbnRlbmRJbXBsKj4odjg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZh
bHVlKCkpOwotICAgIGZyb250ZW5kLT5tX2NsaWVudC0+dW5kb2NrV2luZG93KCk7Ci0gICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRv
b2xzRnJvbnRlbmRJbXBsOjpqc0xvY2FsaXplZFN0cmluZ3NVUkwoY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKLXsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi12ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzSGlkZGVuUGFuZWxzKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgcmV0dXJuIHY4U3RyaW5nKCIiKTsKLX0KLQog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0RlYnVnZ2Vy
Q29tbWFuZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsKiBmcm9udGVuZCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzRnJvbnRlbmRJbXBs
Kj4odjg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOwpAQCAtMzM5LDE2
ICsxODYsNiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6
OmpzRGVidWdnZXJDb21tYW5kKGNvbnN0IHY4OjpBcmd1bQogICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bDo6anNTZXR0aW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsOjpqc1NldFNldHRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGw6OmpzRGVidWdnZXJQYXVzZVNjcmlwdChjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQogewogICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9udGVuZCA9
IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKj4odjg6OkV4dGVybmFsOjpDYXN0
KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOwpAQCAtMzU2LDcxICsxOTMsNCBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzRGVidWdnZXJQYXVzZVNjcmlw
dChjb25zdCB2ODo6QQogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLXY4OjpIYW5k
bGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNCcmluZ1RvRnJvbnQoY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwot
fQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzSW5z
cGVjdGVkVVJMQ2hhbmdlZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29s
c0Zyb250ZW5kSW1wbDo6anNTaG93Q29udGV4dE1lbnUoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKLXsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCi0gICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Ci0KLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZXZlbnRXcmFwcGVyID0gdjg6
OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pOwotICAgIGlmICghVjhNb3VzZUV2ZW50
OjppbmZvLmVxdWFscyhWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKGV2ZW50V3JhcHBlcikp
KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgRXZlbnQqIGV2ZW50ID0g
VjhFdmVudDo6dG9OYXRpdmUoZXZlbnRXcmFwcGVyKTsKLSAgICBpZiAoIWFyZ3NbMV0tPklzQXJy
YXkoKSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIHY4OjpMb2NhbDx2
ODo6QXJyYXk+IGFycmF5ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QoYXJnc1sxXSk7Ci0g
ICAgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+IGl0ZW1zOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcnJheS0+TGVuZ3RoKCk7ICsraSkgewotICAgICAgICB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gaXRlbSA9IHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdChhcnJheS0+R2V0KHY4OjpJ
bnRlZ2VyOjpOZXcoaSkpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gbGFiZWwgPSBp
dGVtLT5HZXQodjg6OlN0cmluZzo6TmV3KCJsYWJlbCIpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gaWQgPSBpdGVtLT5HZXQodjg6OlN0cmluZzo6TmV3KCJpZCIpKTsKLSAgICAgICAg
aWYgKGxhYmVsLT5Jc1VuZGVmaW5lZCgpIHx8IGlkLT5Jc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAg
ICAgaXRlbXMuYXBwZW5kKG5ldyBDb250ZXh0TWVudUl0ZW0oU2VwYXJhdG9yVHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW1UYWdO
b0FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJp
bmcoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIENvbnRleHRNZW51QWN0aW9uIHR5
cGVkSWQgPSBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUFjdGlvbj4oCi0gICAgICAgICAgICAgIENv
bnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWcgKyBpZC0+VG9JbnQzMigpLT5WYWx1ZSgpKTsKLSAg
ICAgICAgICBpdGVtcy5hcHBlbmQobmV3IENvbnRleHRNZW51SXRlbShBY3Rpb25UeXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVkSWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9XZWJDb3JlU3RyaW5nV2l0aE51
bGxDaGVjayhsYWJlbCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsKiBmcm9udGVuZCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzRnJvbnRlbmRJbXBs
Kj4odjg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOwotCi0gICAgZnJv
bnRlbmQtPm1fbWVudVByb3ZpZGVyID0gTWVudVByb3ZpZGVyOjpjcmVhdGUoZnJvbnRlbmQsIGl0
ZW1zKTsKLQotICAgIENvbnRleHRNZW51Q29udHJvbGxlciogbWVudUNvbnRyb2xsZXIgPSBmcm9u
dGVuZC0+bV93ZWJWaWV3SW1wbC0+cGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKLSAg
ICBtZW51Q29udHJvbGxlci0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBmcm9udGVuZC0+bV9tZW51
UHJvdmlkZXIpOwotCi0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQotdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0NhbkF0dGFjaFdpbmRvdyhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIHJldHVybiB2OEJvb2xlYW4odHJ1ZSk7
Ci19Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2
VG9vbHNGcm9udGVuZEltcGw6OmpzTW92ZVdpbmRvd0J5KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCi17Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRl
bmRJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmgK
aW5kZXggYTM4ZTUxZC4uZmE0NzA3ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNGcm9udGVuZEltcGwuaApAQCAtMzEsOCArMzEsNiBAQAogI2lmbmRlZiBXZWJEZXZUb29s
c0Zyb250ZW5kSW1wbF9oCiAjZGVmaW5lIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsX2gKIAotI2lu
Y2x1ZGUgIkNvbnRleHRNZW51LmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVQcm92aWRlci5oIgog
I2luY2x1ZGUgIkRldlRvb2xzUlBDLmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNGcm9udGVuZC5o
IgogI2luY2x1ZGUgPHY4Lmg+CkBAIC03NCw4MCArNzIsMTMgQEAgcHVibGljOgogICAgIC8vIFdl
YkRldlRvb2xzRnJvbnRlbmQgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoTWVzc2FnZUZyb21BZ2VudChjb25zdCBXZWJLaXQ6OldlYkRldlRvb2xzTWVzc2FnZURhdGEm
IGRhdGEpOwogCi1wcml2YXRlOgotICAgIGNsYXNzIE1lbnVQcm92aWRlciA6IHB1YmxpYyBXZWJD
b3JlOjpDb250ZXh0TWVudVByb3ZpZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPE1lbnVQcm92aWRlcj4gY3JlYXRlKFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBm
cm9udGVuZEhvc3QsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0qPiYgaXRl
bXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVudVByb3Zp
ZGVyKGZyb250ZW5kSG9zdCwgaXRlbXMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwg
fk1lbnVQcm92aWRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRNZW51Q2xlYXJl
ZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkaXNjb25uZWN0KCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbV9mcm9udGVuZEhvc3QgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIHBvcHVsYXRlQ29udGV4dE1lbnUoV2ViQ29yZTo6Q29udGV4dE1lbnUqIG1lbnUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBtZW51LT5hcHBlbmRJdGVtKCptX2l0ZW1zW2ld
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxl
Y3RlZChXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKLSAgICAgICAgICAgICAgICBtX2Zyb250ZW5kSG9zdC0+
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoaXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgY29udGV4dE1lbnVDbGVhcmVkKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KG1fZnJvbnRlbmRIb3N0KQotICAgICAgICAgICAgICAgIG1fZnJvbnRlbmRIb3N0LT5jb250ZXh0
TWVudUNsZWFyZWQoKTsKLSAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2l0ZW1zKTsKLSAg
ICAgICAgICAgIG1faXRlbXMuY2xlYXIoKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgTWVudVByb3ZpZGVyKFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9udGVuZEhvc3Qs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCi0gICAgICAg
ICAgICA6IG1fZnJvbnRlbmRIb3N0KGZyb250ZW5kSG9zdCkKLSAgICAgICAgICAgICwgbV9pdGVt
cyhpdGVtcykgeyB9Ci0gICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBtX2Zyb250ZW5k
SG9zdDsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSo+IG1faXRlbXM7
Ci0gICAgfTsKKyAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CiAKK3ByaXZhdGU6CiAgICAgdm9p
ZCBleGVjdXRlU2NyaXB0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2KTsKLSAgICB2b2lkIGRpc3Bh
dGNoT25XZWJJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgcGFy
YW0pOwotCi0gICAgLy8gZnJpZW5kIGNsYXNzIE1lbnVTZWxlY3Rpb25IYW5kbGVyOwotICAgIHZv
aWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtKiBtZW51
SXRlbSk7Ci0gICAgdm9pZCBjb250ZXh0TWVudUNsZWFyZWQoKTsKLQotICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4ganNMb2FkZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7Ci0g
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1BsYXRmb3JtKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNQb3J0KGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4ganNDb3B5VGV4dChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKIAotICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNBY3RpdmF0ZVdpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKTsKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzQ2xvc2VXaW5kb3co
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqc0RvY2tXaW5kb3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1VuZG9ja1dpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKTsKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzTG9jYWxpemVkU3Ry
aW5nc1VSTChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKLSAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGpzSGlkZGVuUGFuZWxzKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwog
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNEZWJ1Z2dlckNvbW1hbmQoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBq
c1NldHRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBqc1NldFNldHRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CiAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0RlYnVnZ2VyUGF1c2VTY3JpcHQoY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBqc0JyaW5nVG9Gcm9udChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKLSAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKTsKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzU2hvd0Nv
bnRleHRNZW51KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4ganNDYW5BdHRhY2hXaW5kb3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cyk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1NldEF0dGFjaGVkV2luZG93
SGVpZ2h0KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4ganNNb3ZlV2luZG93QnkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CiAK
ICAgICBXZWJLaXQ6OldlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOwogICAgIFdlYktpdDo6V2Vi
RGV2VG9vbHNGcm9udGVuZENsaWVudCogbV9jbGllbnQ7CkBAIC0xNTcsNyArODgsNiBAQCBwcml2
YXRlOgogICAgIE93blB0cjxKU1Rvb2xzQWdlbnRCb3VuZE9iaj4gbV90b29sc0FnZW50T2JqOwog
ICAgIGJvb2wgbV9sb2FkZWQ7CiAgICAgVmVjdG9yPFZlY3RvcjxTdHJpbmc+ID4gbV9wZW5kaW5n
SW5jb21pbmdNZXNzYWdlczsKLSAgICBSZWZQdHI8TWVudVByb3ZpZGVyPiBtX21lbnVQcm92aWRl
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9qcy9EZWJ1Z2dlckFnZW50LmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1
Z2dlckFnZW50LmpzCmluZGV4IGU2YTZjMzcuLjEyNGJjZWQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvanMvRGVidWdnZXJBZ2VudC5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L2pzL0RlYnVnZ2VyQWdlbnQuanMKQEAgLTk2NCw3ICs5NjQsNyBAQCBkZXZ0b29scy5EZWJ1Z2dl
ckFnZW50LnByb3RvdHlwZS5kb0hhbmRsZUJhY2t0cmFjZVJlc3BvbnNlXyA9IGZ1bmN0aW9uKG1z
ZykKICAgICAgICAgdGhpcy5jYWxsRnJhbWVzXy5wdXNoKHRoaXMuZm9ybWF0Q2FsbEZyYW1lXyhm
cmFtZXNbaV0pKTsKICAgICBXZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0KHRoaXMuY2FsbEZyYW1l
c18pOwogICAgIHRoaXMuc2hvd1BlbmRpbmdFeGNlcHRpb25NZXNzYWdlXygpOwotICAgIEluc3Bl
Y3RvckZyb250ZW5kSG9zdC5hY3RpdmF0ZVdpbmRvdygpOworICAgIEluc3BlY3RvckZyb250ZW5k
SG9zdC5icmluZ1RvRnJvbnQoKTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9qcy9EZXZUb29scy5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMK
aW5kZXggNzQ3NmQ4Mi4uNzc0NzVhNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9q
cy9EZXZUb29scy5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCkBA
IC0yNzksNyArMjc5LDcgQEAgV2ViSW5zcGVjdG9yLlVJU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5n
KQogICAgIFdlYkluc3BlY3Rvci5zZWFyY2hpbmdGb3JOb2RlV2FzRGlzYWJsZWQgPSBmdW5jdGlv
bigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5wYW5lbHMuZWxlbWVudHMuX25vZGVTZWFyY2hC
dXR0b24udG9nZ2xlZCkKLSAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5hY3RpdmF0
ZVdpbmRvdygpOworICAgICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmJyaW5nVG9Gcm9u
dCgpOwogICAgICAgICBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgIH0KIH0p
KCk7Cg==
</data>
<flag name="review"
          id="35877"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52409</attachid>
            <date>2010-04-02 05:54:15 -0700</date>
            <delta_ts>2010-04-05 05:13:45 -0700</delta_ts>
            <desc>patch that I&apos;m going to land</desc>
            <filename>frontend-client-chrome2.patch</filename>
            <type>text/plain</type>
            <size>43537</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTQ4YjE1My4uMTJiOWQ1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMC0wNC0wMiAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93
Q29udGV4dE1lbnUgZm9yIENocm9taXVtLgorIAorICAgICAgICBNb3ZlIGluc3BlY3RvciBmcm9u
dGVuZCBjb250ZXh0IG1lbnUgY29kZSBmcm9tIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRvIElu
c3BlY3RvckZyb250ZW5kSG9zdCBhcyBpdCdzIHBsYXRmb3JtIGluZGVwZW5kZW50LgorIAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY4MTcKKworICAg
ICAgICAqIFdlYkNvcmUuSW5zcGVjdG9yLmV4cDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudUNhbGxiYWNrKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6On5J
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWw6OndpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVu
ZE1lbnVQcm92aWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyb250ZW5kTWVudVBy
b3ZpZGVyOjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyb250ZW5kTWVudVByb3Zp
ZGVyOjpGcm9udGVuZE1lbnVQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1l
bnVQcm92aWRlcjo6fkZyb250ZW5kTWVudVByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
b250ZW5kTWVudVByb3ZpZGVyOjpwb3B1bGF0ZUNvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkNv
cmU6OkZyb250ZW5kTWVudVByb3ZpZGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6Y29udGV4dE1lbnVDbGVhcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6SW5zcGVjdG9yRnJvbnRl
bmRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6ZGlzY29u
bmVjdENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNo
b3dDb250ZXh0TWVudSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9z
dC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjcmVhdGUpOgor
CiAyMDEwLTA0LTAyICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLkluc3BlY3Rvci5leHAgYi9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cAppbmRl
eCBmNzc0NzM5Li4wY2E3Y2Q3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9y
LmV4cAorKysgYi9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cApAQCAtMjQsNiArMjQsNSBA
QCBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwxNGZyb250ZW5kTG9h
ZGVkRXYKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDI3cmVzdG9y
ZUF0dGFjaGVkV2luZG93SGVpZ2h0RXYKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDEybW92ZVdpbmRvd0J5RWZmCiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWwxNWNhbkF0dGFjaFdpbmRvd0V2Ci1fX1pON1dlYkNvcmUyOEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwxNXNob3dDb250ZXh0TWVudUVQTlNfNUV2ZW50RVJLTjNXVEY2
VmVjdG9ySVBOU18xNUNvbnRleHRNZW51SXRlbUVMbTBFRUUKIF9fWk43V2ViQ29yZTI4SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDE3c2V0QXR0YWNoZWRXaW5kb3dFYgogX19aTjdXZWJDb3Jl
MjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMjZjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdo
dEVqCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckZy
b250ZW5kSG9zdEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3Bl
Y3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKaW5kZXggYjgyMzAzNC4uYjM1NDM3MSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JGcm9udGVuZEhvc3RD
dXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJv
bnRlbmRIb3N0Q3VzdG9tLmNwcApAQCAtMzUsMTIgKzM1LDQ3IEBACiAjaW5jbHVkZSAiSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmgiCiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OE1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93
Q29udGV4dE1lbnVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogeworICAgIGlm
IChhcmdzLkxlbmd0aCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKwor
ICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBldmVudFdyYXBwZXIgPSB2ODo6TG9jYWw8djg6Ok9i
amVjdD46OkNhc3QoYXJnc1swXSk7CisgICAgaWYgKCFWOE1vdXNlRXZlbnQ6OmluZm8uZXF1YWxz
KFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUoZXZlbnRXcmFwcGVyKSkpCisgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBFdmVudCogZXZlbnQgPSBWOEV2ZW50Ojp0b05h
dGl2ZShldmVudFdyYXBwZXIpOworICAgIGlmICghYXJnc1sxXS0+SXNBcnJheSgpKQorICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gYXJy
YXkgPSB2ODo6TG9jYWw8djg6OkFycmF5Pjo6Q2FzdChhcmdzWzFdKTsKKyAgICBWZWN0b3I8Q29u
dGV4dE1lbnVJdGVtKj4gaXRlbXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5
LT5MZW5ndGgoKTsgKytpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpdGVtID0g
djg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KGFycmF5LT5HZXQodjg6OkludGVnZXI6Ok5ldyhp
KSkpOworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBsYWJlbCA9IGl0ZW0tPkdldCh2ODo6
U3RyaW5nOjpOZXcoImxhYmVsIikpOworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBpZCA9
IGl0ZW0tPkdldCh2ODo6U3RyaW5nOjpOZXcoImlkIikpOworICAgICAgICBpZiAobGFiZWwtPklz
VW5kZWZpbmVkKCkgfHwgaWQtPklzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICBpdGVtcy5hcHBl
bmQobmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZygpKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgQ29udGV4dE1lbnVBY3Rpb24gdHlwZWRJZCA9IHN0YXRp
Y19jYXN0PENvbnRleHRNZW51QWN0aW9uPigKKyAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVt
QmFzZUN1c3RvbVRhZyArIGlkLT5Ub0ludDMyKCktPlZhbHVlKCkpOworICAgICAgICAgIGl0ZW1z
LmFwcGVuZChuZXcgQ29udGV4dE1lbnVJdGVtKEFjdGlvblR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRJZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGxhYmVs
KSkpOworICAgICAgICB9CisgICAgfQorCisgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KiBmcm9u
dGVuZEhvc3QgPSBWOEluc3BlY3RvckZyb250ZW5kSG9zdDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7CisgICAgZnJvbnRlbmRIb3N0LT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIGl0ZW1zKTsKKwog
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudC5oCmluZGV4IDA1ODM0NmIuLjBjZTYwMmMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50LmgKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaApAQCAtNjAsOCArNjAsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2ln
bmVkKSA9IDA7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29u
c3QgU3RyaW5nJikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVudShFdmVu
dCosIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYpID0gMDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbC5jcHAKaW5kZXggMTg4OGZiZC4uMDc3ZmM2NiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKQEAgLTM0LDEw
ICszNCw2IEBACiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkNocm9tZS5oIgot
I2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVQ
cm92aWRlci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC01MSw2NyArNDcsNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIEZyb250ZW5kTWVudVByb3ZpZGVyIDogcHVibGljIENvbnRleHRNZW51
UHJvdmlkZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyb250ZW5kTWVudVBy
b3ZpZGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCogZnJvbnRlbmRDbGll
bnQsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0
ZW0qPiYgaXRlbXMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZyb250ZW5k
TWVudVByb3ZpZGVyKGZyb250ZW5kQ2xpZW50LCB3ZWJJbnNwZWN0b3IsIGl0ZW1zKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgZGlzY29ubmVjdCgpCi0gICAgewotICAgICAgICBtX3dlYkluc3Bl
Y3RvciA9IFNjcmlwdE9iamVjdCgpOwotICAgICAgICBtX2Zyb250ZW5kQ2xpZW50ID0gMDsKLSAg
ICB9Ci0gICAgCi1wcml2YXRlOgotICAgIEZyb250ZW5kTWVudVByb3ZpZGVyKEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwqIGZyb250ZW5kQ2xpZW50LCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVj
dG9yLCAgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcykKLSAgICAgICAgOiBt
X2Zyb250ZW5kQ2xpZW50KGZyb250ZW5kQ2xpZW50KQotICAgICAgICAsIG1fd2ViSW5zcGVjdG9y
KHdlYkluc3BlY3RvcikKLSAgICAgICAgLCBtX2l0ZW1zKGl0ZW1zKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIH5Gcm9udGVuZE1lbnVQcm92aWRlcigpCi0gICAgewotICAgICAgICBjb250
ZXh0TWVudUNsZWFyZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHBvcHVsYXRl
Q29udGV4dE1lbnUoQ29udGV4dE1lbnUqIG1lbnUpCi0gICAgewotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtZW51LT5hcHBl
bmRJdGVtKCptX2l0ZW1zW2ldKTsKLSAgICB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGNvbnRl
eHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSogaXRlbSkKLSAgICB7Ci0gICAgICAg
IGludCBpdGVtTnVtYmVyID0gaXRlbS0+YWN0aW9uKCkgLSBDb250ZXh0TWVudUl0ZW1CYXNlQ3Vz
dG9tVGFnOwotCi0gICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3Bl
Y3RvciwgImRpc3BhdGNoIik7Ci0gICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJjb250
ZXh0TWVudUl0ZW1TZWxlY3RlZCIpOwotICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChp
dGVtTnVtYmVyKTsKLSAgICAgICAgZnVuY3Rpb24uY2FsbCgpOwotICAgIH0KLSAgICAKLSAgICB2
aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVDbGVhcmVkKCkKLSAgICB7Ci0KLSAgICAgICAgaWYgKG1f
ZnJvbnRlbmRDbGllbnQpIHsKLSAgICAgICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7Ci0gICAgICAgICAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudCgiY29udGV4dE1lbnVDbGVhcmVkIik7Ci0gICAgICAgICAgICBmdW5jdGlvbi5j
YWxsKCk7Ci0KLSAgICAgICAgICAgIG1fZnJvbnRlbmRDbGllbnQtPm1fbWVudVByb3ZpZGVyID0g
MDsKLSAgICAgICAgfQotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9pdGVtcyk7Ci0gICAgICAg
IG1faXRlbXMuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsKiBtX2Zyb250ZW5kQ2xpZW50OwotICAgIFNjcmlwdE9iamVjdCBtX3dlYkluc3BlY3RvcjsK
LSAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4gbV9pdGVtczsKLX07Ci0KIHN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUgPSAiaW5zcGVjdG9yQXR0
YWNoZWRIZWlnaHQiOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdo
dCA9IDMwMDsKIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTAu
MGY7CkBAIC0xMjEsNyArNTYsNiBAQCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsKEluc3BlY3RvckNvbnRyb2xsZXIqCiAgICAgOiBtX2lu
c3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAsIG1fZnJvbnRlbmRQ
YWdlKGZyb250ZW5kUGFnZSkKICAgICAsIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSgwKQotICAgICwg
bV9tZW51UHJvdmlkZXIoMCkKIHsKIH0KIApAQCAtMTI5LDggKzYzLDYgQEAgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoKQogewogICAg
IGlmIChtX2Zyb250ZW5kSG9zdCkKICAgICAgICAgbV9mcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RD
bGllbnQoKTsKLSAgICBpZiAobV9tZW51UHJvdmlkZXIpCi0gICAgICAgIG1fbWVudVByb3ZpZGVy
LT5kaXNjb25uZWN0KCk7CiAgICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gMDsKICAgICBtX2Zy
b250ZW5kUGFnZSA9IDA7CiAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyID0gMDsKQEAgLTE0Myw3
ICs3NSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6d2luZG93T2JqZWN0
Q2xlYXJlZCgpCiAgICAgLy8gRklYTUU6IGRvbid0IGtlZXAgcmVmZXJlbmNlIHRvIHRoZSBzY3Jp
cHQgc3RhdGUKICAgICBtX2Zyb250ZW5kU2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdl
KGRlYnVnZ2VyV29ybGQoKSwgbV9mcm9udGVuZFBhZ2UpOwogICAgIFNjcmlwdEdsb2JhbE9iamVj
dDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckJhY2tlbmQiLCBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSk7Ci0gICAgbV9mcm9udGVuZEhvc3Qg
PSBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX2Zyb250ZW5kSG9z
dCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMsIG1fZnJvbnRlbmRQYWdlKTsK
ICAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJJbnNw
ZWN0b3JGcm9udGVuZEhvc3QiLCBtX2Zyb250ZW5kSG9zdC5nZXQoKSk7CiB9CiAKQEAgLTE4Mywy
MCArMTE1LDYgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjptb3ZlV2luZG93
QnkoZmxvYXQgeCwgZmxvYXQgeSkKICAgICBtX2Zyb250ZW5kUGFnZS0+Y2hyb21lKCktPnNldFdp
bmRvd1JlY3QoZnJhbWVSZWN0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpzaG93Q29udGV4dE1lbnUoRXZlbnQqIGV2ZW50LCBjb25zdCBWZWN0b3I8Q29udGV4dE1l
bnVJdGVtKj4mIGl0ZW1zKQotewotICAgIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JPYmo7Ci0g
ICAgaWYgKCFTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJX
ZWJJbnNwZWN0b3IiLCB3ZWJJbnNwZWN0b3JPYmopKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJlZlB0cjxGcm9udGVu
ZE1lbnVQcm92aWRlcj4gbWVudVByb3ZpZGVyID0gRnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0
ZSh0aGlzLCB3ZWJJbnNwZWN0b3JPYmosIGl0ZW1zKTsKLSAgICBDb250ZXh0TWVudUNvbnRyb2xs
ZXIqIG1lbnVDb250cm9sbGVyID0gbV9mcm9udGVuZFBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxl
cigpOwotICAgIG1lbnVDb250cm9sbGVyLT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIG1lbnVQcm92
aWRlcik7Ci0gICAgbV9tZW51UHJvdmlkZXIgPSBtZW51UHJvdmlkZXIuZ2V0KCk7Ci19Ci0KIHZv
aWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBh
dHRhY2hlZCkKIHsKICAgICBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oCmluZGV4IDkxOGM0
NzkuLjA2N2QyOTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWwuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsLmgKQEAgLTM3LDcgKzM3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGcm9udGVuZE1lbnVQcm92aWRlcjsKIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7
CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZEhvc3Q7CiBjbGFzcyBQYWdlOwpAQCAtNTUsOCArNTQs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNhbkF0dGFjaFdpbmRvdygpOwogICAgIHZp
cnR1YWwgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2ZW50KiwgY29uc3QgVmVjdG9yPENvbnRleHRN
ZW51SXRlbSo+Jik7Ci0gICAgCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSA9IDA7CiAKQEAgLTcyLDcgKzY5LDYgQEAgcHJpdmF0
ZToKICAgICBTY3JpcHRTdGF0ZSogbV9mcm9udGVuZFNjcmlwdFN0YXRlOwogICAgIC8vIFRPRE8o
eXVyeXMpOiB0aGlzIHJlZiBzaG91bGRuJ3QgYmUgbmVlZGVkLgogICAgIFJlZlB0cjxJbnNwZWN0
b3JGcm9udGVuZEhvc3Q+IG1fZnJvbnRlbmRIb3N0OwotICAgIEZyb250ZW5kTWVudVByb3ZpZGVy
KiBtX21lbnVQcm92aWRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCmluZGV4IDIzYmU0NGMuLjFhMGI0
ODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5j
cHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcApAQCAt
NDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJTY3JpcHRGdW5jdGlv
bkNhbGwuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CkBAIC01Myw4ICs1NCw3MiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUluc3BlY3RvckZyb250ZW5kSG9zdDo6SW5zcGVjdG9yRnJvbnRl
bmRIb3N0KEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQpCitjbGFzcyBGcm9udGVuZE1l
bnVQcm92aWRlciA6IHB1YmxpYyBDb250ZXh0TWVudVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxGcm9udGVuZE1lbnVQcm92aWRlcj4gY3JlYXRlKEluc3BlY3RvckZy
b250ZW5kSG9zdCogZnJvbnRlbmRIb3N0LCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yLCBjb25z
dCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBGcm9udGVuZE1lbnVQcm92aWRlcihmcm9udGVuZEhvc3QsIHdlYkluc3Bl
Y3RvciwgaXRlbXMpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkaXNjb25uZWN0KCkKKyAgICB7
CisgICAgICAgIG1fd2ViSW5zcGVjdG9yID0gU2NyaXB0T2JqZWN0KCk7CisgICAgICAgIG1fZnJv
bnRlbmRIb3N0ID0gMDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEZyb250ZW5kTWVudVBy
b3ZpZGVyKEluc3BlY3RvckZyb250ZW5kSG9zdCogZnJvbnRlbmRIb3N0LCBTY3JpcHRPYmplY3Qg
d2ViSW5zcGVjdG9yLCAgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcykKKyAg
ICAgICAgOiBtX2Zyb250ZW5kSG9zdChmcm9udGVuZEhvc3QpCisgICAgICAgICwgbV93ZWJJbnNw
ZWN0b3Iod2ViSW5zcGVjdG9yKQorICAgICAgICAsIG1faXRlbXMoaXRlbXMpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgfkZyb250ZW5kTWVudVByb3ZpZGVyKCkKKyAgICB7CisgICAgICAg
IGNvbnRleHRNZW51Q2xlYXJlZCgpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcG9w
dWxhdGVDb250ZXh0TWVudShDb250ZXh0TWVudSogbWVudSkKKyAgICB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1lbnUt
PmFwcGVuZEl0ZW0oKm1faXRlbXNbaV0pOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fZnJvbnRlbmRIb3N0KSB7CisgICAgICAgICAgICBpbnQgaXRlbU51bWJlciA9
IGl0ZW0tPmFjdGlvbigpIC0gQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzsKKworICAgICAg
ICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0
Y2giKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCIpOworICAgICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaXRlbU51
bWJlcik7CisgICAgICAgICAgICBmdW5jdGlvbi5jYWxsKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51Q2xlYXJlZCgpCisgICAgeworICAgICAg
ICBpZiAobV9mcm9udGVuZEhvc3QpIHsKKyAgICAgICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CisgICAgICAgICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudCgiY29udGV4dE1lbnVDbGVhcmVkIik7CisgICAgICAgICAgICBmdW5j
dGlvbi5jYWxsKCk7CisKKyAgICAgICAgICAgIG1fZnJvbnRlbmRIb3N0LT5tX21lbnVQcm92aWRl
ciA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1faXRlbXMpOworICAg
ICAgICBtX2l0ZW1zLmNsZWFyKCk7CisgICAgfQorCisgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
KiBtX2Zyb250ZW5kSG9zdDsKKyAgICBTY3JpcHRPYmplY3QgbV93ZWJJbnNwZWN0b3I7CisgICAg
VmVjdG9yPENvbnRleHRNZW51SXRlbSo+IG1faXRlbXM7Cit9OworCitJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6Okluc3BlY3RvckZyb250ZW5kSG9zdChJbnNwZWN0b3JGcm9udGVuZENsaWVudCogY2xp
ZW50LCBQYWdlKiBmcm9udGVuZFBhZ2UpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBt
X2Zyb250ZW5kUGFnZShmcm9udGVuZFBhZ2UpCisgICAgLCBtX21lbnVQcm92aWRlcigwKQogewog
fQogCkBAIC02Niw2ICsxMzEsOSBAQCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6On5JbnNwZWN0b3JG
cm9udGVuZEhvc3QoKQogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRpc2Nvbm5lY3RDbGll
bnQoKQogewogICAgIG1fY2xpZW50ID0gMDsKKyAgICBpZiAobV9tZW51UHJvdmlkZXIpCisgICAg
ICAgIG1fbWVudVByb3ZpZGVyLT5kaXNjb25uZWN0KCk7CisgICAgbV9mcm9udGVuZFBhZ2UgPSAw
OwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKCkKQEAgLTE2OSw4ICsy
MzcsMTcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNvcHlUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudShF
dmVudCogZXZlbnQsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCiB7Ci0g
ICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+c2hvd0NvbnRleHRNZW51KGV2ZW50
LCBpdGVtcyk7CisgICAgQVNTRVJUKG1fZnJvbnRlbmRQYWdlKTsKKyAgICBTY3JpcHRTdGF0ZSog
ZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgp
LCBtX2Zyb250ZW5kUGFnZSk7CisgICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsKKyAg
ICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KGZyb250ZW5kU2NyaXB0U3RhdGUsICJXZWJJ
bnNwZWN0b3IiLCB3ZWJJbnNwZWN0b3JPYmopKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlZlB0cjxGcm9udGVuZE1lbnVQcm92
aWRlcj4gbWVudVByb3ZpZGVyID0gRnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSh0aGlzLCB3
ZWJJbnNwZWN0b3JPYmosIGl0ZW1zKTsKKyAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIqIG1lbnVD
b250cm9sbGVyID0gbV9mcm9udGVuZFBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpOworICAg
IG1lbnVDb250cm9sbGVyLT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIG1lbnVQcm92aWRlcik7Cisg
ICAgbV9tZW51UHJvdmlkZXIgPSBtZW51UHJvdmlkZXIuZ2V0KCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kSG9zdC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgKaW5k
ZXggZjViYTlkNy4uNmMzNGFjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmgKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
b250ZXh0TWVudUl0ZW07CiBjbGFzcyBFdmVudDsKK2NsYXNzIEZyb250ZW5kTWVudVByb3ZpZGVy
OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7
CiBjbGFzcyBOb2RlOwpAQCAtNDksOSArNTAsOSBAQCBjbGFzcyBOb2RlOwogY2xhc3MgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRnJvbnRlbmRIb3N0
PgogewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckZyb250ZW5kSG9z
dD4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQqIGNsaWVudCwgUGFnZSogZnJvbnRlbmRQYWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JGcm9udGVuZEhvc3QoY2xpZW50KSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KGNsaWVudCwgZnJvbnRlbmRQ
YWdlKSk7CiAgICAgfQogCiAgICAgfkluc3BlY3RvckZyb250ZW5kSG9zdCgpOwpAQCAtNzksOSAr
ODAsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2ZW50KiwgY29uc3Qg
VmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcyk7CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0KEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQpOworICAgIGZy
aWVuZCBjbGFzcyBGcm9udGVuZE1lbnVQcm92aWRlcjsKKyAgICBJbnNwZWN0b3JGcm9udGVuZEhv
c3QoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVudCwgUGFnZSogZnJvbnRlbmRQYWdlKTsK
IAogICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBtX2NsaWVudDsKKyAgICBQYWdlKiBtX2Zy
b250ZW5kUGFnZTsKKyAgICBGcm9udGVuZE1lbnVQcm92aWRlciogbV9tZW51UHJvdmlkZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxMTNjODEyLi4yNzU4
N2VkIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNC0wMiAgWXVyeSBTZW1p
a2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQg
aW4gQ2hyb21pdW0gYW5kIHJlbW92ZSBhbGwgY3VzdG9tIGJpbmRpbmdzIGZvciB0aGUgaG9zdCBt
ZXRob2RzIGZyb20gV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuIAorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjgxNworCisgICAgICAgICogV2ViS2l0
Lmd5cDoKKyAgICAgICAgKiBzcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRJbXBsOjp+SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjp3aW5kb3dPYmplY3RDbGVhcmVkKToK
KyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjpmcm9udGVuZExv
YWRlZCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6bW92
ZVdpbmRvd0J5KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBs
Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRJbXBsOjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JG
cm9udGVuZENsaWVudEltcGw6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6Okluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50SW1wbDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6OmNhbkF0dGFjaFdpbmRvdyk6CisgICAgICAgIChX
ZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6YXR0YWNoV2luZG93KToKKyAgICAg
ICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjpkZXRhY2hXaW5kb3cpOgor
ICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6OmNoYW5nZUF0dGFj
aGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRJbXBsOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKiBzcmMvSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0Zyb250
ZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJv
bnRlbmRJbXBsOjp+V2ViRGV2VG9vbHNGcm9udGVuZEltcGwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAqIHNyYy9X
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5oOgorICAgICAgICAqIHNyYy9qcy9EZWJ1Z2dlckFnZW50
LmpzOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuZG9IYW5kbGVC
YWNrdHJhY2VSZXNwb25zZV8pOgorICAgICAgICAqIHNyYy9qcy9EZXZUb29scy5qczoKKyAgICAg
ICAgKCk6CisKIDIwMTAtMDQtMDEgIEpheSBDaXZlbGxpICA8amNpdmVsbGlAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggNThi
MjUzNC4uZmU1NDUwNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysr
IGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTI2Myw2ICsyNjMsOCBAQAogICAgICAg
ICAgICAgICAgICdzcmMvSW5kZXhlZERhdGFiYXNlUHJveHkuaCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9JbnNw
ZWN0b3JDbGllbnRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9JbnNwZWN0b3JGcm9udGVu
ZENsaWVudEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9saW51eC9XZWJGb250UmVuZGVy
aW5nLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL2xpbnV4L1dlYlJlbmRlclRoZW1lLmNwcCcsCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1w
bC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzMjA0ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBs
LmNwcApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudEltcGwuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5k
SG9zdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgIlY4SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCisjaW5jbHVkZSAiVjhQcm94eS5o
IgorI2luY2x1ZGUgIldlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJE
ZXZUb29sc0Zyb250ZW5kSW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRJbXBsKFBhZ2UqIGZyb250ZW5kUGFnZSwgV2ViRGV2VG9vbHNGcm9udGVu
ZENsaWVudCogY2xpZW50LCBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCogZnJvbnRlbmQpCisgICAg
OiBtX2Zyb250ZW5kUGFnZShmcm9udGVuZFBhZ2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisg
ICAgLCBtX2Zyb250ZW5kKGZyb250ZW5kKQoreworfQorCitJbnNwZWN0b3JGcm9udGVuZENsaWVu
dEltcGw6On5JbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwoKQoreworICAgIGlmIChtX2Zyb250
ZW5kSG9zdCkKKyAgICAgICAgbV9mcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDbGllbnQoKTsKKyAg
ICBtX2NsaWVudCA9IDA7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjp3
aW5kb3dPYmplY3RDbGVhcmVkKCkKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7
CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gZnJhbWVDb250ZXh0ID0gVjhQcm94eTo6Y29u
dGV4dChtX2Zyb250ZW5kUGFnZS0+bWFpbkZyYW1lKCkpOworICAgIHY4OjpDb250ZXh0OjpTY29w
ZSBjb250ZXh0U2NvcGUoZnJhbWVDb250ZXh0KTsKKworICAgIEFTU0VSVCghbV9mcm9udGVuZEhv
c3QpOworICAgIG1fZnJvbnRlbmRIb3N0ID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjcmVhdGUo
dGhpcywgbV9mcm9udGVuZFBhZ2UpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBmcm9udGVu
ZEhvc3RPYmogPSB0b1Y4KG1fZnJvbnRlbmRIb3N0LmdldCgpKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGdsb2JhbCA9IGZyYW1lQ29udGV4dC0+R2xvYmFsKCk7CisKKyAgICBnbG9iYWwt
PlNldCh2ODo6U3RyaW5nOjpOZXcoIkluc3BlY3RvckZyb250ZW5kSG9zdCIpLCBmcm9udGVuZEhv
c3RPYmopOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6ZnJvbnRlbmRM
b2FkZWQoKQoreworICAgIG1fZnJvbnRlbmQtPmZyb250ZW5kTG9hZGVkKCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQg
eSkKK3sKK30KKworU3RyaW5nIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6bG9jYWxpemVk
U3RyaW5nc1VSTCgpCit7CisgICAgcmV0dXJuICIiOworfQorCitTdHJpbmcgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRJbXBsOjpoaWRkZW5QYW5lbHMoKQoreworICAgIHJldHVybiAiIjsKK30KKwor
dm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6OmJyaW5nVG9Gcm9udCgpCit7CisgICAg
bV9jbGllbnQtPmFjdGl2YXRlV2luZG93KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRJbXBsOjpjbG9zZVdpbmRvdygpCit7CisgICAgbV9jbGllbnQtPmNsb3NlV2luZG93KCk7
Cit9CisKK2Jvb2wgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjpjYW5BdHRhY2hXaW5kb3co
KQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
SW1wbDo6YXR0YWNoV2luZG93KCkKK3sKKyAgICBtX2NsaWVudC0+ZG9ja1dpbmRvdygpOworfQor
Cit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6ZGV0YWNoV2luZG93KCkKK3sKKyAg
ICBtX2NsaWVudC0+dW5kb2NrV2luZG93KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRJbXBsOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkKK3sKKyAgICAv
LyBEbyBub3RoaW5nOworfQorICAgIAordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6
Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBEbyBub3RoaW5n
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmZjMjcwODUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbF9oCisjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50SW1wbF9oCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q7CitjbGFzcyBQYWdlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViRGV2VG9vbHNGcm9udGVuZENsaWVudDsKK2NsYXNzIFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsOworCitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwgOiBwdWJsaWMg
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBOb25jb3B5YWJsZSAgeworcHVibGljOgorICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50SW1wbChXZWJDb3JlOjpQYWdlKiwgV2ViRGV2VG9vbHNGcm9udGVuZENs
aWVudCosIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKik7CisgICAgdmlydHVhbCB+SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRJbXBsKCk7CisKKyAgICAvLyBJbnNwZWN0b3JGcm9udGVuZENsaWVudCBt
ZXRob2RzOgorICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCk7CisgICAgdmly
dHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVdpbmRv
d0J5KGZsb2F0IHgsIGZsb2F0IHkpOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgbG9j
YWxpemVkU3RyaW5nc1VSTCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRlblBh
bmVscygpOworCisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpOworICAgIHZpcnR1YWwg
dm9pZCBjbG9zZVdpbmRvdygpOworCisgICAgdmlydHVhbCBib29sIGNhbkF0dGFjaFdpbmRvdygp
OworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0
KHVuc2lnbmVkKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpQYWdlKiBt
X2Zyb250ZW5kUGFnZTsKKyAgICBXZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50KiBtX2NsaWVudDsK
KyAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCogbV9mcm9udGVuZDsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2Zyb250ZW5kSG9zdDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKaW5kZXggZjc0MWIyMi4uMGE2YzhkZSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKQEAgLTQyLDYg
KzQyLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmgi
CiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTEwMSw2ICsxMDIsOSBA
QCBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGwoCiAgICAg
LCBtX2FwcGxpY2F0aW9uTG9jYWxlKGFwcGxpY2F0aW9uTG9jYWxlKQogICAgICwgbV9sb2FkZWQo
ZmFsc2UpCiB7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBtX3dlYlZpZXdJbXBsLT5w
YWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpYy0+c2V0SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQobmV3IEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbChtX3dlYlZpZXdJbXBsLT5w
YWdlKCksIG1fY2xpZW50LCB0aGlzKSk7CisKICAgICBXZWJGcmFtZUltcGwqIGZyYW1lID0gbV93
ZWJWaWV3SW1wbC0+bWFpbkZyYW1lSW1wbCgpOwogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsK
ICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBmcmFtZUNvbnRleHQgPSBWOFByb3h5Ojpjb250
ZXh0KGZyYW1lLT5mcmFtZSgpKTsKQEAgLTExOCw2OSArMTIyLDEwIEBAIFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsOjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgKICAgICAgICAgIkRlYnVnZ2VyUGF1
c2VTY3JpcHQiLAogICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNEZWJ1Z2dlclBh
dXNlU2NyaXB0KTsKICAgICBkZWJ1Z2dlckNvbW1hbmRFeGVjdXRvck9iai5idWlsZCgpOwotCi0g
ICAgQm91bmRPYmplY3QgZGV2VG9vbHNIb3N0KGZyYW1lQ29udGV4dCwgdGhpcywgIkluc3BlY3Rv
ckZyb250ZW5kSG9zdCIpOwotICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAotICAg
ICAgICAibG9hZGVkIiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzTG9hZGVk
KTsKLSAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAgInBsYXRmb3Jt
IiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzUGxhdGZvcm0pOwotICAgIGRl
dlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAotICAgICAgICAicG9ydCIsCi0gICAgICAgIFdl
YkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1BvcnQpOwotICAgIGRldlRvb2xzSG9zdC5hZGRQcm90
b0Z1bmN0aW9uKAotICAgICAgICAiY29weVRleHQiLAotICAgICAgICBXZWJEZXZUb29sc0Zyb250
ZW5kSW1wbDo6anNDb3B5VGV4dCk7Ci0gICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rpb24o
Ci0gICAgICAgICJhY3RpdmF0ZVdpbmRvdyIsCi0gICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsOjpqc0FjdGl2YXRlV2luZG93KTsKLSAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlv
bigKLSAgICAgICAgImNsb3NlV2luZG93IiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZElt
cGw6OmpzQ2xvc2VXaW5kb3cpOwotICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAot
ICAgICAgICAiYXR0YWNoIiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzRG9j
a1dpbmRvdyk7Ci0gICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rpb24oCi0gICAgICAgICJk
ZXRhY2giLAotICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNVbmRvY2tXaW5kb3cp
OwotICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAotICAgICAgICAibG9jYWxpemVk
U3RyaW5nc1VSTCIsCi0gICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0xvY2FsaXpl
ZFN0cmluZ3NVUkwpOwotICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAotICAgICAg
ICAiaGlkZGVuUGFuZWxzIiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzSGlk
ZGVuUGFuZWxzKTsKLSAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAg
InNldHRpbmciLAotICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTZXR0aW5nKTsK
LSAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAgInNldFNldHRpbmci
LAotICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTZXRTZXR0aW5nKTsKLSAgICBk
ZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAgImJyaW5nVG9Gcm9udCIsCi0g
ICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0JyaW5nVG9Gcm9udCk7Ci0gICAgZGV2
VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rpb24oCi0gICAgICAgICJpbnNwZWN0ZWRVUkxDaGFuZ2Vk
IiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzSW5zcGVjdGVkVVJMQ2hhbmdl
ZCk7Ci0gICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rpb24oCi0gICAgICAgICJzaG93Q29u
dGV4dE1lbnUiLAotICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTaG93Q29udGV4
dE1lbnUpOwotICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAotICAgICAgICAiY2Fu
QXR0YWNoV2luZG93IiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzQ2FuQXR0
YWNoV2luZG93KTsKLSAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAg
InNldEF0dGFjaGVkV2luZG93SGVpZ2h0IiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZElt
cGw6OmpzU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOwotICAgIGRldlRvb2xzSG9zdC5hZGRQcm90
b0Z1bmN0aW9uKAotICAgICAgICAibW92ZVdpbmRvd0J5IiwKLSAgICAgICAgV2ViRGV2VG9vbHNG
cm9udGVuZEltcGw6OmpzTW92ZVdpbmRvd0J5KTsKLSAgICBkZXZUb29sc0hvc3QuYnVpbGQoKTsK
IH0KIAogV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6On5XZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgp
CiB7Ci0gICAgaWYgKG1fbWVudVByb3ZpZGVyKQotICAgICAgICBtX21lbnVQcm92aWRlci0+ZGlz
Y29ubmVjdCgpOwogfQogCiB2b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpkaXNwYXRjaE1l
c3NhZ2VGcm9tQWdlbnQoY29uc3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSkKQEAgLTE5
Nyw2ICsxNDIsMjIgQEAgdm9pZCBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6ZGlzcGF0Y2hNZXNz
YWdlRnJvbUFnZW50KGNvbnN0IFdlYkRldlRvb2xzTWVzc2FnZUQKICAgICBleGVjdXRlU2NyaXB0
KHYpOwogfQogCit2b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpmcm9udGVuZExvYWRlZCgp
Cit7CisgICAgbV9sb2FkZWQgPSB0cnVlOworCisgICAgLy8gR3JhbnQgdGhlIGRldnRvb2xzIHBh
Z2UgdGhlIGFiaWxpdHkgdG8gaGF2ZSBzb3VyY2UgdmlldyBpZnJhbWVzLgorICAgIFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4gPSBtX3dlYlZpZXdJbXBsLT5wYWdlKCktPm1haW5GcmFtZSgpLT5kb21X
aW5kb3coKS0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBvcmlnaW4tPmdyYW50VW5pdmVyc2FsQWNj
ZXNzKCk7CisKKyAgICBmb3IgKFZlY3RvcjxWZWN0b3I8U3RyaW5nPiA+OjppdGVyYXRvciBpdCA9
IG1fcGVuZGluZ0luY29taW5nTWVzc2FnZXMuYmVnaW4oKTsKKyAgICAgICAgIGl0ICE9IG1fcGVu
ZGluZ0luY29taW5nTWVzc2FnZXMuZW5kKCk7CisgICAgICAgICArK2l0KSB7CisgICAgICAgIGV4
ZWN1dGVTY3JpcHQoKml0KTsKKyAgICB9CisgICAgbV9wZW5kaW5nSW5jb21pbmdNZXNzYWdlcy5j
bGVhcigpOworfQorCiB2b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpleGVjdXRlU2NyaXB0
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2KQogewogICAgIFdlYkZyYW1lSW1wbCogZnJhbWUgPSBt
X3dlYlZpZXdJbXBsLT5tYWluRnJhbWVJbXBsKCk7CkBAIC0yMTIsMTI1ICsxNzMsMTEgQEAgdm9p
ZCBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6ZXhlY3V0ZVNjcmlwdChjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgdikKICAgICBmdW5jdGlvbi0+Q2FsbChmcmFtZUNvbnRleHQtPkdsb2JhbCgpLCBhcmdz
LnNpemUoKSwgYXJncy5kYXRhKCkpOwogfQogCi12b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBs
OjpkaXNwYXRjaE9uV2ViSW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwgY29uc3Qg
U3RyaW5nJiBwYXJhbSkKLXsKLSAgICBXZWJGcmFtZUltcGwqIGZyYW1lID0gbV93ZWJWaWV3SW1w
bC0+bWFpbkZyYW1lSW1wbCgpOwotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBmcmFtZUNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KGZyYW1l
LT5mcmFtZSgpKTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGZyYW1lQ29u
dGV4dCk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2ViSW5zcGVjdG9yID0gZnJhbWVD
b250ZXh0LT5HbG9iYWwoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiV2ViSW5zcGVjdG9yIikpOwot
ICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3ItPklzT2JqZWN0KCkpOwotICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd2ViSW5zcGVjdG9yT2JqID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3
ZWJJbnNwZWN0b3IpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZCA9IHdlYklu
c3BlY3Rvck9iai0+R2V0KFRvVjhTdHJpbmcobWV0aG9kTmFtZSkpOwotICAgIEFTU0VSVChtZXRo
b2QtPklzRnVuY3Rpb24oKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IG1ldGhvZEZ1
bmMgPSB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QobWV0aG9kKTsKLSAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gYXJnc1tdID0gewotICAgICAgVG9WOFN0cmluZyhwYXJhbSkKLSAgICB9
OwotICAgIG1ldGhvZEZ1bmMtPkNhbGwoZnJhbWVDb250ZXh0LT5HbG9iYWwoKSwgMSwgYXJncyk7
Ci19Ci0KIHZvaWQgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OnNlbmRScGNNZXNzYWdlKGNvbnN0
IFdlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEpCiB7CiAgICAgbV9jbGllbnQtPnNlbmRNZXNz
YWdlVG9BZ2VudChkYXRhKTsKIH0KIAotdm9pZCBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6Y29u
dGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQotewotICAgIGludCBp
dGVtTnVtYmVyID0gaXRlbS0+YWN0aW9uKCkgLSBDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFn
OwotICAgIGRpc3BhdGNoT25XZWJJbnNwZWN0b3IoImNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwg
U3RyaW5nOjpudW1iZXIoaXRlbU51bWJlcikpOwotfQotCi12b2lkIFdlYkRldlRvb2xzRnJvbnRl
bmRJbXBsOjpjb250ZXh0TWVudUNsZWFyZWQoKQotewotICAgIGRpc3BhdGNoT25XZWJJbnNwZWN0
b3IoImNvbnRleHRNZW51Q2xlYXJlZCIsICIiKTsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0xvYWRlZChjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQotewotICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9udGVuZCA9IHN0YXRpY19j
YXN0PFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKj4odjg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRh
dGEoKSktPlZhbHVlKCkpOwotICAgIGZyb250ZW5kLT5tX2xvYWRlZCA9IHRydWU7Ci0KLSAgICAv
LyBHcmFudCB0aGUgZGV2dG9vbHMgcGFnZSB0aGUgYWJpbGl0eSB0byBoYXZlIHNvdXJjZSB2aWV3
IGlmcmFtZXMuCi0gICAgUGFnZSogcGFnZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRl
cmVkQ29udGV4dCgpLT5wYWdlKCk7Ci0gICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHBhZ2Ut
Pm1haW5GcmFtZSgpLT5kb21XaW5kb3coKS0+c2VjdXJpdHlPcmlnaW4oKTsKLSAgICBvcmlnaW4t
PmdyYW50VW5pdmVyc2FsQWNjZXNzKCk7Ci0KLSAgICBmb3IgKFZlY3RvcjxWZWN0b3I8U3RyaW5n
PiA+OjppdGVyYXRvciBpdCA9IGZyb250ZW5kLT5tX3BlbmRpbmdJbmNvbWluZ01lc3NhZ2VzLmJl
Z2luKCk7Ci0gICAgICAgICBpdCAhPSBmcm9udGVuZC0+bV9wZW5kaW5nSW5jb21pbmdNZXNzYWdl
cy5lbmQoKTsKLSAgICAgICAgICsraXQpIHsKLSAgICAgICAgZnJvbnRlbmQtPmV4ZWN1dGVTY3Jp
cHQoKml0KTsKLSAgICB9Ci0gICAgZnJvbnRlbmQtPm1fcGVuZGluZ0luY29taW5nTWVzc2FnZXMu
Y2xlYXIoKTsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi0vLyBzdGF0aWMKLXY4
OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNQbGF0Zm9ybShj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotI2lmIGRlZmluZWQoT1NfTUFDT1NYKQotICAg
IHJldHVybiB2OFN0cmluZygibWFjIik7Ci0jZWxpZiBkZWZpbmVkKE9TX0xJTlVYKQotICAgIHJl
dHVybiB2OFN0cmluZygibGludXgiKTsKLSNlbGlmIGRlZmluZWQoT1NfV0lOKQotICAgIHJldHVy
biB2OFN0cmluZygid2luZG93cyIpOwotI2Vsc2UKLSAgICByZXR1cm4gdjhTdHJpbmcoInVua25v
d24iKTsKLSNlbmRpZgotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9u
dGVuZEltcGw6OmpzUG9ydChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29s
c0Zyb250ZW5kSW1wbDo6anNDb3B5VGV4dChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewot
ICAgIFN0cmluZyB0ZXh0ID0gV2ViQ29yZTo6dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhh
cmdzWzBdKTsKLSAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT53cml0ZVBsYWlu
VGV4dCh0ZXh0KTsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi12ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzQWN0aXZhdGVXaW5kb3coY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCog
ZnJvbnRlbmQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCo+KHY4OjpFeHRl
cm5hbDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1ZSgpKTsKLSAgICBmcm9udGVuZC0+bV9jbGll
bnQtPmFjdGl2YXRlV2luZG93KCk7Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQot
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0Nsb3NlV2lu
ZG93KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgV2ViRGV2VG9vbHNGcm9udGVu
ZEltcGwqIGZyb250ZW5kID0gc3RhdGljX2Nhc3Q8V2ViRGV2VG9vbHNGcm9udGVuZEltcGwqPih2
ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUoKSk7Ci0gICAgZnJvbnRlbmQt
Pm1fY2xpZW50LT5jbG9zZVdpbmRvdygpOwotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19
Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNEb2Nr
V2luZG93KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgV2ViRGV2VG9vbHNGcm9u
dGVuZEltcGwqIGZyb250ZW5kID0gc3RhdGljX2Nhc3Q8V2ViRGV2VG9vbHNGcm9udGVuZEltcGwq
Pih2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUoKSk7Ci0gICAgZnJvbnRl
bmQtPm1fY2xpZW50LT5kb2NrV2luZG93KCk7Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
LX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1Vu
ZG9ja1dpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIFdlYkRldlRvb2xz
RnJvbnRlbmRJbXBsKiBmcm9udGVuZCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsKj4odjg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOwotICAgIGZy
b250ZW5kLT5tX2NsaWVudC0+dW5kb2NrV2luZG93KCk7Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBs
Ojpqc0xvY2FsaXplZFN0cmluZ3NVUkwoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGw6OmpzSGlkZGVuUGFuZWxzKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCi17Ci0gICAgcmV0dXJuIHY4U3RyaW5nKCIiKTsKLX0KLQogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0RlYnVnZ2VyQ29tbWFuZChjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9u
dGVuZCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKj4odjg6OkV4dGVybmFs
OjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOwpAQCAtMzM5LDE2ICsxODYsNiBAQCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzRGVidWdnZXJDb21t
YW5kKGNvbnN0IHY4OjpBcmd1bQogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLXY4
OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTZXR0aW5nKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
LX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1Nl
dFNldHRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwotfQotCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVu
ZEltcGw6OmpzRGVidWdnZXJQYXVzZVNjcmlwdChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
ewogICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9udGVuZCA9IHN0YXRpY19jYXN0PFdl
YkRldlRvb2xzRnJvbnRlbmRJbXBsKj4odjg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSkt
PlZhbHVlKCkpOwpAQCAtMzU2LDcxICsxOTMsNCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGw6OmpzRGVidWdnZXJQYXVzZVNjcmlwdChjb25zdCB2ODo6QQog
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNCcmluZ1RvRnJvbnQoY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKLXsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi12ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzSW5zcGVjdGVkVVJMQ2hhbmdl
ZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6
anNTaG93Q29udGV4dE1lbnUoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBpZiAo
YXJncy5MZW5ndGgoKSA8IDIpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAg
ICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZXZlbnRXcmFwcGVyID0gdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+OjpDYXN0KGFyZ3NbMF0pOwotICAgIGlmICghVjhNb3VzZUV2ZW50OjppbmZvLmVxdWFscyhW
OERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKGV2ZW50V3JhcHBlcikpKQotICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgRXZlbnQqIGV2ZW50ID0gVjhFdmVudDo6dG9OYXRp
dmUoZXZlbnRXcmFwcGVyKTsKLSAgICBpZiAoIWFyZ3NbMV0tPklzQXJyYXkoKSkKLSAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IGFycmF5
ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QoYXJnc1sxXSk7Ci0gICAgVmVjdG9yPENvbnRl
eHRNZW51SXRlbSo+IGl0ZW1zOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS0+
TGVuZ3RoKCk7ICsraSkgewotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaXRlbSA9IHY4
OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdChhcnJheS0+R2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSkp
KTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gbGFiZWwgPSBpdGVtLT5HZXQodjg6OlN0
cmluZzo6TmV3KCJsYWJlbCIpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaWQgPSBp
dGVtLT5HZXQodjg6OlN0cmluZzo6TmV3KCJpZCIpKTsKLSAgICAgICAgaWYgKGxhYmVsLT5Jc1Vu
ZGVmaW5lZCgpIHx8IGlkLT5Jc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgaXRlbXMuYXBwZW5k
KG5ldyBDb250ZXh0TWVudUl0ZW0oU2VwYXJhdG9yVHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoKSkpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIENvbnRleHRNZW51QWN0aW9uIHR5cGVkSWQgPSBzdGF0aWNf
Y2FzdDxDb250ZXh0TWVudUFjdGlvbj4oCi0gICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbUJh
c2VDdXN0b21UYWcgKyBpZC0+VG9JbnQzMigpLT5WYWx1ZSgpKTsKLSAgICAgICAgICBpdGVtcy5h
cHBlbmQobmV3IENvbnRleHRNZW51SXRlbShBY3Rpb25UeXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVkSWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhsYWJlbCkp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9u
dGVuZCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKj4odjg6OkV4dGVybmFs
OjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOwotCi0gICAgZnJvbnRlbmQtPm1fbWVudVBy
b3ZpZGVyID0gTWVudVByb3ZpZGVyOjpjcmVhdGUoZnJvbnRlbmQsIGl0ZW1zKTsKLQotICAgIENv
bnRleHRNZW51Q29udHJvbGxlciogbWVudUNvbnRyb2xsZXIgPSBmcm9udGVuZC0+bV93ZWJWaWV3
SW1wbC0+cGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKLSAgICBtZW51Q29udHJvbGxl
ci0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBmcm9udGVuZC0+bV9tZW51UHJvdmlkZXIpOwotCi0g
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdl
YkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0NhbkF0dGFjaFdpbmRvdyhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQotewotICAgIHJldHVybiB2OEJvb2xlYW4odHJ1ZSk7Ci19Ci12ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZElt
cGw6OmpzTW92ZVdpbmRvd0J5KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmggYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmgKaW5kZXggYTM4ZTUxZC4u
ZmE0NzA3ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250
ZW5kSW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZElt
cGwuaApAQCAtMzEsOCArMzEsNiBAQAogI2lmbmRlZiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbF9o
CiAjZGVmaW5lIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsX2gKIAotI2luY2x1ZGUgIkNvbnRleHRN
ZW51LmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVQcm92aWRlci5oIgogI2luY2x1ZGUgIkRldlRv
b2xzUlBDLmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNGcm9udGVuZC5oIgogI2luY2x1ZGUgPHY4
Lmg+CkBAIC03NCw4MCArNzIsMTMgQEAgcHVibGljOgogICAgIC8vIFdlYkRldlRvb2xzRnJvbnRl
bmQgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21B
Z2VudChjb25zdCBXZWJLaXQ6OldlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEpOwogCi1wcml2
YXRlOgotICAgIGNsYXNzIE1lbnVQcm92aWRlciA6IHB1YmxpYyBXZWJDb3JlOjpDb250ZXh0TWVu
dVByb3ZpZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lbnVQ
cm92aWRlcj4gY3JlYXRlKFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9udGVuZEhvc3QsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVudVByb3ZpZGVyKGZyb250ZW5kSG9z
dCwgaXRlbXMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgfk1lbnVQcm92aWRlcigp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRNZW51Q2xlYXJlZCgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBkaXNjb25uZWN0KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9m
cm9udGVuZEhvc3QgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVs
YXRlQ29udGV4dE1lbnUoV2ViQ29yZTo6Q29udGV4dE1lbnUqIG1lbnUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgICAgICBtZW51LT5hcHBlbmRJdGVtKCptX2l0ZW1zW2ldKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChXZWJDb3JlOjpD
b250ZXh0TWVudUl0ZW0qIGl0ZW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2Zyb250
ZW5kSG9zdCkKLSAgICAgICAgICAgICAgICBtX2Zyb250ZW5kSG9zdC0+Y29udGV4dE1lbnVJdGVt
U2VsZWN0ZWQoaXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGV4
dE1lbnVDbGVhcmVkKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZnJvbnRlbmRIb3N0
KQotICAgICAgICAgICAgICAgIG1fZnJvbnRlbmRIb3N0LT5jb250ZXh0TWVudUNsZWFyZWQoKTsK
LSAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2l0ZW1zKTsKLSAgICAgICAgICAgIG1faXRl
bXMuY2xlYXIoKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWVudVByb3Zp
ZGVyKFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9udGVuZEhvc3QsIGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCi0gICAgICAgICAgICA6IG1fZnJvbnRl
bmRIb3N0KGZyb250ZW5kSG9zdCkKLSAgICAgICAgICAgICwgbV9pdGVtcyhpdGVtcykgeyB9Ci0g
ICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBtX2Zyb250ZW5kSG9zdDsKLSAgICAgICAg
VmVjdG9yPFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSo+IG1faXRlbXM7Ci0gICAgfTsKKyAgICB2
b2lkIGZyb250ZW5kTG9hZGVkKCk7CiAKK3ByaXZhdGU6CiAgICAgdm9pZCBleGVjdXRlU2NyaXB0
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2KTsKLSAgICB2b2lkIGRpc3BhdGNoT25XZWJJbnNwZWN0
b3IoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgcGFyYW0pOwotCi0gICAgLy8g
ZnJpZW5kIGNsYXNzIE1lbnVTZWxlY3Rpb25IYW5kbGVyOwotICAgIHZvaWQgY29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQoV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtKiBtZW51SXRlbSk7Ci0gICAgdm9p
ZCBjb250ZXh0TWVudUNsZWFyZWQoKTsKLQotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4ganNMb2FkZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBqc1BsYXRmb3JtKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwot
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNQb3J0KGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNDb3B5VGV4dChj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKIAotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4ganNBY3RpdmF0ZVdpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKLSAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzQ2xvc2VXaW5kb3coY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncyk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0RvY2tXaW5k
b3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBqc1VuZG9ja1dpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKLSAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzTG9jYWxpemVkU3RyaW5nc1VSTChjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKTsKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpz
SGlkZGVuUGFuZWxzKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4ganNEZWJ1Z2dlckNvbW1hbmQoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncyk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1NldHRpbmcoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBq
c1NldFNldHRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CiAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBqc0RlYnVnZ2VyUGF1c2VTY3JpcHQoY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncyk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0JyaW5nVG9Gcm9u
dChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGpzSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsK
LSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzU2hvd0NvbnRleHRNZW51KGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
anNDYW5BdHRhY2hXaW5kb3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1NldEF0dGFjaGVkV2luZG93SGVpZ2h0KGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNN
b3ZlV2luZG93QnkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CiAKICAgICBXZWJLaXQ6Oldl
YlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOwogICAgIFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVu
ZENsaWVudCogbV9jbGllbnQ7CkBAIC0xNTcsNyArODgsNiBAQCBwcml2YXRlOgogICAgIE93blB0
cjxKU1Rvb2xzQWdlbnRCb3VuZE9iaj4gbV90b29sc0FnZW50T2JqOwogICAgIGJvb2wgbV9sb2Fk
ZWQ7CiAgICAgVmVjdG9yPFZlY3RvcjxTdHJpbmc+ID4gbV9wZW5kaW5nSW5jb21pbmdNZXNzYWdl
czsKLSAgICBSZWZQdHI8TWVudVByb3ZpZGVyPiBtX21lbnVQcm92aWRlcjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1
Z2dlckFnZW50LmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlckFnZW50LmpzCmlu
ZGV4IGU2YTZjMzcuLjEyNGJjZWQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMv
RGVidWdnZXJBZ2VudC5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyQWdl
bnQuanMKQEAgLTk2NCw3ICs5NjQsNyBAQCBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlw
ZS5kb0hhbmRsZUJhY2t0cmFjZVJlc3BvbnNlXyA9IGZ1bmN0aW9uKG1zZykKICAgICAgICAgdGhp
cy5jYWxsRnJhbWVzXy5wdXNoKHRoaXMuZm9ybWF0Q2FsbEZyYW1lXyhmcmFtZXNbaV0pKTsKICAg
ICBXZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0KHRoaXMuY2FsbEZyYW1lc18pOwogICAgIHRoaXMu
c2hvd1BlbmRpbmdFeGNlcHRpb25NZXNzYWdlXygpOwotICAgIEluc3BlY3RvckZyb250ZW5kSG9z
dC5hY3RpdmF0ZVdpbmRvdygpOworICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5icmluZ1RvRnJv
bnQoKTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29s
cy5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKaW5kZXggNzQ3NmQ4Mi4u
Nzc0NzVhNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcwor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCkBAIC0yNzksNyArMjc5LDcg
QEAgV2ViSW5zcGVjdG9yLlVJU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nKQogICAgIFdlYkluc3Bl
Y3Rvci5zZWFyY2hpbmdGb3JOb2RlV2FzRGlzYWJsZWQgPSBmdW5jdGlvbigpCiAgICAgewogICAg
ICAgICBpZiAodGhpcy5wYW5lbHMuZWxlbWVudHMuX25vZGVTZWFyY2hCdXR0b24udG9nZ2xlZCkK
LSAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5hY3RpdmF0ZVdpbmRvdygpOworICAg
ICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmJyaW5nVG9Gcm9udCgpOwogICAgICAgICBv
cmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgIH0KIH0pKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>