<?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>81658</bug_id>
          
          <creation_ts>2012-03-20 06:41:01 -0700</creation_ts>
          <short_desc>Web Inspector: expose queryEventListeners() to console command line API</short_desc>
          <delta_ts>2012-03-21 06:22:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrey Kosyakov">caseq</reporter>
          <assigned_to name="Andrey Kosyakov">caseq</assigned_to>
          <cc>abarth</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>583015</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-03-20 06:41:01 -0700</bug_when>
    <thetext>This adds queryEventListeners() call to command line API in the inspector console. Only the JS listeners in current world are returned.
We primarily want this to be accessible to Web Inspector extensions, although this might be handy for having a closer look at the listeners to the interactive users as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583018</commentid>
    <comment_count>1</comment_count>
      <attachid>132815</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-03-20 06:44:16 -0700</bug_when>
    <thetext>Created attachment 132815
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583036</commentid>
    <comment_count>2</comment_count>
      <attachid>132815</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-20 07:12:19 -0700</bug_when>
    <thetext>Comment on attachment 132815
Patch

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

&gt; Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp:231
&gt; +        eventListeners-&gt;putDirect(exec-&gt;globalData(), Identifier(exec, &quot;node&quot;), toJS(exec, globalObject, listenersArray[i].node));

Do we really want to return event listeners for ancestors?

&gt; Source/WebCore/inspector/InjectedScriptHost.h:95
&gt; +    void queryEventListenersImpl(Node*, Vector&lt;EventListenerInfo&gt;&amp; listenersArray);

Why is this Impl suffix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583037</commentid>
    <comment_count>3</comment_count>
      <attachid>132815</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-20 07:13:39 -0700</bug_when>
    <thetext>Comment on attachment 132815
Patch

Attachment 132815 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12005268</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583041</commentid>
    <comment_count>4</comment_count>
      <attachid>132815</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-20 07:17:19 -0700</bug_when>
    <thetext>Comment on attachment 132815
Patch

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

&gt; LayoutTests/inspector/console/command-line-api-queryEventListeners.html:20
&gt; +&lt;div id=&quot;inner&quot;&gt;

Please add a few attribute handlers as they will also be listed as the listeners.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583055</commentid>
    <comment_count>5</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-03-20 07:36:36 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 132815 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132815&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp:231
&gt; &gt; +        eventListeners-&gt;putDirect(exec-&gt;globalData(), Identifier(exec, &quot;node&quot;), toJS(exec, globalObject, listenersArray[i].node));
&gt; 
&gt; Do we really want to return event listeners for ancestors?

This is for consistency with what we do in the DOM agent/elements panel -- presumably, caller would be interested in the ancestors, given these may have interceptors or handlers for bubbling event. This could go under a boolean flag, perhaps.

&gt; &gt; Source/WebCore/inspector/InjectedScriptHost.h:95
&gt; &gt; +    void queryEventListenersImpl(Node*, Vector&lt;EventListenerInfo&gt;&amp; listenersArray);
&gt; 
&gt; Why is this Impl suffix?

Just for consistency with inspectImpl(). I&apos;m not particularly attached to it, though, so will gladly drop.

&gt; Please add a few attribute handlers as they will also be listed as the listeners.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583058</commentid>
    <comment_count>6</comment_count>
      <attachid>132824</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-03-20 07:38:51 -0700</bug_when>
    <thetext>Created attachment 132824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583074</commentid>
    <comment_count>7</comment_count>
      <attachid>132824</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-20 08:04:54 -0700</bug_when>
    <thetext>Comment on attachment 132824
Patch

Attachment 132824 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11994322</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583097</commentid>
    <comment_count>8</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-03-20 08:37:47 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 132815 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132815&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp:231
&gt; &gt; +        eventListeners-&gt;putDirect(exec-&gt;globalData(), Identifier(exec, &quot;node&quot;), toJS(exec, globalObject, listenersArray[i].node));
&gt; 
&gt; Do we really want to return event listeners for ancestors?

On a second thought, I&apos;d let the caller do the work of traversing the ancestry -- this will make the interface simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583101</commentid>
    <comment_count>9</comment_count>
      <attachid>132833</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-03-20 08:39:12 -0700</bug_when>
    <thetext>Created attachment 132833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583119</commentid>
    <comment_count>10</comment_count>
      <attachid>132833</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-20 09:08:52 -0700</bug_when>
    <thetext>Comment on attachment 132833
Patch

Attachment 132833 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12001335</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583139</commentid>
    <comment_count>11</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-20 09:32:41 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/inspector/InjectedScriptHost.h:95
&gt; &gt; &gt; +    void queryEventListenersImpl(Node*, Vector&lt;EventListenerInfo&gt;&amp; listenersArray);
&gt; &gt; 
&gt; &gt; Why is this Impl suffix?
&gt; 
&gt; Just for consistency with inspectImpl(). I&apos;m not particularly attached to it, though, so will gladly drop.
&gt; 
Can we remove it from inspectImpl instead. Other methods seem not to use such suffix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583166</commentid>
    <comment_count>12</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-03-20 09:59:33 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; &gt; &gt; Source/WebCore/inspector/InjectedScriptHost.h:95
&gt; &gt; &gt; &gt; +    void queryEventListenersImpl(Node*, Vector&lt;EventListenerInfo&gt;&amp; listenersArray);
&gt; &gt; &gt; 
&gt; &gt; &gt; Why is this Impl suffix?
&gt; &gt; 
&gt; &gt; Just for consistency with inspectImpl(). I&apos;m not particularly attached to it, though, so will gladly drop.
&gt; &gt; 
&gt; Can we remove it from inspectImpl instead. Other methods seem not to use such suffix.

If we drop Impl suffix, there will be no way to tell whether InjectedScriptHost::inspect is custom or not. We used this pattern for all the base implementations of custom members. I think it is useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583646</commentid>
    <comment_count>13</comment_count>
      <attachid>132833</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-03-20 17:15:19 -0700</bug_when>
    <thetext>Comment on attachment 132833
Patch

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

&gt; Source/WebCore/inspector/InjectedScriptSource.js:580
&gt; +    &quot;monitorEvents&quot;, &quot;unmonitorEvents&quot;, &quot;inspect&quot;, &quot;copy&quot;, &quot;clear&quot;, &quot;queryEventListeners&quot;

I&apos;d call it getEventListeners, there is no query per se.

&gt; Source/WebCore/inspector/InjectedScriptSource.js:690
&gt; +        return InjectedScriptHost.queryEventListeners(node);

I&apos;d add a request parameter determining whether caller is interested in self node&apos;s listeners or hierarchy ones as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584067</commentid>
    <comment_count>14</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-03-21 06:22:34 -0700</bug_when>
    <thetext>Committed r111529: &lt;http://trac.webkit.org/changeset/111529&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132815</attachid>
            <date>2012-03-20 06:44:16 -0700</date>
            <delta_ts>2012-03-20 07:38:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81658-20120320174414.patch</filename>
            <type>text/plain</type>
            <size>24048</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDcxNzUzMzYwY2UyOGNi
YmYzNzYyMzhmNTJjNDE5MmE2OGFmMThhYi4uODIxMTM3ZGM0NzcwOGE5NTVjZjVmYWI1MGMyODZm
MDFiOWYwMTc5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTAzLTIwICBBbmRy
ZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogZXhwb3NlIHF1ZXJ5RXZlbnRMaXN0ZW5lcnMoKSB0byBjb25zb2xlIGNvbW1hbmQgbGluZSBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDog
aW5zcGVjdG9yL2NvbnNvbGUvY29tbWFuZC1saW5lLWFwaS1xdWVyeUV2ZW50TGlzdGVuZXJzLmh0
bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTTGlzdGVuZXJGdW5jdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6cXVlcnlF
dmVudExpc3RlbmVycyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRT
Y3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTTGlzdGVuZXJGdW5j
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEluamVjdGVk
U2NyaXB0SG9zdDo6cXVlcnlFdmVudExpc3RlbmVyc0NhbGxiYWNrKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVk
U2NyaXB0SG9zdDo6SW5qZWN0ZWRTY3JpcHRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkluamVj
dGVkU2NyaXB0SG9zdDo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNj
cmlwdEhvc3Q6OnF1ZXJ5RXZlbnRMaXN0ZW5lcnNJbXBsKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0Ojppbml0KToKKyAgICAg
ICAgKEluamVjdGVkU2NyaXB0SG9zdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0SG9zdC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpz
OgorICAgICAgICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29u
dHJvbGxlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50Lmg6CisgICAgICAgIChJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgICogaW5zcGVj
dG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VySW5zcGVjdG9yQ29udHJvbGxlcjo6V29ya2VySW5zcGVjdG9yQ29udHJvbGxlcik6CisKIDIw
MTItMDMtMTkgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQnVpbGQgZml4IGZvciBEZWJ1ZyBidWlsZCBhZnRlciByMTExMzU4CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5j
cHAKaW5kZXggMzU4NWJjZWVlMWFjNWE0Njk4OGY0MzRkZjA3OWVhYjk5OTYwNGExZS4uMjZlMzVk
Mzc3NmNhNGJlNmQ2OTJmNjM3YzYxOTI1MGRhZGNkOWM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcApA
QCAtNDIsOCArNDIsMTAgQEAKICNlbmRpZgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2Vu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJK
U0Zsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkpTRmxvYXQ2NEFycmF5LmgiCiAjaW5jbHVkZSAi
SlNIVE1MQWxsQ29sbGVjdGlvbi5oIgpAQCAtMTgwLDYgKzE4Miw2MSBAQCBKU1ZhbHVlIEpTSW5q
ZWN0ZWRTY3JpcHRIb3N0OjpmdW5jdGlvbkRldGFpbHMoRXhlY1N0YXRlKiBleGVjKQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBKU0FycmF5KiBnZXRKU0xpc3RlbmVyRnVuY3Rpb25z
KEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBFdmVudExpc3RlbmVy
SW5mbyYgbGlzdGVuZXJJbmZvKQoreworICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYyk7CisgICAgc2l6ZV90IGhhbmRsZXJzQ291bnQgPSBsaXN0ZW5lckluZm8u
ZXZlbnRMaXN0ZW5lclZlY3Rvci5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDAsIG91dHB1
dEluZGV4ID0gMDsgaSA8IGhhbmRsZXJzQ291bnQ7ICsraSkgeworICAgICAgICBjb25zdCBKU0V2
ZW50TGlzdGVuZXIqIGpzTGlzdGVuZXIgPSBKU0V2ZW50TGlzdGVuZXI6OmNhc3QobGlzdGVuZXJJ
bmZvLmV2ZW50TGlzdGVuZXJWZWN0b3JbaV0ubGlzdGVuZXIuZ2V0KCkpOworICAgICAgICBpZiAo
IWpzTGlzdGVuZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gSGlkZSBsaXN0
ZW5lcnMgZnJvbSBvdGhlciBjb250ZXh0cy4KKyAgICAgICAgaWYgKGpzTGlzdGVuZXItPmlzb2xh
dGVkV29ybGQoKSAhPSBjdXJyZW50V29ybGQoZXhlYykpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNMaXN0ZW5lci0+anNGdW5jdGlvbihkb2N1
bWVudCk7CisgICAgICAgIEpTT2JqZWN0KiBsaXN0ZW5lckVudHJ5ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7CisgICAgICAgIGxpc3RlbmVyRW50cnktPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgImxpc3RlbmVyIiksIGZ1bmN0aW9uKTsKKyAgICAg
ICAgbGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmll
cihleGVjLCAidXNlQ2FwdHVyZSIpLCBqc0Jvb2xlYW4obGlzdGVuZXJJbmZvLmV2ZW50TGlzdGVu
ZXJWZWN0b3JbaV0udXNlQ2FwdHVyZSkpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4
KGV4ZWMsIG91dHB1dEluZGV4KyssIEpTVmFsdWUobGlzdGVuZXJFbnRyeSkpOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpxdWVy
eUV2ZW50TGlzdGVuZXJzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSB8
fCB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgTm9k
ZSogbm9kZSA9IHRvTm9kZSh2YWx1ZSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBmb3Igb3JwaGFuIERv
Y3VtZW50VHlwZSBub2Rlcy4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVu
dCgpOworICAgIGlmICghbm9kZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgCisgICAgVmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiBsaXN0ZW5lcnNBcnJh
eTsKKyAgICBpbXBsKCktPnF1ZXJ5RXZlbnRMaXN0ZW5lcnNJbXBsKG5vZGUsIGxpc3RlbmVyc0Fy
cmF5KTsKKworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAg
SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwLCBvdXRwdXRJbmRleCA9IDA7IGkgPCBsaXN0ZW5lcnNBcnJheS5zaXplKCk7ICsr
aSkgeworICAgICAgICBKU0FycmF5KiBsaXN0ZW5lcnMgPSBnZXRKU0xpc3RlbmVyRnVuY3Rpb25z
KGV4ZWMsIGRvY3VtZW50LCBsaXN0ZW5lcnNBcnJheVtpXSk7CisgICAgICAgIGlmICghbGlzdGVu
ZXJzLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBdG9taWNTdHJp
bmcgZXZlbnRUeXBlID0gbGlzdGVuZXJzQXJyYXlbaV0uZXZlbnRUeXBlOworICAgICAgICBKU09i
amVjdCogZXZlbnRMaXN0ZW5lcnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAg
ICAgZXZlbnRMaXN0ZW5lcnMtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZp
ZXIoZXhlYywgIm5vZGUiKSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGxpc3RlbmVyc0FycmF5
W2ldLm5vZGUpKTsKKyAgICAgICAgZXZlbnRMaXN0ZW5lcnMtPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgInR5cGUiKSwganNTdHJpbmcoZXhlYywgZXZlbnRU
eXBlKSk7CisgICAgICAgIGV2ZW50TGlzdGVuZXJzLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJsaXN0ZW5lcnMiKSwgbGlzdGVuZXJzKTsKKyAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIG91dHB1dEluZGV4KyssIEpTVmFsdWUoZXZlbnRM
aXN0ZW5lcnMpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGFycmF5OworfQorCiBKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0
b20uY3BwCmluZGV4IDc2NDMxOWJhMDU0OWQ1ZTY1NmM1ZGZhYjdhM2U5MmY1ZjlhOTg3MzcuLjBl
NDRkMzk1NzNhYzNjOTIyMmE4YjA4YTI1NWYxODEzMjIxMTE5NTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlLmgi
CiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhv
c3QuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
clZhbHVlcy5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5n
LmgiCkBAIC0xNzcsNiArMTc4LDY3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEluamVjdGVk
U2NyaXB0SG9zdDo6ZnVuY3Rpb25EZXRhaWxzQ2FsbGJhY2soY29uc3Qgdjg6OkFyCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OkFycmF5PiBnZXRKU0xpc3Rl
bmVyRnVuY3Rpb25zKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8m
IGxpc3RlbmVySW5mbykKK3sKKyAgICB2ODo6TG9jYWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6
QXJyYXk6Ok5ldygpOworICAgIHNpemVfdCBoYW5kbGVyc0NvdW50ID0gbGlzdGVuZXJJbmZvLmV2
ZW50TGlzdGVuZXJWZWN0b3Iuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwLCBvdXRwdXRJ
bmRleCA9IDA7IGkgPCBoYW5kbGVyc0NvdW50OyArK2kpIHsKKyAgICAgICAgUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGxpc3RlbmVyID0gbGlzdGVuZXJJbmZvLmV2ZW50TGlzdGVuZXJWZWN0b3JbaV0u
bGlzdGVuZXI7CisgICAgICAgIGlmIChsaXN0ZW5lci0+dHlwZSgpICE9IEV2ZW50TGlzdGVuZXI6
OkpTRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgVjhB
YnN0cmFjdEV2ZW50TGlzdGVuZXIqIHY4TGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOEFic3RyYWN0
RXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyLmdldCgpKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpD
b250ZXh0PiBjb250ZXh0ID0gdG9WOENvbnRleHQoZG9jdW1lbnQsIHY4TGlzdGVuZXItPndvcmxk
Q29udGV4dCgpKTsKKyAgICAgICAgLy8gSGlkZSBsaXN0ZW5lcnMgZnJvbSBvdGhlciBjb250ZXh0
cy4KKyAgICAgICAgaWYgKGNvbnRleHQgIT0gVjhQcm94eTo6Y3VycmVudENvbnRleHQoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZnVuY3Rp
b24gPSB2OExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdChkb2N1bWVudCk7CisgICAgICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lckVudHJ5ID0gdjg6Ok9iamVjdDo6TmV3KCk7Cisg
ICAgICAgIGxpc3RlbmVyRW50cnktPlNldCh2ODo6U3RyaW5nOjpOZXcoImxpc3RlbmVyIiksIGZ1
bmN0aW9uKTsKKyAgICAgICAgbGlzdGVuZXJFbnRyeS0+U2V0KHY4OjpTdHJpbmc6Ok5ldygidXNl
Q2FwdHVyZSIpLCB2ODo6Qm9vbGVhbjo6TmV3KGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVj
dG9yW2ldLnVzZUNhcHR1cmUpKTsKKyAgICAgICAgcmVzdWx0LT5TZXQodjg6Ok51bWJlcjo6TmV3
KG91dHB1dEluZGV4KyspLCBsaXN0ZW5lckVudHJ5KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpxdWVy
eUV2ZW50TGlzdGVuZXJzQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAg
ICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUV2ZW50TGlzdGVuZXJDYWxsYmFj
aygpIik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisgICAgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUgPSBhcmdzWzBdOworICAgIGlmICghdmFsdWUtPklzT2Jq
ZWN0KCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgTm9kZSogbm9kZSA9
IFY4Tm9kZTo6dG9OYXRpdmUodmFsdWUtPlRvT2JqZWN0KCkpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBl
biBmb3Igb3JwaGFuIERvY3VtZW50VHlwZSBub2Rlcy4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBub2RlLT5kb2N1bWVudCgpOworICAgIGlmICghbm9kZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAKKyAgICBJbmplY3RlZFNjcmlwdEhvc3QqIGhv
c3QgPSBWOEluamVjdGVkU2NyaXB0SG9zdDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAg
VmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiBsaXN0ZW5lcnNBcnJheTsKKyAgICBob3N0LT5xdWVy
eUV2ZW50TGlzdGVuZXJzSW1wbChub2RlLCBsaXN0ZW5lcnNBcnJheSk7CisKKyAgICB2ODo6TG9j
YWw8djg6OkFycmF5PiBhcnJheSA9IHY4OjpBcnJheTo6TmV3KCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDAsIG91dHB1dEluZGV4ID0gMDsgaSA8IGxpc3RlbmVyc0FycmF5LnNpemUoKTsgKytpKSB7
CisgICAgICAgIHY4OjpIYW5kbGU8djg6OkFycmF5PiBsaXN0ZW5lcnMgPSBnZXRKU0xpc3RlbmVy
RnVuY3Rpb25zKGRvY3VtZW50LCBsaXN0ZW5lcnNBcnJheVtpXSk7CisgICAgICAgIGlmICghbGlz
dGVuZXJzLT5MZW5ndGgoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBdG9taWNT
dHJpbmcgZXZlbnRUeXBlID0gbGlzdGVuZXJzQXJyYXlbaV0uZXZlbnRUeXBlOworICAgICAgICB2
ODo6TG9jYWw8djg6Ok9iamVjdD4gZXZlbnRMaXN0ZW5lcnMgPSB2ODo6T2JqZWN0OjpOZXcoKTsK
KyAgICAgICAgZXZlbnRMaXN0ZW5lcnMtPlNldCh2ODo6U3RyaW5nOjpOZXcoIm5vZGUiKSwgdG9W
OChsaXN0ZW5lcnNBcnJheVtpXS5ub2RlKSk7CisgICAgICAgIGV2ZW50TGlzdGVuZXJzLT5TZXQo
djg6OlN0cmluZzo6TmV3KCJ0eXBlIiksIHY4OjpTdHJpbmc6Ok5ldyhmcm9tV2ViQ29yZVN0cmlu
ZyhldmVudFR5cGUpLCBldmVudFR5cGUubGVuZ3RoKCkpKTsKKyAgICAgICAgZXZlbnRMaXN0ZW5l
cnMtPlNldCh2ODo6U3RyaW5nOjpOZXcoImxpc3RlbmVycyIpLCBsaXN0ZW5lcnMpOworICAgICAg
ICBhcnJheS0+U2V0KHY4OjpOdW1iZXI6Ok5ldyhvdXRwdXRJbmRleCsrKSwgZXZlbnRMaXN0ZW5l
cnMpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdENhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJJbmplY3RlZFNjcmlwdEhvc3QuaW5z
cGVjdCgpIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhv
c3QuY3BwCmluZGV4IDczNDQyNDY3YzcyM2JkNGQ0ZjQ2Mzg3M2U4NTkyOTFlZTUzYTU1M2EuLmRk
OWJhMmM5OTYwYTQ0YTJiY2QxYzAxYmEzNThhZWE2MzQzZGE4YjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCkBAIC00Miw2ICs0Miw3IEBA
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZC5oIgpAQCAtNzQsNiArNzUsNyBAQCBJbmplY3RlZFNjcmlwdEhvc3Q6OkluamVjdGVkU2Ny
aXB0SG9zdCgpCiAgICAgLCBtX2RhdGFiYXNlQWdlbnQoMCkKICNlbmRpZgogICAgICwgbV9kb21T
dG9yYWdlQWdlbnQoMCkKKyAgICAsIG1fZG9tQWdlbnQoMCkKICAgICAsIG1fbGFzdFdvcmtlcklk
KDEgPDwgMzEpIC8vIERpc3Rpbmd1aXNoIGlkcyBvZiBmYWtlIHdvcmtlcnMgZnJvbSByZWFsIG9u
ZXMsIHRvIG1pbmltaXplIHRoZSBjaGFuY2VzIHRoZXkgb3ZlcmxhcC4KIHsKICAgICBtX2RlZmF1
bHRJbnNwZWN0YWJsZU9iamVjdCA9IGFkb3B0UHRyKG5ldyBJbnNwZWN0YWJsZU9iamVjdCgpKTsK
QEAgLTkxLDYgKzkzLDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmRpc2Nvbm5lY3QoKQog
ICAgIG1fZGF0YWJhc2VBZ2VudCA9IDA7CiAjZW5kaWYKICAgICBtX2RvbVN0b3JhZ2VBZ2VudCA9
IDA7CisgICAgbV9kb21BZ2VudCA9IDA7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpp
bnNwZWN0SW1wbChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBvYmplY3QsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGhpbnRzKQpAQCAtOTksNiArMTAyLDEyIEBAIHZvaWQgSW5qZWN0ZWRT
Y3JpcHRIb3N0OjppbnNwZWN0SW1wbChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBvYmplY3Qs
IFBhc3NSZWZQCiAgICAgICAgIG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3Qob2JqZWN0LT5hc09i
amVjdCgpLCBoaW50cy0+YXNPYmplY3QoKSk7CiB9CiAKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0
OjpxdWVyeUV2ZW50TGlzdGVuZXJzSW1wbChOb2RlKiBub2RlLCBWZWN0b3I8RXZlbnRMaXN0ZW5l
ckluZm8+JiBsaXN0ZW5lcnNBcnJheSkKK3sKKyAgICBpZiAobV9kb21BZ2VudCkKKyAgICAgICAg
bV9kb21BZ2VudC0+Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKG5vZGUsIGxpc3RlbmVyc0FycmF5
KTsKK30KKwogdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKCkK
IHsKICAgICBpZiAobV9jb25zb2xlQWdlbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEhvc3QuaAppbmRleCAzMjQ2NzA2MTE0YjFjZTRjNzFiOGE3ZmUwMGUy
MDZkMDAzZWI5ZjAzLi4wM2ExZGYwNjBiOTcyMDQ0MjQ0OWJmZDBkY2Y1Njc3YzhlMjlmMzQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oCkBAIC0z
OSw5ICszOSwxMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZTsKK2Ns
YXNzIEV2ZW50TGlzdGVuZXJJbmZvOwogY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbnNw
ZWN0b3JBZ2VudDsKIGNsYXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudDsKK2NsYXNzIEluc3BlY3Rv
ckRPTUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OwogY2xhc3MgSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwpAQCAtNjMsNiArNjUs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIEluc3BlY3RvckRhdGFiYXNlQWdlbnQqIGRhdGFi
YXNlQWdlbnQKICNlbmRpZgogICAgICAgICAgICAgLCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQq
IGRvbVN0b3JhZ2VBZ2VudAorICAgICAgICAgICAgLCBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQKICAgICAgICAgKQogICAgIHsKICAgICAgICAgbV9pbnNwZWN0b3JBZ2VudCA9IGluc3BlY3Rv
ckFnZW50OwpAQCAtNzEsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGF0YWJhc2VBZ2Vu
dCA9IGRhdGFiYXNlQWdlbnQ7CiAjZW5kaWYKICAgICAgICAgbV9kb21TdG9yYWdlQWdlbnQgPSBk
b21TdG9yYWdlQWdlbnQ7CisgICAgICAgIG1fZG9tQWdlbnQgPSBkb21BZ2VudDsKICAgICB9CiAK
ICAgICBzdGF0aWMgTm9kZSogc2NyaXB0VmFsdWVBc05vZGUoU2NyaXB0VmFsdWUpOwpAQCAtODgs
NiArOTIsOCBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdGFibGVPYmplY3QqIGluc3BlY3RlZE9iamVj
dCh1bnNpZ25lZCBpbnQgbnVtKTsKIAogICAgIHZvaWQgaW5zcGVjdEltcGwoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gb2JqZWN0VG9JbnNwZWN0LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBoaW50cyk7CisgICAgdm9pZCBxdWVyeUV2ZW50TGlzdGVuZXJzSW1wbChOb2RlKiwgVmVjdG9y
PEV2ZW50TGlzdGVuZXJJbmZvPiYgbGlzdGVuZXJzQXJyYXkpOworCiAgICAgdm9pZCBjbGVhckNv
bnNvbGVNZXNzYWdlcygpOwogICAgIHZvaWQgY29weVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsK
ICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQpAQCAtMTA5LDYgKzExNSw3IEBAIHByaXZhdGU6CiAg
ICAgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogbV9kYXRhYmFzZUFnZW50OwogI2VuZGlmCiAgICAg
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBtX2RvbVN0b3JhZ2VBZ2VudDsKKyAgICBJbnNwZWN0
b3JET01BZ2VudCogbV9kb21BZ2VudDsKICAgICBsb25nIG1fbGFzdFdvcmtlcklkOwogICAgIFZl
Y3RvcjxPd25QdHI8SW5zcGVjdGFibGVPYmplY3Q+ID4gbV9pbnNwZWN0ZWRPYmplY3RzOwogICAg
IE93blB0cjxJbnNwZWN0YWJsZU9iamVjdD4gbV9kZWZhdWx0SW5zcGVjdGFibGVPYmplY3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCmluZGV4
IGFlMTQ2ODY2Yjc2ZDg3NjE0ZmFmMWFjYjkzOGJkYjM3MjI0MzdlZmMuLmIxMzgwOTdjZDA2NDQw
ZDdhYzhmOTAyYWQ4MjdiMDgwMWRjMDk2ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCkBAIC00Myw2ICs0Myw3IEBAIG1vZHVsZSBjb3Jl
IHsKICAgICAgICAgW0N1c3RvbV0gYm9vbGVhbiBpc0hUTUxBbGxDb2xsZWN0aW9uKGluIERPTU9i
amVjdCBvYmplY3QpOwogICAgICAgICBbQ3VzdG9tXSBET01TdHJpbmcgdHlwZShpbiBET01PYmpl
Y3Qgb2JqZWN0KTsKICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IGZ1bmN0aW9uRGV0YWlscyhp
biBET01PYmplY3Qgb2JqZWN0KTsKKyAgICAgICAgW0N1c3RvbV0gQXJyYXkgcXVlcnlFdmVudExp
c3RlbmVycyhpbiBOb2RlIG5vZGUpOwogCiAgICAgICAgIFtDdXN0b21dIGludCBkYXRhYmFzZUlk
KGluIERPTU9iamVjdCBkYXRhYmFzZSk7CiAgICAgICAgIFtDdXN0b21dIGludCBzdG9yYWdlSWQo
aW4gRE9NT2JqZWN0IHN0b3JhZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0U291cmNlLmpzCmluZGV4IDc5ZTZjNmQ5ODJiN2ZkMDUwOThlZDdhMDk5ODdj
MzVlZWI2ZDAwNDYuLjM2Yzk4NDI4NGRiNjdmZjk0YmRhMDUwOGM2ODI3ZjRlNDFkZjgyZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMK
QEAgLTU3Nyw3ICs1NzcsNyBAQCBmdW5jdGlvbiBDb21tYW5kTGluZUFQSShjb21tYW5kTGluZUFQ
SUltcGwsIGNhbGxGcmFtZSkKIAogQ29tbWFuZExpbmVBUEkubWVtYmVyc18gPSBbCiAgICAgIiQi
LCAiJCQiLCAiJHgiLCAiZGlyIiwgImRpcnhtbCIsICJrZXlzIiwgInZhbHVlcyIsICJwcm9maWxl
IiwgInByb2ZpbGVFbmQiLAotICAgICJtb25pdG9yRXZlbnRzIiwgInVubW9uaXRvckV2ZW50cyIs
ICJpbnNwZWN0IiwgImNvcHkiLCAiY2xlYXIiCisgICAgIm1vbml0b3JFdmVudHMiLCAidW5tb25p
dG9yRXZlbnRzIiwgImluc3BlY3QiLCAiY29weSIsICJjbGVhciIsICJxdWVyeUV2ZW50TGlzdGVu
ZXJzIgogXTsKIAogZnVuY3Rpb24gQ29tbWFuZExpbmVBUElJbXBsKCkKQEAgLTY4NSw2ICs2ODUs
MTEgQEAgQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZSA9IHsKICAgICAgICAgSW5qZWN0ZWRT
Y3JpcHRIb3N0LmNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAgICAgfSwKIAorICAgIHF1ZXJ5RXZl
bnRMaXN0ZW5lcnM6IGZ1bmN0aW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gSW5qZWN0
ZWRTY3JpcHRIb3N0LnF1ZXJ5RXZlbnRMaXN0ZW5lcnMobm9kZSk7CisgICAgfSwKKwogICAgIF9p
bnNwZWN0ZWRPYmplY3Q6IGZ1bmN0aW9uKG51bSkKICAgICB7CiAgICAgICAgIHJldHVybiBJbmpl
Y3RlZFNjcmlwdEhvc3QuaW5zcGVjdGVkT2JqZWN0KG51bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZDk3YmQ1MDM4OTZkMTU5
ZTc3ODllOTgxOTNmYWQ4ODZmNGVkOTcyNS4uZDgzZDZjNmM4NGFjZGY3M2MyZWVjNTJkNzdiZmVl
YzVhM2UyNDg5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcApAQCAtMTUwLDYgKzE1MCw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Oklu
c3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JD
CiAgICAgICAgICwgZGF0YWJhc2VBZ2VudAogI2VuZGlmCiAgICAgICAgICwgZG9tU3RvcmFnZUFn
ZW50CisgICAgICAgICwgbV9kb21BZ2VudAogICAgICk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCmluZGV4IDg3NWEyOThhMGQ1ODhlZTMxNjg1Y2I5OTNmZjRkMDgzNTg1M2ZiMDEuLjUw
NGUwOTBlNDRiNWZlYzg4Yzk4NDJkM2EwOWYxMzgyZjc0MWI2ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNzIzLDEzICs3MjMsNDgg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVlKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCwgY29uc3QKICAgICBtX2RvbUVkaXRvci0+cmVwbGFjZVdob2xl
VGV4dCh0b1RleHQobm9kZSksIHZhbHVlLCBlcnJvclN0cmluZyk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBu
b2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGxpc3RlbmVyc0FycmF5KQordm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbGlzdGVuZXJzQXJy
YXkpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOworICAgIGlmICghbm9k
ZSkgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSAiTm8gc3VjaCBub2RlIjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBWZWN0b3I8RXZlbnRMaXN0ZW5lckluZm8+IGV2ZW50SW5mb3JtYXRp
b247CisgICAgZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKG5vZGUsIGV2ZW50SW5mb3JtYXRpb24p
OworICAgIGlmIChldmVudEluZm9ybWF0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gR2V0IENhcHR1cmluZyBMaXN0ZW5lcnMgKGluIHRoaXMgb3JkZXIpCisgICAgc2l6
ZV90IGV2ZW50SW5mb3JtYXRpb25MZW5ndGggPSBldmVudEluZm9ybWF0aW9uLnNpemUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV2ZW50SW5mb3JtYXRpb25MZW5ndGg7ICsraSkgewor
ICAgICAgICBjb25zdCBFdmVudExpc3RlbmVySW5mbyYgaW5mbyA9IGV2ZW50SW5mb3JtYXRpb25b
aV07CisgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIHZlY3RvciA9IGluZm8uZXZl
bnRMaXN0ZW5lclZlY3RvcjsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2ZWN0b3Iu
c2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
JiBsaXN0ZW5lciA9IHZlY3RvcltqXTsKKyAgICAgICAgICAgIGlmIChsaXN0ZW5lci51c2VDYXB0
dXJlKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyc0FycmF5LT5wdXNoT2JqZWN0KGJ1aWxkT2Jq
ZWN0Rm9yRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgaW5mby5ldmVudFR5cGUsIGluZm8ubm9kZSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gR2V0IEJ1YmJsaW5nIExpc3RlbmVycyAocmV2
ZXJzZSBvcmRlcikKKyAgICBmb3IgKHNpemVfdCBpID0gZXZlbnRJbmZvcm1hdGlvbkxlbmd0aDsg
aTsgLS1pKSB7CisgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJJbmZvJiBpbmZvID0gZXZlbnRJ
bmZvcm1hdGlvbltpIC0gMV07CisgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIHZl
Y3RvciA9IGluZm8uZXZlbnRMaXN0ZW5lclZlY3RvcjsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9
IDA7IGogPCB2ZWN0b3Iuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lciA9IHZlY3RvcltqXTsKKyAgICAgICAgICAgIGlmICgh
bGlzdGVuZXIudXNlQ2FwdHVyZSkKKyAgICAgICAgICAgICAgICBsaXN0ZW5lcnNBcnJheS0+cHVz
aE9iamVjdChidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGluZm8uZXZlbnRU
eXBlLCBpbmZvLm5vZGUpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKE5vZGUqIG5vZGUsIFZlY3RvcjxFdmVu
dExpc3RlbmVySW5mbz4mIGV2ZW50SW5mb3JtYXRpb24pCit7CiAgICAgRXZlbnRUYXJnZXREYXRh
KiBkOwogCi0gICAgLy8gUXVpY2sgYnJlYWsgaWYgYSBudWxsIG5vZGUgb3Igbm8gbGlzdGVuZXJz
IGF0IGFsbAotICAgIGlmICghbm9kZSB8fCAhKGQgPSBub2RlLT5ldmVudFRhcmdldERhdGEoKSkp
CisgICAgLy8gUXVpY2sgYnJlYWsgaWYgbm8gbGlzdGVuZXJzIGF0IGFsbAorICAgIGlmICghKGQg
PSBub2RlLT5ldmVudFRhcmdldERhdGEoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEdl
dCB0aGUgbGlzdCBvZiBldmVudCB0eXBlcyB0aGlzIE5vZGUgaXMgY29uY2VybmVkIHdpdGgKQEAg
LTc0Niw3ICs3ODEsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVy
c0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBSZWZQdAogICAgICAgICBhbmNlc3Rv
cnMuYXBwZW5kKGFuY2VzdG9yKTsKIAogICAgIC8vIE5vZGVzIGFuZCB0aGVpciBMaXN0ZW5lcnMg
Zm9yIHRoZSBjb25jZXJuZWQgZXZlbnQgdHlwZXMgKG9yZGVyIGlzIHRvcCB0byBib3R0b20pCi0g
ICAgVmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiBldmVudEluZm9ybWF0aW9uOwogICAgIGZvciAo
c2l6ZV90IGkgPSBhbmNlc3RvcnMuc2l6ZSgpOyBpOyAtLWkpIHsKICAgICAgICAgQ29udGFpbmVy
Tm9kZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNbaSAtIDFdOwogICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IGV2ZW50VHlwZXNMZW5ndGg7ICsraikgewpAQCAtNzYxLDI5ICs3OTUsNiBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJp
bmcqLCBpbnQgbm9kZUlkLCBSZWZQdAogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUg
PSBldmVudFR5cGVzW2ldOwogICAgICAgICBldmVudEluZm9ybWF0aW9uLmFwcGVuZChFdmVudExp
c3RlbmVySW5mbyhub2RlLCB0eXBlLCBub2RlLT5nZXRFdmVudExpc3RlbmVycyh0eXBlKSkpOwog
ICAgIH0KLQotICAgIC8vIEdldCBDYXB0dXJpbmcgTGlzdGVuZXJzIChpbiB0aGlzIG9yZGVyKQot
ICAgIHNpemVfdCBldmVudEluZm9ybWF0aW9uTGVuZ3RoID0gZXZlbnRJbmZvcm1hdGlvbi5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBldmVudEluZm9ybWF0aW9uTGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGluZm8gPSBldmVudEluZm9y
bWF0aW9uW2ldOwotICAgICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVjdG9yJiB2ZWN0b3IgPSBp
bmZvLmV2ZW50TGlzdGVuZXJWZWN0b3I7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
dmVjdG9yLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciYgbGlzdGVuZXIgPSB2ZWN0b3Jbal07Ci0gICAgICAgICAgICBpZiAobGlzdGVuZXIu
dXNlQ2FwdHVyZSkKLSAgICAgICAgICAgICAgICBsaXN0ZW5lcnNBcnJheS0+cHVzaE9iamVjdChi
dWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGluZm8uZXZlbnRUeXBlLCBpbmZv
Lm5vZGUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEdldCBCdWJibGluZyBMaXN0ZW5l
cnMgKHJldmVyc2Ugb3JkZXIpCi0gICAgZm9yIChzaXplX3QgaSA9IGV2ZW50SW5mb3JtYXRpb25M
ZW5ndGg7IGk7IC0taSkgewotICAgICAgICBjb25zdCBFdmVudExpc3RlbmVySW5mbyYgaW5mbyA9
IGV2ZW50SW5mb3JtYXRpb25baSAtIDFdOwotICAgICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVj
dG9yJiB2ZWN0b3IgPSBpbmZvLmV2ZW50TGlzdGVuZXJWZWN0b3I7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGogPSAwOyBqIDwgdmVjdG9yLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIgPSB2ZWN0b3Jbal07Ci0gICAgICAgICAg
ICBpZiAoIWxpc3RlbmVyLnVzZUNhcHR1cmUpCi0gICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJy
YXktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpbmZv
LmV2ZW50VHlwZSwgaW5mby5ub2RlKSk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIFN0cmluZyogc2VhcmNoSWQsIGludCogcmVzdWx0Q291
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4
IDVhMTUwMDFmODllNzlkNDA1MmVmOTNhNjc0ZWYwZjFlZDg2NjEzNzkuLjgwY2FiYzZhNDhmYzE0
N2M0YWZjMzI5NGQ3OTA4YjFmNzNjY2QxZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xNTMsNiArMTUzLDggQEAgcHVibGljOgogCiAgICAg
Tm9kZSogaGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CiAKKyAgICB2b2lkIGdldEV2ZW50TGlzdGVu
ZXJzRm9yTm9kZShOb2RlKiwgVmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiYgbGlzdGVuZXJzQXJy
YXkpOworCiAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLgogICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQqKTsKICAgICB2b2lkIHJlbGVh
c2VEYW5nbGluZ05vZGVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
V29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
V29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggOGYwZWQwYjgwNWQ1YmI2MGNlZjQ5
MDNmZmM1YWY2ODAxMmQ5M2RmYS4uMGRhMmVmZWNmOWE3ZTQyN2U5MGNmYTAwMTY1NGJjZjUyYzhm
MmMxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTEwLDYgKzExMCw3IEBAIFdvcmtlckluc3BlY3RvckNv
bnRyb2xsZXI6Oldvcmtlckluc3BlY3RvckNvbnRyb2xsZXIoV29ya2VyQ29udGV4dCogd29ya2Vy
Q29udGV4CiAgICAgICAgICwgMAogI2VuZGlmCiAgICAgICAgICwgMAorICAgICAgICAsIDAKICAg
ICApOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWY1N2NmZWI4
ZjFjNzVmMzg1YzdiOTBkODA0MjFhYzNhMjUzYmI1Ny4uZGE0MzgwNGQ5MzE4NDhkYTQ5MDY5NjI1
NDFjMTc4NmU5NTY0ZTBmYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTAzLTIwICBBbmRy
ZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogZXhwb3NlIHF1ZXJ5RXZlbnRMaXN0ZW5lcnMoKSB0byBjb25zb2xlIGNvbW1hbmQgbGluZSBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvY29uc29sZS9jb21tYW5kLWxpbmUtYXBpLXF1ZXJ5RXZlbnRMaXN0ZW5lcnMuaHRtbDog
QWRkZWQuCisKIDIwMTItMDMtMTkgIFpvbHRhbiBBcnZhaSAgPHphcnZhaUBpbmYudS1zemVnZWQu
aHU+CiAKICAgICAgICAgW1F0XSBOZXcgdGVzdCBpbnRyb2R1Y2VkIGluIHIxMTA1MzIgZmFpbHMg
b24gMzIgYml0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUvY29t
bWFuZC1saW5lLWFwaS1xdWVyeUV2ZW50TGlzdGVuZXJzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvY29uc29sZS9jb21tYW5kLWxpbmUtYXBpLXF1ZXJ5RXZlbnRMaXN0ZW5lcnMuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jMjMyM2Q2OGJhMzY4MmQ2YjBmZTgzYTI5OWFjOGI3NTkwN2I3NWNmCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUvY29tbWFuZC1saW5l
LWFwaS1xdWVyeUV2ZW50TGlzdGVuZXJzLmh0bWwKQEAgLTAsMCArMSw4NyBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3It
dGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0
b3IvZWxlbWVudHMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit2YXIgdGVzdCA9IGZ1
bmN0aW9uKCkKK3sKKyAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5Db25zb2xlKCJydW5UZXN0
c0luUGFnZShxdWVyeUV2ZW50TGlzdGVuZXJzKSIsIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0
LmJpbmQoSW5zcGVjdG9yVGVzdCkpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkg
b25sb2FkPSJydW5UZXN0KCkiPgorPHAgaWQ9ImZvbyI+CitUZXN0cyBxdWVyeUV2ZW50TGlzdGVu
ZXJzKCkgbWV0aG9kIG9mIGNvbnNvbGUgY29tbWFuZCBsaW5lIEFQSS4KKzwvcD4KKzxkaXYgaWQ9
Im91dGVyIj4KKzxkaXYgaWQ9ImlubmVyIj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGlkPSJlbXB0
eSI+Cis8L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsaXN0ZW5lcjEoKQoreworfQorZnVuY3Rp
b24gbGlzdGVuZXIyKCkKK3sKK30KKworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlubmVyIiku
YWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGxpc3RlbmVyMSwgZmFsc2UpOworZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoIm91dGVyIikuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgbGlz
dGVuZXIxLCBmYWxzZSk7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3V0ZXIiKS5hZGRFdmVu
dExpc3RlbmVyKCJtb3VzZWRvd24iLCBsaXN0ZW5lcjIsIHRydWUpOworZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoIm91dGVyIikuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGxpc3RlbmVyMiwg
dHJ1ZSk7CisKK2Z1bmN0aW9uIGR1bXBPYmplY3Qob2JqZWN0LCBwcmVmaXgpCit7CisgICAgcHJl
Zml4ID0gcHJlZml4IHx8ICIiOworICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFy
IHZhbHVlID0gb2JqZWN0W2tleXNbaV1dOworICAgICAgICB2YXIgbmFtZVdpdGhQcmVmaXggPSBw
cmVmaXggKyBrZXlzW2ldICsgIjogIjsKKyAgICAgICAgc3dpdGNoICh0eXBlb2YodmFsdWUpKSB7
CisgICAgICAgIGNhc2UgIm9iamVjdCI6CisgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwp
IHsKKyAgICAgICAgICAgICAgICBvdXRwdXQobmFtZVdpdGhQcmVmaXggKyAibnVsbCIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbHVl
IGluc3RhbmNlb2YgTm9kZSkgeworICAgICAgICAgICAgICAgIG91dHB1dChuYW1lV2l0aFByZWZp
eCArICJOb2RlICIgKyB2YWx1ZS5sb2NhbE5hbWUgKyAiIyIgKyB2YWx1ZS5pZCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwdXQobmFtZVdp
dGhQcmVmaXggKyAieyIpOworICAgICAgICAgICAgZHVtcE9iamVjdCh2YWx1ZSwgcHJlZml4ICsg
IiAgICAiKQorICAgICAgICAgICAgb3V0cHV0KHByZWZpeCArICJ9Iik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAic3RyaW5nIjoKKyAgICAgICAgICAgIG91dHB1dChuYW1lV2l0
aFByZWZpeCArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG91dHB1dChuYW1lV2l0aFByZWZpeCArIFN0cmlu
Zyh2YWx1ZSkucmVwbGFjZSgvXG4vZ20sICIgIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3RzSW5QYWdlKHF1ZXJ5RXZlbnRMaXN0
ZW5lcnMpCit7CisgICAgb3V0cHV0KCItIGlubmVyIC0iKTsKKyAgICBkdW1wT2JqZWN0KHF1ZXJ5
RXZlbnRMaXN0ZW5lcnMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlubmVyIikpKTsKKyAgICBv
dXRwdXQoIi0gb3V0ZXIgLSIpOworICAgIGR1bXBPYmplY3QocXVlcnlFdmVudExpc3RlbmVycyhk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3V0ZXIiKSkpOworICAgIG91dHB1dCgiLSBlbXB0eSAt
Iik7CisgICAgZHVtcE9iamVjdChxdWVyeUV2ZW50TGlzdGVuZXJzKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJlbXB0eSIpKSk7CisgICAgb3V0cHV0KCItIG9iamVjdCAtIik7CisgICAgb3V0cHV0
KHR5cGVvZiBxdWVyeUV2ZW50TGlzdGVuZXJzKHt9KSk7CisgICAgb3V0cHV0KCItIG51bGwgLSIp
OworICAgIG91dHB1dCh0eXBlb2YgcXVlcnlFdmVudExpc3RlbmVycyhudWxsKSk7CisgICAgb3V0
cHV0KCItIHVuZGVmaW5lZCAtIik7CisgICAgb3V0cHV0KHR5cGVvZiBxdWVyeUV2ZW50TGlzdGVu
ZXJzKHVuZGVmaW5lZCkpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132824</attachid>
            <date>2012-03-20 07:38:51 -0700</date>
            <delta_ts>2012-03-20 08:38:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81658-20120320183849.patch</filename>
            <type>text/plain</type>
            <size>26371</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDcxNzUzMzYwY2UyOGNi
YmYzNzYyMzhmNTJjNDE5MmE2OGFmMThhYi4uODIxMTM3ZGM0NzcwOGE5NTVjZjVmYWI1MGMyODZm
MDFiOWYwMTc5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTAzLTIwICBBbmRy
ZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogZXhwb3NlIHF1ZXJ5RXZlbnRMaXN0ZW5lcnMoKSB0byBjb25zb2xlIGNvbW1hbmQgbGluZSBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDog
aW5zcGVjdG9yL2NvbnNvbGUvY29tbWFuZC1saW5lLWFwaS1xdWVyeUV2ZW50TGlzdGVuZXJzLmh0
bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTTGlzdGVuZXJGdW5jdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6cXVlcnlF
dmVudExpc3RlbmVycyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRT
Y3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTTGlzdGVuZXJGdW5j
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEluamVjdGVk
U2NyaXB0SG9zdDo6cXVlcnlFdmVudExpc3RlbmVyc0NhbGxiYWNrKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVk
U2NyaXB0SG9zdDo6SW5qZWN0ZWRTY3JpcHRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkluamVj
dGVkU2NyaXB0SG9zdDo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNj
cmlwdEhvc3Q6OnF1ZXJ5RXZlbnRMaXN0ZW5lcnNJbXBsKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0Ojppbml0KToKKyAgICAg
ICAgKEluamVjdGVkU2NyaXB0SG9zdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0SG9zdC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpz
OgorICAgICAgICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29u
dHJvbGxlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50Lmg6CisgICAgICAgIChJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgICogaW5zcGVj
dG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VySW5zcGVjdG9yQ29udHJvbGxlcjo6V29ya2VySW5zcGVjdG9yQ29udHJvbGxlcik6CisKIDIw
MTItMDMtMTkgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQnVpbGQgZml4IGZvciBEZWJ1ZyBidWlsZCBhZnRlciByMTExMzU4CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5j
cHAKaW5kZXggMzU4NWJjZWVlMWFjNWE0Njk4OGY0MzRkZjA3OWVhYjk5OTYwNGExZS4uMjZlMzVk
Mzc3NmNhNGJlNmQ2OTJmNjM3YzYxOTI1MGRhZGNkOWM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcApA
QCAtNDIsOCArNDIsMTAgQEAKICNlbmRpZgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2Vu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJK
U0Zsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkpTRmxvYXQ2NEFycmF5LmgiCiAjaW5jbHVkZSAi
SlNIVE1MQWxsQ29sbGVjdGlvbi5oIgpAQCAtMTgwLDYgKzE4Miw2MSBAQCBKU1ZhbHVlIEpTSW5q
ZWN0ZWRTY3JpcHRIb3N0OjpmdW5jdGlvbkRldGFpbHMoRXhlY1N0YXRlKiBleGVjKQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBKU0FycmF5KiBnZXRKU0xpc3RlbmVyRnVuY3Rpb25z
KEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBFdmVudExpc3RlbmVy
SW5mbyYgbGlzdGVuZXJJbmZvKQoreworICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYyk7CisgICAgc2l6ZV90IGhhbmRsZXJzQ291bnQgPSBsaXN0ZW5lckluZm8u
ZXZlbnRMaXN0ZW5lclZlY3Rvci5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDAsIG91dHB1
dEluZGV4ID0gMDsgaSA8IGhhbmRsZXJzQ291bnQ7ICsraSkgeworICAgICAgICBjb25zdCBKU0V2
ZW50TGlzdGVuZXIqIGpzTGlzdGVuZXIgPSBKU0V2ZW50TGlzdGVuZXI6OmNhc3QobGlzdGVuZXJJ
bmZvLmV2ZW50TGlzdGVuZXJWZWN0b3JbaV0ubGlzdGVuZXIuZ2V0KCkpOworICAgICAgICBpZiAo
IWpzTGlzdGVuZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gSGlkZSBsaXN0
ZW5lcnMgZnJvbSBvdGhlciBjb250ZXh0cy4KKyAgICAgICAgaWYgKGpzTGlzdGVuZXItPmlzb2xh
dGVkV29ybGQoKSAhPSBjdXJyZW50V29ybGQoZXhlYykpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNMaXN0ZW5lci0+anNGdW5jdGlvbihkb2N1
bWVudCk7CisgICAgICAgIEpTT2JqZWN0KiBsaXN0ZW5lckVudHJ5ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7CisgICAgICAgIGxpc3RlbmVyRW50cnktPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgImxpc3RlbmVyIiksIGZ1bmN0aW9uKTsKKyAgICAg
ICAgbGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmll
cihleGVjLCAidXNlQ2FwdHVyZSIpLCBqc0Jvb2xlYW4obGlzdGVuZXJJbmZvLmV2ZW50TGlzdGVu
ZXJWZWN0b3JbaV0udXNlQ2FwdHVyZSkpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4
KGV4ZWMsIG91dHB1dEluZGV4KyssIEpTVmFsdWUobGlzdGVuZXJFbnRyeSkpOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpxdWVy
eUV2ZW50TGlzdGVuZXJzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSB8
fCB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgTm9k
ZSogbm9kZSA9IHRvTm9kZSh2YWx1ZSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBmb3Igb3JwaGFuIERv
Y3VtZW50VHlwZSBub2Rlcy4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVu
dCgpOworICAgIGlmICghbm9kZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgCisgICAgVmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiBsaXN0ZW5lcnNBcnJh
eTsKKyAgICBpbXBsKCktPnF1ZXJ5RXZlbnRMaXN0ZW5lcnNJbXBsKG5vZGUsIGxpc3RlbmVyc0Fy
cmF5KTsKKworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAg
SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwLCBvdXRwdXRJbmRleCA9IDA7IGkgPCBsaXN0ZW5lcnNBcnJheS5zaXplKCk7ICsr
aSkgeworICAgICAgICBKU0FycmF5KiBsaXN0ZW5lcnMgPSBnZXRKU0xpc3RlbmVyRnVuY3Rpb25z
KGV4ZWMsIGRvY3VtZW50LCBsaXN0ZW5lcnNBcnJheVtpXSk7CisgICAgICAgIGlmICghbGlzdGVu
ZXJzLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBdG9taWNTdHJp
bmcgZXZlbnRUeXBlID0gbGlzdGVuZXJzQXJyYXlbaV0uZXZlbnRUeXBlOworICAgICAgICBKU09i
amVjdCogZXZlbnRMaXN0ZW5lcnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAg
ICAgZXZlbnRMaXN0ZW5lcnMtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZp
ZXIoZXhlYywgIm5vZGUiKSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGxpc3RlbmVyc0FycmF5
W2ldLm5vZGUpKTsKKyAgICAgICAgZXZlbnRMaXN0ZW5lcnMtPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgInR5cGUiKSwganNTdHJpbmcoZXhlYywgZXZlbnRU
eXBlKSk7CisgICAgICAgIGV2ZW50TGlzdGVuZXJzLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJsaXN0ZW5lcnMiKSwgbGlzdGVuZXJzKTsKKyAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIG91dHB1dEluZGV4KyssIEpTVmFsdWUoZXZlbnRM
aXN0ZW5lcnMpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGFycmF5OworfQorCiBKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0
b20uY3BwCmluZGV4IDc2NDMxOWJhMDU0OWQ1ZTY1NmM1ZGZhYjdhM2U5MmY1ZjlhOTg3MzcuLjBl
NDRkMzk1NzNhYzNjOTIyMmE4YjA4YTI1NWYxODEzMjIxMTE5NTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlLmgi
CiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhv
c3QuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
clZhbHVlcy5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5n
LmgiCkBAIC0xNzcsNiArMTc4LDY3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEluamVjdGVk
U2NyaXB0SG9zdDo6ZnVuY3Rpb25EZXRhaWxzQ2FsbGJhY2soY29uc3Qgdjg6OkFyCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OkFycmF5PiBnZXRKU0xpc3Rl
bmVyRnVuY3Rpb25zKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8m
IGxpc3RlbmVySW5mbykKK3sKKyAgICB2ODo6TG9jYWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6
QXJyYXk6Ok5ldygpOworICAgIHNpemVfdCBoYW5kbGVyc0NvdW50ID0gbGlzdGVuZXJJbmZvLmV2
ZW50TGlzdGVuZXJWZWN0b3Iuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwLCBvdXRwdXRJ
bmRleCA9IDA7IGkgPCBoYW5kbGVyc0NvdW50OyArK2kpIHsKKyAgICAgICAgUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGxpc3RlbmVyID0gbGlzdGVuZXJJbmZvLmV2ZW50TGlzdGVuZXJWZWN0b3JbaV0u
bGlzdGVuZXI7CisgICAgICAgIGlmIChsaXN0ZW5lci0+dHlwZSgpICE9IEV2ZW50TGlzdGVuZXI6
OkpTRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgVjhB
YnN0cmFjdEV2ZW50TGlzdGVuZXIqIHY4TGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOEFic3RyYWN0
RXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyLmdldCgpKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpD
b250ZXh0PiBjb250ZXh0ID0gdG9WOENvbnRleHQoZG9jdW1lbnQsIHY4TGlzdGVuZXItPndvcmxk
Q29udGV4dCgpKTsKKyAgICAgICAgLy8gSGlkZSBsaXN0ZW5lcnMgZnJvbSBvdGhlciBjb250ZXh0
cy4KKyAgICAgICAgaWYgKGNvbnRleHQgIT0gVjhQcm94eTo6Y3VycmVudENvbnRleHQoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZnVuY3Rp
b24gPSB2OExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdChkb2N1bWVudCk7CisgICAgICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lckVudHJ5ID0gdjg6Ok9iamVjdDo6TmV3KCk7Cisg
ICAgICAgIGxpc3RlbmVyRW50cnktPlNldCh2ODo6U3RyaW5nOjpOZXcoImxpc3RlbmVyIiksIGZ1
bmN0aW9uKTsKKyAgICAgICAgbGlzdGVuZXJFbnRyeS0+U2V0KHY4OjpTdHJpbmc6Ok5ldygidXNl
Q2FwdHVyZSIpLCB2ODo6Qm9vbGVhbjo6TmV3KGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVj
dG9yW2ldLnVzZUNhcHR1cmUpKTsKKyAgICAgICAgcmVzdWx0LT5TZXQodjg6Ok51bWJlcjo6TmV3
KG91dHB1dEluZGV4KyspLCBsaXN0ZW5lckVudHJ5KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpxdWVy
eUV2ZW50TGlzdGVuZXJzQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAg
ICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUV2ZW50TGlzdGVuZXJDYWxsYmFj
aygpIik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisgICAgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUgPSBhcmdzWzBdOworICAgIGlmICghdmFsdWUtPklzT2Jq
ZWN0KCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgTm9kZSogbm9kZSA9
IFY4Tm9kZTo6dG9OYXRpdmUodmFsdWUtPlRvT2JqZWN0KCkpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBl
biBmb3Igb3JwaGFuIERvY3VtZW50VHlwZSBub2Rlcy4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBub2RlLT5kb2N1bWVudCgpOworICAgIGlmICghbm9kZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAKKyAgICBJbmplY3RlZFNjcmlwdEhvc3QqIGhv
c3QgPSBWOEluamVjdGVkU2NyaXB0SG9zdDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAg
VmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiBsaXN0ZW5lcnNBcnJheTsKKyAgICBob3N0LT5xdWVy
eUV2ZW50TGlzdGVuZXJzSW1wbChub2RlLCBsaXN0ZW5lcnNBcnJheSk7CisKKyAgICB2ODo6TG9j
YWw8djg6OkFycmF5PiBhcnJheSA9IHY4OjpBcnJheTo6TmV3KCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDAsIG91dHB1dEluZGV4ID0gMDsgaSA8IGxpc3RlbmVyc0FycmF5LnNpemUoKTsgKytpKSB7
CisgICAgICAgIHY4OjpIYW5kbGU8djg6OkFycmF5PiBsaXN0ZW5lcnMgPSBnZXRKU0xpc3RlbmVy
RnVuY3Rpb25zKGRvY3VtZW50LCBsaXN0ZW5lcnNBcnJheVtpXSk7CisgICAgICAgIGlmICghbGlz
dGVuZXJzLT5MZW5ndGgoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBdG9taWNT
dHJpbmcgZXZlbnRUeXBlID0gbGlzdGVuZXJzQXJyYXlbaV0uZXZlbnRUeXBlOworICAgICAgICB2
ODo6TG9jYWw8djg6Ok9iamVjdD4gZXZlbnRMaXN0ZW5lcnMgPSB2ODo6T2JqZWN0OjpOZXcoKTsK
KyAgICAgICAgZXZlbnRMaXN0ZW5lcnMtPlNldCh2ODo6U3RyaW5nOjpOZXcoIm5vZGUiKSwgdG9W
OChsaXN0ZW5lcnNBcnJheVtpXS5ub2RlKSk7CisgICAgICAgIGV2ZW50TGlzdGVuZXJzLT5TZXQo
djg6OlN0cmluZzo6TmV3KCJ0eXBlIiksIHY4OjpTdHJpbmc6Ok5ldyhmcm9tV2ViQ29yZVN0cmlu
ZyhldmVudFR5cGUpLCBldmVudFR5cGUubGVuZ3RoKCkpKTsKKyAgICAgICAgZXZlbnRMaXN0ZW5l
cnMtPlNldCh2ODo6U3RyaW5nOjpOZXcoImxpc3RlbmVycyIpLCBsaXN0ZW5lcnMpOworICAgICAg
ICBhcnJheS0+U2V0KHY4OjpOdW1iZXI6Ok5ldyhvdXRwdXRJbmRleCsrKSwgZXZlbnRMaXN0ZW5l
cnMpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdENhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJJbmplY3RlZFNjcmlwdEhvc3QuaW5z
cGVjdCgpIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhv
c3QuY3BwCmluZGV4IDczNDQyNDY3YzcyM2JkNGQ0ZjQ2Mzg3M2U4NTkyOTFlZTUzYTU1M2EuLmRk
OWJhMmM5OTYwYTQ0YTJiY2QxYzAxYmEzNThhZWE2MzQzZGE4YjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCkBAIC00Miw2ICs0Miw3IEBA
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZC5oIgpAQCAtNzQsNiArNzUsNyBAQCBJbmplY3RlZFNjcmlwdEhvc3Q6OkluamVjdGVkU2Ny
aXB0SG9zdCgpCiAgICAgLCBtX2RhdGFiYXNlQWdlbnQoMCkKICNlbmRpZgogICAgICwgbV9kb21T
dG9yYWdlQWdlbnQoMCkKKyAgICAsIG1fZG9tQWdlbnQoMCkKICAgICAsIG1fbGFzdFdvcmtlcklk
KDEgPDwgMzEpIC8vIERpc3Rpbmd1aXNoIGlkcyBvZiBmYWtlIHdvcmtlcnMgZnJvbSByZWFsIG9u
ZXMsIHRvIG1pbmltaXplIHRoZSBjaGFuY2VzIHRoZXkgb3ZlcmxhcC4KIHsKICAgICBtX2RlZmF1
bHRJbnNwZWN0YWJsZU9iamVjdCA9IGFkb3B0UHRyKG5ldyBJbnNwZWN0YWJsZU9iamVjdCgpKTsK
QEAgLTkxLDYgKzkzLDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmRpc2Nvbm5lY3QoKQog
ICAgIG1fZGF0YWJhc2VBZ2VudCA9IDA7CiAjZW5kaWYKICAgICBtX2RvbVN0b3JhZ2VBZ2VudCA9
IDA7CisgICAgbV9kb21BZ2VudCA9IDA7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpp
bnNwZWN0SW1wbChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBvYmplY3QsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGhpbnRzKQpAQCAtOTksNiArMTAyLDEyIEBAIHZvaWQgSW5qZWN0ZWRT
Y3JpcHRIb3N0OjppbnNwZWN0SW1wbChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBvYmplY3Qs
IFBhc3NSZWZQCiAgICAgICAgIG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3Qob2JqZWN0LT5hc09i
amVjdCgpLCBoaW50cy0+YXNPYmplY3QoKSk7CiB9CiAKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0
OjpxdWVyeUV2ZW50TGlzdGVuZXJzSW1wbChOb2RlKiBub2RlLCBWZWN0b3I8RXZlbnRMaXN0ZW5l
ckluZm8+JiBsaXN0ZW5lcnNBcnJheSkKK3sKKyAgICBpZiAobV9kb21BZ2VudCkKKyAgICAgICAg
bV9kb21BZ2VudC0+Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKG5vZGUsIGxpc3RlbmVyc0FycmF5
KTsKK30KKwogdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKCkK
IHsKICAgICBpZiAobV9jb25zb2xlQWdlbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEhvc3QuaAppbmRleCAzMjQ2NzA2MTE0YjFjZTRjNzFiOGE3ZmUwMGUy
MDZkMDAzZWI5ZjAzLi4wM2ExZGYwNjBiOTcyMDQ0MjQ0OWJmZDBkY2Y1Njc3YzhlMjlmMzQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oCkBAIC0z
OSw5ICszOSwxMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZTsKK2Ns
YXNzIEV2ZW50TGlzdGVuZXJJbmZvOwogY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbnNw
ZWN0b3JBZ2VudDsKIGNsYXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudDsKK2NsYXNzIEluc3BlY3Rv
ckRPTUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OwogY2xhc3MgSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwpAQCAtNjMsNiArNjUs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIEluc3BlY3RvckRhdGFiYXNlQWdlbnQqIGRhdGFi
YXNlQWdlbnQKICNlbmRpZgogICAgICAgICAgICAgLCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQq
IGRvbVN0b3JhZ2VBZ2VudAorICAgICAgICAgICAgLCBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQKICAgICAgICAgKQogICAgIHsKICAgICAgICAgbV9pbnNwZWN0b3JBZ2VudCA9IGluc3BlY3Rv
ckFnZW50OwpAQCAtNzEsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGF0YWJhc2VBZ2Vu
dCA9IGRhdGFiYXNlQWdlbnQ7CiAjZW5kaWYKICAgICAgICAgbV9kb21TdG9yYWdlQWdlbnQgPSBk
b21TdG9yYWdlQWdlbnQ7CisgICAgICAgIG1fZG9tQWdlbnQgPSBkb21BZ2VudDsKICAgICB9CiAK
ICAgICBzdGF0aWMgTm9kZSogc2NyaXB0VmFsdWVBc05vZGUoU2NyaXB0VmFsdWUpOwpAQCAtODgs
NiArOTIsOCBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdGFibGVPYmplY3QqIGluc3BlY3RlZE9iamVj
dCh1bnNpZ25lZCBpbnQgbnVtKTsKIAogICAgIHZvaWQgaW5zcGVjdEltcGwoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gb2JqZWN0VG9JbnNwZWN0LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBoaW50cyk7CisgICAgdm9pZCBxdWVyeUV2ZW50TGlzdGVuZXJzSW1wbChOb2RlKiwgVmVjdG9y
PEV2ZW50TGlzdGVuZXJJbmZvPiYgbGlzdGVuZXJzQXJyYXkpOworCiAgICAgdm9pZCBjbGVhckNv
bnNvbGVNZXNzYWdlcygpOwogICAgIHZvaWQgY29weVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsK
ICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQpAQCAtMTA5LDYgKzExNSw3IEBAIHByaXZhdGU6CiAg
ICAgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogbV9kYXRhYmFzZUFnZW50OwogI2VuZGlmCiAgICAg
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBtX2RvbVN0b3JhZ2VBZ2VudDsKKyAgICBJbnNwZWN0
b3JET01BZ2VudCogbV9kb21BZ2VudDsKICAgICBsb25nIG1fbGFzdFdvcmtlcklkOwogICAgIFZl
Y3RvcjxPd25QdHI8SW5zcGVjdGFibGVPYmplY3Q+ID4gbV9pbnNwZWN0ZWRPYmplY3RzOwogICAg
IE93blB0cjxJbnNwZWN0YWJsZU9iamVjdD4gbV9kZWZhdWx0SW5zcGVjdGFibGVPYmplY3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCmluZGV4
IGFlMTQ2ODY2Yjc2ZDg3NjE0ZmFmMWFjYjkzOGJkYjM3MjI0MzdlZmMuLmIxMzgwOTdjZDA2NDQw
ZDdhYzhmOTAyYWQ4MjdiMDgwMWRjMDk2ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCkBAIC00Myw2ICs0Myw3IEBAIG1vZHVsZSBjb3Jl
IHsKICAgICAgICAgW0N1c3RvbV0gYm9vbGVhbiBpc0hUTUxBbGxDb2xsZWN0aW9uKGluIERPTU9i
amVjdCBvYmplY3QpOwogICAgICAgICBbQ3VzdG9tXSBET01TdHJpbmcgdHlwZShpbiBET01PYmpl
Y3Qgb2JqZWN0KTsKICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IGZ1bmN0aW9uRGV0YWlscyhp
biBET01PYmplY3Qgb2JqZWN0KTsKKyAgICAgICAgW0N1c3RvbV0gQXJyYXkgcXVlcnlFdmVudExp
c3RlbmVycyhpbiBOb2RlIG5vZGUpOwogCiAgICAgICAgIFtDdXN0b21dIGludCBkYXRhYmFzZUlk
KGluIERPTU9iamVjdCBkYXRhYmFzZSk7CiAgICAgICAgIFtDdXN0b21dIGludCBzdG9yYWdlSWQo
aW4gRE9NT2JqZWN0IHN0b3JhZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0U291cmNlLmpzCmluZGV4IDc5ZTZjNmQ5ODJiN2ZkMDUwOThlZDdhMDk5ODdj
MzVlZWI2ZDAwNDYuLjM2Yzk4NDI4NGRiNjdmZjk0YmRhMDUwOGM2ODI3ZjRlNDFkZjgyZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMK
QEAgLTU3Nyw3ICs1NzcsNyBAQCBmdW5jdGlvbiBDb21tYW5kTGluZUFQSShjb21tYW5kTGluZUFQ
SUltcGwsIGNhbGxGcmFtZSkKIAogQ29tbWFuZExpbmVBUEkubWVtYmVyc18gPSBbCiAgICAgIiQi
LCAiJCQiLCAiJHgiLCAiZGlyIiwgImRpcnhtbCIsICJrZXlzIiwgInZhbHVlcyIsICJwcm9maWxl
IiwgInByb2ZpbGVFbmQiLAotICAgICJtb25pdG9yRXZlbnRzIiwgInVubW9uaXRvckV2ZW50cyIs
ICJpbnNwZWN0IiwgImNvcHkiLCAiY2xlYXIiCisgICAgIm1vbml0b3JFdmVudHMiLCAidW5tb25p
dG9yRXZlbnRzIiwgImluc3BlY3QiLCAiY29weSIsICJjbGVhciIsICJxdWVyeUV2ZW50TGlzdGVu
ZXJzIgogXTsKIAogZnVuY3Rpb24gQ29tbWFuZExpbmVBUElJbXBsKCkKQEAgLTY4NSw2ICs2ODUs
MTEgQEAgQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZSA9IHsKICAgICAgICAgSW5qZWN0ZWRT
Y3JpcHRIb3N0LmNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAgICAgfSwKIAorICAgIHF1ZXJ5RXZl
bnRMaXN0ZW5lcnM6IGZ1bmN0aW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gSW5qZWN0
ZWRTY3JpcHRIb3N0LnF1ZXJ5RXZlbnRMaXN0ZW5lcnMobm9kZSk7CisgICAgfSwKKwogICAgIF9p
bnNwZWN0ZWRPYmplY3Q6IGZ1bmN0aW9uKG51bSkKICAgICB7CiAgICAgICAgIHJldHVybiBJbmpl
Y3RlZFNjcmlwdEhvc3QuaW5zcGVjdGVkT2JqZWN0KG51bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZDk3YmQ1MDM4OTZkMTU5
ZTc3ODllOTgxOTNmYWQ4ODZmNGVkOTcyNS4uZDgzZDZjNmM4NGFjZGY3M2MyZWVjNTJkNzdiZmVl
YzVhM2UyNDg5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcApAQCAtMTUwLDYgKzE1MCw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Oklu
c3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JD
CiAgICAgICAgICwgZGF0YWJhc2VBZ2VudAogI2VuZGlmCiAgICAgICAgICwgZG9tU3RvcmFnZUFn
ZW50CisgICAgICAgICwgbV9kb21BZ2VudAogICAgICk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCmluZGV4IDg3NWEyOThhMGQ1ODhlZTMxNjg1Y2I5OTNmZjRkMDgzNTg1M2ZiMDEuLjUw
NGUwOTBlNDRiNWZlYzg4Yzk4NDJkM2EwOWYxMzgyZjc0MWI2ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNzIzLDEzICs3MjMsNDgg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVlKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCwgY29uc3QKICAgICBtX2RvbUVkaXRvci0+cmVwbGFjZVdob2xl
VGV4dCh0b1RleHQobm9kZSksIHZhbHVlLCBlcnJvclN0cmluZyk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBu
b2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGxpc3RlbmVyc0FycmF5KQordm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbGlzdGVuZXJzQXJy
YXkpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOworICAgIGlmICghbm9k
ZSkgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSAiTm8gc3VjaCBub2RlIjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBWZWN0b3I8RXZlbnRMaXN0ZW5lckluZm8+IGV2ZW50SW5mb3JtYXRp
b247CisgICAgZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKG5vZGUsIGV2ZW50SW5mb3JtYXRpb24p
OworICAgIGlmIChldmVudEluZm9ybWF0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gR2V0IENhcHR1cmluZyBMaXN0ZW5lcnMgKGluIHRoaXMgb3JkZXIpCisgICAgc2l6
ZV90IGV2ZW50SW5mb3JtYXRpb25MZW5ndGggPSBldmVudEluZm9ybWF0aW9uLnNpemUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV2ZW50SW5mb3JtYXRpb25MZW5ndGg7ICsraSkgewor
ICAgICAgICBjb25zdCBFdmVudExpc3RlbmVySW5mbyYgaW5mbyA9IGV2ZW50SW5mb3JtYXRpb25b
aV07CisgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIHZlY3RvciA9IGluZm8uZXZl
bnRMaXN0ZW5lclZlY3RvcjsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2ZWN0b3Iu
c2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
JiBsaXN0ZW5lciA9IHZlY3RvcltqXTsKKyAgICAgICAgICAgIGlmIChsaXN0ZW5lci51c2VDYXB0
dXJlKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyc0FycmF5LT5wdXNoT2JqZWN0KGJ1aWxkT2Jq
ZWN0Rm9yRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgaW5mby5ldmVudFR5cGUsIGluZm8ubm9kZSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gR2V0IEJ1YmJsaW5nIExpc3RlbmVycyAocmV2
ZXJzZSBvcmRlcikKKyAgICBmb3IgKHNpemVfdCBpID0gZXZlbnRJbmZvcm1hdGlvbkxlbmd0aDsg
aTsgLS1pKSB7CisgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJJbmZvJiBpbmZvID0gZXZlbnRJ
bmZvcm1hdGlvbltpIC0gMV07CisgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIHZl
Y3RvciA9IGluZm8uZXZlbnRMaXN0ZW5lclZlY3RvcjsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9
IDA7IGogPCB2ZWN0b3Iuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lciA9IHZlY3RvcltqXTsKKyAgICAgICAgICAgIGlmICgh
bGlzdGVuZXIudXNlQ2FwdHVyZSkKKyAgICAgICAgICAgICAgICBsaXN0ZW5lcnNBcnJheS0+cHVz
aE9iamVjdChidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGluZm8uZXZlbnRU
eXBlLCBpbmZvLm5vZGUpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKE5vZGUqIG5vZGUsIFZlY3RvcjxFdmVu
dExpc3RlbmVySW5mbz4mIGV2ZW50SW5mb3JtYXRpb24pCit7CiAgICAgRXZlbnRUYXJnZXREYXRh
KiBkOwogCi0gICAgLy8gUXVpY2sgYnJlYWsgaWYgYSBudWxsIG5vZGUgb3Igbm8gbGlzdGVuZXJz
IGF0IGFsbAotICAgIGlmICghbm9kZSB8fCAhKGQgPSBub2RlLT5ldmVudFRhcmdldERhdGEoKSkp
CisgICAgLy8gUXVpY2sgYnJlYWsgaWYgbm8gbGlzdGVuZXJzIGF0IGFsbAorICAgIGlmICghKGQg
PSBub2RlLT5ldmVudFRhcmdldERhdGEoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEdl
dCB0aGUgbGlzdCBvZiBldmVudCB0eXBlcyB0aGlzIE5vZGUgaXMgY29uY2VybmVkIHdpdGgKQEAg
LTc0Niw3ICs3ODEsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVy
c0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBSZWZQdAogICAgICAgICBhbmNlc3Rv
cnMuYXBwZW5kKGFuY2VzdG9yKTsKIAogICAgIC8vIE5vZGVzIGFuZCB0aGVpciBMaXN0ZW5lcnMg
Zm9yIHRoZSBjb25jZXJuZWQgZXZlbnQgdHlwZXMgKG9yZGVyIGlzIHRvcCB0byBib3R0b20pCi0g
ICAgVmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiBldmVudEluZm9ybWF0aW9uOwogICAgIGZvciAo
c2l6ZV90IGkgPSBhbmNlc3RvcnMuc2l6ZSgpOyBpOyAtLWkpIHsKICAgICAgICAgQ29udGFpbmVy
Tm9kZSogYW5jZXN0b3IgPSBhbmNlc3RvcnNbaSAtIDFdOwogICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IGV2ZW50VHlwZXNMZW5ndGg7ICsraikgewpAQCAtNzYxLDI5ICs3OTUsNiBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJp
bmcqLCBpbnQgbm9kZUlkLCBSZWZQdAogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUg
PSBldmVudFR5cGVzW2ldOwogICAgICAgICBldmVudEluZm9ybWF0aW9uLmFwcGVuZChFdmVudExp
c3RlbmVySW5mbyhub2RlLCB0eXBlLCBub2RlLT5nZXRFdmVudExpc3RlbmVycyh0eXBlKSkpOwog
ICAgIH0KLQotICAgIC8vIEdldCBDYXB0dXJpbmcgTGlzdGVuZXJzIChpbiB0aGlzIG9yZGVyKQot
ICAgIHNpemVfdCBldmVudEluZm9ybWF0aW9uTGVuZ3RoID0gZXZlbnRJbmZvcm1hdGlvbi5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBldmVudEluZm9ybWF0aW9uTGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGluZm8gPSBldmVudEluZm9y
bWF0aW9uW2ldOwotICAgICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVjdG9yJiB2ZWN0b3IgPSBp
bmZvLmV2ZW50TGlzdGVuZXJWZWN0b3I7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
dmVjdG9yLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciYgbGlzdGVuZXIgPSB2ZWN0b3Jbal07Ci0gICAgICAgICAgICBpZiAobGlzdGVuZXIu
dXNlQ2FwdHVyZSkKLSAgICAgICAgICAgICAgICBsaXN0ZW5lcnNBcnJheS0+cHVzaE9iamVjdChi
dWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGluZm8uZXZlbnRUeXBlLCBpbmZv
Lm5vZGUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEdldCBCdWJibGluZyBMaXN0ZW5l
cnMgKHJldmVyc2Ugb3JkZXIpCi0gICAgZm9yIChzaXplX3QgaSA9IGV2ZW50SW5mb3JtYXRpb25M
ZW5ndGg7IGk7IC0taSkgewotICAgICAgICBjb25zdCBFdmVudExpc3RlbmVySW5mbyYgaW5mbyA9
IGV2ZW50SW5mb3JtYXRpb25baSAtIDFdOwotICAgICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVj
dG9yJiB2ZWN0b3IgPSBpbmZvLmV2ZW50TGlzdGVuZXJWZWN0b3I7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGogPSAwOyBqIDwgdmVjdG9yLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIgPSB2ZWN0b3Jbal07Ci0gICAgICAgICAg
ICBpZiAoIWxpc3RlbmVyLnVzZUNhcHR1cmUpCi0gICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJy
YXktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpbmZv
LmV2ZW50VHlwZSwgaW5mby5ub2RlKSk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIFN0cmluZyogc2VhcmNoSWQsIGludCogcmVzdWx0Q291
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4
IDVhMTUwMDFmODllNzlkNDA1MmVmOTNhNjc0ZWYwZjFlZDg2NjEzNzkuLjgwY2FiYzZhNDhmYzE0
N2M0YWZjMzI5NGQ3OTA4YjFmNzNjY2QxZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xNTMsNiArMTUzLDggQEAgcHVibGljOgogCiAgICAg
Tm9kZSogaGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CiAKKyAgICB2b2lkIGdldEV2ZW50TGlzdGVu
ZXJzRm9yTm9kZShOb2RlKiwgVmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiYgbGlzdGVuZXJzQXJy
YXkpOworCiAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLgogICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQqKTsKICAgICB2b2lkIHJlbGVh
c2VEYW5nbGluZ05vZGVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
V29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
V29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggOGYwZWQwYjgwNWQ1YmI2MGNlZjQ5
MDNmZmM1YWY2ODAxMmQ5M2RmYS4uMGRhMmVmZWNmOWE3ZTQyN2U5MGNmYTAwMTY1NGJjZjUyYzhm
MmMxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTEwLDYgKzExMCw3IEBAIFdvcmtlckluc3BlY3RvckNv
bnRyb2xsZXI6Oldvcmtlckluc3BlY3RvckNvbnRyb2xsZXIoV29ya2VyQ29udGV4dCogd29ya2Vy
Q29udGV4CiAgICAgICAgICwgMAogI2VuZGlmCiAgICAgICAgICwgMAorICAgICAgICAsIDAKICAg
ICApOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWY1N2NmZWI4
ZjFjNzVmMzg1YzdiOTBkODA0MjFhYzNhMjUzYmI1Ny4uZGE0MzgwNGQ5MzE4NDhkYTQ5MDY5NjI1
NDFjMTc4NmU5NTY0ZTBmYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTAzLTIwICBBbmRy
ZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogZXhwb3NlIHF1ZXJ5RXZlbnRMaXN0ZW5lcnMoKSB0byBjb25zb2xlIGNvbW1hbmQgbGluZSBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvY29uc29sZS9jb21tYW5kLWxpbmUtYXBpLXF1ZXJ5RXZlbnRMaXN0ZW5lcnMuaHRtbDog
QWRkZWQuCisKIDIwMTItMDMtMTkgIFpvbHRhbiBBcnZhaSAgPHphcnZhaUBpbmYudS1zemVnZWQu
aHU+CiAKICAgICAgICAgW1F0XSBOZXcgdGVzdCBpbnRyb2R1Y2VkIGluIHIxMTA1MzIgZmFpbHMg
b24gMzIgYml0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUvY29t
bWFuZC1saW5lLWFwaS1xdWVyeUV2ZW50TGlzdGVuZXJzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci9jb25zb2xlL2NvbW1hbmQtbGluZS1hcGktcXVlcnlFdmVudExpc3RlbmVy
cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODAxZTAwMGFkMjNiMWEyOTU1MGZlMWFjNWE3YTM5
ZjAzZjM3MjExMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25z
b2xlL2NvbW1hbmQtbGluZS1hcGktcXVlcnlFdmVudExpc3RlbmVycy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw4NCBAQAorVGVzdHMgcXVlcnlFdmVudExpc3RlbmVycygpIG1ldGhvZCBvZiBjb25z
b2xlIGNvbW1hbmQgbGluZSBBUEkuCisKKworLSBpbm5lciAtCiswOiB7CisgICAgbm9kZTogTm9k
ZSBkaXYjb3V0ZXIKKyAgICB0eXBlOiAia2V5ZG93biIKKyAgICBsaXN0ZW5lcnM6IHsKKyAgICAg
ICAgMDogeworICAgICAgICAgICAgbGlzdGVuZXI6IGZ1bmN0aW9uIGxpc3RlbmVyMigpIHsgfQor
ICAgICAgICAgICAgdXNlQ2FwdHVyZTogdHJ1ZQorICAgICAgICB9CisgICAgfQorfQorMTogewor
ICAgIG5vZGU6IE5vZGUgZGl2I2lubmVyCisgICAgdHlwZTogImtleWRvd24iCisgICAgbGlzdGVu
ZXJzOiB7CisgICAgICAgIDA6IHsKKyAgICAgICAgICAgIGxpc3RlbmVyOiBmdW5jdGlvbiBsaXN0
ZW5lcjEoKSB7IH0KKyAgICAgICAgICAgIHVzZUNhcHR1cmU6IGZhbHNlCisgICAgICAgIH0KKyAg
ICB9Cit9CistIG91dGVyIC0KKzA6IHsKKyAgICBub2RlOiBOb2RlIGRpdiNvdXRlcgorICAgIHR5
cGU6ICJtb3VzZW1vdmUiCisgICAgbGlzdGVuZXJzOiB7CisgICAgICAgIDA6IHsKKyAgICAgICAg
ICAgIGxpc3RlbmVyOiBmdW5jdGlvbiBsaXN0ZW5lcjEoKSB7IH0KKyAgICAgICAgICAgIHVzZUNh
cHR1cmU6IGZhbHNlCisgICAgICAgIH0KKyAgICB9Cit9CisxOiB7CisgICAgbm9kZTogTm9kZSBk
aXYjb3V0ZXIKKyAgICB0eXBlOiAia2V5ZG93biIKKyAgICBsaXN0ZW5lcnM6IHsKKyAgICAgICAg
MDogeworICAgICAgICAgICAgbGlzdGVuZXI6IGZ1bmN0aW9uIGxpc3RlbmVyMigpIHsgfQorICAg
ICAgICAgICAgdXNlQ2FwdHVyZTogdHJ1ZQorICAgICAgICB9CisgICAgfQorfQorMjogeworICAg
IG5vZGU6IE5vZGUgZGl2I291dGVyCisgICAgdHlwZTogIm1vdXNlZG93biIKKyAgICBsaXN0ZW5l
cnM6IHsKKyAgICAgICAgMDogeworICAgICAgICAgICAgbGlzdGVuZXI6IGZ1bmN0aW9uIGxpc3Rl
bmVyMigpIHsgfQorICAgICAgICAgICAgdXNlQ2FwdHVyZTogdHJ1ZQorICAgICAgICB9CisgICAg
fQorfQorLSBhdHRyaWJ1dGUgZXZlbnQgbGlzdGVuZXJzIC0KKzA6IHsKKyAgICBub2RlOiBOb2Rl
IGJ1dHRvbiNidXR0b24KKyAgICB0eXBlOiAibW91c2VvdmVyIgorICAgIGxpc3RlbmVyczogewor
ICAgICAgICAwOiB7CisgICAgICAgICAgICBsaXN0ZW5lcjogZnVuY3Rpb24gb25tb3VzZW92ZXIo
ZXZlbnQpIHsgbGlzdGVuZXIyKCkgfQorICAgICAgICAgICAgdXNlQ2FwdHVyZTogZmFsc2UKKyAg
ICAgICAgfQorICAgIH0KK30KKzE6IHsKKyAgICBub2RlOiBOb2RlIGJ1dHRvbiNidXR0b24KKyAg
ICB0eXBlOiAiY2xpY2siCisgICAgbGlzdGVuZXJzOiB7CisgICAgICAgIDA6IHsKKyAgICAgICAg
ICAgIGxpc3RlbmVyOiBmdW5jdGlvbiBvbmNsaWNrKGV2ZW50KSB7IGFsZXJ0KDEpIH0KKyAgICAg
ICAgICAgIHVzZUNhcHR1cmU6IGZhbHNlCisgICAgICAgIH0KKyAgICB9Cit9CistIGVtcHR5IC0K
Ky0gb2JqZWN0IC0KK3VuZGVmaW5lZAorLSBudWxsIC0KK3VuZGVmaW5lZAorLSB1bmRlZmluZWQg
LQordW5kZWZpbmVkCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xl
L2NvbW1hbmQtbGluZS1hcGktcXVlcnlFdmVudExpc3RlbmVycy5odG1sIGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2NvbnNvbGUvY29tbWFuZC1saW5lLWFwaS1xdWVyeUV2ZW50TGlzdGVuZXJzLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjJkYzFmMGNkM2ZiYTQ2NjM0ZTQ3N2ZlNTA0MDBlNWNjOTQxZTZhYgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlL2NvbW1hbmQt
bGluZS1hcGktcXVlcnlFdmVudExpc3RlbmVycy5odG1sCkBAIC0wLDAgKzEsOTYgQEAKKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVj
dG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL2VsZW1lbnRzLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKwordmFyIHRlc3Qg
PSBmdW5jdGlvbigpCit7CisgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluQ29uc29sZSgicnVu
VGVzdHNJblBhZ2UocXVlcnlFdmVudExpc3RlbmVycykiLCBJbnNwZWN0b3JUZXN0LmNvbXBsZXRl
VGVzdC5iaW5kKEluc3BlY3RvclRlc3QpKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxi
b2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwIGlkPSJmb28iPgorVGVzdHMgcXVlcnlFdmVudExp
c3RlbmVycygpIG1ldGhvZCBvZiBjb25zb2xlIGNvbW1hbmQgbGluZSBBUEkuCis8L3A+Cis8ZGl2
IGlkPSJvdXRlciI+Cis8ZGl2IGlkPSJpbm5lciI+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBpZD0i
ZW1wdHkiPgorPC9kaXY+Cis8YnV0dG9uIGlkPSJidXR0b24iIG9uY2xpY2s9ImFsZXJ0KDEpIiBv
bm1vdXNlb3Zlcj0ibGlzdGVuZXIyKCkiPjwvYnV0dG9uPgorCis8c2NyaXB0PgorZnVuY3Rpb24g
bGlzdGVuZXIxKCkKK3sKK30KK2Z1bmN0aW9uIGxpc3RlbmVyMigpCit7Cit9CisKK2RvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJpbm5lciIpLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBsaXN0
ZW5lcjEsIGZhbHNlKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdXRlciIpLmFkZEV2ZW50
TGlzdGVuZXIoIm1vdXNlbW92ZSIsIGxpc3RlbmVyMSwgZmFsc2UpOworZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoIm91dGVyIikuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgbGlzdGVuZXIy
LCB0cnVlKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdXRlciIpLmFkZEV2ZW50TGlzdGVu
ZXIoImtleWRvd24iLCBsaXN0ZW5lcjIsIHRydWUpOworCitmdW5jdGlvbiBkdW1wT2JqZWN0KG9i
amVjdCwgcHJlZml4KQoreworICAgIHByZWZpeCA9IHByZWZpeCB8fCAiIjsKKyAgICB2YXIga2V5
cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxl
bmd0aDsgKytpKSB7CisgICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXlzW2ldXTsKKyAgICAg
ICAgdmFyIG5hbWVXaXRoUHJlZml4ID0gcHJlZml4ICsga2V5c1tpXSArICI6ICI7CisgICAgICAg
IHN3aXRjaCAodHlwZW9mKHZhbHVlKSkgeworICAgICAgICBjYXNlICJvYmplY3QiOgorICAgICAg
ICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgb3V0cHV0KG5hbWVX
aXRoUHJlZml4ICsgIm51bGwiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE5vZGUpIHsKKyAgICAgICAgICAg
ICAgICBvdXRwdXQobmFtZVdpdGhQcmVmaXggKyAiTm9kZSAiICsgdmFsdWUubG9jYWxOYW1lICsg
IiMiICsgdmFsdWUuaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgb3V0cHV0KG5hbWVXaXRoUHJlZml4ICsgInsiKTsKKyAgICAgICAgICAgIGR1
bXBPYmplY3QodmFsdWUsIHByZWZpeCArICIgICAgIikKKyAgICAgICAgICAgIG91dHB1dChwcmVm
aXggKyAifSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgInN0cmluZyI6Cisg
ICAgICAgICAgICBvdXRwdXQobmFtZVdpdGhQcmVmaXggKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoKKyAgICAgICAg
ICAgIHZhciBib2R5ID0gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9bIFxuXSsvZ20sICIgIik7
CisgICAgICAgICAgICBib2R5ID0gYm9keS5yZXBsYWNlKC87IH0vZywgIiB9Iik7CisgICAgICAg
ICAgICBvdXRwdXQobmFtZVdpdGhQcmVmaXggKyBib2R5KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgb3V0cHV0KG5hbWVXaXRoUHJlZml4ICsgU3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwor
ZnVuY3Rpb24gcnVuVGVzdHNJblBhZ2UocXVlcnlFdmVudExpc3RlbmVycykKK3sKKyAgICBvdXRw
dXQoIi0gaW5uZXIgLSIpOworICAgIGR1bXBPYmplY3QocXVlcnlFdmVudExpc3RlbmVycyhkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiaW5uZXIiKSkpOworICAgIG91dHB1dCgiLSBvdXRlciAtIik7
CisgICAgZHVtcE9iamVjdChxdWVyeUV2ZW50TGlzdGVuZXJzKGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJvdXRlciIpKSk7CisgICAgb3V0cHV0KCItIGF0dHJpYnV0ZSBldmVudCBsaXN0ZW5lcnMg
LSIpOworICAgIGR1bXBPYmplY3QocXVlcnlFdmVudExpc3RlbmVycyhkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiYnV0dG9uIikpKTsKKyAgICBvdXRwdXQoIi0gZW1wdHkgLSIpOworICAgIGR1bXBP
YmplY3QocXVlcnlFdmVudExpc3RlbmVycyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW1wdHki
KSkpOworICAgIG91dHB1dCgiLSBvYmplY3QgLSIpOworICAgIG91dHB1dCh0eXBlb2YgcXVlcnlF
dmVudExpc3RlbmVycyh7fSkpOworICAgIG91dHB1dCgiLSBudWxsIC0iKTsKKyAgICBvdXRwdXQo
dHlwZW9mIHF1ZXJ5RXZlbnRMaXN0ZW5lcnMobnVsbCkpOworICAgIG91dHB1dCgiLSB1bmRlZmlu
ZWQgLSIpOworICAgIG91dHB1dCh0eXBlb2YgcXVlcnlFdmVudExpc3RlbmVycyh1bmRlZmluZWQp
KTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132833</attachid>
            <date>2012-03-20 08:39:12 -0700</date>
            <delta_ts>2012-03-20 17:15:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81658-20120320193910.patch</filename>
            <type>text/plain</type>
            <size>24936</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDcxNzUzMzYwY2UyOGNi
YmYzNzYyMzhmNTJjNDE5MmE2OGFmMThhYi4uODIxMTM3ZGM0NzcwOGE5NTVjZjVmYWI1MGMyODZm
MDFiOWYwMTc5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTAzLTIwICBBbmRy
ZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogZXhwb3NlIHF1ZXJ5RXZlbnRMaXN0ZW5lcnMoKSB0byBjb25zb2xlIGNvbW1hbmQgbGluZSBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDog
aW5zcGVjdG9yL2NvbnNvbGUvY29tbWFuZC1saW5lLWFwaS1xdWVyeUV2ZW50TGlzdGVuZXJzLmh0
bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTTGlzdGVuZXJGdW5jdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6cXVlcnlF
dmVudExpc3RlbmVycyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRT
Y3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTTGlzdGVuZXJGdW5j
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpWOEluamVjdGVk
U2NyaXB0SG9zdDo6cXVlcnlFdmVudExpc3RlbmVyc0NhbGxiYWNrKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVk
U2NyaXB0SG9zdDo6SW5qZWN0ZWRTY3JpcHRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkluamVj
dGVkU2NyaXB0SG9zdDo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNj
cmlwdEhvc3Q6OnF1ZXJ5RXZlbnRMaXN0ZW5lcnNJbXBsKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0Ojppbml0KToKKyAgICAg
ICAgKEluamVjdGVkU2NyaXB0SG9zdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0SG9zdC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpz
OgorICAgICAgICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29u
dHJvbGxlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50Lmg6CisgICAgICAgIChJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgICogaW5zcGVj
dG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VySW5zcGVjdG9yQ29udHJvbGxlcjo6V29ya2VySW5zcGVjdG9yQ29udHJvbGxlcik6CisKIDIw
MTItMDMtMTkgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQnVpbGQgZml4IGZvciBEZWJ1ZyBidWlsZCBhZnRlciByMTExMzU4CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5j
cHAKaW5kZXggMzU4NWJjZWVlMWFjNWE0Njk4OGY0MzRkZjA3OWVhYjk5OTYwNGExZS4uY2VhNWUy
YWQwNjEwMTI3ZTA3ZjA2M2UwMGE5YzQ5NzRkNzlmNjhlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcApA
QCAtNDIsOCArNDIsMTAgQEAKICNlbmRpZgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2Vu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJK
U0Zsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkpTRmxvYXQ2NEFycmF5LmgiCiAjaW5jbHVkZSAi
SlNIVE1MQWxsQ29sbGVjdGlvbi5oIgpAQCAtMTgwLDYgKzE4Miw1NiBAQCBKU1ZhbHVlIEpTSW5q
ZWN0ZWRTY3JpcHRIb3N0OjpmdW5jdGlvbkRldGFpbHMoRXhlY1N0YXRlKiBleGVjKQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBKU0FycmF5KiBnZXRKU0xpc3RlbmVyRnVuY3Rpb25z
KEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBFdmVudExpc3RlbmVy
SW5mbyYgbGlzdGVuZXJJbmZvKQoreworICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYyk7CisgICAgc2l6ZV90IGhhbmRsZXJzQ291bnQgPSBsaXN0ZW5lckluZm8u
ZXZlbnRMaXN0ZW5lclZlY3Rvci5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDAsIG91dHB1
dEluZGV4ID0gMDsgaSA8IGhhbmRsZXJzQ291bnQ7ICsraSkgeworICAgICAgICBjb25zdCBKU0V2
ZW50TGlzdGVuZXIqIGpzTGlzdGVuZXIgPSBKU0V2ZW50TGlzdGVuZXI6OmNhc3QobGlzdGVuZXJJ
bmZvLmV2ZW50TGlzdGVuZXJWZWN0b3JbaV0ubGlzdGVuZXIuZ2V0KCkpOworICAgICAgICBpZiAo
IWpzTGlzdGVuZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gSGlkZSBsaXN0
ZW5lcnMgZnJvbSBvdGhlciBjb250ZXh0cy4KKyAgICAgICAgaWYgKGpzTGlzdGVuZXItPmlzb2xh
dGVkV29ybGQoKSAhPSBjdXJyZW50V29ybGQoZXhlYykpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNMaXN0ZW5lci0+anNGdW5jdGlvbihkb2N1
bWVudCk7CisgICAgICAgIEpTT2JqZWN0KiBsaXN0ZW5lckVudHJ5ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7CisgICAgICAgIGxpc3RlbmVyRW50cnktPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgImxpc3RlbmVyIiksIGZ1bmN0aW9uKTsKKyAgICAg
ICAgbGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmll
cihleGVjLCAidXNlQ2FwdHVyZSIpLCBqc0Jvb2xlYW4obGlzdGVuZXJJbmZvLmV2ZW50TGlzdGVu
ZXJWZWN0b3JbaV0udXNlQ2FwdHVyZSkpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4
KGV4ZWMsIG91dHB1dEluZGV4KyssIEpTVmFsdWUobGlzdGVuZXJFbnRyeSkpOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpxdWVy
eUV2ZW50TGlzdGVuZXJzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSB8
fCB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgTm9k
ZSogbm9kZSA9IHRvTm9kZSh2YWx1ZSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBmb3Igb3JwaGFuIERv
Y3VtZW50VHlwZSBub2Rlcy4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVu
dCgpOworICAgIGlmICghbm9kZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgCisgICAgVmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiBsaXN0ZW5lcnNBcnJh
eTsKKyAgICBpbXBsKCktPnF1ZXJ5RXZlbnRMaXN0ZW5lcnNJbXBsKG5vZGUsIGxpc3RlbmVyc0Fy
cmF5KTsKKworICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RlbmVyc0FycmF5LnNpemUoKTsgKytp
KSB7CisgICAgICAgIEpTQXJyYXkqIGxpc3RlbmVycyA9IGdldEpTTGlzdGVuZXJGdW5jdGlvbnMo
ZXhlYywgZG9jdW1lbnQsIGxpc3RlbmVyc0FycmF5W2ldKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5l
cnMtPmxlbmd0aCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEF0b21pY1N0cmlu
ZyBldmVudFR5cGUgPSBsaXN0ZW5lcnNBcnJheVtpXS5ldmVudFR5cGU7CisgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCBldmVudFR5
cGUuaW1wbCgpKSwgSlNWYWx1ZShsaXN0ZW5lcnMpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNj
cmlwdEhvc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRleCA3NjQzMTliYTA1NDlkNWU2NTZjNWRm
YWI3YTNlOTJmNWY5YTk4NzM3Li4xODA4YzFmYTdmOTA2M2U2NzBmODA5ZjA1Njg1NDNjOWQxYmY5
ZjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmpl
Y3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5j
bHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgpAQCAtMTc3LDYgKzE3OCw2MyBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OmZ1bmN0aW9uRGV0YWlsc0NhbGxiYWNr
KGNvbnN0IHY4OjpBcgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxl
PHY4OjpBcnJheT4gZ2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEV2ZW50TGlzdGVuZXJJbmZvJiBsaXN0ZW5lckluZm8pCit7CisgICAgdjg6OkxvY2FsPHY4
OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcoKTsKKyAgICBzaXplX3QgaGFuZGxlcnND
b3VudCA9IGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yLnNpemUoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMCwgb3V0cHV0SW5kZXggPSAwOyBpIDwgaGFuZGxlcnNDb3VudDsgKytpKSB7
CisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGxpc3RlbmVySW5mby5l
dmVudExpc3RlbmVyVmVjdG9yW2ldLmxpc3RlbmVyOworICAgICAgICBpZiAobGlzdGVuZXItPnR5
cGUoKSAhPSBFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXJUeXBlKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKiB2OExpc3RlbmVyID0g
c3RhdGljX2Nhc3Q8VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIqPihsaXN0ZW5lci5nZXQoKSk7Cisg
ICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHRvVjhDb250ZXh0KGRvY3Vt
ZW50LCB2OExpc3RlbmVyLT53b3JsZENvbnRleHQoKSk7CisgICAgICAgIC8vIEhpZGUgbGlzdGVu
ZXJzIGZyb20gb3RoZXIgY29udGV4dHMuCisgICAgICAgIGlmIChjb250ZXh0ICE9IFY4UHJveHk6
OmN1cnJlbnRDb250ZXh0KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IGZ1bmN0aW9uID0gdjhMaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3Qo
ZG9jdW1lbnQpOworICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXJFbnRyeSA9
IHY4OjpPYmplY3Q6Ok5ldygpOworICAgICAgICBsaXN0ZW5lckVudHJ5LT5TZXQodjg6OlN0cmlu
Zzo6TmV3KCJsaXN0ZW5lciIpLCBmdW5jdGlvbik7CisgICAgICAgIGxpc3RlbmVyRW50cnktPlNl
dCh2ODo6U3RyaW5nOjpOZXcoInVzZUNhcHR1cmUiKSwgdjg6OkJvb2xlYW46Ok5ldyhsaXN0ZW5l
ckluZm8uZXZlbnRMaXN0ZW5lclZlY3RvcltpXS51c2VDYXB0dXJlKSk7CisgICAgICAgIHJlc3Vs
dC0+U2V0KHY4OjpOdW1iZXI6Ok5ldyhvdXRwdXRJbmRleCsrKSwgbGlzdGVuZXJFbnRyeSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOElu
amVjdGVkU2NyaXB0SG9zdDo6cXVlcnlFdmVudExpc3RlbmVyc0NhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJJbmplY3RlZFNjcmlwdEhvc3QucXVl
cnlFdmVudExpc3RlbmVyQ2FsbGJhY2soKSIpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkK
KyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKKworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gYXJnc1swXTsK
KyAgICBpZiAoIXZhbHVlLT5Jc09iamVjdCgpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOworICAgIE5vZGUqIG5vZGUgPSBWOE5vZGU6OnRvTmF0aXZlKHZhbHVlLT5Ub09iamVjdCgp
KTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAg
Ly8gVGhpcyBjYW4gb25seSBoYXBwZW4gZm9yIG9ycGhhbiBEb2N1bWVudFR5cGUgbm9kZXMuCisg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIW5vZGUt
PmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgCisgICAg
SW5qZWN0ZWRTY3JpcHRIb3N0KiBob3N0ID0gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOworICAgIFZlY3RvcjxFdmVudExpc3RlbmVySW5mbz4gbGlzdGVuZXJz
QXJyYXk7CisgICAgaG9zdC0+cXVlcnlFdmVudExpc3RlbmVyc0ltcGwobm9kZSwgbGlzdGVuZXJz
QXJyYXkpOworCisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHJlc3VsdCA9IHY4OjpPYmplY3Q6
Ok5ldygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdGVuZXJzQXJyYXkuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IGxpc3RlbmVycyA9IGdldEpT
TGlzdGVuZXJGdW5jdGlvbnMoZG9jdW1lbnQsIGxpc3RlbmVyc0FycmF5W2ldKTsKKyAgICAgICAg
aWYgKCFsaXN0ZW5lcnMtPkxlbmd0aCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IEF0b21pY1N0cmluZyBldmVudFR5cGUgPSBsaXN0ZW5lcnNBcnJheVtpXS5ldmVudFR5cGU7Cisg
ICAgICAgIHJlc3VsdC0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhmcm9tV2ViQ29yZVN0cmluZyhldmVu
dFR5cGUpLCBldmVudFR5cGUubGVuZ3RoKCkpLCBsaXN0ZW5lcnMpOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNj
cmlwdEhvc3Q6Omluc3BlY3RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewog
ICAgIElOQ19TVEFUUygiSW5qZWN0ZWRTY3JpcHRIb3N0Lmluc3BlY3QoKSIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAppbmRleCA3MzQ0MjQ2
N2M3MjNiZDRkNGY0NjM4NzNlODU5MjkxZWU1M2E1NTNhLi5jMzM4YjRmMDJhODBjZjczM2Y1MWRk
OWUwOTNiZTU0ZDJkZjMzMTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkluc3BlY3Rv
ckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQ29uc29sZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JEYXRh
YmFzZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKQEAgLTc0LDYgKzc1
LDcgQEAgSW5qZWN0ZWRTY3JpcHRIb3N0OjpJbmplY3RlZFNjcmlwdEhvc3QoKQogICAgICwgbV9k
YXRhYmFzZUFnZW50KDApCiAjZW5kaWYKICAgICAsIG1fZG9tU3RvcmFnZUFnZW50KDApCisgICAg
LCBtX2RvbUFnZW50KDApCiAgICAgLCBtX2xhc3RXb3JrZXJJZCgxIDw8IDMxKSAvLyBEaXN0aW5n
dWlzaCBpZHMgb2YgZmFrZSB3b3JrZXJzIGZyb20gcmVhbCBvbmVzLCB0byBtaW5pbWl6ZSB0aGUg
Y2hhbmNlcyB0aGV5IG92ZXJsYXAuCiB7CiAgICAgbV9kZWZhdWx0SW5zcGVjdGFibGVPYmplY3Qg
PSBhZG9wdFB0cihuZXcgSW5zcGVjdGFibGVPYmplY3QoKSk7CkBAIC05MSw2ICs5Myw3IEBAIHZv
aWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjpkaXNjb25uZWN0KCkKICAgICBtX2RhdGFiYXNlQWdlbnQg
PSAwOwogI2VuZGlmCiAgICAgbV9kb21TdG9yYWdlQWdlbnQgPSAwOworICAgIG1fZG9tQWdlbnQg
PSAwOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdEltcGwoUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gb2JqZWN0LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBoaW50
cykKQEAgLTk5LDYgKzEwMiwxMiBAQCB2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdElt
cGwoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gb2JqZWN0LCBQYXNzUmVmUAogICAgICAgICBt
X2luc3BlY3RvckFnZW50LT5pbnNwZWN0KG9iamVjdC0+YXNPYmplY3QoKSwgaGludHMtPmFzT2Jq
ZWN0KCkpOwogfQogCit2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6cXVlcnlFdmVudExpc3RlbmVy
c0ltcGwoTm9kZSogbm9kZSwgVmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiYgbGlzdGVuZXJzQXJy
YXkpCit7CisgICAgaWYgKG1fZG9tQWdlbnQpCisgICAgICAgIG1fZG9tQWdlbnQtPmdldEV2ZW50
TGlzdGVuZXJzKG5vZGUsIGxpc3RlbmVyc0FycmF5LCBmYWxzZSk7Cit9CisKIHZvaWQgSW5qZWN0
ZWRTY3JpcHRIb3N0OjpjbGVhckNvbnNvbGVNZXNzYWdlcygpCiB7CiAgICAgaWYgKG1fY29uc29s
ZUFnZW50KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0
LmgKaW5kZXggMzI0NjcwNjExNGIxY2U0YzcxYjhhN2ZlMDBlMjA2ZDAwM2ViOWYwMy4uMDNhMWRm
MDYwYjk3MjA0NDI0NDliZmQwZGNmNTY3N2M4ZTI5ZjM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaApAQCAtMzksOSArMzksMTEgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2U7CitjbGFzcyBFdmVudExpc3RlbmVySW5m
bzsKIGNsYXNzIEluamVjdGVkU2NyaXB0OwogY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CiBjbGFzcyBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKIGNsYXNzIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ7CiBj
bGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKQEAgLTYzLDYgKzY1LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgLCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50KiBkYXRhYmFzZUFnZW50CiAjZW5kaWYKICAg
ICAgICAgICAgICwgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBkb21TdG9yYWdlQWdlbnQKKyAg
ICAgICAgICAgICwgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50CiAgICAgICAgICkKICAgICB7
CiAgICAgICAgIG1faW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudDsKQEAgLTcxLDYgKzc0
LDcgQEAgcHVibGljOgogICAgICAgICBtX2RhdGFiYXNlQWdlbnQgPSBkYXRhYmFzZUFnZW50Owog
I2VuZGlmCiAgICAgICAgIG1fZG9tU3RvcmFnZUFnZW50ID0gZG9tU3RvcmFnZUFnZW50OworICAg
ICAgICBtX2RvbUFnZW50ID0gZG9tQWdlbnQ7CiAgICAgfQogCiAgICAgc3RhdGljIE5vZGUqIHNj
cmlwdFZhbHVlQXNOb2RlKFNjcmlwdFZhbHVlKTsKQEAgLTg4LDYgKzkyLDggQEAgcHVibGljOgog
ICAgIEluc3BlY3RhYmxlT2JqZWN0KiBpbnNwZWN0ZWRPYmplY3QodW5zaWduZWQgaW50IG51bSk7
CiAKICAgICB2b2lkIGluc3BlY3RJbXBsKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG9iamVj
dFRvSW5zcGVjdCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gaGludHMpOworICAgIHZvaWQg
cXVlcnlFdmVudExpc3RlbmVyc0ltcGwoTm9kZSosIFZlY3RvcjxFdmVudExpc3RlbmVySW5mbz4m
IGxpc3RlbmVyc0FycmF5KTsKKwogICAgIHZvaWQgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKICAg
ICB2b2lkIGNvcHlUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCk7CiAjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKQEAgLTEwOSw2ICsxMTUsNyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvckRhdGFiYXNl
QWdlbnQqIG1fZGF0YWJhc2VBZ2VudDsKICNlbmRpZgogICAgIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudCogbV9kb21TdG9yYWdlQWdlbnQ7CisgICAgSW5zcGVjdG9yRE9NQWdlbnQqIG1fZG9tQWdl
bnQ7CiAgICAgbG9uZyBtX2xhc3RXb3JrZXJJZDsKICAgICBWZWN0b3I8T3duUHRyPEluc3BlY3Rh
YmxlT2JqZWN0PiA+IG1faW5zcGVjdGVkT2JqZWN0czsKICAgICBPd25QdHI8SW5zcGVjdGFibGVP
YmplY3Q+IG1fZGVmYXVsdEluc3BlY3RhYmxlT2JqZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbAppbmRleCBhZTE0Njg2NmI3NmQ4NzYxNGZh
ZjFhY2I5MzhiZGIzNzIyNDM3ZWZjLi5iMTM4MDk3Y2QwNjQ0MGQ3YWM4ZjkwMmFkODI3YjA4MDFk
YzA5NmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRIb3N0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmlkbApAQCAtNDMsNiArNDMsNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtDdXN0b21d
IGJvb2xlYW4gaXNIVE1MQWxsQ29sbGVjdGlvbihpbiBET01PYmplY3Qgb2JqZWN0KTsKICAgICAg
ICAgW0N1c3RvbV0gRE9NU3RyaW5nIHR5cGUoaW4gRE9NT2JqZWN0IG9iamVjdCk7CiAgICAgICAg
IFtDdXN0b21dIERPTU9iamVjdCBmdW5jdGlvbkRldGFpbHMoaW4gRE9NT2JqZWN0IG9iamVjdCk7
CisgICAgICAgIFtDdXN0b21dIEFycmF5IHF1ZXJ5RXZlbnRMaXN0ZW5lcnMoaW4gTm9kZSBub2Rl
KTsKIAogICAgICAgICBbQ3VzdG9tXSBpbnQgZGF0YWJhc2VJZChpbiBET01PYmplY3QgZGF0YWJh
c2UpOwogICAgICAgICBbQ3VzdG9tXSBpbnQgc3RvcmFnZUlkKGluIERPTU9iamVjdCBzdG9yYWdl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNv
dXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
cwppbmRleCA3OWU2YzZkOTgyYjdmZDA1MDk4ZWQ3YTA5OTg3YzM1ZWViNmQwMDQ2Li4zNmM5ODQy
ODRkYjY3ZmY5NGJkYTA1MDhjNjgyN2Y0ZTQxZGY4MmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCkBAIC01NzcsNyArNTc3LDcgQEAg
ZnVuY3Rpb24gQ29tbWFuZExpbmVBUEkoY29tbWFuZExpbmVBUElJbXBsLCBjYWxsRnJhbWUpCiAK
IENvbW1hbmRMaW5lQVBJLm1lbWJlcnNfID0gWwogICAgICIkIiwgIiQkIiwgIiR4IiwgImRpciIs
ICJkaXJ4bWwiLCAia2V5cyIsICJ2YWx1ZXMiLCAicHJvZmlsZSIsICJwcm9maWxlRW5kIiwKLSAg
ICAibW9uaXRvckV2ZW50cyIsICJ1bm1vbml0b3JFdmVudHMiLCAiaW5zcGVjdCIsICJjb3B5Iiwg
ImNsZWFyIgorICAgICJtb25pdG9yRXZlbnRzIiwgInVubW9uaXRvckV2ZW50cyIsICJpbnNwZWN0
IiwgImNvcHkiLCAiY2xlYXIiLCAicXVlcnlFdmVudExpc3RlbmVycyIKIF07CiAKIGZ1bmN0aW9u
IENvbW1hbmRMaW5lQVBJSW1wbCgpCkBAIC02ODUsNiArNjg1LDExIEBAIENvbW1hbmRMaW5lQVBJ
SW1wbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIEluamVjdGVkU2NyaXB0SG9zdC5jbGVhckNvbnNv
bGVNZXNzYWdlcygpOwogICAgIH0sCiAKKyAgICBxdWVyeUV2ZW50TGlzdGVuZXJzOiBmdW5jdGlv
bihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUV2
ZW50TGlzdGVuZXJzKG5vZGUpOworICAgIH0sCisKICAgICBfaW5zcGVjdGVkT2JqZWN0OiBmdW5j
dGlvbihudW0pCiAgICAgewogICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0Lmluc3Bl
Y3RlZE9iamVjdChudW0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCmluZGV4IGQ5N2JkNTAzODk2ZDE1OWU3Nzg5ZTk4MTkzZmFkODg2ZjRl
ZDk3MjUuLmQ4M2Q2YzZjODRhY2RmNzNjMmVlYzUyZDc3YmZlZWM1YTNlMjQ4OTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE1
MCw2ICsxNTAsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBh
Z2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQwogICAgICAgICAsIGRhdGFiYXNl
QWdlbnQKICNlbmRpZgogICAgICAgICAsIGRvbVN0b3JhZ2VBZ2VudAorICAgICAgICAsIG1fZG9t
QWdlbnQKICAgICApOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA4NzVhMjk4
YTBkNTg4ZWUzMTY4NWNiOTkzZmY0ZDA4MzU4NTNmYjAxLi42NDRiYjlhZjEwYTQ3YzE4YTk0NmEw
MDYxMDkwN2I3Yjg0NWQ4ZjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHAKQEAgLTcyMyw0NCArNzIzLDE3IEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldE5vZGVWYWx1ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0CiAgICAgbV9kb21FZGl0b3ItPnJlcGxhY2VXaG9sZVRleHQodG9UZXh0KG5vZGUpLCB2
YWx1ZSwgZXJyb3JTdHJpbmcpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVu
dExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+JiBsaXN0ZW5lcnNBcnJheSkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2
ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGxpc3RlbmVyc0FycmF5KQogewogICAgIE5vZGUqIG5v
ZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBFdmVudFRhcmdldERhdGEqIGQ7Ci0KLSAgICAv
LyBRdWljayBicmVhayBpZiBhIG51bGwgbm9kZSBvciBubyBsaXN0ZW5lcnMgYXQgYWxsCi0gICAg
aWYgKCFub2RlIHx8ICEoZCA9IG5vZGUtPmV2ZW50VGFyZ2V0RGF0YSgpKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gR2V0IHRoZSBsaXN0IG9mIGV2ZW50IHR5cGVzIHRoaXMgTm9kZSBpcyBj
b25jZXJuZWQgd2l0aAotICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IGV2ZW50VHlwZXMgPSBkLT5l
dmVudExpc3RlbmVyTWFwLmV2ZW50VHlwZXMoKTsKLQotICAgIC8vIFF1aWNrIGJyZWFrIGlmIG5v
IHVzZWZ1bCBsaXN0ZW5lcnMKLSAgICBzaXplX3QgZXZlbnRUeXBlc0xlbmd0aCA9IGV2ZW50VHlw
ZXMuc2l6ZSgpOwotICAgIGlmICghZXZlbnRUeXBlc0xlbmd0aCkKKyAgICBpZiAoIW5vZGUpIHsK
KyAgICAgICAgKmVycm9yU3RyaW5nID0gIk5vIHN1Y2ggbm9kZSI7CiAgICAgICAgIHJldHVybjsK
LQotICAgIC8vIFRoZSBOb2RlJ3MgQW5jZXN0b3JzIChub3QgaW5jbHVkaW5nIHNlbGYpCi0gICAg
VmVjdG9yPENvbnRhaW5lck5vZGUqPiBhbmNlc3RvcnM7Ci0gICAgZm9yIChDb250YWluZXJOb2Rl
KiBhbmNlc3RvciA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKTsgYW5jZXN0b3I7IGFuY2VzdG9y
ID0gYW5jZXN0b3ItPnBhcmVudE9ySG9zdE5vZGUoKSkKLSAgICAgICAgYW5jZXN0b3JzLmFwcGVu
ZChhbmNlc3Rvcik7Ci0KLSAgICAvLyBOb2RlcyBhbmQgdGhlaXIgTGlzdGVuZXJzIGZvciB0aGUg
Y29uY2VybmVkIGV2ZW50IHR5cGVzIChvcmRlciBpcyB0b3AgdG8gYm90dG9tKQotICAgIFZlY3Rv
cjxFdmVudExpc3RlbmVySW5mbz4gZXZlbnRJbmZvcm1hdGlvbjsKLSAgICBmb3IgKHNpemVfdCBp
ID0gYW5jZXN0b3JzLnNpemUoKTsgaTsgLS1pKSB7Ci0gICAgICAgIENvbnRhaW5lck5vZGUqIGFu
Y2VzdG9yID0gYW5jZXN0b3JzW2kgLSAxXTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGog
PCBldmVudFR5cGVzTGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAgIEF0b21pY1N0cmluZyYgdHlw
ZSA9IGV2ZW50VHlwZXNbal07Ci0gICAgICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc0V2ZW50TGlz
dGVuZXJzKHR5cGUpKQotICAgICAgICAgICAgICAgIGV2ZW50SW5mb3JtYXRpb24uYXBwZW5kKEV2
ZW50TGlzdGVuZXJJbmZvKGFuY2VzdG9yLCB0eXBlLCBhbmNlc3Rvci0+Z2V0RXZlbnRMaXN0ZW5l
cnModHlwZSkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEluc2VydCB0aGUgQ3VycmVu
dCBOb2RlIGF0IHRoZSBlbmQgb2YgdGhhdCBsaXN0IChsYXN0IGluIGNhcHR1cmluZywgZmlyc3Qg
aW4gYnViYmxpbmcpCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBldmVudFR5cGVzTGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlID0gZXZlbnRUeXBlc1tp
XTsKLSAgICAgICAgZXZlbnRJbmZvcm1hdGlvbi5hcHBlbmQoRXZlbnRMaXN0ZW5lckluZm8obm9k
ZSwgdHlwZSwgbm9kZS0+Z2V0RXZlbnRMaXN0ZW5lcnModHlwZSkpKTsKICAgICB9CisgICAgVmVj
dG9yPEV2ZW50TGlzdGVuZXJJbmZvPiBldmVudEluZm9ybWF0aW9uOworICAgIGdldEV2ZW50TGlz
dGVuZXJzKG5vZGUsIGV2ZW50SW5mb3JtYXRpb24sIHRydWUpOworICAgIGlmIChldmVudEluZm9y
bWF0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IENhcHR1cmlu
ZyBMaXN0ZW5lcnMgKGluIHRoaXMgb3JkZXIpCiAgICAgc2l6ZV90IGV2ZW50SW5mb3JtYXRpb25M
ZW5ndGggPSBldmVudEluZm9ybWF0aW9uLnNpemUoKTsKQEAgLTc4Niw2ICs3NTksNDYgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5n
KiwgaW50IG5vZGVJZCwgUmVmUHQKICAgICB9CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmdldEV2ZW50TGlzdGVuZXJzKE5vZGUqIG5vZGUsIFZlY3RvcjxFdmVudExpc3RlbmVySW5mbz4m
IGV2ZW50SW5mb3JtYXRpb24sIGJvb2wgaW5jbHVkZUFuY2VzdG9ycykKK3sKKyAgICBFdmVudFRh
cmdldERhdGEqIGQ7CisKKyAgICAvLyBRdWljayBicmVhayBpZiBubyBsaXN0ZW5lcnMgYXQgYWxs
CisgICAgaWYgKCEoZCA9IG5vZGUtPmV2ZW50VGFyZ2V0RGF0YSgpKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gR2V0IHRoZSBsaXN0IG9mIGV2ZW50IHR5cGVzIHRoaXMgTm9kZSBpcyBjb25j
ZXJuZWQgd2l0aAorICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IGV2ZW50VHlwZXMgPSBkLT5ldmVu
dExpc3RlbmVyTWFwLmV2ZW50VHlwZXMoKTsKKworICAgIC8vIFF1aWNrIGJyZWFrIGlmIG5vIHVz
ZWZ1bCBsaXN0ZW5lcnMKKyAgICBzaXplX3QgZXZlbnRUeXBlc0xlbmd0aCA9IGV2ZW50VHlwZXMu
c2l6ZSgpOworICAgIGlmICghZXZlbnRUeXBlc0xlbmd0aCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGluY2x1ZGVBbmNlc3RvcnMpIHsKKyAgICAgICAgLy8gVGhlIE5vZGUncyBBbmNlc3Rv
cnMgKG5vdCBpbmNsdWRpbmcgc2VsZikKKyAgICAgICAgVmVjdG9yPENvbnRhaW5lck5vZGUqPiBh
bmNlc3RvcnM7CisgICAgICAgIGZvciAoQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBub2RlLT5w
YXJlbnRPckhvc3ROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRP
ckhvc3ROb2RlKCkpCisgICAgICAgICAgICBhbmNlc3RvcnMuYXBwZW5kKGFuY2VzdG9yKTsKKwor
ICAgICAgICAvLyBOb2RlcyBhbmQgdGhlaXIgTGlzdGVuZXJzIGZvciB0aGUgY29uY2VybmVkIGV2
ZW50IHR5cGVzIChvcmRlciBpcyB0b3AgdG8gYm90dG9tKQorICAgICAgICBmb3IgKHNpemVfdCBp
ID0gYW5jZXN0b3JzLnNpemUoKTsgaTsgLS1pKSB7CisgICAgICAgICAgICBDb250YWluZXJOb2Rl
KiBhbmNlc3RvciA9IGFuY2VzdG9yc1tpIC0gMV07CisgICAgICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IGV2ZW50VHlwZXNMZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAgIEF0b21p
Y1N0cmluZyYgdHlwZSA9IGV2ZW50VHlwZXNbal07CisgICAgICAgICAgICAgICAgaWYgKGFuY2Vz
dG9yLT5oYXNFdmVudExpc3RlbmVycyh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRJ
bmZvcm1hdGlvbi5hcHBlbmQoRXZlbnRMaXN0ZW5lckluZm8oYW5jZXN0b3IsIHR5cGUsIGFuY2Vz
dG9yLT5nZXRFdmVudExpc3RlbmVycyh0eXBlKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgLy8gSW5zZXJ0IHRoZSBDdXJyZW50IE5vZGUgYXQgdGhlIGVuZCBvZiB0
aGF0IGxpc3QgKGxhc3QgaW4gY2FwdHVyaW5nLCBmaXJzdCBpbiBidWJibGluZykKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGV2ZW50VHlwZXNMZW5ndGg7ICsraSkgeworICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUgPSBldmVudFR5cGVzW2ldOworICAgICAgICBldmVudEluZm9y
bWF0aW9uLmFwcGVuZChFdmVudExpc3RlbmVySW5mbyhub2RlLCB0eXBlLCBub2RlLT5nZXRFdmVu
dExpc3RlbmVycyh0eXBlKSkpOworICAgIH0KK30KKwogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgd2hpdGVzcGFjZVRyaW1t
ZWRRdWVyeSwgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkKIHsKICAgICAvLyBG
SVhNRTogRmV3IHRoaW5ncyBhcmUgbWlzc2luZyBoZXJlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA1YTE1MDAxZjg5ZTc5ZDQwNTJlZjkzYTY3
NGVmMGYxZWQ4NjYxMzc5Li5mN2MwYTA4ZmZmYWYzYTk3N2QzMDU3YTlkZjA4ZGQ5N2M2MGVlOWJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAt
MTUzLDYgKzE1Myw4IEBAIHB1YmxpYzoKIAogICAgIE5vZGUqIGhpZ2hsaWdodGVkTm9kZSgpIGNv
bnN0OwogCisgICAgdm9pZCBnZXRFdmVudExpc3RlbmVycyhOb2RlKiwgVmVjdG9yPEV2ZW50TGlz
dGVuZXJJbmZvPiYgbGlzdGVuZXJzQXJyYXksIGJvb2wgaW5jbHVkZUFuY2VzdG9ycyk7CisKICAg
ICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uCiAg
ICAgdm9pZCBzZXREb2N1bWVudChEb2N1bWVudCopOwogICAgIHZvaWQgcmVsZWFzZURhbmdsaW5n
Tm9kZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA4ZjBlZDBiODA1ZDViYjYwY2VmNDkwM2ZmYzVhZjY4
MDEyZDkzZGZhLi4wZGEyZWZlY2Y5YTdlNDI3ZTkwY2ZhMDAxNjU0YmNmNTJjOGYyYzFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRy
b2xsZXIuY3BwCkBAIC0xMTAsNiArMTEwLDcgQEAgV29ya2VySW5zcGVjdG9yQ29udHJvbGxlcjo6
V29ya2VySW5zcGVjdG9yQ29udHJvbGxlcihXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXgKICAg
ICAgICAgLCAwCiAjZW5kaWYKICAgICAgICAgLCAwCisgICAgICAgICwgMAogICAgICk7CiAKICNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxZjU3Y2ZlYjhmMWM3NWYzODVj
N2I5MGQ4MDQyMWFjM2EyNTNiYjU3Li5kYTQzODA0ZDkzMTg0OGRhNDkwNjk2MjU0MWMxNzg2ZTk1
NjRlMGZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDMtMjAgIEFuZHJleSBLb3N5YWtv
diAgPGNhc2VxQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBleHBvc2Ug
cXVlcnlFdmVudExpc3RlbmVycygpIHRvIGNvbnNvbGUgY29tbWFuZCBsaW5lIEFQSQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2NTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9jb25z
b2xlL2NvbW1hbmQtbGluZS1hcGktcXVlcnlFdmVudExpc3RlbmVycy5odG1sOiBBZGRlZC4KKwog
MjAxMi0wMy0xOSAgWm9sdGFuIEFydmFpICA8emFydmFpQGluZi51LXN6ZWdlZC5odT4KIAogICAg
ICAgICBbUXRdIE5ldyB0ZXN0IGludHJvZHVjZWQgaW4gcjExMDUzMiBmYWlscyBvbiAzMiBiaXQu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS9jb21tYW5kLWxpbmUt
YXBpLXF1ZXJ5RXZlbnRMaXN0ZW5lcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2NvbnNvbGUvY29tbWFuZC1saW5lLWFwaS1xdWVyeUV2ZW50TGlzdGVuZXJzLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mMDYzODM5MzZlZDYxMDEzNGNhMWViZjI4ZTUxMThjZWQxNGVlYzBk
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUvY29tbWFu
ZC1saW5lLWFwaS1xdWVyeUV2ZW50TGlzdGVuZXJzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDU0
IEBACitUZXN0cyBxdWVyeUV2ZW50TGlzdGVuZXJzKCkgbWV0aG9kIG9mIGNvbnNvbGUgY29tbWFu
ZCBsaW5lIEFQSS4KKworCistIGlubmVyIC0KK2tleWRvd246IHsKKyAgICAwOiB7CisgICAgICAg
IGxpc3RlbmVyOiBmdW5jdGlvbiBsaXN0ZW5lcjEoKSB7IH0KKyAgICAgICAgdXNlQ2FwdHVyZTog
ZmFsc2UKKyAgICB9CisgICAgMTogeworICAgICAgICBsaXN0ZW5lcjogZnVuY3Rpb24gbGlzdGVu
ZXIyKCkgeyB9CisgICAgICAgIHVzZUNhcHR1cmU6IHRydWUKKyAgICB9Cit9CistIG91dGVyIC0K
K21vdXNlbW92ZTogeworICAgIDA6IHsKKyAgICAgICAgbGlzdGVuZXI6IGZ1bmN0aW9uIGxpc3Rl
bmVyMSgpIHsgfQorICAgICAgICB1c2VDYXB0dXJlOiBmYWxzZQorICAgIH0KK30KK2tleWRvd246
IHsKKyAgICAwOiB7CisgICAgICAgIGxpc3RlbmVyOiBmdW5jdGlvbiBsaXN0ZW5lcjIoKSB7IH0K
KyAgICAgICAgdXNlQ2FwdHVyZTogdHJ1ZQorICAgIH0KK30KK21vdXNlZG93bjogeworICAgIDA6
IHsKKyAgICAgICAgbGlzdGVuZXI6IGZ1bmN0aW9uIGxpc3RlbmVyMigpIHsgfQorICAgICAgICB1
c2VDYXB0dXJlOiB0cnVlCisgICAgfQorfQorLSBhdHRyaWJ1dGUgZXZlbnQgbGlzdGVuZXJzIC0K
K21vdXNlb3ZlcjogeworICAgIDA6IHsKKyAgICAgICAgbGlzdGVuZXI6IGZ1bmN0aW9uIG9ubW91
c2VvdmVyKGV2ZW50KSB7IGxpc3RlbmVyMigpIH0KKyAgICAgICAgdXNlQ2FwdHVyZTogZmFsc2UK
KyAgICB9Cit9CitjbGljazogeworICAgIDA6IHsKKyAgICAgICAgbGlzdGVuZXI6IGZ1bmN0aW9u
IG9uY2xpY2soZXZlbnQpIHsgYWxlcnQoMSkgfQorICAgICAgICB1c2VDYXB0dXJlOiBmYWxzZQor
ICAgIH0KK30KKy0gZW1wdHkgLQorLSBvYmplY3QgLQordW5kZWZpbmVkCistIG51bGwgLQordW5k
ZWZpbmVkCistIHVuZGVmaW5lZCAtCit1bmRlZmluZWQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2NvbnNvbGUvY29tbWFuZC1saW5lLWFwaS1xdWVyeUV2ZW50TGlzdGVuZXJz
Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS9jb21tYW5kLWxpbmUtYXBpLXF1
ZXJ5RXZlbnRMaXN0ZW5lcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Nzk3NDI2YWYwMzdjMzFlY2M2NGY1
Y2E5NWVhMjAzNzc4NmY2NDFjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2NvbnNvbGUvY29tbWFuZC1saW5lLWFwaS1xdWVyeUV2ZW50TGlzdGVuZXJzLmh0bWwKQEAg
LTAsMCArMSw5MyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rl
c3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorCit2YXIgdGVzdCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBJbnNwZWN0b3JUZXN0LmV2
YWx1YXRlSW5Db25zb2xlKCJydW5UZXN0c0luUGFnZShxdWVyeUV2ZW50TGlzdGVuZXJzKSIsIElu
c3BlY3RvclRlc3QuY29tcGxldGVUZXN0LmJpbmQoSW5zcGVjdG9yVGVzdCkpOworfQorCis8L3Nj
cmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHAgaWQ9ImZvbyI+
CitUZXN0cyBxdWVyeUV2ZW50TGlzdGVuZXJzKCkgbWV0aG9kIG9mIGNvbnNvbGUgY29tbWFuZCBs
aW5lIEFQSS4KKzwvcD4KKzxkaXYgaWQ9Im91dGVyIj4KKzxkaXYgaWQ9ImlubmVyIj4KKzwvZGl2
PgorPC9kaXY+Cis8ZGl2IGlkPSJlbXB0eSI+Cis8L2Rpdj4KKzxidXR0b24gaWQ9ImJ1dHRvbiIg
b25jbGljaz0iYWxlcnQoMSkiIG9ubW91c2VvdmVyPSJsaXN0ZW5lcjIoKSI+PC9idXR0b24+CisK
KzxzY3JpcHQ+CitmdW5jdGlvbiBsaXN0ZW5lcjEoKQoreworfQorZnVuY3Rpb24gbGlzdGVuZXIy
KCkKK3sKK30KKworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlubmVyIikuYWRkRXZlbnRMaXN0
ZW5lcigia2V5ZG93biIsIGxpc3RlbmVyMSwgZmFsc2UpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImlubmVyIikuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGxpc3RlbmVyMiwgdHJ1ZSk7
Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3V0ZXIiKS5hZGRFdmVudExpc3RlbmVyKCJtb3Vz
ZW1vdmUiLCBsaXN0ZW5lcjEsIGZhbHNlKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdXRl
ciIpLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGxpc3RlbmVyMiwgdHJ1ZSk7Citkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgib3V0ZXIiKS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwg
bGlzdGVuZXIyLCB0cnVlKTsKKworZnVuY3Rpb24gZHVtcE9iamVjdChvYmplY3QsIHByZWZpeCkK
K3sKKyAgICBwcmVmaXggPSBwcmVmaXggfHwgIiI7CisgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5
cyhvYmplY3QpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkgewor
ICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5c1tpXV07CisgICAgICAgIHZhciBuYW1lV2l0
aFByZWZpeCA9IHByZWZpeCArIGtleXNbaV0gKyAiOiAiOworICAgICAgICBzd2l0Y2ggKHR5cGVv
Zih2YWx1ZSkpIHsKKyAgICAgICAgY2FzZSAib2JqZWN0IjoKKyAgICAgICAgICAgIGlmICh2YWx1
ZSA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG91dHB1dChuYW1lV2l0aFByZWZpeCArICJu
dWxsIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBvdXRwdXQobmFtZVdpdGhQcmVmaXggKyAieyIpOworICAgICAgICAgICAgZHVtcE9iamVjdCh2
YWx1ZSwgcHJlZml4ICsgIiAgICAiKQorICAgICAgICAgICAgb3V0cHV0KHByZWZpeCArICJ9Iik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAic3RyaW5nIjoKKyAgICAgICAgICAg
IG91dHB1dChuYW1lV2l0aFByZWZpeCArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiZnVuY3Rpb24iOgorICAgICAgICAgICAgdmFyIGJv
ZHkgPSB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1sgXG5dKy9nbSwgIiAiKTsKKyAgICAgICAg
ICAgIGJvZHkgPSBib2R5LnJlcGxhY2UoLzsgfS9nLCAiIH0iKTsKKyAgICAgICAgICAgIG91dHB1
dChuYW1lV2l0aFByZWZpeCArIGJvZHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBvdXRwdXQobmFtZVdpdGhQcmVmaXggKyBTdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBy
dW5UZXN0c0luUGFnZShxdWVyeUV2ZW50TGlzdGVuZXJzKQoreworICAgIG91dHB1dCgiLSBpbm5l
ciAtIik7CisgICAgZHVtcE9iamVjdChxdWVyeUV2ZW50TGlzdGVuZXJzKGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJpbm5lciIpKSk7CisgICAgb3V0cHV0KCItIG91dGVyIC0iKTsKKyAgICBkdW1w
T2JqZWN0KHF1ZXJ5RXZlbnRMaXN0ZW5lcnMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dGVy
IikpKTsKKyAgICBvdXRwdXQoIi0gYXR0cmlidXRlIGV2ZW50IGxpc3RlbmVycyAtIik7CisgICAg
ZHVtcE9iamVjdChxdWVyeUV2ZW50TGlzdGVuZXJzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJi
dXR0b24iKSkpOworICAgIG91dHB1dCgiLSBlbXB0eSAtIik7CisgICAgZHVtcE9iamVjdChxdWVy
eUV2ZW50TGlzdGVuZXJzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlbXB0eSIpKSk7CisgICAg
b3V0cHV0KCItIG9iamVjdCAtIik7CisgICAgb3V0cHV0KHR5cGVvZiBxdWVyeUV2ZW50TGlzdGVu
ZXJzKHt9KSk7CisgICAgb3V0cHV0KCItIG51bGwgLSIpOworICAgIG91dHB1dCh0eXBlb2YgcXVl
cnlFdmVudExpc3RlbmVycyhudWxsKSk7CisgICAgb3V0cHV0KCItIHVuZGVmaW5lZCAtIik7Cisg
ICAgb3V0cHV0KHR5cGVvZiBxdWVyeUV2ZW50TGlzdGVuZXJzKHVuZGVmaW5lZCkpOworfQorCis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="136611"
          type_id="1"
          status="+"
          setter="yurys"
    />
    <flag name="commit-queue"
          id="136615"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>