<?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>57168</bug_id>
          
          <creation_ts>2011-03-26 14:41:51 -0700</creation_ts>
          <short_desc>Introduce EventDispatcher, the new common way to fire events.</short_desc>
          <delta_ts>2011-03-28 10:13:57 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>55515</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>374000</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-26 14:41:51 -0700</bug_when>
    <thetext>Introduce EventDispatcher, the new common way to fire events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374001</commentid>
    <comment_count>1</comment_count>
      <attachid>87048</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-26 14:50:09 -0700</bug_when>
    <thetext>Created attachment 87048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374032</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-03-26 20:04:31 -0700</bug_when>
    <thetext>Given how much of EventDispatcher.cpp comes from Node.cpp, it seems like it should probably use Node.cpp&apos;s license header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374033</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-26 20:06:05 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Given how much of EventDispatcher.cpp comes from Node.cpp, it seems like it should probably use Node.cpp&apos;s license header.

Ah, good point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374034</commentid>
    <comment_count>4</comment_count>
      <attachid>87053</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-26 20:09:23 -0700</bug_when>
    <thetext>Created attachment 87053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374035</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-26 20:10:22 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Given how much of EventDispatcher.cpp comes from Node.cpp, it seems like it should probably use Node.cpp&apos;s license header.
&gt; 
&gt; Ah, good point.

License header updated. I also changed one for .h, because why not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374040</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-26 21:22:08 -0700</bug_when>
    <thetext>Also related: bug 56410 about EventHandler cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374073</commentid>
    <comment_count>7</comment_count>
      <attachid>87053</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-27 01:03:17 -0700</bug_when>
    <thetext>Comment on attachment 87053
Patch

I really like this idea.  Is this this moving code?  Or do I need to carefullly review each line?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374074</commentid>
    <comment_count>8</comment_count>
      <attachid>87053</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-27 01:04:17 -0700</bug_when>
    <thetext>Comment on attachment 87053
Patch

This is a depressing amount of header imports, btw.  Suggesting that this class is still knows more than it should.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374126</commentid>
    <comment_count>9</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-27 07:14:50 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 87053 [details])
&gt; I really like this idea.  Is this this moving code?  Or do I need to carefullly review each line?

This is mostly just moving code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374129</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-27 07:15:50 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 87053 [details])
&gt; This is a depressing amount of header imports, btw.  Suggesting that this class is still knows more than it should.

Yeah. I&apos;ve been experimenting with something like EventDispatcher&lt;Event&gt;, where Events has lifecycle hooks that are called at specific times, but it looks fuglier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374136</commentid>
    <comment_count>11</comment_count>
      <attachid>87053</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-27 07:46:16 -0700</bug_when>
    <thetext>Comment on attachment 87053
Patch

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

&gt; Source/WebCore/dom/EventDispatcher.cpp:150
&gt; +    if (!m_node-&gt;inDocument() || m_ancestors.size())

This is the only non-obvious bit. Some events come in troves, with multiple events dispatched as a result of one &quot;dispatchFoo&quot;. Because they are now scoped to the same EventDispatcher, the ancestor chain calculation happens only once (yay!). So we need this extra check for size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374535</commentid>
    <comment_count>12</comment_count>
      <attachid>87053</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-28 09:24:12 -0700</bug_when>
    <thetext>Comment on attachment 87053
Patch

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

&gt;&gt; Source/WebCore/dom/EventDispatcher.cpp:150
&gt;&gt; +    if (!m_node-&gt;inDocument() || m_ancestors.size())
&gt; 
&gt; This is the only non-obvious bit. Some events come in troves, with multiple events dispatched as a result of one &quot;dispatchFoo&quot;. Because they are now scoped to the same EventDispatcher, the ancestor chain calculation happens only once (yay!). So we need this extra check for size.

Maybe this needs a comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374546</commentid>
    <comment_count>13</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-28 09:36:50 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 87053 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=87053&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/dom/EventDispatcher.cpp:150
&gt; &gt;&gt; +    if (!m_node-&gt;inDocument() || m_ancestors.size())
&gt; &gt; 
&gt; &gt; This is the only non-obvious bit. Some events come in troves, with multiple events dispatched as a result of one &quot;dispatchFoo&quot;. Because they are now scoped to the same EventDispatcher, the ancestor chain calculation happens only once (yay!). So we need this extra check for size.
&gt; 
&gt; Maybe this needs a comment?

Even better, I&apos;ll turn it into a function explaining what&apos;s going on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374569</commentid>
    <comment_count>14</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-28 10:01:31 -0700</bug_when>
    <thetext>Committed r82127: &lt;http://trac.webkit.org/changeset/82127&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374579</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-28 10:13:57 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/82127 might have broken Qt Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87048</attachid>
            <date>2011-03-26 14:50:09 -0700</date>
            <delta_ts>2011-03-26 20:09:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57168-20110326145008.patch</filename>
            <type>text/plain</type>
            <size>46078</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE5NzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDFhODQxOTBlOGE3OTli
NDlhYzg0NTM2YmM2YzQ3Y2FkMGE5MmE0MTkuLmVkMzNhY2VhZWU0NDE1NmQ4YjUyNzEzMzdmYzFm
MmEwYzIwZTI2NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtMTMxLDYgKzEzMSw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCWRvbS9FcnJvckV2ZW50LmNwcCBcCiAJZG9t
L0V2ZW50LmNwcCBcCiAJZG9tL0V2ZW50Q29udGV4dC5jcHAgXAorCWRvbS9FdmVudERpc3BhdGNo
ZXIuY3BwIFwKIAlkb20vRXZlbnROYW1lcy5jcHAgXAogCWRvbS9FdmVudFRhcmdldC5jcHAgXAog
CWRvbS9FdmVudFF1ZXVlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDJlMGU2MzZlZGY2
ZGRjYTBjNTRmYTMzOGRkODNhNzBkZjk5NjQ0ZTUuLjZkMGQzZjQ0YTAyMmRlNTRmNTIwZTZmOTky
NDU5OWM5MmQ2NTU2YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01NjEsNiArNTYxLDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9FcnJvckV2ZW50LmNwcAogICAgIGRvbS9FdmVu
dC5jcHAKICAgICBkb20vRXZlbnRDb250ZXh0LmNwcAorICAgIGRvbS9FdmVudERpc3BhdGNoZXIu
Y3BwCiAgICAgZG9tL0V2ZW50TmFtZXMuY3BwCiAgICAgZG9tL0V2ZW50VGFyZ2V0LmNwcAogICAg
IGRvbS9FdmVudFF1ZXVlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDUzMDMxOGI0ZjZmODkyNDc4MjBhYmYz
Njg1NmViOWJlNGU1NjY3M2MuLmY4M2U3YzBhNzA2MzdjZDQ3ZmFhZDA3MzY4ZTcyZjNjM2U0ZjI4
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMS0wMy0yNiAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBFdmVudERpc3BhdGNoZXIsIHRoZSBuZXcg
Y29tbW9uIHdheSB0byBmaXJlIGV2ZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3MTY4CisKKyAgICAgICAgVGhlIGdvYWwgaGVyZSBpcyB0d28t
Zm9sZDoKKyAgICAgICAgMSkgcmVkdWNlIHRoZSBuZWVkIHRvIHJhbmRvbWx5IHNwcmlua2xlIGd1
YXJkcyBhcm91bmQgdGhlIGRpc3BhdGNoIGNvZGUKKyAgICAgICAgYnkgY3JlYXRpbmcgYSB3ZWxs
LXNjb3BlZCBhYnN0cmFjdGlvbiBmb3IgZGlzcGF0Y2hpbmcgZXZlbnRzLgorICAgICAgICAyKSBj
cmVhdGUgYSBwbGFjZSB3aGVyZSBmaWRkbHkgZXZlbnQtcmVsYXRlZCB0aGluZ3MgbGlrZSBjcmVh
dGluZyBldmVudAorICAgICAgICBjb250ZXh0cyBmb3IgYW5jZXN0b3JzIGNhbiBiZSBkb25lIGxh
emlseS4KKworICAgICAgICBBZGRpdGlvbmFsbHksIHdpdGggYWxsIHRoZSBmcmVlLXN0YW5kaW5n
IHN0YXRpYyBmdW5jdGlvbnMsIHRoaXMgY29kZSB3YXMKKyAgICAgICAganVzdCBiZWdnaW5nIHRv
IGNvbWUgb3V0IG9mIE5vZGUuY3BwLgorCisgICAgICAgIFRoZSBmaXJzdCBzdGVwIGlzIGEgbmVh
ci1tZWNoYW5pY2FsIGV4dHJhY3Rpb24gb2YgbW91c2UtcmVsYXRlZCBldmVudHMKKyAgICAgICAg
ZnJvbSBOb2RlLmNwcCB0byBFdmVudERpc3BhdGNoZXIuIEZvciBub3csIHRoZSBjYWxsIHNpdGVz
IGFyZSBqdXN0CisgICAgICAgIHJlcGxhY2VkIHdpdGggaW52b2tpbmcgRXZlbnREaXNwYXRjaGVy
LiBMYXRlciwgd2UgY2FuIHJlbW92ZSB0aGVzZSBtZXRob2RzCisgICAgICAgIGZyb20gTm9kZS4K
KworICAgICAgICBSZWZhY3RvcmluZywgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzLgorCisgICAgICAg
ICogQW5kcm9pZC5tazogQWRkZWQgRXZlbnREaXNwYXRjaGVyIHRvIGJ1aWxkIHN5c3RlbS4KKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDogRGl0dG8uCisgICAgICAgICogR05VbWFrZWZpbGUuYW06
IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisgICAgICAgICogV2ViQ29y
ZS5wcm86IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBE
aXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRv
LgorICAgICAgICAqIGRvbS9ET01BbGxJbk9uZS5jcHA6IERpdHRvLgorICAgICAgICAqIGRvbS9F
dmVudERpc3BhdGNoZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVy
Lmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmRpc3BhdGNoU2NvcGVkRXZlbnQpOiBSZXBsYWNlZCB0byB1c2UgRXZlbnREaXNwYXRjaGVy
LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hFdmVudCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKTogRGl0dG8uCisgICAgICAgICog
ZG9tL05vZGUuaDogVXBkYXRlZCBkZWNscy4KKwogMjAxMS0wMy0yNSAgRGF2ZSBIeWF0dCAgPGh5
YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVsZSBQZXRlcnNvbi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KaW5kZXggYTQ0NzNiNDM1ZmJmOWRhOTI1OTQ4ZTFjM2JjNTM0YzZmYzZk
MzAxNi4uODU2ZGIwNmUwOTY0Nzk3NDA1ZjUwM2FkNThiYmVjNWNkODM0NWNiNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTEyMjAsNiArMTIyMCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENv
bnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmggXAorCVNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudEV4Y2VwdGlvbi5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnROYW1lcy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGE4Yjc1ZGMwZDZiZTQx
YmIwYTQwZDc5NjI0NmQzYzE4ZjRjNjAxOTcuLjEzZjMyNTkwMmFhMDNiMmRjOTMzMzI3NDIwZjJj
NTUxODA4NDBlYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI0MzEsNiArMjQzMSw4IEBACiAgICAg
ICAgICAgICAnZG9tL0V2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL0V2ZW50Q29udGV4dC5j
cHAnLAogICAgICAgICAgICAgJ2RvbS9FdmVudENvbnRleHQuaCcsCisgICAgICAgICAgICAnZG9t
L0V2ZW50RGlzcGF0Y2hlci5jcHAnLAorICAgICAgICAgICAgJ2RvbS9FdmVudERpc3BhdGNoZXIu
aCcsCiAgICAgICAgICAgICAnZG9tL0V2ZW50RXhjZXB0aW9uLmgnLAogICAgICAgICAgICAgJ2Rv
bS9FdmVudE5hbWVzLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0V2ZW50UXVldWUuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KaW5kZXggMGVmOGVkYWZkNGQ5YzQ5N2UzNTRiODQ4ZTU0ZGJjODE3Y2ZlYmU5Ny4u
ODhlMWNjMjQxZjRjMDFhMTRhNWZiODA0N2VhNjkyOWFiYTU0YjAwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8K
QEAgLTQ4NSw2ICs0ODUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vRXJyb3JFdmVudC5jcHAg
XAogICAgIGRvbS9FdmVudC5jcHAgXAogICAgIGRvbS9FdmVudENvbnRleHQuY3BwIFwKKyAgICBk
b20vRXZlbnREaXNwYXRjaGVyLmNwcCBcCiAgICAgZG9tL0V2ZW50TmFtZXMuY3BwIFwKICAgICBk
b20vRXZlbnRUYXJnZXQuY3BwIFwKICAgICBkb20vRXZlbnRRdWV1ZS5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA3MmFlMzQ1ODNkMDc4
MzgwYWExOTdjM2Q0MGI2MDg0YjBjODFhODY5Li45OTExZDAxZjRmNjEwMWU3MDVjOTYyNjBmZmQz
MGY3Y2JlZjE1MDQ0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagpAQCAtNDQyNjIsNiArNDQyNjIsNjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXEV2ZW50RGlzcGF0Y2hlci5jcHAiCisJCQkJ
PgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgor
CQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0
ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRv
b2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxs
fFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9v
bAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0xU
Q0d8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxU
b29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZG9tXEV2ZW50RGlzcGF0Y2hlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxkb21cRXZlbnRFeGNlcHRpb24uaCIKIAkJCQk+CiAJCQk8L0ZpbGU+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggODEzNzA5NjJlMmZmOWY1Y2RmN2M2ZTQzN2YzZjhiNjJjMTc4ODE5YS4uNzdkNjIwMjA3
Nzc3MjgxMjllMzAzZDVjY2VhOTUyYmIxODU5Njk0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTAyLDYgKzkwMiw4IEBACiAJ
CTQxNkU3NUNDMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1Q0EwRURGOTBDNzAw
MzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgKi87IH07CiAJCTQxODg1QjkzMTFCNkZEQTYw
MDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDE4ODVCOTExMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNz
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDE4ODVCOTQxMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxODg1QjkyMTFCNkZEQTYwMDMz
ODNCQiAvKiBGb3JtU3VibWlzc2lvbi5jcHAgKi87IH07CisJCTQxOEEwNkQwMTMzQzA0RDUwMENE
Mzc5QyAvKiBFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxOEEwNkNFMTMzQzA0RDUwMENEMzc5QyAvKiBFdmVudERpc3BhdGNo
ZXIuaCAqLzsgfTsKKwkJNDE4QTA2RDExMzNDMDRENTAwQ0QzNzlDIC8qIEV2ZW50RGlzcGF0Y2hl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MThB
MDZDRjEzM0MwNEQ1MDBDRDM3OUMgLyogRXZlbnREaXNwYXRjaGVyLmNwcCAqLzsgfTsKIAkJNDE4
Rjg4MDQwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE4Rjg4MDIwRkY5NTdBRTAwODBG
MDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuY3BwICovOyB9OwogCQk0MThGODgwNTBGRjk1N0FGMDA4
MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDE4Rjg4MDMwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RX
b3JrZXIuaCAqLzsgfTsKIAkJNDFBM0Q1OEUxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdv
cmtlclRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MUEzRDU4QzEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNw
cCAqLzsgfTsKQEAgLTczMjUsNiArNzMyNyw4IEBACiAJCTQxNkU3NUNBMEVERjkwQzcwMDM2MEUx
RCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2NyaXB0Q2FsbEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDE4ODVCOTExMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1TdWJtaXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxODg1QjkyMTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtU3VibWlzc2lvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxOEEwNkNFMTMzQzA0RDUwMENEMzc5
QyAvKiBFdmVudERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXZlbnREaXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxOEEwNkNG
MTMzQzA0RDUwMENEMzc5QyAvKiBFdmVudERpc3BhdGNoZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDE4Rjg4MDIwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3Jr
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYnN0cmFjdFdv
cmtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxOEY4ODAzMEZGOTU3QUUw
MDgwRjA0NSAvKiBKU0Fic3RyYWN0V29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTQWJzdHJhY3RXb3JrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDFBM0Q1OEMxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQu
Y3BwOyBwYXRoID0gd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTkyMjMsNiArMTkyMjcsOCBAQAogCQkJCTE0RTgzNkQyMDlG
ODUxMjAwMEI4NUFFNCAvKiBFdmVudC5pZGwgKi8sCiAJCQkJNDEzOEQzMzQxMjQ0MDU0ODAwMzIz
RDMzIC8qIEV2ZW50Q29udGV4dC5jcHAgKi8sCiAJCQkJNDEzOEQzMzMxMjQ0MDU0ODAwMzIzRDMz
IC8qIEV2ZW50Q29udGV4dC5oICovLAorCQkJCTQxOEEwNkNGMTMzQzA0RDUwMENEMzc5QyAvKiBF
dmVudERpc3BhdGNoZXIuY3BwICovLAorCQkJCTQxOEEwNkNFMTMzQzA0RDUwMENEMzc5QyAvKiBF
dmVudERpc3BhdGNoZXIuaCAqLywKIAkJCQlCQzYwRDkwOTBEMkExN0NFMDBCOTkxOEYgLyogRXZl
bnRFeGNlcHRpb24uaCAqLywKIAkJCQlCQzYwRDkwQTBEMkExN0NFMDBCOTkxOEYgLyogRXZlbnRF
eGNlcHRpb24uaWRsICovLAogCQkJCTkzNUZCQzQ0MDlCQTAwQjkwMEUyMzBCMSAvKiBFdmVudExp
c3RlbmVyLmggKi8sCkBAIC0yMDc5MCw2ICsyMDc5Niw3IEBACiAJCQkJMkVDRjdBRTIxMDE2MkI1
ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjQyMEE0
NEVGQzcwMEY5OTJFMCAvKiBFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzOEQzMzUxMjQ0
MDU0ODAwMzIzRDMzIC8qIEV2ZW50Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDE4QTA2
RDAxMzNDMDRENTAwQ0QzNzlDIC8qIEV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM2MEQ5MEMwRDJBMTdDRTAwQjk5MThGIC8qIEV2ZW50RXhjZXB0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5M0MwOUE1MzBCMDY0REIzMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzVGQkM0NTA5QkEwMEI5MDBFMjMwQjEgLyogRXZlbnRMaXN0ZW5l
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzYwMyw2ICsyMzYxMCw3IEBACiAJCQkJMkVDRjdBRTEx
MDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUw
MzFCNDEwQTQ0RUZDNzAwRjk5MkUwIC8qIEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQx
MzhEMzM2MTI0NDA1NDgwMDMyM0QzMyAvKiBFdmVudENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDE4QTA2RDExMzNDMDRENTAwQ0QzNzlDIC8qIEV2ZW50RGlzcGF0Y2hlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5M0MwOUE4MTBCMDY0RjAwMDA1QUJENEQgLyogRXZlbnRIYW5kbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQzA5QTdGMEIwNjRFRUYwMDVBQkQ0RCAvKiBFdmVu
dEhhbmRsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQ0ExOUUwNTBEQzI1NTk1MDA2NUE5
OTQgLyogRXZlbnRMb29wTWFjLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbElu
T25lLmNwcAppbmRleCAwOGE3NjgwMjM4MzFmNDJhZDYzMjM1ZjcxMDA0YmUyMzQ3OTI1NTUxLi5j
YzQ4ODhmMmYzMTFiYzc1YjgxYTY5ZTgwNjQ3MWM1ZDg1MDQ4NTMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
T01BbGxJbk9uZS5jcHAKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJFcnJvckV2ZW50LmNw
cCIKICNpbmNsdWRlICJFdmVudC5jcHAiCiAjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmNwcCIKKyNp
bmNsdWRlICJFdmVudERpc3BhdGNoZXIuY3BwIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuY3BwIgog
I2luY2x1ZGUgIkV2ZW50UXVldWUuY3BwIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmNwcCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWMwZmI3NzM2NGUx
MWI2Mzk5NDMxY2U4OGNiOTMwZjY0YjFjYmE4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0wLDAgKzEsMzg3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIK
KworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmgiCisjaW5jbHVk
ZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVk
ZSAiTm9kZS5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFu
Y2UuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIK
KyNlbmRpZgorCisjaW5jbHVkZSAiVUlFdmVudC5oIgorI2luY2x1ZGUgIlVJRXZlbnRXaXRoS2V5
U3RhdGUuaCIKKyNpbmNsdWRlICJXaW5kb3dFdmVudENvbnRleHQuaCIKKworI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgSGFzaFNldDxOb2Rl
Kj4qIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gMDsKKworYm9vbCBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gZXZl
bnQpCit7CisgICAgRXZlbnREaXNwYXRjaGVyIGRpc3BhdGNoZXIobm9kZSk7CisgICAgcmV0dXJu
IGRpc3BhdGNoZXIuZGlzcGF0Y2hFdmVudChldmVudCk7Cit9CisKK2Jvb2wgRXZlbnREaXNwYXRj
aGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQoTm9kZSogbm9kZSwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldmVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsCisgICAgaW50IGRldGFp
bCwgTm9kZSogcmVsYXRlZFRhcmdldCkKK3sKKyAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3Ji
aWRkZW4oKSk7CisgICAgRXZlbnREaXNwYXRjaGVyIGRpc3BhdGNoZXIobm9kZSk7CisKKyAgICBJ
bnRQb2ludCBjb250ZW50c1BvczsKKyAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbm9kZS0+ZG9j
dW1lbnQoKS0+dmlldygpKQorICAgICAgICBjb250ZW50c1BvcyA9IHZpZXctPndpbmRvd1RvQ29u
dGVudHMoZXZlbnQucG9zKCkpOworCisgICAgc2hvcnQgYnV0dG9uID0gZXZlbnQuYnV0dG9uKCk7
CisKKyAgICBBU1NFUlQoZXZlbnQuZXZlbnRUeXBlKCkgPT0gTW91c2VFdmVudE1vdmVkIHx8IGJ1
dHRvbiAhPSBOb0J1dHRvbik7CisKKyAgICByZXR1cm4gZGlzcGF0Y2hlci5kaXNwYXRjaE1vdXNl
RXZlbnQoZXZlbnRUeXBlLCBidXR0b24sIGRldGFpbCwKKyAgICAgICAgY29udGVudHNQb3MueCgp
LCBjb250ZW50c1Bvcy55KCksIGV2ZW50Lmdsb2JhbFgoKSwgZXZlbnQuZ2xvYmFsWSgpLAorICAg
ICAgICBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLCBl
dmVudC5tZXRhS2V5KCksCisgICAgICAgIGZhbHNlLCByZWxhdGVkVGFyZ2V0LCAwKTsKK30KKwor
dm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSogbm9kZSwg
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29sIHNob3dQ
cmVzc2VkTG9vaykKK3sKKyAgICBFdmVudERpc3BhdGNoZXIgZGlzcGF0Y2hlcihub2RlKTsKKwor
ICAgIGlmICghZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MpCisgICAgICAgIGdOb2Rl
c0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gbmV3IEhhc2hTZXQ8Tm9kZSo+OworICAgIGVs
c2UgaWYgKGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5jb250YWlucyhub2RlKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3Mt
PmFkZChub2RlKTsKKworICAgIC8vIHNlbmQgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGJlZm9yZSB0
aGUgY2xpY2ssIGlmIHJlcXVlc3RlZAorICAgIGlmIChzZW5kTW91c2VFdmVudHMpCisgICAgICAg
IGRpc3BhdGNoZXIuZGlzcGF0Y2hTaW11bGF0ZWRNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3Vz
ZWRvd25FdmVudCwgZXZlbnQuZ2V0KCkpOworICAgIG5vZGUtPnNldEFjdGl2ZSh0cnVlLCBzaG93
UHJlc3NlZExvb2spOworICAgIGlmIChzZW5kTW91c2VFdmVudHMpCisgICAgICAgIGRpc3BhdGNo
ZXIuZGlzcGF0Y2hTaW11bGF0ZWRNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQs
IGV2ZW50LmdldCgpKTsKKyAgICBub2RlLT5zZXRBY3RpdmUoZmFsc2UpOworCisgICAgLy8gYWx3
YXlzIHNlbmQgY2xpY2sKKyAgICBkaXNwYXRjaGVyLmRpc3BhdGNoU2ltdWxhdGVkTW91c2VFdmVu
dChldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZXZlbnQpOworCisgICAgZ05vZGVzRGlzcGF0Y2hp
bmdTaW11bGF0ZWRDbGlja3MtPnJlbW92ZShub2RlKTsKK30KKworLy8gRklYTUU6IE9uY2UgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyOTYzIGxhbmRzLCB0aGlzIHNo
b3VsZAorLy8gYmUgZ3JlYXRseSBpbXByb3ZlZC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NDAyNS4KK3N0YXRpYyBOb2RlKiBwdWxsT3V0T2ZTaGFkb3coTm9k
ZSogbm9kZSkKK3sKKyAgICBOb2RlKiBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeSA9IG5vZGU7Cisg
ICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbjsgbiA9IG4tPnBhcmVudE9ySG9zdE5vZGUoKSkgewor
ICAgICAgICBpZiAobi0+aXNTaGFkb3dSb290KCkpCisgICAgICAgICAgICBvdXRlcm1vc3RTaGFk
b3dCb3VuZGFyeSA9IG4tPnBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICB9CisgICAgcmV0dXJuIG91
dGVybW9zdFNoYWRvd0JvdW5kYXJ5OworfQorCitFdmVudFRhcmdldCogRXZlbnREaXNwYXRjaGVy
OjpldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhOb2RlKiByZWZlcmVuY2VOb2Rl
KQoreworICAgIEFTU0VSVChyZWZlcmVuY2VOb2RlKTsKKworI2lmIEVOQUJMRShTVkcpCisgICAg
aWYgKCFyZWZlcmVuY2VOb2RlLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHJlZmVy
ZW5jZU5vZGU7CisKKyAgICAvLyBTcGVjOiBUaGUgZXZlbnQgaGFuZGxpbmcgZm9yIHRoZSBub24t
ZXhwb3NlZCB0cmVlIHdvcmtzIGFzIGlmIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQgaGFkIGJlZW4g
dGV4dHVhbGx5IGluY2x1ZGVkCisgICAgLy8gYXMgYSBkZWVwbHkgY2xvbmVkIGNoaWxkIG9mIHRo
ZSAndXNlJyBlbGVtZW50LCBleGNlcHQgdGhhdCBldmVudHMgYXJlIGRpc3BhdGNoZWQgdG8gdGhl
IFNWR0VsZW1lbnRJbnN0YW5jZSBvYmplY3RzCisgICAgZm9yIChOb2RlKiBuID0gcmVmZXJlbmNl
Tm9kZTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAoIW4tPmlzU2hhZG93
Um9vdCgpIHx8ICFuLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIEVsZW1lbnQqIHNoYWRvd1RyZWVQYXJlbnRFbGVtZW50ID0gbi0+c2hhZG93SG9zdCgp
OworICAgICAgICBBU1NFUlQoc2hhZG93VHJlZVBhcmVudEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZH
TmFtZXM6OnVzZVRhZykpOworCisgICAgICAgIGlmIChTVkdFbGVtZW50SW5zdGFuY2UqIGluc3Rh
bmNlID0gc3RhdGljX2Nhc3Q8U1ZHVXNlRWxlbWVudCo+KHNoYWRvd1RyZWVQYXJlbnRFbGVtZW50
KS0+aW5zdGFuY2VGb3JTaGFkb3dUcmVlRWxlbWVudChyZWZlcmVuY2VOb2RlKSkKKyAgICAgICAg
ICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiByZWZlcmVu
Y2VOb2RlOworfQorCitFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcihOb2RlKiBub2Rl
KQorICAgIDogbV9ub2RlKG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIG1fdmlldyA9
IG5vZGUtPmRvY3VtZW50KCktPnZpZXcoKTsKK30KKwordm9pZCBFdmVudERpc3BhdGNoZXI6Omdl
dEV2ZW50QW5jZXN0b3JzKEV2ZW50VGFyZ2V0KiBvcmlnaW5hbFRhcmdldCwgRXZlbnREaXNwYXRj
aEJlaGF2aW9yIGJlaGF2aW9yKQoreworICAgIGlmICghbV9ub2RlLT5pbkRvY3VtZW50KCkgfHwg
bV9hbmNlc3RvcnMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBFdmVudFRhcmdldCog
dGFyZ2V0ID0gb3JpZ2luYWxUYXJnZXQ7CisgICAgTm9kZSogYW5jZXN0b3IgPSBtX25vZGUuZ2V0
KCk7CisgICAgYm9vbCBzaG91bGRTa2lwTmV4dEFuY2VzdG9yID0gZmFsc2U7CisgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAg
ICAgICAgaWYgKGJlaGF2aW9yID09IFN0YXlJbnNpZGVTaGFkb3dET00pCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+c2hhZG93SG9zdCgp
OworICAgICAgICAgICAgaWYgKCFzaG91bGRTa2lwTmV4dEFuY2VzdG9yKQorICAgICAgICAgICAg
ICAgIHRhcmdldCA9IGFuY2VzdG9yOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFuY2Vz
dG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKTsKKworICAgICAg
ICBpZiAoIWFuY2VzdG9yKQorICAgICAgICAgICAgcmV0dXJuOworCisjaWYgRU5BQkxFKFNWRykK
KyAgICAgICAgLy8gU2tpcCBTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQuCisgICAgICAgIHNob3Vs
ZFNraXBOZXh0QW5jZXN0b3IgPSBhbmNlc3Rvci0+aXNTVkdFbGVtZW50KCkgJiYgYW5jZXN0b3It
PmlzU2hhZG93Um9vdCgpOworICAgICAgICBpZiAoc2hvdWxkU2tpcE5leHRBbmNlc3RvcikKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmCisgICAgICAgIC8vIEZJWE1FOiBVbnJvbGwgdGhl
IGV4dHJhIGxvb3AgaW5zaWRlIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzIGlu
dG8gdGhpcyBsb29wLgorICAgICAgICBtX2FuY2VzdG9ycy5hcHBlbmQoRXZlbnRDb250ZXh0KGFu
Y2VzdG9yLCBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3RvciksIHRh
cmdldCkpOworICAgIH0KK30KKworYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCit7CisgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9
IHBycEV2ZW50OworCisgICAgZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdT
VkdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKKworICAgIEFTU0VSVCghZXZlbnREaXNwYXRj
aEZvcmJpZGRlbigpKTsKKyAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpKTsKKyAgICBBU1NFUlQo
IWV2ZW50LT50eXBlKCkuaXNOdWxsKCkpOyAvLyBKYXZhU2NyaXB0IGNvZGUgY2FuIGNyZWF0ZSBh
biBldmVudCB3aXRoIGFuIGVtcHR5IG5hbWUsIGJ1dCBub3QgbnVsbC4KKworICAgIFJlZlB0cjxF
dmVudFRhcmdldD4gb3JpZ2luYWxUYXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7CisgICAgZ2V0RXZl
bnRBbmNlc3RvcnMob3JpZ2luYWxUYXJnZXQuZ2V0KCksIGRldGVybWluZURpc3BhdGNoQmVoYXZp
b3IoZXZlbnQuZ2V0KCkpKTsKKworICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5kb3dDb250ZXh0
KGV2ZW50LmdldCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4dCgpKTsKKworICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KG1fbm9kZS0+ZG9jdW1lbnQoKSwgKmV2ZW50LCB3aW5k
b3dDb250ZXh0LndpbmRvdygpLCBtX25vZGUuZ2V0KCksIG1fYW5jZXN0b3JzKTsKKworICAgIC8v
IEdpdmUgdGhlIHRhcmdldCBub2RlIGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBiZWZvcmUgRE9N
IGV2ZW50IGhhbmRsZXJzIGdldCBhIGNyYWNrLgorICAgIHZvaWQqIGRhdGEgPSBtX25vZGUtPnBy
ZURpc3BhdGNoRXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpKTsKKyAgICBpZiAoZXZlbnQtPnByb3Bh
Z2F0aW9uU3RvcHBlZCgpKQorICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKKworICAgIC8v
IFRyaWdnZXIgY2FwdHVyaW5nIGV2ZW50IGhhbmRsZXJzLCBzdGFydGluZyBhdCB0aGUgdG9wIGFu
ZCB3b3JraW5nIG91ciB3YXkgZG93bi4KKyAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6
Q0FQVFVSSU5HX1BIQVNFKTsKKworICAgIGlmICh3aW5kb3dDb250ZXh0LmhhbmRsZUxvY2FsRXZl
bnRzKGV2ZW50LmdldCgpKSAmJiBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgICAg
IGdvdG8gZG9uZURpc3BhdGNoaW5nOworCisgICAgZm9yIChzaXplX3QgaSA9IG1fYW5jZXN0b3Jz
LnNpemUoKTsgaTsgLS1pKSB7CisgICAgICAgIG1fYW5jZXN0b3JzW2kgLSAxXS5oYW5kbGVMb2Nh
bEV2ZW50cyhldmVudC5nZXQoKSk7CisgICAgICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9w
cGVkKCkpCisgICAgICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKKyAgICB9CisKKyAgICBl
dmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICBldmVudC0+c2V0VGFy
Z2V0KG9yaWdpbmFsVGFyZ2V0LmdldCgpKTsKKyAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChF
dmVudERpc3BhdGNoZXI6OmV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9k
ZS5nZXQoKSkpOworICAgIG1fbm9kZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwor
ICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgICAgIGdvdG8gZG9uZURp
c3BhdGNoaW5nOworCisgICAgaWYgKGV2ZW50LT5idWJibGVzKCkgJiYgIWV2ZW50LT5jYW5jZWxC
dWJibGUoKSkgeworICAgICAgICAvLyBUcmlnZ2VyIGJ1YmJsaW5nIGV2ZW50IGhhbmRsZXJzLCBz
dGFydGluZyBhdCB0aGUgYm90dG9tIGFuZCB3b3JraW5nIG91ciB3YXkgdXAuCisgICAgICAgIGV2
ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CisKKyAgICAgICAgc2l6
ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBtX2FuY2VzdG9yc1tpXS5oYW5kbGVMb2Nh
bEV2ZW50cyhldmVudC5nZXQoKSk7CisgICAgICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9u
U3RvcHBlZCgpIHx8IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKKyAgICAgICAgICAgICAgICBnb3Rv
IGRvbmVEaXNwYXRjaGluZzsKKyAgICAgICAgfQorICAgICAgICB3aW5kb3dDb250ZXh0LmhhbmRs
ZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKKyAgICB9CisKK2RvbmVEaXNwYXRjaGluZzoKKyAg
ICBldmVudC0+c2V0VGFyZ2V0KG9yaWdpbmFsVGFyZ2V0LmdldCgpKTsKKyAgICBldmVudC0+c2V0
Q3VycmVudFRhcmdldCgwKTsKKyAgICBldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKKworICAgIC8v
IFBhc3MgdGhlIGRhdGEgZnJvbSB0aGUgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIgdG8gdGhlIHBv
c3REaXNwYXRjaEV2ZW50SGFuZGxlci4KKyAgICBtX25vZGUtPnBvc3REaXNwYXRjaEV2ZW50SGFu
ZGxlcihldmVudC5nZXQoKSwgZGF0YSk7CisKKyAgICAvLyBDYWxsIGRlZmF1bHQgZXZlbnQgaGFu
ZGxlcnMuIFdoaWxlIHRoZSBET00gZG9lcyBoYXZlIGEgY29uY2VwdCBvZiBwcmV2ZW50aW5nCisg
ICAgLy8gZGVmYXVsdCBoYW5kbGluZywgdGhlIGRldGFpbCBvZiB3aGljaCBoYW5kbGVycyBhcmUg
Y2FsbGVkIGlzIGFuIGludGVybmFsCisgICAgLy8gaW1wbGVtZW50YXRpb24gZGV0YWlsIGFuZCBu
b3QgcGFydCBvZiB0aGUgRE9NLgorICAgIGlmICghZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSAm
JiAhZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpIHsKKyAgICAgICAgLy8gTm9uLWJ1YmJsaW5nIGV2
ZW50cyBjYWxsIG9ubHkgb25lIGRlZmF1bHQgZXZlbnQgaGFuZGxlciwgdGhlIG9uZSBmb3IgdGhl
IHRhcmdldC4KKyAgICAgICAgbV9ub2RlLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50LmdldCgp
KTsKKyAgICAgICAgQVNTRVJUKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpKTsKKyAgICAgICAg
aWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICAgICAgZ290byBkb25lV2l0aERl
ZmF1bHQ7CisgICAgICAgIC8vIEZvciBidWJibGluZyBldmVudHMsIGNhbGwgZGVmYXVsdCBldmVu
dCBoYW5kbGVycyBvbiB0aGUgc2FtZSB0YXJnZXRzIGluIHRoZQorICAgICAgICAvLyBzYW1lIG9y
ZGVyIGFzIHRoZSBidWJibGluZyBwaGFzZS4KKyAgICAgICAgaWYgKGV2ZW50LT5idWJibGVzKCkp
IHsKKyAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3RvcnMuc2l6ZSgpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkp
OworICAgICAgICAgICAgICAgIEFTU0VSVCghZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICAgICAg
ICAgICAgICBnb3RvIGRvbmVXaXRoRGVmYXVsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworZG9uZVdpdGhEZWZhdWx0OgorCisgICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZl
bnQgZGlzcGF0Y2gsIHRoZSBldmVudCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCisgICAgLy8gb3V0
ZXJtb3N0IHNoYWRvdyBET00gYm91bmRhcnkuCisgICAgZXZlbnQtPnNldFRhcmdldCh3aW5kb3dD
b250ZXh0LnRhcmdldCgpKTsKKyAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCgwKTsKKyAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnQoY29va2llKTsKKworICAg
IHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKK30KKworYm9vbCBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
aW50IGJ1dHRvbiwgaW50IGRldGFpbCwKKyAgICBpbnQgcGFnZVgsIGludCBwYWdlWSwgaW50IHNj
cmVlblgsIGludCBzY3JlZW5ZLAorICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wg
c2hpZnRLZXksIGJvb2wgbWV0YUtleSwKKyAgICBib29sIGlzU2ltdWxhdGVkLCBOb2RlKiByZWxh
dGVkVGFyZ2V0QXJnLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQpCit7CisgICAg
QVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOworICAgIGlmIChtX25vZGUtPmRpc2Fi
bGVkKCkpIC8vIERvbid0IGV2ZW4gc2VuZCBET00gZXZlbnRzIGZvciBkaXNhYmxlZCBjb250cm9s
cy4uCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGV2ZW50VHlwZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gU2hvdWxkbid0IGhhcHBlbi4KKworICAgIGJvb2wg
Y2FuY2VsYWJsZSA9IGV2ZW50VHlwZSAhPSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQ7CisK
KyAgICBib29sIHN3YWxsb3dFdmVudCA9IGZhbHNlOworCisgICAgLy8gQXR0ZW1wdGluZyB0byBk
aXNwYXRjaCB3aXRoIGEgbm9uLUV2ZW50VGFyZ2V0IHJlbGF0ZWRUYXJnZXQgY2F1c2VzIHRoZSBy
ZWxhdGVkVGFyZ2V0IHRvIGJlIHNpbGVudGx5IGlnbm9yZWQuCisgICAgUmVmUHRyPE5vZGU+IHJl
bGF0ZWRUYXJnZXQgPSBwdWxsT3V0T2ZTaGFkb3cocmVsYXRlZFRhcmdldEFyZyk7CisKKyAgICBp
bnQgYWRqdXN0ZWRQYWdlWCA9IHBhZ2VYOworICAgIGludCBhZGp1c3RlZFBhZ2VZID0gcGFnZVk7
CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewor
ICAgICAgICBmbG9hdCBwYWdlWm9vbSA9IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpOworICAgICAg
ICBpZiAocGFnZVpvb20gIT0gMS4wZikgeworICAgICAgICAgICAgLy8gQWRqdXN0IG91ciBwYWdl
WCBhbmQgcGFnZVkgdG8gYWNjb3VudCBmb3IgdGhlIHBhZ2Ugem9vbS4KKyAgICAgICAgICAgIGFk
anVzdGVkUGFnZVggPSBscm91bmRmKHBhZ2VYIC8gcGFnZVpvb20pOworICAgICAgICAgICAgYWRq
dXN0ZWRQYWdlWSA9IGxyb3VuZGYocGFnZVkgLyBwYWdlWm9vbSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VFdmVudCA9IE1vdXNlRXZlbnQ6OmNyZWF0
ZShldmVudFR5cGUsCisgICAgICAgIHRydWUsIGNhbmNlbGFibGUsIG1fbm9kZS0+ZG9jdW1lbnQo
KS0+ZGVmYXVsdFZpZXcoKSwKKyAgICAgICAgZGV0YWlsLCBzY3JlZW5YLCBzY3JlZW5ZLCBhZGp1
c3RlZFBhZ2VYLCBhZGp1c3RlZFBhZ2VZLAorICAgICAgICBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0
S2V5LCBtZXRhS2V5LCBidXR0b24sCisgICAgICAgIHJlbGF0ZWRUYXJnZXQsIDAsIGlzU2ltdWxh
dGVkKTsKKyAgICBtb3VzZUV2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJseWluZ0V2ZW50
LmdldCgpKTsKKyAgICBtb3VzZUV2ZW50LT5zZXRBYnNvbHV0ZUxvY2F0aW9uKEludFBvaW50KHBh
Z2VYLCBwYWdlWSkpOworCisgICAgZGlzcGF0Y2hFdmVudChtb3VzZUV2ZW50KTsKKyAgICBib29s
IGRlZmF1bHRIYW5kbGVkID0gbW91c2VFdmVudC0+ZGVmYXVsdEhhbmRsZWQoKTsKKyAgICBib29s
IGRlZmF1bHRQcmV2ZW50ZWQgPSBtb3VzZUV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CisgICAg
aWYgKGRlZmF1bHRIYW5kbGVkIHx8IGRlZmF1bHRQcmV2ZW50ZWQpCisgICAgICAgIHN3YWxsb3dF
dmVudCA9IHRydWU7CisKKyAgICAvLyBTcGVjaWFsIGNhc2U6IElmIGl0J3MgYSBkb3VibGUgY2xp
Y2sgZXZlbnQsIHdlIGFsc28gc2VuZCB0aGUgZGJsY2xpY2sgZXZlbnQuIFRoaXMgaXMgbm90IHBh
cnQKKyAgICAvLyBvZiB0aGUgRE9NIHNwZWNzLCBidXQgaXMgdXNlZCBmb3IgY29tcGF0aWJpbGl0
eSB3aXRoIHRoZSBvbmRibGNsaWNrPSIiIGF0dHJpYnV0ZS4gVGhpcyBpcyB0cmVhdGVkCisgICAg
Ly8gYXMgYSBzZXBhcmF0ZSBldmVudCBpbiBvdGhlciBET00tY29tcGxpYW50IGJyb3dzZXJzIGxp
a2UgRmlyZWZveCwgYW5kIHNvIHdlIGRvIHRoZSBzYW1lLgorICAgIGlmIChldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgZGV0YWlsID09IDIpIHsKKyAgICAgICAgUmVmUHRy
PEV2ZW50PiBkb3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5kYmxjbGlja0V2ZW50LAorICAgICAgICAgICAgdHJ1ZSwgY2FuY2VsYWJsZSwgbV9ub2RlLT5k
b2N1bWVudCgpLT5kZWZhdWx0VmlldygpLAorICAgICAgICAgICAgZGV0YWlsLCBzY3JlZW5YLCBz
Y3JlZW5ZLCBhZGp1c3RlZFBhZ2VYLCBhZGp1c3RlZFBhZ2VZLAorICAgICAgICAgICAgY3RybEtl
eSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0YUtleSwgYnV0dG9uLAorICAgICAgICAgICAgcmVsYXRl
ZFRhcmdldCwgMCwgaXNTaW11bGF0ZWQpOworICAgICAgICBkb3VibGVDbGlja0V2ZW50LT5zZXRV
bmRlcmx5aW5nRXZlbnQodW5kZXJseWluZ0V2ZW50LmdldCgpKTsKKyAgICAgICAgaWYgKGRlZmF1
bHRIYW5kbGVkKQorICAgICAgICAgICAgZG91YmxlQ2xpY2tFdmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChkb3VibGVDbGlja0V2ZW50KTsKKyAgICAgICAg
aWYgKGRvdWJsZUNsaWNrRXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkgfHwgZG91YmxlQ2xpY2tFdmVu
dC0+ZGVmYXVsdFByZXZlbnRlZCgpKQorICAgICAgICAgICAgc3dhbGxvd0V2ZW50ID0gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gc3dhbGxvd0V2ZW50OworfQorCit2b2lkIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hTaW11bGF0ZWRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQpCit7CisgICAgQVNTRVJU
KCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOworCisgICAgYm9vbCBjdHJsS2V5ID0gZmFsc2U7
CisgICAgYm9vbCBhbHRLZXkgPSBmYWxzZTsKKyAgICBib29sIHNoaWZ0S2V5ID0gZmFsc2U7Cisg
ICAgYm9vbCBtZXRhS2V5ID0gZmFsc2U7CisgICAgaWYgKFVJRXZlbnRXaXRoS2V5U3RhdGUqIGtl
eVN0YXRlRXZlbnQgPSBmaW5kRXZlbnRXaXRoS2V5U3RhdGUodW5kZXJseWluZ0V2ZW50LmdldCgp
KSkgeworICAgICAgICBjdHJsS2V5ID0ga2V5U3RhdGVFdmVudC0+Y3RybEtleSgpOworICAgICAg
ICBhbHRLZXkgPSBrZXlTdGF0ZUV2ZW50LT5hbHRLZXkoKTsKKyAgICAgICAgc2hpZnRLZXkgPSBr
ZXlTdGF0ZUV2ZW50LT5zaGlmdEtleSgpOworICAgICAgICBtZXRhS2V5ID0ga2V5U3RhdGVFdmVu
dC0+bWV0YUtleSgpOworICAgIH0KKworICAgIC8vIExpa2UgR2Vja28sIHdlIGp1c3QgcGFzcyAw
IGZvciBldmVyeXRoaW5nIHdoZW4gd2UgbWFrZSBhIGZha2UgbW91c2UgZXZlbnQuCisgICAgLy8g
SW50ZXJuZXQgRXhwbG9yZXIgaW5zdGVhZCBnaXZlcyB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlv
biBhbmQgc3RhdGUuCisgICAgZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50VHlwZSwgMCwgMCwgMCwg
MCwgMCwgMCwgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0YUtleSwgdHJ1ZSwgMCwgdW5k
ZXJseWluZ0V2ZW50KTsKK30KKworY29uc3QgRXZlbnRDb250ZXh0KiBFdmVudERpc3BhdGNoZXI6
OnRvcEV2ZW50Q29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fYW5jZXN0b3JzLmlzRW1wdHkoKSA/
IDAgOiAmbV9hbmNlc3RvcnMubGFzdCgpOworfQorCitFdmVudERpc3BhdGNoQmVoYXZpb3IgRXZl
bnREaXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiBldmVudCkKK3sK
KyAgICAvLyBQZXIgWEJMIDIuMCBzcGVjLCBtdXRhdGlvbiBldmVudHMgc2hvdWxkIG5ldmVyIGNy
b3NzIHNoYWRvdyBET00gYm91bmRhcnk6CisgICAgLy8gaHR0cDovL2Rldi53My5vcmcvMjAwNi94
YmwyLyNldmVudC1mbG93LWFuZC10YXJnZXRpbmctYWNyb3NzLXNoYWRvdy1zCisgICAgaWYgKGV2
ZW50LT5pc011dGF0aW9uRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0YXlJbnNpZGVTaGFkb3dE
T007CisKKyAgICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxlY3RzdGFydCBldmVudCB0byBj
cm9zcyB0aGUgdGhlIHNoYWRvdyBET00gYm91bmRhcnkuCisgICAgLy8gQ2hhbmdpbmcgdGhpcyBi
cmVha3MgZXhpc3Rpbmcgc2l0ZXMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01MjE5NSBmb3IgZGV0YWlscy4KKyAgICBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCkKKyAgICAgICAgcmV0dXJuIFN0YXlJ
bnNpZGVTaGFkb3dET007CisKKyAgICByZXR1cm4gUmV0YXJnZXRFdmVudDsKK30KKworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzhmNzM2NjFlZjRiYzhk
OTllZmJmZGYxMzhmZDM3YmU3YWI1OTZjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRXZlbnREaXNwYXRjaGVyX2gKKyNkZWZpbmUgRXZlbnREaXNwYXRjaGVyX2gKKwor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV2ZW50OworY2xhc3MgRXZlbnRDb250ZXh0OworY2xh
c3MgRXZlbnRUYXJnZXQ7CitjbGFzcyBGcmFtZVZpZXc7CitjbGFzcyBOb2RlOworY2xhc3MgUGxh
dGZvcm1Nb3VzZUV2ZW50OworCitlbnVtIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciB7CisgICAgUmV0
YXJnZXRFdmVudCwKKyAgICBTdGF5SW5zaWRlU2hhZG93RE9NCit9OworCisKK2NsYXNzIEV2ZW50
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgZGlzcGF0Y2hFdmVudChOb2Rl
KiwgUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHN0YXRpYyBib29sIGRpc3BhdGNoTW91c2VFdmVu
dChOb2RlKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIGludCBjbGlja0NvdW50ID0gMCwgTm9kZSogcmVsYXRlZFRhcmdldCA9IDApOwor
ICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSosIFBhc3NSZWZQdHI8
RXZlbnQ+IHVuZGVybHlpbmdFdmVudCwgYm9vbCBzZW5kTW91c2VFdmVudHMgPSBmYWxzZSwgYm9v
bCBzaG93UHJlc3NlZExvb2sgPSB0cnVlKTsKKworICAgIHN0YXRpYyBFdmVudFRhcmdldCogZXZl
bnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoTm9kZSopOworCitwcml2YXRlOgorICAg
IEV2ZW50RGlzcGF0Y2hlcihOb2RlKik7CisKKyAgICBFdmVudERpc3BhdGNoQmVoYXZpb3IgZGV0
ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCopOworICAgIHZvaWQgZ2V0RXZlbnRBbmNlc3Rv
cnMoRXZlbnRUYXJnZXQqIG9yaWdpbmFsVGFyZ2V0LCBFdmVudERpc3BhdGNoQmVoYXZpb3IpOwor
ICAgIGNvbnN0IEV2ZW50Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KCk7CisKKyAgICBib29sIGRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIGJvb2wgZGlzcGF0Y2hNb3VzZUV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBpbnQgYnV0dG9uLCBpbnQgZGV0YWls
LAorICAgICAgICBpbnQgcGFnZVgsIGludCBwYWdlWSwgaW50IHNjcmVlblgsIGludCBzY3JlZW5Z
LCBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXks
CisgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQsIE5vZGUqIHJlbGF0ZWRUYXJnZXRBcmcsIFBhc3NS
ZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCk7CisgICAgdm9pZCBkaXNwYXRjaFNpbXVsYXRl
ZE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZl
bnQ+IHVuZGVybHlpbmdFdmVudCk7CisKKyAgICBWZWN0b3I8RXZlbnRDb250ZXh0PiBtX2FuY2Vz
dG9yczsKKyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxFdmVudFRhcmdldD4g
bV9vcmlnaW5hbFRhcmdldDsKKyAgICBSZWZQdHI8RnJhbWVWaWV3PiBtX3ZpZXc7Cit9OworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDE3ODk3Mzg1ZGNiZWIyNTQ3YzA2YjA5OTQ5
YzkyZmJlYjYwN2Q1MTUuLjA0Mzk5NGEzN2RmYWRkY2FhMTdjNTA2OGI2ZDBkMjc3NjAwNjgzYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudENvbnRleHQuaCIKKyNpbmNsdWRl
ICJFdmVudERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKQEAgLTEwMSw3
ICsxMDIsNiBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFu
Y2UuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIK
ICNlbmRpZgogCkBAIC0xMjUsOCArMTI1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgSGFzaFNldDxOb2RlKj4qIGdOb2Rlc0Rp
c3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gMDsKLQogYm9vbCBOb2RlOjppc1N1cHBvcnRlZChj
b25zdCBTdHJpbmcmIGZlYXR1cmUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKICAgICByZXR1
cm4gRE9NSW1wbGVtZW50YXRpb246Omhhc0ZlYXR1cmUoZmVhdHVyZSwgdmVyc2lvbik7CkBAIC0y
NjAyLDE5NSArMjYwMCwxNyBAQCB2b2lkIE5vZGU6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KiBl
dmVudCkKICAgICBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwogfQogCi1zdGF0aWMgaW5saW5l
IEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhOb2RlKiBy
ZWZlcmVuY2VOb2RlKQotewotICAgIEFTU0VSVChyZWZlcmVuY2VOb2RlKTsKLQotI2lmIEVOQUJM
RShTVkcpCi0gICAgaWYgKCFyZWZlcmVuY2VOb2RlLT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAg
cmV0dXJuIHJlZmVyZW5jZU5vZGU7Ci0KLSAgICAvLyBTcGVjOiBUaGUgZXZlbnQgaGFuZGxpbmcg
Zm9yIHRoZSBub24tZXhwb3NlZCB0cmVlIHdvcmtzIGFzIGlmIHRoZSByZWZlcmVuY2VkIGVsZW1l
bnQgaGFkIGJlZW4gdGV4dHVhbGx5IGluY2x1ZGVkCi0gICAgLy8gYXMgYSBkZWVwbHkgY2xvbmVk
IGNoaWxkIG9mIHRoZSAndXNlJyBlbGVtZW50LCBleGNlcHQgdGhhdCBldmVudHMgYXJlIGRpc3Bh
dGNoZWQgdG8gdGhlIFNWR0VsZW1lbnRJbnN0YW5jZSBvYmplY3RzCi0gICAgZm9yIChOb2RlKiBu
ID0gcmVmZXJlbmNlTm9kZTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAo
IW4tPmlzU2hhZG93Um9vdCgpIHx8ICFuLT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIEVsZW1lbnQqIHNoYWRvd1RyZWVQYXJlbnRFbGVtZW50ID0gbi0+
c2hhZG93SG9zdCgpOwotICAgICAgICBBU1NFUlQoc2hhZG93VHJlZVBhcmVudEVsZW1lbnQtPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OnVzZVRhZykpOwotCi0gICAgICAgIGlmIChTVkdFbGVtZW50SW5z
dGFuY2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8U1ZHVXNlRWxlbWVudCo+KHNoYWRvd1RyZWVQ
YXJlbnRFbGVtZW50KS0+aW5zdGFuY2VGb3JTaGFkb3dUcmVlRWxlbWVudChyZWZlcmVuY2VOb2Rl
KSkKLSAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJl
dHVybiByZWZlcmVuY2VOb2RlOwotfQotCi1lbnVtIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciB7Ci0g
ICAgUmV0YXJnZXRFdmVudCwKLSAgICBTdGF5SW5zaWRlU2hhZG93RE9NCi19OwotCi1zdGF0aWMg
dm9pZCBnZXRFdmVudEFuY2VzdG9ycyhOb2RlKiBub2RlLCBWZWN0b3I8RXZlbnRDb250ZXh0PiYg
YW5jZXN0b3JzLCBFdmVudFRhcmdldCogb3JpZ2luYWxUYXJnZXQsIEV2ZW50RGlzcGF0Y2hCZWhh
dmlvciBiZWhhdmlvcikKLXsKLSAgICBpZiAoIW5vZGUtPmluRG9jdW1lbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9IG9yaWdpbmFsVGFyZ2V0OwotICAg
IE5vZGUqIGFuY2VzdG9yID0gbm9kZTsKLSAgICBib29sIHNob3VsZFNraXBOZXh0QW5jZXN0b3Ig
PSBmYWxzZTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAoYW5jZXN0b3ItPmlzU2hh
ZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAoYmVoYXZpb3IgPT0gU3RheUluc2lkZVNoYWRv
d0RPTSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhbmNlc3RvciA9IGFu
Y2VzdG9yLT5zaGFkb3dIb3N0KCk7Ci0gICAgICAgICAgICBpZiAoIXNob3VsZFNraXBOZXh0QW5j
ZXN0b3IpCi0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gYW5jZXN0b3I7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRI
b3N0RnJlZSgpOwotCi0gICAgICAgIGlmICghYW5jZXN0b3IpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICAvLyBTa2lwIFNWR1NoYWRvd1RyZWVSb290RWxl
bWVudC4KLSAgICAgICAgc2hvdWxkU2tpcE5leHRBbmNlc3RvciA9IGFuY2VzdG9yLT5pc1NWR0Vs
ZW1lbnQoKSAmJiBhbmNlc3Rvci0+aXNTaGFkb3dSb290KCk7Ci0gICAgICAgIGlmIChzaG91bGRT
a2lwTmV4dEFuY2VzdG9yKQotICAgICAgICAgICAgY29udGludWU7Ci0jZW5kaWYKLSAgICAgICAg
Ly8gRklYTUU6IFVucm9sbCB0aGUgZXh0cmEgbG9vcCBpbnNpZGUgZXZlbnRUYXJnZXRSZXNwZWN0
aW5nU1ZHVGFyZ2V0UnVsZXMgaW50byB0aGlzIGxvb3AuCi0gICAgICAgIGFuY2VzdG9ycy5hcHBl
bmQoRXZlbnRDb250ZXh0KGFuY2VzdG9yLCBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRS
dWxlcyhhbmNlc3RvciksIHRhcmdldCkpOwotCi0gICAgfQotfQotCiB2b2lkIE5vZGU6OmRpc3Bh
dGNoU2NvcGVkRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7CiAgICAgLy8gV2UgbmVl
ZCB0byBzZXQgdGhlIHRhcmdldCBoZXJlIGJlY2F1c2UgaXQgY2FuIGdvIGF3YXkgYnkgdGhlIHRp
bWUgd2UgYWN0dWFsbHkgZmlyZSB0aGUgZXZlbnQuCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVu
dFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyh0aGlzKSk7CisgICAgZXZlbnQtPnNldFRh
cmdldChFdmVudERpc3BhdGNoZXI6OmV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVz
KHRoaXMpKTsKIAogICAgIFNjb3BlZEV2ZW50UXVldWU6Omluc3RhbmNlKCktPmVucXVldWVFdmVu
dChldmVudCk7CiB9CiAKLXN0YXRpYyBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4
dChjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQorYm9vbCBOb2RlOjpkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewotICAgIHJldHVybiBhbmNlc3Rv
cnMuaXNFbXB0eSgpID8gMCA6ICZhbmNlc3RvcnMubGFzdCgpOwotfQotCi1zdGF0aWMgRXZlbnRE
aXNwYXRjaEJlaGF2aW9yIGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqIGV2ZW50KQot
ewotICAgIC8vIFBlciBYQkwgMi4wIHNwZWMsIG11dGF0aW9uIGV2ZW50cyBzaG91bGQgbmV2ZXIg
Y3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyeToKLSAgICAvLyBodHRwOi8vZGV2LnczLm9yZy8yMDA2
L3hibDIvI2V2ZW50LWZsb3ctYW5kLXRhcmdldGluZy1hY3Jvc3Mtc2hhZG93LXMKLSAgICBpZiAo
ZXZlbnQtPmlzTXV0YXRpb25FdmVudCgpKQotICAgICAgICByZXR1cm4gU3RheUluc2lkZVNoYWRv
d0RPTTsKLQotICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50IHRv
IGNyb3NzIHRoZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4KLSAgICAvLyBDaGFuZ2luZyB0aGlz
IGJyZWFrcyBleGlzdGluZyBzaXRlcy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxzLgotICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50KQotICAgICAgICByZXR1cm4gU3Rh
eUluc2lkZVNoYWRvd0RPTTsKLQotICAgIHJldHVybiBSZXRhcmdldEV2ZW50OwotfQotCi1ib29s
IE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCi17Ci0gICAg
UmVmUHRyPEV2ZW50VGFyZ2V0PiBwcm90ZWN0ID0gdGhpczsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2
ZW50ID0gcHJwRXZlbnQ7Ci0KLSAgICBldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVj
dGluZ1NWR1RhcmdldFJ1bGVzKHRoaXMpKTsKLQotICAgIFJlZlB0cjxGcmFtZVZpZXc+IHZpZXcg
PSBkb2N1bWVudCgpLT52aWV3KCk7Ci0KLSAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRk
ZW4oKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7Ci0gICAgQVNTRVJUKCFldmVudC0+
dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBjb2RlIGNhbiBjcmVhdGUgYW4gZXZlbnQg
d2l0aCBhbiBlbXB0eSBuYW1lLCBidXQgbm90IG51bGwuCi0KLSAgICBSZWZQdHI8RXZlbnRUYXJn
ZXQ+IG9yaWdpbmFsVGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpOwotICAgIFZlY3RvcjxFdmVudENv
bnRleHQ+IGFuY2VzdG9yczsKLSAgICBnZXRFdmVudEFuY2VzdG9ycyh0aGlzLCBhbmNlc3RvcnMs
IG9yaWdpbmFsVGFyZ2V0LmdldCgpLCBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKGV2ZW50Lmdl
dCgpKSk7Ci0KLSAgICBXaW5kb3dFdmVudENvbnRleHQgd2luZG93Q29udGV4dChldmVudC5nZXQo
KSwgdGhpcywgdG9wRXZlbnRDb250ZXh0KGFuY2VzdG9ycykpOwotCi0gICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bERpc3BhdGNoRXZlbnQoZG9jdW1lbnQoKSwgKmV2ZW50LCB3aW5kb3dDb250ZXh0LndpbmRvdygp
LCB0aGlzLCBhbmNlc3RvcnMpOwotCi0gICAgLy8gR2l2ZSB0aGUgdGFyZ2V0IG5vZGUgYSBjaGFu
Y2UgdG8gZG8gc29tZSB3b3JrIGJlZm9yZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0IGEgY3JhY2su
Ci0gICAgdm9pZCogZGF0YSA9IHByZURpc3BhdGNoRXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpKTsK
LSAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQotICAgICAgICBnb3RvIGRvbmVE
aXNwYXRjaGluZzsKLQotICAgIC8vIFRyaWdnZXIgY2FwdHVyaW5nIGV2ZW50IGhhbmRsZXJzLCBz
dGFydGluZyBhdCB0aGUgdG9wIGFuZCB3b3JraW5nIG91ciB3YXkgZG93bi4KLSAgICBldmVudC0+
c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKLQotICAgIGlmICh3aW5kb3dD
b250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKSAmJiBldmVudC0+cHJvcGFnYXRp
b25TdG9wcGVkKCkpCi0gICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IGFuY2VzdG9ycy5zaXplKCk7IGk7IC0taSkgewotICAgICAgICBhbmNlc3RvcnNb
aSAtIDFdLmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKLSAgICAgICAgaWYgKGV2ZW50
LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKLSAgICAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5n
OwotICAgIH0KLQotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwot
ICAgIGV2ZW50LT5zZXRUYXJnZXQob3JpZ2luYWxUYXJnZXQuZ2V0KCkpOwotICAgIGV2ZW50LT5z
ZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKHRoaXMp
KTsKLSAgICBoYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7Ci0gICAgaWYgKGV2ZW50LT5w
cm9wYWdhdGlvblN0b3BwZWQoKSkKLSAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7Ci0KLSAg
ICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSAmJiAhZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKSB7Ci0gICAg
ICAgIC8vIFRyaWdnZXIgYnViYmxpbmcgZXZlbnQgaGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSBi
b3R0b20gYW5kIHdvcmtpbmcgb3VyIHdheSB1cC4KLSAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKLQotICAgICAgICBzaXplX3Qgc2l6ZSA9IGFuY2Vz
dG9ycy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICAgICAgICBhbmNlc3RvcnNbaV0uaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkp
OwotICAgICAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCBldmVudC0+
Y2FuY2VsQnViYmxlKCkpCi0gICAgICAgICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7Ci0g
ICAgICAgIH0KLSAgICAgICAgd2luZG93Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5n
ZXQoKSk7Ci0gICAgfQotCi1kb25lRGlzcGF0Y2hpbmc6Ci0gICAgZXZlbnQtPnNldFRhcmdldChv
cmlnaW5hbFRhcmdldC5nZXQoKSk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7Ci0g
ICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoMCk7Ci0KLSAgICAvLyBQYXNzIHRoZSBkYXRhIGZyb20g
dGhlIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyIHRvIHRoZSBwb3N0RGlzcGF0Y2hFdmVudEhhbmRs
ZXIuCi0gICAgcG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpLCBkYXRhKTsKLQot
ICAgIC8vIENhbGwgZGVmYXVsdCBldmVudCBoYW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhh
dmUgYSBjb25jZXB0IG9mIHByZXZlbnRpbmcKLSAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUg
ZGV0YWlsIG9mIHdoaWNoIGhhbmRsZXJzIGFyZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKLSAgICAv
LyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgaWYg
KCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkg
ewotICAgICAgICAvLyBOb24tYnViYmxpbmcgZXZlbnRzIGNhbGwgb25seSBvbmUgZGVmYXVsdCBl
dmVudCBoYW5kbGVyLCB0aGUgb25lIGZvciB0aGUgdGFyZ2V0LgotICAgICAgICBkZWZhdWx0RXZl
bnRIYW5kbGVyKGV2ZW50LmdldCgpKTsKLSAgICAgICAgQVNTRVJUKCFldmVudC0+ZGVmYXVsdFBy
ZXZlbnRlZCgpKTsKLSAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAg
ICAgICAgZ290byBkb25lV2l0aERlZmF1bHQ7Ci0gICAgICAgIC8vIEZvciBidWJibGluZyBldmVu
dHMsIGNhbGwgZGVmYXVsdCBldmVudCBoYW5kbGVycyBvbiB0aGUgc2FtZSB0YXJnZXRzIGluIHRo
ZQotICAgICAgICAvLyBzYW1lIG9yZGVyIGFzIHRoZSBidWJibGluZyBwaGFzZS4KLSAgICAgICAg
aWYgKGV2ZW50LT5idWJibGVzKCkpIHsKLSAgICAgICAgICAgIHNpemVfdCBzaXplID0gYW5jZXN0
b3JzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgYW5jZXN0b3JzW2ldLm5vZGUoKS0+ZGVmYXVsdEV2ZW50SGFu
ZGxlcihldmVudC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFldmVudC0+ZGVmYXVs
dFByZXZlbnRlZCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVk
KCkpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZVdpdGhEZWZhdWx0OwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi1kb25lV2l0aERlZmF1bHQ6Ci0KLSAgICAvLyBFbnN1
cmUgdGhhdCBhZnRlciBldmVudCBkaXNwYXRjaCwgdGhlIGV2ZW50J3MgdGFyZ2V0IG9iamVjdCBp
cyB0aGUKLSAgICAvLyBvdXRlcm1vc3Qgc2hhZG93IERPTSBib3VuZGFyeS4KLSAgICBldmVudC0+
c2V0VGFyZ2V0KHdpbmRvd0NvbnRleHQudGFyZ2V0KCkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50
VGFyZ2V0KDApOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVu
dChjb29raWUpOwotCi0gICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAg
IHJldHVybiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQodGhpcywgZXZlbnQpOwogfQog
CiB2b2lkIE5vZGU6OmRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKQpAQCAtMjgzNywxNDYg
KzI2NTcsMTIgQEAgYm9vbCBOb2RlOjpkaXNwYXRjaEtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5
Ym9hcmRFdmVudCYga2V5KQogYm9vbCBOb2RlOjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsCiAg
ICAgaW50IGRldGFpbCwgTm9kZSogcmVsYXRlZFRhcmdldCkKIHsKLSAgICBBU1NFUlQoIWV2ZW50
RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAgCi0gICAgSW50UG9pbnQgY29udGVudHNQb3M7Ci0g
ICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50KCktPnZpZXcoKSkKLSAgICAgICAgY29u
dGVudHNQb3MgPSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50LnBvcygpKTsKLQotICAgIHNo
b3J0IGJ1dHRvbiA9IGV2ZW50LmJ1dHRvbigpOwotCi0gICAgQVNTRVJUKGV2ZW50LmV2ZW50VHlw
ZSgpID09IE1vdXNlRXZlbnRNb3ZlZCB8fCBidXR0b24gIT0gTm9CdXR0b24pOwotICAgIAotICAg
IHJldHVybiBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnRUeXBlLCBidXR0b24sIGRldGFpbCwKLSAg
ICAgICAgY29udGVudHNQb3MueCgpLCBjb250ZW50c1Bvcy55KCksIGV2ZW50Lmdsb2JhbFgoKSwg
ZXZlbnQuZ2xvYmFsWSgpLAotICAgICAgICBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgp
LCBldmVudC5zaGlmdEtleSgpLCBldmVudC5tZXRhS2V5KCksCi0gICAgICAgIGZhbHNlLCByZWxh
dGVkVGFyZ2V0LCAwKTsKLX0KLQotdm9pZCBOb2RlOjpkaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsCi0gICAgUGFzc1JlZlB0cjxFdmVudD4g
dW5kZXJseWluZ0V2ZW50KQotewotICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigp
KTsKLQotICAgIGJvb2wgY3RybEtleSA9IGZhbHNlOwotICAgIGJvb2wgYWx0S2V5ID0gZmFsc2U7
Ci0gICAgYm9vbCBzaGlmdEtleSA9IGZhbHNlOwotICAgIGJvb2wgbWV0YUtleSA9IGZhbHNlOwot
ICAgIGlmIChVSUV2ZW50V2l0aEtleVN0YXRlKiBrZXlTdGF0ZUV2ZW50ID0gZmluZEV2ZW50V2l0
aEtleVN0YXRlKHVuZGVybHlpbmdFdmVudC5nZXQoKSkpIHsKLSAgICAgICAgY3RybEtleSA9IGtl
eVN0YXRlRXZlbnQtPmN0cmxLZXkoKTsKLSAgICAgICAgYWx0S2V5ID0ga2V5U3RhdGVFdmVudC0+
YWx0S2V5KCk7Ci0gICAgICAgIHNoaWZ0S2V5ID0ga2V5U3RhdGVFdmVudC0+c2hpZnRLZXkoKTsK
LSAgICAgICAgbWV0YUtleSA9IGtleVN0YXRlRXZlbnQtPm1ldGFLZXkoKTsKLSAgICB9Ci0KLSAg
ICAvLyBMaWtlIEdlY2tvLCB3ZSBqdXN0IHBhc3MgMCBmb3IgZXZlcnl0aGluZyB3aGVuIHdlIG1h
a2UgYSBmYWtlIG1vdXNlIGV2ZW50LgotICAgIC8vIEludGVybmV0IEV4cGxvcmVyIGluc3RlYWQg
Z2l2ZXMgdGhlIGN1cnJlbnQgbW91c2UgcG9zaXRpb24gYW5kIHN0YXRlLgotICAgIGRpc3BhdGNo
TW91c2VFdmVudChldmVudFR5cGUsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgICAgIGN0cmxLZXks
IGFsdEtleSwgc2hpZnRLZXksIG1ldGFLZXksIHRydWUsIDAsIHVuZGVybHlpbmdFdmVudCk7Cisg
ICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KHRoaXMsIGV2ZW50
LCBldmVudFR5cGUsIGRldGFpbCwgcmVsYXRlZFRhcmdldCk7CiB9CiAKIHZvaWQgTm9kZTo6ZGlz
cGF0Y2hTaW11bGF0ZWRDbGljayhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgYm9vbCBzZW5kTW91
c2VFdmVudHMsIGJvb2wgc2hvd1ByZXNzZWRMb29rKQogewotICAgIGlmICghZ05vZGVzRGlzcGF0
Y2hpbmdTaW11bGF0ZWRDbGlja3MpCi0gICAgICAgIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVk
Q2xpY2tzID0gbmV3IEhhc2hTZXQ8Tm9kZSo+OwotICAgIGVsc2UgaWYgKGdOb2Rlc0Rpc3BhdGNo
aW5nU2ltdWxhdGVkQ2xpY2tzLT5jb250YWlucyh0aGlzKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5hZGQodGhpcyk7Ci0gICAg
Ci0gICAgLy8gc2VuZCBtb3VzZWRvd24gYW5kIG1vdXNldXAgYmVmb3JlIHRoZSBjbGljaywgaWYg
cmVxdWVzdGVkCi0gICAgaWYgKHNlbmRNb3VzZUV2ZW50cykKLSAgICAgICAgZGlzcGF0Y2hTaW11
bGF0ZWRNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCwgZXZlbnQuZ2V0KCkp
OwotICAgIHNldEFjdGl2ZSh0cnVlLCBzaG93UHJlc3NlZExvb2spOwotICAgIGlmIChzZW5kTW91
c2VFdmVudHMpCi0gICAgICAgIGRpc3BhdGNoU2ltdWxhdGVkTW91c2VFdmVudChldmVudE5hbWVz
KCkubW91c2V1cEV2ZW50LCBldmVudC5nZXQoKSk7Ci0gICAgc2V0QWN0aXZlKGZhbHNlKTsKLQot
ICAgIC8vIGFsd2F5cyBzZW5kIGNsaWNrCi0gICAgZGlzcGF0Y2hTaW11bGF0ZWRNb3VzZUV2ZW50
KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBldmVudCk7Ci0gICAgCi0gICAgZ05vZGVzRGlzcGF0
Y2hpbmdTaW11bGF0ZWRDbGlja3MtPnJlbW92ZSh0aGlzKTsKLX0KLQotLy8gRklYTUU6IE9uY2Ug
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyOTYzIGxhbmRzLCB0aGlz
IHNob3VsZAotLy8gYmUgZ3JlYXRseSBpbXByb3ZlZC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NDAyNS4KLXN0YXRpYyBOb2RlKiBwdWxsT3V0T2ZTaGFkb3co
Tm9kZSogbm9kZSkKLXsKLSAgICBOb2RlKiBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeSA9IG5vZGU7
Ci0gICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbjsgbiA9IG4tPnBhcmVudE9ySG9zdE5vZGUoKSkg
ewotICAgICAgICBpZiAobi0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgICAgICBvdXRlcm1vc3RT
aGFkb3dCb3VuZGFyeSA9IG4tPnBhcmVudE9ySG9zdE5vZGUoKTsKLSAgICB9Ci0gICAgcmV0dXJu
IG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OwotfQotCi1ib29sIE5vZGU6OmRpc3BhdGNoTW91c2VF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGJ1dHRvbiwgaW50IGRldGFp
bCwKLSAgICBpbnQgcGFnZVgsIGludCBwYWdlWSwgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLAot
ICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtl
eSwgCi0gICAgYm9vbCBpc1NpbXVsYXRlZCwgTm9kZSogcmVsYXRlZFRhcmdldEFyZywgUGFzc1Jl
ZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50KQotewotICAgIEFTU0VSVCghZXZlbnREaXNwYXRj
aEZvcmJpZGRlbigpKTsKLSAgICBpZiAoZGlzYWJsZWQoKSkgLy8gRG9uJ3QgZXZlbiBzZW5kIERP
TSBldmVudHMgZm9yIGRpc2FibGVkIGNvbnRyb2xzLi4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgCi0gICAgaWYgKGV2ZW50VHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gU2hvdWxkbid0IGhhcHBlbi4KLSAgICAKLSAgICAvLyBEaXNwYXRjaGluZyB0aGUgZmlyc3Qg
ZXZlbnQgY2FuIGVhc2lseSByZXN1bHQgaW4gdGhpcyBub2RlIGJlaW5nIGRlc3Ryb3llZC4KLSAg
ICAvLyBTaW5jZSB3ZSBkaXNwYXRjaCB1cCB0byB0aHJlZSBldmVudHMgaGVyZSwgd2UgbmVlZCB0
byBtYWtlIHN1cmUgd2UncmUgcmVmZXJlbmNlZAotICAgIC8vIHNvIHRoZSBwb2ludGVyIHdpbGwg
YmUgZ29vZCBmb3IgdGhlIHR3byBzdWJzZXF1ZW50IG9uZXMuCi0gICAgUmVmUHRyPE5vZGU+IHBy
b3RlY3QodGhpcyk7Ci0gICAgCi0gICAgYm9vbCBjYW5jZWxhYmxlID0gZXZlbnRUeXBlICE9IGV2
ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudDsKLSAgICAKLSAgICBib29sIHN3YWxsb3dFdmVudCA9
IGZhbHNlOwotICAgIAotICAgIC8vIEF0dGVtcHRpbmcgdG8gZGlzcGF0Y2ggd2l0aCBhIG5vbi1F
dmVudFRhcmdldCByZWxhdGVkVGFyZ2V0IGNhdXNlcyB0aGUgcmVsYXRlZFRhcmdldCB0byBiZSBz
aWxlbnRseSBpZ25vcmVkLgotICAgIFJlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0ID0gcHVsbE91
dE9mU2hhZG93KHJlbGF0ZWRUYXJnZXRBcmcpOwotCi0gICAgaW50IGFkanVzdGVkUGFnZVggPSBw
YWdlWDsKLSAgICBpbnQgYWRqdXN0ZWRQYWdlWSA9IHBhZ2VZOwotICAgIGlmIChGcmFtZSogZnJh
bWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7Ci0gICAgICAgIGZsb2F0IHBhZ2Vab29tID0gZnJh
bWUtPnBhZ2Vab29tRmFjdG9yKCk7Ci0gICAgICAgIGlmIChwYWdlWm9vbSAhPSAxLjBmKSB7Ci0g
ICAgICAgICAgICAvLyBBZGp1c3Qgb3VyIHBhZ2VYIGFuZCBwYWdlWSB0byBhY2NvdW50IGZvciB0
aGUgcGFnZSB6b29tLgotICAgICAgICAgICAgYWRqdXN0ZWRQYWdlWCA9IGxyb3VuZGYocGFnZVgg
LyBwYWdlWm9vbSk7Ci0gICAgICAgICAgICBhZGp1c3RlZFBhZ2VZID0gbHJvdW5kZihwYWdlWSAv
IHBhZ2Vab29tKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBt
b3VzZUV2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwKLSAgICAgICAgdHJ1ZSwg
Y2FuY2VsYWJsZSwgZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwKLSAgICAgICAgZGV0YWlsLCBz
Y3JlZW5YLCBzY3JlZW5ZLCBhZGp1c3RlZFBhZ2VYLCBhZGp1c3RlZFBhZ2VZLAotICAgICAgICBj
dHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBidXR0b24sCi0gICAgICAgIHJlbGF0
ZWRUYXJnZXQsIDAsIGlzU2ltdWxhdGVkKTsKLSAgICBtb3VzZUV2ZW50LT5zZXRVbmRlcmx5aW5n
RXZlbnQodW5kZXJseWluZ0V2ZW50LmdldCgpKTsKLSAgICBtb3VzZUV2ZW50LT5zZXRBYnNvbHV0
ZUxvY2F0aW9uKEludFBvaW50KHBhZ2VYLCBwYWdlWSkpOwotICAgIAotICAgIGRpc3BhdGNoRXZl
bnQobW91c2VFdmVudCk7Ci0gICAgYm9vbCBkZWZhdWx0SGFuZGxlZCA9IG1vdXNlRXZlbnQtPmRl
ZmF1bHRIYW5kbGVkKCk7Ci0gICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gbW91c2VFdmVudC0+
ZGVmYXVsdFByZXZlbnRlZCgpOwotICAgIGlmIChkZWZhdWx0SGFuZGxlZCB8fCBkZWZhdWx0UHJl
dmVudGVkKQotICAgICAgICBzd2FsbG93RXZlbnQgPSB0cnVlOwotICAgIAotICAgIC8vIFNwZWNp
YWwgY2FzZTogSWYgaXQncyBhIGRvdWJsZSBjbGljayBldmVudCwgd2UgYWxzbyBzZW5kIHRoZSBk
YmxjbGljayBldmVudC4gVGhpcyBpcyBub3QgcGFydAotICAgIC8vIG9mIHRoZSBET00gc3BlY3Ms
IGJ1dCBpcyB1c2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9uZGJsY2xpY2s9IiIgYXR0
cmlidXRlLiAgVGhpcyBpcyB0cmVhdGVkCi0gICAgLy8gYXMgYSBzZXBhcmF0ZSBldmVudCBpbiBv
dGhlciBET00tY29tcGxpYW50IGJyb3dzZXJzIGxpa2UgRmlyZWZveCwgYW5kIHNvIHdlIGRvIHRo
ZSBzYW1lLgotICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYg
ZGV0YWlsID09IDIpIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiBkb3VibGVDbGlja0V2ZW50ID0g
TW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50LAotICAgICAgICAg
ICAgdHJ1ZSwgY2FuY2VsYWJsZSwgZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwKLSAgICAgICAg
ICAgIGRldGFpbCwgc2NyZWVuWCwgc2NyZWVuWSwgYWRqdXN0ZWRQYWdlWCwgYWRqdXN0ZWRQYWdl
WSwKLSAgICAgICAgICAgIGN0cmxLZXksIGFsdEtleSwgc2hpZnRLZXksIG1ldGFLZXksIGJ1dHRv
biwKLSAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQsIDAsIGlzU2ltdWxhdGVkKTsKLSAgICAgICAg
ZG91YmxlQ2xpY2tFdmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHVuZGVybHlpbmdFdmVudC5nZXQo
KSk7Ci0gICAgICAgIGlmIChkZWZhdWx0SGFuZGxlZCkKLSAgICAgICAgICAgIGRvdWJsZUNsaWNr
RXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnQoZG91Ymxl
Q2xpY2tFdmVudCk7Ci0gICAgICAgIGlmIChkb3VibGVDbGlja0V2ZW50LT5kZWZhdWx0SGFuZGxl
ZCgpIHx8IGRvdWJsZUNsaWNrRXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSkKLSAgICAgICAgICAg
IHN3YWxsb3dFdmVudCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN3YWxsb3dFdmVudDsK
KyAgICBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2sodGhpcywgZXZlbnQs
IHNlbmRNb3VzZUV2ZW50cywgc2hvd1ByZXNzZWRMb29rKTsKIH0KIAogdm9pZCBOb2RlOjpkaXNw
YXRjaFdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggNGI1
MjE2OGZjYmFiMzhhY2VjZjdmY2Y1MTA1MDgyZDU4ODY5OWFmNS4uMTI5YTQ5M2U4NTU5YzUwNWJh
YmY3YWViZWQ0MDA5NDkyNmVhMDg3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC01MzcsMTEgKzUzNyw2IEBA
IHB1YmxpYzoKICAgICBib29sIGRpc3BhdGNoS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50Jik7CiAgICAgdm9pZCBkaXNwYXRjaFdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50
Jik7CiAgICAgYm9vbCBkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGludCBjbGlja0NvdW50ID0gMCwgTm9k
ZSogcmVsYXRlZFRhcmdldCA9IDApOwotICAgIGJvb2wgZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBpbnQgYnV0dG9uLCBpbnQgY2xpY2tDb3VudCwKLSAg
ICAgICAgaW50IHBhZ2VYLCBpbnQgcGFnZVksIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwKLSAg
ICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRh
S2V5LAotICAgICAgICBib29sIGlzU2ltdWxhdGVkLCBOb2RlKiByZWxhdGVkVGFyZ2V0LCBQYXNz
UmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQpOwotICAgIHZvaWQgZGlzcGF0Y2hTaW11bGF0
ZWRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50PiB1bmRlcmx5aW5nRXZlbnQpOwogICAgIHZvaWQgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhQ
YXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzID0g
ZmFsc2UsIGJvb2wgc2hvd1ByZXNzZWRMb29rID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87053</attachid>
            <date>2011-03-26 20:09:23 -0700</date>
            <delta_ts>2011-03-28 09:24:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57168-20110326200922.patch</filename>
            <type>text/plain</type>
            <size>45284</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE5NzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDFhODQxOTBlOGE3OTli
NDlhYzg0NTM2YmM2YzQ3Y2FkMGE5MmE0MTkuLmVkMzNhY2VhZWU0NDE1NmQ4YjUyNzEzMzdmYzFm
MmEwYzIwZTI2NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtMTMxLDYgKzEzMSw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCWRvbS9FcnJvckV2ZW50LmNwcCBcCiAJZG9t
L0V2ZW50LmNwcCBcCiAJZG9tL0V2ZW50Q29udGV4dC5jcHAgXAorCWRvbS9FdmVudERpc3BhdGNo
ZXIuY3BwIFwKIAlkb20vRXZlbnROYW1lcy5jcHAgXAogCWRvbS9FdmVudFRhcmdldC5jcHAgXAog
CWRvbS9FdmVudFF1ZXVlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDJlMGU2MzZlZGY2
ZGRjYTBjNTRmYTMzOGRkODNhNzBkZjk5NjQ0ZTUuLjZkMGQzZjQ0YTAyMmRlNTRmNTIwZTZmOTky
NDU5OWM5MmQ2NTU2YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01NjEsNiArNTYxLDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9FcnJvckV2ZW50LmNwcAogICAgIGRvbS9FdmVu
dC5jcHAKICAgICBkb20vRXZlbnRDb250ZXh0LmNwcAorICAgIGRvbS9FdmVudERpc3BhdGNoZXIu
Y3BwCiAgICAgZG9tL0V2ZW50TmFtZXMuY3BwCiAgICAgZG9tL0V2ZW50VGFyZ2V0LmNwcAogICAg
IGRvbS9FdmVudFF1ZXVlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDUzMDMxOGI0ZjZmODkyNDc4MjBhYmYz
Njg1NmViOWJlNGU1NjY3M2MuLmY4M2U3YzBhNzA2MzdjZDQ3ZmFhZDA3MzY4ZTcyZjNjM2U0ZjI4
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMS0wMy0yNiAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBFdmVudERpc3BhdGNoZXIsIHRoZSBuZXcg
Y29tbW9uIHdheSB0byBmaXJlIGV2ZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3MTY4CisKKyAgICAgICAgVGhlIGdvYWwgaGVyZSBpcyB0d28t
Zm9sZDoKKyAgICAgICAgMSkgcmVkdWNlIHRoZSBuZWVkIHRvIHJhbmRvbWx5IHNwcmlua2xlIGd1
YXJkcyBhcm91bmQgdGhlIGRpc3BhdGNoIGNvZGUKKyAgICAgICAgYnkgY3JlYXRpbmcgYSB3ZWxs
LXNjb3BlZCBhYnN0cmFjdGlvbiBmb3IgZGlzcGF0Y2hpbmcgZXZlbnRzLgorICAgICAgICAyKSBj
cmVhdGUgYSBwbGFjZSB3aGVyZSBmaWRkbHkgZXZlbnQtcmVsYXRlZCB0aGluZ3MgbGlrZSBjcmVh
dGluZyBldmVudAorICAgICAgICBjb250ZXh0cyBmb3IgYW5jZXN0b3JzIGNhbiBiZSBkb25lIGxh
emlseS4KKworICAgICAgICBBZGRpdGlvbmFsbHksIHdpdGggYWxsIHRoZSBmcmVlLXN0YW5kaW5n
IHN0YXRpYyBmdW5jdGlvbnMsIHRoaXMgY29kZSB3YXMKKyAgICAgICAganVzdCBiZWdnaW5nIHRv
IGNvbWUgb3V0IG9mIE5vZGUuY3BwLgorCisgICAgICAgIFRoZSBmaXJzdCBzdGVwIGlzIGEgbmVh
ci1tZWNoYW5pY2FsIGV4dHJhY3Rpb24gb2YgbW91c2UtcmVsYXRlZCBldmVudHMKKyAgICAgICAg
ZnJvbSBOb2RlLmNwcCB0byBFdmVudERpc3BhdGNoZXIuIEZvciBub3csIHRoZSBjYWxsIHNpdGVz
IGFyZSBqdXN0CisgICAgICAgIHJlcGxhY2VkIHdpdGggaW52b2tpbmcgRXZlbnREaXNwYXRjaGVy
LiBMYXRlciwgd2UgY2FuIHJlbW92ZSB0aGVzZSBtZXRob2RzCisgICAgICAgIGZyb20gTm9kZS4K
KworICAgICAgICBSZWZhY3RvcmluZywgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzLgorCisgICAgICAg
ICogQW5kcm9pZC5tazogQWRkZWQgRXZlbnREaXNwYXRjaGVyIHRvIGJ1aWxkIHN5c3RlbS4KKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDogRGl0dG8uCisgICAgICAgICogR05VbWFrZWZpbGUuYW06
IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisgICAgICAgICogV2ViQ29y
ZS5wcm86IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBE
aXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRv
LgorICAgICAgICAqIGRvbS9ET01BbGxJbk9uZS5jcHA6IERpdHRvLgorICAgICAgICAqIGRvbS9F
dmVudERpc3BhdGNoZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVy
Lmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmRpc3BhdGNoU2NvcGVkRXZlbnQpOiBSZXBsYWNlZCB0byB1c2UgRXZlbnREaXNwYXRjaGVy
LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hFdmVudCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKTogRGl0dG8uCisgICAgICAgICog
ZG9tL05vZGUuaDogVXBkYXRlZCBkZWNscy4KKwogMjAxMS0wMy0yNSAgRGF2ZSBIeWF0dCAgPGh5
YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVsZSBQZXRlcnNvbi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KaW5kZXggYTQ0NzNiNDM1ZmJmOWRhOTI1OTQ4ZTFjM2JjNTM0YzZmYzZk
MzAxNi4uODU2ZGIwNmUwOTY0Nzk3NDA1ZjUwM2FkNThiYmVjNWNkODM0NWNiNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTEyMjAsNiArMTIyMCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENv
bnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmggXAorCVNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudEV4Y2VwdGlvbi5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnROYW1lcy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGE4Yjc1ZGMwZDZiZTQx
YmIwYTQwZDc5NjI0NmQzYzE4ZjRjNjAxOTcuLjEzZjMyNTkwMmFhMDNiMmRjOTMzMzI3NDIwZjJj
NTUxODA4NDBlYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI0MzEsNiArMjQzMSw4IEBACiAgICAg
ICAgICAgICAnZG9tL0V2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL0V2ZW50Q29udGV4dC5j
cHAnLAogICAgICAgICAgICAgJ2RvbS9FdmVudENvbnRleHQuaCcsCisgICAgICAgICAgICAnZG9t
L0V2ZW50RGlzcGF0Y2hlci5jcHAnLAorICAgICAgICAgICAgJ2RvbS9FdmVudERpc3BhdGNoZXIu
aCcsCiAgICAgICAgICAgICAnZG9tL0V2ZW50RXhjZXB0aW9uLmgnLAogICAgICAgICAgICAgJ2Rv
bS9FdmVudE5hbWVzLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0V2ZW50UXVldWUuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KaW5kZXggMGVmOGVkYWZkNGQ5YzQ5N2UzNTRiODQ4ZTU0ZGJjODE3Y2ZlYmU5Ny4u
ODhlMWNjMjQxZjRjMDFhMTRhNWZiODA0N2VhNjkyOWFiYTU0YjAwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8K
QEAgLTQ4NSw2ICs0ODUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vRXJyb3JFdmVudC5jcHAg
XAogICAgIGRvbS9FdmVudC5jcHAgXAogICAgIGRvbS9FdmVudENvbnRleHQuY3BwIFwKKyAgICBk
b20vRXZlbnREaXNwYXRjaGVyLmNwcCBcCiAgICAgZG9tL0V2ZW50TmFtZXMuY3BwIFwKICAgICBk
b20vRXZlbnRUYXJnZXQuY3BwIFwKICAgICBkb20vRXZlbnRRdWV1ZS5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA3MmFlMzQ1ODNkMDc4
MzgwYWExOTdjM2Q0MGI2MDg0YjBjODFhODY5Li45OTExZDAxZjRmNjEwMWU3MDVjOTYyNjBmZmQz
MGY3Y2JlZjE1MDQ0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagpAQCAtNDQyNjIsNiArNDQyNjIsNjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXEV2ZW50RGlzcGF0Y2hlci5jcHAiCisJCQkJ
PgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgor
CQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0
ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRv
b2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxs
fFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9v
bAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0xU
Q0d8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxU
b29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZG9tXEV2ZW50RGlzcGF0Y2hlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxkb21cRXZlbnRFeGNlcHRpb24uaCIKIAkJCQk+CiAJCQk8L0ZpbGU+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggODEzNzA5NjJlMmZmOWY1Y2RmN2M2ZTQzN2YzZjhiNjJjMTc4ODE5YS4uNzdkNjIwMjA3
Nzc3MjgxMjllMzAzZDVjY2VhOTUyYmIxODU5Njk0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTAyLDYgKzkwMiw4IEBACiAJ
CTQxNkU3NUNDMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1Q0EwRURGOTBDNzAw
MzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgKi87IH07CiAJCTQxODg1QjkzMTFCNkZEQTYw
MDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDE4ODVCOTExMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNz
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDE4ODVCOTQxMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxODg1QjkyMTFCNkZEQTYwMDMz
ODNCQiAvKiBGb3JtU3VibWlzc2lvbi5jcHAgKi87IH07CisJCTQxOEEwNkQwMTMzQzA0RDUwMENE
Mzc5QyAvKiBFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxOEEwNkNFMTMzQzA0RDUwMENEMzc5QyAvKiBFdmVudERpc3BhdGNo
ZXIuaCAqLzsgfTsKKwkJNDE4QTA2RDExMzNDMDRENTAwQ0QzNzlDIC8qIEV2ZW50RGlzcGF0Y2hl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MThB
MDZDRjEzM0MwNEQ1MDBDRDM3OUMgLyogRXZlbnREaXNwYXRjaGVyLmNwcCAqLzsgfTsKIAkJNDE4
Rjg4MDQwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE4Rjg4MDIwRkY5NTdBRTAwODBG
MDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuY3BwICovOyB9OwogCQk0MThGODgwNTBGRjk1N0FGMDA4
MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDE4Rjg4MDMwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RX
b3JrZXIuaCAqLzsgfTsKIAkJNDFBM0Q1OEUxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdv
cmtlclRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MUEzRDU4QzEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNw
cCAqLzsgfTsKQEAgLTczMjUsNiArNzMyNyw4IEBACiAJCTQxNkU3NUNBMEVERjkwQzcwMDM2MEUx
RCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2NyaXB0Q2FsbEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDE4ODVCOTExMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1TdWJtaXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxODg1QjkyMTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtU3VibWlzc2lvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxOEEwNkNFMTMzQzA0RDUwMENEMzc5
QyAvKiBFdmVudERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXZlbnREaXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxOEEwNkNG
MTMzQzA0RDUwMENEMzc5QyAvKiBFdmVudERpc3BhdGNoZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDE4Rjg4MDIwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3Jr
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYnN0cmFjdFdv
cmtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxOEY4ODAzMEZGOTU3QUUw
MDgwRjA0NSAvKiBKU0Fic3RyYWN0V29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTQWJzdHJhY3RXb3JrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDFBM0Q1OEMxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQu
Y3BwOyBwYXRoID0gd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTkyMjMsNiArMTkyMjcsOCBAQAogCQkJCTE0RTgzNkQyMDlG
ODUxMjAwMEI4NUFFNCAvKiBFdmVudC5pZGwgKi8sCiAJCQkJNDEzOEQzMzQxMjQ0MDU0ODAwMzIz
RDMzIC8qIEV2ZW50Q29udGV4dC5jcHAgKi8sCiAJCQkJNDEzOEQzMzMxMjQ0MDU0ODAwMzIzRDMz
IC8qIEV2ZW50Q29udGV4dC5oICovLAorCQkJCTQxOEEwNkNGMTMzQzA0RDUwMENEMzc5QyAvKiBF
dmVudERpc3BhdGNoZXIuY3BwICovLAorCQkJCTQxOEEwNkNFMTMzQzA0RDUwMENEMzc5QyAvKiBF
dmVudERpc3BhdGNoZXIuaCAqLywKIAkJCQlCQzYwRDkwOTBEMkExN0NFMDBCOTkxOEYgLyogRXZl
bnRFeGNlcHRpb24uaCAqLywKIAkJCQlCQzYwRDkwQTBEMkExN0NFMDBCOTkxOEYgLyogRXZlbnRF
eGNlcHRpb24uaWRsICovLAogCQkJCTkzNUZCQzQ0MDlCQTAwQjkwMEUyMzBCMSAvKiBFdmVudExp
c3RlbmVyLmggKi8sCkBAIC0yMDc5MCw2ICsyMDc5Niw3IEBACiAJCQkJMkVDRjdBRTIxMDE2MkI1
ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjQyMEE0
NEVGQzcwMEY5OTJFMCAvKiBFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzOEQzMzUxMjQ0
MDU0ODAwMzIzRDMzIC8qIEV2ZW50Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDE4QTA2
RDAxMzNDMDRENTAwQ0QzNzlDIC8qIEV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM2MEQ5MEMwRDJBMTdDRTAwQjk5MThGIC8qIEV2ZW50RXhjZXB0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5M0MwOUE1MzBCMDY0REIzMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzVGQkM0NTA5QkEwMEI5MDBFMjMwQjEgLyogRXZlbnRMaXN0ZW5l
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzYwMyw2ICsyMzYxMCw3IEBACiAJCQkJMkVDRjdBRTEx
MDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUw
MzFCNDEwQTQ0RUZDNzAwRjk5MkUwIC8qIEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQx
MzhEMzM2MTI0NDA1NDgwMDMyM0QzMyAvKiBFdmVudENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDE4QTA2RDExMzNDMDRENTAwQ0QzNzlDIC8qIEV2ZW50RGlzcGF0Y2hlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5M0MwOUE4MTBCMDY0RjAwMDA1QUJENEQgLyogRXZlbnRIYW5kbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQzA5QTdGMEIwNjRFRUYwMDVBQkQ0RCAvKiBFdmVu
dEhhbmRsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQ0ExOUUwNTBEQzI1NTk1MDA2NUE5
OTQgLyogRXZlbnRMb29wTWFjLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbElu
T25lLmNwcAppbmRleCAwOGE3NjgwMjM4MzFmNDJhZDYzMjM1ZjcxMDA0YmUyMzQ3OTI1NTUxLi5j
YzQ4ODhmMmYzMTFiYzc1YjgxYTY5ZTgwNjQ3MWM1ZDg1MDQ4NTMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
T01BbGxJbk9uZS5jcHAKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJFcnJvckV2ZW50LmNw
cCIKICNpbmNsdWRlICJFdmVudC5jcHAiCiAjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmNwcCIKKyNp
bmNsdWRlICJFdmVudERpc3BhdGNoZXIuY3BwIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuY3BwIgog
I2luY2x1ZGUgIkV2ZW50UXVldWUuY3BwIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmNwcCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjllYTRmN2E5OWEx
NTE0MjRmZjkyZWJiMDllZThmNmEwZDE2YmM5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAg
ICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA5IFRv
cmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5o
IgorCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudENvbnRleHQuaCIKKyNpbmNs
dWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNs
dWRlICJOb2RlLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0
YW5jZS5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5o
IgorI2VuZGlmCisKKyNpbmNsdWRlICJVSUV2ZW50LmgiCisjaW5jbHVkZSAiVUlFdmVudFdpdGhL
ZXlTdGF0ZS5oIgorI2luY2x1ZGUgIldpbmRvd0V2ZW50Q29udGV4dC5oIgorCisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBIYXNoU2V0PE5v
ZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MgPSAwOworCitib29sIEV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK3sKKyAgICBFdmVudERpc3BhdGNoZXIgZGlzcGF0Y2hlcihub2RlKTsKKyAgICByZXR1
cm4gZGlzcGF0Y2hlci5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKK30KKworYm9vbCBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoTW91c2VFdmVudChOb2RlKiBub2RlLCBjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIGV2ZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwKKyAgICBpbnQgZGV0
YWlsLCBOb2RlKiByZWxhdGVkVGFyZ2V0KQoreworICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZv
cmJpZGRlbigpKTsKKyAgICBFdmVudERpc3BhdGNoZXIgZGlzcGF0Y2hlcihub2RlKTsKKworICAg
IEludFBvaW50IGNvbnRlbnRzUG9zOworICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBub2RlLT5k
b2N1bWVudCgpLT52aWV3KCkpCisgICAgICAgIGNvbnRlbnRzUG9zID0gdmlldy0+d2luZG93VG9D
b250ZW50cyhldmVudC5wb3MoKSk7CisKKyAgICBzaG9ydCBidXR0b24gPSBldmVudC5idXR0b24o
KTsKKworICAgIEFTU0VSVChldmVudC5ldmVudFR5cGUoKSA9PSBNb3VzZUV2ZW50TW92ZWQgfHwg
YnV0dG9uICE9IE5vQnV0dG9uKTsKKworICAgIHJldHVybiBkaXNwYXRjaGVyLmRpc3BhdGNoTW91
c2VFdmVudChldmVudFR5cGUsIGJ1dHRvbiwgZGV0YWlsLAorICAgICAgICBjb250ZW50c1Bvcy54
KCksIGNvbnRlbnRzUG9zLnkoKSwgZXZlbnQuZ2xvYmFsWCgpLCBldmVudC5nbG9iYWxZKCksCisg
ICAgICAgIGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0S2V5KCksIGV2ZW50LnNoaWZ0S2V5KCks
IGV2ZW50Lm1ldGFLZXkoKSwKKyAgICAgICAgZmFsc2UsIHJlbGF0ZWRUYXJnZXQsIDApOworfQor
Cit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhOb2RlKiBub2Rl
LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgYm9vbCBzZW5kTW91c2VFdmVudHMsIGJvb2wgc2hv
d1ByZXNzZWRMb29rKQoreworICAgIEV2ZW50RGlzcGF0Y2hlciBkaXNwYXRjaGVyKG5vZGUpOwor
CisgICAgaWYgKCFnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcykKKyAgICAgICAgZ05v
ZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MgPSBuZXcgSGFzaFNldDxOb2RlKj47CisgICAg
ZWxzZSBpZiAoZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPmNvbnRhaW5zKG5vZGUp
KQorICAgICAgICByZXR1cm47CisKKyAgICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNr
cy0+YWRkKG5vZGUpOworCisgICAgLy8gc2VuZCBtb3VzZWRvd24gYW5kIG1vdXNldXAgYmVmb3Jl
IHRoZSBjbGljaywgaWYgcmVxdWVzdGVkCisgICAgaWYgKHNlbmRNb3VzZUV2ZW50cykKKyAgICAg
ICAgZGlzcGF0Y2hlci5kaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1v
dXNlZG93bkV2ZW50LCBldmVudC5nZXQoKSk7CisgICAgbm9kZS0+c2V0QWN0aXZlKHRydWUsIHNo
b3dQcmVzc2VkTG9vayk7CisgICAgaWYgKHNlbmRNb3VzZUV2ZW50cykKKyAgICAgICAgZGlzcGF0
Y2hlci5kaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1vdXNldXBFdmVu
dCwgZXZlbnQuZ2V0KCkpOworICAgIG5vZGUtPnNldEFjdGl2ZShmYWxzZSk7CisKKyAgICAvLyBh
bHdheXMgc2VuZCBjbGljaworICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2hTaW11bGF0ZWRNb3VzZUV2
ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBldmVudCk7CisKKyAgICBnTm9kZXNEaXNwYXRj
aGluZ1NpbXVsYXRlZENsaWNrcy0+cmVtb3ZlKG5vZGUpOworfQorCisvLyBGSVhNRTogT25jZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI5NjMgbGFuZHMsIHRoaXMg
c2hvdWxkCisvLyBiZSBncmVhdGx5IGltcHJvdmVkLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU0MDI1Lgorc3RhdGljIE5vZGUqIHB1bGxPdXRPZlNoYWRvdyhO
b2RlKiBub2RlKQoreworICAgIE5vZGUqIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gbm9kZTsK
KyAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuOyBuID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7
CisgICAgICAgIGlmIChuLT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIG91dGVybW9zdFNo
YWRvd0JvdW5kYXJ5ID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpOworICAgIH0KKyAgICByZXR1cm4g
b3V0ZXJtb3N0U2hhZG93Qm91bmRhcnk7Cit9CisKK0V2ZW50VGFyZ2V0KiBFdmVudERpc3BhdGNo
ZXI6OmV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKE5vZGUqIHJlZmVyZW5jZU5v
ZGUpCit7CisgICAgQVNTRVJUKHJlZmVyZW5jZU5vZGUpOworCisjaWYgRU5BQkxFKFNWRykKKyAg
ICBpZiAoIXJlZmVyZW5jZU5vZGUtPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gcmVm
ZXJlbmNlTm9kZTsKKworICAgIC8vIFNwZWM6IFRoZSBldmVudCBoYW5kbGluZyBmb3IgdGhlIG5v
bi1leHBvc2VkIHRyZWUgd29ya3MgYXMgaWYgdGhlIHJlZmVyZW5jZWQgZWxlbWVudCBoYWQgYmVl
biB0ZXh0dWFsbHkgaW5jbHVkZWQKKyAgICAvLyBhcyBhIGRlZXBseSBjbG9uZWQgY2hpbGQgb2Yg
dGhlICd1c2UnIGVsZW1lbnQsIGV4Y2VwdCB0aGF0IGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCB0byB0
aGUgU1ZHRWxlbWVudEluc3RhbmNlIG9iamVjdHMKKyAgICBmb3IgKE5vZGUqIG4gPSByZWZlcmVu
Y2VOb2RlOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmICghbi0+aXNTaGFk
b3dSb290KCkgfHwgIW4tPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgRWxlbWVudCogc2hhZG93VHJlZVBhcmVudEVsZW1lbnQgPSBuLT5zaGFkb3dIb3N0
KCk7CisgICAgICAgIEFTU0VSVChzaGFkb3dUcmVlUGFyZW50RWxlbWVudC0+aGFzVGFnTmFtZShT
VkdOYW1lczo6dXNlVGFnKSk7CisKKyAgICAgICAgaWYgKFNWR0VsZW1lbnRJbnN0YW5jZSogaW5z
dGFuY2UgPSBzdGF0aWNfY2FzdDxTVkdVc2VFbGVtZW50Kj4oc2hhZG93VHJlZVBhcmVudEVsZW1l
bnQpLT5pbnN0YW5jZUZvclNoYWRvd1RyZWVFbGVtZW50KHJlZmVyZW5jZU5vZGUpKQorICAgICAg
ICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJlZmVy
ZW5jZU5vZGU7Cit9CisKK0V2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5v
ZGUpCisgICAgOiBtX25vZGUobm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgbV92aWV3
ID0gbm9kZS0+ZG9jdW1lbnQoKS0+dmlldygpOworfQorCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6
Z2V0RXZlbnRBbmNlc3RvcnMoRXZlbnRUYXJnZXQqIG9yaWdpbmFsVGFyZ2V0LCBFdmVudERpc3Bh
dGNoQmVoYXZpb3IgYmVoYXZpb3IpCit7CisgICAgaWYgKCFtX25vZGUtPmluRG9jdW1lbnQoKSB8
fCBtX2FuY2VzdG9ycy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEV2ZW50VGFyZ2V0
KiB0YXJnZXQgPSBvcmlnaW5hbFRhcmdldDsKKyAgICBOb2RlKiBhbmNlc3RvciA9IG1fbm9kZS5n
ZXQoKTsKKyAgICBib29sIHNob3VsZFNraXBOZXh0QW5jZXN0b3IgPSBmYWxzZTsKKyAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICBpZiAoYW5jZXN0b3ItPmlzU2hhZG93Um9vdCgpKSB7CisgICAg
ICAgICAgICBpZiAoYmVoYXZpb3IgPT0gU3RheUluc2lkZVNoYWRvd0RPTSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5zaGFkb3dIb3N0
KCk7CisgICAgICAgICAgICBpZiAoIXNob3VsZFNraXBOZXh0QW5jZXN0b3IpCisgICAgICAgICAg
ICAgICAgdGFyZ2V0ID0gYW5jZXN0b3I7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYW5j
ZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOworCisgICAg
ICAgIGlmICghYW5jZXN0b3IpCisgICAgICAgICAgICByZXR1cm47CisKKyNpZiBFTkFCTEUoU1ZH
KQorICAgICAgICAvLyBTa2lwIFNWR1NoYWRvd1RyZWVSb290RWxlbWVudC4KKyAgICAgICAgc2hv
dWxkU2tpcE5leHRBbmNlc3RvciA9IGFuY2VzdG9yLT5pc1NWR0VsZW1lbnQoKSAmJiBhbmNlc3Rv
ci0+aXNTaGFkb3dSb290KCk7CisgICAgICAgIGlmIChzaG91bGRTa2lwTmV4dEFuY2VzdG9yKQor
ICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgICAgLy8gRklYTUU6IFVucm9sbCB0
aGUgZXh0cmEgbG9vcCBpbnNpZGUgZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMg
aW50byB0aGlzIGxvb3AuCisgICAgICAgIG1fYW5jZXN0b3JzLmFwcGVuZChFdmVudENvbnRleHQo
YW5jZXN0b3IsIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yKSwg
dGFyZ2V0KSk7CisgICAgfQorfQorCitib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK3sKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50
ID0gcHJwRXZlbnQ7CisKKyAgICBldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGlu
Z1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOworCisgICAgQVNTRVJUKCFldmVudERpc3Bh
dGNoRm9yYmlkZGVuKCkpOworICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkpOworICAgIEFTU0VS
VCghZXZlbnQtPnR5cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29kZSBjYW4gY3JlYXRl
IGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxsLgorCisgICAgUmVmUHRy
PEV2ZW50VGFyZ2V0PiBvcmlnaW5hbFRhcmdldCA9IGV2ZW50LT50YXJnZXQoKTsKKyAgICBnZXRF
dmVudEFuY2VzdG9ycyhvcmlnaW5hbFRhcmdldC5nZXQoKSwgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhh
dmlvcihldmVudC5nZXQoKSkpOworCisgICAgV2luZG93RXZlbnRDb250ZXh0IHdpbmRvd0NvbnRl
eHQoZXZlbnQuZ2V0KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRDb250ZXh0KCkpOworCisgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnQobV9ub2RlLT5kb2N1bWVudCgpLCAqZXZlbnQsIHdp
bmRvd0NvbnRleHQud2luZG93KCksIG1fbm9kZS5nZXQoKSwgbV9hbmNlc3RvcnMpOworCisgICAg
Ly8gR2l2ZSB0aGUgdGFyZ2V0IG5vZGUgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIGJlZm9yZSBE
T00gZXZlbnQgaGFuZGxlcnMgZ2V0IGEgY3JhY2suCisgICAgdm9pZCogZGF0YSA9IG1fbm9kZS0+
cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOworICAgIGlmIChldmVudC0+cHJv
cGFnYXRpb25TdG9wcGVkKCkpCisgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOworCisgICAg
Ly8gVHJpZ2dlciBjYXB0dXJpbmcgZXZlbnQgaGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSB0b3Ag
YW5kIHdvcmtpbmcgb3VyIHdheSBkb3duLgorICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50
OjpDQVBUVVJJTkdfUEhBU0UpOworCisgICAgaWYgKHdpbmRvd0NvbnRleHQuaGFuZGxlTG9jYWxF
dmVudHMoZXZlbnQuZ2V0KCkpICYmIGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICAg
ICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CisKKyAgICBmb3IgKHNpemVfdCBpID0gbV9hbmNlc3Rv
cnMuc2l6ZSgpOyBpOyAtLWkpIHsKKyAgICAgICAgbV9hbmNlc3RvcnNbaSAtIDFdLmhhbmRsZUxv
Y2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKKyAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0
b3BwZWQoKSkKKyAgICAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOworICAgIH0KKworICAg
IGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOworICAgIGV2ZW50LT5zZXRU
YXJnZXQob3JpZ2luYWxUYXJnZXQuZ2V0KCkpOworICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0
KEV2ZW50RGlzcGF0Y2hlcjo6ZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9u
b2RlLmdldCgpKSk7CisgICAgbV9ub2RlLT5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7
CisgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICAgICAgZ290byBkb25l
RGlzcGF0Y2hpbmc7CisKKyAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSAmJiAhZXZlbnQtPmNhbmNl
bEJ1YmJsZSgpKSB7CisgICAgICAgIC8vIFRyaWdnZXIgYnViYmxpbmcgZXZlbnQgaGFuZGxlcnMs
IHN0YXJ0aW5nIGF0IHRoZSBib3R0b20gYW5kIHdvcmtpbmcgb3VyIHdheSB1cC4KKyAgICAgICAg
ZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKKworICAgICAgICBz
aXplX3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIG1fYW5jZXN0b3JzW2ldLmhhbmRsZUxv
Y2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChldmVudC0+cHJvcGFnYXRp
b25TdG9wcGVkKCkgfHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQorICAgICAgICAgICAgICAgIGdv
dG8gZG9uZURpc3BhdGNoaW5nOworICAgICAgICB9CisgICAgICAgIHdpbmRvd0NvbnRleHQuaGFu
ZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOworICAgIH0KKworZG9uZURpc3BhdGNoaW5nOgor
ICAgIGV2ZW50LT5zZXRUYXJnZXQob3JpZ2luYWxUYXJnZXQuZ2V0KCkpOworICAgIGV2ZW50LT5z
ZXRDdXJyZW50VGFyZ2V0KDApOworICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOworCisgICAg
Ly8gUGFzcyB0aGUgZGF0YSBmcm9tIHRoZSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlciB0byB0aGUg
cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyLgorICAgIG1fbm9kZS0+cG9zdERpc3BhdGNoRXZlbnRI
YW5kbGVyKGV2ZW50LmdldCgpLCBkYXRhKTsKKworICAgIC8vIENhbGwgZGVmYXVsdCBldmVudCBo
YW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25jZXB0IG9mIHByZXZlbnRpbmcK
KyAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9mIHdoaWNoIGhhbmRsZXJzIGFy
ZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKKyAgICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5k
IG5vdCBwYXJ0IG9mIHRoZSBET00uCisgICAgaWYgKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgp
ICYmICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgeworICAgICAgICAvLyBOb24tYnViYmxpbmcg
ZXZlbnRzIGNhbGwgb25seSBvbmUgZGVmYXVsdCBldmVudCBoYW5kbGVyLCB0aGUgb25lIGZvciB0
aGUgdGFyZ2V0LgorICAgICAgICBtX25vZGUtPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQuZ2V0
KCkpOworICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOworICAgICAg
ICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgICAgICBnb3RvIGRvbmVXaXRo
RGVmYXVsdDsKKyAgICAgICAgLy8gRm9yIGJ1YmJsaW5nIGV2ZW50cywgY2FsbCBkZWZhdWx0IGV2
ZW50IGhhbmRsZXJzIG9uIHRoZSBzYW1lIHRhcmdldHMgaW4gdGhlCisgICAgICAgIC8vIHNhbWUg
b3JkZXIgYXMgdGhlIGJ1YmJsaW5nIHBoYXNlLgorICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMo
KSkgeworICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5zaXplKCk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAg
ICAgIG1fYW5jZXN0b3JzW2ldLm5vZGUoKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudC5nZXQo
KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpKTsK
KyAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgICAg
ICAgICAgICAgIGdvdG8gZG9uZVdpdGhEZWZhdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCitkb25lV2l0aERlZmF1bHQ6CisKKyAgICAvLyBFbnN1cmUgdGhhdCBhZnRlciBl
dmVudCBkaXNwYXRjaCwgdGhlIGV2ZW50J3MgdGFyZ2V0IG9iamVjdCBpcyB0aGUKKyAgICAvLyBv
dXRlcm1vc3Qgc2hhZG93IERPTSBib3VuZGFyeS4KKyAgICBldmVudC0+c2V0VGFyZ2V0KHdpbmRv
d0NvbnRleHQudGFyZ2V0KCkpOworICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOworICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudChjb29raWUpOworCisg
ICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworfQorCitib29sIEV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBpbnQgYnV0dG9uLCBpbnQgZGV0YWlsLAorICAgIGludCBwYWdlWCwgaW50IHBhZ2VZLCBpbnQg
c2NyZWVuWCwgaW50IHNjcmVlblksCisgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9v
bCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LAorICAgIGJvb2wgaXNTaW11bGF0ZWQsIE5vZGUqIHJl
bGF0ZWRUYXJnZXRBcmcsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCkKK3sKKyAg
ICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CisgICAgaWYgKG1fbm9kZS0+ZGlz
YWJsZWQoKSkgLy8gRG9uJ3QgZXZlbiBzZW5kIERPTSBldmVudHMgZm9yIGRpc2FibGVkIGNvbnRy
b2xzLi4KKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoZXZlbnRUeXBlLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBTaG91bGRuJ3QgaGFwcGVuLgorCisgICAgYm9v
bCBjYW5jZWxhYmxlID0gZXZlbnRUeXBlICE9IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudDsK
KworICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gZmFsc2U7CisKKyAgICAvLyBBdHRlbXB0aW5nIHRv
IGRpc3BhdGNoIHdpdGggYSBub24tRXZlbnRUYXJnZXQgcmVsYXRlZFRhcmdldCBjYXVzZXMgdGhl
IHJlbGF0ZWRUYXJnZXQgdG8gYmUgc2lsZW50bHkgaWdub3JlZC4KKyAgICBSZWZQdHI8Tm9kZT4g
cmVsYXRlZFRhcmdldCA9IHB1bGxPdXRPZlNoYWRvdyhyZWxhdGVkVGFyZ2V0QXJnKTsKKworICAg
IGludCBhZGp1c3RlZFBhZ2VYID0gcGFnZVg7CisgICAgaW50IGFkanVzdGVkUGFnZVkgPSBwYWdl
WTsKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9ub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSB7
CisgICAgICAgIGZsb2F0IHBhZ2Vab29tID0gZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCk7CisgICAg
ICAgIGlmIChwYWdlWm9vbSAhPSAxLjBmKSB7CisgICAgICAgICAgICAvLyBBZGp1c3Qgb3VyIHBh
Z2VYIGFuZCBwYWdlWSB0byBhY2NvdW50IGZvciB0aGUgcGFnZSB6b29tLgorICAgICAgICAgICAg
YWRqdXN0ZWRQYWdlWCA9IGxyb3VuZGYocGFnZVggLyBwYWdlWm9vbSk7CisgICAgICAgICAgICBh
ZGp1c3RlZFBhZ2VZID0gbHJvdW5kZihwYWdlWSAvIHBhZ2Vab29tKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBtb3VzZUV2ZW50ID0gTW91c2VFdmVudDo6Y3Jl
YXRlKGV2ZW50VHlwZSwKKyAgICAgICAgdHJ1ZSwgY2FuY2VsYWJsZSwgbV9ub2RlLT5kb2N1bWVu
dCgpLT5kZWZhdWx0VmlldygpLAorICAgICAgICBkZXRhaWwsIHNjcmVlblgsIHNjcmVlblksIGFk
anVzdGVkUGFnZVgsIGFkanVzdGVkUGFnZVksCisgICAgICAgIGN0cmxLZXksIGFsdEtleSwgc2hp
ZnRLZXksIG1ldGFLZXksIGJ1dHRvbiwKKyAgICAgICAgcmVsYXRlZFRhcmdldCwgMCwgaXNTaW11
bGF0ZWQpOworICAgIG1vdXNlRXZlbnQtPnNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5aW5nRXZl
bnQuZ2V0KCkpOworICAgIG1vdXNlRXZlbnQtPnNldEFic29sdXRlTG9jYXRpb24oSW50UG9pbnQo
cGFnZVgsIHBhZ2VZKSk7CisKKyAgICBkaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpOworICAgIGJv
b2wgZGVmYXVsdEhhbmRsZWQgPSBtb3VzZUV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOworICAgIGJv
b2wgZGVmYXVsdFByZXZlbnRlZCA9IG1vdXNlRXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAg
ICBpZiAoZGVmYXVsdEhhbmRsZWQgfHwgZGVmYXVsdFByZXZlbnRlZCkKKyAgICAgICAgc3dhbGxv
d0V2ZW50ID0gdHJ1ZTsKKworICAgIC8vIFNwZWNpYWwgY2FzZTogSWYgaXQncyBhIGRvdWJsZSBj
bGljayBldmVudCwgd2UgYWxzbyBzZW5kIHRoZSBkYmxjbGljayBldmVudC4gVGhpcyBpcyBub3Qg
cGFydAorICAgIC8vIG9mIHRoZSBET00gc3BlY3MsIGJ1dCBpcyB1c2VkIGZvciBjb21wYXRpYmls
aXR5IHdpdGggdGhlIG9uZGJsY2xpY2s9IiIgYXR0cmlidXRlLiBUaGlzIGlzIHRyZWF0ZWQKKyAg
ICAvLyBhcyBhIHNlcGFyYXRlIGV2ZW50IGluIG90aGVyIERPTS1jb21wbGlhbnQgYnJvd3NlcnMg
bGlrZSBGaXJlZm94LCBhbmQgc28gd2UgZG8gdGhlIHNhbWUuCisgICAgaWYgKGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiBkZXRhaWwgPT0gMikgeworICAgICAgICBSZWZQ
dHI8RXZlbnQ+IGRvdWJsZUNsaWNrRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLmRibGNsaWNrRXZlbnQsCisgICAgICAgICAgICB0cnVlLCBjYW5jZWxhYmxlLCBtX25vZGUt
PmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCisgICAgICAgICAgICBkZXRhaWwsIHNjcmVlblgs
IHNjcmVlblksIGFkanVzdGVkUGFnZVgsIGFkanVzdGVkUGFnZVksCisgICAgICAgICAgICBjdHJs
S2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBidXR0b24sCisgICAgICAgICAgICByZWxh
dGVkVGFyZ2V0LCAwLCBpc1NpbXVsYXRlZCk7CisgICAgICAgIGRvdWJsZUNsaWNrRXZlbnQtPnNl
dFVuZGVybHlpbmdFdmVudCh1bmRlcmx5aW5nRXZlbnQuZ2V0KCkpOworICAgICAgICBpZiAoZGVm
YXVsdEhhbmRsZWQpCisgICAgICAgICAgICBkb3VibGVDbGlja0V2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOworICAgICAgICBkaXNwYXRjaEV2ZW50KGRvdWJsZUNsaWNrRXZlbnQpOworICAgICAg
ICBpZiAoZG91YmxlQ2xpY2tFdmVudC0+ZGVmYXVsdEhhbmRsZWQoKSB8fCBkb3VibGVDbGlja0V2
ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpCisgICAgICAgICAgICBzd2FsbG93RXZlbnQgPSB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBzd2FsbG93RXZlbnQ7Cit9CisKK3ZvaWQgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCkKK3sKKyAgICBBU1NF
UlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CisKKyAgICBib29sIGN0cmxLZXkgPSBmYWxz
ZTsKKyAgICBib29sIGFsdEtleSA9IGZhbHNlOworICAgIGJvb2wgc2hpZnRLZXkgPSBmYWxzZTsK
KyAgICBib29sIG1ldGFLZXkgPSBmYWxzZTsKKyAgICBpZiAoVUlFdmVudFdpdGhLZXlTdGF0ZSog
a2V5U3RhdGVFdmVudCA9IGZpbmRFdmVudFdpdGhLZXlTdGF0ZSh1bmRlcmx5aW5nRXZlbnQuZ2V0
KCkpKSB7CisgICAgICAgIGN0cmxLZXkgPSBrZXlTdGF0ZUV2ZW50LT5jdHJsS2V5KCk7CisgICAg
ICAgIGFsdEtleSA9IGtleVN0YXRlRXZlbnQtPmFsdEtleSgpOworICAgICAgICBzaGlmdEtleSA9
IGtleVN0YXRlRXZlbnQtPnNoaWZ0S2V5KCk7CisgICAgICAgIG1ldGFLZXkgPSBrZXlTdGF0ZUV2
ZW50LT5tZXRhS2V5KCk7CisgICAgfQorCisgICAgLy8gTGlrZSBHZWNrbywgd2UganVzdCBwYXNz
IDAgZm9yIGV2ZXJ5dGhpbmcgd2hlbiB3ZSBtYWtlIGEgZmFrZSBtb3VzZSBldmVudC4KKyAgICAv
LyBJbnRlcm5ldCBFeHBsb3JlciBpbnN0ZWFkIGdpdmVzIHRoZSBjdXJyZW50IG1vdXNlIHBvc2l0
aW9uIGFuZCBzdGF0ZS4KKyAgICBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnRUeXBlLCAwLCAwLCAw
LCAwLCAwLCAwLCBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCB0cnVlLCAwLCB1
bmRlcmx5aW5nRXZlbnQpOworfQorCitjb25zdCBFdmVudENvbnRleHQqIEV2ZW50RGlzcGF0Y2hl
cjo6dG9wRXZlbnRDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9hbmNlc3RvcnMuaXNFbXB0eSgp
ID8gMCA6ICZtX2FuY2VzdG9ycy5sYXN0KCk7Cit9CisKK0V2ZW50RGlzcGF0Y2hCZWhhdmlvciBF
dmVudERpc3BhdGNoZXI6OmRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqIGV2ZW50KQor
eworICAgIC8vIFBlciBYQkwgMi4wIHNwZWMsIG11dGF0aW9uIGV2ZW50cyBzaG91bGQgbmV2ZXIg
Y3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyeToKKyAgICAvLyBodHRwOi8vZGV2LnczLm9yZy8yMDA2
L3hibDIvI2V2ZW50LWZsb3ctYW5kLXRhcmdldGluZy1hY3Jvc3Mtc2hhZG93LXMKKyAgICBpZiAo
ZXZlbnQtPmlzTXV0YXRpb25FdmVudCgpKQorICAgICAgICByZXR1cm4gU3RheUluc2lkZVNoYWRv
d0RPTTsKKworICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50IHRv
IGNyb3NzIHRoZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4KKyAgICAvLyBDaGFuZ2luZyB0aGlz
IGJyZWFrcyBleGlzdGluZyBzaXRlcy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxzLgorICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50KQorICAgICAgICByZXR1cm4gU3Rh
eUluc2lkZVNoYWRvd0RPTTsKKworICAgIHJldHVybiBSZXRhcmdldEV2ZW50OworfQorCit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jM2Y2ODM5MDkwNmU1
NDk3N2RkNDhiMjYyYzE0OWM0YzIxMDFkMTdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIEV2ZW50RGlzcGF0Y2hlcl9oCisjZGVmaW5lIEV2ZW50RGlzcGF0Y2hlcl9o
CisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFdmVudDsKK2NsYXNzIEV2ZW50Q29udGV4dDsK
K2NsYXNzIEV2ZW50VGFyZ2V0OworY2xhc3MgRnJhbWVWaWV3OworY2xhc3MgTm9kZTsKK2NsYXNz
IFBsYXRmb3JtTW91c2VFdmVudDsKKworZW51bSBFdmVudERpc3BhdGNoQmVoYXZpb3IgeworICAg
IFJldGFyZ2V0RXZlbnQsCisgICAgU3RheUluc2lkZVNoYWRvd0RPTQorfTsKKworCitjbGFzcyBF
dmVudERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGRpc3BhdGNoRXZlbnQo
Tm9kZSosIFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaE1vdXNl
RXZlbnQoTm9kZSosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBpbnQgY2xpY2tDb3VudCA9IDAsIE5vZGUqIHJlbGF0ZWRUYXJnZXQgPSAw
KTsKKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqLCBQYXNzUmVm
UHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzID0gZmFsc2Us
IGJvb2wgc2hvd1ByZXNzZWRMb29rID0gdHJ1ZSk7CisKKyAgICBzdGF0aWMgRXZlbnRUYXJnZXQq
IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKE5vZGUqKTsKKworcHJpdmF0ZToK
KyAgICBFdmVudERpc3BhdGNoZXIoTm9kZSopOworCisgICAgRXZlbnREaXNwYXRjaEJlaGF2aW9y
IGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqKTsKKyAgICB2b2lkIGdldEV2ZW50QW5j
ZXN0b3JzKEV2ZW50VGFyZ2V0KiBvcmlnaW5hbFRhcmdldCwgRXZlbnREaXNwYXRjaEJlaGF2aW9y
KTsKKyAgICBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4dCgpOworCisgICAgYm9v
bCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICBib29sIGRpc3BhdGNoTW91
c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGJ1dHRvbiwgaW50IGRl
dGFpbCwKKyAgICAgICAgaW50IHBhZ2VYLCBpbnQgcGFnZVksIGludCBzY3JlZW5YLCBpbnQgc2Ny
ZWVuWSwgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRh
S2V5LAorICAgICAgICBib29sIGlzU2ltdWxhdGVkLCBOb2RlKiByZWxhdGVkVGFyZ2V0QXJnLCBQ
YXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQpOworICAgIHZvaWQgZGlzcGF0Y2hTaW11
bGF0ZWRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRy
PEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQpOworCisgICAgVmVjdG9yPEV2ZW50Q29udGV4dD4gbV9h
bmNlc3RvcnM7CisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8RXZlbnRUYXJn
ZXQ+IG1fb3JpZ2luYWxUYXJnZXQ7CisgICAgUmVmUHRyPEZyYW1lVmlldz4gbV92aWV3OworfTsK
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAxNzg5NzM4NWRjYmViMjU0N2MwNmIw
OTk0OWM5MmZiZWI2MDdkNTE1Li4wNDM5OTRhMzdkZmFkZGNhYTE3YzUwNjhiNmQwZDI3NzYwMDY4
M2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmgiCisjaW5j
bHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCkBAIC0x
MDEsNyArMTAyLDYgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHRWxlbWVudElu
c3RhbmNlLmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdVc2VFbGVtZW50
LmgiCiAjZW5kaWYKIApAQCAtMTI1LDggKzEyNSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGljIEhhc2hTZXQ8Tm9kZSo+KiBnTm9k
ZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcyA9IDA7Ci0KIGJvb2wgTm9kZTo6aXNTdXBwb3J0
ZWQoY29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7CiAgICAg
cmV0dXJuIERPTUltcGxlbWVudGF0aW9uOjpoYXNGZWF0dXJlKGZlYXR1cmUsIHZlcnNpb24pOwpA
QCAtMjYwMiwxOTUgKzI2MDAsMTcgQEAgdm9pZCBOb2RlOjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVu
dCogZXZlbnQpCiAgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKIH0KIAotc3RhdGljIGlu
bGluZSBFdmVudFRhcmdldCogZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoTm9k
ZSogcmVmZXJlbmNlTm9kZSkKLXsKLSAgICBBU1NFUlQocmVmZXJlbmNlTm9kZSk7Ci0KLSNpZiBF
TkFCTEUoU1ZHKQotICAgIGlmICghcmVmZXJlbmNlTm9kZS0+aXNTVkdFbGVtZW50KCkpCi0gICAg
ICAgIHJldHVybiByZWZlcmVuY2VOb2RlOwotCi0gICAgLy8gU3BlYzogVGhlIGV2ZW50IGhhbmRs
aW5nIGZvciB0aGUgbm9uLWV4cG9zZWQgdHJlZSB3b3JrcyBhcyBpZiB0aGUgcmVmZXJlbmNlZCBl
bGVtZW50IGhhZCBiZWVuIHRleHR1YWxseSBpbmNsdWRlZAotICAgIC8vIGFzIGEgZGVlcGx5IGNs
b25lZCBjaGlsZCBvZiB0aGUgJ3VzZScgZWxlbWVudCwgZXhjZXB0IHRoYXQgZXZlbnRzIGFyZSBk
aXNwYXRjaGVkIHRvIHRoZSBTVkdFbGVtZW50SW5zdGFuY2Ugb2JqZWN0cwotICAgIGZvciAoTm9k
ZSogbiA9IHJlZmVyZW5jZU5vZGU7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAg
aWYgKCFuLT5pc1NoYWRvd1Jvb3QoKSB8fCAhbi0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBFbGVtZW50KiBzaGFkb3dUcmVlUGFyZW50RWxlbWVudCA9
IG4tPnNoYWRvd0hvc3QoKTsKLSAgICAgICAgQVNTRVJUKHNoYWRvd1RyZWVQYXJlbnRFbGVtZW50
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjp1c2VUYWcpKTsKLQotICAgICAgICBpZiAoU1ZHRWxlbWVu
dEluc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRpY19jYXN0PFNWR1VzZUVsZW1lbnQqPihzaGFkb3dU
cmVlUGFyZW50RWxlbWVudCktPmluc3RhbmNlRm9yU2hhZG93VHJlZUVsZW1lbnQocmVmZXJlbmNl
Tm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICByZXR1cm4gcmVmZXJlbmNlTm9kZTsKLX0KLQotZW51bSBFdmVudERpc3BhdGNoQmVoYXZpb3Ig
ewotICAgIFJldGFyZ2V0RXZlbnQsCi0gICAgU3RheUluc2lkZVNoYWRvd0RPTQotfTsKLQotc3Rh
dGljIHZvaWQgZ2V0RXZlbnRBbmNlc3RvcnMoTm9kZSogbm9kZSwgVmVjdG9yPEV2ZW50Q29udGV4
dD4mIGFuY2VzdG9ycywgRXZlbnRUYXJnZXQqIG9yaWdpbmFsVGFyZ2V0LCBFdmVudERpc3BhdGNo
QmVoYXZpb3IgYmVoYXZpb3IpCi17Ci0gICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBvcmlnaW5hbFRhcmdldDsK
LSAgICBOb2RlKiBhbmNlc3RvciA9IG5vZGU7Ci0gICAgYm9vbCBzaG91bGRTa2lwTmV4dEFuY2Vz
dG9yID0gZmFsc2U7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9yLT5p
c1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgaWYgKGJlaGF2aW9yID09IFN0YXlJbnNpZGVT
aGFkb3dET00pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYW5jZXN0b3Ig
PSBhbmNlc3Rvci0+c2hhZG93SG9zdCgpOwotICAgICAgICAgICAgaWYgKCFzaG91bGRTa2lwTmV4
dEFuY2VzdG9yKQotICAgICAgICAgICAgICAgIHRhcmdldCA9IGFuY2VzdG9yOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGVHdWFyYW50
ZWVkSG9zdEZyZWUoKTsKLQotICAgICAgICBpZiAoIWFuY2VzdG9yKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgLy8gU2tpcCBTVkdTaGFkb3dUcmVlUm9v
dEVsZW1lbnQuCi0gICAgICAgIHNob3VsZFNraXBOZXh0QW5jZXN0b3IgPSBhbmNlc3Rvci0+aXNT
VkdFbGVtZW50KCkgJiYgYW5jZXN0b3ItPmlzU2hhZG93Um9vdCgpOwotICAgICAgICBpZiAoc2hv
dWxkU2tpcE5leHRBbmNlc3RvcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAg
ICAgIC8vIEZJWE1FOiBVbnJvbGwgdGhlIGV4dHJhIGxvb3AgaW5zaWRlIGV2ZW50VGFyZ2V0UmVz
cGVjdGluZ1NWR1RhcmdldFJ1bGVzIGludG8gdGhpcyBsb29wLgotICAgICAgICBhbmNlc3RvcnMu
YXBwZW5kKEV2ZW50Q29udGV4dChhbmNlc3RvciwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFy
Z2V0UnVsZXMoYW5jZXN0b3IpLCB0YXJnZXQpKTsKLQotICAgIH0KLX0KLQogdm9pZCBOb2RlOjpk
aXNwYXRjaFNjb3BlZEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewogICAgIC8vIFdl
IG5lZWQgdG8gc2V0IHRoZSB0YXJnZXQgaGVyZSBiZWNhdXNlIGl0IGNhbiBnbyBhd2F5IGJ5IHRo
ZSB0aW1lIHdlIGFjdHVhbGx5IGZpcmUgdGhlIGV2ZW50LgotICAgIGV2ZW50LT5zZXRUYXJnZXQo
ZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXModGhpcykpOworICAgIGV2ZW50LT5z
ZXRUYXJnZXQoRXZlbnREaXNwYXRjaGVyOjpldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRS
dWxlcyh0aGlzKSk7CiAKICAgICBTY29wZWRFdmVudFF1ZXVlOjppbnN0YW5jZSgpLT5lbnF1ZXVl
RXZlbnQoZXZlbnQpOwogfQogCi1zdGF0aWMgY29uc3QgRXZlbnRDb250ZXh0KiB0b3BFdmVudENv
bnRleHQoY29uc3QgVmVjdG9yPEV2ZW50Q29udGV4dD4mIGFuY2VzdG9ycykKK2Jvb2wgTm9kZTo6
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIHsKLSAgICByZXR1cm4gYW5j
ZXN0b3JzLmlzRW1wdHkoKSA/IDAgOiAmYW5jZXN0b3JzLmxhc3QoKTsKLX0KLQotc3RhdGljIEV2
ZW50RGlzcGF0Y2hCZWhhdmlvciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiBldmVu
dCkKLXsKLSAgICAvLyBQZXIgWEJMIDIuMCBzcGVjLCBtdXRhdGlvbiBldmVudHMgc2hvdWxkIG5l
dmVyIGNyb3NzIHNoYWRvdyBET00gYm91bmRhcnk6Ci0gICAgLy8gaHR0cDovL2Rldi53My5vcmcv
MjAwNi94YmwyLyNldmVudC1mbG93LWFuZC10YXJnZXRpbmctYWNyb3NzLXNoYWRvdy1zCi0gICAg
aWYgKGV2ZW50LT5pc011dGF0aW9uRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuIFN0YXlJbnNpZGVT
aGFkb3dET007Ci0KLSAgICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxlY3RzdGFydCBldmVu
dCB0byBjcm9zcyB0aGUgdGhlIHNoYWRvdyBET00gYm91bmRhcnkuCi0gICAgLy8gQ2hhbmdpbmcg
dGhpcyBicmVha3MgZXhpc3Rpbmcgc2l0ZXMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjE5NSBmb3IgZGV0YWlscy4KLSAgICBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCkKLSAgICAgICAgcmV0dXJu
IFN0YXlJbnNpZGVTaGFkb3dET007Ci0KLSAgICByZXR1cm4gUmV0YXJnZXRFdmVudDsKLX0KLQot
Ym9vbCBOb2RlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQotewot
ICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcHJvdGVjdCA9IHRoaXM7Ci0gICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IHBycEV2ZW50OwotCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJl
c3BlY3RpbmdTVkdUYXJnZXRSdWxlcyh0aGlzKSk7Ci0KLSAgICBSZWZQdHI8RnJhbWVWaWV3PiB2
aWV3ID0gZG9jdW1lbnQoKS0+dmlldygpOwotCi0gICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9y
YmlkZGVuKCkpOwotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkpOwotICAgIEFTU0VSVCghZXZl
bnQtPnR5cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29kZSBjYW4gY3JlYXRlIGFuIGV2
ZW50IHdpdGggYW4gZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxsLgotCi0gICAgUmVmUHRyPEV2ZW50
VGFyZ2V0PiBvcmlnaW5hbFRhcmdldCA9IGV2ZW50LT50YXJnZXQoKTsKLSAgICBWZWN0b3I8RXZl
bnRDb250ZXh0PiBhbmNlc3RvcnM7Ci0gICAgZ2V0RXZlbnRBbmNlc3RvcnModGhpcywgYW5jZXN0
b3JzLCBvcmlnaW5hbFRhcmdldC5nZXQoKSwgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVu
dC5nZXQoKSkpOwotCi0gICAgV2luZG93RXZlbnRDb250ZXh0IHdpbmRvd0NvbnRleHQoZXZlbnQu
Z2V0KCksIHRoaXMsIHRvcEV2ZW50Q29udGV4dChhbmNlc3RvcnMpKTsKLQotICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxEaXNwYXRjaEV2ZW50KGRvY3VtZW50KCksICpldmVudCwgd2luZG93Q29udGV4dC53aW5k
b3coKSwgdGhpcywgYW5jZXN0b3JzKTsKLQotICAgIC8vIEdpdmUgdGhlIHRhcmdldCBub2RlIGEg
Y2hhbmNlIHRvIGRvIHNvbWUgd29yayBiZWZvcmUgRE9NIGV2ZW50IGhhbmRsZXJzIGdldCBhIGNy
YWNrLgotICAgIHZvaWQqIGRhdGEgPSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihldmVudC5nZXQo
KSk7Ci0gICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKLSAgICAgICAgZ290byBk
b25lRGlzcGF0Y2hpbmc7Ci0KLSAgICAvLyBUcmlnZ2VyIGNhcHR1cmluZyBldmVudCBoYW5kbGVy
cywgc3RhcnRpbmcgYXQgdGhlIHRvcCBhbmQgd29ya2luZyBvdXIgd2F5IGRvd24uCi0gICAgZXZl
bnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7Ci0KLSAgICBpZiAod2lu
ZG93Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSkgJiYgZXZlbnQtPnByb3Bh
Z2F0aW9uU3RvcHBlZCgpKQotICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSBhbmNlc3RvcnMuc2l6ZSgpOyBpOyAtLWkpIHsKLSAgICAgICAgYW5jZXN0
b3JzW2kgLSAxXS5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7Ci0gICAgICAgIGlmIChl
dmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCi0gICAgICAgICAgICBnb3RvIGRvbmVEaXNwYXRj
aGluZzsKLSAgICB9Ci0KLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VU
KTsKLSAgICBldmVudC0+c2V0VGFyZ2V0KG9yaWdpbmFsVGFyZ2V0LmdldCgpKTsKLSAgICBldmVu
dC0+c2V0Q3VycmVudFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyh0
aGlzKSk7Ci0gICAgaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwotICAgIGlmIChldmVu
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCi0gICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwot
Ci0gICAgaWYgKGV2ZW50LT5idWJibGVzKCkgJiYgIWV2ZW50LT5jYW5jZWxCdWJibGUoKSkgewot
ICAgICAgICAvLyBUcmlnZ2VyIGJ1YmJsaW5nIGV2ZW50IGhhbmRsZXJzLCBzdGFydGluZyBhdCB0
aGUgYm90dG9tIGFuZCB3b3JraW5nIG91ciB3YXkgdXAuCi0gICAgICAgIGV2ZW50LT5zZXRFdmVu
dFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7Ci0KLSAgICAgICAgc2l6ZV90IHNpemUgPSBh
bmNlc3RvcnMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewotICAgICAgICAgICAgYW5jZXN0b3JzW2ldLmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50Lmdl
dCgpKTsKLSAgICAgICAgICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgZXZl
bnQtPmNhbmNlbEJ1YmJsZSgpKQotICAgICAgICAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5n
OwotICAgICAgICB9Ci0gICAgICAgIHdpbmRvd0NvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZl
bnQuZ2V0KCkpOwotICAgIH0KLQotZG9uZURpc3BhdGNoaW5nOgotICAgIGV2ZW50LT5zZXRUYXJn
ZXQob3JpZ2luYWxUYXJnZXQuZ2V0KCkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDAp
OwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOwotCi0gICAgLy8gUGFzcyB0aGUgZGF0YSBm
cm9tIHRoZSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlciB0byB0aGUgcG9zdERpc3BhdGNoRXZlbnRI
YW5kbGVyLgotICAgIHBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcihldmVudC5nZXQoKSwgZGF0YSk7
Ci0KLSAgICAvLyBDYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMuIFdoaWxlIHRoZSBET00gZG9l
cyBoYXZlIGEgY29uY2VwdCBvZiBwcmV2ZW50aW5nCi0gICAgLy8gZGVmYXVsdCBoYW5kbGluZywg
dGhlIGRldGFpbCBvZiB3aGljaCBoYW5kbGVycyBhcmUgY2FsbGVkIGlzIGFuIGludGVybmFsCi0g
ICAgLy8gaW1wbGVtZW50YXRpb24gZGV0YWlsIGFuZCBub3QgcGFydCBvZiB0aGUgRE9NLgotICAg
IGlmICghZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZlbnQtPmRlZmF1bHRIYW5kbGVk
KCkpIHsKLSAgICAgICAgLy8gTm9uLWJ1YmJsaW5nIGV2ZW50cyBjYWxsIG9ubHkgb25lIGRlZmF1
bHQgZXZlbnQgaGFuZGxlciwgdGhlIG9uZSBmb3IgdGhlIHRhcmdldC4KLSAgICAgICAgZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudC5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXZlbnQtPmRlZmF1
bHRQcmV2ZW50ZWQoKSk7Ci0gICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAg
ICAgICAgICAgIGdvdG8gZG9uZVdpdGhEZWZhdWx0OwotICAgICAgICAvLyBGb3IgYnViYmxpbmcg
ZXZlbnRzLCBjYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgb24gdGhlIHNhbWUgdGFyZ2V0cyBp
biB0aGUKLSAgICAgICAgLy8gc2FtZSBvcmRlciBhcyB0aGUgYnViYmxpbmcgcGhhc2UuCi0gICAg
ICAgIGlmIChldmVudC0+YnViYmxlcygpKSB7Ci0gICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGFu
Y2VzdG9ycy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICAgICAgICAgIGFuY2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghZXZlbnQtPmRl
ZmF1bHRQcmV2ZW50ZWQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFu
ZGxlZCgpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmVXaXRoRGVmYXVsdDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotZG9uZVdpdGhEZWZhdWx0OgotCi0gICAgLy8g
RW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0Y2gsIHRoZSBldmVudCdzIHRhcmdldCBvYmpl
Y3QgaXMgdGhlCi0gICAgLy8gb3V0ZXJtb3N0IHNoYWRvdyBET00gYm91bmRhcnkuCi0gICAgZXZl
bnQtPnNldFRhcmdldCh3aW5kb3dDb250ZXh0LnRhcmdldCgpKTsKLSAgICBldmVudC0+c2V0Q3Vy
cmVudFRhcmdldCgwKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNo
RXZlbnQoY29va2llKTsKLQotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsK
KyAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMsIGV2ZW50KTsK
IH0KIAogdm9pZCBOb2RlOjpkaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCkKQEAgLTI4Mzcs
MTQ2ICsyNjU3LDEyIEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hLZXlFdmVudChjb25zdCBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQmIGtleSkKIGJvb2wgTm9kZTo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LAogICAgIGludCBkZXRhaWwsIE5vZGUqIHJlbGF0ZWRUYXJnZXQpCiB7Ci0gICAgQVNTRVJUKCFl
dmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIAotICAgIEludFBvaW50IGNvbnRlbnRzUG9z
OwotICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudCgpLT52aWV3KCkpCi0gICAgICAg
IGNvbnRlbnRzUG9zID0gdmlldy0+d2luZG93VG9Db250ZW50cyhldmVudC5wb3MoKSk7Ci0KLSAg
ICBzaG9ydCBidXR0b24gPSBldmVudC5idXR0b24oKTsKLQotICAgIEFTU0VSVChldmVudC5ldmVu
dFR5cGUoKSA9PSBNb3VzZUV2ZW50TW92ZWQgfHwgYnV0dG9uICE9IE5vQnV0dG9uKTsKLSAgICAK
LSAgICByZXR1cm4gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50VHlwZSwgYnV0dG9uLCBkZXRhaWws
Ci0gICAgICAgIGNvbnRlbnRzUG9zLngoKSwgY29udGVudHNQb3MueSgpLCBldmVudC5nbG9iYWxY
KCksIGV2ZW50Lmdsb2JhbFkoKSwKLSAgICAgICAgZXZlbnQuY3RybEtleSgpLCBldmVudC5hbHRL
ZXkoKSwgZXZlbnQuc2hpZnRLZXkoKSwgZXZlbnQubWV0YUtleSgpLAotICAgICAgICBmYWxzZSwg
cmVsYXRlZFRhcmdldCwgMCk7Ci19Ci0KLXZvaWQgTm9kZTo6ZGlzcGF0Y2hTaW11bGF0ZWRNb3Vz
ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLAotICAgIFBhc3NSZWZQdHI8RXZl
bnQ+IHVuZGVybHlpbmdFdmVudCkKLXsKLSAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRk
ZW4oKSk7Ci0KLSAgICBib29sIGN0cmxLZXkgPSBmYWxzZTsKLSAgICBib29sIGFsdEtleSA9IGZh
bHNlOwotICAgIGJvb2wgc2hpZnRLZXkgPSBmYWxzZTsKLSAgICBib29sIG1ldGFLZXkgPSBmYWxz
ZTsKLSAgICBpZiAoVUlFdmVudFdpdGhLZXlTdGF0ZSoga2V5U3RhdGVFdmVudCA9IGZpbmRFdmVu
dFdpdGhLZXlTdGF0ZSh1bmRlcmx5aW5nRXZlbnQuZ2V0KCkpKSB7Ci0gICAgICAgIGN0cmxLZXkg
PSBrZXlTdGF0ZUV2ZW50LT5jdHJsS2V5KCk7Ci0gICAgICAgIGFsdEtleSA9IGtleVN0YXRlRXZl
bnQtPmFsdEtleSgpOwotICAgICAgICBzaGlmdEtleSA9IGtleVN0YXRlRXZlbnQtPnNoaWZ0S2V5
KCk7Ci0gICAgICAgIG1ldGFLZXkgPSBrZXlTdGF0ZUV2ZW50LT5tZXRhS2V5KCk7Ci0gICAgfQot
Ci0gICAgLy8gTGlrZSBHZWNrbywgd2UganVzdCBwYXNzIDAgZm9yIGV2ZXJ5dGhpbmcgd2hlbiB3
ZSBtYWtlIGEgZmFrZSBtb3VzZSBldmVudC4KLSAgICAvLyBJbnRlcm5ldCBFeHBsb3JlciBpbnN0
ZWFkIGdpdmVzIHRoZSBjdXJyZW50IG1vdXNlIHBvc2l0aW9uIGFuZCBzdGF0ZS4KLSAgICBkaXNw
YXRjaE1vdXNlRXZlbnQoZXZlbnRUeXBlLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgICAgICBjdHJs
S2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCB0cnVlLCAwLCB1bmRlcmx5aW5nRXZlbnQp
OworICAgIHJldHVybiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoTW91c2VFdmVudCh0aGlzLCBl
dmVudCwgZXZlbnRUeXBlLCBkZXRhaWwsIHJlbGF0ZWRUYXJnZXQpOwogfQogCiB2b2lkIE5vZGU6
OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIGJvb2wgc2Vu
ZE1vdXNlRXZlbnRzLCBib29sIHNob3dQcmVzc2VkTG9vaykKIHsKLSAgICBpZiAoIWdOb2Rlc0Rp
c3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzKQotICAgICAgICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVs
YXRlZENsaWNrcyA9IG5ldyBIYXNoU2V0PE5vZGUqPjsKLSAgICBlbHNlIGlmIChnTm9kZXNEaXNw
YXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+Y29udGFpbnModGhpcykpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+YWRkKHRoaXMpOwot
ICAgIAotICAgIC8vIHNlbmQgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGJlZm9yZSB0aGUgY2xpY2ss
IGlmIHJlcXVlc3RlZAotICAgIGlmIChzZW5kTW91c2VFdmVudHMpCi0gICAgICAgIGRpc3BhdGNo
U2ltdWxhdGVkTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIGV2ZW50Lmdl
dCgpKTsKLSAgICBzZXRBY3RpdmUodHJ1ZSwgc2hvd1ByZXNzZWRMb29rKTsKLSAgICBpZiAoc2Vu
ZE1vdXNlRXZlbnRzKQotICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQoZXZlbnRO
YW1lcygpLm1vdXNldXBFdmVudCwgZXZlbnQuZ2V0KCkpOwotICAgIHNldEFjdGl2ZShmYWxzZSk7
Ci0KLSAgICAvLyBhbHdheXMgc2VuZCBjbGljawotICAgIGRpc3BhdGNoU2ltdWxhdGVkTW91c2VF
dmVudChldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZXZlbnQpOwotICAgIAotICAgIGdOb2Rlc0Rp
c3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5yZW1vdmUodGhpcyk7Ci19Ci0KLS8vIEZJWE1FOiBP
bmNlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjk2MyBsYW5kcywg
dGhpcyBzaG91bGQKLS8vIGJlIGdyZWF0bHkgaW1wcm92ZWQuIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQwMjUuCi1zdGF0aWMgTm9kZSogcHVsbE91dE9mU2hh
ZG93KE5vZGUqIG5vZGUpCi17Ci0gICAgTm9kZSogb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnkgPSBu
b2RlOwotICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG47IG4gPSBuLT5wYXJlbnRPckhvc3ROb2Rl
KCkpIHsKLSAgICAgICAgaWYgKG4tPmlzU2hhZG93Um9vdCgpKQotICAgICAgICAgICAgb3V0ZXJt
b3N0U2hhZG93Qm91bmRhcnkgPSBuLT5wYXJlbnRPckhvc3ROb2RlKCk7Ci0gICAgfQotICAgIHJl
dHVybiBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeTsKLX0KLQotYm9vbCBOb2RlOjpkaXNwYXRjaE1v
dXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGludCBidXR0b24sIGludCBk
ZXRhaWwsCi0gICAgaW50IHBhZ2VYLCBpbnQgcGFnZVksIGludCBzY3JlZW5YLCBpbnQgc2NyZWVu
WSwKLSAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1l
dGFLZXksIAotICAgIGJvb2wgaXNTaW11bGF0ZWQsIE5vZGUqIHJlbGF0ZWRUYXJnZXRBcmcsIFBh
c3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCkKLXsKLSAgICBBU1NFUlQoIWV2ZW50RGlz
cGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAgaWYgKGRpc2FibGVkKCkpIC8vIERvbid0IGV2ZW4gc2Vu
ZCBET00gZXZlbnRzIGZvciBkaXNhYmxlZCBjb250cm9scy4uCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIAotICAgIGlmIChldmVudFR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIFNob3VsZG4ndCBoYXBwZW4uCi0gICAgCi0gICAgLy8gRGlzcGF0Y2hpbmcgdGhlIGZp
cnN0IGV2ZW50IGNhbiBlYXNpbHkgcmVzdWx0IGluIHRoaXMgbm9kZSBiZWluZyBkZXN0cm95ZWQu
Ci0gICAgLy8gU2luY2Ugd2UgZGlzcGF0Y2ggdXAgdG8gdGhyZWUgZXZlbnRzIGhlcmUsIHdlIG5l
ZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIHJlZmVyZW5jZWQKLSAgICAvLyBzbyB0aGUgcG9pbnRlciB3
aWxsIGJlIGdvb2QgZm9yIHRoZSB0d28gc3Vic2VxdWVudCBvbmVzLgotICAgIFJlZlB0cjxOb2Rl
PiBwcm90ZWN0KHRoaXMpOwotICAgIAotICAgIGJvb2wgY2FuY2VsYWJsZSA9IGV2ZW50VHlwZSAh
PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQ7Ci0gICAgCi0gICAgYm9vbCBzd2FsbG93RXZl
bnQgPSBmYWxzZTsKLSAgICAKLSAgICAvLyBBdHRlbXB0aW5nIHRvIGRpc3BhdGNoIHdpdGggYSBu
b24tRXZlbnRUYXJnZXQgcmVsYXRlZFRhcmdldCBjYXVzZXMgdGhlIHJlbGF0ZWRUYXJnZXQgdG8g
YmUgc2lsZW50bHkgaWdub3JlZC4KLSAgICBSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdldCA9IHB1
bGxPdXRPZlNoYWRvdyhyZWxhdGVkVGFyZ2V0QXJnKTsKLQotICAgIGludCBhZGp1c3RlZFBhZ2VY
ID0gcGFnZVg7Ci0gICAgaW50IGFkanVzdGVkUGFnZVkgPSBwYWdlWTsKLSAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewotICAgICAgICBmbG9hdCBwYWdlWm9vbSA9
IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpOwotICAgICAgICBpZiAocGFnZVpvb20gIT0gMS4wZikg
ewotICAgICAgICAgICAgLy8gQWRqdXN0IG91ciBwYWdlWCBhbmQgcGFnZVkgdG8gYWNjb3VudCBm
b3IgdGhlIHBhZ2Ugem9vbS4KLSAgICAgICAgICAgIGFkanVzdGVkUGFnZVggPSBscm91bmRmKHBh
Z2VYIC8gcGFnZVpvb20pOwotICAgICAgICAgICAgYWRqdXN0ZWRQYWdlWSA9IGxyb3VuZGYocGFn
ZVkgLyBwYWdlWm9vbSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZWZQdHI8TW91c2VFdmVu
dD4gbW91c2VFdmVudCA9IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsCi0gICAgICAgIHRy
dWUsIGNhbmNlbGFibGUsIGRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCi0gICAgICAgIGRldGFp
bCwgc2NyZWVuWCwgc2NyZWVuWSwgYWRqdXN0ZWRQYWdlWCwgYWRqdXN0ZWRQYWdlWSwKLSAgICAg
ICAgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0YUtleSwgYnV0dG9uLAotICAgICAgICBy
ZWxhdGVkVGFyZ2V0LCAwLCBpc1NpbXVsYXRlZCk7Ci0gICAgbW91c2VFdmVudC0+c2V0VW5kZXJs
eWluZ0V2ZW50KHVuZGVybHlpbmdFdmVudC5nZXQoKSk7Ci0gICAgbW91c2VFdmVudC0+c2V0QWJz
b2x1dGVMb2NhdGlvbihJbnRQb2ludChwYWdlWCwgcGFnZVkpKTsKLSAgICAKLSAgICBkaXNwYXRj
aEV2ZW50KG1vdXNlRXZlbnQpOwotICAgIGJvb2wgZGVmYXVsdEhhbmRsZWQgPSBtb3VzZUV2ZW50
LT5kZWZhdWx0SGFuZGxlZCgpOwotICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IG1vdXNlRXZl
bnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKLSAgICBpZiAoZGVmYXVsdEhhbmRsZWQgfHwgZGVmYXVs
dFByZXZlbnRlZCkKLSAgICAgICAgc3dhbGxvd0V2ZW50ID0gdHJ1ZTsKLSAgICAKLSAgICAvLyBT
cGVjaWFsIGNhc2U6IElmIGl0J3MgYSBkb3VibGUgY2xpY2sgZXZlbnQsIHdlIGFsc28gc2VuZCB0
aGUgZGJsY2xpY2sgZXZlbnQuIFRoaXMgaXMgbm90IHBhcnQKLSAgICAvLyBvZiB0aGUgRE9NIHNw
ZWNzLCBidXQgaXMgdXNlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbmRibGNsaWNrPSIi
IGF0dHJpYnV0ZS4gIFRoaXMgaXMgdHJlYXRlZAotICAgIC8vIGFzIGEgc2VwYXJhdGUgZXZlbnQg
aW4gb3RoZXIgRE9NLWNvbXBsaWFudCBicm93c2VycyBsaWtlIEZpcmVmb3gsIGFuZCBzbyB3ZSBk
byB0aGUgc2FtZS4KLSAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50
ICYmIGRldGFpbCA9PSAyKSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudD4gZG91YmxlQ2xpY2tFdmVu
dCA9IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCwKLSAgICAg
ICAgICAgIHRydWUsIGNhbmNlbGFibGUsIGRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCi0gICAg
ICAgICAgICBkZXRhaWwsIHNjcmVlblgsIHNjcmVlblksIGFkanVzdGVkUGFnZVgsIGFkanVzdGVk
UGFnZVksCi0gICAgICAgICAgICBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBi
dXR0b24sCi0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0LCAwLCBpc1NpbXVsYXRlZCk7Ci0gICAg
ICAgIGRvdWJsZUNsaWNrRXZlbnQtPnNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5aW5nRXZlbnQu
Z2V0KCkpOwotICAgICAgICBpZiAoZGVmYXVsdEhhbmRsZWQpCi0gICAgICAgICAgICBkb3VibGVD
bGlja0V2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICBkaXNwYXRjaEV2ZW50KGRv
dWJsZUNsaWNrRXZlbnQpOwotICAgICAgICBpZiAoZG91YmxlQ2xpY2tFdmVudC0+ZGVmYXVsdEhh
bmRsZWQoKSB8fCBkb3VibGVDbGlja0V2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpCi0gICAgICAg
ICAgICBzd2FsbG93RXZlbnQgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBzd2FsbG93RXZl
bnQ7CisgICAgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKHRoaXMsIGV2
ZW50LCBzZW5kTW91c2VFdmVudHMsIHNob3dQcmVzc2VkTG9vayk7CiB9CiAKIHZvaWQgTm9kZTo6
ZGlzcGF0Y2hXaGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4
IDRiNTIxNjhmY2JhYjM4YWNlY2Y3ZmNmNTEwNTA4MmQ1ODg2OTlhZjUuLjEyOWE0OTNlODU1OWM1
MDViYWJmN2FlYmVkNDAwOTQ5MjZlYTA4N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNTM3LDExICs1Mzcs
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaXNwYXRjaEtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5
Ym9hcmRFdmVudCYpOwogICAgIHZvaWQgZGlzcGF0Y2hXaGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxF
dmVudCYpOwogICAgIGJvb2wgZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBpbnQgY2xpY2tDb3VudCA9IDAs
IE5vZGUqIHJlbGF0ZWRUYXJnZXQgPSAwKTsKLSAgICBib29sIGRpc3BhdGNoTW91c2VFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGJ1dHRvbiwgaW50IGNsaWNrQ291bnQs
Ci0gICAgICAgIGludCBwYWdlWCwgaW50IHBhZ2VZLCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblks
Ci0gICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wg
bWV0YUtleSwKLSAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCwgTm9kZSogcmVsYXRlZFRhcmdldCwg
UGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50KTsKLSAgICB2b2lkIGRpc3BhdGNoU2lt
dWxhdGVkTW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0
cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50KTsKICAgICB2b2lkIGRpc3BhdGNoU2ltdWxhdGVkQ2xp
Y2soUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50
cyA9IGZhbHNlLCBib29sIHNob3dQcmVzc2VkTG9vayA9IHRydWUpOwogCiAgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOwo=
</data>
<flag name="review"
          id="79445"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>