<?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>56912</bug_id>
          
          <creation_ts>2011-03-23 03:18:22 -0700</creation_ts>
          <short_desc>Web Inspector: move node searching and node highlight related methods from InspectorAgent to DOMAgent</short_desc>
          <delta_ts>2011-03-28 23:23:07 -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>0</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>buildbot</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>372051</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-03-23 03:18:22 -0700</bug_when>
    <thetext>%subj%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372052</commentid>
    <comment_count>1</comment_count>
      <attachid>86594</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-03-23 03:23:57 -0700</bug_when>
    <thetext>Created attachment 86594
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372055</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-23 03:29:41 -0700</bug_when>
    <thetext>Attachment 86594 did not build on chromium:
Build output: http://queues.webkit.org/results/8230495</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372065</commentid>
    <comment_count>3</comment_count>
      <attachid>86597</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-03-23 03:43:52 -0700</bug_when>
    <thetext>Created attachment 86597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372079</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-23 04:11:34 -0700</bug_when>
    <thetext>Attachment 86594 did not build on win:
Build output: http://queues.webkit.org/results/8227735</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372099</commentid>
    <comment_count>5</comment_count>
      <attachid>86597</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-03-23 05:43:03 -0700</bug_when>
    <thetext>Comment on attachment 86597
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=86597&amp;action=review

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:216
&gt; +} // unnamed namespace

unnamed -&gt; anonymous or just // namespace ?

&gt; Source/WebCore/inspector/InspectorAgent.cpp:127
&gt; +    m_instrumentingAgents-&gt;setInspectorAgent(this);

There should be symmetric call reseting InspectorAgent.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:100
&gt; +static const char searchingForNode[] = &quot;searchingForNode&quot;;

Is it still in use?

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:917
&gt; +bool InspectorDOMAgent::searchingForNodeInPage() const

No need to expose this through a public method, just use m_searchingForNode directly in this class.

&gt; Source/WebCore/inspector/InspectorInstrumentation.cpp:161
&gt; +    if (!inspectorAgent-&gt;enabled())

You wouldn&apos;t need this check if you used instrumentingAgents()-&gt;inspectorDOMAgent(), please fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372108</commentid>
    <comment_count>6</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-03-23 06:23:25 -0700</bug_when>
    <thetext>Committed r81771: &lt;http://trac.webkit.org/changeset/81771&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375029</commentid>
    <comment_count>7</comment_count>
      <attachid>86597</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-03-28 23:04:31 -0700</bug_when>
    <thetext>Comment on attachment 86597
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=86597&amp;action=review

This is r- for several reasons, I wonder how it ended up with r+.

&gt; Source/WebCore/inspector/DOMNodeHighlighter.h:37
&gt; +namespace DOMNodeHighlighter {

Why custom namespace? What is wrong with using WebCore? This is not standard approach afaik.

&gt; Source/WebCore/inspector/DOMNodeHighlighter.h:39
&gt; +void DrawNodeHighlight(GraphicsContext&amp;, Node*);

Methods in WebCore start with lower case.

&gt; Source/WebCore/inspector/Inspector.json:676
&gt; +                &quot;name&quot;: &quot;setSearchingForNode&quot;,

DOM domain is documented, you should not introduce commands that are not documented into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375031</commentid>
    <comment_count>8</comment_count>
      <attachid>86597</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-03-28 23:07:01 -0700</bug_when>
    <thetext>Comment on attachment 86597
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=86597&amp;action=review

&gt; Source/WebCore/inspector/Inspector.json:696
&gt; +                    { &quot;name&quot;: &quot;frameId&quot;, &quot;type&quot;: &quot;string&quot; }

Hm. DOM domain does not operate frameIds. This is the term from a different &quot;Network&quot; domain. This command does not belong here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375042</commentid>
    <comment_count>9</comment_count>
      <attachid>86597</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-03-28 23:18:51 -0700</bug_when>
    <thetext>Comment on attachment 86597
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=86597&amp;action=review

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:65
&gt; +#include &quot;InspectorAgent.h&quot;

1) I think it is very wrong to add a dependency from InspectorDOMAgent to InspectorResourceAgent.
2) I also think it is very wrong to put dependency from any agent to InspectorAgent

I think reasons above are sufficient to roll this change out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375049</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-03-28 23:23:07 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 86597 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86597&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:65
&gt; &gt; +#include &quot;InspectorAgent.h&quot;
&gt; 
&gt; 1) I think it is very wrong to add a dependency from InspectorDOMAgent to InspectorResourceAgent.

read as of InspectorDOMAgent from InspectorResourceAgent

&gt; 2) I also think it is very wrong to put dependency from any agent to InspectorAgent
&gt; 

read as of any agent from InspectorAgent

&gt; I think reasons above are sufficient to roll this change out.

Morning brains confused, blood boils :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86594</attachid>
            <date>2011-03-23 03:23:57 -0700</date>
            <delta_ts>2011-03-23 03:43:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56912-20110323132354.patch</filename>
            <type>text/plain</type>
            <size>63606</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE3NTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNWRmYWE0
YzRmNzYyYjZkYWQ5MjFjYWRmNmFlZWEzZjhiM2ViNzU1OS4uMmUwZTYzNmVkZjZkZGNhMGM1NGZh
MzM4ZGQ4M2E3MGRmOTk2NDRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTg3OCw2ICs4Nzgs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcAogCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAorICAgIGlu
c3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0LmNwcAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCiAgICAgaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhMGRmYjBlZTBmNjYx
N2RlMmUwZTgzZTRhOTEzNDM5ZGUwOTE5NTI4Li40MWViZDFjNzU1Zjg5YWIzZWUwMTk4MjFjMzhj
ZDZjMjg2YmRjNjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTEtMDMtMjMgIEls
eWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgbm9kZSBz
ZWFyY2hpbmcgYW5kIG5vZGUgaGlnaGxpZ2h0IHJlbGF0ZWQgbWV0aG9kcyBmcm9tIEluc3BlY3Rv
ckFnZW50IHRvIEluc3BlY3RvckRPTUFnZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY5MTIKKworICAgICAgICBUaGUgbmV4dCBmdW5jdGlvbnMg
d2VyZSBtb3ZlZDoKKyAgICAgICAgICAgIHNldFNlYXJjaGluZ0Zvck5vZGUKKyAgICAgICAgICAg
IGhpZ2hsaWdodERPTU5vZGUKKyAgICAgICAgICAgIGhpZGVET01Ob2RlSGlnaGxpZ2h0CisgICAg
ICAgICAgICBoaWdobGlnaHRGcmFtZQorICAgICAgICAgICAgaGlkZUZyYW1lSGlnaGxpZ2h0Cisg
ICAgICAgICAgICBtb3VzZURpZE1vdmVPdmVyRWxlbWVudAorICAgICAgICAgICAgaGFuZGxlTW91
c2VQcmVzcworCisgICAgICAgIFRoZSBjb2RlIHdoaWNoIGRvZXMgcmVhbCBoaWdobGlnaHQgaW4g
R3JhcGhpYyBjb250ZXh0IHdhcyBtb3ZlZCB0byBuZXcgZmlsZXMgRE9NTm9kZUhpZ2hsaWdodGVy
LioKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0RPTU5vZGVIaWdo
bGlnaHRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NTm9kZUhpZ2hsaWdodGVy
OjpEcmF3Tm9kZUhpZ2hsaWdodCk6CisgICAgICAgICogaW5zcGVjdG9yL0RPTU5vZGVIaWdobGln
aHRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckFnZW50OjpJbnNwZWN0b3JBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6fkluc3BlY3RvckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFn
ZW50OjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50OjpkaXNjb25uZWN0RnJvbnRlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRyYXdOb2RlSGlnaGxpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmhpZGVIaWdobGlnaHQp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Y2xlYXJGcm9udGVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlTW91c2VQcmVzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNlYXJjaGluZ0Zvck5vZGVJblBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RE9NTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRyYXdOb2RlSGlnaGxpZ2h0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpoaWRlRE9NTm9kZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6aGlkZUZyYW1lSGlnaGxpZ2h0KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxlTW91c2VQcmVz
c0ltcGwpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnN0cnVtZW50aW5nQWdlbnRzOjpJbnN0cnVtZW50aW5nQWdlbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRpbmdBZ2VudHM6Omluc3BlY3RvckFnZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRpbmdBZ2VudHM6OnNldEluc3BlY3RvckFnZW50
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUuc2V0U2VhcmNoaW5nRm9y
Tm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnNlbGVj
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuc2V0
IGhvdmVyZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLmhpZ2hsaWdodERPTU5vZGUpOgorCiAyMDExLTAzLTIzICBN
YXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSAzMi1iaXQgYnVp
bGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDAzM2VmMzhhOGY2MmNmNWYyNjc1MGM3N2I3Mjc2
NDA3MmZlMDQ1MGMuLjY3NzhlNTZlODdhZDc0YWVkOWJlZGFjMDM1YTAzZWM5NGE0MjM5MjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xOTc4LDYgKzE5NzgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL2ljdS91bmljb2RlL3V2ZXJzaW9uLmggXAogCVNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9N
Tm9kZUhpZ2hsaWdodGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVI
aWdobGlnaHRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCBcCiAJU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDNlZWQzZWE4MGNlZTQ4MWZiODk2ZmMxOWQ0MDllOThkMjFhYTgyNWUuLjVkMTA3
ZWIyNDI0NTY1NmE0YTg5ZTM4MDgwN2Y1OTNkMmYwMTFlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTMxNjksNiArMzE2OSw4IEBACiAgICAgICAgICAgICAnaWN1L3VuaWNvZGUvdXZlcnNpb24uaCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCcsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9E
T01Ob2RlSGlnaGxpZ2h0ZXIuY3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvRE9NTm9kZUhp
Z2hsaWdodGVyLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDI3
ZjAxNmI2MzE0MDBhZDFmNTllNzBiNWNiNTk2NTQ2ZjY2MzU2YjcuLjJhOTM0MDdiN2UzNmI3MTAy
ZjkyNThkYjllNmY4YzQ3MTdhM2ZkMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03OTgsNiArNzk4LDcg
QEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBc
CiAgICAgaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBcCiAgICAgaW5z
cGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBcCisgICAgaW5zcGVjdG9yL0RPTU5vZGVIaWdobGln
aHRlci5jcHAgXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgXAogICAgIGluc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLmNwcCBcCkBAIC0xNzIwLDYgKzE3MjEsNyBAQCBIRUFERVJTICs9IFwKICAgICBo
dG1sL3BhcnNlci9IVE1MVmlld1NvdXJjZVBhcnNlci5oIFwKICAgICBodG1sL3BhcnNlci9YU1NG
aWx0ZXIuaCBcCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggXAorICAgIGluc3BlY3Rv
ci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmgg
XAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaCBcCiAgICAgaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKaW5kZXggYjBmNjY1NTdmNzA4ZDI2YjZjN2M2MDY3YWEyMTU0ZTExZjQy
MzBiMC4uYmM3N2E5M2Y3MDZjM2VhMjM1ZTgzOTAzNWFhZjI5YjY0MjBkYTFhMiAxMDA3NTUKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTY2MTQyLDYgKzY2
MTQyLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGluc3BlY3RvclxET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcRE9NTm9kZUhpZ2hsaWdo
dGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbmplY3RlZFNjcmlwdC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJh
M2FjYjU3Zjg4NTJkZDU4ZGE5YWQzOWRhMzc3ZTk0MGEyYzFkM2IuLjZkMWJjZWJmZmQ3YTdlMjZm
MzE0OWE4NjRlZThhMTYzNTRhN2MzYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyMzIsNiArMTIzMiw4IEBACiAJCTRFMTk1
OTJDMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXZhbHVhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyNjBBMzlEQUNDMDAyMjBG
RTUgLyogTWVkaWFRdWVyeUV2YWx1YXRvci5oICovOyB9OwogCQk0RTE5NTkyRDBBMzlEQUNDMDAy
MjBGRTUgLyogTWVkaWFRdWVyeUV4cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyNzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4
cC5jcHAgKi87IH07CiAJCTRFMTk1OTJFMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhw
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTky
ODBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5oICovOyB9OworCQk0RjE0NDIyODEz
MzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMTQ0MjI2MTMzOUZENjIwMEUwRDZGOCAv
KiBET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwICovOyB9OworCQk0RjE0NDIyOTEzMzlGRDYyMDBFMEQ2
RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0RjE0NDIyNzEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hs
aWdodGVyLmggKi87IH07CiAJCTRGMTUzNERFMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVo
YXZpb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRG
MTUzNEREMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0RjE1MzRFMDExQjUzMzAyMDAy
MUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMTUzNERGMTFCNTMzMDIwMDIxRkQ4NiAvKiBFZGl0aW5n
QmVoYXZpb3JUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTRGMkQyMDU0MTJFQUU3QjMwMDVDMjg3NCAvKiBJbnNwZWN0b3JBZ2VudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYyRDIwNTIxMkVB
RTdCMzAwNUMyODc0IC8qIEluc3BlY3RvckFnZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc3MjQsNiArNzcyNiw4IEBACiAJCTRFMTk1OTI2
MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXZhbHVhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5RXZhbHVhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTRFMTk1OTI3MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhw
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVF1ZXJ5RXhw
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjgwQTM5REFDQzAwMjIw
RkU1IC8qIE1lZGlhUXVlcnlFeHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1lZGlhUXVlcnlFeHAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEYxNDQyMjYx
MzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVIaWdobGlnaHRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0RjE0NDIyNzEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhp
Z2hsaWdodGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTU5vZGVIaWdo
bGlnaHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RjE1MzRERDExQjUzMkVD
MDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEVkaXRpbmdCZWhhdmlvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
RjE1MzRERjExQjUzMzAyMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ0JlaGF2aW9yVHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEYyRDIwNTIxMkVBRTdCMzAwNUMyODc0IC8qIEluc3Bl
Y3RvckFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckFn
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzA5Myw2ICsxMzA5Nyw4IEBA
CiAJCQkJMUM4MUI5NTkwRTk3MzMwODAwMjY2RTA3IC8qIGZyb250LWVuZCAqLywKIAkJCQk0MUYw
NjE4RDBGNUYwNjk4MDBBMDdFQUMgLyogQ29uc29sZU1lc3NhZ2UuY3BwICovLAogCQkJCTQxRjA2
MThDMEY1RjA2OTgwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5oICovLAorCQkJCTRGMTQ0MjI2
MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwICovLAorCQkJCTRGMTQ0
MjI3MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIuaCAqLywKIAkJCQlGMzY0
NEFGRDExMTk4MDU5MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQuY3BwICovLAogCQkJCUYzNjQ0
QUZFMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5oICovLAogCQkJCTdBMEU3NkY2
MTBCRjA4RUQwMEEwMjc2RSAvKiBJbmplY3RlZFNjcmlwdEhvc3QuY3BwICovLApAQCAtMjI2ODcs
NiArMjI2OTMsNyBAQAogCQkJCTMxOUU2OUIzMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmlt
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOUU2OUI2MTMyOTlCQkQwMDRBQzkxQSAvKiBX
ZWJLaXRBbmltYXRpb25MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3MkUxMzEzMzE2MjBD
MDAxRUM5Q0UgLyogQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NEYxNDQyMjkxMzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVIaWdobGlnaHRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0yNTM1Niw2ICsyNTM2Myw3IEBACiAJCQkJMzE5RTY5QjUxMzI5OUJCRDAwNEFD
OTFBIC8qIFdlYktpdEFuaW1hdGlvbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3NzJF
MTYxMzMxNjJDMjAwMUVDOUNFIC8qIENTU0xpbmVCb3hDb250YWluVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0UzN0VGMkUxMzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVy
Q0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEYxNDQyMjgxMzM5RkQ2MjAwRTBENkY4IC8qIERP
TU5vZGVIaWdobGlnaHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjcyZjRiNGQzYmMx
ZGQxNjE1M2ZkZjg0NWQxMjFjMDc5ZTM1MzM4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCkBAIC0wLDAgKzEsMjk3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUg
IlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVk
RWxlbWVudC5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgeworCitQYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQor
eworICAgIFBhdGggcXVhZFBhdGg7CisgICAgcXVhZFBhdGgubW92ZVRvKHF1YWQucDEoKSk7Cisg
ICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDIoKSk7CisgICAgcXVhZFBhdGguYWRkTGluZVRv
KHF1YWQucDMoKSk7CisgICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDQoKSk7CisgICAgcXVh
ZFBhdGguY2xvc2VTdWJwYXRoKCk7CisgICAgcmV0dXJuIHF1YWRQYXRoOworfQorCit2b2lkIGRy
YXdPdXRsaW5lZFF1YWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQm
IHF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBv
dXRsaW5lVGhpY2tuZXNzID0gMjsKKyAgICBzdGF0aWMgY29uc3QgQ29sb3Igb3V0bGluZUNvbG9y
KDYyLCA4NiwgMTgwLCAyMjgpOworCisgICAgUGF0aCBxdWFkUGF0aCA9IHF1YWRUb1BhdGgocXVh
ZCk7CisKKyAgICAvLyBDbGlwIG91dCB0aGUgcXVhZCwgdGhlbiBkcmF3IHdpdGggYSAycHggc3Ry
b2tlIHRvIGdldCBhIHBpeGVsCisgICAgLy8gb2Ygb3V0bGluZSAoYmVjYXVzZSBpbmZsYXRpbmcg
YSBxdWFkIGlzIGhhcmQpCisgICAgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAgICAg
Y29udGV4dC5jbGlwT3V0KHF1YWRQYXRoKTsKKworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcyhvdXRsaW5lVGhpY2tuZXNzKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xv
cihvdXRsaW5lQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjb250ZXh0LnN0
cm9rZVBhdGgocXVhZFBhdGgpOworCisgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIH0K
KworICAgIC8vIE5vdyBkbyB0aGUgZmlsbAorICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxD
b2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5maWxsUGF0aChxdWFkUGF0
aCk7Cit9CisKK3ZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBGbG9hdFF1YWQmIGNsaXBRdWFk
LCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQoreworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIFBh
dGggY2xpcFF1YWRQYXRoID0gcXVhZFRvUGF0aChjbGlwUXVhZCk7CisgICAgY29udGV4dC5jbGlw
T3V0KGNsaXBRdWFkUGF0aCk7CisgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBxdWFkLCBm
aWxsQ29sb3IpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit2b2lkIGRyYXdIaWdobGln
aHRGb3JCb3goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIGNvbnRl
bnRRdWFkLCBjb25zdCBGbG9hdFF1YWQmIHBhZGRpbmdRdWFkLCBjb25zdCBGbG9hdFF1YWQmIGJv
cmRlclF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgbWFyZ2luUXVhZCkKK3sKKyAgICBzdGF0aWMgY29u
c3QgQ29sb3IgY29udGVudEJveENvbG9yKDEyNSwgMTczLCAyMTcsIDEyOCk7CisgICAgc3RhdGlj
IGNvbnN0IENvbG9yIHBhZGRpbmdCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxNjApOworICAgIHN0
YXRpYyBjb25zdCBDb2xvciBib3JkZXJCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxOTIpOworICAg
IHN0YXRpYyBjb25zdCBDb2xvciBtYXJnaW5Cb3hDb2xvcigxMjUsIDE3MywgMjE3LCAyMjgpOwor
CisgICAgaWYgKG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkKKyAgICAgICAgZHJhd091dGxpbmVk
UXVhZFdpdGhDbGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIG1hcmdpbkJveENv
bG9yKTsKKyAgICBpZiAoYm9yZGVyUXVhZCAhPSBwYWRkaW5nUXVhZCkKKyAgICAgICAgZHJhd091
dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIGJvcmRlclF1YWQsIHBhZGRpbmdRdWFkLCBib3Jk
ZXJCb3hDb2xvcik7CisgICAgaWYgKHBhZGRpbmdRdWFkICE9IGNvbnRlbnRRdWFkKQorICAgICAg
ICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgcGFkZGluZ1F1YWQsIGNvbnRlbnRR
dWFkLCBwYWRkaW5nQm94Q29sb3IpOworCisgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBj
b250ZW50UXVhZCwgY29udGVudEJveENvbG9yKTsKK30KKwordm9pZCBkcmF3SGlnaGxpZ2h0Rm9y
TGluZUJveGVzT3JTVkdSZW5kZXJlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZl
Y3RvcjxGbG9hdFF1YWQ+JiBsaW5lQm94UXVhZHMpCit7CisgICAgc3RhdGljIGNvbnN0IENvbG9y
IGxpbmVCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxMjgpOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsaW5lQm94UXVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGRyYXdPdXRsaW5lZFF1
YWQoY29udGV4dCwgbGluZUJveFF1YWRzW2ldLCBsaW5lQm94Q29sb3IpOworfQorCitpbmxpbmUg
dm9pZCBjb252ZXJ0RnJvbUZyYW1lVG9NYWluRnJhbWUoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIHJlY3QgPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT53
aW5kb3dUb0NvbnRlbnRzKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCkpOwor
fQorCitpbmxpbmUgSW50U2l6ZSBmcmFtZVRvTWFpbkZyYW1lT2Zmc2V0KEZyYW1lKiBmcmFtZSkK
K3sKKyAgICBJbnRQb2ludCBtYWluRnJhbWVQb2ludCA9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dp
bmRvdyhJbnRQb2ludCgpKSk7CisgICAgcmV0dXJuIG1haW5GcmFtZVBvaW50IC0gSW50UG9pbnQo
KTsKK30KKwordm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Tm9kZSogbm9kZSwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3QmIGFu
Y2hvckJveCwgY29uc3QgRmxvYXRSZWN0JiBvdmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3Mq
IHNldHRpbmdzKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7Cisg
ICAgc3RhdGljIGNvbnN0IGludCBmb250SGVpZ2h0UHggPSAxMjsKKyAgICBzdGF0aWMgY29uc3Qg
aW50IGJvcmRlcldpZHRoUHggPSAxOworICAgIHN0YXRpYyBjb25zdCBDb2xvciB0b29sdGlwQmFj
a2dyb3VuZENvbG9yKDI1NSwgMjU1LCAxOTQsIDI1NSk7CisgICAgc3RhdGljIGNvbnN0IENvbG9y
IHRvb2x0aXBCb3JkZXJDb2xvcihDb2xvcjo6YmxhY2spOworICAgIHN0YXRpYyBjb25zdCBDb2xv
ciB0b29sdGlwRm9udENvbG9yKENvbG9yOjpibGFjayk7CisKKyAgICBFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1l
bnQtPmRvY3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpOworICAgIFN0cmluZyBub2RlVGl0bGUg
PSBpc1hIVE1MID8gZWxlbWVudC0+bm9kZU5hbWUoKSA6IGVsZW1lbnQtPm5vZGVOYW1lKCkubG93
ZXIoKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkVmFsdWUgPSBlbGVtZW50LT5nZXRJZEF0
dHJpYnV0ZSgpOworICAgIGlmICghaWRWYWx1ZS5pc051bGwoKSAmJiAhaWRWYWx1ZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgbm9kZVRpdGxlICs9ICIjIjsKKyAgICAgICAgbm9kZVRpdGxlICs9IGlk
VmFsdWU7CisgICAgfQorICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICYmIGVsZW1lbnQtPmlz
U3R5bGVkRWxlbWVudCgpKSB7CisgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNz
TmFtZXNTdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNz
TmFtZXMoKTsKKyAgICAgICAgc2l6ZV90IGNsYXNzTmFtZUNvdW50ID0gY2xhc3NOYW1lc1N0cmlu
Zy5zaXplKCk7CisgICAgICAgIGlmIChjbGFzc05hbWVDb3VudCkgeworICAgICAgICAgICAgSGFz
aFNldDxBdG9taWNTdHJpbmc+IHVzZWRDbGFzc05hbWVzOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjbGFzc05hbWVDb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUgPSBjbGFzc05hbWVzU3RyaW5nW2ldOworICAgICAg
ICAgICAgICAgIGlmICh1c2VkQ2xhc3NOYW1lcy5jb250YWlucyhjbGFzc05hbWUpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB1c2VkQ2xhc3NOYW1lcy5h
ZGQoY2xhc3NOYW1lKTsKKyAgICAgICAgICAgICAgICBub2RlVGl0bGUgKz0gIi4iOworICAgICAg
ICAgICAgICAgIG5vZGVUaXRsZSArPSBjbGFzc05hbWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBub2RlVGl0bGUgKz0gIiBbIjsKKyAgICBub2RlVGl0bGUgKz0gU3Ry
aW5nOjpudW1iZXIoYm91bmRpbmdCb3gud2lkdGgoKSk7CisgICAgbm9kZVRpdGxlLmFwcGVuZChz
dGF0aWNfY2FzdDxVQ2hhcj4oMHgwMEQ3KSk7IC8vICZ0aW1lczsKKyAgICBub2RlVGl0bGUgKz0g
U3RyaW5nOjpudW1iZXIoYm91bmRpbmdCb3guaGVpZ2h0KCkpOworICAgIG5vZGVUaXRsZSArPSAi
XSI7CisKKyAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKKyAgICBGb250RmFtaWx5IGZhbWlseTsK
KyAgICBmYW1pbHkuc2V0RmFtaWx5KHNldHRpbmdzLT5maXhlZEZvbnRGYW1pbHkoKSk7CisgICAg
ZGVzYy5zZXRGYW1pbHkoZmFtaWx5KTsKKyAgICBkZXNjLnNldENvbXB1dGVkU2l6ZShmb250SGVp
Z2h0UHgpOworICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7CisgICAgZm9udC51cGRh
dGUoMCk7CisKKyAgICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2RlVGl0bGUpOworICAgIEludFBv
aW50IHRpdGxlQmFzZVBvaW50ID0gSW50UG9pbnQoYW5jaG9yQm94LngoKSwgYW5jaG9yQm94Lm1h
eFkoKSAtIDEpOworICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdElu
ZmxhdGVQeCk7CisgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQu
c2VsZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhl
aWdodFB4KSk7CisgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CisKKyAgICAv
LyBUaGUgaW5pdGlhbCBvZmZzZXRzIG5lZWRlZCB0byBjb21wZW5zYXRlIGZvciBhIDFweC10aGlj
ayBib3JkZXIgc3Ryb2tlICh3aGljaCBpcyBub3QgYSBwYXJ0IG9mIHRoZSByZWN0YW5nbGUpLgor
ICAgIGludCBkeCA9IC1ib3JkZXJXaWR0aFB4OworICAgIGludCBkeSA9IGJvcmRlcldpZHRoUHg7
CisKKyAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHJpZ2h0IG9mIG92ZXJsYXlS
ZWN0LCByaWdodC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCisgICAgaWYg
KHRpdGxlUmVjdC5tYXhYKCkgPiBvdmVybGF5UmVjdC5tYXhYKCkpCisgICAgICAgIGR4ID0gb3Zl
cmxheVJlY3QubWF4WCgpIC0gdGl0bGVSZWN0Lm1heFgoKTsKKworICAgIC8vIElmIHRoZSB0aXAg
c3RpY2tzIGJleW9uZCB0aGUgbGVmdCBvZiBvdmVybGF5UmVjdCwgbGVmdC1hbGlnbiB0aGUgdGlw
IHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCisgICAgaWYgKHRpdGxlUmVjdC54KCkgKyBkeCA8IG92
ZXJsYXlSZWN0LngoKSkKKyAgICAgICAgZHggPSBvdmVybGF5UmVjdC54KCkgLSB0aXRsZVJlY3Qu
eCgpIC0gYm9yZGVyV2lkdGhQeDsKKworICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0
aGUgYm90dG9tIG9mIG92ZXJsYXlSZWN0LCBzaG93IHRoZSB0aXAgYXQgdG9wIG9mIGJvdW5kaW5n
IGJveC4KKyAgICBpZiAodGl0bGVSZWN0Lm1heFkoKSA+IG92ZXJsYXlSZWN0Lm1heFkoKSkgewor
ICAgICAgICBkeSA9IGFuY2hvckJveC55KCkgLSB0aXRsZVJlY3QubWF4WSgpIC0gYm9yZGVyV2lk
dGhQeDsKKyAgICAgICAgLy8gSWYgdGhlIHRpcCBzdGlsbCBzdGlja3MgYmV5b25kIHRoZSBib3R0
b20gb2Ygb3ZlcmxheVJlY3QsIGJvdHRvbS1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91
bmRhcnkuCisgICAgICAgIGlmICh0aXRsZVJlY3QubWF4WSgpICsgZHkgPiBvdmVybGF5UmVjdC5t
YXhZKCkpCisgICAgICAgICAgICBkeSA9IG92ZXJsYXlSZWN0Lm1heFkoKSAtIHRpdGxlUmVjdC5t
YXhZKCk7CisgICAgfQorCisgICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSB0b3Ag
b2Ygb3ZlcmxheVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2Ygb3ZlcmxheVJlY3QuCisgICAg
aWYgKHRpdGxlUmVjdC55KCkgKyBkeSA8IG92ZXJsYXlSZWN0LnkoKSkKKyAgICAgICAgZHkgPSBv
dmVybGF5UmVjdC55KCkgLSB0aXRsZVJlY3QueSgpICsgYm9yZGVyV2lkdGhQeDsKKworICAgIHRp
dGxlUmVjdC5tb3ZlKGR4LCBkeSk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcih0b29sdGlw
Qm9yZGVyQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKGJvcmRlcldpZHRoUHgpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvb2x0
aXBCYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJh
d1JlY3QodGl0bGVSZWN0KTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b29sdGlwRm9udENv
bG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIG5v
ZGVUaXRsZVJ1biwgSW50UG9pbnQodGl0bGVSZWN0LngoKSArIHJlY3RJbmZsYXRlUHgsIHRpdGxl
UmVjdC55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpKTsKK30KKworfSAvLyB1bm5h
bWVkIG5hbWVzcGFjZQorCituYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyIHsKKwordm9pZCBE
cmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIE5vZGUqIG5vZGUpCit7
CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgRnJh
bWUqIGNvbnRhaW5pbmdGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisKKyAgICBp
ZiAoIXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IEludFNpemUgbWFpbkZyYW1lT2Zmc2V0ID0gZnJhbWVUb01haW5GcmFtZU9mZnNldChjb250YWlu
aW5nRnJhbWUpOworICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSByZW5kZXJlci0+YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QodHJ1ZSk7CisKKyAgICBib3VuZGluZ0JveC5tb3ZlKG1haW5GcmFtZU9m
ZnNldCk7CisKKyAgICBJbnRSZWN0IHRpdGxlQW5jaG9yQm94ID0gYm91bmRpbmdCb3g7CisKKyAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBjb250YWluaW5nRnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkt
PnZpZXcoKTsKKyAgICBGbG9hdFJlY3Qgb3ZlcmxheVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVu
dFJlY3QoKTsKKyAgICBpZiAoIW92ZXJsYXlSZWN0LmNvbnRhaW5zKGJvdW5kaW5nQm94KSAmJiAh
Ym91bmRpbmdCb3guY29udGFpbnMoZW5jbG9zaW5nSW50UmVjdChvdmVybGF5UmVjdCkpKQorICAg
ICAgICBvdmVybGF5UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIGNvbnRl
eHQudHJhbnNsYXRlKC1vdmVybGF5UmVjdC54KCksIC1vdmVybGF5UmVjdC55KCkpOworCisgICAg
Ly8gUmVuZGVyU1ZHUm9vdCBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgdGhyb3VnaCB0aGUgaXNCb3go
KSBjb2RlIHBhdGgsIGFsbCBvdGhlciBTVkcgZWxlbWVudHMgc2hvdWxkIGp1c3QgZHVtcCB0aGVp
ciBhYnNvbHV0ZVF1YWRzKCkuCisjaWYgRU5BQkxFKFNWRykKKyAgICBib29sIGlzU1ZHUmVuZGVy
ZXIgPSByZW5kZXJlci0+bm9kZSgpICYmIHJlbmRlcmVyLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgp
ICYmICFyZW5kZXJlci0+aXNTVkdSb290KCk7CisjZWxzZQorICAgIGJvb2wgaXNTVkdSZW5kZXJl
ciA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAocmVuZGVyZXItPmlzQm94KCkgJiYgIWlzU1ZH
UmVuZGVyZXIpIHsKKyAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChy
ZW5kZXJlcik7CisKKyAgICAgICAgSW50UmVjdCBjb250ZW50Qm94ID0gcmVuZGVyQm94LT5jb250
ZW50Qm94UmVjdCgpOworCisgICAgICAgIEludFJlY3QgcGFkZGluZ0JveChjb250ZW50Qm94Lngo
KSAtIHJlbmRlckJveC0+cGFkZGluZ0xlZnQoKSwgY29udGVudEJveC55KCkgLSByZW5kZXJCb3gt
PnBhZGRpbmdUb3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCb3gud2lk
dGgoKSArIHJlbmRlckJveC0+cGFkZGluZ0xlZnQoKSArIHJlbmRlckJveC0+cGFkZGluZ1JpZ2h0
KCksIGNvbnRlbnRCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdUb3AoKSArIHJlbmRl
ckJveC0+cGFkZGluZ0JvdHRvbSgpKTsKKyAgICAgICAgSW50UmVjdCBib3JkZXJCb3gocGFkZGlu
Z0JveC54KCkgLSByZW5kZXJCb3gtPmJvcmRlckxlZnQoKSwgcGFkZGluZ0JveC55KCkgLSByZW5k
ZXJCb3gtPmJvcmRlclRvcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm94
LndpZHRoKCkgKyByZW5kZXJCb3gtPmJvcmRlckxlZnQoKSArIHJlbmRlckJveC0+Ym9yZGVyUmln
aHQoKSwgcGFkZGluZ0JveC5oZWlnaHQoKSArIHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgKyByZW5k
ZXJCb3gtPmJvcmRlckJvdHRvbSgpKTsKKyAgICAgICAgSW50UmVjdCBtYXJnaW5Cb3goYm9yZGVy
Qm94LngoKSAtIHJlbmRlckJveC0+bWFyZ2luTGVmdCgpLCBib3JkZXJCb3gueSgpIC0gcmVuZGVy
Qm94LT5tYXJnaW5Ub3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm94Lndp
ZHRoKCkgKyByZW5kZXJCb3gtPm1hcmdpbkxlZnQoKSArIHJlbmRlckJveC0+bWFyZ2luUmlnaHQo
KSwgYm9yZGVyQm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5tYXJnaW5Ub3AoKSArIHJlbmRlckJv
eC0+bWFyZ2luQm90dG9tKCkpOworCisKKyAgICAgICAgRmxvYXRRdWFkIGFic0NvbnRlbnRRdWFk
ID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjb250ZW50Qm94KSk7
CisgICAgICAgIEZsb2F0UXVhZCBhYnNQYWRkaW5nUXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3QocGFkZGluZ0JveCkpOworICAgICAgICBGbG9hdFF1YWQgYWJz
Qm9yZGVyUXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm9y
ZGVyQm94KSk7CisgICAgICAgIEZsb2F0UXVhZCBhYnNNYXJnaW5RdWFkID0gcmVuZGVyQm94LT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJnaW5Cb3gpKTsKKworICAgICAgICBhYnND
b250ZW50UXVhZC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7CisgICAgICAgIGFic1BhZGRpbmdRdWFk
Lm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKKyAgICAgICAgYWJzQm9yZGVyUXVhZC5tb3ZlKG1haW5G
cmFtZU9mZnNldCk7CisgICAgICAgIGFic01hcmdpblF1YWQubW92ZShtYWluRnJhbWVPZmZzZXQp
OworCisgICAgICAgIHRpdGxlQW5jaG9yQm94ID0gYWJzTWFyZ2luUXVhZC5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOworCisgICAgICAgIGRyYXdIaWdobGlnaHRGb3JCb3goY29udGV4dCwgYWJzQ29u
dGVudFF1YWQsIGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJRdWFkLCBhYnNNYXJnaW5RdWFkKTsK
KyAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1JlbmRlcklubGluZSgpIHx8IGlzU1ZHUmVuZGVy
ZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzaG93IG1hcmdpbnMvcGFkZGluZy9i
b3JkZXIgZm9yIGlubGluZXMuCisgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGxpbmVCb3hRdWFk
czsKKyAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMobGluZUJveFF1YWRzKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbmVCb3hRdWFkcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIGxpbmVCb3hRdWFkc1tpXSArPSBtYWluRnJhbWVPZmZzZXQ7CisKKyAgICAgICAg
ZHJhd0hpZ2hsaWdodEZvckxpbmVCb3hlc09yU1ZHUmVuZGVyZXIoY29udGV4dCwgbGluZUJveFF1
YWRzKTsKKyAgICB9CisKKyAgICAvLyBEcmF3IG5vZGUgdGl0bGUgaWYgbmVjZXNzYXJ5LgorCisg
ICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdl
YkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncyA9IGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKTsK
KyAgICBkcmF3RWxlbWVudFRpdGxlKGNvbnRleHQsIG5vZGUsIGJvdW5kaW5nQm94LCB0aXRsZUFu
Y2hvckJveCwgb3ZlcmxheVJlY3QsIHNldHRpbmdzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgRE9N
Tm9kZUhpZ2hsaWdodGVyCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9N
Tm9kZUhpZ2hsaWdodGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hs
aWdodGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjIyZDBjZjU2Yjg3N2I0MWViODZkYjFjNDk4OWQzMjdjY2Fl
YzIwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2Rl
SGlnaGxpZ2h0ZXIuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBET01Ob2RlSGlnaGxpZ2h0
ZXJfaAorI2RlZmluZSBET01Ob2RlSGlnaGxpZ2h0ZXJfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIE5vZGU7CisKK25hbWVzcGFjZSBET01O
b2RlSGlnaGxpZ2h0ZXIgeworCit2b2lkIERyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4
dCYsIE5vZGUqKTsKKworfSAvLyBuYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUgCisKKworI2VuZGlmIC8vIERPTU5vZGVIaWdobGlnaHRlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KaW5kZXggYWNlZTU3ZjQ4NWMzM2Yw
NGQwYjU4ODllMTI3Mzg4ZDNmYmEwNTg4Zi4uNTJkNTU4YjVhZmZmZDc0NThjZGNiYzk2YzhmYjlm
ODE5MzQ0Zjk0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgpAQCAt
MjUsMTUgKzI1LDYgQEAKICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9LAogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICJuYW1lIjogInNldFNlYXJjaGluZ0Zvck5vZGUiLAot
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImVuYWJsZWQiLCAidHlwZSI6ICJib29sZWFuIiB9Ci0gICAgICAgICAgICAgICAgXSwK
LSAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJuZXdTdGF0ZSIsICJ0eXBlIjogImJvb2xlYW4iIH0KLSAgICAgICAgICAgICAgICBdCi0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICJuYW1lIjogImRp
ZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQiLAogICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWwogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRlc3RDYWxsSWQiLCAidHlwZSI6
ICJpbnRlZ2VyIiB9LApAQCAtNDEsMjQgKzMyLDYgQEAKICAgICAgICAgICAgICAgICBdCiAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICJuYW1lIjogImhpZ2hs
aWdodERPTU5vZGUiLAotICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVJZCIsICJ0eXBlIjogImludGVnZXIiIH0KLSAgICAg
ICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICJuYW1lIjogImhpZGVET01Ob2RlSGlnaGxpZ2h0IgotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAibmFtZSI6ICJoaWdobGlnaHRGcmFtZSIsCi0gICAg
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZnJhbWVJZCIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgICAgIF0KLSAgICAg
ICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIm5hbWUiOiAiaGlkZUZy
YW1lSGlnaGxpZ2h0IgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAibmFtZSI6ICJzZXRVc2VyQWdlbnRPdmVycmlkZSIsCiAgICAgICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidXNlckFnZW50Iiwg
InR5cGUiOiAic3RyaW5nIiB9CkBAIC03MDAsNiArNjczLDM0IEBACiAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlJlcXVlc3RzIHRoYXQgdGhlIG5vZGUgaXMgc2VudCB0byB0aGUgY2Fs
bGVyIGdpdmVuIHRoZSBKYXZhU2NyaXB0IG5vZGUgb2JqZWN0IHJlZmVyZW5jZS4iCiAgICAgICAg
ICAgICB9LAogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogInNldFNlYXJj
aGluZ0Zvck5vZGUiLAorICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImVuYWJsZWQiLCAidHlwZSI6ICJib29sZWFuIiB9CisgICAg
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJuZXdTdGF0ZSIsICJ0eXBlIjogImJvb2xlYW4iIH0KKyAgICAg
ICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICJuYW1lIjogImhpZ2hsaWdodERPTU5vZGUiLAorICAgICAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVJZCIsICJ0eXBlIjog
ImludGVnZXIiIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogImhpZGVET01Ob2RlSGlnaGxpZ2h0IgorICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJoaWdo
bGlnaHRGcmFtZSIsCisgICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWVJZCIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAg
ICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgIm5hbWUiOiAiaGlkZUZyYW1lSGlnaGxpZ2h0IgorICAgICAgICAgICAgfSwKKworICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICJuYW1lIjogInB1c2hOb2RlQnlQYXRoVG9Gcm9udGVu
ZCIsCiAgICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGF0aCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJQYXRo
IHRvIG5vZGUgaW4gdGhlIHByb3ByaWV0YXJ5IGZvcm1hdC4iIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDY5ZDU0ZGZjYmM2MjlkMTM4ZTJjZDUx
MDZiZmUyY2NmYTRhNGYyMGIuLjgyYTkxZjJjZDNjNGE2MDBkNmExNWM0MzY0OGVlNTNjYTk1ODRm
YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcApAQCAt
MzIsMjkgKzMyLDEzIEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCi0jaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1
ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5o
IgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNs
dWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
LSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIK
LSNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgot
I2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0
LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCIKQEAgLTY1LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJJ
bnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291
cmNlQWdlbnQuaCIKQEAgLTc1LDM1ICs1OCwxNSBAQAogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVl
cy5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlclJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5z
dHJ1bWVudGluZ0FnZW50cy5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQYWdl
LmgiCi0jaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNp
bmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgi
Ci0jaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25D
YWxsLmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0UHJvZmls
ZS5oIgotI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNl
Q29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgot
I2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgogI2lu
Y2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0j
aW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFt
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAogI2lmIEVOQUJM
RShEQVRBQkFTRSkKICNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgiCkBAIC0xMjIs
NyArODUsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yQWdlbnRTdGF0ZSB7Ci1zdGF0aWMgY29uc3QgY2hhciBzZWFyY2hp
bmdGb3JOb2RlW10gPSAic2VhcmNoaW5nRm9yTm9kZSI7CiBzdGF0aWMgY29uc3QgY2hhciB0aW1l
bGluZVByb2ZpbGVyRW5hYmxlZFtdID0gInRpbWVsaW5lUHJvZmlsZXJFbmFibGVkIjsKIHN0YXRp
YyBjb25zdCBjaGFyIGRlYnVnZ2VyRW5hYmxlZFtdID0gImRlYnVnZ2VyRW5hYmxlZCI7CiB9CkBA
IC0xNjIsNiArMTI0LDcgQEAgSW5zcGVjdG9yQWdlbnQ6Okluc3BlY3RvckFnZW50KFBhZ2UqIHBh
Z2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50LCBJbmplY3RlZFNjcmkKICAgICBBU1NFUlRfQVJH
KHBhZ2UsIHBhZ2UpOwogICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOwogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6YmluZEluc3BlY3RvckFnZW50KG1faW5zcGVjdGVkUGFnZSwg
dGhpcyk7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JBZ2VudCh0aGlz
KTsKIAogICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+
aW5pdCh0aGlzCiAgICAgICAgICwgbV9jb25zb2xlQWdlbnQuZ2V0KCkKQEAgLTE3OSw3ICsxNDIs
NiBAQCBJbnNwZWN0b3JBZ2VudDo6fkluc3BlY3RvckFnZW50KCkKICAgICAvLyBUaGVzZSBzaG91
bGQgaGF2ZSBiZWVuIGNsZWFyZWQgaW4gaW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpLgogICAgIEFT
U0VSVCghbV9jbGllbnQpOwogICAgIEFTU0VSVCghbV9pbnNwZWN0ZWRQYWdlKTsKLSAgICBBU1NF
UlQoIW1faGlnaGxpZ2h0ZWROb2RlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVj
dGVkUGFnZURlc3Ryb3llZCgpCkBAIC0xODksOSArMTUxLDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpCiAgICAgICAgIGRpc2Nvbm5lY3RGcm9udGVuZCgp
OwogICAgIH0KIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIGhpZGVIaWdobGlnaHQoJmVy
cm9yKTsKLQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIG1fYnJvd3NlckRl
YnVnZ2VyQWdlbnQuY2xlYXIoKTsKICAgICBtX2RlYnVnZ2VyQWdlbnQuY2xlYXIoKTsKQEAgLTIw
OCwxMSArMTY3LDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdGVkUGFnZURlc3Ryb3ll
ZCgpCiAgICAgbV9jbGllbnQgPSAwOwogfQogCi1ib29sIEluc3BlY3RvckFnZW50OjpzZWFyY2hp
bmdGb3JOb2RlSW5QYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0ZS0+Z2V0Qm9vbGVh
bihJbnNwZWN0b3JBZ2VudFN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlKTsKLX0KLQogdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcm
IGluc3BlY3RvclN0YXRlQ29va2llKQogewogICAgIG1fc3RhdGUtPmxvYWRGcm9tQ29va2llKGlu
c3BlY3RvclN0YXRlQ29va2llKTsKQEAgLTI2Nyw2NCArMjIxLDYgQEAgdm9pZCBJbnNwZWN0b3JB
Z2VudDo6Zm9jdXNOb2RlKCkKICAgICBpbmplY3RlZFNjcmlwdC5pbnNwZWN0Tm9kZShub2RlLmdl
dCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6aGlnaGxpZ2h0KEVycm9yU3RyaW5nKiwg
Tm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IEFTU0VSVF9BUkcobm9kZSwgbm9kZSk7Ci0gICAgbV9oaWdobGlnaHRlZE5vZGUgPSBub2RlOwot
ICAgIG1fY2xpZW50LT5oaWdobGlnaHQobm9kZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQWdlbnQ6
OmhpZ2hsaWdodERPTU5vZGUoRXJyb3JTdHJpbmcqIGVycm9yLCBpbnQgbm9kZUlkKQotewotICAg
IE5vZGUqIG5vZGUgPSAwOwotICAgIGlmIChtX2RvbUFnZW50ICYmIChub2RlID0gbV9kb21BZ2Vu
dC0+bm9kZUZvcklkKG5vZGVJZCkpKQotICAgICAgICBoaWdobGlnaHQoZXJyb3IsIG5vZGUpOwot
fQotCi12b2lkIEluc3BlY3RvckFnZW50OjpoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyogZXJy
b3IsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBtX3Jlc291
cmNlQWdlbnQtPmZyYW1lRm9ySWQoZnJhbWVJZCk7Ci0gICAgaWYgKGZyYW1lICYmIGZyYW1lLT5v
d25lckVsZW1lbnQoKSkKLSAgICAgICAgaGlnaGxpZ2h0KGVycm9yLCBmcmFtZS0+b3duZXJFbGVt
ZW50KCkpOwotfQotCi12b2lkIEluc3BlY3RvckFnZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3Ry
aW5nKikKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faGln
aGxpZ2h0ZWROb2RlID0gMDsKLSAgICBtX2NsaWVudC0+aGlkZUhpZ2hsaWdodCgpOwotfQotCi12
b2lkIEluc3BlY3RvckFnZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkKQotewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFzZWFy
Y2hpbmdGb3JOb2RlSW5QYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIG5vZGUg
PSByZXN1bHQuaW5uZXJOb2RlKCk7Ci0gICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpURVhUX05PREUpCi0gICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7
Ci0gICAgaWYgKG5vZGUpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgICAgIGhp
Z2hsaWdodCgmZXJyb3IsIG5vZGUpOwotICAgIH0KLX0KLQotYm9vbCBJbnNwZWN0b3JBZ2VudDo6
aGFuZGxlTW91c2VQcmVzcygpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwgIXNlYXJjaGluZ0Zv
ck5vZGVJblBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1faGlnaGxp
Z2h0ZWROb2RlKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9oaWdobGlnaHRlZE5v
ZGU7Ci0gICAgICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOwotICAgICAgICBpbnNwZWN0
KG5vZGUuZ2V0KCkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBJbnNwZWN0
b3JBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3Jh
cHBlcldvcmxkKiB3b3JsZCkKIHsKICAgICBpZiAod29ybGQgIT0gbWFpblRocmVhZE5vcm1hbFdv
cmxkKCkpCkBAIC0zNDcsMjMgKzI0Myw2IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZENsZWFy
V2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCoKICAgICAg
ICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdFNjcmlwdChtX2luc3BlY3RvckV4dGVu
c2lvbkFQSSwgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JBZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKHNl
YXJjaGluZ0Zvck5vZGVJblBhZ2UoKSA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjpzZWFyY2hpbmdGb3JOb2Rl
LCBlbmFibGVkKTsKLSAgICBpZiAoIWVuYWJsZWQpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgZXJy
b3I7Ci0gICAgICAgIGhpZGVIaWdobGlnaHQoJmVycm9yKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBib29sIGVuYWJs
ZWQsIGJvb2wqIG5ld1N0YXRlKQotewotICAgICpuZXdTdGF0ZSA9IGVuYWJsZWQ7Ci0gICAgc2V0
U2VhcmNoaW5nRm9yTm9kZShlbmFibGVkKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0
RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqIGluc3BlY3RvckZyb250ZW5kKQogewogICAgIC8v
IFdlIGNhbiByZWNvbm5lY3QgdG8gZXhpc3RpbmcgZnJvbnQtZW5kIC0+IHVubXV0ZSBzdGF0ZS4K
QEAgLTQyMywxNSArMzAyLDEyIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Nvbm5lY3RGcm9u
dGVuZCgpCiAKICAgICBtX2Zyb250ZW5kID0gMDsKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIG1fZGVidWdnZXJBZ2VudC0+Y2xl
YXJGcm9udGVuZCgpOwogICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQtPmNsZWFyRnJvbnRlbmQo
KTsKICAgICBtX3Byb2ZpbGVyQWdlbnQtPmNsZWFyRnJvbnRlbmQoKTsKICNlbmRpZgotICAgIHNl
dFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOwogCi0gICAgaGlkZUhpZ2hsaWdodCgmZXJyb3IpOwog
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgbV9hcHBsaWNhdGlvbkNh
Y2hlQWdlbnQtPmNsZWFyRnJvbnRlbmQoKTsKICNlbmRpZgpAQCAtNjk4LDI0OSArNTc0LDYgQEAg
dm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChFcnJvclN0
cmluZyosIGxvbmcgY2FsbElkLCBjb24KICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKLXN0YXRp
YyBQYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQotewotICAgIFBhdGggcXVh
ZFBhdGg7Ci0gICAgcXVhZFBhdGgubW92ZVRvKHF1YWQucDEoKSk7Ci0gICAgcXVhZFBhdGguYWRk
TGluZVRvKHF1YWQucDIoKSk7Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDMoKSk7Ci0g
ICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDQoKSk7Ci0gICAgcXVhZFBhdGguY2xvc2VTdWJw
YXRoKCk7Ci0gICAgcmV0dXJuIHF1YWRQYXRoOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3T3V0bGlu
ZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBj
b25zdCBDb2xvciYgZmlsbENvbG9yKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQgb3V0bGluZVRo
aWNrbmVzcyA9IDI7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIG91dGxpbmVDb2xvcig2MiwgODYs
IDE4MCwgMjI4KTsKLQotICAgIFBhdGggcXVhZFBhdGggPSBxdWFkVG9QYXRoKHF1YWQpOwotCi0g
ICAgLy8gQ2xpcCBvdXQgdGhlIHF1YWQsIHRoZW4gZHJhdyB3aXRoIGEgMnB4IHN0cm9rZSB0byBn
ZXQgYSBwaXhlbAotICAgIC8vIG9mIG91dGxpbmUgKGJlY2F1c2UgaW5mbGF0aW5nIGEgcXVhZCBp
cyBoYXJkKQotICAgIHsKLSAgICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQu
Y2xpcE91dChxdWFkUGF0aCk7Ci0KLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mo
b3V0bGluZVRoaWNrbmVzcyk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3V0bGlu
ZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4dC5zdHJva2VQYXRo
KHF1YWRQYXRoKTsKLQotICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICAv
LyBOb3cgZG8gdGhlIGZpbGwKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQuZmlsbFBhdGgocXVhZFBhdGgpOwotfQot
Ci1zdGF0aWMgdm9pZCBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgY2xpcFF1YWQs
IGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCi17Ci0gICAgY29udGV4dC5zYXZlKCk7Ci0gICAgUGF0
aCBjbGlwUXVhZFBhdGggPSBxdWFkVG9QYXRoKGNsaXBRdWFkKTsKLSAgICBjb250ZXh0LmNsaXBP
dXQoY2xpcFF1YWRQYXRoKTsKLSAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIHF1YWQsIGZp
bGxDb2xvcik7Ci0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdI
aWdobGlnaHRGb3JCb3goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQm
IGNvbnRlbnRRdWFkLCBjb25zdCBGbG9hdFF1YWQmIHBhZGRpbmdRdWFkLCBjb25zdCBGbG9hdFF1
YWQmIGJvcmRlclF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgbWFyZ2luUXVhZCkKLXsKLSAgICBzdGF0
aWMgY29uc3QgQ29sb3IgY29udGVudEJveENvbG9yKDEyNSwgMTczLCAyMTcsIDEyOCk7Ci0gICAg
c3RhdGljIGNvbnN0IENvbG9yIHBhZGRpbmdCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxNjApOwot
ICAgIHN0YXRpYyBjb25zdCBDb2xvciBib3JkZXJCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxOTIp
OwotICAgIHN0YXRpYyBjb25zdCBDb2xvciBtYXJnaW5Cb3hDb2xvcigxMjUsIDE3MywgMjE3LCAy
MjgpOwotCi0gICAgaWYgKG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkKLSAgICAgICAgZHJhd091
dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIG1hcmdp
bkJveENvbG9yKTsKLSAgICBpZiAoYm9yZGVyUXVhZCAhPSBwYWRkaW5nUXVhZCkKLSAgICAgICAg
ZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIGJvcmRlclF1YWQsIHBhZGRpbmdRdWFk
LCBib3JkZXJCb3hDb2xvcik7Ci0gICAgaWYgKHBhZGRpbmdRdWFkICE9IGNvbnRlbnRRdWFkKQot
ICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgcGFkZGluZ1F1YWQsIGNv
bnRlbnRRdWFkLCBwYWRkaW5nQm94Q29sb3IpOwotCi0gICAgZHJhd091dGxpbmVkUXVhZChjb250
ZXh0LCBjb250ZW50UXVhZCwgY29udGVudEJveENvbG9yKTsKLX0KLQotc3RhdGljIHZvaWQgZHJh
d0hpZ2hsaWdodEZvckxpbmVCb3hlc09yU1ZHUmVuZGVyZXIoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgbGluZUJveFF1YWRzKQotewotICAgIHN0YXRp
YyBjb25zdCBDb2xvciBsaW5lQm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMTI4KTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGluZUJveFF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICBk
cmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIGxpbmVCb3hRdWFkc1tpXSwgbGluZUJveENvbG9yKTsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvbnZlcnRGcm9tRnJhbWVUb01haW5GcmFtZShGcmFt
ZSogZnJhbWUsIEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmVjdCA9IGZyYW1lLT5wYWdlKCktPm1h
aW5GcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZnJhbWUtPnZpZXcoKS0+Y29udGVu
dHNUb1dpbmRvdyhyZWN0KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBmcmFtZVRvTWFp
bkZyYW1lT2Zmc2V0KEZyYW1lKiBmcmFtZSkKLXsKLSAgICBJbnRQb2ludCBtYWluRnJhbWVQb2lu
dCA9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMo
ZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhJbnRQb2ludCgpKSk7Ci0gICAgcmV0dXJu
IG1haW5GcmFtZVBvaW50IC0gSW50UG9pbnQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JBZ2VudDo6
ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAg
IGlmICghbV9oaWdobGlnaHRlZE5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBtX2hpZ2hsaWdodGVkTm9kZS0+cmVuZGVyZXIoKTsKLSAgICBGcmFt
ZSogY29udGFpbmluZ0ZyYW1lID0gbV9oaWdobGlnaHRlZE5vZGUtPmRvY3VtZW50KCktPmZyYW1l
KCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhY29udGFpbmluZ0ZyYW1lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBJbnRTaXplIG1haW5GcmFtZU9mZnNldCA9IGZyYW1lVG9NYWluRnJhbWVPZmZz
ZXQoY29udGFpbmluZ0ZyYW1lKTsKLSAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gcmVuZGVyZXIt
PmFic29sdXRlQm91bmRpbmdCb3hSZWN0KHRydWUpOwotICAgIGJvdW5kaW5nQm94Lm1vdmUobWFp
bkZyYW1lT2Zmc2V0KTsKLQotICAgIEludFJlY3QgdGl0bGVBbmNob3JCb3ggPSBib3VuZGluZ0Jv
eDsKLQotICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwotCi0gICAgRnJhbWVWaWV3KiB2aWV3
ID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIEZsb2F0UmVjdCBv
dmVybGF5UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgIGlmICghb3Zlcmxh
eVJlY3QuY29udGFpbnMoYm91bmRpbmdCb3gpICYmICFib3VuZGluZ0JveC5jb250YWlucyhlbmNs
b3NpbmdJbnRSZWN0KG92ZXJsYXlSZWN0KSkpCi0gICAgICAgIG92ZXJsYXlSZWN0ID0gdmlldy0+
dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgY29udGV4dC50cmFuc2xhdGUoLW92ZXJsYXlSZWN0
LngoKSwgLW92ZXJsYXlSZWN0LnkoKSk7Ci0KLSAgICAvLyBSZW5kZXJTVkdSb290IHNob3VsZCBi
ZSBoaWdobGlnaHRlZCB0aHJvdWdoIHRoZSBpc0JveCgpIGNvZGUgcGF0aCwgYWxsIG90aGVyIFNW
RyBlbGVtZW50cyBzaG91bGQganVzdCBkdW1wIHRoZWlyIGFic29sdXRlUXVhZHMoKS4KLSNpZiBF
TkFCTEUoU1ZHKQotICAgIGJvb2wgaXNTVkdSZW5kZXJlciA9IHJlbmRlcmVyLT5ub2RlKCkgJiYg
cmVuZGVyZXItPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1Jvb3Qo
KTsKLSNlbHNlCi0gICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gZmFsc2U7Ci0jZW5kaWYKLQotICAg
IGlmIChyZW5kZXJlci0+aXNCb3goKSAmJiAhaXNTVkdSZW5kZXJlcikgewotICAgICAgICBSZW5k
ZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKLQotICAgICAgICBJbnRS
ZWN0IGNvbnRlbnRCb3ggPSByZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7Ci0KLSAgICAgICAg
SW50UmVjdCBwYWRkaW5nQm94KGNvbnRlbnRCb3gueCgpIC0gcmVuZGVyQm94LT5wYWRkaW5nTGVm
dCgpLCBjb250ZW50Qm94LnkoKSAtIHJlbmRlckJveC0+cGFkZGluZ1RvcCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGVudEJveC53aWR0aCgpICsgcmVuZGVyQm94LT5wYWRkaW5n
TGVmdCgpICsgcmVuZGVyQm94LT5wYWRkaW5nUmlnaHQoKSwgY29udGVudEJveC5oZWlnaHQoKSAr
IHJlbmRlckJveC0+cGFkZGluZ1RvcCgpICsgcmVuZGVyQm94LT5wYWRkaW5nQm90dG9tKCkpOwot
ICAgICAgICBJbnRSZWN0IGJvcmRlckJveChwYWRkaW5nQm94LngoKSAtIHJlbmRlckJveC0+Ym9y
ZGVyTGVmdCgpLCBwYWRkaW5nQm94LnkoKSAtIHJlbmRlckJveC0+Ym9yZGVyVG9wKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdCb3gud2lkdGgoKSArIHJlbmRlckJveC0+Ym9y
ZGVyTGVmdCgpICsgcmVuZGVyQm94LT5ib3JkZXJSaWdodCgpLCBwYWRkaW5nQm94LmhlaWdodCgp
ICsgcmVuZGVyQm94LT5ib3JkZXJUb3AoKSArIHJlbmRlckJveC0+Ym9yZGVyQm90dG9tKCkpOwot
ICAgICAgICBJbnRSZWN0IG1hcmdpbkJveChib3JkZXJCb3gueCgpIC0gcmVuZGVyQm94LT5tYXJn
aW5MZWZ0KCksIGJvcmRlckJveC55KCkgLSByZW5kZXJCb3gtPm1hcmdpblRvcCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lkdGgoKSArIHJlbmRlckJveC0+bWFyZ2lu
TGVmdCgpICsgcmVuZGVyQm94LT5tYXJnaW5SaWdodCgpLCBib3JkZXJCb3guaGVpZ2h0KCkgKyBy
ZW5kZXJCb3gtPm1hcmdpblRvcCgpICsgcmVuZGVyQm94LT5tYXJnaW5Cb3R0b20oKSk7Ci0KLQot
ICAgICAgICBGbG9hdFF1YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRSZWN0KGNvbnRlbnRCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic1Bh
ZGRpbmdRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChwYWRk
aW5nQm94KSk7Ci0gICAgICAgIEZsb2F0UXVhZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVyQm94LT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3JkZXJCb3gpKTsKLSAgICAgICAgRmxvYXRR
dWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRS
ZWN0KG1hcmdpbkJveCkpOwotCi0gICAgICAgIGFic0NvbnRlbnRRdWFkLm1vdmUobWFpbkZyYW1l
T2Zmc2V0KTsKLSAgICAgICAgYWJzUGFkZGluZ1F1YWQubW92ZShtYWluRnJhbWVPZmZzZXQpOwot
ICAgICAgICBhYnNCb3JkZXJRdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKLSAgICAgICAgYWJz
TWFyZ2luUXVhZC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7Ci0KLSAgICAgICAgdGl0bGVBbmNob3JC
b3ggPSBhYnNNYXJnaW5RdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0KLSAgICAgICAgZHJh
d0hpZ2hsaWdodEZvckJveChjb250ZXh0LCBhYnNDb250ZW50UXVhZCwgYWJzUGFkZGluZ1F1YWQs
IGFic0JvcmRlclF1YWQsIGFic01hcmdpblF1YWQpOwotICAgIH0gZWxzZSBpZiAocmVuZGVyZXIt
PmlzUmVuZGVySW5saW5lKCkgfHwgaXNTVkdSZW5kZXJlcikgewotICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHNob3cgbWFyZ2lucy9wYWRkaW5nL2JvcmRlciBmb3IgaW5saW5lcy4KLSAgICAg
ICAgVmVjdG9yPEZsb2F0UXVhZD4gbGluZUJveFF1YWRzOwotICAgICAgICByZW5kZXJlci0+YWJz
b2x1dGVRdWFkcyhsaW5lQm94UXVhZHMpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGluZUJveFF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbGluZUJveFF1YWRzW2ld
ICs9IG1haW5GcmFtZU9mZnNldDsKLQotICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yTGluZUJveGVz
T3JTVkdSZW5kZXJlcihjb250ZXh0LCBsaW5lQm94UXVhZHMpOwotICAgIH0KLQotICAgIC8vIERy
YXcgbm9kZSB0aXRsZSBpZiBuZWNlc3NhcnkuCi0KLSAgICBpZiAoIW1faGlnaGxpZ2h0ZWROb2Rl
LT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkNvcmU6OlNldHRp
bmdzKiBzZXR0aW5ncyA9IGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKTsKLSAgICBkcmF3RWxl
bWVudFRpdGxlKGNvbnRleHQsIGJvdW5kaW5nQm94LCB0aXRsZUFuY2hvckJveCwgb3ZlcmxheVJl
Y3QsIHNldHRpbmdzKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZHJhd0VsZW1lbnRUaXRs
ZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGJvdW5kaW5nQm94LCBj
b25zdCBJbnRSZWN0JiBhbmNob3JCb3gsIGNvbnN0IEZsb2F0UmVjdCYgb3ZlcmxheVJlY3QsIFdl
YkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50
IHJlY3RJbmZsYXRlUHggPSA0OwotICAgIHN0YXRpYyBjb25zdCBpbnQgZm9udEhlaWdodFB4ID0g
MTI7Ci0gICAgc3RhdGljIGNvbnN0IGludCBib3JkZXJXaWR0aFB4ID0gMTsKLSAgICBzdGF0aWMg
Y29uc3QgQ29sb3IgdG9vbHRpcEJhY2tncm91bmRDb2xvcigyNTUsIDI1NSwgMTk0LCAyNTUpOwot
ICAgIHN0YXRpYyBjb25zdCBDb2xvciB0b29sdGlwQm9yZGVyQ29sb3IoQ29sb3I6OmJsYWNrKTsK
LSAgICBzdGF0aWMgY29uc3QgQ29sb3IgdG9vbHRpcEZvbnRDb2xvcihDb2xvcjo6YmxhY2spOwot
Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX2hpZ2hsaWdo
dGVkTm9kZS5nZXQoKSk7Ci0gICAgYm9vbCBpc1hIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+
aXNYSFRNTERvY3VtZW50KCk7Ci0gICAgU3RyaW5nIG5vZGVUaXRsZSA9IGlzWEhUTUwgPyBlbGVt
ZW50LT5ub2RlTmFtZSgpIDogZWxlbWVudC0+bm9kZU5hbWUoKS5sb3dlcigpOwotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgaWRWYWx1ZSA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7Ci0gICAg
aWYgKCFpZFZhbHVlLmlzTnVsbCgpICYmICFpZFZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBu
b2RlVGl0bGUgKz0gIiMiOwotICAgICAgICBub2RlVGl0bGUgKz0gaWRWYWx1ZTsKLSAgICB9Ci0g
ICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkp
IHsKLSAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lc1N0cmluZyA9IHN0
YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpOwotICAgICAg
ICBzaXplX3QgY2xhc3NOYW1lQ291bnQgPSBjbGFzc05hbWVzU3RyaW5nLnNpemUoKTsKLSAgICAg
ICAgaWYgKGNsYXNzTmFtZUNvdW50KSB7Ci0gICAgICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Zz4gdXNlZENsYXNzTmFtZXM7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNs
YXNzTmFtZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNTdHJpbmdbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHVz
ZWRDbGFzc05hbWVzLmNvbnRhaW5zKGNsYXNzTmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIHVzZWRDbGFzc05hbWVzLmFkZChjbGFzc05hbWUpOwot
ICAgICAgICAgICAgICAgIG5vZGVUaXRsZSArPSAiLiI7Ci0gICAgICAgICAgICAgICAgbm9kZVRp
dGxlICs9IGNsYXNzTmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IG5vZGVUaXRsZSArPSAiIFsiOwotICAgIG5vZGVUaXRsZSArPSBTdHJpbmc6Om51bWJlcihib3Vu
ZGluZ0JveC53aWR0aCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFy
PigweDAwRDcpKTsgLy8gJnRpbWVzOwotICAgIG5vZGVUaXRsZSArPSBTdHJpbmc6Om51bWJlcihi
b3VuZGluZ0JveC5oZWlnaHQoKSk7Ci0gICAgbm9kZVRpdGxlICs9ICJdIjsKLQotICAgIEZvbnRE
ZXNjcmlwdGlvbiBkZXNjOwotICAgIEZvbnRGYW1pbHkgZmFtaWx5OwotICAgIGZhbWlseS5zZXRG
YW1pbHkoc2V0dGluZ3MtPmZpeGVkRm9udEZhbWlseSgpKTsKLSAgICBkZXNjLnNldEZhbWlseShm
YW1pbHkpOwotICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKGZvbnRIZWlnaHRQeCk7Ci0gICAgRm9u
dCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKLSAgICBmb250LnVwZGF0ZSgwKTsKLQotICAgIFRl
eHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZSk7Ci0gICAgSW50UG9pbnQgdGl0bGVCYXNlUG9p
bnQgPSBJbnRQb2ludChhbmNob3JCb3gueCgpLCBhbmNob3JCb3gubWF4WSgpIC0gMSk7Ci0gICAg
dGl0bGVCYXNlUG9pbnQubW92ZShyZWN0SW5mbGF0ZVB4LCByZWN0SW5mbGF0ZVB4KTsKLSAgICBJ
bnRSZWN0IHRpdGxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9y
VGV4dChub2RlVGl0bGVSdW4sIHRpdGxlQmFzZVBvaW50LCBmb250SGVpZ2h0UHgpKTsKLSAgICB0
aXRsZVJlY3QuaW5mbGF0ZShyZWN0SW5mbGF0ZVB4KTsKLQotICAgIC8vIFRoZSBpbml0aWFsIG9m
ZnNldHMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIGEgMXB4LXRoaWNrIGJvcmRlciBzdHJva2Ug
KHdoaWNoIGlzIG5vdCBhIHBhcnQgb2YgdGhlIHJlY3RhbmdsZSkuCi0gICAgaW50IGR4ID0gLWJv
cmRlcldpZHRoUHg7Ci0gICAgaW50IGR5ID0gYm9yZGVyV2lkdGhQeDsKLQotICAgIC8vIElmIHRo
ZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgcmlnaHQgb2Ygb3ZlcmxheVJlY3QsIHJpZ2h0LWFsaWdu
IHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICBpZiAodGl0bGVSZWN0Lm1heFgo
KSA+IG92ZXJsYXlSZWN0Lm1heFgoKSkKLSAgICAgICAgZHggPSBvdmVybGF5UmVjdC5tYXhYKCkg
LSB0aXRsZVJlY3QubWF4WCgpOwotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRo
ZSBsZWZ0IG9mIG92ZXJsYXlSZWN0LCBsZWZ0LWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBi
b3VuZGFyeS4KLSAgICBpZiAodGl0bGVSZWN0LngoKSArIGR4IDwgb3ZlcmxheVJlY3QueCgpKQot
ICAgICAgICBkeCA9IG92ZXJsYXlSZWN0LngoKSAtIHRpdGxlUmVjdC54KCkgLSBib3JkZXJXaWR0
aFB4OwotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSBib3R0b20gb2Ygb3Zl
cmxheVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2YgYm91bmRpbmcgYm94LgotICAgIGlmICh0
aXRsZVJlY3QubWF4WSgpID4gb3ZlcmxheVJlY3QubWF4WSgpKSB7Ci0gICAgICAgIGR5ID0gYW5j
aG9yQm94LnkoKSAtIHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwotICAgICAgICAv
LyBJZiB0aGUgdGlwIHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVj
dCwgYm90dG9tLWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAg
aWYgKHRpdGxlUmVjdC5tYXhZKCkgKyBkeSA+IG92ZXJsYXlSZWN0Lm1heFkoKSkKLSAgICAgICAg
ICAgIGR5ID0gb3ZlcmxheVJlY3QubWF4WSgpIC0gdGl0bGVSZWN0Lm1heFkoKTsKLSAgICB9Ci0K
LSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHRvcCBvZiBvdmVybGF5UmVjdCwg
c2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBvdmVybGF5UmVjdC4KLSAgICBpZiAodGl0bGVSZWN0Lnko
KSArIGR5IDwgb3ZlcmxheVJlY3QueSgpKQotICAgICAgICBkeSA9IG92ZXJsYXlSZWN0LnkoKSAt
IHRpdGxlUmVjdC55KCkgKyBib3JkZXJXaWR0aFB4OwotCi0gICAgdGl0bGVSZWN0Lm1vdmUoZHgs
IGR5KTsKLSAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHRvb2x0aXBCb3JkZXJDb2xvciwgQ29s
b3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVy
V2lkdGhQeCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG9vbHRpcEJhY2tncm91bmRDb2xv
ciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5kcmF3UmVjdCh0aXRsZVJlY3Qp
OwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvb2x0aXBGb250Q29sb3IsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOwotICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgbm9kZVRpdGxlUnVuLCBJbnRQ
b2ludCh0aXRsZVJlY3QueCgpICsgcmVjdEluZmxhdGVQeCwgdGl0bGVSZWN0LnkoKSArIGZvbnQu
Zm9udE1ldHJpY3MoKS5oZWlnaHQoKSkpOwotfQotCiB2b2lkIEluc3BlY3RvckFnZW50OjpvcGVu
SW5JbnNwZWN0ZWRXaW5kb3coRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAg
ICBGcmFtZSogbWFpbkZyYW1lID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKaW5kZXggOGEyMmNjNzVmYTE4MjU1
MmIzMTY3OTBmMWQ1MzllOTk1OGU4NDQ2NS4uNjJjOWU4MjljZGZkNWNlMWJmMmJhNTdiYmNiNWVk
MzRmZmFkZjg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgK
QEAgLTUwLDkgKzUwLDcgQEAgY2xhc3MgRE9NV3JhcHBlcldvcmxkOwogY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKIGNsYXNzIEhUVFBIZWFkZXJNYXA7Ci1jbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xh
c3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CiBjbGFzcyBJ
bnNwZWN0b3JBcnJheTsKQEAgLTExNywxNCArMTE1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBy
ZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yQ29v
a2llKTsKIAotICAgIHZvaWQgaGlnaGxpZ2h0KEVycm9yU3RyaW5nKiwgTm9kZSopOwotICAgIHZv
aWQgaGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyopOwogICAgIHZvaWQgaW5zcGVjdChOb2RlKik7
Ci0gICAgdm9pZCBoaWdobGlnaHRET01Ob2RlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCk7Ci0g
ICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodChFcnJvclN0cmluZyogZXJyb3IpIHsgaGlkZUhp
Z2hsaWdodChlcnJvcik7IH0KLQotICAgIHZvaWQgaGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpOwotICAgIHZvaWQgaGlkZUZyYW1lSGlnaGxpZ2h0KEVy
cm9yU3RyaW5nKiBlcnJvcikgeyBoaWRlSGlnaGxpZ2h0KGVycm9yKTsgfQogCiAgICAgdm9pZCBz
ZXRGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCopOwogICAgIEluc3BlY3RvckZyb250ZW5kKiBm
cm9udGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRlbmQ7IH0KQEAgLTE1NCwxMCArMTQ1LDYg
QEAgcHVibGljOgogICAgIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYXBwbGljYXRp
b25DYWNoZUFnZW50KCkgeyByZXR1cm4gbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0KCk7IH0K
ICNlbmRpZgogCi0gICAgYm9vbCBoYW5kbGVNb3VzZVByZXNzKCk7Ci0gICAgYm9vbCBzZWFyY2hp
bmdGb3JOb2RlSW5QYWdlKCkgY29uc3Q7Ci0gICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVu
dChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7Ci0KICAgICB2
b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSosIERPTVdyYXBwZXJXb3JsZCop
OwogCiAgICAgdm9pZCBkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKik7CkBAIC0xNzgsOSAr
MTY1LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNGcm9udGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJvbnRlbmQ7IH0KIAotICAgIHZvaWQgZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAgICAgdm9pZCBvcGVuSW5JbnNwZWN0ZWRXaW5kb3coRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmIGJvdW5kaW5nQm94LCBjb25zdCBJbnRSZWN0JiBhbmNo
b3JCb3gsIGNvbnN0IEZsb2F0UmVjdCYgb3ZlcmxheVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKikg
Y29uc3Q7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICB2b2lkIHNob3dQ
cm9maWxlc1BhbmVsKCk7CkBAIC0xOTksNyArMTg0LDYgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0
SW5zcGVjdG9yU3RhdGUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHN0YXRlKTsKICAgICB2b2lk
IHNldE1vbml0b3JpbmdYSFJFbmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpOwog
ICAgIC8vIEZvbGxvd2luZyBhcmUgdXNlZCBmcm9tIEluc3BlY3RvckJhY2tlbmQgYW5kIGludGVy
bmFsbHkuCi0gICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5nKiwgYm9vbCBl
bmFibGVkLCBib29sKiBuZXdTdGF0ZSk7CiAgICAgdm9pZCBkaWRFdmFsdWF0ZUZvclRlc3RJbkZy
b250ZW5kKEVycm9yU3RyaW5nKiwgbG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYganNvblJlc3Vs
dCk7CiAKICAgICB2b2lkIHNldFVzZXJBZ2VudE92ZXJyaWRlKEVycm9yU3RyaW5nKiwgY29uc3Qg
U3RyaW5nJiB1c2VyQWdlbnQpOwpAQCAtMjA4LDcgKzE5Miw2IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgdm9pZCBzaG93UGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbCk7CiAgICAgdm9pZCB1bmJp
bmRBbGxSZXNvdXJjZXMoKTsKLSAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFi
bGVkKTsKIAogICAgIHZvaWQgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKICAgICB2
b2lkIGNyZWF0ZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKQEAgLTI0Nyw3ICsyMzAsNiBAQCBw
cml2YXRlOgogICAgIE93blB0cjxJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ+IG1fYXBw
bGljYXRpb25DYWNoZUFnZW50OwogI2VuZGlmCiAKLSAgICBSZWZQdHI8Tm9kZT4gbV9oaWdobGln
aHRlZE5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZVRvRm9jdXM7CiAgICAgUmVmUHRyPElu
c3BlY3RvclJlc291cmNlQWdlbnQ+IG1fcmVzb3VyY2VBZ2VudDsKICAgICBPd25QdHI8SW5zcGVj
dG9yUnVudGltZUFnZW50PiBtX3J1bnRpbWVBZ2VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAxZDUyZTE0NzcyOTRhNzM3YzM2
ZjNlMjMwOGM5MWZlYTM1NWVlOThmLi44MGE1ZTg5MGE3YzE0OTY4YjVhNzhiYjUzYTkxMTFhZWRm
OTJiZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQnJvd3NlckRl
YnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC0y
MDAsNyArMjAxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpldmFsdWF0ZUZvclRlc3RJ
bkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHMKIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7Ci0gICAgbV9pbnNwZWN0b3JBZ2VudC0+ZHJhd05vZGVIaWdobGlnaHQoY29udGV4dCk7
CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZG9tQWdlbnQoKS0+ZHJhd05vZGVIaWdobGlnaHQoY29u
dGV4dCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd0NvbnNvbGUoKQpAQCAt
MjUwLDcgKzI1MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzcGF0Y2hNZXNzYWdl
RnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6aGlkZUhpZ2hsaWdodCgpCiB7CiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgbV9p
bnNwZWN0b3JBZ2VudC0+aGlkZUhpZ2hsaWdodCgmZXJyb3IpOworICAgIG1faW5zcGVjdG9yQWdl
bnQtPmRvbUFnZW50KCktPmhpZGVIaWdobGlnaHQoJmVycm9yKTsKIH0KIAogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKaW5kZXggOTNmOTdkZmRiNjY1NDk2NjZlZGJhNDM2NmIxNmJmODUwOWQz
MjI0YS4uMWMxNjFhNWUxMDRkMjcxOTI4NTFmMDE2YmY2NjUyNTM0NThjYjQ1MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC00Nyw2ICs0
Nyw3IEBACiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgogI2luY2x1ZGUgIkNvb2tpZS5oIgog
I2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgog
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRUeXBlLmgiCkBAIC01NywxMCArNTgsMTQgQEAKICNpbmNsdWRlICJFdmVudFRhcmdl
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGll
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clJlc291cmNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUg
Ikluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCkBAIC05
Miw2ICs5Nyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBET01BZ2VudFN0
YXRlIHsKK3N0YXRpYyBjb25zdCBjaGFyIHNlYXJjaGluZ0Zvck5vZGVbXSA9ICJzZWFyY2hpbmdG
b3JOb2RlIjsKIHN0YXRpYyBjb25zdCBjaGFyIGRvY3VtZW50UmVxdWVzdGVkW10gPSAiZG9jdW1l
bnRSZXF1ZXN0ZWQiOwogfTsKIApAQCAtMjYyLDEyICsyNjgsMTUgQEAgSW5zcGVjdG9yRE9NQWdl
bnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMsIFAKICAgICAsIG1fZG9tTGlzdGVuZXIoMCkKICAgICAsIG1fbGFzdE5vZGVJZCgxKQog
ICAgICwgbV9tYXRjaEpvYnNUaW1lcih0aGlzLCAmSW5zcGVjdG9yRE9NQWdlbnQ6Om9uTWF0Y2hK
b2JzVGltZXIpCisgICAgLCBtX3NlYXJjaGluZ0Zvck5vZGUoZmFsc2UpCiB7CiB9CiAKIEluc3Bl
Y3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQoKQogewogICAgIHJlc2V0KCk7CisgICAg
QVNTRVJUKCFtX2hpZ2hsaWdodGVkTm9kZSk7CisgICAgQVNTRVJUKCFtX3NlYXJjaGluZ0Zvck5v
ZGUpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRGcm9udGVuZChJbnNwZWN0b3JG
cm9udGVuZCogZnJvbnRlbmQpCkBAIC0yODEsNiArMjkwLDExIEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldEZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQogewogICAgIEFTU0VSVChtX2Zyb250ZW5k
KTsKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKKworICAgIEVycm9yU3RyaW5nIGVy
cm9yOworICAgIGhpZGVIaWdobGlnaHQoJmVycm9yKTsKKwogICAgIG1fZnJvbnRlbmQgPSAwOwog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yRE9NQWdlbnQoMCk7CiAgICAg
bV9pbnNwZWN0b3JTdGF0ZS0+c2V0Qm9vbGVhbihET01BZ2VudFN0YXRlOjpkb2N1bWVudFJlcXVl
c3RlZCwgZmFsc2UpOwpAQCAtODczLDYgKzg4Nyw4MSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpjYW5jZWxTZWFyY2goRXJyb3JTdHJpbmcqKQogICAgIG1fc2VhcmNoUmVzdWx0cy5jbGVhcigp
OwogfQogCitib29sIEluc3BlY3RvckRPTUFnZW50OjpoYW5kbGVNb3VzZVByZXNzKCkKK3sKKyAg
ICBpZiAoIXNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG1faGlnaGxpZ2h0ZWROb2RlKSB7CisgICAgICAgIFJlZlB0cjxOb2RlPiBub2Rl
ID0gbV9oaWdobGlnaHRlZE5vZGU7CisgICAgICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2Up
OworICAgICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFnZW50KCktPmluc3Bl
Y3Qobm9kZS5nZXQoKSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEluc3Bl
Y3RvckRPTUFnZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIHVuc2lnbmVkKQoreworICAgIGlmICghc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBOb2RlKiBub2RlID0gcmVzdWx0LmlubmVyTm9kZSgp
OworICAgIHdoaWxlIChub2RlICYmIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RF
KQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgIGlmIChub2RlKSB7Cisg
ICAgICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgICAgICBoaWdobGlnaHQoJmVycm9yLCBub2Rl
KTsKKyAgICB9Cit9CisKK2Jvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OnNlYXJjaGluZ0Zvck5vZGVJ
blBhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlYXJjaGluZ0Zvck5vZGU7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKQor
eworICAgIGlmIChzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkgPT0gZW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fc2VhcmNoaW5nRm9yTm9kZSA9IGVuYWJsZWQ7CisgICAgaWYgKCFlbmFi
bGVkKSB7CisgICAgICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgICAgICBoaWRlSGlnaGxpZ2h0
KCZlcnJvcik7CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hp
bmdGb3JOb2RlKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKK3sK
KyAgICAqbmV3U3RhdGUgPSBlbmFibGVkOworICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZW5hYmxl
ZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodChFcnJvclN0cmluZyos
IE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUX0FSRyhub2RlLCBub2RlKTsKKyAgICBtX2hpZ2hs
aWdodGVkTm9kZSA9IG5vZGU7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JB
Z2VudCgpLT5pbnNwZWN0b3JDbGllbnQoKS0+aGlnaGxpZ2h0KG5vZGUpOworfQorCit2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRET01Ob2RlKEVycm9yU3RyaW5nKiBlcnJvciwgaW50
IG5vZGVJZCkKK3sKKyAgICBpZiAoTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpKQorICAg
ICAgICBoaWdobGlnaHQoZXJyb3IsIG5vZGUpOworfQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3Rv
clJlc291cmNlQWdlbnQoKS0+ZnJhbWVGb3JJZChmcmFtZUlkKTsKKyAgICBpZiAoZnJhbWUgJiYg
ZnJhbWUtPm93bmVyRWxlbWVudCgpKQorICAgICAgICBoaWdobGlnaHQoZXJyb3IsIGZyYW1lLT5v
d25lckVsZW1lbnQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGln
aHQoRXJyb3JTdHJpbmcqKQoreworICAgIG1faGlnaGxpZ2h0ZWROb2RlID0gMDsKKyAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFnZW50KCktPmluc3BlY3RvckNsaWVudCgpLT5o
aWRlSGlnaGxpZ2h0KCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2Rl
KEVycm9yU3RyaW5nKiBlcnJvciwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4q
IHJlc3VsdCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CkBAIC0xMjkw
LDYgKzEzNzksMTQgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFn
ZW50OjpyZXNvbHZlTm9kZShOb2RlKiBub2RlKQogICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53
cmFwTm9kZShub2RlKTsKIH0KIAordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZHJhd05vZGVIaWdo
bGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghbV9oaWdo
bGlnaHRlZE5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIERPTU5vZGVIaWdobGlnaHRlcjo6
RHJhd05vZGVIaWdobGlnaHQoY29udGV4dCwgbV9oaWdobGlnaHRlZE5vZGUuZ2V0KCkpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA4ZTk2
OWVkNDlmZWRmNTkzOTQ0MmNlOTFhOTM4NjFhODFhZDU0MmVmLi4zN2VlZmQyMWFmYmYyMTI4ZjEw
MGMwNTJjMzQ2ZDY4ODU1ZDI0M2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaApAQCAtNTMsOCArNTMsMTAgQEAgY2xhc3MgQ2hhcmFjdGVyRGF0YTsK
IGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEV2ZW50OworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OwogY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JG
cm9udGVuZDsKK2NsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBNYXRjaEpvYjsKIGNsYXNzIEhU
TUxFbGVtZW50OwogY2xhc3MgSW5zcGVjdG9yU3RhdGU7CkBAIC0xMjMsOCArMTI1LDE0IEBAIHB1
YmxpYzoKICAgICB2b2lkIHBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGJvb2wgcnVuU3luY2hyb25vdXNseSk7CiAgICAgdm9p
ZCBjYW5jZWxTZWFyY2goRXJyb3JTdHJpbmcqKTsKICAgICB2b2lkIHJlc29sdmVOb2RlKEVycm9y
U3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7Cisg
ICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFibGVkLCBi
b29sKiBuZXdTdGF0ZSk7CiAgICAgdm9pZCBwdXNoTm9kZVRvRnJvbnRlbmQoRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCk7CiAgICAgdm9pZCBwdXNoTm9k
ZUJ5UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHBhdGgsIGludCog
bm9kZUlkKTsKKyAgICB2b2lkIGhpZGVIaWdobGlnaHQoRXJyb3JTdHJpbmcqKTsKKyAgICB2b2lk
IGhpZ2hsaWdodERPTU5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkKTsKKyAgICB2b2lkIGhp
ZGVET01Ob2RlSGlnaGxpZ2h0KEVycm9yU3RyaW5nKiBlcnJvcikgeyBoaWRlSGlnaGxpZ2h0KGVy
cm9yKTsgfQorICAgIHZvaWQgaGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQpOworICAgIHZvaWQgaGlkZUZyYW1lSGlnaGxpZ2h0KEVycm9yU3RyaW5nKiBl
cnJvcikgeyBoaWRlSGlnaGxpZ2h0KGVycm9yKTsgfQogCiAgICAgLy8gTWV0aG9kcyBjYWxsZWQg
ZnJvbSB0aGUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLgogICAgIHZvaWQgc2V0RG9jdW1lbnQo
RG9jdW1lbnQqKTsKQEAgLTE0Niw3ICsxNTQsMTcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGRv
Y3VtZW50VVJMU3RyaW5nKERvY3VtZW50KikgY29uc3Q7CiAKKzw8PDw8PDwgSEVBRAogICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNvbHZlTm9kZShOb2RlKik7Cis9PT09PT09Cisg
ICAgYm9vbCBoYW5kbGVNb3VzZVByZXNzKCk7CisgICAgYm9vbCBzZWFyY2hpbmdGb3JOb2RlSW5Q
YWdlKCkgY29uc3Q7CisgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRU
ZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CisKKyAgICB2b2lkIGRyYXdOb2Rl
SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc29sdmVOb2RlKE5vZGUqLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3Vw
KTsKKz4+Pj4+Pj4gY2xlYW4KIAogICAgIC8vIFdlIHJlcHJlc2VudCBlbWJlZGRlZCBkb21zIGFz
IGEgcGFydCBvZiB0aGUgc2FtZSBoaWVyYXJjaHkuIEhlbmNlIHdlIHRyZWF0IGNoaWxkcmVuIG9m
IGZyYW1lIG93bmVycyBkaWZmZXJlbnRseS4KICAgICAvLyBXZSBhbHNvIHNraXAgd2hpdGVzcGFj
ZSB0ZXh0IG5vZGVzIGNvbmRpdGlvbmFsbHkuIEZvbGxvd2luZyBtZXRob2RzIGVuY2Fwc3VsYXRl
IHRoZXNlIHNwZWNpZmljcy4KQEAgLTE2MCw2ICsxNzgsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIEluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVj
dG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKIAorICAgIHZvaWQgc2V0U2VhcmNo
aW5nRm9yTm9kZShib29sIGVuYWJsZWQpOworICAgIHZvaWQgaGlnaGxpZ2h0KEVycm9yU3RyaW5n
KiwgTm9kZSopOworCiAgICAgLy8gTm9kZS1yZWxhdGVkIG1ldGhvZHMuCiAgICAgdHlwZWRlZiBI
YXNoTWFwPFJlZlB0cjxOb2RlPiwgaW50PiBOb2RlVG9JZE1hcDsKICAgICBpbnQgYmluZChOb2Rl
KiwgTm9kZVRvSWRNYXAqKTsKQEAgLTIwNyw2ICsyMjgsOCBAQCBwcml2YXRlOgogICAgIFRpbWVy
PEluc3BlY3RvckRPTUFnZW50PiBtX21hdGNoSm9ic1RpbWVyOwogICAgIEhhc2hTZXQ8UmVmUHRy
PE5vZGU+ID4gbV9zZWFyY2hSZXN1bHRzOwogICAgIE93blB0cjxSZXZhbGlkYXRlU3R5bGVBdHRy
aWJ1dGVUYXNrPiBtX3JldmFsaWRhdGVTdHlsZUF0dHJUYXNrOworICAgIFJlZlB0cjxOb2RlPiBt
X2hpZ2hsaWdodGVkTm9kZTsKKyAgICBib29sIG1fc2VhcmNoaW5nRm9yTm9kZTsKIH07CiAKICNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBlZTVhZjVmZjI2NWNkODYw
ZDBkYTdiN2MxOTg1YzQ1YTAxN2M2ZGZiLi5lZDFiMjBkZGRiNzM5MDE3M2FiZTlkNjI2YzEyMTVm
M2IzZTUxZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtMTU4LDEyICsxNTgsMTkgQEAgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRhdGVTdHlsZUF0dHJJbXBsKEluc3BlY3RvckFn
ZW50KiBpbnNwZWMKIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1vdXNlRGlkTW92
ZU92ZXJFbGVtZW50SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncykKIHsKLSAgICBpbnNw
ZWN0b3JBZ2VudC0+bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQocmVzdWx0LCBtb2RpZmllckZsYWdz
KTsKKyAgICBpZiAoIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+
ZG9tQWdlbnQoKSkKKyAgICAgICAgZG9tQWdlbnQtPm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHJl
c3VsdCwgbW9kaWZpZXJGbGFncyk7CiB9CiAKIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpoYW5kbGVNb3VzZVByZXNzSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCiB7
Ci0gICAgcmV0dXJuIGluc3BlY3RvckFnZW50LT5oYW5kbGVNb3VzZVByZXNzKCk7CisgICAgSW5z
cGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmRvbUFnZW50KCk7Cisg
ICAgaWYgKCFkb21BZ2VudCB8fCAhaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBkb21BZ2VudC0+aGFuZGxlTW91c2VQcmVzcygpOwog
fQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVk
SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIENoYXJhY3RlckRhdGEqIGNoYXJh
Y3RlckRhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zdHJ1bWVu
dGluZ0FnZW50cy5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2Vu
dHMuaAppbmRleCBjNTNlZjAwMzY4ZWQ0MDg5M2ExZTM1NjU5YTQ4NzE2NTE1ZTk0MjA0Li5hYTBi
NmQ2YzA5YWJiOGYzZWI4MzUyYzQxODQxNDZmNDM5ZDhhNTVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmgKQEAgLTM2LDYgKzM2LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbnNwZWN0b3JBZ2VudDsKIGNsYXNzIEluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDsKIGNsYXNzIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50OwogY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ7CkBAIC01NCw3ICs1NSw4IEBAIGNsYXNz
IEluc3RydW1lbnRpbmdBZ2VudHMgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIEluc3RydW1lbnRpbmdBZ2VudHMoKQotICAgICAgICA6IG1faW5zcGVjdG9yQ1NT
QWdlbnQoMCkKKyAgICAgICAgOiBtX2luc3BlY3RvckFnZW50KDApCisgICAgICAgICwgbV9pbnNw
ZWN0b3JDU1NBZ2VudCgwKQogICAgICAgICAsIG1faW5zcGVjdG9yQ29uc29sZUFnZW50KDApCiAg
ICAgICAgICwgbV9pbnNwZWN0b3JET01BZ2VudCgwKQogICAgICAgICAsIG1faW5zcGVjdG9yUmVz
b3VyY2VBZ2VudCgwKQpAQCAtNzcsNiArNzksOSBAQCBwdWJsaWM6CiAgICAgeyB9CiAgICAgfklu
c3RydW1lbnRpbmdBZ2VudHMoKSB7IH0KIAorICAgIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQ7IH0KKyAgICB2b2lkIHNldElu
c3BlY3RvckFnZW50KEluc3BlY3RvckFnZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvckFnZW50ID0g
YWdlbnQ7IH0KKwogICAgIEluc3BlY3RvckNTU0FnZW50KiBpbnNwZWN0b3JDU1NBZ2VudCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NTQWdlbnQ7IH0KICAgICB2b2lkIHNldEluc3BlY3Rv
ckNTU0FnZW50KEluc3BlY3RvckNTU0FnZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvckNTU0FnZW50
ID0gYWdlbnQ7IH0KIApAQCAtMTE5LDYgKzEyNCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2
YXRlOgorICAgIEluc3BlY3RvckFnZW50KiBtX2luc3BlY3RvckFnZW50OwogICAgIEluc3BlY3Rv
ckNTU0FnZW50KiBtX2luc3BlY3RvckNTU0FnZW50OwogICAgIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dCogbV9pbnNwZWN0b3JDb25zb2xlQWdlbnQ7CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIG1faW5z
cGVjdG9yRE9NQWdlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0VsZW1lbnRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0VsZW1lbnRzUGFuZWwuanMKaW5kZXggODdlNDkxYmFmODVmOGEwMTRlNjlmMGJlYjUyZjVi
N2JkMTJjNDk3My4uNzI0ZTBlMjhmY2M4MDk5MWQyZDFjYzk4MTYyZjhjNjEyM2M5NmE5NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVs
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5l
bC5qcwpAQCAtMTEyOCw3ICsxMTI4LDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJv
dG90eXBlID0gewogCiAgICAgc2V0U2VhcmNoaW5nRm9yTm9kZTogZnVuY3Rpb24oZW5hYmxlZCkK
ICAgICB7Ci0gICAgICAgIEluc3BlY3RvckFnZW50LnNldFNlYXJjaGluZ0Zvck5vZGUoZW5hYmxl
ZCwgdGhpcy5fc2V0U2VhcmNoaW5nRm9yTm9kZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgRE9NQWdl
bnQuc2V0U2VhcmNoaW5nRm9yTm9kZShlbmFibGVkLCB0aGlzLl9zZXRTZWFyY2hpbmdGb3JOb2Rl
LmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICB0b2dnbGVTZWFyY2hpbmdGb3JOb2RlOiBmdW5j
dGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jl
c291cmNlc1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNv
dXJjZXNQYW5lbC5qcwppbmRleCAwNTlhYjQwY2IyZTY1NDI4Y2NhMWRiMjJmNTkyM2ExMGFkN2Rh
YjBjLi5hN2JhMGNhYzQwMWUyNTE5NDEyNjVjOTkwNzgxZmNhYTI1YzkzMDBlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMK
QEAgLTkxMCw3ICs5MTAsNyBAQCBXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHRoaXMuX3N0b3JhZ2VQYW5lbC5zaG93Q2F0ZWdvcnlWaWV3KHRoaXMu
X2Rpc3BsYXlOYW1lKTsKIAogICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5yZW1vdmVTdHls
ZUNsYXNzKCJob3ZlcmVkIik7Ci0gICAgICAgIEluc3BlY3RvckFnZW50LmhpZGVGcmFtZUhpZ2hs
aWdodCgpOworICAgICAgICBET01BZ2VudC5oaWRlRnJhbWVIaWdobGlnaHQoKTsKICAgICB9LAog
CiAgICAgZ2V0IGRpc3BsYXlOYW1lKCkKQEAgLTk0MywxMCArOTQzLDEwIEBAIFdlYkluc3BlY3Rv
ci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIGlmIChob3Zl
cmVkKSB7CiAgICAgICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJo
b3ZlcmVkIik7Ci0gICAgICAgICAgICBJbnNwZWN0b3JBZ2VudC5oaWdobGlnaHRGcmFtZSh0aGlz
Ll9mcmFtZUlkKTsKKyAgICAgICAgICAgIERPTUFnZW50LmhpZ2hsaWdodEZyYW1lKHRoaXMuX2Zy
YW1lSWQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1l
bnQucmVtb3ZlU3R5bGVDbGFzcygiaG92ZXJlZCIpOwotICAgICAgICAgICAgSW5zcGVjdG9yQWdl
bnQuaGlkZUZyYW1lSGlnaGxpZ2h0KCk7CisgICAgICAgICAgICBET01BZ2VudC5oaWRlRnJhbWVI
aWdobGlnaHQoKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggOTVlYTA2M2MwMDk5MmQ1MzkxNjIz
MjYyZTI3MTEwYmQ4YmQ0ZGRmYy4uZWVkYjhlYTIzYWE5OTQyN2ZjZDYwNmM0NWQzNTgyOTE2MWVj
NjMwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuanMKQEAgLTMyOCw5ICszMjgsOSBAQCB2YXIgV2ViSW5zcGVjdG9yID0gewogCiAgICAgICAg
IHRoaXMuX2hpZ2hsaWdodGVkRE9NTm9kZUlkID0gbm9kZUlkOwogICAgICAgICBpZiAobm9kZUlk
KQotICAgICAgICAgICAgSW5zcGVjdG9yQWdlbnQuaGlnaGxpZ2h0RE9NTm9kZShub2RlSWQpOwor
ICAgICAgICAgICAgRE9NQWdlbnQuaGlnaGxpZ2h0RE9NTm9kZShub2RlSWQpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBJbnNwZWN0b3JBZ2VudC5oaWRlRE9NTm9kZUhpZ2hsaWdodCgpOwor
ICAgICAgICAgICAgRE9NQWdlbnQuaGlkZURPTU5vZGVIaWdobGlnaHQoKTsKICAgICB9LAogCiAg
ICAgaGlnaGxpZ2h0RE9NTm9kZUZvclR3b1NlY29uZHM6IGZ1bmN0aW9uKG5vZGVJZCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86597</attachid>
            <date>2011-03-23 03:43:52 -0700</date>
            <delta_ts>2011-03-28 23:18:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56912-20110323134349.patch</filename>
            <type>text/plain</type>
            <size>63484</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE3NTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNWRmYWE0
YzRmNzYyYjZkYWQ5MjFjYWRmNmFlZWEzZjhiM2ViNzU1OS4uMmUwZTYzNmVkZjZkZGNhMGM1NGZh
MzM4ZGQ4M2E3MGRmOTk2NDRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTg3OCw2ICs4Nzgs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcAogCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAorICAgIGlu
c3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0LmNwcAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCiAgICAgaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhMGRmYjBlZTBmNjYx
N2RlMmUwZTgzZTRhOTEzNDM5ZGUwOTE5NTI4Li40MWViZDFjNzU1Zjg5YWIzZWUwMTk4MjFjMzhj
ZDZjMjg2YmRjNjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTEtMDMtMjMgIEls
eWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgbm9kZSBz
ZWFyY2hpbmcgYW5kIG5vZGUgaGlnaGxpZ2h0IHJlbGF0ZWQgbWV0aG9kcyBmcm9tIEluc3BlY3Rv
ckFnZW50IHRvIEluc3BlY3RvckRPTUFnZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY5MTIKKworICAgICAgICBUaGUgbmV4dCBmdW5jdGlvbnMg
d2VyZSBtb3ZlZDoKKyAgICAgICAgICAgIHNldFNlYXJjaGluZ0Zvck5vZGUKKyAgICAgICAgICAg
IGhpZ2hsaWdodERPTU5vZGUKKyAgICAgICAgICAgIGhpZGVET01Ob2RlSGlnaGxpZ2h0CisgICAg
ICAgICAgICBoaWdobGlnaHRGcmFtZQorICAgICAgICAgICAgaGlkZUZyYW1lSGlnaGxpZ2h0Cisg
ICAgICAgICAgICBtb3VzZURpZE1vdmVPdmVyRWxlbWVudAorICAgICAgICAgICAgaGFuZGxlTW91
c2VQcmVzcworCisgICAgICAgIFRoZSBjb2RlIHdoaWNoIGRvZXMgcmVhbCBoaWdobGlnaHQgaW4g
R3JhcGhpYyBjb250ZXh0IHdhcyBtb3ZlZCB0byBuZXcgZmlsZXMgRE9NTm9kZUhpZ2hsaWdodGVy
LioKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0RPTU5vZGVIaWdo
bGlnaHRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NTm9kZUhpZ2hsaWdodGVy
OjpEcmF3Tm9kZUhpZ2hsaWdodCk6CisgICAgICAgICogaW5zcGVjdG9yL0RPTU5vZGVIaWdobGln
aHRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckFnZW50OjpJbnNwZWN0b3JBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6fkluc3BlY3RvckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFn
ZW50OjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50OjpkaXNjb25uZWN0RnJvbnRlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRyYXdOb2RlSGlnaGxpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmhpZGVIaWdobGlnaHQp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Y2xlYXJGcm9udGVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlTW91c2VQcmVzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNlYXJjaGluZ0Zvck5vZGVJblBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RE9NTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRyYXdOb2RlSGlnaGxpZ2h0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpoaWRlRE9NTm9kZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6aGlkZUZyYW1lSGlnaGxpZ2h0KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxlTW91c2VQcmVz
c0ltcGwpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnN0cnVtZW50aW5nQWdlbnRzOjpJbnN0cnVtZW50aW5nQWdlbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRpbmdBZ2VudHM6Omluc3BlY3RvckFnZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRpbmdBZ2VudHM6OnNldEluc3BlY3RvckFnZW50
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUuc2V0U2VhcmNoaW5nRm9y
Tm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnNlbGVj
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUuc2V0
IGhvdmVyZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLmhpZ2hsaWdodERPTU5vZGUpOgorCiAyMDExLTAzLTIzICBN
YXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSAzMi1iaXQgYnVp
bGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDAzM2VmMzhhOGY2MmNmNWYyNjc1MGM3N2I3Mjc2
NDA3MmZlMDQ1MGMuLjY3NzhlNTZlODdhZDc0YWVkOWJlZGFjMDM1YTAzZWM5NGE0MjM5MjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xOTc4LDYgKzE5NzgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL2ljdS91bmljb2RlL3V2ZXJzaW9uLmggXAogCVNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9N
Tm9kZUhpZ2hsaWdodGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVI
aWdobGlnaHRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCBcCiAJU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDNlZWQzZWE4MGNlZTQ4MWZiODk2ZmMxOWQ0MDllOThkMjFhYTgyNWUuLjVkMTA3
ZWIyNDI0NTY1NmE0YTg5ZTM4MDgwN2Y1OTNkMmYwMTFlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTMxNjksNiArMzE2OSw4IEBACiAgICAgICAgICAgICAnaWN1L3VuaWNvZGUvdXZlcnNpb24uaCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCcsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9E
T01Ob2RlSGlnaGxpZ2h0ZXIuY3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvRE9NTm9kZUhp
Z2hsaWdodGVyLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDI3
ZjAxNmI2MzE0MDBhZDFmNTllNzBiNWNiNTk2NTQ2ZjY2MzU2YjcuLjJhOTM0MDdiN2UzNmI3MTAy
ZjkyNThkYjllNmY4YzQ3MTdhM2ZkMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03OTgsNiArNzk4LDcg
QEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBc
CiAgICAgaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBcCiAgICAgaW5z
cGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBcCisgICAgaW5zcGVjdG9yL0RPTU5vZGVIaWdobGln
aHRlci5jcHAgXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgXAogICAgIGluc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLmNwcCBcCkBAIC0xNzIwLDYgKzE3MjEsNyBAQCBIRUFERVJTICs9IFwKICAgICBo
dG1sL3BhcnNlci9IVE1MVmlld1NvdXJjZVBhcnNlci5oIFwKICAgICBodG1sL3BhcnNlci9YU1NG
aWx0ZXIuaCBcCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggXAorICAgIGluc3BlY3Rv
ci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmgg
XAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaCBcCiAgICAgaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKaW5kZXggYjBmNjY1NTdmNzA4ZDI2YjZjN2M2MDY3YWEyMTU0ZTExZjQy
MzBiMC4uYmM3N2E5M2Y3MDZjM2VhMjM1ZTgzOTAzNWFhZjI5YjY0MjBkYTFhMiAxMDA3NTUKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTY2MTQyLDYgKzY2
MTQyLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGluc3BlY3RvclxET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcRE9NTm9kZUhpZ2hsaWdo
dGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbmplY3RlZFNjcmlwdC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJh
M2FjYjU3Zjg4NTJkZDU4ZGE5YWQzOWRhMzc3ZTk0MGEyYzFkM2IuLjZkMWJjZWJmZmQ3YTdlMjZm
MzE0OWE4NjRlZThhMTYzNTRhN2MzYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyMzIsNiArMTIzMiw4IEBACiAJCTRFMTk1
OTJDMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXZhbHVhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyNjBBMzlEQUNDMDAyMjBG
RTUgLyogTWVkaWFRdWVyeUV2YWx1YXRvci5oICovOyB9OwogCQk0RTE5NTkyRDBBMzlEQUNDMDAy
MjBGRTUgLyogTWVkaWFRdWVyeUV4cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyNzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4
cC5jcHAgKi87IH07CiAJCTRFMTk1OTJFMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhw
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTky
ODBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5oICovOyB9OworCQk0RjE0NDIyODEz
MzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMTQ0MjI2MTMzOUZENjIwMEUwRDZGOCAv
KiBET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwICovOyB9OworCQk0RjE0NDIyOTEzMzlGRDYyMDBFMEQ2
RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0RjE0NDIyNzEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hs
aWdodGVyLmggKi87IH07CiAJCTRGMTUzNERFMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVo
YXZpb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRG
MTUzNEREMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0RjE1MzRFMDExQjUzMzAyMDAy
MUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMTUzNERGMTFCNTMzMDIwMDIxRkQ4NiAvKiBFZGl0aW5n
QmVoYXZpb3JUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTRGMkQyMDU0MTJFQUU3QjMwMDVDMjg3NCAvKiBJbnNwZWN0b3JBZ2VudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYyRDIwNTIxMkVB
RTdCMzAwNUMyODc0IC8qIEluc3BlY3RvckFnZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc3MjQsNiArNzcyNiw4IEBACiAJCTRFMTk1OTI2
MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXZhbHVhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5RXZhbHVhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTRFMTk1OTI3MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhw
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVF1ZXJ5RXhw
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjgwQTM5REFDQzAwMjIw
RkU1IC8qIE1lZGlhUXVlcnlFeHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1lZGlhUXVlcnlFeHAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEYxNDQyMjYx
MzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVIaWdobGlnaHRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0RjE0NDIyNzEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhp
Z2hsaWdodGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTU5vZGVIaWdo
bGlnaHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RjE1MzRERDExQjUzMkVD
MDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEVkaXRpbmdCZWhhdmlvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
RjE1MzRERjExQjUzMzAyMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ0JlaGF2aW9yVHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEYyRDIwNTIxMkVBRTdCMzAwNUMyODc0IC8qIEluc3Bl
Y3RvckFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckFn
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzA5Myw2ICsxMzA5Nyw4IEBA
CiAJCQkJMUM4MUI5NTkwRTk3MzMwODAwMjY2RTA3IC8qIGZyb250LWVuZCAqLywKIAkJCQk0MUYw
NjE4RDBGNUYwNjk4MDBBMDdFQUMgLyogQ29uc29sZU1lc3NhZ2UuY3BwICovLAogCQkJCTQxRjA2
MThDMEY1RjA2OTgwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5oICovLAorCQkJCTRGMTQ0MjI2
MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwICovLAorCQkJCTRGMTQ0
MjI3MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIuaCAqLywKIAkJCQlGMzY0
NEFGRDExMTk4MDU5MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQuY3BwICovLAogCQkJCUYzNjQ0
QUZFMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5oICovLAogCQkJCTdBMEU3NkY2
MTBCRjA4RUQwMEEwMjc2RSAvKiBJbmplY3RlZFNjcmlwdEhvc3QuY3BwICovLApAQCAtMjI2ODcs
NiArMjI2OTMsNyBAQAogCQkJCTMxOUU2OUIzMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmlt
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOUU2OUI2MTMyOTlCQkQwMDRBQzkxQSAvKiBX
ZWJLaXRBbmltYXRpb25MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3MkUxMzEzMzE2MjBD
MDAxRUM5Q0UgLyogQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NEYxNDQyMjkxMzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVIaWdobGlnaHRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0yNTM1Niw2ICsyNTM2Myw3IEBACiAJCQkJMzE5RTY5QjUxMzI5OUJCRDAwNEFD
OTFBIC8qIFdlYktpdEFuaW1hdGlvbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3NzJF
MTYxMzMxNjJDMjAwMUVDOUNFIC8qIENTU0xpbmVCb3hDb250YWluVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0UzN0VGMkUxMzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVy
Q0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEYxNDQyMjgxMzM5RkQ2MjAwRTBENkY4IC8qIERP
TU5vZGVIaWdobGlnaHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjcyZjRiNGQzYmMx
ZGQxNjE1M2ZkZjg0NWQxMjFjMDc5ZTM1MzM4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCkBAIC0wLDAgKzEsMjk3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUg
IlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVk
RWxlbWVudC5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgeworCitQYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQor
eworICAgIFBhdGggcXVhZFBhdGg7CisgICAgcXVhZFBhdGgubW92ZVRvKHF1YWQucDEoKSk7Cisg
ICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDIoKSk7CisgICAgcXVhZFBhdGguYWRkTGluZVRv
KHF1YWQucDMoKSk7CisgICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDQoKSk7CisgICAgcXVh
ZFBhdGguY2xvc2VTdWJwYXRoKCk7CisgICAgcmV0dXJuIHF1YWRQYXRoOworfQorCit2b2lkIGRy
YXdPdXRsaW5lZFF1YWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQm
IHF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBv
dXRsaW5lVGhpY2tuZXNzID0gMjsKKyAgICBzdGF0aWMgY29uc3QgQ29sb3Igb3V0bGluZUNvbG9y
KDYyLCA4NiwgMTgwLCAyMjgpOworCisgICAgUGF0aCBxdWFkUGF0aCA9IHF1YWRUb1BhdGgocXVh
ZCk7CisKKyAgICAvLyBDbGlwIG91dCB0aGUgcXVhZCwgdGhlbiBkcmF3IHdpdGggYSAycHggc3Ry
b2tlIHRvIGdldCBhIHBpeGVsCisgICAgLy8gb2Ygb3V0bGluZSAoYmVjYXVzZSBpbmZsYXRpbmcg
YSBxdWFkIGlzIGhhcmQpCisgICAgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAgICAg
Y29udGV4dC5jbGlwT3V0KHF1YWRQYXRoKTsKKworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcyhvdXRsaW5lVGhpY2tuZXNzKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xv
cihvdXRsaW5lQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjb250ZXh0LnN0
cm9rZVBhdGgocXVhZFBhdGgpOworCisgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIH0K
KworICAgIC8vIE5vdyBkbyB0aGUgZmlsbAorICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxD
b2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5maWxsUGF0aChxdWFkUGF0
aCk7Cit9CisKK3ZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBGbG9hdFF1YWQmIGNsaXBRdWFk
LCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQoreworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIFBh
dGggY2xpcFF1YWRQYXRoID0gcXVhZFRvUGF0aChjbGlwUXVhZCk7CisgICAgY29udGV4dC5jbGlw
T3V0KGNsaXBRdWFkUGF0aCk7CisgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBxdWFkLCBm
aWxsQ29sb3IpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit2b2lkIGRyYXdIaWdobGln
aHRGb3JCb3goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIGNvbnRl
bnRRdWFkLCBjb25zdCBGbG9hdFF1YWQmIHBhZGRpbmdRdWFkLCBjb25zdCBGbG9hdFF1YWQmIGJv
cmRlclF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgbWFyZ2luUXVhZCkKK3sKKyAgICBzdGF0aWMgY29u
c3QgQ29sb3IgY29udGVudEJveENvbG9yKDEyNSwgMTczLCAyMTcsIDEyOCk7CisgICAgc3RhdGlj
IGNvbnN0IENvbG9yIHBhZGRpbmdCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxNjApOworICAgIHN0
YXRpYyBjb25zdCBDb2xvciBib3JkZXJCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxOTIpOworICAg
IHN0YXRpYyBjb25zdCBDb2xvciBtYXJnaW5Cb3hDb2xvcigxMjUsIDE3MywgMjE3LCAyMjgpOwor
CisgICAgaWYgKG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkKKyAgICAgICAgZHJhd091dGxpbmVk
UXVhZFdpdGhDbGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIG1hcmdpbkJveENv
bG9yKTsKKyAgICBpZiAoYm9yZGVyUXVhZCAhPSBwYWRkaW5nUXVhZCkKKyAgICAgICAgZHJhd091
dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIGJvcmRlclF1YWQsIHBhZGRpbmdRdWFkLCBib3Jk
ZXJCb3hDb2xvcik7CisgICAgaWYgKHBhZGRpbmdRdWFkICE9IGNvbnRlbnRRdWFkKQorICAgICAg
ICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgcGFkZGluZ1F1YWQsIGNvbnRlbnRR
dWFkLCBwYWRkaW5nQm94Q29sb3IpOworCisgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBj
b250ZW50UXVhZCwgY29udGVudEJveENvbG9yKTsKK30KKwordm9pZCBkcmF3SGlnaGxpZ2h0Rm9y
TGluZUJveGVzT3JTVkdSZW5kZXJlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZl
Y3RvcjxGbG9hdFF1YWQ+JiBsaW5lQm94UXVhZHMpCit7CisgICAgc3RhdGljIGNvbnN0IENvbG9y
IGxpbmVCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxMjgpOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsaW5lQm94UXVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGRyYXdPdXRsaW5lZFF1
YWQoY29udGV4dCwgbGluZUJveFF1YWRzW2ldLCBsaW5lQm94Q29sb3IpOworfQorCitpbmxpbmUg
dm9pZCBjb252ZXJ0RnJvbUZyYW1lVG9NYWluRnJhbWUoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIHJlY3QgPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT53
aW5kb3dUb0NvbnRlbnRzKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCkpOwor
fQorCitpbmxpbmUgSW50U2l6ZSBmcmFtZVRvTWFpbkZyYW1lT2Zmc2V0KEZyYW1lKiBmcmFtZSkK
K3sKKyAgICBJbnRQb2ludCBtYWluRnJhbWVQb2ludCA9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dp
bmRvdyhJbnRQb2ludCgpKSk7CisgICAgcmV0dXJuIG1haW5GcmFtZVBvaW50IC0gSW50UG9pbnQo
KTsKK30KKwordm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Tm9kZSogbm9kZSwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3QmIGFu
Y2hvckJveCwgY29uc3QgRmxvYXRSZWN0JiBvdmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3Mq
IHNldHRpbmdzKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7Cisg
ICAgc3RhdGljIGNvbnN0IGludCBmb250SGVpZ2h0UHggPSAxMjsKKyAgICBzdGF0aWMgY29uc3Qg
aW50IGJvcmRlcldpZHRoUHggPSAxOworICAgIHN0YXRpYyBjb25zdCBDb2xvciB0b29sdGlwQmFj
a2dyb3VuZENvbG9yKDI1NSwgMjU1LCAxOTQsIDI1NSk7CisgICAgc3RhdGljIGNvbnN0IENvbG9y
IHRvb2x0aXBCb3JkZXJDb2xvcihDb2xvcjo6YmxhY2spOworICAgIHN0YXRpYyBjb25zdCBDb2xv
ciB0b29sdGlwRm9udENvbG9yKENvbG9yOjpibGFjayk7CisKKyAgICBFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1l
bnQtPmRvY3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpOworICAgIFN0cmluZyBub2RlVGl0bGUg
PSBpc1hIVE1MID8gZWxlbWVudC0+bm9kZU5hbWUoKSA6IGVsZW1lbnQtPm5vZGVOYW1lKCkubG93
ZXIoKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkVmFsdWUgPSBlbGVtZW50LT5nZXRJZEF0
dHJpYnV0ZSgpOworICAgIGlmICghaWRWYWx1ZS5pc051bGwoKSAmJiAhaWRWYWx1ZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgbm9kZVRpdGxlICs9ICIjIjsKKyAgICAgICAgbm9kZVRpdGxlICs9IGlk
VmFsdWU7CisgICAgfQorICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICYmIGVsZW1lbnQtPmlz
U3R5bGVkRWxlbWVudCgpKSB7CisgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNz
TmFtZXNTdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNz
TmFtZXMoKTsKKyAgICAgICAgc2l6ZV90IGNsYXNzTmFtZUNvdW50ID0gY2xhc3NOYW1lc1N0cmlu
Zy5zaXplKCk7CisgICAgICAgIGlmIChjbGFzc05hbWVDb3VudCkgeworICAgICAgICAgICAgSGFz
aFNldDxBdG9taWNTdHJpbmc+IHVzZWRDbGFzc05hbWVzOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjbGFzc05hbWVDb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUgPSBjbGFzc05hbWVzU3RyaW5nW2ldOworICAgICAg
ICAgICAgICAgIGlmICh1c2VkQ2xhc3NOYW1lcy5jb250YWlucyhjbGFzc05hbWUpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB1c2VkQ2xhc3NOYW1lcy5h
ZGQoY2xhc3NOYW1lKTsKKyAgICAgICAgICAgICAgICBub2RlVGl0bGUgKz0gIi4iOworICAgICAg
ICAgICAgICAgIG5vZGVUaXRsZSArPSBjbGFzc05hbWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBub2RlVGl0bGUgKz0gIiBbIjsKKyAgICBub2RlVGl0bGUgKz0gU3Ry
aW5nOjpudW1iZXIoYm91bmRpbmdCb3gud2lkdGgoKSk7CisgICAgbm9kZVRpdGxlLmFwcGVuZChz
dGF0aWNfY2FzdDxVQ2hhcj4oMHgwMEQ3KSk7IC8vICZ0aW1lczsKKyAgICBub2RlVGl0bGUgKz0g
U3RyaW5nOjpudW1iZXIoYm91bmRpbmdCb3guaGVpZ2h0KCkpOworICAgIG5vZGVUaXRsZSArPSAi
XSI7CisKKyAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKKyAgICBGb250RmFtaWx5IGZhbWlseTsK
KyAgICBmYW1pbHkuc2V0RmFtaWx5KHNldHRpbmdzLT5maXhlZEZvbnRGYW1pbHkoKSk7CisgICAg
ZGVzYy5zZXRGYW1pbHkoZmFtaWx5KTsKKyAgICBkZXNjLnNldENvbXB1dGVkU2l6ZShmb250SGVp
Z2h0UHgpOworICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7CisgICAgZm9udC51cGRh
dGUoMCk7CisKKyAgICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2RlVGl0bGUpOworICAgIEludFBv
aW50IHRpdGxlQmFzZVBvaW50ID0gSW50UG9pbnQoYW5jaG9yQm94LngoKSwgYW5jaG9yQm94Lm1h
eFkoKSAtIDEpOworICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdElu
ZmxhdGVQeCk7CisgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQu
c2VsZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhl
aWdodFB4KSk7CisgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CisKKyAgICAv
LyBUaGUgaW5pdGlhbCBvZmZzZXRzIG5lZWRlZCB0byBjb21wZW5zYXRlIGZvciBhIDFweC10aGlj
ayBib3JkZXIgc3Ryb2tlICh3aGljaCBpcyBub3QgYSBwYXJ0IG9mIHRoZSByZWN0YW5nbGUpLgor
ICAgIGludCBkeCA9IC1ib3JkZXJXaWR0aFB4OworICAgIGludCBkeSA9IGJvcmRlcldpZHRoUHg7
CisKKyAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHJpZ2h0IG9mIG92ZXJsYXlS
ZWN0LCByaWdodC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCisgICAgaWYg
KHRpdGxlUmVjdC5tYXhYKCkgPiBvdmVybGF5UmVjdC5tYXhYKCkpCisgICAgICAgIGR4ID0gb3Zl
cmxheVJlY3QubWF4WCgpIC0gdGl0bGVSZWN0Lm1heFgoKTsKKworICAgIC8vIElmIHRoZSB0aXAg
c3RpY2tzIGJleW9uZCB0aGUgbGVmdCBvZiBvdmVybGF5UmVjdCwgbGVmdC1hbGlnbiB0aGUgdGlw
IHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCisgICAgaWYgKHRpdGxlUmVjdC54KCkgKyBkeCA8IG92
ZXJsYXlSZWN0LngoKSkKKyAgICAgICAgZHggPSBvdmVybGF5UmVjdC54KCkgLSB0aXRsZVJlY3Qu
eCgpIC0gYm9yZGVyV2lkdGhQeDsKKworICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0
aGUgYm90dG9tIG9mIG92ZXJsYXlSZWN0LCBzaG93IHRoZSB0aXAgYXQgdG9wIG9mIGJvdW5kaW5n
IGJveC4KKyAgICBpZiAodGl0bGVSZWN0Lm1heFkoKSA+IG92ZXJsYXlSZWN0Lm1heFkoKSkgewor
ICAgICAgICBkeSA9IGFuY2hvckJveC55KCkgLSB0aXRsZVJlY3QubWF4WSgpIC0gYm9yZGVyV2lk
dGhQeDsKKyAgICAgICAgLy8gSWYgdGhlIHRpcCBzdGlsbCBzdGlja3MgYmV5b25kIHRoZSBib3R0
b20gb2Ygb3ZlcmxheVJlY3QsIGJvdHRvbS1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91
bmRhcnkuCisgICAgICAgIGlmICh0aXRsZVJlY3QubWF4WSgpICsgZHkgPiBvdmVybGF5UmVjdC5t
YXhZKCkpCisgICAgICAgICAgICBkeSA9IG92ZXJsYXlSZWN0Lm1heFkoKSAtIHRpdGxlUmVjdC5t
YXhZKCk7CisgICAgfQorCisgICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSB0b3Ag
b2Ygb3ZlcmxheVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2Ygb3ZlcmxheVJlY3QuCisgICAg
aWYgKHRpdGxlUmVjdC55KCkgKyBkeSA8IG92ZXJsYXlSZWN0LnkoKSkKKyAgICAgICAgZHkgPSBv
dmVybGF5UmVjdC55KCkgLSB0aXRsZVJlY3QueSgpICsgYm9yZGVyV2lkdGhQeDsKKworICAgIHRp
dGxlUmVjdC5tb3ZlKGR4LCBkeSk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcih0b29sdGlw
Qm9yZGVyQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKGJvcmRlcldpZHRoUHgpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvb2x0
aXBCYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJh
d1JlY3QodGl0bGVSZWN0KTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b29sdGlwRm9udENv
bG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIG5v
ZGVUaXRsZVJ1biwgSW50UG9pbnQodGl0bGVSZWN0LngoKSArIHJlY3RJbmZsYXRlUHgsIHRpdGxl
UmVjdC55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpKTsKK30KKworfSAvLyB1bm5h
bWVkIG5hbWVzcGFjZQorCituYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyIHsKKwordm9pZCBE
cmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIE5vZGUqIG5vZGUpCit7
CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgRnJh
bWUqIGNvbnRhaW5pbmdGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisKKyAgICBp
ZiAoIXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IEludFNpemUgbWFpbkZyYW1lT2Zmc2V0ID0gZnJhbWVUb01haW5GcmFtZU9mZnNldChjb250YWlu
aW5nRnJhbWUpOworICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSByZW5kZXJlci0+YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QodHJ1ZSk7CisKKyAgICBib3VuZGluZ0JveC5tb3ZlKG1haW5GcmFtZU9m
ZnNldCk7CisKKyAgICBJbnRSZWN0IHRpdGxlQW5jaG9yQm94ID0gYm91bmRpbmdCb3g7CisKKyAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBjb250YWluaW5nRnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkt
PnZpZXcoKTsKKyAgICBGbG9hdFJlY3Qgb3ZlcmxheVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVu
dFJlY3QoKTsKKyAgICBpZiAoIW92ZXJsYXlSZWN0LmNvbnRhaW5zKGJvdW5kaW5nQm94KSAmJiAh
Ym91bmRpbmdCb3guY29udGFpbnMoZW5jbG9zaW5nSW50UmVjdChvdmVybGF5UmVjdCkpKQorICAg
ICAgICBvdmVybGF5UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIGNvbnRl
eHQudHJhbnNsYXRlKC1vdmVybGF5UmVjdC54KCksIC1vdmVybGF5UmVjdC55KCkpOworCisgICAg
Ly8gUmVuZGVyU1ZHUm9vdCBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgdGhyb3VnaCB0aGUgaXNCb3go
KSBjb2RlIHBhdGgsIGFsbCBvdGhlciBTVkcgZWxlbWVudHMgc2hvdWxkIGp1c3QgZHVtcCB0aGVp
ciBhYnNvbHV0ZVF1YWRzKCkuCisjaWYgRU5BQkxFKFNWRykKKyAgICBib29sIGlzU1ZHUmVuZGVy
ZXIgPSByZW5kZXJlci0+bm9kZSgpICYmIHJlbmRlcmVyLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgp
ICYmICFyZW5kZXJlci0+aXNTVkdSb290KCk7CisjZWxzZQorICAgIGJvb2wgaXNTVkdSZW5kZXJl
ciA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAocmVuZGVyZXItPmlzQm94KCkgJiYgIWlzU1ZH
UmVuZGVyZXIpIHsKKyAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChy
ZW5kZXJlcik7CisKKyAgICAgICAgSW50UmVjdCBjb250ZW50Qm94ID0gcmVuZGVyQm94LT5jb250
ZW50Qm94UmVjdCgpOworCisgICAgICAgIEludFJlY3QgcGFkZGluZ0JveChjb250ZW50Qm94Lngo
KSAtIHJlbmRlckJveC0+cGFkZGluZ0xlZnQoKSwgY29udGVudEJveC55KCkgLSByZW5kZXJCb3gt
PnBhZGRpbmdUb3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCb3gud2lk
dGgoKSArIHJlbmRlckJveC0+cGFkZGluZ0xlZnQoKSArIHJlbmRlckJveC0+cGFkZGluZ1JpZ2h0
KCksIGNvbnRlbnRCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdUb3AoKSArIHJlbmRl
ckJveC0+cGFkZGluZ0JvdHRvbSgpKTsKKyAgICAgICAgSW50UmVjdCBib3JkZXJCb3gocGFkZGlu
Z0JveC54KCkgLSByZW5kZXJCb3gtPmJvcmRlckxlZnQoKSwgcGFkZGluZ0JveC55KCkgLSByZW5k
ZXJCb3gtPmJvcmRlclRvcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm94
LndpZHRoKCkgKyByZW5kZXJCb3gtPmJvcmRlckxlZnQoKSArIHJlbmRlckJveC0+Ym9yZGVyUmln
aHQoKSwgcGFkZGluZ0JveC5oZWlnaHQoKSArIHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgKyByZW5k
ZXJCb3gtPmJvcmRlckJvdHRvbSgpKTsKKyAgICAgICAgSW50UmVjdCBtYXJnaW5Cb3goYm9yZGVy
Qm94LngoKSAtIHJlbmRlckJveC0+bWFyZ2luTGVmdCgpLCBib3JkZXJCb3gueSgpIC0gcmVuZGVy
Qm94LT5tYXJnaW5Ub3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm94Lndp
ZHRoKCkgKyByZW5kZXJCb3gtPm1hcmdpbkxlZnQoKSArIHJlbmRlckJveC0+bWFyZ2luUmlnaHQo
KSwgYm9yZGVyQm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5tYXJnaW5Ub3AoKSArIHJlbmRlckJv
eC0+bWFyZ2luQm90dG9tKCkpOworCisKKyAgICAgICAgRmxvYXRRdWFkIGFic0NvbnRlbnRRdWFk
ID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjb250ZW50Qm94KSk7
CisgICAgICAgIEZsb2F0UXVhZCBhYnNQYWRkaW5nUXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3QocGFkZGluZ0JveCkpOworICAgICAgICBGbG9hdFF1YWQgYWJz
Qm9yZGVyUXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm9y
ZGVyQm94KSk7CisgICAgICAgIEZsb2F0UXVhZCBhYnNNYXJnaW5RdWFkID0gcmVuZGVyQm94LT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJnaW5Cb3gpKTsKKworICAgICAgICBhYnND
b250ZW50UXVhZC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7CisgICAgICAgIGFic1BhZGRpbmdRdWFk
Lm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKKyAgICAgICAgYWJzQm9yZGVyUXVhZC5tb3ZlKG1haW5G
cmFtZU9mZnNldCk7CisgICAgICAgIGFic01hcmdpblF1YWQubW92ZShtYWluRnJhbWVPZmZzZXQp
OworCisgICAgICAgIHRpdGxlQW5jaG9yQm94ID0gYWJzTWFyZ2luUXVhZC5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOworCisgICAgICAgIGRyYXdIaWdobGlnaHRGb3JCb3goY29udGV4dCwgYWJzQ29u
dGVudFF1YWQsIGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJRdWFkLCBhYnNNYXJnaW5RdWFkKTsK
KyAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1JlbmRlcklubGluZSgpIHx8IGlzU1ZHUmVuZGVy
ZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzaG93IG1hcmdpbnMvcGFkZGluZy9i
b3JkZXIgZm9yIGlubGluZXMuCisgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGxpbmVCb3hRdWFk
czsKKyAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMobGluZUJveFF1YWRzKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbmVCb3hRdWFkcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIGxpbmVCb3hRdWFkc1tpXSArPSBtYWluRnJhbWVPZmZzZXQ7CisKKyAgICAgICAg
ZHJhd0hpZ2hsaWdodEZvckxpbmVCb3hlc09yU1ZHUmVuZGVyZXIoY29udGV4dCwgbGluZUJveFF1
YWRzKTsKKyAgICB9CisKKyAgICAvLyBEcmF3IG5vZGUgdGl0bGUgaWYgbmVjZXNzYXJ5LgorCisg
ICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdl
YkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncyA9IGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKTsK
KyAgICBkcmF3RWxlbWVudFRpdGxlKGNvbnRleHQsIG5vZGUsIGJvdW5kaW5nQm94LCB0aXRsZUFu
Y2hvckJveCwgb3ZlcmxheVJlY3QsIHNldHRpbmdzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgRE9N
Tm9kZUhpZ2hsaWdodGVyCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9N
Tm9kZUhpZ2hsaWdodGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hs
aWdodGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjIyZDBjZjU2Yjg3N2I0MWViODZkYjFjNDk4OWQzMjdjY2Fl
YzIwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2Rl
SGlnaGxpZ2h0ZXIuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBET01Ob2RlSGlnaGxpZ2h0
ZXJfaAorI2RlZmluZSBET01Ob2RlSGlnaGxpZ2h0ZXJfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIE5vZGU7CisKK25hbWVzcGFjZSBET01O
b2RlSGlnaGxpZ2h0ZXIgeworCit2b2lkIERyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4
dCYsIE5vZGUqKTsKKworfSAvLyBuYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUgCisKKworI2VuZGlmIC8vIERPTU5vZGVIaWdobGlnaHRlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KaW5kZXggYWNlZTU3ZjQ4NWMzM2Yw
NGQwYjU4ODllMTI3Mzg4ZDNmYmEwNTg4Zi4uNTJkNTU4YjVhZmZmZDc0NThjZGNiYzk2YzhmYjlm
ODE5MzQ0Zjk0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgpAQCAt
MjUsMTUgKzI1LDYgQEAKICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9LAogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICJuYW1lIjogInNldFNlYXJjaGluZ0Zvck5vZGUiLAot
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImVuYWJsZWQiLCAidHlwZSI6ICJib29sZWFuIiB9Ci0gICAgICAgICAgICAgICAgXSwK
LSAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJuZXdTdGF0ZSIsICJ0eXBlIjogImJvb2xlYW4iIH0KLSAgICAgICAgICAgICAgICBdCi0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICJuYW1lIjogImRp
ZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQiLAogICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWwogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRlc3RDYWxsSWQiLCAidHlwZSI6
ICJpbnRlZ2VyIiB9LApAQCAtNDEsMjQgKzMyLDYgQEAKICAgICAgICAgICAgICAgICBdCiAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICJuYW1lIjogImhpZ2hs
aWdodERPTU5vZGUiLAotICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVJZCIsICJ0eXBlIjogImludGVnZXIiIH0KLSAgICAg
ICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICJuYW1lIjogImhpZGVET01Ob2RlSGlnaGxpZ2h0IgotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAibmFtZSI6ICJoaWdobGlnaHRGcmFtZSIsCi0gICAg
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZnJhbWVJZCIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgICAgIF0KLSAgICAg
ICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIm5hbWUiOiAiaGlkZUZy
YW1lSGlnaGxpZ2h0IgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAibmFtZSI6ICJzZXRVc2VyQWdlbnRPdmVycmlkZSIsCiAgICAgICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidXNlckFnZW50Iiwg
InR5cGUiOiAic3RyaW5nIiB9CkBAIC03MDAsNiArNjczLDM0IEBACiAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlJlcXVlc3RzIHRoYXQgdGhlIG5vZGUgaXMgc2VudCB0byB0aGUgY2Fs
bGVyIGdpdmVuIHRoZSBKYXZhU2NyaXB0IG5vZGUgb2JqZWN0IHJlZmVyZW5jZS4iCiAgICAgICAg
ICAgICB9LAogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogInNldFNlYXJj
aGluZ0Zvck5vZGUiLAorICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImVuYWJsZWQiLCAidHlwZSI6ICJib29sZWFuIiB9CisgICAg
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJuZXdTdGF0ZSIsICJ0eXBlIjogImJvb2xlYW4iIH0KKyAgICAg
ICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICJuYW1lIjogImhpZ2hsaWdodERPTU5vZGUiLAorICAgICAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVJZCIsICJ0eXBlIjog
ImludGVnZXIiIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogImhpZGVET01Ob2RlSGlnaGxpZ2h0IgorICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJoaWdo
bGlnaHRGcmFtZSIsCisgICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWVJZCIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAg
ICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgIm5hbWUiOiAiaGlkZUZyYW1lSGlnaGxpZ2h0IgorICAgICAgICAgICAgfSwKKworICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICJuYW1lIjogInB1c2hOb2RlQnlQYXRoVG9Gcm9udGVu
ZCIsCiAgICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGF0aCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJQYXRo
IHRvIG5vZGUgaW4gdGhlIHByb3ByaWV0YXJ5IGZvcm1hdC4iIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDY5ZDU0ZGZjYmM2MjlkMTM4ZTJjZDUx
MDZiZmUyY2NmYTRhNGYyMGIuLjgyYTkxZjJjZDNjNGE2MDBkNmExNWM0MzY0OGVlNTNjYTk1ODRm
YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcApAQCAt
MzIsMjkgKzMyLDEzIEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCi0jaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1
ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5o
IgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNs
dWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
LSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIK
LSNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgot
I2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0
LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCIKQEAgLTY1LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJJ
bnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291
cmNlQWdlbnQuaCIKQEAgLTc1LDM1ICs1OCwxNSBAQAogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVl
cy5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlclJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5z
dHJ1bWVudGluZ0FnZW50cy5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQYWdl
LmgiCi0jaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNp
bmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgi
Ci0jaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25D
YWxsLmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0UHJvZmls
ZS5oIgotI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNl
Q29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgot
I2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgogI2lu
Y2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0j
aW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFt
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAogI2lmIEVOQUJM
RShEQVRBQkFTRSkKICNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgiCkBAIC0xMjIs
NyArODUsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yQWdlbnRTdGF0ZSB7Ci1zdGF0aWMgY29uc3QgY2hhciBzZWFyY2hp
bmdGb3JOb2RlW10gPSAic2VhcmNoaW5nRm9yTm9kZSI7CiBzdGF0aWMgY29uc3QgY2hhciB0aW1l
bGluZVByb2ZpbGVyRW5hYmxlZFtdID0gInRpbWVsaW5lUHJvZmlsZXJFbmFibGVkIjsKIHN0YXRp
YyBjb25zdCBjaGFyIGRlYnVnZ2VyRW5hYmxlZFtdID0gImRlYnVnZ2VyRW5hYmxlZCI7CiB9CkBA
IC0xNjIsNiArMTI0LDcgQEAgSW5zcGVjdG9yQWdlbnQ6Okluc3BlY3RvckFnZW50KFBhZ2UqIHBh
Z2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50LCBJbmplY3RlZFNjcmkKICAgICBBU1NFUlRfQVJH
KHBhZ2UsIHBhZ2UpOwogICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOwogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6YmluZEluc3BlY3RvckFnZW50KG1faW5zcGVjdGVkUGFnZSwg
dGhpcyk7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JBZ2VudCh0aGlz
KTsKIAogICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+
aW5pdCh0aGlzCiAgICAgICAgICwgbV9jb25zb2xlQWdlbnQuZ2V0KCkKQEAgLTE3OSw3ICsxNDIs
NiBAQCBJbnNwZWN0b3JBZ2VudDo6fkluc3BlY3RvckFnZW50KCkKICAgICAvLyBUaGVzZSBzaG91
bGQgaGF2ZSBiZWVuIGNsZWFyZWQgaW4gaW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpLgogICAgIEFT
U0VSVCghbV9jbGllbnQpOwogICAgIEFTU0VSVCghbV9pbnNwZWN0ZWRQYWdlKTsKLSAgICBBU1NF
UlQoIW1faGlnaGxpZ2h0ZWROb2RlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVj
dGVkUGFnZURlc3Ryb3llZCgpCkBAIC0xODksOSArMTUxLDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpCiAgICAgICAgIGRpc2Nvbm5lY3RGcm9udGVuZCgp
OwogICAgIH0KIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIGhpZGVIaWdobGlnaHQoJmVy
cm9yKTsKLQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIG1fYnJvd3NlckRl
YnVnZ2VyQWdlbnQuY2xlYXIoKTsKICAgICBtX2RlYnVnZ2VyQWdlbnQuY2xlYXIoKTsKQEAgLTIw
OCwxMSArMTY3LDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdGVkUGFnZURlc3Ryb3ll
ZCgpCiAgICAgbV9jbGllbnQgPSAwOwogfQogCi1ib29sIEluc3BlY3RvckFnZW50OjpzZWFyY2hp
bmdGb3JOb2RlSW5QYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0ZS0+Z2V0Qm9vbGVh
bihJbnNwZWN0b3JBZ2VudFN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlKTsKLX0KLQogdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcm
IGluc3BlY3RvclN0YXRlQ29va2llKQogewogICAgIG1fc3RhdGUtPmxvYWRGcm9tQ29va2llKGlu
c3BlY3RvclN0YXRlQ29va2llKTsKQEAgLTI2Nyw2NCArMjIxLDYgQEAgdm9pZCBJbnNwZWN0b3JB
Z2VudDo6Zm9jdXNOb2RlKCkKICAgICBpbmplY3RlZFNjcmlwdC5pbnNwZWN0Tm9kZShub2RlLmdl
dCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6aGlnaGxpZ2h0KEVycm9yU3RyaW5nKiwg
Tm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IEFTU0VSVF9BUkcobm9kZSwgbm9kZSk7Ci0gICAgbV9oaWdobGlnaHRlZE5vZGUgPSBub2RlOwot
ICAgIG1fY2xpZW50LT5oaWdobGlnaHQobm9kZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQWdlbnQ6
OmhpZ2hsaWdodERPTU5vZGUoRXJyb3JTdHJpbmcqIGVycm9yLCBpbnQgbm9kZUlkKQotewotICAg
IE5vZGUqIG5vZGUgPSAwOwotICAgIGlmIChtX2RvbUFnZW50ICYmIChub2RlID0gbV9kb21BZ2Vu
dC0+bm9kZUZvcklkKG5vZGVJZCkpKQotICAgICAgICBoaWdobGlnaHQoZXJyb3IsIG5vZGUpOwot
fQotCi12b2lkIEluc3BlY3RvckFnZW50OjpoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyogZXJy
b3IsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBtX3Jlc291
cmNlQWdlbnQtPmZyYW1lRm9ySWQoZnJhbWVJZCk7Ci0gICAgaWYgKGZyYW1lICYmIGZyYW1lLT5v
d25lckVsZW1lbnQoKSkKLSAgICAgICAgaGlnaGxpZ2h0KGVycm9yLCBmcmFtZS0+b3duZXJFbGVt
ZW50KCkpOwotfQotCi12b2lkIEluc3BlY3RvckFnZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3Ry
aW5nKikKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faGln
aGxpZ2h0ZWROb2RlID0gMDsKLSAgICBtX2NsaWVudC0+aGlkZUhpZ2hsaWdodCgpOwotfQotCi12
b2lkIEluc3BlY3RvckFnZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkKQotewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFzZWFy
Y2hpbmdGb3JOb2RlSW5QYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIG5vZGUg
PSByZXN1bHQuaW5uZXJOb2RlKCk7Ci0gICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpURVhUX05PREUpCi0gICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7
Ci0gICAgaWYgKG5vZGUpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgICAgIGhp
Z2hsaWdodCgmZXJyb3IsIG5vZGUpOwotICAgIH0KLX0KLQotYm9vbCBJbnNwZWN0b3JBZ2VudDo6
aGFuZGxlTW91c2VQcmVzcygpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwgIXNlYXJjaGluZ0Zv
ck5vZGVJblBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1faGlnaGxp
Z2h0ZWROb2RlKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9oaWdobGlnaHRlZE5v
ZGU7Ci0gICAgICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOwotICAgICAgICBpbnNwZWN0
KG5vZGUuZ2V0KCkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBJbnNwZWN0
b3JBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3Jh
cHBlcldvcmxkKiB3b3JsZCkKIHsKICAgICBpZiAod29ybGQgIT0gbWFpblRocmVhZE5vcm1hbFdv
cmxkKCkpCkBAIC0zNDcsMjMgKzI0Myw2IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZENsZWFy
V2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCoKICAgICAg
ICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdFNjcmlwdChtX2luc3BlY3RvckV4dGVu
c2lvbkFQSSwgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JBZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKHNl
YXJjaGluZ0Zvck5vZGVJblBhZ2UoKSA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JBZ2VudFN0YXRlOjpzZWFyY2hpbmdGb3JOb2Rl
LCBlbmFibGVkKTsKLSAgICBpZiAoIWVuYWJsZWQpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgZXJy
b3I7Ci0gICAgICAgIGhpZGVIaWdobGlnaHQoJmVycm9yKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBib29sIGVuYWJs
ZWQsIGJvb2wqIG5ld1N0YXRlKQotewotICAgICpuZXdTdGF0ZSA9IGVuYWJsZWQ7Ci0gICAgc2V0
U2VhcmNoaW5nRm9yTm9kZShlbmFibGVkKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0
RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqIGluc3BlY3RvckZyb250ZW5kKQogewogICAgIC8v
IFdlIGNhbiByZWNvbm5lY3QgdG8gZXhpc3RpbmcgZnJvbnQtZW5kIC0+IHVubXV0ZSBzdGF0ZS4K
QEAgLTQyMywxNSArMzAyLDEyIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Nvbm5lY3RGcm9u
dGVuZCgpCiAKICAgICBtX2Zyb250ZW5kID0gMDsKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIG1fZGVidWdnZXJBZ2VudC0+Y2xl
YXJGcm9udGVuZCgpOwogICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQtPmNsZWFyRnJvbnRlbmQo
KTsKICAgICBtX3Byb2ZpbGVyQWdlbnQtPmNsZWFyRnJvbnRlbmQoKTsKICNlbmRpZgotICAgIHNl
dFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOwogCi0gICAgaGlkZUhpZ2hsaWdodCgmZXJyb3IpOwog
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgbV9hcHBsaWNhdGlvbkNh
Y2hlQWdlbnQtPmNsZWFyRnJvbnRlbmQoKTsKICNlbmRpZgpAQCAtNjk4LDI0OSArNTc0LDYgQEAg
dm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChFcnJvclN0
cmluZyosIGxvbmcgY2FsbElkLCBjb24KICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKLXN0YXRp
YyBQYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQotewotICAgIFBhdGggcXVh
ZFBhdGg7Ci0gICAgcXVhZFBhdGgubW92ZVRvKHF1YWQucDEoKSk7Ci0gICAgcXVhZFBhdGguYWRk
TGluZVRvKHF1YWQucDIoKSk7Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDMoKSk7Ci0g
ICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDQoKSk7Ci0gICAgcXVhZFBhdGguY2xvc2VTdWJw
YXRoKCk7Ci0gICAgcmV0dXJuIHF1YWRQYXRoOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3T3V0bGlu
ZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBj
b25zdCBDb2xvciYgZmlsbENvbG9yKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQgb3V0bGluZVRo
aWNrbmVzcyA9IDI7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIG91dGxpbmVDb2xvcig2MiwgODYs
IDE4MCwgMjI4KTsKLQotICAgIFBhdGggcXVhZFBhdGggPSBxdWFkVG9QYXRoKHF1YWQpOwotCi0g
ICAgLy8gQ2xpcCBvdXQgdGhlIHF1YWQsIHRoZW4gZHJhdyB3aXRoIGEgMnB4IHN0cm9rZSB0byBn
ZXQgYSBwaXhlbAotICAgIC8vIG9mIG91dGxpbmUgKGJlY2F1c2UgaW5mbGF0aW5nIGEgcXVhZCBp
cyBoYXJkKQotICAgIHsKLSAgICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQu
Y2xpcE91dChxdWFkUGF0aCk7Ci0KLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mo
b3V0bGluZVRoaWNrbmVzcyk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3V0bGlu
ZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4dC5zdHJva2VQYXRo
KHF1YWRQYXRoKTsKLQotICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICAv
LyBOb3cgZG8gdGhlIGZpbGwKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQuZmlsbFBhdGgocXVhZFBhdGgpOwotfQot
Ci1zdGF0aWMgdm9pZCBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgY2xpcFF1YWQs
IGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCi17Ci0gICAgY29udGV4dC5zYXZlKCk7Ci0gICAgUGF0
aCBjbGlwUXVhZFBhdGggPSBxdWFkVG9QYXRoKGNsaXBRdWFkKTsKLSAgICBjb250ZXh0LmNsaXBP
dXQoY2xpcFF1YWRQYXRoKTsKLSAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIHF1YWQsIGZp
bGxDb2xvcik7Ci0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdI
aWdobGlnaHRGb3JCb3goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQm
IGNvbnRlbnRRdWFkLCBjb25zdCBGbG9hdFF1YWQmIHBhZGRpbmdRdWFkLCBjb25zdCBGbG9hdFF1
YWQmIGJvcmRlclF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgbWFyZ2luUXVhZCkKLXsKLSAgICBzdGF0
aWMgY29uc3QgQ29sb3IgY29udGVudEJveENvbG9yKDEyNSwgMTczLCAyMTcsIDEyOCk7Ci0gICAg
c3RhdGljIGNvbnN0IENvbG9yIHBhZGRpbmdCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxNjApOwot
ICAgIHN0YXRpYyBjb25zdCBDb2xvciBib3JkZXJCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxOTIp
OwotICAgIHN0YXRpYyBjb25zdCBDb2xvciBtYXJnaW5Cb3hDb2xvcigxMjUsIDE3MywgMjE3LCAy
MjgpOwotCi0gICAgaWYgKG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkKLSAgICAgICAgZHJhd091
dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIG1hcmdp
bkJveENvbG9yKTsKLSAgICBpZiAoYm9yZGVyUXVhZCAhPSBwYWRkaW5nUXVhZCkKLSAgICAgICAg
ZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIGJvcmRlclF1YWQsIHBhZGRpbmdRdWFk
LCBib3JkZXJCb3hDb2xvcik7Ci0gICAgaWYgKHBhZGRpbmdRdWFkICE9IGNvbnRlbnRRdWFkKQot
ICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgcGFkZGluZ1F1YWQsIGNv
bnRlbnRRdWFkLCBwYWRkaW5nQm94Q29sb3IpOwotCi0gICAgZHJhd091dGxpbmVkUXVhZChjb250
ZXh0LCBjb250ZW50UXVhZCwgY29udGVudEJveENvbG9yKTsKLX0KLQotc3RhdGljIHZvaWQgZHJh
d0hpZ2hsaWdodEZvckxpbmVCb3hlc09yU1ZHUmVuZGVyZXIoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgbGluZUJveFF1YWRzKQotewotICAgIHN0YXRp
YyBjb25zdCBDb2xvciBsaW5lQm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMTI4KTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGluZUJveFF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICBk
cmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIGxpbmVCb3hRdWFkc1tpXSwgbGluZUJveENvbG9yKTsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvbnZlcnRGcm9tRnJhbWVUb01haW5GcmFtZShGcmFt
ZSogZnJhbWUsIEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmVjdCA9IGZyYW1lLT5wYWdlKCktPm1h
aW5GcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZnJhbWUtPnZpZXcoKS0+Y29udGVu
dHNUb1dpbmRvdyhyZWN0KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBmcmFtZVRvTWFp
bkZyYW1lT2Zmc2V0KEZyYW1lKiBmcmFtZSkKLXsKLSAgICBJbnRQb2ludCBtYWluRnJhbWVQb2lu
dCA9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMo
ZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhJbnRQb2ludCgpKSk7Ci0gICAgcmV0dXJu
IG1haW5GcmFtZVBvaW50IC0gSW50UG9pbnQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JBZ2VudDo6
ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAg
IGlmICghbV9oaWdobGlnaHRlZE5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBtX2hpZ2hsaWdodGVkTm9kZS0+cmVuZGVyZXIoKTsKLSAgICBGcmFt
ZSogY29udGFpbmluZ0ZyYW1lID0gbV9oaWdobGlnaHRlZE5vZGUtPmRvY3VtZW50KCktPmZyYW1l
KCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhY29udGFpbmluZ0ZyYW1lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBJbnRTaXplIG1haW5GcmFtZU9mZnNldCA9IGZyYW1lVG9NYWluRnJhbWVPZmZz
ZXQoY29udGFpbmluZ0ZyYW1lKTsKLSAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gcmVuZGVyZXIt
PmFic29sdXRlQm91bmRpbmdCb3hSZWN0KHRydWUpOwotICAgIGJvdW5kaW5nQm94Lm1vdmUobWFp
bkZyYW1lT2Zmc2V0KTsKLQotICAgIEludFJlY3QgdGl0bGVBbmNob3JCb3ggPSBib3VuZGluZ0Jv
eDsKLQotICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwotCi0gICAgRnJhbWVWaWV3KiB2aWV3
ID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIEZsb2F0UmVjdCBv
dmVybGF5UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgIGlmICghb3Zlcmxh
eVJlY3QuY29udGFpbnMoYm91bmRpbmdCb3gpICYmICFib3VuZGluZ0JveC5jb250YWlucyhlbmNs
b3NpbmdJbnRSZWN0KG92ZXJsYXlSZWN0KSkpCi0gICAgICAgIG92ZXJsYXlSZWN0ID0gdmlldy0+
dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgY29udGV4dC50cmFuc2xhdGUoLW92ZXJsYXlSZWN0
LngoKSwgLW92ZXJsYXlSZWN0LnkoKSk7Ci0KLSAgICAvLyBSZW5kZXJTVkdSb290IHNob3VsZCBi
ZSBoaWdobGlnaHRlZCB0aHJvdWdoIHRoZSBpc0JveCgpIGNvZGUgcGF0aCwgYWxsIG90aGVyIFNW
RyBlbGVtZW50cyBzaG91bGQganVzdCBkdW1wIHRoZWlyIGFic29sdXRlUXVhZHMoKS4KLSNpZiBF
TkFCTEUoU1ZHKQotICAgIGJvb2wgaXNTVkdSZW5kZXJlciA9IHJlbmRlcmVyLT5ub2RlKCkgJiYg
cmVuZGVyZXItPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1Jvb3Qo
KTsKLSNlbHNlCi0gICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gZmFsc2U7Ci0jZW5kaWYKLQotICAg
IGlmIChyZW5kZXJlci0+aXNCb3goKSAmJiAhaXNTVkdSZW5kZXJlcikgewotICAgICAgICBSZW5k
ZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKLQotICAgICAgICBJbnRS
ZWN0IGNvbnRlbnRCb3ggPSByZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7Ci0KLSAgICAgICAg
SW50UmVjdCBwYWRkaW5nQm94KGNvbnRlbnRCb3gueCgpIC0gcmVuZGVyQm94LT5wYWRkaW5nTGVm
dCgpLCBjb250ZW50Qm94LnkoKSAtIHJlbmRlckJveC0+cGFkZGluZ1RvcCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGVudEJveC53aWR0aCgpICsgcmVuZGVyQm94LT5wYWRkaW5n
TGVmdCgpICsgcmVuZGVyQm94LT5wYWRkaW5nUmlnaHQoKSwgY29udGVudEJveC5oZWlnaHQoKSAr
IHJlbmRlckJveC0+cGFkZGluZ1RvcCgpICsgcmVuZGVyQm94LT5wYWRkaW5nQm90dG9tKCkpOwot
ICAgICAgICBJbnRSZWN0IGJvcmRlckJveChwYWRkaW5nQm94LngoKSAtIHJlbmRlckJveC0+Ym9y
ZGVyTGVmdCgpLCBwYWRkaW5nQm94LnkoKSAtIHJlbmRlckJveC0+Ym9yZGVyVG9wKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdCb3gud2lkdGgoKSArIHJlbmRlckJveC0+Ym9y
ZGVyTGVmdCgpICsgcmVuZGVyQm94LT5ib3JkZXJSaWdodCgpLCBwYWRkaW5nQm94LmhlaWdodCgp
ICsgcmVuZGVyQm94LT5ib3JkZXJUb3AoKSArIHJlbmRlckJveC0+Ym9yZGVyQm90dG9tKCkpOwot
ICAgICAgICBJbnRSZWN0IG1hcmdpbkJveChib3JkZXJCb3gueCgpIC0gcmVuZGVyQm94LT5tYXJn
aW5MZWZ0KCksIGJvcmRlckJveC55KCkgLSByZW5kZXJCb3gtPm1hcmdpblRvcCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lkdGgoKSArIHJlbmRlckJveC0+bWFyZ2lu
TGVmdCgpICsgcmVuZGVyQm94LT5tYXJnaW5SaWdodCgpLCBib3JkZXJCb3guaGVpZ2h0KCkgKyBy
ZW5kZXJCb3gtPm1hcmdpblRvcCgpICsgcmVuZGVyQm94LT5tYXJnaW5Cb3R0b20oKSk7Ci0KLQot
ICAgICAgICBGbG9hdFF1YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRSZWN0KGNvbnRlbnRCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic1Bh
ZGRpbmdRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChwYWRk
aW5nQm94KSk7Ci0gICAgICAgIEZsb2F0UXVhZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVyQm94LT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3JkZXJCb3gpKTsKLSAgICAgICAgRmxvYXRR
dWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRS
ZWN0KG1hcmdpbkJveCkpOwotCi0gICAgICAgIGFic0NvbnRlbnRRdWFkLm1vdmUobWFpbkZyYW1l
T2Zmc2V0KTsKLSAgICAgICAgYWJzUGFkZGluZ1F1YWQubW92ZShtYWluRnJhbWVPZmZzZXQpOwot
ICAgICAgICBhYnNCb3JkZXJRdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKLSAgICAgICAgYWJz
TWFyZ2luUXVhZC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7Ci0KLSAgICAgICAgdGl0bGVBbmNob3JC
b3ggPSBhYnNNYXJnaW5RdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0KLSAgICAgICAgZHJh
d0hpZ2hsaWdodEZvckJveChjb250ZXh0LCBhYnNDb250ZW50UXVhZCwgYWJzUGFkZGluZ1F1YWQs
IGFic0JvcmRlclF1YWQsIGFic01hcmdpblF1YWQpOwotICAgIH0gZWxzZSBpZiAocmVuZGVyZXIt
PmlzUmVuZGVySW5saW5lKCkgfHwgaXNTVkdSZW5kZXJlcikgewotICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHNob3cgbWFyZ2lucy9wYWRkaW5nL2JvcmRlciBmb3IgaW5saW5lcy4KLSAgICAg
ICAgVmVjdG9yPEZsb2F0UXVhZD4gbGluZUJveFF1YWRzOwotICAgICAgICByZW5kZXJlci0+YWJz
b2x1dGVRdWFkcyhsaW5lQm94UXVhZHMpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGluZUJveFF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbGluZUJveFF1YWRzW2ld
ICs9IG1haW5GcmFtZU9mZnNldDsKLQotICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yTGluZUJveGVz
T3JTVkdSZW5kZXJlcihjb250ZXh0LCBsaW5lQm94UXVhZHMpOwotICAgIH0KLQotICAgIC8vIERy
YXcgbm9kZSB0aXRsZSBpZiBuZWNlc3NhcnkuCi0KLSAgICBpZiAoIW1faGlnaGxpZ2h0ZWROb2Rl
LT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkNvcmU6OlNldHRp
bmdzKiBzZXR0aW5ncyA9IGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKTsKLSAgICBkcmF3RWxl
bWVudFRpdGxlKGNvbnRleHQsIGJvdW5kaW5nQm94LCB0aXRsZUFuY2hvckJveCwgb3ZlcmxheVJl
Y3QsIHNldHRpbmdzKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZHJhd0VsZW1lbnRUaXRs
ZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGJvdW5kaW5nQm94LCBj
b25zdCBJbnRSZWN0JiBhbmNob3JCb3gsIGNvbnN0IEZsb2F0UmVjdCYgb3ZlcmxheVJlY3QsIFdl
YkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50
IHJlY3RJbmZsYXRlUHggPSA0OwotICAgIHN0YXRpYyBjb25zdCBpbnQgZm9udEhlaWdodFB4ID0g
MTI7Ci0gICAgc3RhdGljIGNvbnN0IGludCBib3JkZXJXaWR0aFB4ID0gMTsKLSAgICBzdGF0aWMg
Y29uc3QgQ29sb3IgdG9vbHRpcEJhY2tncm91bmRDb2xvcigyNTUsIDI1NSwgMTk0LCAyNTUpOwot
ICAgIHN0YXRpYyBjb25zdCBDb2xvciB0b29sdGlwQm9yZGVyQ29sb3IoQ29sb3I6OmJsYWNrKTsK
LSAgICBzdGF0aWMgY29uc3QgQ29sb3IgdG9vbHRpcEZvbnRDb2xvcihDb2xvcjo6YmxhY2spOwot
Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX2hpZ2hsaWdo
dGVkTm9kZS5nZXQoKSk7Ci0gICAgYm9vbCBpc1hIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+
aXNYSFRNTERvY3VtZW50KCk7Ci0gICAgU3RyaW5nIG5vZGVUaXRsZSA9IGlzWEhUTUwgPyBlbGVt
ZW50LT5ub2RlTmFtZSgpIDogZWxlbWVudC0+bm9kZU5hbWUoKS5sb3dlcigpOwotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgaWRWYWx1ZSA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7Ci0gICAg
aWYgKCFpZFZhbHVlLmlzTnVsbCgpICYmICFpZFZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBu
b2RlVGl0bGUgKz0gIiMiOwotICAgICAgICBub2RlVGl0bGUgKz0gaWRWYWx1ZTsKLSAgICB9Ci0g
ICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkp
IHsKLSAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lc1N0cmluZyA9IHN0
YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpOwotICAgICAg
ICBzaXplX3QgY2xhc3NOYW1lQ291bnQgPSBjbGFzc05hbWVzU3RyaW5nLnNpemUoKTsKLSAgICAg
ICAgaWYgKGNsYXNzTmFtZUNvdW50KSB7Ci0gICAgICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Zz4gdXNlZENsYXNzTmFtZXM7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNs
YXNzTmFtZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNTdHJpbmdbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHVz
ZWRDbGFzc05hbWVzLmNvbnRhaW5zKGNsYXNzTmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIHVzZWRDbGFzc05hbWVzLmFkZChjbGFzc05hbWUpOwot
ICAgICAgICAgICAgICAgIG5vZGVUaXRsZSArPSAiLiI7Ci0gICAgICAgICAgICAgICAgbm9kZVRp
dGxlICs9IGNsYXNzTmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IG5vZGVUaXRsZSArPSAiIFsiOwotICAgIG5vZGVUaXRsZSArPSBTdHJpbmc6Om51bWJlcihib3Vu
ZGluZ0JveC53aWR0aCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFy
PigweDAwRDcpKTsgLy8gJnRpbWVzOwotICAgIG5vZGVUaXRsZSArPSBTdHJpbmc6Om51bWJlcihi
b3VuZGluZ0JveC5oZWlnaHQoKSk7Ci0gICAgbm9kZVRpdGxlICs9ICJdIjsKLQotICAgIEZvbnRE
ZXNjcmlwdGlvbiBkZXNjOwotICAgIEZvbnRGYW1pbHkgZmFtaWx5OwotICAgIGZhbWlseS5zZXRG
YW1pbHkoc2V0dGluZ3MtPmZpeGVkRm9udEZhbWlseSgpKTsKLSAgICBkZXNjLnNldEZhbWlseShm
YW1pbHkpOwotICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKGZvbnRIZWlnaHRQeCk7Ci0gICAgRm9u
dCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKLSAgICBmb250LnVwZGF0ZSgwKTsKLQotICAgIFRl
eHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZSk7Ci0gICAgSW50UG9pbnQgdGl0bGVCYXNlUG9p
bnQgPSBJbnRQb2ludChhbmNob3JCb3gueCgpLCBhbmNob3JCb3gubWF4WSgpIC0gMSk7Ci0gICAg
dGl0bGVCYXNlUG9pbnQubW92ZShyZWN0SW5mbGF0ZVB4LCByZWN0SW5mbGF0ZVB4KTsKLSAgICBJ
bnRSZWN0IHRpdGxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9y
VGV4dChub2RlVGl0bGVSdW4sIHRpdGxlQmFzZVBvaW50LCBmb250SGVpZ2h0UHgpKTsKLSAgICB0
aXRsZVJlY3QuaW5mbGF0ZShyZWN0SW5mbGF0ZVB4KTsKLQotICAgIC8vIFRoZSBpbml0aWFsIG9m
ZnNldHMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIGEgMXB4LXRoaWNrIGJvcmRlciBzdHJva2Ug
KHdoaWNoIGlzIG5vdCBhIHBhcnQgb2YgdGhlIHJlY3RhbmdsZSkuCi0gICAgaW50IGR4ID0gLWJv
cmRlcldpZHRoUHg7Ci0gICAgaW50IGR5ID0gYm9yZGVyV2lkdGhQeDsKLQotICAgIC8vIElmIHRo
ZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgcmlnaHQgb2Ygb3ZlcmxheVJlY3QsIHJpZ2h0LWFsaWdu
IHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICBpZiAodGl0bGVSZWN0Lm1heFgo
KSA+IG92ZXJsYXlSZWN0Lm1heFgoKSkKLSAgICAgICAgZHggPSBvdmVybGF5UmVjdC5tYXhYKCkg
LSB0aXRsZVJlY3QubWF4WCgpOwotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRo
ZSBsZWZ0IG9mIG92ZXJsYXlSZWN0LCBsZWZ0LWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBi
b3VuZGFyeS4KLSAgICBpZiAodGl0bGVSZWN0LngoKSArIGR4IDwgb3ZlcmxheVJlY3QueCgpKQot
ICAgICAgICBkeCA9IG92ZXJsYXlSZWN0LngoKSAtIHRpdGxlUmVjdC54KCkgLSBib3JkZXJXaWR0
aFB4OwotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSBib3R0b20gb2Ygb3Zl
cmxheVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2YgYm91bmRpbmcgYm94LgotICAgIGlmICh0
aXRsZVJlY3QubWF4WSgpID4gb3ZlcmxheVJlY3QubWF4WSgpKSB7Ci0gICAgICAgIGR5ID0gYW5j
aG9yQm94LnkoKSAtIHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwotICAgICAgICAv
LyBJZiB0aGUgdGlwIHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVj
dCwgYm90dG9tLWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAg
aWYgKHRpdGxlUmVjdC5tYXhZKCkgKyBkeSA+IG92ZXJsYXlSZWN0Lm1heFkoKSkKLSAgICAgICAg
ICAgIGR5ID0gb3ZlcmxheVJlY3QubWF4WSgpIC0gdGl0bGVSZWN0Lm1heFkoKTsKLSAgICB9Ci0K
LSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHRvcCBvZiBvdmVybGF5UmVjdCwg
c2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBvdmVybGF5UmVjdC4KLSAgICBpZiAodGl0bGVSZWN0Lnko
KSArIGR5IDwgb3ZlcmxheVJlY3QueSgpKQotICAgICAgICBkeSA9IG92ZXJsYXlSZWN0LnkoKSAt
IHRpdGxlUmVjdC55KCkgKyBib3JkZXJXaWR0aFB4OwotCi0gICAgdGl0bGVSZWN0Lm1vdmUoZHgs
IGR5KTsKLSAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHRvb2x0aXBCb3JkZXJDb2xvciwgQ29s
b3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVy
V2lkdGhQeCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG9vbHRpcEJhY2tncm91bmRDb2xv
ciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5kcmF3UmVjdCh0aXRsZVJlY3Qp
OwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvb2x0aXBGb250Q29sb3IsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOwotICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgbm9kZVRpdGxlUnVuLCBJbnRQ
b2ludCh0aXRsZVJlY3QueCgpICsgcmVjdEluZmxhdGVQeCwgdGl0bGVSZWN0LnkoKSArIGZvbnQu
Zm9udE1ldHJpY3MoKS5oZWlnaHQoKSkpOwotfQotCiB2b2lkIEluc3BlY3RvckFnZW50OjpvcGVu
SW5JbnNwZWN0ZWRXaW5kb3coRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAg
ICBGcmFtZSogbWFpbkZyYW1lID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKaW5kZXggOGEyMmNjNzVmYTE4MjU1
MmIzMTY3OTBmMWQ1MzllOTk1OGU4NDQ2NS4uNjJjOWU4MjljZGZkNWNlMWJmMmJhNTdiYmNiNWVk
MzRmZmFkZjg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgK
QEAgLTUwLDkgKzUwLDcgQEAgY2xhc3MgRE9NV3JhcHBlcldvcmxkOwogY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKIGNsYXNzIEhUVFBIZWFkZXJNYXA7Ci1jbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xh
c3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CiBjbGFzcyBJ
bnNwZWN0b3JBcnJheTsKQEAgLTExNywxNCArMTE1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBy
ZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yQ29v
a2llKTsKIAotICAgIHZvaWQgaGlnaGxpZ2h0KEVycm9yU3RyaW5nKiwgTm9kZSopOwotICAgIHZv
aWQgaGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyopOwogICAgIHZvaWQgaW5zcGVjdChOb2RlKik7
Ci0gICAgdm9pZCBoaWdobGlnaHRET01Ob2RlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCk7Ci0g
ICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodChFcnJvclN0cmluZyogZXJyb3IpIHsgaGlkZUhp
Z2hsaWdodChlcnJvcik7IH0KLQotICAgIHZvaWQgaGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpOwotICAgIHZvaWQgaGlkZUZyYW1lSGlnaGxpZ2h0KEVy
cm9yU3RyaW5nKiBlcnJvcikgeyBoaWRlSGlnaGxpZ2h0KGVycm9yKTsgfQogCiAgICAgdm9pZCBz
ZXRGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCopOwogICAgIEluc3BlY3RvckZyb250ZW5kKiBm
cm9udGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRlbmQ7IH0KQEAgLTE1NCwxMCArMTQ1LDYg
QEAgcHVibGljOgogICAgIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYXBwbGljYXRp
b25DYWNoZUFnZW50KCkgeyByZXR1cm4gbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0KCk7IH0K
ICNlbmRpZgogCi0gICAgYm9vbCBoYW5kbGVNb3VzZVByZXNzKCk7Ci0gICAgYm9vbCBzZWFyY2hp
bmdGb3JOb2RlSW5QYWdlKCkgY29uc3Q7Ci0gICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVu
dChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7Ci0KICAgICB2
b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSosIERPTVdyYXBwZXJXb3JsZCop
OwogCiAgICAgdm9pZCBkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKik7CkBAIC0xNzgsOSAr
MTY1LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNGcm9udGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJvbnRlbmQ7IH0KIAotICAgIHZvaWQgZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAgICAgdm9pZCBvcGVuSW5JbnNwZWN0ZWRXaW5kb3coRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmIGJvdW5kaW5nQm94LCBjb25zdCBJbnRSZWN0JiBhbmNo
b3JCb3gsIGNvbnN0IEZsb2F0UmVjdCYgb3ZlcmxheVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKikg
Y29uc3Q7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICB2b2lkIHNob3dQ
cm9maWxlc1BhbmVsKCk7CkBAIC0xOTksNyArMTg0LDYgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0
SW5zcGVjdG9yU3RhdGUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHN0YXRlKTsKICAgICB2b2lk
IHNldE1vbml0b3JpbmdYSFJFbmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpOwog
ICAgIC8vIEZvbGxvd2luZyBhcmUgdXNlZCBmcm9tIEluc3BlY3RvckJhY2tlbmQgYW5kIGludGVy
bmFsbHkuCi0gICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5nKiwgYm9vbCBl
bmFibGVkLCBib29sKiBuZXdTdGF0ZSk7CiAgICAgdm9pZCBkaWRFdmFsdWF0ZUZvclRlc3RJbkZy
b250ZW5kKEVycm9yU3RyaW5nKiwgbG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYganNvblJlc3Vs
dCk7CiAKICAgICB2b2lkIHNldFVzZXJBZ2VudE92ZXJyaWRlKEVycm9yU3RyaW5nKiwgY29uc3Qg
U3RyaW5nJiB1c2VyQWdlbnQpOwpAQCAtMjA4LDcgKzE5Miw2IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgdm9pZCBzaG93UGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbCk7CiAgICAgdm9pZCB1bmJp
bmRBbGxSZXNvdXJjZXMoKTsKLSAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFi
bGVkKTsKIAogICAgIHZvaWQgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKICAgICB2
b2lkIGNyZWF0ZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKQEAgLTI0Nyw3ICsyMzAsNiBAQCBw
cml2YXRlOgogICAgIE93blB0cjxJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ+IG1fYXBw
bGljYXRpb25DYWNoZUFnZW50OwogI2VuZGlmCiAKLSAgICBSZWZQdHI8Tm9kZT4gbV9oaWdobGln
aHRlZE5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZVRvRm9jdXM7CiAgICAgUmVmUHRyPElu
c3BlY3RvclJlc291cmNlQWdlbnQ+IG1fcmVzb3VyY2VBZ2VudDsKICAgICBPd25QdHI8SW5zcGVj
dG9yUnVudGltZUFnZW50PiBtX3J1bnRpbWVBZ2VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAxZDUyZTE0NzcyOTRhNzM3YzM2
ZjNlMjMwOGM5MWZlYTM1NWVlOThmLi44MGE1ZTg5MGE3YzE0OTY4YjVhNzhiYjUzYTkxMTFhZWRm
OTJiZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQnJvd3NlckRl
YnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC0y
MDAsNyArMjAxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpldmFsdWF0ZUZvclRlc3RJ
bkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHMKIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7Ci0gICAgbV9pbnNwZWN0b3JBZ2VudC0+ZHJhd05vZGVIaWdobGlnaHQoY29udGV4dCk7
CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZG9tQWdlbnQoKS0+ZHJhd05vZGVIaWdobGlnaHQoY29u
dGV4dCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd0NvbnNvbGUoKQpAQCAt
MjUwLDcgKzI1MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzcGF0Y2hNZXNzYWdl
RnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6aGlkZUhpZ2hsaWdodCgpCiB7CiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgbV9p
bnNwZWN0b3JBZ2VudC0+aGlkZUhpZ2hsaWdodCgmZXJyb3IpOworICAgIG1faW5zcGVjdG9yQWdl
bnQtPmRvbUFnZW50KCktPmhpZGVIaWdobGlnaHQoJmVycm9yKTsKIH0KIAogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKaW5kZXggOTNmOTdkZmRiNjY1NDk2NjZlZGJhNDM2NmIxNmJmODUwOWQz
MjI0YS4uMWMxNjFhNWUxMDRkMjcxOTI4NTFmMDE2YmY2NjUyNTM0NThjYjQ1MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC00Nyw2ICs0
Nyw3IEBACiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgogI2luY2x1ZGUgIkNvb2tpZS5oIgog
I2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgog
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRUeXBlLmgiCkBAIC01NywxMCArNTgsMTQgQEAKICNpbmNsdWRlICJFdmVudFRhcmdl
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGll
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clJlc291cmNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUg
Ikluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCkBAIC05
Miw2ICs5Nyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBET01BZ2VudFN0
YXRlIHsKK3N0YXRpYyBjb25zdCBjaGFyIHNlYXJjaGluZ0Zvck5vZGVbXSA9ICJzZWFyY2hpbmdG
b3JOb2RlIjsKIHN0YXRpYyBjb25zdCBjaGFyIGRvY3VtZW50UmVxdWVzdGVkW10gPSAiZG9jdW1l
bnRSZXF1ZXN0ZWQiOwogfTsKIApAQCAtMjYyLDEyICsyNjgsMTUgQEAgSW5zcGVjdG9yRE9NQWdl
bnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMsIFAKICAgICAsIG1fZG9tTGlzdGVuZXIoMCkKICAgICAsIG1fbGFzdE5vZGVJZCgxKQog
ICAgICwgbV9tYXRjaEpvYnNUaW1lcih0aGlzLCAmSW5zcGVjdG9yRE9NQWdlbnQ6Om9uTWF0Y2hK
b2JzVGltZXIpCisgICAgLCBtX3NlYXJjaGluZ0Zvck5vZGUoZmFsc2UpCiB7CiB9CiAKIEluc3Bl
Y3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQoKQogewogICAgIHJlc2V0KCk7CisgICAg
QVNTRVJUKCFtX2hpZ2hsaWdodGVkTm9kZSk7CisgICAgQVNTRVJUKCFtX3NlYXJjaGluZ0Zvck5v
ZGUpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRGcm9udGVuZChJbnNwZWN0b3JG
cm9udGVuZCogZnJvbnRlbmQpCkBAIC0yODEsNiArMjkwLDExIEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldEZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQogewogICAgIEFTU0VSVChtX2Zyb250ZW5k
KTsKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKKworICAgIEVycm9yU3RyaW5nIGVy
cm9yOworICAgIGhpZGVIaWdobGlnaHQoJmVycm9yKTsKKwogICAgIG1fZnJvbnRlbmQgPSAwOwog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yRE9NQWdlbnQoMCk7CiAgICAg
bV9pbnNwZWN0b3JTdGF0ZS0+c2V0Qm9vbGVhbihET01BZ2VudFN0YXRlOjpkb2N1bWVudFJlcXVl
c3RlZCwgZmFsc2UpOwpAQCAtODczLDYgKzg4Nyw4MSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpjYW5jZWxTZWFyY2goRXJyb3JTdHJpbmcqKQogICAgIG1fc2VhcmNoUmVzdWx0cy5jbGVhcigp
OwogfQogCitib29sIEluc3BlY3RvckRPTUFnZW50OjpoYW5kbGVNb3VzZVByZXNzKCkKK3sKKyAg
ICBpZiAoIXNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG1faGlnaGxpZ2h0ZWROb2RlKSB7CisgICAgICAgIFJlZlB0cjxOb2RlPiBub2Rl
ID0gbV9oaWdobGlnaHRlZE5vZGU7CisgICAgICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2Up
OworICAgICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFnZW50KCktPmluc3Bl
Y3Qobm9kZS5nZXQoKSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEluc3Bl
Y3RvckRPTUFnZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIHVuc2lnbmVkKQoreworICAgIGlmICghc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBOb2RlKiBub2RlID0gcmVzdWx0LmlubmVyTm9kZSgp
OworICAgIHdoaWxlIChub2RlICYmIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RF
KQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgIGlmIChub2RlKSB7Cisg
ICAgICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgICAgICBoaWdobGlnaHQoJmVycm9yLCBub2Rl
KTsKKyAgICB9Cit9CisKK2Jvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OnNlYXJjaGluZ0Zvck5vZGVJ
blBhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlYXJjaGluZ0Zvck5vZGU7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKQor
eworICAgIGlmIChzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkgPT0gZW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fc2VhcmNoaW5nRm9yTm9kZSA9IGVuYWJsZWQ7CisgICAgaWYgKCFlbmFi
bGVkKSB7CisgICAgICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgICAgICBoaWRlSGlnaGxpZ2h0
KCZlcnJvcik7CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hp
bmdGb3JOb2RlKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKK3sK
KyAgICAqbmV3U3RhdGUgPSBlbmFibGVkOworICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZW5hYmxl
ZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodChFcnJvclN0cmluZyos
IE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUX0FSRyhub2RlLCBub2RlKTsKKyAgICBtX2hpZ2hs
aWdodGVkTm9kZSA9IG5vZGU7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JB
Z2VudCgpLT5pbnNwZWN0b3JDbGllbnQoKS0+aGlnaGxpZ2h0KG5vZGUpOworfQorCit2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRET01Ob2RlKEVycm9yU3RyaW5nKiBlcnJvciwgaW50
IG5vZGVJZCkKK3sKKyAgICBpZiAoTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpKQorICAg
ICAgICBoaWdobGlnaHQoZXJyb3IsIG5vZGUpOworfQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3Rv
clJlc291cmNlQWdlbnQoKS0+ZnJhbWVGb3JJZChmcmFtZUlkKTsKKyAgICBpZiAoZnJhbWUgJiYg
ZnJhbWUtPm93bmVyRWxlbWVudCgpKQorICAgICAgICBoaWdobGlnaHQoZXJyb3IsIGZyYW1lLT5v
d25lckVsZW1lbnQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGln
aHQoRXJyb3JTdHJpbmcqKQoreworICAgIG1faGlnaGxpZ2h0ZWROb2RlID0gMDsKKyAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFnZW50KCktPmluc3BlY3RvckNsaWVudCgpLT5o
aWRlSGlnaGxpZ2h0KCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2Rl
KEVycm9yU3RyaW5nKiBlcnJvciwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4q
IHJlc3VsdCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CkBAIC0xMjkw
LDYgKzEzNzksMTQgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFn
ZW50OjpyZXNvbHZlTm9kZShOb2RlKiBub2RlKQogICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53
cmFwTm9kZShub2RlKTsKIH0KIAordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZHJhd05vZGVIaWdo
bGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghbV9oaWdo
bGlnaHRlZE5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIERPTU5vZGVIaWdobGlnaHRlcjo6
RHJhd05vZGVIaWdobGlnaHQoY29udGV4dCwgbV9oaWdobGlnaHRlZE5vZGUuZ2V0KCkpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA4ZTk2
OWVkNDlmZWRmNTkzOTQ0MmNlOTFhOTM4NjFhODFhZDU0MmVmLi5kZmU3NjY5ZDI1MWNiOGQxNzQ0
ZDEyZDM4NTYxNjMzNWY4ZTlkZjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaApAQCAtNTMsOCArNTMsMTAgQEAgY2xhc3MgQ2hhcmFjdGVyRGF0YTsK
IGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEV2ZW50OworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OwogY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JG
cm9udGVuZDsKK2NsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBNYXRjaEpvYjsKIGNsYXNzIEhU
TUxFbGVtZW50OwogY2xhc3MgSW5zcGVjdG9yU3RhdGU7CkBAIC0xMjMsOCArMTI1LDE0IEBAIHB1
YmxpYzoKICAgICB2b2lkIHBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGJvb2wgcnVuU3luY2hyb25vdXNseSk7CiAgICAgdm9p
ZCBjYW5jZWxTZWFyY2goRXJyb3JTdHJpbmcqKTsKICAgICB2b2lkIHJlc29sdmVOb2RlKEVycm9y
U3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7Cisg
ICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFibGVkLCBi
b29sKiBuZXdTdGF0ZSk7CiAgICAgdm9pZCBwdXNoTm9kZVRvRnJvbnRlbmQoRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCk7CiAgICAgdm9pZCBwdXNoTm9k
ZUJ5UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHBhdGgsIGludCog
bm9kZUlkKTsKKyAgICB2b2lkIGhpZGVIaWdobGlnaHQoRXJyb3JTdHJpbmcqKTsKKyAgICB2b2lk
IGhpZ2hsaWdodERPTU5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkKTsKKyAgICB2b2lkIGhp
ZGVET01Ob2RlSGlnaGxpZ2h0KEVycm9yU3RyaW5nKiBlcnJvcikgeyBoaWRlSGlnaGxpZ2h0KGVy
cm9yKTsgfQorICAgIHZvaWQgaGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQpOworICAgIHZvaWQgaGlkZUZyYW1lSGlnaGxpZ2h0KEVycm9yU3RyaW5nKiBl
cnJvcikgeyBoaWRlSGlnaGxpZ2h0KGVycm9yKTsgfQogCiAgICAgLy8gTWV0aG9kcyBjYWxsZWQg
ZnJvbSB0aGUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLgogICAgIHZvaWQgc2V0RG9jdW1lbnQo
RG9jdW1lbnQqKTsKQEAgLTE0Nyw2ICsxNTUsMTEgQEAgcHVibGljOgogICAgIFN0cmluZyBkb2N1
bWVudFVSTFN0cmluZyhEb2N1bWVudCopIGNvbnN0OwogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc29sdmVOb2RlKE5vZGUqKTsKKyAgICBib29sIGhhbmRsZU1vdXNlUHJlc3Mo
KTsKKyAgICBib29sIHNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25zdDsKKyAgICB2b2lkIG1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2Rp
ZmllckZsYWdzKTsKKworICAgIHZvaWQgZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKICAgICAvLyBXZSByZXByZXNlbnQgZW1iZWRkZWQgZG9tcyBhcyBhIHBhcnQg
b2YgdGhlIHNhbWUgaGllcmFyY2h5LiBIZW5jZSB3ZSB0cmVhdCBjaGlsZHJlbiBvZiBmcmFtZSBv
d25lcnMgZGlmZmVyZW50bHkuCiAgICAgLy8gV2UgYWxzbyBza2lwIHdoaXRlc3BhY2UgdGV4dCBu
b2RlcyBjb25kaXRpb25hbGx5LiBGb2xsb3dpbmcgbWV0aG9kcyBlbmNhcHN1bGF0ZSB0aGVzZSBz
cGVjaWZpY3MuCkBAIC0xNjAsNiArMTczLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnNw
ZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvclN0YXRl
KiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CiAKKyAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5v
ZGUoYm9vbCBlbmFibGVkKTsKKyAgICB2b2lkIGhpZ2hsaWdodChFcnJvclN0cmluZyosIE5vZGUq
KTsKKwogICAgIC8vIE5vZGUtcmVsYXRlZCBtZXRob2RzLgogICAgIHR5cGVkZWYgSGFzaE1hcDxS
ZWZQdHI8Tm9kZT4sIGludD4gTm9kZVRvSWRNYXA7CiAgICAgaW50IGJpbmQoTm9kZSosIE5vZGVU
b0lkTWFwKik7CkBAIC0yMDcsNiArMjIzLDggQEAgcHJpdmF0ZToKICAgICBUaW1lcjxJbnNwZWN0
b3JET01BZ2VudD4gbV9tYXRjaEpvYnNUaW1lcjsKICAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPiA+
IG1fc2VhcmNoUmVzdWx0czsKICAgICBPd25QdHI8UmV2YWxpZGF0ZVN0eWxlQXR0cmlidXRlVGFz
az4gbV9yZXZhbGlkYXRlU3R5bGVBdHRyVGFzazsKKyAgICBSZWZQdHI8Tm9kZT4gbV9oaWdobGln
aHRlZE5vZGU7CisgICAgYm9vbCBtX3NlYXJjaGluZ0Zvck5vZGU7CiB9OwogCiAjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggZWU1YWY1ZmYyNjVjZDg2MGQwZGE3Yjdj
MTk4NWM0NWEwMTdjNmRmYi4uZWQxYjIwZGRkYjczOTAxNzNhYmU5ZDYyNmMxMjE1ZjNiM2U1MWY4
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5jcHAKQEAgLTE1OCwxMiArMTU4LDE5IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRySW1wbChJbnNwZWN0b3JBZ2VudCogaW5z
cGVjCiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptb3VzZURpZE1vdmVPdmVyRWxl
bWVudEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBjb25zdCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpCiB7Ci0gICAgaW5zcGVjdG9yQWdl
bnQtPm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHJlc3VsdCwgbW9kaWZpZXJGbGFncyk7CisgICAg
aWYgKCFpbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmRvbUFnZW50
KCkpCisgICAgICAgIGRvbUFnZW50LT5tb3VzZURpZE1vdmVPdmVyRWxlbWVudChyZXN1bHQsIG1v
ZGlmaWVyRmxhZ3MpOwogfQogCiBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxl
TW91c2VQcmVzc0ltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50KQogewotICAgIHJl
dHVybiBpbnNwZWN0b3JBZ2VudC0+aGFuZGxlTW91c2VQcmVzcygpOworICAgIEluc3BlY3RvckRP
TUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckFnZW50LT5kb21BZ2VudCgpOworICAgIGlmICgh
ZG9tQWdlbnQgfHwgIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gZG9tQWdlbnQtPmhhbmRsZU1vdXNlUHJlc3MoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNoYXJhY3RlckRhdGFNb2RpZmllZEltcGwoSW5z
cGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBDaGFyYWN0ZXJEYXRhKiBjaGFyYWN0ZXJEYXRh
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2Vu
dHMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmgKaW5k
ZXggYzUzZWYwMDM2OGVkNDA4OTNhMWUzNTY1OWE0ODcxNjUxNWU5NDIwNC4uYWEwYjZkNmMwOWFi
YjhmM2ViODM1MmM0MTg0MTQ2ZjQzOWQ4YTU1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5oCkBAIC0zNiw2ICszNiw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDsK
IGNsYXNzIEluc3BlY3RvckNTU0FnZW50OwpAQCAtNTQsNyArNTUsOCBAQCBjbGFzcyBJbnN0cnVt
ZW50aW5nQWdlbnRzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBJbnN0cnVtZW50aW5nQWdlbnRzKCkKLSAgICAgICAgOiBtX2luc3BlY3RvckNTU0FnZW50KDAp
CisgICAgICAgIDogbV9pbnNwZWN0b3JBZ2VudCgwKQorICAgICAgICAsIG1faW5zcGVjdG9yQ1NT
QWdlbnQoMCkKICAgICAgICAgLCBtX2luc3BlY3RvckNvbnNvbGVBZ2VudCgwKQogICAgICAgICAs
IG1faW5zcGVjdG9yRE9NQWdlbnQoMCkKICAgICAgICAgLCBtX2luc3BlY3RvclJlc291cmNlQWdl
bnQoMCkKQEAgLTc3LDYgKzc5LDkgQEAgcHVibGljOgogICAgIHsgfQogICAgIH5JbnN0cnVtZW50
aW5nQWdlbnRzKCkgeyB9CiAKKyAgICBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQoKSBj
b25zdCB7IHJldHVybiBtX2luc3BlY3RvckFnZW50OyB9CisgICAgdm9pZCBzZXRJbnNwZWN0b3JB
Z2VudChJbnNwZWN0b3JBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JBZ2VudCA9IGFnZW50OyB9
CisKICAgICBJbnNwZWN0b3JDU1NBZ2VudCogaW5zcGVjdG9yQ1NTQWdlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2luc3BlY3RvckNTU0FnZW50OyB9CiAgICAgdm9pZCBzZXRJbnNwZWN0b3JDU1NBZ2Vu
dChJbnNwZWN0b3JDU1NBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JDU1NBZ2VudCA9IGFnZW50
OyB9CiAKQEAgLTExOSw2ICsxMjQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAg
ICBJbnNwZWN0b3JBZ2VudCogbV9pbnNwZWN0b3JBZ2VudDsKICAgICBJbnNwZWN0b3JDU1NBZ2Vu
dCogbV9pbnNwZWN0b3JDU1NBZ2VudDsKICAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQqIG1faW5z
cGVjdG9yQ29uc29sZUFnZW50OwogICAgIEluc3BlY3RvckRPTUFnZW50KiBtX2luc3BlY3RvckRP
TUFnZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9F
bGVtZW50c1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVt
ZW50c1BhbmVsLmpzCmluZGV4IDg3ZTQ5MWJhZjg1ZjhhMDE0ZTY5ZjBiZWI1MmY1YjdiZDEyYzQ5
NzMuLjcyNGUwZTI4ZmNjODA5OTFkMmQxY2M5ODE2MmY4YzYxMjNjOTZhOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKQEAg
LTExMjgsNyArMTEyOCw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZSA9
IHsKIAogICAgIHNldFNlYXJjaGluZ0Zvck5vZGU6IGZ1bmN0aW9uKGVuYWJsZWQpCiAgICAgewot
ICAgICAgICBJbnNwZWN0b3JBZ2VudC5zZXRTZWFyY2hpbmdGb3JOb2RlKGVuYWJsZWQsIHRoaXMu
X3NldFNlYXJjaGluZ0Zvck5vZGUuYmluZCh0aGlzKSk7CisgICAgICAgIERPTUFnZW50LnNldFNl
YXJjaGluZ0Zvck5vZGUoZW5hYmxlZCwgdGhpcy5fc2V0U2VhcmNoaW5nRm9yTm9kZS5iaW5kKHRo
aXMpKTsKICAgICB9LAogCiAgICAgdG9nZ2xlU2VhcmNoaW5nRm9yTm9kZTogZnVuY3Rpb24oKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQ
YW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFu
ZWwuanMKaW5kZXggMDU5YWI0MGNiMmU2NTQyOGNjYTFkYjIyZjU5MjNhMTBhZDdkYWIwYy4uYTdi
YTBjYWM0MDFlMjUxOTQxMjY1Yzk5MDc4MWZjYWEyNWM5MzAwZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCkBAIC05MTAs
NyArOTEwLDcgQEAgV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewog
ICAgICAgICB0aGlzLl9zdG9yYWdlUGFuZWwuc2hvd0NhdGVnb3J5Vmlldyh0aGlzLl9kaXNwbGF5
TmFtZSk7CiAKICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygi
aG92ZXJlZCIpOwotICAgICAgICBJbnNwZWN0b3JBZ2VudC5oaWRlRnJhbWVIaWdobGlnaHQoKTsK
KyAgICAgICAgRE9NQWdlbnQuaGlkZUZyYW1lSGlnaGxpZ2h0KCk7CiAgICAgfSwKIAogICAgIGdl
dCBkaXNwbGF5TmFtZSgpCkBAIC05NDMsMTAgKzk0MywxMCBAQCBXZWJJbnNwZWN0b3IuRnJhbWVU
cmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBpZiAoaG92ZXJlZCkgewog
ICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaG92ZXJlZCIp
OwotICAgICAgICAgICAgSW5zcGVjdG9yQWdlbnQuaGlnaGxpZ2h0RnJhbWUodGhpcy5fZnJhbWVJ
ZCk7CisgICAgICAgICAgICBET01BZ2VudC5oaWdobGlnaHRGcmFtZSh0aGlzLl9mcmFtZUlkKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LnJlbW92
ZVN0eWxlQ2xhc3MoImhvdmVyZWQiKTsKLSAgICAgICAgICAgIEluc3BlY3RvckFnZW50LmhpZGVG
cmFtZUhpZ2hsaWdodCgpOworICAgICAgICAgICAgRE9NQWdlbnQuaGlkZUZyYW1lSGlnaGxpZ2h0
KCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDk1ZWEwNjNjMDA5OTJkNTM5MTYyMzI2MmUyNzEx
MGJkOGJkNGRkZmMuLmVlZGI4ZWEyM2FhOTk0MjdmY2Q2MDZjNDVkMzU4MjkxNjFlYzYzMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBA
IC0zMjgsOSArMzI4LDkgQEAgdmFyIFdlYkluc3BlY3RvciA9IHsKIAogICAgICAgICB0aGlzLl9o
aWdobGlnaHRlZERPTU5vZGVJZCA9IG5vZGVJZDsKICAgICAgICAgaWYgKG5vZGVJZCkKLSAgICAg
ICAgICAgIEluc3BlY3RvckFnZW50LmhpZ2hsaWdodERPTU5vZGUobm9kZUlkKTsKKyAgICAgICAg
ICAgIERPTUFnZW50LmhpZ2hsaWdodERPTU5vZGUobm9kZUlkKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgSW5zcGVjdG9yQWdlbnQuaGlkZURPTU5vZGVIaWdobGlnaHQoKTsKKyAgICAgICAg
ICAgIERPTUFnZW50LmhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7CiAgICAgfSwKIAogICAgIGhpZ2hs
aWdodERPTU5vZGVGb3JUd29TZWNvbmRzOiBmdW5jdGlvbihub2RlSWQpCg==
</data>
<flag name="review"
          id="78900"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>