<?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>179161</bug_id>
          
          <creation_ts>2017-11-02 00:02:10 -0700</creation_ts>
          <short_desc>Eliminate isMainThread() checks in most call sites of NoEventDispatchAssertion</short_desc>
          <delta_ts>2017-11-02 20:21:29 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1367259</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-11-02 00:02:10 -0700</bug_when>
    <thetext>NoEventDispatchAssertion&apos;s constructor &amp; destructor currently checks isMainThread() to make it work in non-main thread.
However, this check is rather expensive and prevents us from converting this into a release assertion.

Introduce NoEventDispatchAssertion::InMainThread which bypasses isMainThread() conditional
whenever the code can only be executed in the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367260</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-02 00:03:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/35309990&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367262</commentid>
    <comment_count>2</comment_count>
      <attachid>325694</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-11-02 00:16:14 -0700</bug_when>
    <thetext>Created attachment 325694
Refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367263</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-11-02 00:18:37 -0700</bug_when>
    <thetext>Attachment 325694 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/ScriptController.cpp:681:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/dom/Element.cpp:2478:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/dom/Element.cpp:2485:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/dom/Node.cpp:2329:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/dom/Node.cpp:2342:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/dom/EventDispatcher.cpp:133:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/dom/ContainerNode.cpp:127:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/dom/ContainerNode.cpp:766:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/dom/ContainerNode.cpp:783:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/dom/Document.cpp:4265:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/dom/Document.cpp:4273:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/dom/Document.cpp:5103:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 12 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367281</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-11-02 02:48:13 -0700</bug_when>
    <thetext>Yay, this one passed EWS!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367567</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-11-02 14:56:32 -0700</bug_when>
    <thetext>Committed r224356: &lt;https://trac.webkit.org/changeset/224356&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367727</commentid>
    <comment_count>6</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-11-02 19:46:56 -0700</bug_when>
    <thetext>(In reply to Build Bot from comment #3)
&gt; Attachment 325694 [details] did not pass style-queue:
&gt; 
&gt; ERROR: Source/WebCore/bindings/js/ScriptController.cpp:681:  Please replace
&gt; ASSERT_WITH_SECURITY_IMPLICATION() with
&gt; RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
&gt; ERROR: Source/WebCore/dom/Element.cpp:2478:  Please replace
&gt; ASSERT_WITH_SECURITY_IMPLICATION() with
&gt; RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
&gt; ERROR: Source/WebCore/dom/Element.cpp:2485:  Please replace
&gt; ASSERT_WITH_SECURITY_IMPLICATION() with
&gt; RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
&gt; ERROR: Source/WebCore/dom/Node.cpp:2329:  Please replace
&gt; ASSERT_WITH_SECURITY_IMPLICATION() with
&gt; RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
&gt; ERROR: Source/WebCore/dom/Node.cpp:2342:  Please replace
&gt; ASSERT_WITH_SECURITY_IMPLICATION() with
&gt; RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
&gt; ERROR: Source/WebCore/dom/EventDispatcher.cpp:133:  Please replace
&gt; ASSERT_WITH_SECURITY_IMPLICATION() with
&gt; RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
&gt; ERROR: Source/WebCore/dom/ContainerNode.cpp:127:  Please replace
&gt; ASSERT_WITH_SECURITY_IMPLICATION() with
&gt; RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
&gt; ERROR: Source/WebCore/dom/ContainerNode.cpp:766:  Please replace
&gt; ASSERT_WITH_SECURITY_IMPLICATION() with
&gt; RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
&gt; ERROR: Source/WebCore/dom/ContainerNode.cpp:783:  Please replace
&gt; ASSERT_WITH_SECURITY_IMPLICATION() with
&gt; RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
&gt; ERROR: Source/WebCore/dom/Document.cpp:4265:  Please replace
&gt; ASSERT_WITH_SECURITY_IMPLICATION() with
&gt; RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
&gt; ERROR: Source/WebCore/dom/Document.cpp:4273:  Please replace
&gt; ASSERT_WITH_SECURITY_IMPLICATION() with
&gt; RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
&gt; ERROR: Source/WebCore/dom/Document.cpp:5103:  Please replace
&gt; ASSERT_WITH_SECURITY_IMPLICATION() with
&gt; RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
&gt; Total errors found: 12 in 14 files

Why was it not possible to change these?  Is there concern that this would cause a performance regression?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367745</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-11-02 20:21:29 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #6)
&gt; (In reply to Build Bot from comment #3)
&gt; &gt; Attachment 325694 [details] did not pass style-queue:
&gt;
&gt; Why was it not possible to change these?  Is there concern that this would
&gt; cause a performance regression?

Because NoEventDispatchAssertion is a no-op in release builds right now. It&apos;s rather misleading to enable them for release because it always evaluates to true regardless.

Furthermore, we can&apos;t enable NoEventDispatchAssertion::isEventDispatchAllowedInSubtree in any of interesting core DOM code since it&apos;s too expensive to do O(n) traversal.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325694</attachid>
            <date>2017-11-02 00:16:14 -0700</date>
            <delta_ts>2017-11-02 14:45:02 -0700</delta_ts>
            <desc>Refactoring</desc>
            <filename>bug-179161-20171102001613.patch</filename>
            <type>text/plain</type>
            <size>29253</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNDMyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDE3LTExLTAyICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEVsaW1pbmF0ZSBpc01haW5UaHJl
YWQoKSBjaGVja3MgaW4gbW9zdCBjYWxsIHNpdGVzIG9mIE5vRXZlbnREaXNwYXRjaEFzc2VydGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5MTYx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9k
dWNlZCBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFpblRocmVhZCB3aGljaCBieXBhc3Nl
cyB0aGUgZXhwZW5zaXZlIGlzTWFpblRocmVhZCgpIGNoZWNrCisgICAgICAgIGluIG9yZGVyIHRv
IHR1cm4gTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uIGludG8gYSByZWxlYXNlIGFzc2VydGlvbiBp
biBhIHNlcGFyYXRlIHBhdGNoLgorCisgICAgICAgIEFsc28gcmVtb3ZlZCBpbnN0YW5jZXMgb2Yg
Tm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uIGluIG5vdGlmeUNoaWxkTm9kZUluc2VydGVkIGFuZCBu
b3RpZnlDaGlsZE5vZGVSZW1vdmVkCisgICAgICAgIGFuZCBhc3NlcnRlZCB0aGF0IHRoZSBjYWxs
ZXIgaGFzIGluc3RhbnRpYXRlZCBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gaW5zdGVhZC4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgdGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwg
Y2hhbmdlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMpOgor
ICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5jcHA6
CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGFpbmVyTm9kZTo6cmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnJlbW92ZU5vZGVXaXRoU2NyaXB0QXNzZXJ0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVOb2RlSW5zZXJ0aW9uV2l0aFNjcmlwdEFzc2Vy
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZW1vdmVEZXRhY2hlZENo
aWxkcmVuKTogSW5zdGFudGlhdGVkIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6SW5NYWluVGhy
ZWFkCisgICAgICAgIHNvIHRoYXQgbm90aWZ5Q2hpbGROb2RlUmVtb3ZlZCB3b3VsZCBiZSBjYWxs
ZWQgaW5zaWRlIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbi4gCisgICAgICAgIChXZWJDb3JlOjpD
b250YWluZXJOb2RlOjppbnNlcnRCZWZvcmVDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGRDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFp
bmVyTm9kZTo6cmVtb3ZlQmV0d2Vlbik6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRjaENoaWxk
SW5zZXJ0aW9uRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BhdGNoQ2hpbGRSZW1vdmFs
RXZlbnRzKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bm90aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQpOiBBc3NlcnQgdGhhdCB0aGUg
Y2FsbGVyIGhhcyBpbnN0YW50aWF0ZWQgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6bm90aWZ5Q2hpbGROb2RlUmVtb3ZlZCk6IERpdHRvLgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVzb2x2ZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRhdGVTdHlsZUlmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpub2RlV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6ZGlzcGF0Y2hXaW5kb3dFdmVudCk6IFJlcGxhY2VkIFJFTEVBU0Vf
QVNTRVJUIHdpdGggQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04KKyAgICAgICAgZm9y
IGNsYXJpdHkgc2luY2UgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50QWxsb3dlZElu
TWFpblRocmVhZCgpIGFsd2F5cyByZXR1cm5zIHRydWUgaW4gcmVsZWFzZQorICAgICAgICBidWls
ZHMgcmlnaHQgbm93LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpc3BhdGNoV2luZG93
TG9hZEV2ZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YXBwbHlQZW5k
aW5nWFNMVHJhbnNmb3Jtc1RpbWVyRmlyZWQpOiBVc2UgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04gaW5zdGVhZAorICAgICAgICBvZiByZWd1bGFyIEFTU0VSVC4KKyAgICAgICAgKiBk
b20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphZGRTaGFkb3dSb290
KTogSW5zdGFudGlhdGUgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjpJbk1haW5UaHJlYWQgdG8g
Y2FsbAorICAgICAgICBub3RpZnlDaGlsZE5vZGVJbnNlcnRlZCB3aWxsIGl0LgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6YXR0YWNoQXR0cmlidXRlTm9kZUlmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUpOiBGaXhlZCB0aGUgaW5kZW50YXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlTlMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNJbkV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNPdXRFdmVudCk6CisgICAgICAg
ICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAqIGRvbS9Ob0V2ZW50RGlzcGF0Y2hBc3Nl
cnRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNF
dmVudERpc3BhdGNoQWxsb3dlZEluU3VidHJlZSk6IE1vdmVkIHRvIEluTWFpblRocmVhZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6SW5NYWluVGhyZWFkKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFp
blRocmVhZDo6SW5NYWluVGhyZWFkKTogQXNzZXJ0IHRoYXQgd2UncmUgaW4gdGhlIG1haW4gdGhy
ZWFkCisgICAgICAgIGluc3RlYWQgb2YgZXhpdGluZyBlYXJseS4KKyAgICAgICAgKFdlYkNvcmU6
Ok5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6SW5NYWluVGhyZWFkOjp+SW5NYWluVGhyZWFkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFp
blRocmVhZDo6aXNFdmVudERpc3BhdGNoQWxsb3dlZEluU3VidHJlZSk6IE1vdmVkIGhlcmUuCisg
ICAgICAgIChXZWJDb3JlOjpOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFpblRocmVhZDo6
aXNFdmVudEFsbG93ZWQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OmRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6ZGlzcGF0Y2hET01BY3RpdmF0ZUV2ZW50KToKKyAgICAgICAgKiBkb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpjYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0ZvckRvY3VtZW50U3VzcGVuc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aXZl
RE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpy
ZXN1bWVBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZFBhZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUGFnZTo6cmVzdG9yZSk6CisgICAgICAgICogaGlz
dG9yeS9QYWdlQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlOjphZGRJZkNh
Y2hlYWJsZSk6CisgICAgICAgICogcGFnZS9MYXlvdXRDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dENvbnRleHQ6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9W
aXNpYmxlKToKKwogMjAxNy0xMS0wMSAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+
CiAKICAgICAgICAgUmVtb3ZlIFNjcm9sbGFibGVBcmVhOjppc1RvdWNoU2Nyb2xsYWJsZSBhbmQg
U2Nyb2xsYWJsZUFyZWE6OmlzT3ZlcmZsb3dTY3JvbGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMjQzMjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjc4LDcgKzY3OCw3IEBAIEpTVmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXhl
Y3V0ZVNjcmlwdEkKIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoUmVh
c29uRm9yQ2FsbGluZ0NhbkV4ZWN1dGVTY3JpcHRzIHJlYXNvbikKIHsKICAgICBpZiAocmVhc29u
ID09IEFib3V0VG9FeGVjdXRlU2NyaXB0KQotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnRBbGxvd2VkSW5NYWlu
VGhyZWFkKCkpOworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihOb0V2
ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFpblRocmVhZDo6aXNFdmVudEFsbG93ZWQoKSk7CiAK
ICAgICBpZiAobV9mcmFtZS5kb2N1bWVudCgpICYmIG1fZnJhbWUuZG9jdW1lbnQoKS0+aXNTYW5k
Ym94ZWQoU2FuZGJveFNjcmlwdHMpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1lc3NhZ2Ug
c2hvdWxkIGJlIG1vdmVkIG9mZiB0aGUgY29uc29sZSBvbmNlIGEgc29sdXRpb24gdG8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzI3NCBleGlzdHMuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0F0dHIuY3BwCShyZXZpc2lvbiAyMjQzMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQXR0
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgIkF0dHJp
YnV0ZUNoYW5nZUludmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAi
Tm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1ZS5o
IgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQu
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAJKHJldmlzaW9uIDIyNDMy
MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRl
ICJNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5oIgogI2luY2x1ZGUgIk11dGF0aW9uUmVj
b3JkLmgiCi0jaW5jbHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCiAjaW5jbHVkZSAi
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1
ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmNwcAkocmV2aXNpb24gMjI0MzIzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIEFMV0FZU19JTkxJTkUg
Tm9kZVZlY3RvciBDb250YWluZXJOb2RlOjoKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAg
ICAgIEFTU0VSVChzb3VyY2UgPT0gQ29udGFpbmVyTm9kZTo6Q2hpbGRDaGFuZ2VTb3VyY2U6OlBh
cnNlcik7Ci0gICAgICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBhc3NlcnROb0V2ZW50RGlz
cGF0Y2g7CisgICAgICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6SW5NYWluVGhyZWFkIGFz
c2VydE5vRXZlbnREaXNwYXRjaDsKICAgICAgICAgaWYgKFVOTElLRUxZKGRvY3VtZW50KCkuaGFz
TXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoTXV0YXRpb25PYnNlcnZlcjo6Q2hpbGRMaXN0KSkpIHsK
ICAgICAgICAgICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oKnRoaXMpOwogICAg
ICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQpAQCAtMTAwLDcgKzEwMCw3IEBA
IEFMV0FZU19JTkxJTkUgTm9kZVZlY3RvciBDb250YWluZXJOb2RlOjoKICAgICBkaXNjb25uZWN0
U3ViZnJhbWVzSWZOZWVkZWQoKnRoaXMsIERlc2NlbmRhbnRzT25seSk7CiAKICAgICBXaWRnZXRI
aWVyYXJjaHlVcGRhdGVzU3VzcGVuc2lvblNjb3BlIHN1c3BlbmRXaWRnZXRIaWVyYXJjaHlVcGRh
dGVzOwotICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBhc3NlcnROb0V2ZW50RGlzcGF0Y2g7
CisgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjpJbk1haW5UaHJlYWQgYXNzZXJ0Tm9FdmVu
dERpc3BhdGNoOwogCiAgICAgZG9jdW1lbnQoKS5ub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKCp0
aGlzKTsKIApAQCAtMTIwLDExICsxMjAsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIENvbnRhaW5l
ck5vZGU6OnJlbW92ZQogICAgIFJlZjxOb2RlPiBwcm90ZWN0ZWRDaGlsZFRvUmVtb3ZlKGNoaWxk
VG9SZW1vdmUpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNoaWxkVG9S
ZW1vdmUucGFyZW50Tm9kZSgpID09IHRoaXMpOwogICAgIHsKLSAgICAgICAgTm9FdmVudERpc3Bh
dGNoQXNzZXJ0aW9uIGFzc2VydE5vRXZlbnREaXNwYXRjaDsKKyAgICAgICAgTm9FdmVudERpc3Bh
dGNoQXNzZXJ0aW9uOjpJbk1haW5UaHJlYWQgYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwogICAgICAg
ICBDaGlsZExpc3RNdXRhdGlvblNjb3BlKCp0aGlzKS53aWxsUmVtb3ZlQ2hpbGQoY2hpbGRUb1Jl
bW92ZSk7CiAgICAgfQogCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oTm9F
dmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hBbGxvd2VkSW5TdWJ0cmVlKGNo
aWxkVG9SZW1vdmUpKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihOb0V2
ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFpblRocmVhZDo6aXNFdmVudERpc3BhdGNoQWxsb3dl
ZEluU3VidHJlZShjaGlsZFRvUmVtb3ZlKSk7CiAgICAgaWYgKHNvdXJjZSA9PSBDb250YWluZXJO
b2RlOjpDaGlsZENoYW5nZVNvdXJjZTo6QVBJKSB7CiAgICAgICAgIGNoaWxkVG9SZW1vdmUubm90
aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2lsbERldGFjaCgpOwogICAgICAgICBkaXNwYXRjaENo
aWxkUmVtb3ZhbEV2ZW50cyhwcm90ZWN0ZWRDaGlsZFRvUmVtb3ZlKTsKQEAgLTE0NCw3ICsxNDQs
NyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgQ29udGFpbmVyTm9kZTo6cmVtb3ZlCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIFdpZGdldEhpZXJhcmNoeVVwZGF0ZXNTdXNwZW5zaW9uU2NvcGUg
c3VzcGVuZFdpZGdldEhpZXJhcmNoeVVwZGF0ZXM7Ci0gICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0
aW9uIGFzc2VydE5vRXZlbnREaXNwYXRjaDsKKyAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246
OkluTWFpblRocmVhZCBhc3NlcnROb0V2ZW50RGlzcGF0Y2g7CiAKICAgICBkb2N1bWVudCgpLm5v
ZGVXaWxsQmVSZW1vdmVkKGNoaWxkVG9SZW1vdmUpOwogCkBAIC0xNzQsNyArMTc0LDcgQEAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgdm9pZCBleGVjdXRlTm9kZUlucwogewogICAgIE5vZGVWZWN0b3Ig
cG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHM7CiAgICAgewotICAgICAgICBOb0V2ZW50
RGlzcGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOworICAgICAgICBOb0V2ZW50
RGlzcGF0Y2hBc3NlcnRpb246OkluTWFpblRocmVhZCBhc3NlcnROb0V2ZW50RGlzcGF0Y2g7CiAg
ICAgICAgIGRvTm9kZUluc2VydGlvbigpOwogICAgICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3Bl
KGNvbnRhaW5lck5vZGUpLmNoaWxkQWRkZWQoY2hpbGQpOwogICAgICAgICBwb3N0SW5zZXJ0aW9u
Tm90aWZpY2F0aW9uVGFyZ2V0cyA9IG5vdGlmeUNoaWxkTm9kZUluc2VydGVkKGNvbnRhaW5lck5v
ZGUsIGNoaWxkKTsKQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lk
IGV4ZWN1dGVOb2RlSW5zCiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIEFTU0VSVChOb0V2ZW50
RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnREaXNwYXRjaEFsbG93ZWRJblN1YnRyZWUoY2hpbGQp
KTsKKyAgICBBU1NFUlQoTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjpJbk1haW5UaHJlYWQ6Omlz
RXZlbnREaXNwYXRjaEFsbG93ZWRJblN1YnRyZWUoY2hpbGQpKTsKICAgICBmb3IgKGF1dG8mIHRh
cmdldCA6IHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKQogICAgICAgICB0YXJnZXQt
PmRpZEZpbmlzaEluc2VydGluZ05vZGUoKTsKIApAQCAtMjI1LDYgKzIyNSw3IEBAIHZvaWQgQ29u
dGFpbmVyTm9kZTo6cmVtb3ZlRGV0YWNoZWRDaGlsZHIKICAgICAgICAgICAgIGNoaWxkLT51cGRh
dGVBbmNlc3RvckNvbm5lY3RlZFN1YmZyYW1lQ291bnRGb3JSZW1vdmFsKCk7CiAgICAgfQogICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBBU1NFUlQoIWF0dGFjaGVkKCkpIGhlcmU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc4MDEKKyAgICBOb0V2
ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFpblRocmVhZCBub0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b247CiAgICAgcmVtb3ZlRGV0YWNoZWRDaGlsZHJlbkluQ29udGFpbmVyKCp0aGlzKTsKIH0KIApA
QCAtMzk5LDcgKzQwMCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENvbnRhaW5lck5vZGU6Omluc2Vy
dEIKIAogdm9pZCBDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmVDb21tb24oTm9kZSYgbmV4dENo
aWxkLCBOb2RlJiBuZXdDaGlsZCkKIHsKLSAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gYXNz
ZXJ0Tm9FdmVudERpc3BhdGNoOworICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6SW5NYWlu
VGhyZWFkIGFzc2VydE5vRXZlbnREaXNwYXRjaDsKIAogICAgIEFTU0VSVCghbmV3Q2hpbGQucGFy
ZW50Tm9kZSgpKTsgLy8gVXNlIGluc2VydEJlZm9yZSBpZiB5b3UgbmVlZCB0byBoYW5kbGUgcmVw
YXJlbnRpbmcgKGFuZCB3YW50IERPTSBtdXRhdGlvbiBldmVudHMpLgogICAgIEFTU0VSVCghbmV3
Q2hpbGQubmV4dFNpYmxpbmcoKSk7CkBAIC00MjQsNyArNDI1LDcgQEAgdm9pZCBDb250YWluZXJO
b2RlOjppbnNlcnRCZWZvcmVDb21tb24oTgogCiB2b2lkIENvbnRhaW5lck5vZGU6OmFwcGVuZENo
aWxkQ29tbW9uKE5vZGUmIGNoaWxkKQogewotICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBh
c3NlcnROb0V2ZW50RGlzcGF0Y2g7CisgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjpJbk1h
aW5UaHJlYWQgYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwogCiAgICAgY2hpbGQuc2V0UGFyZW50Tm9k
ZSh0aGlzKTsKIApAQCAtNTYzLDcgKzU2NCw3IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6cmVtb3Zl
QmV0d2VlbihOb2RlKiAKIHsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92
ZURPTU5vZGUob2xkQ2hpbGQuZG9jdW1lbnQoKSwgb2xkQ2hpbGQpOwogCi0gICAgTm9FdmVudERp
c3BhdGNoQXNzZXJ0aW9uIGFzc2VydE5vRXZlbnREaXNwYXRjaDsKKyAgICBOb0V2ZW50RGlzcGF0
Y2hBc3NlcnRpb246OkluTWFpblRocmVhZCBhc3NlcnROb0V2ZW50RGlzcGF0Y2g7CiAKICAgICBB
U1NFUlQob2xkQ2hpbGQucGFyZW50Tm9kZSgpID09IHRoaXMpOwogCkBAIC03NjIsNyArNzYzLDcg
QEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZEluc2VydGlvbkV2ZW50cwogICAgIGlmIChjaGls
ZC5pc0luU2hhZG93VHJlZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnREaXNw
YXRjaEFsbG93ZWRJblN1YnRyZWUoY2hpbGQpKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFpblRocmVhZDo6aXNFdmVu
dERpc3BhdGNoQWxsb3dlZEluU3VidHJlZShjaGlsZCkpOwogCiAgICAgUmVmUHRyPE5vZGU+IGMg
PSAmY2hpbGQ7CiAgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudChjaGlsZC5kb2N1bWVudCgpKTsK
QEAgLTc3OSw3ICs3ODAsNyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZl
bnRzCiAKIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKFJlZjxOb2RlPiYg
Y2hpbGQpCiB7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oTm9FdmVudERp
c3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hBbGxvd2VkSW5TdWJ0cmVlKGNoaWxkKSk7
CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oTm9FdmVudERpc3BhdGNoQXNz
ZXJ0aW9uOjpJbk1haW5UaHJlYWQ6OmlzRXZlbnREaXNwYXRjaEFsbG93ZWRJblN1YnRyZWUoY2hp
bGQpKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZW1vdmVET01Ob2RlKGNo
aWxkLT5kb2N1bWVudCgpLCBjaGlsZC5nZXQoKSk7CiAKICAgICBpZiAoY2hpbGQtPmlzSW5TaGFk
b3dUcmVlKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxn
b3JpdGhtcy5jcHAJKHJldmlzaW9uIDIyNDMyMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAg
c3RhdGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUoQwogCiBOb2RlVmVjdG9yIG5v
dGlmeUNoaWxkTm9kZUluc2VydGVkKENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVl
LCBOb2RlJiBub2RlKQogewotICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBhc3NlcnROb0V2
ZW50RGlzcGF0Y2g7CisgICAgQVNTRVJUKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFp
blRocmVhZDo6aXNFdmVudEFsbG93ZWQoKSk7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEluc2VydERPTU5vZGUobm9kZS5kb2N1bWVudCgpLCBub2RlKTsKIApAQCAtMTQ3LDcg
KzE0Nyw4IEBAIHN0YXRpYyB2b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoQ28KIAogdm9p
ZCBub3RpZnlDaGlsZE5vZGVSZW1vdmVkKENvbnRhaW5lck5vZGUmIG9sZFBhcmVudE9mUmVtb3Zl
ZFRyZWUsIE5vZGUmIGNoaWxkKQogewotICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBhc3Nl
cnROb0V2ZW50RGlzcGF0Y2g7CisgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGNhbGxlciBvZiB0aGlz
IGZ1bmN0aW9uIGhhcyBhbiBpbnN0YW5jZSBvZiBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24uCisg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSB8fCAhTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjpJ
bk1haW5UaHJlYWQ6OmlzRXZlbnRBbGxvd2VkKCkpOwogCiAgICAgLy8gVHJlZSBzY29wZSBoYXMg
Y2hhbmdlZCBpZiB0aGUgY29udGFpbmVyIG5vZGUgZnJvbSB3aGljaCAibm9kZSIgaXMgcmVtb3Zl
ZCBpcyBpbiBhIGRvY3VtZW50IG9yIGEgc2hhZG93IHJvb3QuCiAgICAgYXV0byB0cmVlU2NvcGVD
aGFuZ2UgPSBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLmlzSW5UcmVlU2NvcGUoKSA/IFRyZWVTY29w
ZUNoYW5nZTo6Q2hhbmdlZCA6IFRyZWVTY29wZUNoYW5nZTo6RGlkTm90Q2hhbmdlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMjQzMjMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzkzLDcgKzE3OTMsNyBAQCB2
b2lkIERvY3VtZW50OjpyZXNvbHZlU3R5bGUoUmVzb2x2ZVN0eWxlCiAgICAgLy8gaGl0cyBhIG51
bGwtZGVyZWZlcmVuY2UgZHVlIHRvIHNlY3VyaXR5IGNvZGUgYWx3YXlzIGFzc3VtaW5nIHRoZSBk
b2N1bWVudCBoYXMgYSBTZWN1cml0eU9yaWdpbi4KIAogICAgIHsKLSAgICAgICAgTm9FdmVudERp
c3BhdGNoQXNzZXJ0aW9uIG5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjsKKyAgICAgICAgTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uOjpJbk1haW5UaHJlYWQgbm9FdmVudERpc3BhdGNoQXNzZXJ0aW9u
OwogICAgICAgICBzdHlsZVNjb3BlKCkuZmx1c2hQZW5kaW5nVXBkYXRlKCk7CiAgICAgICAgIGZy
YW1lVmlldy53aWxsUmVjYWxjU3R5bGUoKTsKICAgICB9CkBAIC0xODA0LDcgKzE4MDQsNyBAQCB2
b2lkIERvY3VtZW50OjpyZXNvbHZlU3R5bGUoUmVzb2x2ZVN0eWxlCiAgICAgewogICAgICAgICBT
dHlsZTo6UG9zdFJlc29sdXRpb25DYWxsYmFja0Rpc2FibGVyIGRpc2FibGVyKCp0aGlzKTsKICAg
ICAgICAgV2lkZ2V0SGllcmFyY2h5VXBkYXRlc1N1c3BlbnNpb25TY29wZSBzdXNwZW5kV2lkZ2V0
SGllcmFyY2h5VXBkYXRlczsKLSAgICAgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uIG5vRXZl
bnREaXNwYXRjaEFzc2VydGlvbjsKKyAgICAgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjpJ
bk1haW5UaHJlYWQgbm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOwogCiAgICAgICAgIG1faW5TdHls
ZVJlY2FsYyA9IHRydWU7CiAKQEAgLTE5MjQsNyArMTkyNCw3IEBAIGJvb2wgRG9jdW1lbnQ6Om5l
ZWRzU3R5bGVSZWNhbGMoKSBjb25zdAogYm9vbCBEb2N1bWVudDo6dXBkYXRlU3R5bGVJZk5lZWRl
ZCgpCiB7CiAgICAgewotICAgICAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gbm9FdmVudERp
c3BhdGNoQXNzZXJ0aW9uOworICAgICAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFp
blRocmVhZCBub0V2ZW50RGlzcGF0Y2hBc3NlcnRpb247CiAgICAgICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgICAgIEFTU0VSVCghdmlldygpIHx8ICF2aWV3KCktPmlzUGFpbnRpbmco
KSk7CiAKQEAgLTQwODUsNyArNDA4NSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVJhbmdlc0Fm
dGVyQ2hpbGRyZW4KIAogdm9pZCBEb2N1bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChD
b250YWluZXJOb2RlJiBjb250YWluZXIpCiB7Ci0gICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9u
IGFzc2VydE5vRXZlbnREaXNwYXRjaDsKKyAgICBBU1NFUlQoIU5vRXZlbnREaXNwYXRjaEFzc2Vy
dGlvbjo6SW5NYWluVGhyZWFkOjppc0V2ZW50QWxsb3dlZCgpKTsKIAogICAgIHJlbW92ZUZvY3Vz
ZWROb2RlT2ZTdWJ0cmVlKGNvbnRhaW5lciwgdHJ1ZSAvKiBhbW9uZ0NoaWxkcmVuT25seSAqLyk7
CiAgICAgcmVtb3ZlRm9jdXNOYXZpZ2F0aW9uTm9kZU9mU3VidHJlZShjb250YWluZXIsIHRydWUg
LyogYW1vbmdDaGlsZHJlbk9ubHkgKi8pOwpAQCAtNDExOCw3ICs0MTE4LDcgQEAgdm9pZCBEb2N1
bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZAogCiB2b2lkIERvY3VtZW50Ojpub2RlV2ls
bEJlUmVtb3ZlZChOb2RlJiBub2RlKQogewotICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBh
c3NlcnROb0V2ZW50RGlzcGF0Y2g7CisgICAgQVNTRVJUKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b246OkluTWFpblRocmVhZDo6aXNFdmVudEFsbG93ZWQoKSk7CiAKICAgICByZW1vdmVGb2N1c2Vk
Tm9kZU9mU3VidHJlZShub2RlKTsKICAgICByZW1vdmVGb2N1c05hdmlnYXRpb25Ob2RlT2ZTdWJ0
cmVlKG5vZGUpOwpAQCAtNDI2Miw3ICs0MjYyLDcgQEAgRXZlbnRMaXN0ZW5lciogRG9jdW1lbnQ6
OmdldFdpbmRvd0F0dHJpYgogCiB2b2lkIERvY3VtZW50OjpkaXNwYXRjaFdpbmRvd0V2ZW50KEV2
ZW50JiBldmVudCwgRXZlbnRUYXJnZXQqIHRhcmdldCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChO
b0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnRBbGxvd2VkSW5NYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKE5vRXZlbnREaXNwYXRjaEFzc2Vy
dGlvbjo6SW5NYWluVGhyZWFkOjppc0V2ZW50QWxsb3dlZCgpKTsKICAgICBpZiAoIW1fZG9tV2lu
ZG93KQogICAgICAgICByZXR1cm47CiAgICAgbV9kb21XaW5kb3ctPmRpc3BhdGNoRXZlbnQoZXZl
bnQsIHRhcmdldCk7CkBAIC00MjcwLDcgKzQyNzAsNyBAQCB2b2lkIERvY3VtZW50OjpkaXNwYXRj
aFdpbmRvd0V2ZW50KEV2ZW50CiAKIHZvaWQgRG9jdW1lbnQ6OmRpc3BhdGNoV2luZG93TG9hZEV2
ZW50KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246Omlz
RXZlbnRBbGxvd2VkSW5NYWluVGhyZWFkKCkpOworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6SW5NYWluVGhyZWFkOjppc0V2ZW50
QWxsb3dlZCgpKTsKICAgICBpZiAoIW1fZG9tV2luZG93KQogICAgICAgICByZXR1cm47CiAgICAg
bV9kb21XaW5kb3ctPmRpc3BhdGNoTG9hZEV2ZW50KCk7CkBAIC01MTAwLDcgKzUxMDAsNyBAQCB2
b2lkIERvY3VtZW50OjphcHBseVBlbmRpbmdYU0xUcmFuc2Zvcm1zCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1faGFzUGVuZGluZ1hTTFRyYW5zZm9ybXMgPSBmYWxzZTsKLSAgICBBU1NFUlQoTm9F
dmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50QWxsb3dlZEluTWFpblRocmVhZCgpKTsKKyAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b246OkluTWFpblRocmVhZDo6aXNFdmVudEFsbG93ZWQoKSk7CiAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24gOiBzdHlsZVNjb3BlKCkuY29sbGVjdFhTTFRyYW5zZm9ybXMoKSkg
ewogICAgICAgICBBU1NFUlQocHJvY2Vzc2luZ0luc3RydWN0aW9uLT5pc1hTTCgpKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMjI0MzIzKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcxLDI4ICsxNzcxLDMxIEBA
IHZvaWQgRWxlbWVudDo6YWRkU2hhZG93Um9vdChSZWY8U2hhZG93Um8KIHsKICAgICBBU1NFUlQo
IW5ld1NoYWRvd1Jvb3QtPmhhc0NoaWxkTm9kZXMoKSk7CiAgICAgQVNTRVJUKCFzaGFkb3dSb290
KCkpOwotICAgIAotICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICBSZW5kZXJUcmVlVXBkYXRl
cjo6dGVhckRvd25SZW5kZXJlcnMoKnRoaXMpOwogCiAgICAgU2hhZG93Um9vdCYgc2hhZG93Um9v
dCA9IG5ld1NoYWRvd1Jvb3Q7Ci0gICAgZW5zdXJlRWxlbWVudFJhcmVEYXRhKCkuc2V0U2hhZG93
Um9vdChXVEZNb3ZlKG5ld1NoYWRvd1Jvb3QpKTsKKyAgICB7CisgICAgICAgIE5vRXZlbnREaXNw
YXRjaEFzc2VydGlvbjo6SW5NYWluVGhyZWFkIG5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjsKKyAg
ICAgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgICAgICBSZW5kZXJUcmVlVXBkYXRlcjo6dGVh
ckRvd25SZW5kZXJlcnMoKnRoaXMpOworCisgICAgICAgIGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgp
LnNldFNoYWRvd1Jvb3QoV1RGTW92ZShuZXdTaGFkb3dSb290KSk7CiAKLSAgICBzaGFkb3dSb290
LnNldEhvc3QodGhpcyk7Ci0gICAgc2hhZG93Um9vdC5zZXRQYXJlbnRUcmVlU2NvcGUodHJlZVNj
b3BlKCkpOworICAgICAgICBzaGFkb3dSb290LnNldEhvc3QodGhpcyk7CisgICAgICAgIHNoYWRv
d1Jvb3Quc2V0UGFyZW50VHJlZVNjb3BlKHRyZWVTY29wZSgpKTsKIAogI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICBBU1NFUlQobm90aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQoKnRoaXMsIHNoYWRvd1Jv
b3QpLmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChub3RpZnlDaGlsZE5vZGVJbnNlcnRlZCgq
dGhpcywgc2hhZG93Um9vdCkuaXNFbXB0eSgpKTsKICNlbHNlCi0gICAgbm90aWZ5Q2hpbGROb2Rl
SW5zZXJ0ZWQoKnRoaXMsIHNoYWRvd1Jvb3QpOworICAgICAgICBub3RpZnlDaGlsZE5vZGVJbnNl
cnRlZCgqdGhpcywgc2hhZG93Um9vdCk7CiAjZW5kaWYKIAotICAgIGludmFsaWRhdGVTdHlsZUFu
ZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKLQotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkUHVzaFNoYWRvd1Jvb3QoKnRoaXMsIHNoYWRvd1Jvb3QpOworICAgICAgICBpbnZhbGlkYXRl
U3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CisgICAgfQogCiAgICAgaWYgKHNoYWRvd1Jv
b3QubW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCiAgICAgICAgIGRpZEFkZFVz
ZXJBZ2VudFNoYWRvd1Jvb3Qoc2hhZG93Um9vdCk7CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFB1c2hTaGFkb3dSb290KCp0aGlzLCBzaGFkb3dSb290KTsKIH0KIAogdm9pZCBF
bGVtZW50OjpyZW1vdmVTaGFkb3dSb290KCkKQEAgLTIxNDYsNyArMjE0OSw3IEBAIHZvaWQgRWxl
bWVudDo6YXR0YWNoQXR0cmlidXRlTm9kZUlmTmVlZGUKICAgICBpZiAoYXR0ck5vZGUub3duZXJF
bGVtZW50KCkgPT0gdGhpcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9FdmVudERpc3BhdGNo
QXNzZXJ0aW9uIGFzc2VydE5vRXZlbnREaXNwYXRjaDsKKyAgICBOb0V2ZW50RGlzcGF0Y2hBc3Nl
cnRpb246OkluTWFpblRocmVhZCBhc3NlcnROb0V2ZW50RGlzcGF0Y2g7CiAKICAgICBhdHRyTm9k
ZS5hdHRhY2hUb0VsZW1lbnQoKnRoaXMpOwogICAgIGVuc3VyZUF0dHJOb2RlTGlzdEZvckVsZW1l
bnQoKnRoaXMpLmFwcGVuZCgmYXR0ck5vZGUpOwpAQCAtMjE2NCw4ICsyMTY3LDggQEAgRXhjZXB0
aW9uT3I8UmVmUHRyPEF0dHI+PiBFbGVtZW50OjpzZXRBdAogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW5Vc2VBdHRyaWJ1dGVFcnJvciB9OwogCiAgICAgewotICAgIE5vRXZlbnREaXNwYXRj
aEFzc2VydGlvbiBhc3NlcnROb0V2ZW50RGlzcGF0Y2g7Ci0gICAgc3luY2hyb25pemVBbGxBdHRy
aWJ1dGVzKCk7CisgICAgICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6SW5NYWluVGhyZWFk
IGFzc2VydE5vRXZlbnREaXNwYXRjaDsKKyAgICAgICAgc3luY2hyb25pemVBbGxBdHRyaWJ1dGVz
KCk7CiAgICAgfQogCiAgICAgYXV0byYgZWxlbWVudERhdGEgPSBlbnN1cmVVbmlxdWVFbGVtZW50
RGF0YSgpOwpAQCAtMjIxMCwyNSArMjIxMywyMyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8QXR0cj4+
IEVsZW1lbnQ6OnNldEF0CiAgICAgaWYgKGF0dHJOb2RlLm93bmVyRWxlbWVudCgpICYmIGF0dHJO
b2RlLm93bmVyRWxlbWVudCgpICE9IHRoaXMpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
blVzZUF0dHJpYnV0ZUVycm9yIH07CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgCiAg
ICAgLy8gQXR0cjo6dmFsdWUoKSB3aWxsIHJldHVybiBpdHMgJ21fc3RhbmRhbG9uZVZhbHVlJyBt
ZW1iZXIgYW55IHRpbWUgaXRzIEVsZW1lbnQgaXMgc2V0IHRvIG51bGxwdHIuIFdlIG5lZWQgdG8g
Y2FjaGUgdGhpcyB2YWx1ZQogICAgIC8vIGJlZm9yZSBtYWtpbmcgY2hhbmdlcyB0byBhdHRyTm9k
ZSdzIEVsZW1lbnQgY29ubmVjdGlvbnMuCiAgICAgYXV0byBhdHRyTm9kZVZhbHVlID0gYXR0ck5v
ZGUudmFsdWUoKTsKLQorICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICB7Ci0gICAgTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uIGFzc2VydE5vRXZlbnREaXNwYXRjaDsKLSAgICBzeW5jaHJvbml6
ZUFsbEF0dHJpYnV0ZXMoKTsKLSAgICBhdXRvJiBlbGVtZW50RGF0YSA9IGVuc3VyZVVuaXF1ZUVs
ZW1lbnREYXRhKCk7Ci0KLSAgICBpbmRleCA9IGVsZW1lbnREYXRhLmZpbmRBdHRyaWJ1dGVJbmRl
eEJ5TmFtZShhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCkpOwotCi0gICAgaWYgKGluZGV4ICE9IEVs
ZW1lbnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCkgewotICAgICAgICBpZiAob2xkQXR0ck5vZGUp
Ci0gICAgICAgICAgICBkZXRhY2hBdHRyTm9kZUZyb21FbGVtZW50V2l0aFZhbHVlKG9sZEF0dHJO
b2RlLmdldCgpLCBlbGVtZW50RGF0YS5hdHRyaWJ1dGVBdChpbmRleCkudmFsdWUoKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG9sZEF0dHJOb2RlID0gQXR0cjo6Y3JlYXRlKGRvY3VtZW50
KCksIGF0dHJOb2RlLnF1YWxpZmllZE5hbWUoKSwgZWxlbWVudERhdGEuYXR0cmlidXRlQXQoaW5k
ZXgpLnZhbHVlKCkpOwotICAgIH0KKyAgICAgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjpJ
bk1haW5UaHJlYWQgYXNzZXJ0Tm9FdmVudERpc3BhdGNoOworICAgICAgICBzeW5jaHJvbml6ZUFs
bEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgYXV0byYgZWxlbWVudERhdGEgPSBlbnN1cmVVbmlxdWVF
bGVtZW50RGF0YSgpOworCisgICAgICAgIGluZGV4ID0gZWxlbWVudERhdGEuZmluZEF0dHJpYnV0
ZUluZGV4QnlOYW1lKGF0dHJOb2RlLnF1YWxpZmllZE5hbWUoKSk7CisKKyAgICAgICAgaWYgKGlu
ZGV4ICE9IEVsZW1lbnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCkgeworICAgICAgICAgICAgaWYg
KG9sZEF0dHJOb2RlKQorICAgICAgICAgICAgICAgIGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRX
aXRoVmFsdWUob2xkQXR0ck5vZGUuZ2V0KCksIGVsZW1lbnREYXRhLmF0dHJpYnV0ZUF0KGluZGV4
KS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvbGRBdHRyTm9k
ZSA9IEF0dHI6OmNyZWF0ZShkb2N1bWVudCgpLCBhdHRyTm9kZS5xdWFsaWZpZWROYW1lKCksIGVs
ZW1lbnREYXRhLmF0dHJpYnV0ZUF0KGluZGV4KS52YWx1ZSgpKTsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIGF0dGFjaEF0dHJpYnV0ZU5vZGVJZk5lZWRlZChhdHRyTm9kZSk7CkBAIC0yNDc0LDE0
ICsyNDc1LDE0IEBAIHZvaWQgRWxlbWVudDo6Ymx1cigpCiAKIHZvaWQgRWxlbWVudDo6ZGlzcGF0
Y2hGb2N1c0luRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJlZlB0cjxFbGVt
ZW50PiYmIG9sZEZvY3VzZWRFbGVtZW50KQogewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudEFsbG93ZWRJbk1haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oTm9FdmVudERp
c3BhdGNoQXNzZXJ0aW9uOjpJbk1haW5UaHJlYWQ6OmlzRXZlbnRBbGxvd2VkKCkpOwogICAgIEFT
U0VSVChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmZvY3VzaW5FdmVudCB8fCBldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLkRPTUZvY3VzSW5FdmVudCk7CiAgICAgZGlzcGF0Y2hTY29wZWRFdmVu
dChGb2N1c0V2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVlLCBmYWxzZSwgZG9jdW1lbnQoKS5k
ZWZhdWx0VmlldygpLCAwLCBXVEZNb3ZlKG9sZEZvY3VzZWRFbGVtZW50KSkpOwogfQogCiB2b2lk
IEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNPdXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgUmVmUHRyPEVsZW1lbnQ+JiYgbmV3Rm9jdXNlZEVsZW1lbnQpCiB7Ci0gICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2
ZW50QWxsb3dlZEluTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFpblRocmVhZDo6aXNFdmVudEFs
bG93ZWQoKSk7CiAgICAgQVNTRVJUKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZm9jdXNvdXRF
dmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLkRPTUZvY3VzT3V0RXZlbnQpOwogICAg
IGRpc3BhdGNoU2NvcGVkRXZlbnQoRm9jdXNFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgdHJ1ZSwg
ZmFsc2UsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSwgMCwgV1RGTW92ZShuZXdGb2N1c2VkRWxl
bWVudCkpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCShy
ZXZpc2lvbiAyMjQzMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHN0YXRpYyBib29sIHNob3VsZFN1
cHByZXNzRXZlbnREaXNwYXRjaEkKIAogYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZl
bnQoTm9kZSYgbm9kZSwgRXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoQWxs
b3dlZEluU3VidHJlZShub2RlKSk7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjpJbk1haW5UaHJlYWQ6OmlzRXZlbnREaXNwYXRj
aEFsbG93ZWRJblN1YnRyZWUobm9kZSkpOwogICAgIFJlZjxOb2RlPiBwcm90ZWN0ZWROb2RlKG5v
ZGUpOwogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHZpZXcgPSBub2RlLmRvY3VtZW50KCkudmlldygp
OwogICAgIEV2ZW50UGF0aCBldmVudFBhdGgobm9kZSwgZXZlbnQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL05vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24uaAkocmV2aXNpb24gMjI0MzIz
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MywxMSArNjMsNDEgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0g
ICAgc3RhdGljIGJvb2wgaXNFdmVudERpc3BhdGNoQWxsb3dlZEluU3VidHJlZShOb2RlJiBub2Rl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzRXZlbnRBbGxvd2VkSW5NYWluVGhyZWFkKCkgfHwg
RXZlbnRBbGxvd2VkU2NvcGU6OmlzQWxsb3dlZE5vZGUobm9kZSk7Ci0gICAgfQorICAgIGNsYXNz
IEluTWFpblRocmVhZCB7CisgICAgcHVibGljOgorICAgICAgICBJbk1haW5UaHJlYWQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICAgICAgICAgICsrc19jb3VudDsKKyNlbmRpZgorICAgICAgICB9CisKKyAg
ICAgICAgfkluTWFpblRocmVhZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAgICAgQVNTRVJUKHNf
Y291bnQpOworICAgICAgICAgICAgLS1zX2NvdW50OworI2VuZGlmCisgICAgICAgIH0KIAorICAg
ICAgICBzdGF0aWMgYm9vbCBpc0V2ZW50RGlzcGF0Y2hBbGxvd2VkSW5TdWJ0cmVlKE5vZGUmIG5v
ZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0V2ZW50QWxsb3dlZCgpIHx8IEV2
ZW50QWxsb3dlZFNjb3BlOjppc0FsbG93ZWROb2RlKG5vZGUpOworICAgICAgICB9CisKKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNFdmVudEFsbG93ZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgICAg
IHJldHVybiAhc19jb3VudDsKKyNlbHNlCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRp
ZgorICAgICAgICB9CisgICAgfTsKKyAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgY2xh
c3MgRXZlbnRBbGxvd2VkU2NvcGUgewogICAgIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJ
KHJldmlzaW9uIDIyNDMyMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMyNiw3ICsyMzI2LDcgQEAgdm9pZCBOb2RlOjpkaXNwYXRjaFN1YnRyZWVN
b2RpZmllZEV2ZW50KAogICAgIGlmIChpc0luU2hhZG93VHJlZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBSRUxFQVNFX0FTU0VSVChOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnRE
aXNwYXRjaEFsbG93ZWRJblN1YnRyZWUoKnRoaXMpKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFpblRocmVhZDo6aXNF
dmVudERpc3BhdGNoQWxsb3dlZEluU3VidHJlZSgqdGhpcykpOwogCiAgICAgaWYgKCFkb2N1bWVu
dCgpLmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NU1VCVFJFRU1PRElGSUVEX0xJU1RFTkVS
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjMzOSw3ICsyMzM5LDcgQEAgdm9pZCBOb2RlOjpkaXNw
YXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KAogCiBib29sIE5vZGU6OmRpc3BhdGNoRE9NQWN0aXZh
dGVFdmVudChpbnQgZGV0YWlsLCBFdmVudCYgdW5kZXJseWluZ0V2ZW50KQogewotICAgIFJFTEVB
U0VfQVNTRVJUKE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudEFsbG93ZWRJbk1haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oTm9FdmVudERp
c3BhdGNoQXNzZXJ0aW9uOjpJbk1haW5UaHJlYWQ6OmlzRXZlbnRBbGxvd2VkKCkpOwogICAgIFJl
ZjxVSUV2ZW50PiBldmVudCA9IFVJRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQWN0aXZh
dGVFdmVudCwgdHJ1ZSwgdHJ1ZSwgZG9jdW1lbnQoKS5kZWZhdWx0VmlldygpLCBkZXRhaWwpOwog
ICAgIGV2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQoJnVuZGVybHlpbmdFdmVudCk7CiAgICAgZGlz
cGF0Y2hTY29wZWRFdmVudChldmVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCShyZXZpc2lvbiAyMjQzMjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
MCw3ICsxOTAsNyBAQCBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBCiAg
ICAgLy8gZnVuY3Rpb25zIHNob3VsZCBub3QgYWRkIG5ldyBhY3RpdmUgRE9NIG9iamVjdHMsIG5v
ciBleGVjdXRlIGFyYml0cmFyeSBKYXZhU2NyaXB0LgogICAgIC8vIEFuIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OIG9yIFJFTEVBU0VfQVNTRVJUIHdpbGwgZmlyZSBpZiB0aGlzIGhh
cHBlbnMsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBjb2RlCiAgICAgLy8gY2FuU3VzcGVuZCBmdW5j
dGlvbnMgc28gaXQgd2lsbCBub3QgaGFwcGVuIQotICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlv
biBhc3NlcnROb0V2ZW50RGlzcGF0Y2g7CisgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjpJ
bk1haW5UaHJlYWQgYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwogICAgIGZvciAoYXV0byogYWN0aXZl
RE9NT2JqZWN0IDogbV9hY3RpdmVET01PYmplY3RzKSB7CiAgICAgICAgIGlmICghYWN0aXZlRE9N
T2JqZWN0LT5jYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkpIHsKICAgICAgICAgICAg
IGNhblN1c3BlbmQgPSBmYWxzZTsKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpCiAgICAgLy8gZnVuY3Rpb25zIHNob3VsZCBub3QgYWRk
IG5ldyBhY3RpdmUgRE9NIG9iamVjdHMsIG5vciBleGVjdXRlIGFyYml0cmFyeSBKYXZhU2NyaXB0
LgogICAgIC8vIEFuIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OIG9yIFJFTEVBU0Vf
QVNTRVJUIHdpbGwgZmlyZSBpZiB0aGlzIGhhcHBlbnMsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBj
b2RlCiAgICAgLy8gc3VzcGVuZCBmdW5jdGlvbnMgc28gaXQgd2lsbCBub3QgaGFwcGVuIQotICAg
IE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBhc3NlcnROb0V2ZW50RGlzcGF0Y2g7CisgICAgTm9F
dmVudERpc3BhdGNoQXNzZXJ0aW9uOjpJbk1haW5UaHJlYWQgYXNzZXJ0Tm9FdmVudERpc3BhdGNo
OwogICAgIGZvciAoYXV0byogYWN0aXZlRE9NT2JqZWN0IDogbV9hY3RpdmVET01PYmplY3RzKQog
ICAgICAgICBhY3RpdmVET01PYmplY3QtPnN1c3BlbmQod2h5KTsKIApAQCAtMjYxLDcgKzI2MSw3
IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXYKICAgICAvLyBmdW5j
dGlvbnMgc2hvdWxkIG5vdCBhZGQgbmV3IGFjdGl2ZSBET00gb2JqZWN0cywgbm9yIGV4ZWN1dGUg
YXJiaXRyYXJ5IEphdmFTY3JpcHQuCiAgICAgLy8gQW4gQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04gb3IgUkVMRUFTRV9BU1NFUlQgd2lsbCBmaXJlIGlmIHRoaXMgaGFwcGVucywgYnV0
IGl0J3MgaW1wb3J0YW50IHRvIGNvZGUKICAgICAvLyByZXN1bWUgZnVuY3Rpb25zIHNvIGl0IHdp
bGwgbm90IGhhcHBlbiEKLSAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9FdmVu
dERpc3BhdGNoOworICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6SW5NYWluVGhyZWFkIGFz
c2VydE5vRXZlbnREaXNwYXRjaDsKICAgICBmb3IgKGF1dG8qIGFjdGl2ZURPTU9iamVjdCA6IG1f
YWN0aXZlRE9NT2JqZWN0cykKICAgICAgICAgYWN0aXZlRE9NT2JqZWN0LT5yZXN1bWUoKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCShyZXZpc2lvbiAyMjQzMjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBDYWNoZWRQYWdlOjpyZXN0b3JlKFBhZ2UmIHBhZ2Up
CiAgICAgewogICAgICAgICAvLyBEbyBub3QgZGlzcGF0Y2ggRE9NIGV2ZW50cyBhcyB0aGVpciBK
YXZhU2NyaXB0IGxpc3RlbmVycyBjb3VsZCBjYXVzZSB0aGUgcGFnZSB0byBiZSBwdXQKICAgICAg
ICAgLy8gaW50byB0aGUgcGFnZSBjYWNoZSBiZWZvcmUgd2UgaGF2ZSBmaW5pc2hlZCByZXN0b3Jp
bmcgaXQgZnJvbSB0aGUgcGFnZSBjYWNoZS4KLSAgICAgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0
aW9uIG5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjsKKyAgICAgICAgTm9FdmVudERpc3BhdGNoQXNz
ZXJ0aW9uOjpJbk1haW5UaHJlYWQgbm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOwogCiAgICAgICAg
IG1fY2FjaGVkTWFpbkZyYW1lLT5vcGVuKCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
aGlzdG9yeS9QYWdlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2hpc3Rv
cnkvUGFnZUNhY2hlLmNwcAkocmV2aXNpb24gMjI0MzIzKQorKysgU291cmNlL1dlYkNvcmUvaGlz
dG9yeS9QYWdlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjMsNyArNDIzLDcgQEAgdm9p
ZCBQYWdlQ2FjaGU6OmFkZElmQ2FjaGVhYmxlKEhpc3RvcnlJdAogICAgIHNldFBhZ2VDYWNoZVN0
YXRlKCpwYWdlLCBEb2N1bWVudDo6SW5QYWdlQ2FjaGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdl
IG5vIGxvbmdlciBmaXJlIGFueSBKUyBldmVudHMgcGFzdCB0aGlzIHBvaW50LgotICAgIE5vRXZl
bnREaXNwYXRjaEFzc2VydGlvbiBhc3NlcnROb0V2ZW50RGlzcGF0Y2g7CisgICAgTm9FdmVudERp
c3BhdGNoQXNzZXJ0aW9uOjpJbk1haW5UaHJlYWQgYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwogCiAg
ICAgaXRlbS5tX2NhY2hlZFBhZ2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENhY2hlZFBhZ2U+KCpwYWdl
KTsKICAgICBpdGVtLm1fcHJ1bmluZ1JlYXNvbiA9IFBydW5pbmdSZWFzb246Ok5vbmU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0xheW91dENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvTGF5b3V0Q29udGV4dC5jcHAJKHJldmlzaW9uIDIyNDMyMykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTGF5b3V0Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxMSw3ICsyMTEsNyBAQCB2b2lkIExheW91dENvbnRleHQ6OmxheW91dCgpCiAgICAgfQogICAg
IHsKICAgICAgICAgU2V0Rm9yU2NvcGU8TGF5b3V0UGhhc2U+IGxheW91dFBoYXNlKG1fbGF5b3V0
UGhhc2UsIExheW91dFBoYXNlOjpJblJlbmRlclRyZWVMYXlvdXQpOwotICAgICAgICBOb0V2ZW50
RGlzcGF0Y2hBc3NlcnRpb24gbm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOworICAgICAgICBOb0V2
ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFpblRocmVhZCBub0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b247CiAgICAgICAgIFN1YnRyZWVMYXlvdXRTdGF0ZU1haW50YWluZXIgc3VidHJlZUxheW91dFN0
YXRlTWFpbnRhaW5lcihzdWJ0cmVlTGF5b3V0Um9vdCgpKTsKICAgICAgICAgUmVuZGVyVmlldzo6
UmVwYWludFJlZ2lvbkFjY3VtdWxhdG9yIHJlcGFpbnRSZWdpb25BY2N1bXVsYXRvcihyZW5kZXJW
aWV3KCkpOwogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAkocmV2aXNpb24gMjI0MzIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUyNiw3ICsyNTI2LDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShTZQogCiAgICAgICAgICAgICBp
ZiAoZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbChmcmFtZUVsZW1lbnRCYXNlLCBmcmFt
ZVZpZXcpKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gZmlyZXMgd2Ug
bmVlZCB0byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQuCi0g
ICAgICAgICAgICAgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uIGFzc2VydE5vRXZlbnREaXNw
YXRjaDsKKyAgICAgICAgICAgICAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OkluTWFpblRo
cmVhZCBhc3NlcnROb0V2ZW50RGlzcGF0Y2g7CiAKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0
IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1bWVu
dFZpc2libGVSZWN0KTsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGV4cG9zZVJlY3QgPSBn
ZXRSZWN0VG9FeHBvc2Uodmlld1JlY3QsIGFic29sdXRlUmVjdCwgaW5zaWRlRml4ZWQsIGFsaWdu
WCwgYWxpZ25ZKTsK
</data>
<flag name="review"
          id="345121"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>