<?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>138566</bug_id>
          
          <creation_ts>2014-11-10 09:16:13 -0800</creation_ts>
          <short_desc>AX: Add support for ARIA 1.1 attribute &apos;aria-modal&apos; for dialog and alertdialog</short_desc>
          <delta_ts>2016-04-06 06:20:54 -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>Accessibility</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>145646</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Craig">jcraig</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>clown</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mario</cc>
    
    <cc>n_wang</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1047544</commentid>
    <comment_count>0</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2014-11-10 09:16:13 -0800</bug_when>
    <thetext>AX: Add support for ARIA 1.1 attribute &apos;aria-modal&apos; for dialog and alertdialog
http://rawgit.com/w3c/aria/master/aria/aria.html#aria-modal

aria-modal=false (default, dialog is not modal)
aria-modal=true (dialog is modal)

Current UA/AT text is: &quot;When a modal element is displayed, assistive technologies SHOULD navigate to the element unless focus has explicitly been set elsewhere. Assistive technologies MAY limit navigation to the modal element&apos;s contents. If focus moves to an element outside the modal element, assistive technologies SHOULD NOT limit navigation to to the modal element.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047545</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-11-10 09:16:48 -0800</bug_when>
    <thetext>&lt;rdar://problem/18926708&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047546</commentid>
    <comment_count>2</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2014-11-10 09:19:06 -0800</bug_when>
    <thetext>VO should automatically navigate to new dialogs even they are not modal, so WebKit should throw additional &quot;DialogCreated&quot; notifications if necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047547</commentid>
    <comment_count>3</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2014-11-10 09:20:12 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; ...to new dialogs even they are not modal...

Even *if* they are not modal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102212</commentid>
    <comment_count>4</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2015-06-16 02:30:49 -0700</bug_when>
    <thetext>*** Bug 146013 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138007</commentid>
    <comment_count>5</comment_count>
      <attachid>264430</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2015-10-30 15:37:45 -0700</bug_when>
    <thetext>Created attachment 264430
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138053</commentid>
    <comment_count>6</comment_count>
      <attachid>264430</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2015-10-30 17:09:43 -0700</bug_when>
    <thetext>Comment on attachment 264430
patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:199
&gt; +    if (!visibleNodes.isEmpty()) {

we should write this as
if (visibleNodes.isEmpty())
   return;

early returns are preferred

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:200
&gt; +        // If any of the node is keyboard focused, we want to pick that.

If any of the nodes &quot;are&quot; keyboard focused

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:227
&gt; +    if (equalIgnoringCase(downcast&lt;Element&gt;(*node).fastGetAttribute(aria_hiddenAttr), &quot;true&quot;))

we might want to use isNodeAriaVisible() here

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1857
&gt; +    for (Node* node = this-&gt;node(); node; node = node-&gt;parentNode()) {

there might be some ancestorsOfKind method that is better here

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1864
&gt; +bool AccessibilityObject::shouldIgnoreWhenAriaModalOn() const

I think we should name this method ignoredFromARIAModalPresence()
that&apos;s not much better than your name -- i just don&apos;t like the &quot;aria modal on&quot; formulation which is a bit weird since aria modal isn&apos;t something that gets turned on...

&gt; LayoutTests/accessibility/aria-modal-multiple-dialogs.html:81
&gt; +		dialog.style.display = &apos;block&apos;;

these test files have tabs in them, you should change to spaces</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138068</commentid>
    <comment_count>7</comment_count>
      <attachid>264430</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2015-10-30 17:53:52 -0700</bug_when>
    <thetext>Comment on attachment 264430
patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1857
&gt;&gt; +    for (Node* node = this-&gt;node(); node; node = node-&gt;parentNode()) {
&gt; 
&gt; there might be some ancestorsOfKind method that is better here

I see there&apos;s a ancestorsOfType method. But shouldn&apos;t we know the type of the ancestor first? Here the ariaModalNode can be any type right? Or is there another function to get the type of a node?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138074</commentid>
    <comment_count>8</comment_count>
      <attachid>264430</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2015-10-30 18:04:37 -0700</bug_when>
    <thetext>Comment on attachment 264430
patch

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

&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1857
&gt;&gt;&gt; +    for (Node* node = this-&gt;node(); node; node = node-&gt;parentNode()) {
&gt;&gt; 
&gt;&gt; there might be some ancestorsOfKind method that is better here
&gt; 
&gt; I see there&apos;s a ancestorsOfType method. But shouldn&apos;t we know the type of the ancestor first? Here the ariaModalNode can be any type right? Or is there another function to get the type of a node?

maybe use elementAncestors() and get the this-&gt;element() instead of the Node</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138097</commentid>
    <comment_count>9</comment_count>
      <attachid>264430</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2015-10-30 19:17:39 -0700</bug_when>
    <thetext>Comment on attachment 264430
patch

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

&gt;&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1857
&gt;&gt;&gt;&gt; +    for (Node* node = this-&gt;node(); node; node = node-&gt;parentNode()) {
&gt;&gt;&gt; 
&gt;&gt;&gt; there might be some ancestorsOfKind method that is better here
&gt;&gt; 
&gt;&gt; I see there&apos;s a ancestorsOfType method. But shouldn&apos;t we know the type of the ancestor first? Here the ariaModalNode can be any type right? Or is there another function to get the type of a node?
&gt; 
&gt; maybe use elementAncestors() and get the this-&gt;element() instead of the Node

In this case, don&apos;t we have to traverse farther than we need?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138123</commentid>
    <comment_count>10</comment_count>
      <attachid>264466</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2015-10-30 23:53:40 -0700</bug_when>
    <thetext>Created attachment 264466
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138124</commentid>
    <comment_count>11</comment_count>
      <attachid>264467</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2015-10-31 00:06:11 -0700</bug_when>
    <thetext>Created attachment 264467
patch

Removed tabs in test files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138473</commentid>
    <comment_count>12</comment_count>
      <attachid>264467</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2015-11-01 22:41:49 -0800</bug_when>
    <thetext>Comment on attachment 264467
patch

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

thanks!

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:145
&gt; +    , m_currentAriaModalNode(nullptr)

we should remove the pointer to m_currentAriaModalNode in our method that detects when nodes disappear.
you can imagine if someone removed a tree that contains m_currentAriaModalNode, we could have a stale pointer

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:164
&gt; +    m_currentAriaModalNode = nullptr;

this is set again to null in updateCurrentAriaModalNode() so it seems unnecessary here

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:217
&gt; +    if (!node || !is&lt;Element&gt;(node))

!is&lt;Element&gt;(node) should take care of !node so i think we can drop that

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1349
&gt; +    if (!node || !is&lt;Element&gt;(node))

ditto about !node

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1355
&gt; +    stopCachingComputedObjectAttributes();

do you need to start caching again at the end of this method?

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1360
&gt; +            m_ariaModalNodesSet.add(node);

since m_ariaModalNodesSet is already a set i don&apos;t think you need to check contains() first

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1364
&gt; +        if (m_ariaModalNodesSet.contains(node))

ditto about contains()

&gt; Source/WebCore/accessibility/AXObjectCache.h:306
&gt; +    ListHashSet&lt;RefPtr&lt;Node&gt;&gt; m_ariaModalNodesSet;

do we want to RefPtr the nodes here? i don&apos;t think we retain other Nodes. We just have to be careful about cleaning up these things

you can imagine if the Document node got into this list we&apos;d have a retain cycle

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1867
&gt; +bool AccessibilityObject::ignoredFromARIAModalPresence() const

can you add a comment what this method does

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1870
&gt; +    if (!node() || !node()-&gt;parentNode())

is this necessary? it seems like the below checks will take care of these cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138628</commentid>
    <comment_count>13</comment_count>
      <attachid>264467</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2015-11-02 11:31:43 -0800</bug_when>
    <thetext>Comment on attachment 264467
patch

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

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:145
&gt;&gt; +    , m_currentAriaModalNode(nullptr)
&gt; 
&gt; we should remove the pointer to m_currentAriaModalNode in our method that detects when nodes disappear.
&gt; you can imagine if someone removed a tree that contains m_currentAriaModalNode, we could have a stale pointer

In ariaModalNode() to get the current modal node, isNodeVisible(m_currentAriaModalNode) will check if the node is still there and set it to nullptr in updateCurrentAriaModalNode(). So that makes sure we are not accessing a stale pointer. Do you think that&apos;s enough?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138629</commentid>
    <comment_count>14</comment_count>
      <attachid>264467</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2015-11-02 11:31:45 -0800</bug_when>
    <thetext>Comment on attachment 264467
patch

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

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:145
&gt;&gt; +    , m_currentAriaModalNode(nullptr)
&gt; 
&gt; we should remove the pointer to m_currentAriaModalNode in our method that detects when nodes disappear.
&gt; you can imagine if someone removed a tree that contains m_currentAriaModalNode, we could have a stale pointer

In ariaModalNode() to get the current modal node, isNodeVisible(m_currentAriaModalNode) will check if the node is still there and set it to nullptr in updateCurrentAriaModalNode(). So that makes sure we are not accessing a stale pointer. Do you think that&apos;s enough?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138633</commentid>
    <comment_count>15</comment_count>
      <attachid>264467</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2015-11-02 11:37:09 -0800</bug_when>
    <thetext>Comment on attachment 264467
patch

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

&gt;&gt;&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:145
&gt;&gt;&gt;&gt; +    , m_currentAriaModalNode(nullptr)
&gt;&gt;&gt; 
&gt;&gt;&gt; we should remove the pointer to m_currentAriaModalNode in our method that detects when nodes disappear.
&gt;&gt;&gt; you can imagine if someone removed a tree that contains m_currentAriaModalNode, we could have a stale pointer
&gt;&gt; 
&gt;&gt; In ariaModalNode() to get the current modal node, isNodeVisible(m_currentAriaModalNode) will check if the node is still there and set it to nullptr in updateCurrentAriaModalNode(). So that makes sure we are not accessing a stale pointer. Do you think that&apos;s enough?
&gt; 
&gt; In ariaModalNode() to get the current modal node, isNodeVisible(m_currentAriaModalNode) will check if the node is still there and set it to nullptr in updateCurrentAriaModalNode(). So that makes sure we are not accessing a stale pointer. Do you think that&apos;s enough?

i don&apos;t think so. this call will cause a segfault
!is&lt;Element&gt;(node))

because node will be garbage memory

we should also add a test for this case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138656</commentid>
    <comment_count>16</comment_count>
      <attachid>264613</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2015-11-02 12:27:46 -0800</bug_when>
    <thetext>Created attachment 264613
patch

Added cleanup code for m_currentAriaModalNode and m_ariaModalNodesSet when nodes get removed. Also added test in aria-modal.html

For top node check in ignoredFromARIAModalPresence()
if (!node() || !node()-&gt;parentNode()), I think it&apos;s still necessary. Without this, when there&apos;s a dialog displayed and top node will be ignored because isAriaModalDescendant() will return false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138793</commentid>
    <comment_count>17</comment_count>
      <attachid>264613</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-02 17:53:31 -0800</bug_when>
    <thetext>Comment on attachment 264613
patch

Clearing flags on attachment: 264613

Committed r191931: &lt;http://trac.webkit.org/changeset/191931&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138794</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-02 17:53:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138954</commentid>
    <comment_count>19</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2015-11-03 10:05:43 -0800</bug_when>
    <thetext>The tests added with this patch are have been failing on win since landing:

Run:
&lt;https://build.webkit.org/builders/Apple%20Win%207%20Release%20%28Tests%29/builds/54892&gt;
Results:
&lt;https://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/r191952%20(54892)/results.html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138990</commentid>
    <comment_count>20</comment_count>
      <attachid>264702</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2015-11-03 11:29:48 -0800</bug_when>
    <thetext>Created attachment 264702
patch

Skip failing tests on win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139053</commentid>
    <comment_count>21</comment_count>
      <attachid>264702</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-03 13:29:48 -0800</bug_when>
    <thetext>Comment on attachment 264702
patch

Clearing flags on attachment: 264702

Committed r191972: &lt;http://trac.webkit.org/changeset/191972&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139054</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-03 13:29:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169236</commentid>
    <comment_count>23</comment_count>
    <who name="Joseph Scheuhammer">clown</who>
    <bug_when>2016-02-29 12:39:04 -0800</bug_when>
    <thetext>What are the AXAPI mappings for aria-modal in the Core-AAM, for both &quot;true&quot; and &quot;false&quot; values:

http://rawgit.com/w3c/aria/master/core-aam/core-aam.html#ariaModalTrue
http://rawgit.com/w3c/aria/master/core-aam/core-aam.html#ariaModalFalse


Put another way, what does the AccessibilityInspector tool show for an accessible object in the two cases?

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180932</commentid>
    <comment_count>24</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2016-04-05 13:04:24 -0700</bug_when>
    <thetext>Chris: Another one for which an official mapping (i.e. to put in a Core AAM spec table for AXAPI) is needed.

Looking at the code, it seems like the &quot;mapping&quot;/exposure for aria-modal is to prune the tree, so the background content is no longer exposed. Could you please confirm or correct this so Joseph (CCed) can add the mapping for your platform to his spec?

Thanks!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180937</commentid>
    <comment_count>25</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-04-05 13:18:18 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Chris: Another one for which an official mapping (i.e. to put in a Core AAM
&gt; spec table for AXAPI) is needed.
&gt; 
&gt; Looking at the code, it seems like the &quot;mapping&quot;/exposure for aria-modal is
&gt; to prune the tree, so the background content is no longer exposed. Could you
&gt; please confirm or correct this so Joseph (CCed) can add the mapping for your
&gt; platform to his spec?
&gt; 
&gt; Thanks!!

that is correct</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181239</commentid>
    <comment_count>26</comment_count>
    <who name="Joseph Scheuhammer">clown</who>
    <bug_when>2016-04-06 06:20:54 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; Chris: Another one for which an official mapping (i.e. to put in a Core AAM
&gt; &gt; spec table for AXAPI) is needed.
&gt; &gt; 
&gt; &gt; Looking at the code, it seems like the &quot;mapping&quot;/exposure for aria-modal is
&gt; &gt; to prune the tree, so the background content is no longer exposed. Could you
&gt; &gt; please confirm or correct this so Joseph (CCed) can add the mapping for your
&gt; &gt; platform to his spec?
&gt; &gt; 
&gt; &gt; Thanks!!
&gt; 
&gt; that is correct

Thanks, Chris.

(and Joanie).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264430</attachid>
            <date>2015-10-30 15:37:45 -0700</date>
            <delta_ts>2015-10-30 23:53:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22362</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE1LTEwLTMwICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFkZCBzdXBwb3J0IGZvciBBUklB
IDEuMSBhdHRyaWJ1dGUgJ2FyaWEtbW9kYWwnIGZvciBkaWFsb2cgYW5kIGFsZXJ0ZGlhbG9nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg1NjYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBzdXBw
b3J0IGZvciBhcmlhLW1vZGFsIGF0dHJpYnV0ZSBvbiBkaWFsb2cvYWxlcnRkaWFsb2cgcm9sZXMu
CisgICAgICAgIFdoZW4gbW9kYWwgZGlhbG9nIGlzIGRpc3BsYXllZCwgYWxsIG90aGVyIGNvbnRl
bnRzIHdpbGwgYmUgdW5hY2Nlc3NpYmxlLgorCisgICAgICAgIFRlc3RzOiBhY2Nlc3NpYmlsaXR5
L2FyaWEtbW9kYWwtbXVsdGlwbGUtZGlhbG9ncy5odG1sCisgICAgICAgICAgICAgICBhY2Nlc3Np
YmlsaXR5L2FyaWEtbW9kYWwuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6ZmluZEFyaWFNb2RhbE5vZGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnVwZGF0ZUN1cnJlbnRBcmlhTW9kYWxOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmlzTm9kZVZpc2libGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YXJpYU1vZGFsTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpmb2N1c2VkSW1hZ2VNYXBVSUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhTW9kYWxDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bGFiZWxDaGFuZ2VkKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmhhbmRsZUFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhUm9sZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYU1vZGFsQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYUN1cnJlbnRTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FyaWFNb2RhbERlc2NlbmRhbnQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2hvdWxkSWdub3JlV2hl
bkFyaWFNb2RhbE9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Omhh
c1RhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6ZGVmYXVs
dE9iamVjdEluY2x1c2lvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0Lmg6CisgICAgICAgICogaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW46CisKIDIwMTUt
MTAtMzAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBGaXggV2luZG93cyBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQyLDcgKzE0Miw5IEBAIEFYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoRG9jdW1lbnQmIGQK
ICAgICAsIG1fbm90aWZpY2F0aW9uUG9zdFRpbWVyKCp0aGlzLCAmQVhPYmplY3RDYWNoZTo6bm90
aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQpCiAgICAgLCBtX3Bhc3N3b3JkTm90aWZpY2F0aW9uUG9z
dFRpbWVyKCp0aGlzLCAmQVhPYmplY3RDYWNoZTo6cGFzc3dvcmROb3RpZmljYXRpb25Qb3N0VGlt
ZXJGaXJlZCkKICAgICAsIG1fbGl2ZVJlZ2lvbkNoYW5nZWRQb3N0VGltZXIoKnRoaXMsICZBWE9i
amVjdENhY2hlOjpsaXZlUmVnaW9uQ2hhbmdlZE5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKQor
ICAgICwgbV9jdXJyZW50QXJpYU1vZGFsTm9kZShudWxscHRyKQogeworICAgIGZpbmRBcmlhTW9k
YWxOb2RlcygpOwogfQogCiBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpCkBAIC0xNTcs
NiArMTU5LDkzIEBAIEFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKCkKICAgICB9CiB9CiAK
K3ZvaWQgQVhPYmplY3RDYWNoZTo6ZmluZEFyaWFNb2RhbE5vZGVzKCkKK3sKKyAgICBtX2N1cnJl
bnRBcmlhTW9kYWxOb2RlID0gbnVsbHB0cjsKKyAgICAKKyAgICAvLyBUcmF2ZXJzZSB0aGUgRE9N
IHRyZWUgdG8gbG9vayBmb3IgdGhlIGFyaWEtbW9kYWw9dHJ1ZSBub2Rlcy4KKyAgICBmb3IgKEVs
ZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihkb2N1bWVudCgp
LnJvb3ROb2RlKCkpOyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dElu
Y2x1ZGluZ1BzZXVkbygqZWxlbWVudCkpIHsKKyAgICAgICAgCisgICAgICAgIC8vIE11c3QgaGF2
ZSBkaWFsb2cgb3IgYWxlcnRkaWFsb2cgcm9sZQorICAgICAgICBpZiAoIW5vZGVIYXNSb2xlKGVs
ZW1lbnQsICJkaWFsb2ciKSAmJiAhbm9kZUhhc1JvbGUoZWxlbWVudCwgImFsZXJ0ZGlhbG9nIikp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShl
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGFyaWFfbW9kYWxBdHRyKSwgInRydWUiKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKCFtX2FyaWFNb2RhbE5vZGVz
U2V0LmNvbnRhaW5zKGVsZW1lbnQpKQorICAgICAgICAgICAgbV9hcmlhTW9kYWxOb2Rlc1NldC5h
ZGQoZWxlbWVudCk7CisgICAgfQorICAgIAorICAgIC8vIFNldCB0aGUgY3VycmVudCB2YWxpZCBh
cmlhLW1vZGFsIG5vZGUgaWYgcG9zc2libGUuCisgICAgdXBkYXRlQ3VycmVudEFyaWFNb2RhbE5v
ZGUoKTsKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjp1cGRhdGVDdXJyZW50QXJpYU1vZGFsTm9k
ZSgpCit7CisgICAgLy8gVGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgbm9kZXMgd2l0aCBhcmlhLW1v
ZGFsPXRydWUgc2V0LgorICAgIC8vIFdlIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHBpY2sgdGhlIG9u
ZSB3ZSB3YW50LgorICAgIG1fY3VycmVudEFyaWFNb2RhbE5vZGUgPSBudWxscHRyOworICAgIGlm
IChtX2FyaWFNb2RhbE5vZGVzU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIE5vZGUqIGZvY3VzZWROb2RlID0gZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpOworICAg
IC8vIFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgbm9kZXMgd2hpY2ggYXJlIHZpc2libGUuCisgICAg
TGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiB2aXNpYmxlTm9kZXM7CisgICAgZm9yIChhdXRvJiBv
YmplY3QgOiBtX2FyaWFNb2RhbE5vZGVzU2V0KSB7CisgICAgICAgIGlmIChpc05vZGVWaXNpYmxl
KG9iamVjdC5nZXQoKSkpCisgICAgICAgICAgICB2aXNpYmxlTm9kZXMuYWRkKG9iamVjdC5nZXQo
KSk7CisgICAgfQorICAgIAorICAgIGlmICghdmlzaWJsZU5vZGVzLmlzRW1wdHkoKSkgeworICAg
ICAgICAvLyBJZiBhbnkgb2YgdGhlIG5vZGUgaXMga2V5Ym9hcmQgZm9jdXNlZCwgd2Ugd2FudCB0
byBwaWNrIHRoYXQuCisgICAgICAgIGZvciAoYXV0byYgb2JqZWN0IDogdmlzaWJsZU5vZGVzKSB7
CisgICAgICAgICAgICBpZiAoZm9jdXNlZE5vZGUgIT0gbnVsbHB0ciAmJiBmb2N1c2VkTm9kZS0+
aXNEZXNjZW5kYW50T2Yob2JqZWN0LmdldCgpKSkgeworICAgICAgICAgICAgICAgIG1fY3VycmVu
dEFyaWFNb2RhbE5vZGUgPSBvYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIElmIG5vbmUgb2Yg
dGhlIG5vZGVzIGFyZSBmb2N1c2VkLCB3ZSB3YW50IHRvIHBpY2sgdGhlIGxhc3QgZGlhbG9nIGlu
IHRoZSBET00uCisgICAgICAgIGlmICghbV9jdXJyZW50QXJpYU1vZGFsTm9kZSkKKyAgICAgICAg
ICAgIG1fY3VycmVudEFyaWFNb2RhbE5vZGUgPSB2aXNpYmxlTm9kZXMubGFzdCgpLmdldCgpOwor
ICAgIH0KK30KKworYm9vbCBBWE9iamVjdENhY2hlOjppc05vZGVWaXNpYmxlKE5vZGUqIG5vZGUp
IGNvbnN0Cit7CisgICAgaWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5y
ZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBpZiAo
c3R5bGUuZGlzcGxheSgpID09IE5PTkUgfHwgc3R5bGUudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBXZSBhbHNvIG5lZWQgdG8gY29u
c2lkZXIgYXJpYSBoaWRkZW4gc3RhdHVzLgorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuZmFzdEdldEF0dHJpYnV0ZShhcmlhX2hpZGRlbkF0dHIpLCAi
dHJ1ZSIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK05vZGUqIEFYT2JqZWN0Q2FjaGU6OmFyaWFNb2RhbE5vZGUoKQoreworICAgIC8vIFRoaXMg
ZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsaWQgYXJpYSBtb2RhbCBub2RlLgorICAgIGlmIChtX2Fy
aWFNb2RhbE5vZGVzU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
CisgICAgLy8gQ2hlY2sgdGhlIGN1cnJlbnQgdmFsaWQgYXJpYSBtb2RhbCBub2RlIGZpcnN0Lgor
ICAgIC8vIFVzdWFsbHkgd2hlbiBvbmUgZGlhbG9nIHNldHMgYXJpYS1tb2RhbD10cnVlLCB0aGF0
IGRpYWxvZyBpcyB0aGUgb25lIHdlIHdhbnQuCisgICAgaWYgKGlzTm9kZVZpc2libGUobV9jdXJy
ZW50QXJpYU1vZGFsTm9kZSkpCisgICAgICAgIHJldHVybiBtX2N1cnJlbnRBcmlhTW9kYWxOb2Rl
OworICAgIAorICAgIC8vIFJlY29tcHV0ZSB0aGUgdmFsaWQgYXJpYSBtb2RhbCBub2RlIHdoZW4g
bV9jdXJyZW50QXJpYU1vZGFsTm9kZSBpcyBudWxsIG9yIGhpZGRlbi4KKyAgICB1cGRhdGVDdXJy
ZW50QXJpYU1vZGFsTm9kZSgpOworICAgIHJldHVybiBpc05vZGVWaXNpYmxlKG1fY3VycmVudEFy
aWFNb2RhbE5vZGUpID8gbV9jdXJyZW50QXJpYU1vZGFsTm9kZSA6IG51bGxwdHI7Cit9CisKIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRJbWFnZU1hcFVJRWxlbWVu
dChIVE1MQXJlYUVsZW1lbnQqIGFyZWFFbGVtZW50KQogewogICAgIC8vIEZpbmQgdGhlIGNvcnJl
c3BvbmRpbmcgYWNjZXNzaWJpbGl0eSBvYmplY3QgZm9yIHRoZSBIVE1MQXJlYUVsZW1lbnQuIFRo
aXMgc2hvdWxkIGJlCkBAIC0xMjQ4LDEwICsxMzM3LDM1IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6
aGFuZGxlQXR0cmlidXRlQ2hhbmcKICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkKGVsZW1lbnQtPnBh
cmVudE5vZGUoKSwgZWxlbWVudCk7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJpYV9pbnZh
bGlkQXR0cikKICAgICAgICAgcG9zdE5vdGlmaWNhdGlvbihlbGVtZW50LCBBWE9iamVjdENhY2hl
OjpBWEludmFsaWRTdGF0dXNDaGFuZ2VkKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBhcmlh
X21vZGFsQXR0cikKKyAgICAgICAgaGFuZGxlQXJpYU1vZGFsQ2hhbmdlKGVsZW1lbnQpOwogICAg
IGVsc2UKICAgICAgICAgcG9zdE5vdGlmaWNhdGlvbihlbGVtZW50LCBBWE9iamVjdENhY2hlOjpB
WEFyaWFBdHRyaWJ1dGVDaGFuZ2VkKTsKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVB
cmlhTW9kYWxDaGFuZ2UoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1l
bnQ+KG5vZGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFub2RlSGFzUm9sZShu
b2RlLCAiZGlhbG9nIikgJiYgIW5vZGVIYXNSb2xlKG5vZGUsICJhbGVydGRpYWxvZyIpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0
ZXMoKTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUp
LmZhc3RHZXRBdHRyaWJ1dGUoYXJpYV9tb2RhbEF0dHIpLCAidHJ1ZSIpKSB7CisgICAgICAgIC8v
IEFkZCB0aGUgbmV3bHkgbW9kaWZpZWQgbm9kZSB0byB0aGUgbW9kYWwgbm9kZXMgc2V0LCBhbmQg
c2V0IGl0IHRvIGJlIHRoZSBjdXJyZW50IHZhbGlkIGFyaWEgbW9kYWwgbm9kZS4KKyAgICAgICAg
Ly8gV2Ugd2lsbCByZWNvbXB1dGUgdGhlIGN1cnJlbnQgdmFsaWQgYXJpYSBtb2RhbCBub2RlIGlu
IGFyaWFNb2RhbE5vZGUoKSB3aGVuIHRoaXMgbm9kZSBpcyBub3QgdmlzaWJsZS4KKyAgICAgICAg
aWYgKCFtX2FyaWFNb2RhbE5vZGVzU2V0LmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgbV9h
cmlhTW9kYWxOb2Rlc1NldC5hZGQobm9kZSk7CisgICAgICAgIG1fY3VycmVudEFyaWFNb2RhbE5v
ZGUgPSBub2RlOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFJlbW92ZSB0aGUgbm9kZSBmcm9t
IHRoZSBtb2RhbCBub2RlcyBzZXQuIFRoZXJlIG1pZ2h0IGJlIG90aGVyIHZpc2libGUgbW9kYWwg
bm9kZXMsIHNvIHdlIHJlY29tcHV0ZSBoZXJlLgorICAgICAgICBpZiAobV9hcmlhTW9kYWxOb2Rl
c1NldC5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgIG1fYXJpYU1vZGFsTm9kZXNTZXQucmVt
b3ZlKG5vZGUpOworICAgICAgICB1cGRhdGVDdXJyZW50QXJpYU1vZGFsTm9kZSgpOworICAgIH0K
K30KKwogdm9pZCBBWE9iamVjdENhY2hlOjpsYWJlbENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkK
IHsKICAgICBBU1NFUlQoaXM8SFRNTExhYmVsRWxlbWVudD4oKmVsZW1lbnQpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCShyZXZpc2lvbiAx
OTE1ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRs
ZVNjcm9sbGVkVG9BbmNob3IoY29uc3QgTm9kZSogYW5jaG9yTm9kZSk7CiAgICAgdm9pZCBoYW5k
bGVBcmlhRXhwYW5kZWRDaGFuZ2UoTm9kZSopOwogICAgIHZvaWQgaGFuZGxlU2Nyb2xsYmFyVXBk
YXRlKFNjcm9sbFZpZXcqKTsKKyAgICAKKyAgICB2b2lkIGhhbmRsZUFyaWFNb2RhbENoYW5nZShO
b2RlKik7CisgICAgTm9kZSogYXJpYU1vZGFsTm9kZSgpOwogCiAgICAgdm9pZCBoYW5kbGVBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBFbGVtZW50Kik7CiAg
ICAgdm9pZCByZWNvbXB1dGVJc0lnbm9yZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcik7CkBAIC0y
NzEsNiArMjc0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVNZW51T3BlbmVkKE5vZGUq
KTsKICAgICB2b2lkIGhhbmRsZUxpdmVSZWdpb25DcmVhdGVkKE5vZGUqKTsKICAgICB2b2lkIGhh
bmRsZU1lbnVJdGVtU2VsZWN0ZWQoTm9kZSopOworICAgIAorICAgIC8vIGFyaWEtbW9kYWwgcmVs
YXRlZAorICAgIHZvaWQgZmluZEFyaWFNb2RhbE5vZGVzKCk7CisgICAgdm9pZCB1cGRhdGVDdXJy
ZW50QXJpYU1vZGFsTm9kZSgpOworICAgIGJvb2wgaXNOb2RlVmlzaWJsZShOb2RlKikgY29uc3Q7
CiAKICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0Pj4gbV9vYmplY3RzOwpAQCAtMjkzLDYgKzMwMSw5IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgVGltZXIgbV9saXZlUmVnaW9uQ2hhbmdlZFBvc3RUaW1lcjsKICAgICBM
aXN0SGFzaFNldDxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4+IG1fbGl2ZVJlZ2lvbk9iamVj
dHNTZXQ7CisgICAgCisgICAgTm9kZSogbV9jdXJyZW50QXJpYU1vZGFsTm9kZTsKKyAgICBMaXN0
SGFzaFNldDxSZWZQdHI8Tm9kZT4+IG1fYXJpYU1vZGFsTm9kZXNTZXQ7CiAKICAgICBBWFRleHRT
dGF0ZUNoYW5nZUludGVudCBtX3RleHRTZWxlY3Rpb25JbnRlbnQ7CiAgICAgYm9vbCBtX2lzU3lu
Y2hyb25pemluZ1NlbGVjdGlvbiB7IGZhbHNlIH07CkBAIC0zNDgsNiArMzU5LDcgQEAgaW5saW5l
IHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRQogaW5saW5lIHZvaWQgQVhPYmplY3RD
YWNoZTo6aGFuZGxlQWN0aXZlRGVzY2VuZGFudENoYW5nZWQoTm9kZSopIHsgfQogaW5saW5lIHZv
aWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKE5vZGUqKSB7IH0KIGlu
bGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFyaWFSb2xlQ2hhbmdlZChOb2RlKikgeyB9
CitpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhTW9kYWxDaGFuZ2UoTm9kZSop
IHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlRm9jdXNlZFVJRWxlbWVudENo
YW5nZWQoTm9kZSosIE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRs
ZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENh
Y2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBFbGVtZW50
KikgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4NDYsNiArMTg0Niw0MyBAQCBBY2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRTdGF0ZSBBY2Nlc3Np
YmlsCiAgICAgcmV0dXJuIEFSSUFDdXJyZW50VHJ1ZTsKIH0KIAorYm9vbCBBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojppc0FyaWFNb2RhbERlc2NlbmRhbnQoTm9kZSogYXJpYU1vZGFsTm9kZSkgY29uc3QK
K3sKKyAgICBpZiAoIWFyaWFNb2RhbE5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICAvLyBBUklBIDEuMSBhcmlhLW1vZGFsLCBpbmRpY2F0ZXMgd2hldGhlciBhbiBlbGVtZW50
IGlzIG1vZGFsIHdoZW4gZGlzcGxheWVkLgorICAgIC8vIEl0J3Mgb25seSB1c2VkIGluIHJvbGVz
OiBhbGVydGRpYWxvZyBhbmQgZGlhbG9nLgorICAgIC8vIEZvciB0aGUgZGVjZW5kYW50cyBvZiB0
aGUgbW9kYWwgb2JqZWN0LCB0aGV5IHNob3VsZCBhbHNvIGJlIGNvbnNpZGVyZWQgYXMgYXJpYS1t
b2RhbD10cnVlLgorICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAobm9kZSA9PSBhcmlhTW9kYWxO
b2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzaG91bGRJZ25vcmVXaGVuQXJpYU1vZGFs
T24oKSBjb25zdAoreworICAgIC8vIFdlIHNob3VsZG4ndCBpZ25vcmUgdGhlIHRvcCBub2RlLgor
ICAgIGlmICghbm9kZSgpIHx8ICFub2RlKCktPnBhcmVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gYXhPYmplY3RDYWNoZSgp
OworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBh
cmlhTW9kYWxOb2RlIGlzIHRoZSBjdXJyZW50IGRpc3BsYXllZCBtb2RhbCBkaWFsb2cuCisgICAg
Tm9kZSogYXJpYU1vZGFsTm9kZSA9IGNhY2hlLT5hcmlhTW9kYWxOb2RlKCk7CisgICAgaWYgKCFh
cmlhTW9kYWxOb2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2Ugb25s
eSB3YW50IHRvIGlnbm9yZSB0aGUgb2JqZWN0cyB3aXRoaW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhl
IG1vZGFsIGRpYWxvZy4KKyAgICBpZiAoYXJpYU1vZGFsTm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgp
ICE9IHRoaXMtPmZyYW1lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1
cm4gIWlzQXJpYU1vZGFsRGVzY2VuZGFudChhcmlhTW9kYWxOb2RlKTsKK30KKwogYm9vbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpoYXNUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUp
IGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKQEAgLTI3ODMsNiArMjgy
MCw5IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNET01IaWRkZW4oKSAKIAogQWNjZXNz
aWJpbGl0eU9iamVjdEluY2x1c2lvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZWZhdWx0T2JqZWN0
SW5jbHVzaW9uKCkgY29uc3QKIHsKKyAgICBpZiAoc2hvdWxkSWdub3JlV2hlbkFyaWFNb2RhbE9u
KCkpCisgICAgICAgIHJldHVybiBJZ25vcmVPYmplY3Q7CisgICAgCiAgICAgaWYgKGlzQVJJQUhp
ZGRlbigpKQogICAgICAgICByZXR1cm4gSWdub3JlT2JqZWN0OwogICAgIApJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHJl
dmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MzEsNiArNjMxLDkgQEAgcHVibGljOgog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcm9sZURlc2NyaXB0aW9uKCkgY29uc3Q7CiAgICAgQWNj
ZXNzaWJpbGl0eUFSSUFDdXJyZW50U3RhdGUgYXJpYUN1cnJlbnRTdGF0ZSgpIGNvbnN0OwogICAg
IAorICAgIGJvb2wgaXNBcmlhTW9kYWxEZXNjZW5kYW50KE5vZGUqKSBjb25zdDsKKyAgICBib29s
IHNob3VsZElnbm9yZVdoZW5BcmlhTW9kYWxPbigpIGNvbnN0OworICAgIAogICAgIGJvb2wgc3Vw
cG9ydHNBUklBU2V0U2l6ZSgpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNBUklBUG9zSW5TZXQo
KSBjb25zdDsKICAgICBpbnQgYXJpYVNldFNpemUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
MzcsNiArMzcsNyBAQCBhcmlhLWxhYmVsZWRieQogYXJpYS1sYWJlbGxlZGJ5CiBhcmlhLWxldmVs
CiBhcmlhLWxpdmUKK2FyaWEtbW9kYWwKIGFyaWEtbXVsdGlsaW5lCiBhcmlhLW11bHRpc2VsZWN0
YWJsZQogYXJpYS1vcmllbnRhdGlvbgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTg2KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUt
MTAtMzAgIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBBWDogQWRkIHN1
cHBvcnQgZm9yIEFSSUEgMS4xIGF0dHJpYnV0ZSAnYXJpYS1tb2RhbCcgZm9yIGRpYWxvZyBhbmQg
YWxlcnRkaWFsb2cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzODU2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLW11bHRpcGxlLWRpYWxvZ3MtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtbXVsdGlwbGUt
ZGlhbG9ncy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwu
aHRtbDogQWRkZWQuCisKIDIwMTUtMTAtMjYgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2Fs
dmFyaXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBbU3RyZWFtcyBBUEldIEltcGxlbWVudCBhYm9y
dCBtZXRob2Qgb24gd3JpdGFibGUgc3RyZWFtcwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9hcmlhLW1vZGFsLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIyIEBACitUaGlzIHRlc3RzIHRoYXQgYXJpYS1tb2RhbCBvbiBkaWFs
b2cgbWFrZXMgb3RoZXIgZWxlbWVudHMgaW5lcnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIGJhY2tncm91bmRBY2Nlc3NpYmxlKCkgaXMgZmFsc2UKK1BBU1MgYmFja2dy
b3VuZEFjY2Vzc2libGUoKSBpcyB0cnVlCitQQVNTIGJhY2tncm91bmRBY2Nlc3NpYmxlKCkgaXMg
ZmFsc2UKK1BBU1Mgb2tCdG4uaXNJZ25vcmVkIGlzIGZhbHNlCitQQVNTIGJhY2tncm91bmRBY2Nl
c3NpYmxlKCkgaXMgdHJ1ZQorUEFTUyBiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIGlzIHRydWUKK1BB
U1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyBmYWxzZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitPdGhlciBwYWdlIGNvbnRlbnQgd2l0aCBhIGR1
bW15IGZvY3VzYWJsZSBlbGVtZW50CisKK0Rpc3BsYXkgYSBkaWFsb2cKKworSnVzdCBhbiBleGFt
cGxlLgorCitPSyAgQ2FuY2VsCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEt
bW9kYWwtbXVsdGlwbGUtZGlhbG9ncy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLW11bHRpcGxlLWRpYWxvZ3MtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFs
LW11bHRpcGxlLWRpYWxvZ3MtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjAgQEAKK1RoaXMgdGVzdHMgdGhhdCBhcmlhLW1vZGFsIHdvcmtzIGNvcnJlY3RseSBvbiBtdWx0
aXBsZSBkaWFsb2dzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGJhY2tn
cm91bmRBY2Nlc3NpYmxlKCkgaXMgdHJ1ZQorUEFTUyBiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIGlz
IGZhbHNlCitQQVNTIGRpYWxvZzFBY2Nlc3NpYmxlKCkgaXMgdHJ1ZQorUEFTUyBiYWNrZ3JvdW5k
QWNjZXNzaWJsZSgpIGlzIGZhbHNlCitQQVNTIGRpYWxvZzFBY2Nlc3NpYmxlKCkgaXMgZmFsc2UK
K1BBU1MgY2xvc2VCdG4uaXNJZ25vcmVkIGlzIGZhbHNlCitQQVNTIGJhY2tncm91bmRBY2Nlc3Np
YmxlKCkgaXMgZmFsc2UKK1BBU1MgZGlhbG9nMUFjY2Vzc2libGUoKSBpcyB0cnVlCitQQVNTIGJh
Y2tncm91bmRBY2Nlc3NpYmxlKCkgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCitPdGhlciBwYWdlIGNvbnRlbnQgd2l0aCBhIGR1bW15IGZv
Y3VzYWJsZSBlbGVtZW50CisKK0Rpc3BsYXkgYSBkaWFsb2cKSW5kZXg6IExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvYXJpYS1tb2RhbC1tdWx0aXBsZS1kaWFsb2dzLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLW11bHRpcGxlLWRpYWxvZ3Mu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1tb2Rh
bC1tdWx0aXBsZS1kaWFsb2dzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorCis8c3R5bGU+CisuYm94LWhpZGRlbiB7CisJZGlzcGxheTogbm9uZTsKK30J
CQorPC9zdHlsZT4KKworPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2IGlkPSJiZyI+Cis8cCBpZD0i
YmdDb250ZW50Ij5PdGhlciBwYWdlIGNvbnRlbnQgd2l0aCA8YSBocmVmPSIjIj5hIGR1bW15IGZv
Y3VzYWJsZSBlbGVtZW50PC9hPjwvcD4KKzxwPjxhIG9uY2xpY2s9InRvZ2dsZURpYWxvZyhkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnYm94JyksJ3Nob3cnKTsgcmV0dXJuIGZhbHNlOyIgaHJlZj0i
IyIgcm9sZT0iYnV0dG9uIiBpZD0iZGlzcGxheUJ0biI+RGlzcGxheSBhIGRpYWxvZzwvYT48L3A+
Cis8L2Rpdj4KKworPGRpdiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0ibXlEaWFsb2ci
IGlkPSJib3giIGNsYXNzPSJib3gtaGlkZGVuIiB0YWJpbmRleD0iLTEiPgorCTxoMyBpZD0ibXlE
aWFsb2ciPkp1c3QgYW4gZXhhbXBsZS48L2gzPgorCTxidXR0b24gaWQ9Im9rIiBvbmNsaWNrPSJ0
b2dnbGVEaWFsb2coZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JveCcpLCdoaWRlJyk7IiBjbGFz
cz0iY2xvc2UtYnV0dG9uIj5PSzwvYnV0dG9uPgorCTxidXR0b24gb25jbGljaz0idG9nZ2xlRGlh
bG9nKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3gyJyksJ3Nob3cnKTsiIGlkPSJuZXciPk5l
dzwvYnV0dG9uPgkJCis8L2Rpdj4KKworPGRpdiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRi
eT0ibXlEaWFsb2cyIiBpZD0iYm94MiIgY2xhc3M9ImJveC1oaWRkZW4iIHRhYmluZGV4PSItMSI+
CisJPGgzIGlkPSJteURpYWxvZzIiPkFub3RoZXIgZGlhbG9nLjwvaDM+CisJPGJ1dHRvbiBpZD0i
Y2xvc2UiIG9uY2xpY2s9InRvZ2dsZURpYWxvZyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm94
MicpLCdoaWRlJyk7IiBjbGFzcz0iY2xvc2UtYnV0dG9uIj5DbG9zZTwvYnV0dG9uPgkKKzwvZGl2
PgorCisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGFyaWEt
bW9kYWwgd29ya3MgY29ycmVjdGx5IG9uIG11bHRpcGxlIGRpYWxvZ3MiKTsKKworICAgIGlmICh3
aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgLy8gQmFja2dyb3VuZCBz
aG91bGQgYmUgYWNjZXNzaWJsZSBhZnRlciBsb2FkaW5nLgorICAgICAgICBzaG91bGRCZVRydWUo
ImJhY2tncm91bmRBY2Nlc3NpYmxlKCkiKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsaWNrIHRo
ZSBkaXNwbGF5IGJ1dHRvbiwgZGlhbG9nMSBzaG93cyBhbmQgYmFja2dyb3VuZCBiZWNvbWVzIHVu
YWNjZXNzaWJsZS4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpc3BsYXlCdG4i
KS5jbGljaygpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJiYWNrZ3JvdW5kQWNjZXNzaWJsZSgp
Iik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiZGlhbG9nMUFjY2Vzc2libGUoKSIpOworICAgICAg
ICAKKyAgICAgICAgLy8gQ2xpY2sgdGhlIG5ldyBidXR0b24sIGRpYWxvZzIgc2hvd3MgYW5kIGJh
Y2tncm91bmQvZGlhbG9nMSBzaG91bGQgYm90aCBiZSB1bmFjY2Vzc2libGUuCisgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJuZXciKS5jbGljaygpOworICAgICAgICBzaG91bGRCZUZh
bHNlKCJiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoImRp
YWxvZzFBY2Nlc3NpYmxlKCkiKTsKKyAgICAgICAgdmFyIGNsb3NlQnRuID0gYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJjbG9zZSIpOworICAgICAgICBzaG91
bGRCZUZhbHNlKCJjbG9zZUJ0bi5pc0lnbm9yZWQiKTsKKyAgICAgICAgCisgICAgICAgIC8vIENs
b3NlIGRpYWxvZzIsIGRpYWxvZzEgc2hvdWxkIGJlY29tZSBhY2Nlc3NpYmxlIGJ1dCBub3QgdGhl
IGJhY2tncm91bmQKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsb3NlIikuY2xp
Y2soKTsKKyAgICAgICAgc2hvdWxkQmVGYWxzZSgiYmFja2dyb3VuZEFjY2Vzc2libGUoKSIpOwor
ICAgICAgICBzaG91bGRCZVRydWUoImRpYWxvZzFBY2Nlc3NpYmxlKCkiKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIENsb3NlIGRpYWxvZzEsIGJhY2tncm91bmQgc2hvdWxkIGJlIGFjY2Vzc2libGUu
CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvayIpLmNsaWNrKCk7CisgICAgICAg
IHNob3VsZEJlVHJ1ZSgiYmFja2dyb3VuZEFjY2Vzc2libGUoKSIpOworICAgIH0KKyAgICAKKyAg
ICBmdW5jdGlvbiBiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIHsKKyAgICAgICAgdmFyIGRpc3BsYXlC
dG4gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRpc3Bs
YXlCdG4iKTsKKyAgICAgICAgdmFyIGJnQ29udGVudCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmFjY2Vzc2libGVFbGVtZW50QnlJZCgiYmdDb250ZW50Iik7CisgICAgICAgIGlmICghZGlzcGxh
eUJ0biB8fCAhYmdDb250ZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gIWRpc3BsYXlCdG4uaXNJZ25vcmVkICYmICFiZ0NvbnRlbnQuaXNJZ25vcmVkOworICAg
IH0KKyAgICAKKyAgICBmdW5jdGlvbiBkaWFsb2cxQWNjZXNzaWJsZSgpIHsKKyAgICAgICAgIHZh
ciBva0J0biA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgi
b2siKTsKKyAgICAgICAgIHZhciBuZXdCdG4gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nl
c3NpYmxlRWxlbWVudEJ5SWQoIm5ldyIpOworICAgICAgICAgaWYgKCFva0J0biB8fCAhbmV3QnRu
KQorICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgIHJldHVybiAhb2tCdG4uaXNJ
Z25vcmVkICYmICFuZXdCdG4uaXNJZ25vcmVkOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiB0
b2dnbGVEaWFsb2coZGlhbG9nLCBzaCkgeworCWlmIChzaCA9PSAic2hvdyIpIHsKKwkJLy8gc2hv
dyB0aGUgZGlhbG9nIAorCQlkaWFsb2cuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CisJCWRpYWxv
Zy5zZXRBdHRyaWJ1dGUoImFyaWEtbW9kYWwiLCAidHJ1ZSIpOworCX0gZWxzZSB7CisJCWRpYWxv
Zy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworCQlkaWFsb2cuc2V0QXR0cmlidXRlKCJhcmlhLW1v
ZGFsIiwgImZhbHNlIik7IAorCX0KK30KKworPC9zY3JpcHQ+CisKKworPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvYXJpYS1tb2RhbC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvYXJpYS1tb2RhbC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9hcmlhLW1vZGFsLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorCis8Ym9keSBpZD0iYm9keSI+CisKKzxkaXYgaWQ9ImJnIj4KKzxwIGlkPSJiZ0Nv
bnRlbnQiPk90aGVyIHBhZ2UgY29udGVudCB3aXRoIDxhIGhyZWY9IiMiPmEgZHVtbXkgZm9jdXNh
YmxlIGVsZW1lbnQ8L2E+PC9wPgorPHA+PGEgb25jbGljaz0idG9nZ2xlRGlhbG9nKCdzaG93Jyk7
IHJldHVybiBmYWxzZTsiIGhyZWY9IiMiIHJvbGU9ImJ1dHRvbiIgaWQ9ImRpc3BsYXlCdG4iPkRp
c3BsYXkgYSBkaWFsb2c8L2E+PC9wPgorPC9kaXY+CisKKzxkaXYgcm9sZT0iZGlhbG9nIiBhcmlh
LW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9Im15RGlhbG9nIiBpZD0iYm94IiBjbGFzcz0i
Ym94LWhpZGRlbiIgdGFiaW5kZXg9Ii0xIj4KKwk8aDMgaWQ9Im15RGlhbG9nIj5KdXN0IGFuIGV4
YW1wbGUuPC9oMz4KKwk8YnV0dG9uIGlkPSJvayIgb25jbGljaz0idG9nZ2xlRGlhbG9nKCdoaWRl
Jyk7IiBjbGFzcz0iY2xvc2UtYnV0dG9uIj5PSzwvYnV0dG9uPgorCTxidXR0b24gb25jbGljaz0i
dG9nZ2xlRGlhbG9nKCdoaWRlJyk7IiBjbGFzcz0iY2xvc2UtYnV0dG9uIj5DYW5jZWw8L2J1dHRv
bj4JCQorPC9kaXY+CisKKworPHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3Rz
IHRoYXQgYXJpYS1tb2RhbCBvbiBkaWFsb2cgbWFrZXMgb3RoZXIgZWxlbWVudHMgaW5lcnQuIik7
CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAgIC8v
IEJhY2tncm91bmQgc2hvdWxkIGJlIHVuYWNjZXNzaWJsZSBhZnRlciBsb2FkaW5nLCBzaW5jZSB0
aGUgCisgICAgICAgIC8vIGRpYWxvZyBpcyBkaXNwbGF5ZWQgYW5kIGFyaWEtbW9kYWw9dHJ1ZS4K
KyAgICAgICAgc2hvdWxkQmVGYWxzZSgiYmFja2dyb3VuZEFjY2Vzc2libGUoKSIpOworICAgICAg
ICAKKyAgICAgICAgLy8gQ2xvc2UgdGhlIGRpYWxvZywgYmFja2dyb3VuZCBzaG91bGQgYmUgYWNj
ZXNzaWJsZS4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9rIikuY2xpY2soKTsK
KyAgICAgICAgc2hvdWxkQmVUcnVlKCJiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIik7CisgICAgICAg
IAorICAgICAgICAvLyBDbGljayB0aGUgZGlzcGxheSBidXR0b24sIGRpYWxvZyBzaG93cyBhbmQg
YmFja2dyb3VuZCBiZWNvbWVzIHVuYWNjZXNzaWJsZS4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImRpc3BsYXlCdG4iKS5jbGljaygpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJi
YWNrZ3JvdW5kQWNjZXNzaWJsZSgpIik7CisgICAgICAgIHZhciBva0J0biA9IGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgib2siKTsKKyAgICAgICAgc2hvdWxk
QmVGYWxzZSgib2tCdG4uaXNJZ25vcmVkIik7CisgICAgICAgIAorICAgICAgICAvLyBUZXN0IHRo
ZSBjYXNlIHRoYXQgYXJpYS1tb2RhbD10cnVlIHdoZW4gZGlhbG9nIGlzIGhpZGRlbiB3b24ndCBh
ZmZlY3Qgb3RoZXIgb2JqZWN0cy4KKyAgICAgICAgLy8gMS4gRGlhbG9nIG5vdCByZW5kZXJlZAor
ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib2siKS5jbGljaygpOworICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm94Iikuc2V0QXR0cmlidXRlKCJhcmlhLW1vZGFsIiwg
InRydWUiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIik7
CisgICAgICAgIC8vIDIuIERpYWxvZyBpcyBhcmlhIGhpZGRlbgorICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiZGlzcGxheUJ0biIpLmNsaWNrKCk7CisgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJib3giKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwgInRydWUiKTsK
KyAgICAgICAgc2hvdWxkQmVUcnVlKCJiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIik7CisgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3giKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVu
IiwgImZhbHNlIik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoImJhY2tncm91bmRBY2Nlc3NpYmxl
KCkiKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gYmFja2dyb3VuZEFjY2Vzc2libGUoKSB7
CisgICAgICAgIHZhciBkaXNwbGF5QnRuID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNz
aWJsZUVsZW1lbnRCeUlkKCJkaXNwbGF5QnRuIik7CisgICAgICAgIHZhciBiZ0NvbnRlbnQgPSBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImJnQ29udGVudCIp
OworICAgICAgICAKKyAgICAgICAgaWYgKCFkaXNwbGF5QnRuIHx8ICFiZ0NvbnRlbnQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gIWRpc3BsYXlC
dG4uaXNJZ25vcmVkICYmICFiZ0NvbnRlbnQuaXNJZ25vcmVkOworICAgIH0KKyAgICAKKyAgICBm
dW5jdGlvbiB0b2dnbGVEaWFsb2coc2gpIHsKKwkgICAgZGlhbG9nID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImJveCIpOworCWlmIChzaCA9PSAic2hvdyIpIHsKKwkJLy8gc2hvdyB0aGUgZGlh
bG9nIAorCQlkaWFsb2cuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CisJCWRpYWxvZy5zZXRBdHRy
aWJ1dGUoImFyaWEtbW9kYWwiLCAidHJ1ZSIpOworCX0gZWxzZSB7CisJCWRpYWxvZy5zdHlsZS5k
aXNwbGF5ID0gJ25vbmUnOworCQlkaWFsb2cuc2V0QXR0cmlidXRlKCJhcmlhLW1vZGFsIiwgImZh
bHNlIik7IAorCX0KK30KKworPC9zY3JpcHQ+CisKKworPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264466</attachid>
            <date>2015-10-30 23:53:40 -0700</date>
            <delta_ts>2015-10-31 00:06:11 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22676</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTgzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE1LTEwLTMwICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFkZCBzdXBwb3J0IGZvciBBUklB
IDEuMSBhdHRyaWJ1dGUgJ2FyaWEtbW9kYWwnIGZvciBkaWFsb2cgYW5kIGFsZXJ0ZGlhbG9nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg1NjYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBzdXBw
b3J0IGZvciBhcmlhLW1vZGFsIGF0dHJpYnV0ZSBvbiBkaWFsb2cvYWxlcnRkaWFsb2cgcm9sZXMu
CisgICAgICAgIFdoZW4gbW9kYWwgZGlhbG9nIGlzIGRpc3BsYXllZCwgYWxsIG90aGVyIGNvbnRl
bnRzIHdpbGwgYmUgdW5hY2Nlc3NpYmxlLgorCisgICAgICAgIFRlc3RzOiBhY2Nlc3NpYmlsaXR5
L2FyaWEtbW9kYWwtbXVsdGlwbGUtZGlhbG9ncy5odG1sCisgICAgICAgICAgICAgICBhY2Nlc3Np
YmlsaXR5L2FyaWEtbW9kYWwuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6ZmluZEFyaWFNb2RhbE5vZGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnVwZGF0ZUN1cnJlbnRBcmlhTW9kYWxOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmlzTm9kZVZpc2libGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YXJpYU1vZGFsTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpmb2N1c2VkSW1hZ2VNYXBVSUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhTW9kYWxDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bGFiZWxDaGFuZ2VkKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmhhbmRsZUFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhUm9sZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYU1vZGFsQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYUN1cnJlbnRTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FyaWFNb2RhbERlc2NlbmRhbnQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aWdub3JlZEZyb21BUklB
TW9kYWxQcmVzZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpo
YXNUYWdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRlZmF1
bHRPYmplY3RJbmNsdXNpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5oOgorICAgICAgICAqIGh0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluOgorCiAyMDE1
LTEwLTMwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBNb2Rl
cm4gSURCOiBTdXBwb3J0IElEQk9iamVjdFN0b3JlLmdldCgpIGZvciBJREJLZXlSYW5nZXMuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJ
KHJldmlzaW9uIDE5MTYxNykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsOSBAQCBBWE9iamVjdENh
Y2hlOjpBWE9iamVjdENhY2hlKERvY3VtZW50JiBkCiAgICAgLCBtX25vdGlmaWNhdGlvblBvc3RU
aW1lcigqdGhpcywgJkFYT2JqZWN0Q2FjaGU6Om5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKQog
ICAgICwgbV9wYXNzd29yZE5vdGlmaWNhdGlvblBvc3RUaW1lcigqdGhpcywgJkFYT2JqZWN0Q2Fj
aGU6OnBhc3N3b3JkTm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQpCiAgICAgLCBtX2xpdmVSZWdp
b25DaGFuZ2VkUG9zdFRpbWVyKCp0aGlzLCAmQVhPYmplY3RDYWNoZTo6bGl2ZVJlZ2lvbkNoYW5n
ZWROb3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCkKKyAgICAsIG1fY3VycmVudEFyaWFNb2RhbE5v
ZGUobnVsbHB0cikKIHsKKyAgICBmaW5kQXJpYU1vZGFsTm9kZXMoKTsKIH0KIAogQVhPYmplY3RD
YWNoZTo6fkFYT2JqZWN0Q2FjaGUoKQpAQCAtMTU3LDYgKzE1OSw5NCBAQCBBWE9iamVjdENhY2hl
Ojp+QVhPYmplY3RDYWNoZSgpCiAgICAgfQogfQogCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmZpbmRB
cmlhTW9kYWxOb2RlcygpCit7CisgICAgbV9jdXJyZW50QXJpYU1vZGFsTm9kZSA9IG51bGxwdHI7
CisgICAgCisgICAgLy8gVHJhdmVyc2UgdGhlIERPTSB0cmVlIHRvIGxvb2sgZm9yIHRoZSBhcmlh
LW1vZGFsPXRydWUgbm9kZXMuCisgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRy
YXZlcnNhbDo6Zmlyc3RXaXRoaW4oZG9jdW1lbnQoKS5yb290Tm9kZSgpKTsgZWxlbWVudDsgZWxl
bWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oKmVsZW1lbnQpKSB7
CisgICAgICAgIAorICAgICAgICAvLyBNdXN0IGhhdmUgZGlhbG9nIG9yIGFsZXJ0ZGlhbG9nIHJv
bGUKKyAgICAgICAgaWYgKCFub2RlSGFzUm9sZShlbGVtZW50LCAiZGlhbG9nIikgJiYgIW5vZGVI
YXNSb2xlKGVsZW1lbnQsICJhbGVydGRpYWxvZyIpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShh
cmlhX21vZGFsQXR0ciksICJ0cnVlIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
CisgICAgICAgIGlmICghbV9hcmlhTW9kYWxOb2Rlc1NldC5jb250YWlucyhlbGVtZW50KSkKKyAg
ICAgICAgICAgIG1fYXJpYU1vZGFsTm9kZXNTZXQuYWRkKGVsZW1lbnQpOworICAgIH0KKyAgICAK
KyAgICAvLyBTZXQgdGhlIGN1cnJlbnQgdmFsaWQgYXJpYS1tb2RhbCBub2RlIGlmIHBvc3NpYmxl
LgorICAgIHVwZGF0ZUN1cnJlbnRBcmlhTW9kYWxOb2RlKCk7Cit9CisKK3ZvaWQgQVhPYmplY3RD
YWNoZTo6dXBkYXRlQ3VycmVudEFyaWFNb2RhbE5vZGUoKQoreworICAgIC8vIFRoZXJlIG1pZ2h0
IGJlIG11bHRpcGxlIG5vZGVzIHdpdGggYXJpYS1tb2RhbD10cnVlIHNldC4KKyAgICAvLyBXZSB1
c2UgdGhpcyBmdW5jdGlvbiB0byBwaWNrIHRoZSBvbmUgd2Ugd2FudC4KKyAgICBtX2N1cnJlbnRB
cmlhTW9kYWxOb2RlID0gbnVsbHB0cjsKKyAgICBpZiAobV9hcmlhTW9kYWxOb2Rlc1NldC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQg
dGhlIG5vZGVzIHdoaWNoIGFyZSB2aXNpYmxlLgorICAgIExpc3RIYXNoU2V0PFJlZlB0cjxOb2Rl
Pj4gdmlzaWJsZU5vZGVzOworICAgIGZvciAoYXV0byYgb2JqZWN0IDogbV9hcmlhTW9kYWxOb2Rl
c1NldCkgeworICAgICAgICBpZiAoaXNOb2RlVmlzaWJsZShvYmplY3QuZ2V0KCkpKQorICAgICAg
ICAgICAgdmlzaWJsZU5vZGVzLmFkZChvYmplY3QuZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBp
ZiAodmlzaWJsZU5vZGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8v
IElmIGFueSBvZiB0aGUgbm9kZSBhcmUga2V5Ym9hcmQgZm9jdXNlZCwgd2Ugd2FudCB0byBwaWNr
IHRoYXQuCisgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50
KCk7CisgICAgZm9yIChhdXRvJiBvYmplY3QgOiB2aXNpYmxlTm9kZXMpIHsKKyAgICAgICAgaWYg
KGZvY3VzZWROb2RlICE9IG51bGxwdHIgJiYgZm9jdXNlZE5vZGUtPmlzRGVzY2VuZGFudE9mKG9i
amVjdC5nZXQoKSkpIHsKKyAgICAgICAgICAgIG1fY3VycmVudEFyaWFNb2RhbE5vZGUgPSBvYmpl
Y3QuZ2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAvLyBJZiBub25lIG9mIHRoZSBub2RlcyBhcmUgZm9jdXNlZCwgd2Ugd2FudCB0byBwaWNrIHRo
ZSBsYXN0IGRpYWxvZyBpbiB0aGUgRE9NLgorICAgIGlmICghbV9jdXJyZW50QXJpYU1vZGFsTm9k
ZSkKKyAgICAgICAgbV9jdXJyZW50QXJpYU1vZGFsTm9kZSA9IHZpc2libGVOb2Rlcy5sYXN0KCku
Z2V0KCk7Cit9CisKK2Jvb2wgQVhPYmplY3RDYWNoZTo6aXNOb2RlVmlzaWJsZShOb2RlKiBub2Rl
KSBjb25zdAoreworICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+
cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgaWYg
KHN0eWxlLmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxzbyBuZWVkIHRvIGNv
bnNpZGVyIGFyaWEgaGlkZGVuIHN0YXR1cy4KKyAgICBpZiAoIWlzTm9kZUFyaWFWaXNpYmxlKG5v
ZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K05vZGUqIEFYT2JqZWN0Q2FjaGU6OmFyaWFNb2RhbE5vZGUoKQoreworICAgIC8vIFRoaXMgZnVu
Y3Rpb24gcmV0dXJucyB0aGUgdmFsaWQgYXJpYSBtb2RhbCBub2RlLgorICAgIGlmIChtX2FyaWFN
b2RhbE5vZGVzU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisg
ICAgLy8gQ2hlY2sgdGhlIGN1cnJlbnQgdmFsaWQgYXJpYSBtb2RhbCBub2RlIGZpcnN0LgorICAg
IC8vIFVzdWFsbHkgd2hlbiBvbmUgZGlhbG9nIHNldHMgYXJpYS1tb2RhbD10cnVlLCB0aGF0IGRp
YWxvZyBpcyB0aGUgb25lIHdlIHdhbnQuCisgICAgaWYgKGlzTm9kZVZpc2libGUobV9jdXJyZW50
QXJpYU1vZGFsTm9kZSkpCisgICAgICAgIHJldHVybiBtX2N1cnJlbnRBcmlhTW9kYWxOb2RlOwor
ICAgIAorICAgIC8vIFJlY29tcHV0ZSB0aGUgdmFsaWQgYXJpYSBtb2RhbCBub2RlIHdoZW4gbV9j
dXJyZW50QXJpYU1vZGFsTm9kZSBpcyBudWxsIG9yIGhpZGRlbi4KKyAgICB1cGRhdGVDdXJyZW50
QXJpYU1vZGFsTm9kZSgpOworICAgIHJldHVybiBpc05vZGVWaXNpYmxlKG1fY3VycmVudEFyaWFN
b2RhbE5vZGUpID8gbV9jdXJyZW50QXJpYU1vZGFsTm9kZSA6IG51bGxwdHI7Cit9CisKIEFjY2Vz
c2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRJbWFnZU1hcFVJRWxlbWVudChI
VE1MQXJlYUVsZW1lbnQqIGFyZWFFbGVtZW50KQogewogICAgIC8vIEZpbmQgdGhlIGNvcnJlc3Bv
bmRpbmcgYWNjZXNzaWJpbGl0eSBvYmplY3QgZm9yIHRoZSBIVE1MQXJlYUVsZW1lbnQuIFRoaXMg
c2hvdWxkIGJlCkBAIC0xMjQ4LDEwICsxMzM4LDM1IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFu
ZGxlQXR0cmlidXRlQ2hhbmcKICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkKGVsZW1lbnQtPnBhcmVu
dE5vZGUoKSwgZWxlbWVudCk7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJpYV9pbnZhbGlk
QXR0cikKICAgICAgICAgcG9zdE5vdGlmaWNhdGlvbihlbGVtZW50LCBBWE9iamVjdENhY2hlOjpB
WEludmFsaWRTdGF0dXNDaGFuZ2VkKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBhcmlhX21v
ZGFsQXR0cikKKyAgICAgICAgaGFuZGxlQXJpYU1vZGFsQ2hhbmdlKGVsZW1lbnQpOwogICAgIGVs
c2UKICAgICAgICAgcG9zdE5vdGlmaWNhdGlvbihlbGVtZW50LCBBWE9iamVjdENhY2hlOjpBWEFy
aWFBdHRyaWJ1dGVDaGFuZ2VkKTsKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlh
TW9kYWxDaGFuZ2UoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+
KG5vZGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFub2RlSGFzUm9sZShub2Rl
LCAiZGlhbG9nIikgJiYgIW5vZGVIYXNSb2xlKG5vZGUsICJhbGVydGRpYWxvZyIpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMo
KTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmZh
c3RHZXRBdHRyaWJ1dGUoYXJpYV9tb2RhbEF0dHIpLCAidHJ1ZSIpKSB7CisgICAgICAgIC8vIEFk
ZCB0aGUgbmV3bHkgbW9kaWZpZWQgbm9kZSB0byB0aGUgbW9kYWwgbm9kZXMgc2V0LCBhbmQgc2V0
IGl0IHRvIGJlIHRoZSBjdXJyZW50IHZhbGlkIGFyaWEgbW9kYWwgbm9kZS4KKyAgICAgICAgLy8g
V2Ugd2lsbCByZWNvbXB1dGUgdGhlIGN1cnJlbnQgdmFsaWQgYXJpYSBtb2RhbCBub2RlIGluIGFy
aWFNb2RhbE5vZGUoKSB3aGVuIHRoaXMgbm9kZSBpcyBub3QgdmlzaWJsZS4KKyAgICAgICAgaWYg
KCFtX2FyaWFNb2RhbE5vZGVzU2V0LmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgbV9hcmlh
TW9kYWxOb2Rlc1NldC5hZGQobm9kZSk7CisgICAgICAgIG1fY3VycmVudEFyaWFNb2RhbE5vZGUg
PSBub2RlOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFJlbW92ZSB0aGUgbm9kZSBmcm9tIHRo
ZSBtb2RhbCBub2RlcyBzZXQuIFRoZXJlIG1pZ2h0IGJlIG90aGVyIHZpc2libGUgbW9kYWwgbm9k
ZXMsIHNvIHdlIHJlY29tcHV0ZSBoZXJlLgorICAgICAgICBpZiAobV9hcmlhTW9kYWxOb2Rlc1Nl
dC5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgIG1fYXJpYU1vZGFsTm9kZXNTZXQucmVtb3Zl
KG5vZGUpOworICAgICAgICB1cGRhdGVDdXJyZW50QXJpYU1vZGFsTm9kZSgpOworICAgIH0KK30K
Kwogdm9pZCBBWE9iamVjdENhY2hlOjpsYWJlbENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKIHsK
ICAgICBBU1NFUlQoaXM8SFRNTExhYmVsRWxlbWVudD4oKmVsZW1lbnQpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCShyZXZpc2lvbiAxOTE2
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZVNj
cm9sbGVkVG9BbmNob3IoY29uc3QgTm9kZSogYW5jaG9yTm9kZSk7CiAgICAgdm9pZCBoYW5kbGVB
cmlhRXhwYW5kZWRDaGFuZ2UoTm9kZSopOwogICAgIHZvaWQgaGFuZGxlU2Nyb2xsYmFyVXBkYXRl
KFNjcm9sbFZpZXcqKTsKKyAgICAKKyAgICB2b2lkIGhhbmRsZUFyaWFNb2RhbENoYW5nZShOb2Rl
Kik7CisgICAgTm9kZSogYXJpYU1vZGFsTm9kZSgpOwogCiAgICAgdm9pZCBoYW5kbGVBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBFbGVtZW50Kik7CiAgICAg
dm9pZCByZWNvbXB1dGVJc0lnbm9yZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcik7CkBAIC0yNzEs
NiArMjc0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVNZW51T3BlbmVkKE5vZGUqKTsK
ICAgICB2b2lkIGhhbmRsZUxpdmVSZWdpb25DcmVhdGVkKE5vZGUqKTsKICAgICB2b2lkIGhhbmRs
ZU1lbnVJdGVtU2VsZWN0ZWQoTm9kZSopOworICAgIAorICAgIC8vIGFyaWEtbW9kYWwgcmVsYXRl
ZAorICAgIHZvaWQgZmluZEFyaWFNb2RhbE5vZGVzKCk7CisgICAgdm9pZCB1cGRhdGVDdXJyZW50
QXJpYU1vZGFsTm9kZSgpOworICAgIGJvb2wgaXNOb2RlVmlzaWJsZShOb2RlKikgY29uc3Q7CiAK
ICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nl
c3NpYmlsaXR5T2JqZWN0Pj4gbV9vYmplY3RzOwpAQCAtMjkzLDYgKzMwMSw5IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgVGltZXIgbV9saXZlUmVnaW9uQ2hhbmdlZFBvc3RUaW1lcjsKICAgICBMaXN0
SGFzaFNldDxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4+IG1fbGl2ZVJlZ2lvbk9iamVjdHNT
ZXQ7CisgICAgCisgICAgTm9kZSogbV9jdXJyZW50QXJpYU1vZGFsTm9kZTsKKyAgICBMaXN0SGFz
aFNldDxSZWZQdHI8Tm9kZT4+IG1fYXJpYU1vZGFsTm9kZXNTZXQ7CiAKICAgICBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCBtX3RleHRTZWxlY3Rpb25JbnRlbnQ7CiAgICAgYm9vbCBtX2lzU3luY2hy
b25pemluZ1NlbGVjdGlvbiB7IGZhbHNlIH07CkBAIC0zNDgsNiArMzU5LDcgQEAgaW5saW5lIHZv
aWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNo
ZTo6aGFuZGxlQWN0aXZlRGVzY2VuZGFudENoYW5nZWQoTm9kZSopIHsgfQogaW5saW5lIHZvaWQg
QVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKE5vZGUqKSB7IH0KIGlubGlu
ZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFyaWFSb2xlQ2hhbmdlZChOb2RlKikgeyB9Citp
bmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhTW9kYWxDaGFuZ2UoTm9kZSopIHsg
fQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5n
ZWQoTm9kZSosIE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNj
cm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hl
OjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBFbGVtZW50Kikg
eyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDE5MTYxNykKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKICNpbmNsdWRlICJE
T01Ub2tlbkxpc3QuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRl
cmF0b3IuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKQEAgLTE4NDYsNiArMTg0Nyw0NSBAQCBB
Y2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRTdGF0ZSBBY2Nlc3NpYmlsCiAgICAgcmV0dXJuIEFSSUFD
dXJyZW50VHJ1ZTsKIH0KIAorYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FyaWFNb2RhbERl
c2NlbmRhbnQoTm9kZSogYXJpYU1vZGFsTm9kZSkgY29uc3QKK3sKKyAgICBpZiAoIWFyaWFNb2Rh
bE5vZGUgfHwgIXRoaXMtPmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmICh0aGlzLT5lbGVtZW50KCkgPT0gYXJpYU1vZGFsTm9kZSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgCisgICAgLy8gQVJJQSAxLjEgYXJpYS1tb2RhbCwgaW5kaWNhdGVzIHdoZXRo
ZXIgYW4gZWxlbWVudCBpcyBtb2RhbCB3aGVuIGRpc3BsYXllZC4KKyAgICAvLyBGb3IgdGhlIGRl
Y2VuZGFudHMgb2YgdGhlIG1vZGFsIG9iamVjdCwgdGhleSBzaG91bGQgYWxzbyBiZSBjb25zaWRl
cmVkIGFzIGFyaWEtbW9kYWw9dHJ1ZS4KKyAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDogZWxlbWVu
dEFuY2VzdG9ycyh0aGlzLT5lbGVtZW50KCkpKSB7CisgICAgICAgIGlmICgmYW5jZXN0b3IgPT0g
YXJpYU1vZGFsTm9kZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aWdub3JlZEZyb21BUklB
TW9kYWxQcmVzZW5jZSgpIGNvbnN0Cit7CisgICAgLy8gV2Ugc2hvdWxkbid0IGlnbm9yZSB0aGUg
dG9wIG5vZGUuCisgICAgaWYgKCFub2RlKCkgfHwgIW5vZGUoKS0+cGFyZW50Tm9kZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBheE9i
amVjdENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIC8vIGFyaWFNb2RhbE5vZGUgaXMgdGhlIGN1cnJlbnQgZGlzcGxheWVkIG1vZGFsIGRp
YWxvZy4KKyAgICBOb2RlKiBhcmlhTW9kYWxOb2RlID0gY2FjaGUtPmFyaWFNb2RhbE5vZGUoKTsK
KyAgICBpZiAoIWFyaWFNb2RhbE5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICAvLyBXZSBvbmx5IHdhbnQgdG8gaWdub3JlIHRoZSBvYmplY3RzIHdpdGhpbiB0aGUgc2FtZSBm
cmFtZSBhcyB0aGUgbW9kYWwgZGlhbG9nLgorICAgIGlmIChhcmlhTW9kYWxOb2RlLT5kb2N1bWVu
dCgpLmZyYW1lKCkgIT0gdGhpcy0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiAhaXNBcmlhTW9kYWxEZXNjZW5kYW50KGFyaWFNb2RhbE5vZGUpOworfQor
CiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwpAQCAt
Mjc4Niw2ICsyODI2LDkgQEAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBBY2Nlc3NpYmls
aQogICAgIGlmIChpc0FSSUFIaWRkZW4oKSkKICAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsK
ICAgICAKKyAgICBpZiAoaWdub3JlZEZyb21BUklBTW9kYWxQcmVzZW5jZSgpKQorICAgICAgICBy
ZXR1cm4gSWdub3JlT2JqZWN0OworICAgIAogICAgIGlmIChpc1ByZXNlbnRhdGlvbmFsQ2hpbGRP
ZkFyaWFSb2xlKCkpCiAgICAgICAgIHJldHVybiBJZ25vcmVPYmplY3Q7CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aAkocmV2aXNpb24gMTkxNjE3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzMSw2ICs2MzEsOSBAQCBwdWJs
aWM6CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiByb2xlRGVzY3JpcHRpb24oKSBjb25zdDsKICAg
ICBBY2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRTdGF0ZSBhcmlhQ3VycmVudFN0YXRlKCkgY29uc3Q7
CiAgICAgCisgICAgYm9vbCBpc0FyaWFNb2RhbERlc2NlbmRhbnQoTm9kZSopIGNvbnN0OworICAg
IGJvb2wgaWdub3JlZEZyb21BUklBTW9kYWxQcmVzZW5jZSgpIGNvbnN0OworICAgIAogICAgIGJv
b2wgc3VwcG9ydHNBUklBU2V0U2l6ZSgpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNBUklBUG9z
SW5TZXQoKSBjb25zdDsKICAgICBpbnQgYXJpYVNldFNpemUoKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAxOTE2MTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQCBhcmlhLWxhYmVsZWRieQogYXJpYS1sYWJlbGxlZGJ5CiBhcmlh
LWxldmVsCiBhcmlhLWxpdmUKK2FyaWEtbW9kYWwKIGFyaWEtbXVsdGlsaW5lCiBhcmlhLW11bHRp
c2VsZWN0YWJsZQogYXJpYS1vcmllbnRhdGlvbgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNjE3KQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTUtMTAtMzAgIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBBWDog
QWRkIHN1cHBvcnQgZm9yIEFSSUEgMS4xIGF0dHJpYnV0ZSAnYXJpYS1tb2RhbCcgZm9yIGRpYWxv
ZyBhbmQgYWxlcnRkaWFsb2cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzODU2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLW11bHRpcGxlLWRpYWxvZ3MtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtbXVs
dGlwbGUtZGlhbG9ncy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEt
bW9kYWwuaHRtbDogQWRkZWQuCisKIDIwMTUtMTAtMjYgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRh
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZpbmcgZHVwbGljYXRlZCB0ZXN0IGV4cGVjdGF0
aW9ucyBhbmQgcmVtb3ZpbmcgZGVidWcgZmxhZyBmcm9tIGZsYWt5IGZhc3QvY2FudmFzL3dlYmds
IHRlc3RzCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1tb2Rh
bC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L2FyaWEtbW9kYWwtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAK
K1RoaXMgdGVzdHMgdGhhdCBhcmlhLW1vZGFsIG9uIGRpYWxvZyBtYWtlcyBvdGhlciBlbGVtZW50
cyBpbmVydC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYmFja2dyb3Vu
ZEFjY2Vzc2libGUoKSBpcyBmYWxzZQorUEFTUyBiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIGlzIHRy
dWUKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyBmYWxzZQorUEFTUyBva0J0bi5pc0ln
bm9yZWQgaXMgZmFsc2UKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyB0cnVlCitQQVNT
IGJhY2tncm91bmRBY2Nlc3NpYmxlKCkgaXMgdHJ1ZQorUEFTUyBiYWNrZ3JvdW5kQWNjZXNzaWJs
ZSgpIGlzIGZhbHNlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKK090aGVyIHBhZ2UgY29udGVudCB3aXRoIGEgZHVtbXkgZm9jdXNhYmxlIGVsZW1lbnQK
KworRGlzcGxheSBhIGRpYWxvZworCitKdXN0IGFuIGV4YW1wbGUuCisKK09LICBDYW5jZWwKSW5k
ZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1tb2RhbC1tdWx0aXBsZS1kaWFsb2dz
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2Fy
aWEtbW9kYWwtbXVsdGlwbGUtZGlhbG9ncy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtbXVsdGlwbGUtZGlhbG9ncy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAorVGhpcyB0ZXN0cyB0aGF0
IGFyaWEtbW9kYWwgd29ya3MgY29ycmVjdGx5IG9uIG11bHRpcGxlIGRpYWxvZ3MKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyB0
cnVlCitQQVNTIGJhY2tncm91bmRBY2Nlc3NpYmxlKCkgaXMgZmFsc2UKK1BBU1MgZGlhbG9nMUFj
Y2Vzc2libGUoKSBpcyB0cnVlCitQQVNTIGJhY2tncm91bmRBY2Nlc3NpYmxlKCkgaXMgZmFsc2UK
K1BBU1MgZGlhbG9nMUFjY2Vzc2libGUoKSBpcyBmYWxzZQorUEFTUyBjbG9zZUJ0bi5pc0lnbm9y
ZWQgaXMgZmFsc2UKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyBmYWxzZQorUEFTUyBk
aWFsb2cxQWNjZXNzaWJsZSgpIGlzIHRydWUKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBp
cyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
K090aGVyIHBhZ2UgY29udGVudCB3aXRoIGEgZHVtbXkgZm9jdXNhYmxlIGVsZW1lbnQKKworRGlz
cGxheSBhIGRpYWxvZwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFs
LW11bHRpcGxlLWRpYWxvZ3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L2FyaWEtbW9kYWwtbXVsdGlwbGUtZGlhbG9ncy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLW11bHRpcGxlLWRpYWxvZ3MuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxzdHlsZT4K
Ky5ib3gtaGlkZGVuIHsKKyAgICBkaXNwbGF5OiBub25lOworfQkJCis8L3N0eWxlPgorCis8Ym9k
eSBpZD0iYm9keSI+CisKKzxkaXYgaWQ9ImJnIj4KKzxwIGlkPSJiZ0NvbnRlbnQiPk90aGVyIHBh
Z2UgY29udGVudCB3aXRoIDxhIGhyZWY9IiMiPmEgZHVtbXkgZm9jdXNhYmxlIGVsZW1lbnQ8L2E+
PC9wPgorPHA+PGEgb25jbGljaz0idG9nZ2xlRGlhbG9nKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdib3gnKSwnc2hvdycpOyByZXR1cm4gZmFsc2U7IiBocmVmPSIjIiByb2xlPSJidXR0b24iIGlk
PSJkaXNwbGF5QnRuIj5EaXNwbGF5IGEgZGlhbG9nPC9hPjwvcD4KKzwvZGl2PgorCis8ZGl2IHJv
bGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJteURpYWxvZyIgaWQ9ImJveCIgY2xhc3M9ImJv
eC1oaWRkZW4iIHRhYmluZGV4PSItMSI+CisgICAgPGgzIGlkPSJteURpYWxvZyI+SnVzdCBhbiBl
eGFtcGxlLjwvaDM+CisgICAgPGJ1dHRvbiBpZD0ib2siIG9uY2xpY2s9InRvZ2dsZURpYWxvZyhk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm94JyksJ2hpZGUnKTsiIGNsYXNzPSJjbG9zZS1idXR0
b24iPk9LPC9idXR0b24+CisgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0b2dnbGVEaWFsb2coZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2JveDInKSwnc2hvdycpOyIgaWQ9Im5ldyI+TmV3PC9idXR0b24+
CQkKKzwvZGl2PgorCis8ZGl2IHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJteURpYWxv
ZzIiIGlkPSJib3gyIiBjbGFzcz0iYm94LWhpZGRlbiIgdGFiaW5kZXg9Ii0xIj4KKyAgICA8aDMg
aWQ9Im15RGlhbG9nMiI+QW5vdGhlciBkaWFsb2cuPC9oMz4KKyAgICA8YnV0dG9uIGlkPSJjbG9z
ZSIgb25jbGljaz0idG9nZ2xlRGlhbG9nKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3gyJyks
J2hpZGUnKTsiIGNsYXNzPSJjbG9zZS1idXR0b24iPkNsb3NlPC9idXR0b24+CQorPC9kaXY+CisK
KworPHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgYXJpYS1tb2Rh
bCB3b3JrcyBjb3JyZWN0bHkgb24gbXVsdGlwbGUgZGlhbG9ncyIpOworCisgICAgaWYgKHdpbmRv
dy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICAvLyBCYWNrZ3JvdW5kIHNob3Vs
ZCBiZSBhY2Nlc3NpYmxlIGFmdGVyIGxvYWRpbmcuCisgICAgICAgIHNob3VsZEJlVHJ1ZSgiYmFj
a2dyb3VuZEFjY2Vzc2libGUoKSIpOworICAgICAgICAKKyAgICAgICAgLy8gQ2xpY2sgdGhlIGRp
c3BsYXkgYnV0dG9uLCBkaWFsb2cxIHNob3dzIGFuZCBiYWNrZ3JvdW5kIGJlY29tZXMgdW5hY2Nl
c3NpYmxlLgorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGlzcGxheUJ0biIpLmNs
aWNrKCk7CisgICAgICAgIHNob3VsZEJlRmFsc2UoImJhY2tncm91bmRBY2Nlc3NpYmxlKCkiKTsK
KyAgICAgICAgc2hvdWxkQmVUcnVlKCJkaWFsb2cxQWNjZXNzaWJsZSgpIik7CisgICAgICAgIAor
ICAgICAgICAvLyBDbGljayB0aGUgbmV3IGJ1dHRvbiwgZGlhbG9nMiBzaG93cyBhbmQgYmFja2dy
b3VuZC9kaWFsb2cxIHNob3VsZCBib3RoIGJlIHVuYWNjZXNzaWJsZS4KKyAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoIm5ldyIpLmNsaWNrKCk7CisgICAgICAgIHNob3VsZEJlRmFsc2Uo
ImJhY2tncm91bmRBY2Nlc3NpYmxlKCkiKTsKKyAgICAgICAgc2hvdWxkQmVGYWxzZSgiZGlhbG9n
MUFjY2Vzc2libGUoKSIpOworICAgICAgICB2YXIgY2xvc2VCdG4gPSBhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImNsb3NlIik7CisgICAgICAgIHNob3VsZEJl
RmFsc2UoImNsb3NlQnRuLmlzSWdub3JlZCIpOworICAgICAgICAKKyAgICAgICAgLy8gQ2xvc2Ug
ZGlhbG9nMiwgZGlhbG9nMSBzaG91bGQgYmVjb21lIGFjY2Vzc2libGUgYnV0IG5vdCB0aGUgYmFj
a2dyb3VuZAorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xvc2UiKS5jbGljaygp
OworICAgICAgICBzaG91bGRCZUZhbHNlKCJiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIik7CisgICAg
ICAgIHNob3VsZEJlVHJ1ZSgiZGlhbG9nMUFjY2Vzc2libGUoKSIpOworICAgICAgICAKKyAgICAg
ICAgLy8gQ2xvc2UgZGlhbG9nMSwgYmFja2dyb3VuZCBzaG91bGQgYmUgYWNjZXNzaWJsZS4KKyAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9rIikuY2xpY2soKTsKKyAgICAgICAgc2hv
dWxkQmVUcnVlKCJiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIik7CisgICAgfQorICAgIAorICAgIGZ1
bmN0aW9uIGJhY2tncm91bmRBY2Nlc3NpYmxlKCkgeworICAgICAgICB2YXIgZGlzcGxheUJ0biA9
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZGlzcGxheUJ0
biIpOworICAgICAgICB2YXIgYmdDb250ZW50ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKCJiZ0NvbnRlbnQiKTsKKyAgICAgICAgaWYgKCFkaXNwbGF5QnRu
IHx8ICFiZ0NvbnRlbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biAhZGlzcGxheUJ0bi5pc0lnbm9yZWQgJiYgIWJnQ29udGVudC5pc0lnbm9yZWQ7CisgICAgfQor
ICAgIAorICAgIGZ1bmN0aW9uIGRpYWxvZzFBY2Nlc3NpYmxlKCkgeworICAgICAgICAgdmFyIG9r
QnRuID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJvayIp
OworICAgICAgICAgdmFyIG5ld0J0biA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2li
bGVFbGVtZW50QnlJZCgibmV3Iik7CisgICAgICAgICBpZiAoIW9rQnRuIHx8ICFuZXdCdG4pCisg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgcmV0dXJuICFva0J0bi5pc0lnbm9y
ZWQgJiYgIW5ld0J0bi5pc0lnbm9yZWQ7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRvZ2ds
ZURpYWxvZyhkaWFsb2csIHNoKSB7CisgICAgaWYgKHNoID09ICJzaG93IikgeworICAgICAgICAv
LyBzaG93IHRoZSBkaWFsb2cgCisgICAgICAgIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2Nr
JzsKKyAgICAgICAgZGlhbG9nLnNldEF0dHJpYnV0ZSgiYXJpYS1tb2RhbCIsICJ0cnVlIik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZGlhbG9nLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAg
ICAgIGRpYWxvZy5zZXRBdHRyaWJ1dGUoImFyaWEtbW9kYWwiLCAiZmFsc2UiKTsgCisgICAgfQor
fQorCis8L3NjcmlwdD4KKworCis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IGlkPSJi
b2R5Ij4KKworPGRpdiBpZD0iYmciPgorPHAgaWQ9ImJnQ29udGVudCI+T3RoZXIgcGFnZSBjb250
ZW50IHdpdGggPGEgaHJlZj0iIyI+YSBkdW1teSBmb2N1c2FibGUgZWxlbWVudDwvYT48L3A+Cis8
cD48YSBvbmNsaWNrPSJ0b2dnbGVEaWFsb2coJ3Nob3cnKTsgcmV0dXJuIGZhbHNlOyIgaHJlZj0i
IyIgcm9sZT0iYnV0dG9uIiBpZD0iZGlzcGxheUJ0biI+RGlzcGxheSBhIGRpYWxvZzwvYT48L3A+
Cis8L2Rpdj4KKworPGRpdiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiIGFyaWEtbGFi
ZWxsZWRieT0ibXlEaWFsb2ciIGlkPSJib3giIGNsYXNzPSJib3gtaGlkZGVuIiB0YWJpbmRleD0i
LTEiPgorICAgIDxoMyBpZD0ibXlEaWFsb2ciPkp1c3QgYW4gZXhhbXBsZS48L2gzPgorICAgIDxi
dXR0b24gaWQ9Im9rIiBvbmNsaWNrPSJ0b2dnbGVEaWFsb2coJ2hpZGUnKTsiIGNsYXNzPSJjbG9z
ZS1idXR0b24iPk9LPC9idXR0b24+CisgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0b2dnbGVEaWFsb2co
J2hpZGUnKTsiIGNsYXNzPSJjbG9zZS1idXR0b24iPkNhbmNlbDwvYnV0dG9uPgkJCis8L2Rpdj4K
KworCis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCBhcmlhLW1v
ZGFsIG9uIGRpYWxvZyBtYWtlcyBvdGhlciBlbGVtZW50cyBpbmVydC4iKTsKKworICAgIGlmICh3
aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgLy8gQmFja2dyb3VuZCBz
aG91bGQgYmUgdW5hY2Nlc3NpYmxlIGFmdGVyIGxvYWRpbmcsIHNpbmNlIHRoZSAKKyAgICAgICAg
Ly8gZGlhbG9nIGlzIGRpc3BsYXllZCBhbmQgYXJpYS1tb2RhbD10cnVlLgorICAgICAgICBzaG91
bGRCZUZhbHNlKCJiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIik7CisgICAgICAgIAorICAgICAgICAv
LyBDbG9zZSB0aGUgZGlhbG9nLCBiYWNrZ3JvdW5kIHNob3VsZCBiZSBhY2Nlc3NpYmxlLgorICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib2siKS5jbGljaygpOworICAgICAgICBzaG91
bGRCZVRydWUoImJhY2tncm91bmRBY2Nlc3NpYmxlKCkiKTsKKyAgICAgICAgCisgICAgICAgIC8v
IENsaWNrIHRoZSBkaXNwbGF5IGJ1dHRvbiwgZGlhbG9nIHNob3dzIGFuZCBiYWNrZ3JvdW5kIGJl
Y29tZXMgdW5hY2Nlc3NpYmxlLgorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGlz
cGxheUJ0biIpLmNsaWNrKCk7CisgICAgICAgIHNob3VsZEJlRmFsc2UoImJhY2tncm91bmRBY2Nl
c3NpYmxlKCkiKTsKKyAgICAgICAgdmFyIG9rQnRuID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJvayIpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJva0J0
bi5pc0lnbm9yZWQiKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRlc3QgdGhlIGNhc2UgdGhhdCBh
cmlhLW1vZGFsPXRydWUgd2hlbiBkaWFsb2cgaXMgaGlkZGVuIHdvbid0IGFmZmVjdCBvdGhlciBv
YmplY3RzLgorICAgICAgICAvLyAxLiBEaWFsb2cgbm90IHJlbmRlcmVkCisgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJvayIpLmNsaWNrKCk7CisgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJib3giKS5zZXRBdHRyaWJ1dGUoImFyaWEtbW9kYWwiLCAidHJ1ZSIpOworICAg
ICAgICBzaG91bGRCZVRydWUoImJhY2tncm91bmRBY2Nlc3NpYmxlKCkiKTsKKyAgICAgICAgLy8g
Mi4gRGlhbG9nIGlzIGFyaWEgaGlkZGVuCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJkaXNwbGF5QnRuIikuY2xpY2soKTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImJveCIpLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCAidHJ1ZSIpOworICAgICAgICBzaG91
bGRCZVRydWUoImJhY2tncm91bmRBY2Nlc3NpYmxlKCkiKTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImJveCIpLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCAiZmFsc2UiKTsK
KyAgICAgICAgc2hvdWxkQmVGYWxzZSgiYmFja2dyb3VuZEFjY2Vzc2libGUoKSIpOworICAgIH0K
KyAgICAKKyAgICBmdW5jdGlvbiBiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIHsKKyAgICAgICAgdmFy
IGRpc3BsYXlCdG4gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5
SWQoImRpc3BsYXlCdG4iKTsKKyAgICAgICAgdmFyIGJnQ29udGVudCA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiYmdDb250ZW50Iik7CisgICAgICAgIAor
ICAgICAgICBpZiAoIWRpc3BsYXlCdG4gfHwgIWJnQ29udGVudCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiAhZGlzcGxheUJ0bi5pc0lnbm9yZWQg
JiYgIWJnQ29udGVudC5pc0lnbm9yZWQ7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRvZ2ds
ZURpYWxvZyhzaCkgeworICAgICAgICBkaWFsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Ym94Iik7CisgICAgaWYgKHNoID09ICJzaG93IikgeworICAgICAgICAvLyBzaG93IHRoZSBkaWFs
b2cgCisgICAgICAgIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgICAgICAgZGlh
bG9nLnNldEF0dHJpYnV0ZSgiYXJpYS1tb2RhbCIsICJ0cnVlIik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZGlhbG9nLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIGRpYWxvZy5zZXRB
dHRyaWJ1dGUoImFyaWEtbW9kYWwiLCAiZmFsc2UiKTsgCisgICAgfQorfQorCis8L3NjcmlwdD4K
KworCis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264467</attachid>
            <date>2015-10-31 00:06:11 -0700</date>
            <delta_ts>2015-11-02 12:27:46 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22669</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTgzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE1LTEwLTMxICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFkZCBzdXBwb3J0IGZvciBBUklB
IDEuMSBhdHRyaWJ1dGUgJ2FyaWEtbW9kYWwnIGZvciBkaWFsb2cgYW5kIGFsZXJ0ZGlhbG9nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg1NjYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBzdXBw
b3J0IGZvciBhcmlhLW1vZGFsIGF0dHJpYnV0ZSBvbiBkaWFsb2cvYWxlcnRkaWFsb2cgcm9sZXMu
CisgICAgICAgIFdoZW4gbW9kYWwgZGlhbG9nIGlzIGRpc3BsYXllZCwgYWxsIG90aGVyIGNvbnRl
bnRzIHdpbGwgYmUgdW5hY2Nlc3NpYmxlLgorCisgICAgICAgIFRlc3RzOiBhY2Nlc3NpYmlsaXR5
L2FyaWEtbW9kYWwtbXVsdGlwbGUtZGlhbG9ncy5odG1sCisgICAgICAgICAgICAgICBhY2Nlc3Np
YmlsaXR5L2FyaWEtbW9kYWwuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6ZmluZEFyaWFNb2RhbE5vZGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnVwZGF0ZUN1cnJlbnRBcmlhTW9kYWxOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmlzTm9kZVZpc2libGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YXJpYU1vZGFsTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpmb2N1c2VkSW1hZ2VNYXBVSUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhTW9kYWxDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bGFiZWxDaGFuZ2VkKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmhhbmRsZUFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhUm9sZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYU1vZGFsQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYUN1cnJlbnRTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FyaWFNb2RhbERlc2NlbmRhbnQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aWdub3JlZEZyb21BUklB
TW9kYWxQcmVzZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpo
YXNUYWdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRlZmF1
bHRPYmplY3RJbmNsdXNpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5oOgorICAgICAgICAqIGh0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluOgorCiAyMDE1
LTEwLTMwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBNb2Rl
cm4gSURCOiBTdXBwb3J0IElEQk9iamVjdFN0b3JlLmdldCgpIGZvciBJREJLZXlSYW5nZXMuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJ
KHJldmlzaW9uIDE5MTYxNykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsOSBAQCBBWE9iamVjdENh
Y2hlOjpBWE9iamVjdENhY2hlKERvY3VtZW50JiBkCiAgICAgLCBtX25vdGlmaWNhdGlvblBvc3RU
aW1lcigqdGhpcywgJkFYT2JqZWN0Q2FjaGU6Om5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKQog
ICAgICwgbV9wYXNzd29yZE5vdGlmaWNhdGlvblBvc3RUaW1lcigqdGhpcywgJkFYT2JqZWN0Q2Fj
aGU6OnBhc3N3b3JkTm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQpCiAgICAgLCBtX2xpdmVSZWdp
b25DaGFuZ2VkUG9zdFRpbWVyKCp0aGlzLCAmQVhPYmplY3RDYWNoZTo6bGl2ZVJlZ2lvbkNoYW5n
ZWROb3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCkKKyAgICAsIG1fY3VycmVudEFyaWFNb2RhbE5v
ZGUobnVsbHB0cikKIHsKKyAgICBmaW5kQXJpYU1vZGFsTm9kZXMoKTsKIH0KIAogQVhPYmplY3RD
YWNoZTo6fkFYT2JqZWN0Q2FjaGUoKQpAQCAtMTU3LDYgKzE1OSw5NCBAQCBBWE9iamVjdENhY2hl
Ojp+QVhPYmplY3RDYWNoZSgpCiAgICAgfQogfQogCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmZpbmRB
cmlhTW9kYWxOb2RlcygpCit7CisgICAgbV9jdXJyZW50QXJpYU1vZGFsTm9kZSA9IG51bGxwdHI7
CisgICAgCisgICAgLy8gVHJhdmVyc2UgdGhlIERPTSB0cmVlIHRvIGxvb2sgZm9yIHRoZSBhcmlh
LW1vZGFsPXRydWUgbm9kZXMuCisgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRy
YXZlcnNhbDo6Zmlyc3RXaXRoaW4oZG9jdW1lbnQoKS5yb290Tm9kZSgpKTsgZWxlbWVudDsgZWxl
bWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oKmVsZW1lbnQpKSB7
CisgICAgICAgIAorICAgICAgICAvLyBNdXN0IGhhdmUgZGlhbG9nIG9yIGFsZXJ0ZGlhbG9nIHJv
bGUKKyAgICAgICAgaWYgKCFub2RlSGFzUm9sZShlbGVtZW50LCAiZGlhbG9nIikgJiYgIW5vZGVI
YXNSb2xlKGVsZW1lbnQsICJhbGVydGRpYWxvZyIpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShh
cmlhX21vZGFsQXR0ciksICJ0cnVlIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
CisgICAgICAgIGlmICghbV9hcmlhTW9kYWxOb2Rlc1NldC5jb250YWlucyhlbGVtZW50KSkKKyAg
ICAgICAgICAgIG1fYXJpYU1vZGFsTm9kZXNTZXQuYWRkKGVsZW1lbnQpOworICAgIH0KKyAgICAK
KyAgICAvLyBTZXQgdGhlIGN1cnJlbnQgdmFsaWQgYXJpYS1tb2RhbCBub2RlIGlmIHBvc3NpYmxl
LgorICAgIHVwZGF0ZUN1cnJlbnRBcmlhTW9kYWxOb2RlKCk7Cit9CisKK3ZvaWQgQVhPYmplY3RD
YWNoZTo6dXBkYXRlQ3VycmVudEFyaWFNb2RhbE5vZGUoKQoreworICAgIC8vIFRoZXJlIG1pZ2h0
IGJlIG11bHRpcGxlIG5vZGVzIHdpdGggYXJpYS1tb2RhbD10cnVlIHNldC4KKyAgICAvLyBXZSB1
c2UgdGhpcyBmdW5jdGlvbiB0byBwaWNrIHRoZSBvbmUgd2Ugd2FudC4KKyAgICBtX2N1cnJlbnRB
cmlhTW9kYWxOb2RlID0gbnVsbHB0cjsKKyAgICBpZiAobV9hcmlhTW9kYWxOb2Rlc1NldC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQg
dGhlIG5vZGVzIHdoaWNoIGFyZSB2aXNpYmxlLgorICAgIExpc3RIYXNoU2V0PFJlZlB0cjxOb2Rl
Pj4gdmlzaWJsZU5vZGVzOworICAgIGZvciAoYXV0byYgb2JqZWN0IDogbV9hcmlhTW9kYWxOb2Rl
c1NldCkgeworICAgICAgICBpZiAoaXNOb2RlVmlzaWJsZShvYmplY3QuZ2V0KCkpKQorICAgICAg
ICAgICAgdmlzaWJsZU5vZGVzLmFkZChvYmplY3QuZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBp
ZiAodmlzaWJsZU5vZGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8v
IElmIGFueSBvZiB0aGUgbm9kZSBhcmUga2V5Ym9hcmQgZm9jdXNlZCwgd2Ugd2FudCB0byBwaWNr
IHRoYXQuCisgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50
KCk7CisgICAgZm9yIChhdXRvJiBvYmplY3QgOiB2aXNpYmxlTm9kZXMpIHsKKyAgICAgICAgaWYg
KGZvY3VzZWROb2RlICE9IG51bGxwdHIgJiYgZm9jdXNlZE5vZGUtPmlzRGVzY2VuZGFudE9mKG9i
amVjdC5nZXQoKSkpIHsKKyAgICAgICAgICAgIG1fY3VycmVudEFyaWFNb2RhbE5vZGUgPSBvYmpl
Y3QuZ2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAvLyBJZiBub25lIG9mIHRoZSBub2RlcyBhcmUgZm9jdXNlZCwgd2Ugd2FudCB0byBwaWNrIHRo
ZSBsYXN0IGRpYWxvZyBpbiB0aGUgRE9NLgorICAgIGlmICghbV9jdXJyZW50QXJpYU1vZGFsTm9k
ZSkKKyAgICAgICAgbV9jdXJyZW50QXJpYU1vZGFsTm9kZSA9IHZpc2libGVOb2Rlcy5sYXN0KCku
Z2V0KCk7Cit9CisKK2Jvb2wgQVhPYmplY3RDYWNoZTo6aXNOb2RlVmlzaWJsZShOb2RlKiBub2Rl
KSBjb25zdAoreworICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+
cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgaWYg
KHN0eWxlLmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxzbyBuZWVkIHRvIGNv
bnNpZGVyIGFyaWEgaGlkZGVuIHN0YXR1cy4KKyAgICBpZiAoIWlzTm9kZUFyaWFWaXNpYmxlKG5v
ZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K05vZGUqIEFYT2JqZWN0Q2FjaGU6OmFyaWFNb2RhbE5vZGUoKQoreworICAgIC8vIFRoaXMgZnVu
Y3Rpb24gcmV0dXJucyB0aGUgdmFsaWQgYXJpYSBtb2RhbCBub2RlLgorICAgIGlmIChtX2FyaWFN
b2RhbE5vZGVzU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisg
ICAgLy8gQ2hlY2sgdGhlIGN1cnJlbnQgdmFsaWQgYXJpYSBtb2RhbCBub2RlIGZpcnN0LgorICAg
IC8vIFVzdWFsbHkgd2hlbiBvbmUgZGlhbG9nIHNldHMgYXJpYS1tb2RhbD10cnVlLCB0aGF0IGRp
YWxvZyBpcyB0aGUgb25lIHdlIHdhbnQuCisgICAgaWYgKGlzTm9kZVZpc2libGUobV9jdXJyZW50
QXJpYU1vZGFsTm9kZSkpCisgICAgICAgIHJldHVybiBtX2N1cnJlbnRBcmlhTW9kYWxOb2RlOwor
ICAgIAorICAgIC8vIFJlY29tcHV0ZSB0aGUgdmFsaWQgYXJpYSBtb2RhbCBub2RlIHdoZW4gbV9j
dXJyZW50QXJpYU1vZGFsTm9kZSBpcyBudWxsIG9yIGhpZGRlbi4KKyAgICB1cGRhdGVDdXJyZW50
QXJpYU1vZGFsTm9kZSgpOworICAgIHJldHVybiBpc05vZGVWaXNpYmxlKG1fY3VycmVudEFyaWFN
b2RhbE5vZGUpID8gbV9jdXJyZW50QXJpYU1vZGFsTm9kZSA6IG51bGxwdHI7Cit9CisKIEFjY2Vz
c2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRJbWFnZU1hcFVJRWxlbWVudChI
VE1MQXJlYUVsZW1lbnQqIGFyZWFFbGVtZW50KQogewogICAgIC8vIEZpbmQgdGhlIGNvcnJlc3Bv
bmRpbmcgYWNjZXNzaWJpbGl0eSBvYmplY3QgZm9yIHRoZSBIVE1MQXJlYUVsZW1lbnQuIFRoaXMg
c2hvdWxkIGJlCkBAIC0xMjQ4LDEwICsxMzM4LDM1IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFu
ZGxlQXR0cmlidXRlQ2hhbmcKICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkKGVsZW1lbnQtPnBhcmVu
dE5vZGUoKSwgZWxlbWVudCk7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJpYV9pbnZhbGlk
QXR0cikKICAgICAgICAgcG9zdE5vdGlmaWNhdGlvbihlbGVtZW50LCBBWE9iamVjdENhY2hlOjpB
WEludmFsaWRTdGF0dXNDaGFuZ2VkKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBhcmlhX21v
ZGFsQXR0cikKKyAgICAgICAgaGFuZGxlQXJpYU1vZGFsQ2hhbmdlKGVsZW1lbnQpOwogICAgIGVs
c2UKICAgICAgICAgcG9zdE5vdGlmaWNhdGlvbihlbGVtZW50LCBBWE9iamVjdENhY2hlOjpBWEFy
aWFBdHRyaWJ1dGVDaGFuZ2VkKTsKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlh
TW9kYWxDaGFuZ2UoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+
KG5vZGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFub2RlSGFzUm9sZShub2Rl
LCAiZGlhbG9nIikgJiYgIW5vZGVIYXNSb2xlKG5vZGUsICJhbGVydGRpYWxvZyIpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMo
KTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmZh
c3RHZXRBdHRyaWJ1dGUoYXJpYV9tb2RhbEF0dHIpLCAidHJ1ZSIpKSB7CisgICAgICAgIC8vIEFk
ZCB0aGUgbmV3bHkgbW9kaWZpZWQgbm9kZSB0byB0aGUgbW9kYWwgbm9kZXMgc2V0LCBhbmQgc2V0
IGl0IHRvIGJlIHRoZSBjdXJyZW50IHZhbGlkIGFyaWEgbW9kYWwgbm9kZS4KKyAgICAgICAgLy8g
V2Ugd2lsbCByZWNvbXB1dGUgdGhlIGN1cnJlbnQgdmFsaWQgYXJpYSBtb2RhbCBub2RlIGluIGFy
aWFNb2RhbE5vZGUoKSB3aGVuIHRoaXMgbm9kZSBpcyBub3QgdmlzaWJsZS4KKyAgICAgICAgaWYg
KCFtX2FyaWFNb2RhbE5vZGVzU2V0LmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgbV9hcmlh
TW9kYWxOb2Rlc1NldC5hZGQobm9kZSk7CisgICAgICAgIG1fY3VycmVudEFyaWFNb2RhbE5vZGUg
PSBub2RlOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFJlbW92ZSB0aGUgbm9kZSBmcm9tIHRo
ZSBtb2RhbCBub2RlcyBzZXQuIFRoZXJlIG1pZ2h0IGJlIG90aGVyIHZpc2libGUgbW9kYWwgbm9k
ZXMsIHNvIHdlIHJlY29tcHV0ZSBoZXJlLgorICAgICAgICBpZiAobV9hcmlhTW9kYWxOb2Rlc1Nl
dC5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgIG1fYXJpYU1vZGFsTm9kZXNTZXQucmVtb3Zl
KG5vZGUpOworICAgICAgICB1cGRhdGVDdXJyZW50QXJpYU1vZGFsTm9kZSgpOworICAgIH0KK30K
Kwogdm9pZCBBWE9iamVjdENhY2hlOjpsYWJlbENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKIHsK
ICAgICBBU1NFUlQoaXM8SFRNTExhYmVsRWxlbWVudD4oKmVsZW1lbnQpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCShyZXZpc2lvbiAxOTE2
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZVNj
cm9sbGVkVG9BbmNob3IoY29uc3QgTm9kZSogYW5jaG9yTm9kZSk7CiAgICAgdm9pZCBoYW5kbGVB
cmlhRXhwYW5kZWRDaGFuZ2UoTm9kZSopOwogICAgIHZvaWQgaGFuZGxlU2Nyb2xsYmFyVXBkYXRl
KFNjcm9sbFZpZXcqKTsKKyAgICAKKyAgICB2b2lkIGhhbmRsZUFyaWFNb2RhbENoYW5nZShOb2Rl
Kik7CisgICAgTm9kZSogYXJpYU1vZGFsTm9kZSgpOwogCiAgICAgdm9pZCBoYW5kbGVBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBFbGVtZW50Kik7CiAgICAg
dm9pZCByZWNvbXB1dGVJc0lnbm9yZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcik7CkBAIC0yNzEs
NiArMjc0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVNZW51T3BlbmVkKE5vZGUqKTsK
ICAgICB2b2lkIGhhbmRsZUxpdmVSZWdpb25DcmVhdGVkKE5vZGUqKTsKICAgICB2b2lkIGhhbmRs
ZU1lbnVJdGVtU2VsZWN0ZWQoTm9kZSopOworICAgIAorICAgIC8vIGFyaWEtbW9kYWwgcmVsYXRl
ZAorICAgIHZvaWQgZmluZEFyaWFNb2RhbE5vZGVzKCk7CisgICAgdm9pZCB1cGRhdGVDdXJyZW50
QXJpYU1vZGFsTm9kZSgpOworICAgIGJvb2wgaXNOb2RlVmlzaWJsZShOb2RlKikgY29uc3Q7CiAK
ICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nl
c3NpYmlsaXR5T2JqZWN0Pj4gbV9vYmplY3RzOwpAQCAtMjkzLDYgKzMwMSw5IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgVGltZXIgbV9saXZlUmVnaW9uQ2hhbmdlZFBvc3RUaW1lcjsKICAgICBMaXN0
SGFzaFNldDxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4+IG1fbGl2ZVJlZ2lvbk9iamVjdHNT
ZXQ7CisgICAgCisgICAgTm9kZSogbV9jdXJyZW50QXJpYU1vZGFsTm9kZTsKKyAgICBMaXN0SGFz
aFNldDxSZWZQdHI8Tm9kZT4+IG1fYXJpYU1vZGFsTm9kZXNTZXQ7CiAKICAgICBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCBtX3RleHRTZWxlY3Rpb25JbnRlbnQ7CiAgICAgYm9vbCBtX2lzU3luY2hy
b25pemluZ1NlbGVjdGlvbiB7IGZhbHNlIH07CkBAIC0zNDgsNiArMzU5LDcgQEAgaW5saW5lIHZv
aWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNo
ZTo6aGFuZGxlQWN0aXZlRGVzY2VuZGFudENoYW5nZWQoTm9kZSopIHsgfQogaW5saW5lIHZvaWQg
QVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKE5vZGUqKSB7IH0KIGlubGlu
ZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFyaWFSb2xlQ2hhbmdlZChOb2RlKikgeyB9Citp
bmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhTW9kYWxDaGFuZ2UoTm9kZSopIHsg
fQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5n
ZWQoTm9kZSosIE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNj
cm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hl
OjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBFbGVtZW50Kikg
eyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDE5MTYxNykKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKICNpbmNsdWRlICJE
T01Ub2tlbkxpc3QuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRl
cmF0b3IuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKQEAgLTE4NDYsNiArMTg0Nyw0NSBAQCBB
Y2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRTdGF0ZSBBY2Nlc3NpYmlsCiAgICAgcmV0dXJuIEFSSUFD
dXJyZW50VHJ1ZTsKIH0KIAorYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FyaWFNb2RhbERl
c2NlbmRhbnQoTm9kZSogYXJpYU1vZGFsTm9kZSkgY29uc3QKK3sKKyAgICBpZiAoIWFyaWFNb2Rh
bE5vZGUgfHwgIXRoaXMtPmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmICh0aGlzLT5lbGVtZW50KCkgPT0gYXJpYU1vZGFsTm9kZSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgCisgICAgLy8gQVJJQSAxLjEgYXJpYS1tb2RhbCwgaW5kaWNhdGVzIHdoZXRo
ZXIgYW4gZWxlbWVudCBpcyBtb2RhbCB3aGVuIGRpc3BsYXllZC4KKyAgICAvLyBGb3IgdGhlIGRl
Y2VuZGFudHMgb2YgdGhlIG1vZGFsIG9iamVjdCwgdGhleSBzaG91bGQgYWxzbyBiZSBjb25zaWRl
cmVkIGFzIGFyaWEtbW9kYWw9dHJ1ZS4KKyAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDogZWxlbWVu
dEFuY2VzdG9ycyh0aGlzLT5lbGVtZW50KCkpKSB7CisgICAgICAgIGlmICgmYW5jZXN0b3IgPT0g
YXJpYU1vZGFsTm9kZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aWdub3JlZEZyb21BUklB
TW9kYWxQcmVzZW5jZSgpIGNvbnN0Cit7CisgICAgLy8gV2Ugc2hvdWxkbid0IGlnbm9yZSB0aGUg
dG9wIG5vZGUuCisgICAgaWYgKCFub2RlKCkgfHwgIW5vZGUoKS0+cGFyZW50Tm9kZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBheE9i
amVjdENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIC8vIGFyaWFNb2RhbE5vZGUgaXMgdGhlIGN1cnJlbnQgZGlzcGxheWVkIG1vZGFsIGRp
YWxvZy4KKyAgICBOb2RlKiBhcmlhTW9kYWxOb2RlID0gY2FjaGUtPmFyaWFNb2RhbE5vZGUoKTsK
KyAgICBpZiAoIWFyaWFNb2RhbE5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICAvLyBXZSBvbmx5IHdhbnQgdG8gaWdub3JlIHRoZSBvYmplY3RzIHdpdGhpbiB0aGUgc2FtZSBm
cmFtZSBhcyB0aGUgbW9kYWwgZGlhbG9nLgorICAgIGlmIChhcmlhTW9kYWxOb2RlLT5kb2N1bWVu
dCgpLmZyYW1lKCkgIT0gdGhpcy0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiAhaXNBcmlhTW9kYWxEZXNjZW5kYW50KGFyaWFNb2RhbE5vZGUpOworfQor
CiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwpAQCAt
Mjc4Niw2ICsyODI2LDkgQEAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBBY2Nlc3NpYmls
aQogICAgIGlmIChpc0FSSUFIaWRkZW4oKSkKICAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsK
ICAgICAKKyAgICBpZiAoaWdub3JlZEZyb21BUklBTW9kYWxQcmVzZW5jZSgpKQorICAgICAgICBy
ZXR1cm4gSWdub3JlT2JqZWN0OworICAgIAogICAgIGlmIChpc1ByZXNlbnRhdGlvbmFsQ2hpbGRP
ZkFyaWFSb2xlKCkpCiAgICAgICAgIHJldHVybiBJZ25vcmVPYmplY3Q7CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aAkocmV2aXNpb24gMTkxNjE3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzMSw2ICs2MzEsOSBAQCBwdWJs
aWM6CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiByb2xlRGVzY3JpcHRpb24oKSBjb25zdDsKICAg
ICBBY2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRTdGF0ZSBhcmlhQ3VycmVudFN0YXRlKCkgY29uc3Q7
CiAgICAgCisgICAgYm9vbCBpc0FyaWFNb2RhbERlc2NlbmRhbnQoTm9kZSopIGNvbnN0OworICAg
IGJvb2wgaWdub3JlZEZyb21BUklBTW9kYWxQcmVzZW5jZSgpIGNvbnN0OworICAgIAogICAgIGJv
b2wgc3VwcG9ydHNBUklBU2V0U2l6ZSgpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNBUklBUG9z
SW5TZXQoKSBjb25zdDsKICAgICBpbnQgYXJpYVNldFNpemUoKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAxOTE2MTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQCBhcmlhLWxhYmVsZWRieQogYXJpYS1sYWJlbGxlZGJ5CiBhcmlh
LWxldmVsCiBhcmlhLWxpdmUKK2FyaWEtbW9kYWwKIGFyaWEtbXVsdGlsaW5lCiBhcmlhLW11bHRp
c2VsZWN0YWJsZQogYXJpYS1vcmllbnRhdGlvbgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNjE3KQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTUtMTAtMzEgIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBBWDog
QWRkIHN1cHBvcnQgZm9yIEFSSUEgMS4xIGF0dHJpYnV0ZSAnYXJpYS1tb2RhbCcgZm9yIGRpYWxv
ZyBhbmQgYWxlcnRkaWFsb2cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzODU2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLW11bHRpcGxlLWRpYWxvZ3MtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtbXVs
dGlwbGUtZGlhbG9ncy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEt
bW9kYWwuaHRtbDogQWRkZWQuCisKIDIwMTUtMTAtMjYgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRh
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZpbmcgZHVwbGljYXRlZCB0ZXN0IGV4cGVjdGF0
aW9ucyBhbmQgcmVtb3ZpbmcgZGVidWcgZmxhZyBmcm9tIGZsYWt5IGZhc3QvY2FudmFzL3dlYmds
IHRlc3RzCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1tb2Rh
bC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L2FyaWEtbW9kYWwtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAK
K1RoaXMgdGVzdHMgdGhhdCBhcmlhLW1vZGFsIG9uIGRpYWxvZyBtYWtlcyBvdGhlciBlbGVtZW50
cyBpbmVydC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYmFja2dyb3Vu
ZEFjY2Vzc2libGUoKSBpcyBmYWxzZQorUEFTUyBiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIGlzIHRy
dWUKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyBmYWxzZQorUEFTUyBva0J0bi5pc0ln
bm9yZWQgaXMgZmFsc2UKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyB0cnVlCitQQVNT
IGJhY2tncm91bmRBY2Nlc3NpYmxlKCkgaXMgdHJ1ZQorUEFTUyBiYWNrZ3JvdW5kQWNjZXNzaWJs
ZSgpIGlzIGZhbHNlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKK090aGVyIHBhZ2UgY29udGVudCB3aXRoIGEgZHVtbXkgZm9jdXNhYmxlIGVsZW1lbnQK
KworRGlzcGxheSBhIGRpYWxvZworCitKdXN0IGFuIGV4YW1wbGUuCisKK09LICBDYW5jZWwKSW5k
ZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1tb2RhbC1tdWx0aXBsZS1kaWFsb2dz
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2Fy
aWEtbW9kYWwtbXVsdGlwbGUtZGlhbG9ncy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtbXVsdGlwbGUtZGlhbG9ncy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAorVGhpcyB0ZXN0cyB0aGF0
IGFyaWEtbW9kYWwgd29ya3MgY29ycmVjdGx5IG9uIG11bHRpcGxlIGRpYWxvZ3MKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyB0
cnVlCitQQVNTIGJhY2tncm91bmRBY2Nlc3NpYmxlKCkgaXMgZmFsc2UKK1BBU1MgZGlhbG9nMUFj
Y2Vzc2libGUoKSBpcyB0cnVlCitQQVNTIGJhY2tncm91bmRBY2Nlc3NpYmxlKCkgaXMgZmFsc2UK
K1BBU1MgZGlhbG9nMUFjY2Vzc2libGUoKSBpcyBmYWxzZQorUEFTUyBjbG9zZUJ0bi5pc0lnbm9y
ZWQgaXMgZmFsc2UKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyBmYWxzZQorUEFTUyBk
aWFsb2cxQWNjZXNzaWJsZSgpIGlzIHRydWUKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBp
cyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
K090aGVyIHBhZ2UgY29udGVudCB3aXRoIGEgZHVtbXkgZm9jdXNhYmxlIGVsZW1lbnQKKworRGlz
cGxheSBhIGRpYWxvZwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFs
LW11bHRpcGxlLWRpYWxvZ3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L2FyaWEtbW9kYWwtbXVsdGlwbGUtZGlhbG9ncy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLW11bHRpcGxlLWRpYWxvZ3MuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxzdHlsZT4K
Ky5ib3gtaGlkZGVuIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorPC9zdHlsZT4KKworPGJvZHkg
aWQ9ImJvZHkiPgorCis8ZGl2IGlkPSJiZyI+Cis8cCBpZD0iYmdDb250ZW50Ij5PdGhlciBwYWdl
IGNvbnRlbnQgd2l0aCA8YSBocmVmPSIjIj5hIGR1bW15IGZvY3VzYWJsZSBlbGVtZW50PC9hPjwv
cD4KKzxwPjxhIG9uY2xpY2s9InRvZ2dsZURpYWxvZyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Ym94JyksJ3Nob3cnKTsgcmV0dXJuIGZhbHNlOyIgaHJlZj0iIyIgcm9sZT0iYnV0dG9uIiBpZD0i
ZGlzcGxheUJ0biI+RGlzcGxheSBhIGRpYWxvZzwvYT48L3A+Cis8L2Rpdj4KKworPGRpdiByb2xl
PSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0ibXlEaWFsb2ciIGlkPSJib3giIGNsYXNzPSJib3gt
aGlkZGVuIiB0YWJpbmRleD0iLTEiPgorICAgIDxoMyBpZD0ibXlEaWFsb2ciPkp1c3QgYW4gZXhh
bXBsZS48L2gzPgorICAgIDxidXR0b24gaWQ9Im9rIiBvbmNsaWNrPSJ0b2dnbGVEaWFsb2coZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JveCcpLCdoaWRlJyk7IiBjbGFzcz0iY2xvc2UtYnV0dG9u
Ij5PSzwvYnV0dG9uPgorICAgIDxidXR0b24gb25jbGljaz0idG9nZ2xlRGlhbG9nKGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdib3gyJyksJ3Nob3cnKTsiIGlkPSJuZXciPk5ldzwvYnV0dG9uPgor
PC9kaXY+CisKKzxkaXYgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9Im15RGlhbG9nMiIg
aWQ9ImJveDIiIGNsYXNzPSJib3gtaGlkZGVuIiB0YWJpbmRleD0iLTEiPgorICAgIDxoMyBpZD0i
bXlEaWFsb2cyIj5Bbm90aGVyIGRpYWxvZy48L2gzPgorICAgIDxidXR0b24gaWQ9ImNsb3NlIiBv
bmNsaWNrPSJ0b2dnbGVEaWFsb2coZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JveDInKSwnaGlk
ZScpOyIgY2xhc3M9ImNsb3NlLWJ1dHRvbiI+Q2xvc2U8L2J1dHRvbj4KKzwvZGl2PgorCisKKzxz
Y3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGFyaWEtbW9kYWwgd29y
a3MgY29ycmVjdGx5IG9uIG11bHRpcGxlIGRpYWxvZ3MiKTsKKworICAgIGlmICh3aW5kb3cuYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgLy8gQmFja2dyb3VuZCBzaG91bGQgYmUg
YWNjZXNzaWJsZSBhZnRlciBsb2FkaW5nLgorICAgICAgICBzaG91bGRCZVRydWUoImJhY2tncm91
bmRBY2Nlc3NpYmxlKCkiKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsaWNrIHRoZSBkaXNwbGF5
IGJ1dHRvbiwgZGlhbG9nMSBzaG93cyBhbmQgYmFja2dyb3VuZCBiZWNvbWVzIHVuYWNjZXNzaWJs
ZS4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpc3BsYXlCdG4iKS5jbGljaygp
OworICAgICAgICBzaG91bGRCZUZhbHNlKCJiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIik7CisgICAg
ICAgIHNob3VsZEJlVHJ1ZSgiZGlhbG9nMUFjY2Vzc2libGUoKSIpOworICAgICAgICAKKyAgICAg
ICAgLy8gQ2xpY2sgdGhlIG5ldyBidXR0b24sIGRpYWxvZzIgc2hvd3MgYW5kIGJhY2tncm91bmQv
ZGlhbG9nMSBzaG91bGQgYm90aCBiZSB1bmFjY2Vzc2libGUuCisgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJuZXciKS5jbGljaygpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJiYWNr
Z3JvdW5kQWNjZXNzaWJsZSgpIik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoImRpYWxvZzFBY2Nl
c3NpYmxlKCkiKTsKKyAgICAgICAgdmFyIGNsb3NlQnRuID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJjbG9zZSIpOworICAgICAgICBzaG91bGRCZUZhbHNl
KCJjbG9zZUJ0bi5pc0lnbm9yZWQiKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsb3NlIGRpYWxv
ZzIsIGRpYWxvZzEgc2hvdWxkIGJlY29tZSBhY2Nlc3NpYmxlIGJ1dCBub3QgdGhlIGJhY2tncm91
bmQKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsb3NlIikuY2xpY2soKTsKKyAg
ICAgICAgc2hvdWxkQmVGYWxzZSgiYmFja2dyb3VuZEFjY2Vzc2libGUoKSIpOworICAgICAgICBz
aG91bGRCZVRydWUoImRpYWxvZzFBY2Nlc3NpYmxlKCkiKTsKKyAgICAgICAgCisgICAgICAgIC8v
IENsb3NlIGRpYWxvZzEsIGJhY2tncm91bmQgc2hvdWxkIGJlIGFjY2Vzc2libGUuCisgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvayIpLmNsaWNrKCk7CisgICAgICAgIHNob3VsZEJl
VHJ1ZSgiYmFja2dyb3VuZEFjY2Vzc2libGUoKSIpOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlv
biBiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIHsKKyAgICAgICAgdmFyIGRpc3BsYXlCdG4gPSBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRpc3BsYXlCdG4iKTsK
KyAgICAgICAgdmFyIGJnQ29udGVudCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2li
bGVFbGVtZW50QnlJZCgiYmdDb250ZW50Iik7CisgICAgICAgIGlmICghZGlzcGxheUJ0biB8fCAh
YmdDb250ZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gIWRp
c3BsYXlCdG4uaXNJZ25vcmVkICYmICFiZ0NvbnRlbnQuaXNJZ25vcmVkOworICAgIH0KKyAgICAK
KyAgICBmdW5jdGlvbiBkaWFsb2cxQWNjZXNzaWJsZSgpIHsKKyAgICAgICAgIHZhciBva0J0biA9
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgib2siKTsKKyAg
ICAgICAgIHZhciBuZXdCdG4gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxl
bWVudEJ5SWQoIm5ldyIpOworICAgICAgICAgaWYgKCFva0J0biB8fCAhbmV3QnRuKQorICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgIHJldHVybiAhb2tCdG4uaXNJZ25vcmVkICYm
ICFuZXdCdG4uaXNJZ25vcmVkOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiB0b2dnbGVEaWFs
b2coZGlhbG9nLCBzaCkgeworICAgIGlmIChzaCA9PSAic2hvdyIpIHsKKyAgICAgICAgLy8gc2hv
dyB0aGUgZGlhbG9nIAorICAgICAgICBkaWFsb2cuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7Cisg
ICAgICAgIGRpYWxvZy5zZXRBdHRyaWJ1dGUoImFyaWEtbW9kYWwiLCAidHJ1ZSIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICBk
aWFsb2cuc2V0QXR0cmlidXRlKCJhcmlhLW1vZGFsIiwgImZhbHNlIik7IAorICAgIH0KK30KKwor
PC9zY3JpcHQ+CisKKworPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
SW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1tb2RhbC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1tb2RhbC5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBpZD0iYm9keSI+
CisKKzxkaXYgaWQ9ImJnIj4KKzxwIGlkPSJiZ0NvbnRlbnQiPk90aGVyIHBhZ2UgY29udGVudCB3
aXRoIDxhIGhyZWY9IiMiPmEgZHVtbXkgZm9jdXNhYmxlIGVsZW1lbnQ8L2E+PC9wPgorPHA+PGEg
b25jbGljaz0idG9nZ2xlRGlhbG9nKCdzaG93Jyk7IHJldHVybiBmYWxzZTsiIGhyZWY9IiMiIHJv
bGU9ImJ1dHRvbiIgaWQ9ImRpc3BsYXlCdG4iPkRpc3BsYXkgYSBkaWFsb2c8L2E+PC9wPgorPC9k
aXY+CisKKzxkaXYgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVk
Ynk9Im15RGlhbG9nIiBpZD0iYm94IiBjbGFzcz0iYm94LWhpZGRlbiIgdGFiaW5kZXg9Ii0xIj4K
KyAgICA8aDMgaWQ9Im15RGlhbG9nIj5KdXN0IGFuIGV4YW1wbGUuPC9oMz4KKyAgICA8YnV0dG9u
IGlkPSJvayIgb25jbGljaz0idG9nZ2xlRGlhbG9nKCdoaWRlJyk7IiBjbGFzcz0iY2xvc2UtYnV0
dG9uIj5PSzwvYnV0dG9uPgorICAgIDxidXR0b24gb25jbGljaz0idG9nZ2xlRGlhbG9nKCdoaWRl
Jyk7IiBjbGFzcz0iY2xvc2UtYnV0dG9uIj5DYW5jZWw8L2J1dHRvbj4KKzwvZGl2PgorCisKKzxz
Y3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGFyaWEtbW9kYWwgb24g
ZGlhbG9nIG1ha2VzIG90aGVyIGVsZW1lbnRzIGluZXJ0LiIpOworCisgICAgaWYgKHdpbmRvdy5h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICAvLyBCYWNrZ3JvdW5kIHNob3VsZCBi
ZSB1bmFjY2Vzc2libGUgYWZ0ZXIgbG9hZGluZywgc2luY2UgdGhlIAorICAgICAgICAvLyBkaWFs
b2cgaXMgZGlzcGxheWVkIGFuZCBhcmlhLW1vZGFsPXRydWUuCisgICAgICAgIHNob3VsZEJlRmFs
c2UoImJhY2tncm91bmRBY2Nlc3NpYmxlKCkiKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsb3Nl
IHRoZSBkaWFsb2csIGJhY2tncm91bmQgc2hvdWxkIGJlIGFjY2Vzc2libGUuCisgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJvayIpLmNsaWNrKCk7CisgICAgICAgIHNob3VsZEJlVHJ1
ZSgiYmFja2dyb3VuZEFjY2Vzc2libGUoKSIpOworICAgICAgICAKKyAgICAgICAgLy8gQ2xpY2sg
dGhlIGRpc3BsYXkgYnV0dG9uLCBkaWFsb2cgc2hvd3MgYW5kIGJhY2tncm91bmQgYmVjb21lcyB1
bmFjY2Vzc2libGUuCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXNwbGF5QnRu
IikuY2xpY2soKTsKKyAgICAgICAgc2hvdWxkQmVGYWxzZSgiYmFja2dyb3VuZEFjY2Vzc2libGUo
KSIpOworICAgICAgICB2YXIgb2tCdG4gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3Np
YmxlRWxlbWVudEJ5SWQoIm9rIik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoIm9rQnRuLmlzSWdu
b3JlZCIpOworICAgICAgICAKKyAgICAgICAgLy8gVGVzdCB0aGUgY2FzZSB0aGF0IGFyaWEtbW9k
YWw9dHJ1ZSB3aGVuIGRpYWxvZyBpcyBoaWRkZW4gd29uJ3QgYWZmZWN0IG90aGVyIG9iamVjdHMu
CisgICAgICAgIC8vIDEuIERpYWxvZyBub3QgcmVuZGVyZWQKKyAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoIm9rIikuY2xpY2soKTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImJveCIpLnNldEF0dHJpYnV0ZSgiYXJpYS1tb2RhbCIsICJ0cnVlIik7CisgICAgICAgIHNo
b3VsZEJlVHJ1ZSgiYmFja2dyb3VuZEFjY2Vzc2libGUoKSIpOworICAgICAgICAvLyAyLiBEaWFs
b2cgaXMgYXJpYSBoaWRkZW4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpc3Bs
YXlCdG4iKS5jbGljaygpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm94Iiku
c2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsICJ0cnVlIik7CisgICAgICAgIHNob3VsZEJlVHJ1
ZSgiYmFja2dyb3VuZEFjY2Vzc2libGUoKSIpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiYm94Iikuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsICJmYWxzZSIpOworICAgICAg
ICBzaG91bGRCZUZhbHNlKCJiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIik7CisgICAgfQorICAgIAor
ICAgIGZ1bmN0aW9uIGJhY2tncm91bmRBY2Nlc3NpYmxlKCkgeworICAgICAgICB2YXIgZGlzcGxh
eUJ0biA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZGlz
cGxheUJ0biIpOworICAgICAgICB2YXIgYmdDb250ZW50ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJiZ0NvbnRlbnQiKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghZGlzcGxheUJ0biB8fCAhYmdDb250ZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuICFkaXNwbGF5QnRuLmlzSWdub3JlZCAmJiAhYmdD
b250ZW50LmlzSWdub3JlZDsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gdG9nZ2xlRGlhbG9n
KHNoKSB7CisgICAgICAgIGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3giKTsK
KyAgICBpZiAoc2ggPT0gInNob3ciKSB7CisgICAgICAgIC8vIHNob3cgdGhlIGRpYWxvZyAKKyAg
ICAgICAgZGlhbG9nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworICAgICAgICBkaWFsb2cuc2V0
QXR0cmlidXRlKCJhcmlhLW1vZGFsIiwgInRydWUiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBk
aWFsb2cuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgZGlhbG9nLnNldEF0dHJpYnV0
ZSgiYXJpYS1tb2RhbCIsICJmYWxzZSIpOyAKKyAgICB9Cit9CisKKzwvc2NyaXB0PgorCisKKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264613</attachid>
            <date>2015-11-02 12:27:46 -0800</date>
            <delta_ts>2015-11-02 17:53:31 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>23216</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTkwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE1LTExLTAyICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFkZCBzdXBwb3J0IGZvciBBUklB
IDEuMSBhdHRyaWJ1dGUgJ2FyaWEtbW9kYWwnIGZvciBkaWFsb2cgYW5kIGFsZXJ0ZGlhbG9nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg1NjYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBzdXBw
b3J0IGZvciBhcmlhLW1vZGFsIGF0dHJpYnV0ZSBvbiBkaWFsb2cvYWxlcnRkaWFsb2cgcm9sZXMu
CisgICAgICAgIFdoZW4gbW9kYWwgZGlhbG9nIGlzIGRpc3BsYXllZCwgYWxsIG90aGVyIGNvbnRl
bnRzIHdpbGwgYmUgdW5hY2Nlc3NpYmxlLgorCisgICAgICAgIFRlc3RzOiBhY2Nlc3NpYmlsaXR5
L2FyaWEtbW9kYWwtbXVsdGlwbGUtZGlhbG9ncy5odG1sCisgICAgICAgICAgICAgICBhY2Nlc3Np
YmlsaXR5L2FyaWEtbW9kYWwuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6ZmluZEFyaWFNb2RhbE5vZGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnVwZGF0ZUN1cnJlbnRBcmlhTW9kYWxOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmlzTm9kZVZpc2libGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YXJpYU1vZGFsTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpmb2N1c2VkSW1hZ2VNYXBVSUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYU1vZGFsQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OmxhYmVsQ2hhbmdlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVB
Y3RpdmVEZXNjZW5kYW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hl
OjpoYW5kbGVBcmlhRXhwYW5kZWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6aGFuZGxlQXJpYVJvbGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmhhbmRsZUFyaWFNb2RhbENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpoYW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpoYW5kbGVTY3JvbGxiYXJVcGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFDdXJyZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNBcmlhTW9kYWxEZXNjZW5kYW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Omlnbm9yZWRGcm9tQVJJQU1vZGFsUHJlc2VuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzVGFnTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZWZhdWx0T2JqZWN0SW5jbHVz
aW9uKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbjoKKwogMjAxNS0xMS0wMiAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjE5MTkwMi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQy
LDcgKzE0Miw5IEBAIEFYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoRG9jdW1lbnQmIGQKICAg
ICAsIG1fbm90aWZpY2F0aW9uUG9zdFRpbWVyKCp0aGlzLCAmQVhPYmplY3RDYWNoZTo6bm90aWZp
Y2F0aW9uUG9zdFRpbWVyRmlyZWQpCiAgICAgLCBtX3Bhc3N3b3JkTm90aWZpY2F0aW9uUG9zdFRp
bWVyKCp0aGlzLCAmQVhPYmplY3RDYWNoZTo6cGFzc3dvcmROb3RpZmljYXRpb25Qb3N0VGltZXJG
aXJlZCkKICAgICAsIG1fbGl2ZVJlZ2lvbkNoYW5nZWRQb3N0VGltZXIoKnRoaXMsICZBWE9iamVj
dENhY2hlOjpsaXZlUmVnaW9uQ2hhbmdlZE5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKQorICAg
ICwgbV9jdXJyZW50QXJpYU1vZGFsTm9kZShudWxscHRyKQogeworICAgIGZpbmRBcmlhTW9kYWxO
b2RlcygpOwogfQogCiBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpCkBAIC0xNTcsNiAr
MTU5LDkxIEBAIEFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKCkKICAgICB9CiB9CiAKK3Zv
aWQgQVhPYmplY3RDYWNoZTo6ZmluZEFyaWFNb2RhbE5vZGVzKCkKK3sKKyAgICAvLyBUcmF2ZXJz
ZSB0aGUgRE9NIHRyZWUgdG8gbG9vayBmb3IgdGhlIGFyaWEtbW9kYWw9dHJ1ZSBub2Rlcy4KKyAg
ICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihk
b2N1bWVudCgpLnJvb3ROb2RlKCkpOyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNh
bDo6bmV4dEluY2x1ZGluZ1BzZXVkbygqZWxlbWVudCkpIHsKKyAgICAgICAgCisgICAgICAgIC8v
IE11c3QgaGF2ZSBkaWFsb2cgb3IgYWxlcnRkaWFsb2cgcm9sZQorICAgICAgICBpZiAoIW5vZGVI
YXNSb2xlKGVsZW1lbnQsICJkaWFsb2ciKSAmJiAhbm9kZUhhc1JvbGUoZWxlbWVudCwgImFsZXJ0
ZGlhbG9nIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFlcXVhbElnbm9y
aW5nQ2FzZShlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGFyaWFfbW9kYWxBdHRyKSwgInRydWUi
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgbV9hcmlhTW9kYWxO
b2Rlc1NldC5hZGQoZWxlbWVudCk7CisgICAgfQorICAgIAorICAgIC8vIFNldCB0aGUgY3VycmVu
dCB2YWxpZCBhcmlhLW1vZGFsIG5vZGUgaWYgcG9zc2libGUuCisgICAgdXBkYXRlQ3VycmVudEFy
aWFNb2RhbE5vZGUoKTsKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjp1cGRhdGVDdXJyZW50QXJp
YU1vZGFsTm9kZSgpCit7CisgICAgLy8gVGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgbm9kZXMgd2l0
aCBhcmlhLW1vZGFsPXRydWUgc2V0LgorICAgIC8vIFdlIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHBp
Y2sgdGhlIG9uZSB3ZSB3YW50LgorICAgIG1fY3VycmVudEFyaWFNb2RhbE5vZGUgPSBudWxscHRy
OworICAgIGlmIChtX2FyaWFNb2RhbE5vZGVzU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgbm9kZXMgd2hpY2ggYXJlIHZp
c2libGUuCisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiB2aXNpYmxlTm9kZXM7CisgICAg
Zm9yIChhdXRvJiBvYmplY3QgOiBtX2FyaWFNb2RhbE5vZGVzU2V0KSB7CisgICAgICAgIGlmIChp
c05vZGVWaXNpYmxlKG9iamVjdCkpCisgICAgICAgICAgICB2aXNpYmxlTm9kZXMuYWRkKG9iamVj
dCk7CisgICAgfQorICAgIAorICAgIGlmICh2aXNpYmxlTm9kZXMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgLy8gSWYgYW55IG9mIHRoZSBub2RlIGFyZSBrZXlib2FyZCBm
b2N1c2VkLCB3ZSB3YW50IHRvIHBpY2sgdGhhdC4KKyAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGRv
Y3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKTsKKyAgICBmb3IgKGF1dG8mIG9iamVjdCA6IHZpc2li
bGVOb2RlcykgeworICAgICAgICBpZiAoZm9jdXNlZE5vZGUgIT0gbnVsbHB0ciAmJiBmb2N1c2Vk
Tm9kZS0+aXNEZXNjZW5kYW50T2Yob2JqZWN0LmdldCgpKSkgeworICAgICAgICAgICAgbV9jdXJy
ZW50QXJpYU1vZGFsTm9kZSA9IG9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIC8vIElmIG5vbmUgb2YgdGhlIG5vZGVzIGFyZSBmb2N1
c2VkLCB3ZSB3YW50IHRvIHBpY2sgdGhlIGxhc3QgZGlhbG9nIGluIHRoZSBET00uCisgICAgaWYg
KCFtX2N1cnJlbnRBcmlhTW9kYWxOb2RlKQorICAgICAgICBtX2N1cnJlbnRBcmlhTW9kYWxOb2Rl
ID0gdmlzaWJsZU5vZGVzLmxhc3QoKS5nZXQoKTsKK30KKworYm9vbCBBWE9iamVjdENhY2hlOjpp
c05vZGVWaXNpYmxlKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgaWYgKCFpczxFbGVtZW50Pihu
b2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5
bGUoKTsKKyAgICBpZiAoc3R5bGUuZGlzcGxheSgpID09IE5PTkUgfHwgc3R5bGUudmlzaWJpbGl0
eSgpICE9IFZJU0lCTEUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBXZSBh
bHNvIG5lZWQgdG8gY29uc2lkZXIgYXJpYSBoaWRkZW4gc3RhdHVzLgorICAgIGlmICghaXNOb2Rl
QXJpYVZpc2libGUobm9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworTm9kZSogQVhPYmplY3RDYWNoZTo6YXJpYU1vZGFsTm9kZSgpCit7Cisg
ICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWxpZCBhcmlhIG1vZGFsIG5vZGUuCisg
ICAgaWYgKG1fYXJpYU1vZGFsTm9kZXNTZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAKKyAgICAvLyBDaGVjayB0aGUgY3VycmVudCB2YWxpZCBhcmlhIG1vZGFsIG5v
ZGUgZmlyc3QuCisgICAgLy8gVXN1YWxseSB3aGVuIG9uZSBkaWFsb2cgc2V0cyBhcmlhLW1vZGFs
PXRydWUsIHRoYXQgZGlhbG9nIGlzIHRoZSBvbmUgd2Ugd2FudC4KKyAgICBpZiAoaXNOb2RlVmlz
aWJsZShtX2N1cnJlbnRBcmlhTW9kYWxOb2RlKSkKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEFy
aWFNb2RhbE5vZGU7CisgICAgCisgICAgLy8gUmVjb21wdXRlIHRoZSB2YWxpZCBhcmlhIG1vZGFs
IG5vZGUgd2hlbiBtX2N1cnJlbnRBcmlhTW9kYWxOb2RlIGlzIG51bGwgb3IgaGlkZGVuLgorICAg
IHVwZGF0ZUN1cnJlbnRBcmlhTW9kYWxOb2RlKCk7CisgICAgcmV0dXJuIGlzTm9kZVZpc2libGUo
bV9jdXJyZW50QXJpYU1vZGFsTm9kZSkgPyBtX2N1cnJlbnRBcmlhTW9kYWxOb2RlIDogbnVsbHB0
cjsKK30KKwogQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Zm9jdXNlZEltYWdl
TWFwVUlFbGVtZW50KEhUTUxBcmVhRWxlbWVudCogYXJlYUVsZW1lbnQpCiB7CiAgICAgLy8gRmlu
ZCB0aGUgY29ycmVzcG9uZGluZyBhY2Nlc3NpYmlsaXR5IG9iamVjdCBmb3IgdGhlIEhUTUxBcmVh
RWxlbWVudC4gVGhpcyBzaG91bGQgYmUKQEAgLTU3MSw2ICs2NTgsMTIgQEAgdm9pZCBBWE9iamVj
dENhY2hlOjpyZW1vdmUoTm9kZSogbm9kZSkKICAgICByZW1vdmUoYXhJRCk7CiAgICAgbV9ub2Rl
T2JqZWN0TWFwcGluZy5yZW1vdmUobm9kZSk7CiAKKyAgICAvLyBDbGVhbnVwIGZvciBhcmlhIG1v
ZGFsIG5vZGVzLgorICAgIGlmIChtX2N1cnJlbnRBcmlhTW9kYWxOb2RlID09IG5vZGUpCisgICAg
ICAgIG1fY3VycmVudEFyaWFNb2RhbE5vZGUgPSBudWxscHRyOworICAgIGlmIChtX2FyaWFNb2Rh
bE5vZGVzU2V0LmNvbnRhaW5zKG5vZGUpKQorICAgICAgICBtX2FyaWFNb2RhbE5vZGVzU2V0LnJl
bW92ZShub2RlKTsKKyAgICAKICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICBy
ZW1vdmUobm9kZS0+cmVuZGVyZXIoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTEyNDgsMTAgKzEz
NDEsMzQgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZwogICAgICAg
ICBjaGlsZHJlbkNoYW5nZWQoZWxlbWVudC0+cGFyZW50Tm9kZSgpLCBlbGVtZW50KTsKICAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBhcmlhX2ludmFsaWRBdHRyKQogICAgICAgICBwb3N0Tm90aWZp
Y2F0aW9uKGVsZW1lbnQsIEFYT2JqZWN0Q2FjaGU6OkFYSW52YWxpZFN0YXR1c0NoYW5nZWQpOwor
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGFyaWFfbW9kYWxBdHRyKQorICAgICAgICBoYW5kbGVB
cmlhTW9kYWxDaGFuZ2UoZWxlbWVudCk7CiAgICAgZWxzZQogICAgICAgICBwb3N0Tm90aWZpY2F0
aW9uKGVsZW1lbnQsIEFYT2JqZWN0Q2FjaGU6OkFYQXJpYUF0dHJpYnV0ZUNoYW5nZWQpOwogfQog
Cit2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFyaWFNb2RhbENoYW5nZShOb2RlKiBub2RlKQor
eworICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBpZiAoIW5vZGVIYXNSb2xlKG5vZGUsICJkaWFsb2ciKSAmJiAhbm9kZUhhc1JvbGUobm9kZSwg
ImFsZXJ0ZGlhbG9nIikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzdG9wQ2FjaGluZ0Nv
bXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuZmFzdEdldEF0dHJpYnV0ZShhcmlhX21vZGFsQXR0ciksICJ0
cnVlIikpIHsKKyAgICAgICAgLy8gQWRkIHRoZSBuZXdseSBtb2RpZmllZCBub2RlIHRvIHRoZSBt
b2RhbCBub2RlcyBzZXQsIGFuZCBzZXQgaXQgdG8gYmUgdGhlIGN1cnJlbnQgdmFsaWQgYXJpYSBt
b2RhbCBub2RlLgorICAgICAgICAvLyBXZSB3aWxsIHJlY29tcHV0ZSB0aGUgY3VycmVudCB2YWxp
ZCBhcmlhIG1vZGFsIG5vZGUgaW4gYXJpYU1vZGFsTm9kZSgpIHdoZW4gdGhpcyBub2RlIGlzIG5v
dCB2aXNpYmxlLgorICAgICAgICBtX2FyaWFNb2RhbE5vZGVzU2V0LmFkZChub2RlKTsKKyAgICAg
ICAgbV9jdXJyZW50QXJpYU1vZGFsTm9kZSA9IG5vZGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gUmVtb3ZlIHRoZSBub2RlIGZyb20gdGhlIG1vZGFsIG5vZGVzIHNldC4gVGhlcmUgbWlnaHQg
YmUgb3RoZXIgdmlzaWJsZSBtb2RhbCBub2Rlcywgc28gd2UgcmVjb21wdXRlIGhlcmUuCisgICAg
ICAgIG1fYXJpYU1vZGFsTm9kZXNTZXQucmVtb3ZlKG5vZGUpOworICAgICAgICB1cGRhdGVDdXJy
ZW50QXJpYU1vZGFsTm9kZSgpOworICAgIH0KKyAgICBzdGFydENhY2hpbmdDb21wdXRlZE9iamVj
dEF0dHJpYnV0ZXNVbnRpbFRyZWVNdXRhdGVzKCk7Cit9CisKIHZvaWQgQVhPYmplY3RDYWNoZTo6
bGFiZWxDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGlzPEhUTUxMYWJl
bEVsZW1lbnQ+KCplbGVtZW50KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw2ICsx
MjgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVTY3JvbGxlZFRvQW5jaG9yKGNvbnN0IE5v
ZGUqIGFuY2hvck5vZGUpOwogICAgIHZvaWQgaGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKE5vZGUq
KTsKICAgICB2b2lkIGhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3Kik7CisgICAgCisg
ICAgdm9pZCBoYW5kbGVBcmlhTW9kYWxDaGFuZ2UoTm9kZSopOworICAgIE5vZGUqIGFyaWFNb2Rh
bE5vZGUoKTsKIAogICAgIHZvaWQgaGFuZGxlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSwgRWxlbWVudCopOwogICAgIHZvaWQgcmVjb21wdXRlSXNJZ25vcmVk
KFJlbmRlck9iamVjdCogcmVuZGVyZXIpOwpAQCAtMjcxLDYgKzI3NCwxMSBAQCBwcml2YXRlOgog
ICAgIHZvaWQgaGFuZGxlTWVudU9wZW5lZChOb2RlKik7CiAgICAgdm9pZCBoYW5kbGVMaXZlUmVn
aW9uQ3JlYXRlZChOb2RlKik7CiAgICAgdm9pZCBoYW5kbGVNZW51SXRlbVNlbGVjdGVkKE5vZGUq
KTsKKyAgICAKKyAgICAvLyBhcmlhLW1vZGFsIHJlbGF0ZWQKKyAgICB2b2lkIGZpbmRBcmlhTW9k
YWxOb2RlcygpOworICAgIHZvaWQgdXBkYXRlQ3VycmVudEFyaWFNb2RhbE5vZGUoKTsKKyAgICBi
b29sIGlzTm9kZVZpc2libGUoTm9kZSopIGNvbnN0OwogCiAgICAgRG9jdW1lbnQmIG1fZG9jdW1l
bnQ7CiAgICAgSGFzaE1hcDxBWElELCBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4+IG1fb2Jq
ZWN0czsKQEAgLTI5Myw2ICszMDEsOSBAQCBwcml2YXRlOgogICAgIAogICAgIFRpbWVyIG1fbGl2
ZVJlZ2lvbkNoYW5nZWRQb3N0VGltZXI7CiAgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPEFjY2Vzc2li
aWxpdHlPYmplY3Q+PiBtX2xpdmVSZWdpb25PYmplY3RzU2V0OworICAgIAorICAgIE5vZGUqIG1f
Y3VycmVudEFyaWFNb2RhbE5vZGU7CisgICAgTGlzdEhhc2hTZXQ8Tm9kZSo+IG1fYXJpYU1vZGFs
Tm9kZXNTZXQ7CiAKICAgICBBWFRleHRTdGF0ZUNoYW5nZUludGVudCBtX3RleHRTZWxlY3Rpb25J
bnRlbnQ7CiAgICAgYm9vbCBtX2lzU3luY2hyb25pemluZ1NlbGVjdGlvbiB7IGZhbHNlIH07CkBA
IC0zNDgsNiArMzU5LDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5n
RQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlQWN0aXZlRGVzY2VuZGFudENoYW5n
ZWQoTm9kZSopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYUV4cGFu
ZGVkQ2hhbmdlKE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFy
aWFSb2xlQ2hhbmdlZChOb2RlKikgeyB9CitpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5k
bGVBcmlhTW9kYWxDaGFuZ2UoTm9kZSopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6
aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQoTm9kZSosIE5vZGUqKSB7IH0KIGlubGluZSB2
b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KikgeyB9
CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBFbGVtZW50KikgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDE5
MTU4NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5VGFibGUuaCIKICNpbmNsdWRlICJET01Ub2tlbkxpc3QuaCIKICNpbmNsdWRlICJFZGl0
b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJFdmVudEhhbmRs
ZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIu
aCIKQEAgLTE4NDYsNiArMTg0Nyw0NSBAQCBBY2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRTdGF0ZSBB
Y2Nlc3NpYmlsCiAgICAgcmV0dXJuIEFSSUFDdXJyZW50VHJ1ZTsKIH0KIAorYm9vbCBBY2Nlc3Np
YmlsaXR5T2JqZWN0Ojppc0FyaWFNb2RhbERlc2NlbmRhbnQoTm9kZSogYXJpYU1vZGFsTm9kZSkg
Y29uc3QKK3sKKyAgICBpZiAoIWFyaWFNb2RhbE5vZGUgfHwgIXRoaXMtPmVsZW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICh0aGlzLT5lbGVtZW50KCkgPT0gYXJp
YU1vZGFsTm9kZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQVJJQSAxLjEg
YXJpYS1tb2RhbCwgaW5kaWNhdGVzIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBtb2RhbCB3aGVuIGRp
c3BsYXllZC4KKyAgICAvLyBGb3IgdGhlIGRlY2VuZGFudHMgb2YgdGhlIG1vZGFsIG9iamVjdCwg
dGhleSBzaG91bGQgYWxzbyBiZSBjb25zaWRlcmVkIGFzIGFyaWEtbW9kYWw9dHJ1ZS4KKyAgICBm
b3IgKGF1dG8mIGFuY2VzdG9yIDogZWxlbWVudEFuY2VzdG9ycyh0aGlzLT5lbGVtZW50KCkpKSB7
CisgICAgICAgIGlmICgmYW5jZXN0b3IgPT0gYXJpYU1vZGFsTm9kZSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJp
bGl0eU9iamVjdDo6aWdub3JlZEZyb21BUklBTW9kYWxQcmVzZW5jZSgpIGNvbnN0Cit7CisgICAg
Ly8gV2Ugc2hvdWxkbid0IGlnbm9yZSB0aGUgdG9wIG5vZGUuCisgICAgaWYgKCFub2RlKCkgfHwg
IW5vZGUoKS0+cGFyZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
QVhPYmplY3RDYWNoZSogY2FjaGUgPSBheE9iamVjdENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIGFyaWFNb2RhbE5vZGUgaXMgdGhl
IGN1cnJlbnQgZGlzcGxheWVkIG1vZGFsIGRpYWxvZy4KKyAgICBOb2RlKiBhcmlhTW9kYWxOb2Rl
ID0gY2FjaGUtPmFyaWFNb2RhbE5vZGUoKTsKKyAgICBpZiAoIWFyaWFNb2RhbE5vZGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBXZSBvbmx5IHdhbnQgdG8gaWdub3JlIHRo
ZSBvYmplY3RzIHdpdGhpbiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgbW9kYWwgZGlhbG9nLgorICAg
IGlmIChhcmlhTW9kYWxOb2RlLT5kb2N1bWVudCgpLmZyYW1lKCkgIT0gdGhpcy0+ZnJhbWUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiAhaXNBcmlhTW9kYWxEZXNj
ZW5kYW50KGFyaWFNb2RhbE5vZGUpOworfQorCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omhh
c1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QKIHsKICAgICBOb2Rl
KiBub2RlID0gdGhpcy0+bm9kZSgpOwpAQCAtMjc4Niw2ICsyODI2LDkgQEAgQWNjZXNzaWJpbGl0
eU9iamVjdEluY2x1c2lvbiBBY2Nlc3NpYmlsaQogICAgIGlmIChpc0FSSUFIaWRkZW4oKSkKICAg
ICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKICAgICAKKyAgICBpZiAoaWdub3JlZEZyb21BUklB
TW9kYWxQcmVzZW5jZSgpKQorICAgICAgICByZXR1cm4gSWdub3JlT2JqZWN0OworICAgIAogICAg
IGlmIChpc1ByZXNlbnRhdGlvbmFsQ2hpbGRPZkFyaWFSb2xlKCkpCiAgICAgICAgIHJldHVybiBJ
Z25vcmVPYmplY3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYzMSw2ICs2MzEsMTAgQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
cm9sZURlc2NyaXB0aW9uKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eUFSSUFDdXJyZW50U3Rh
dGUgYXJpYUN1cnJlbnRTdGF0ZSgpIGNvbnN0OwogICAgIAorICAgIC8vIFRoaXMgZnVuY3Rpb24g
Y2hlY2tzIGlmIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGlnbm9yZWQgd2hlbiB0aGVyZSdzIGEgbW9k
YWwgZGlhbG9nIGRpc3BsYXllZC4KKyAgICBib29sIGlnbm9yZWRGcm9tQVJJQU1vZGFsUHJlc2Vu
Y2UoKSBjb25zdDsKKyAgICBib29sIGlzQXJpYU1vZGFsRGVzY2VuZGFudChOb2RlKikgY29uc3Q7
CisgICAgCiAgICAgYm9vbCBzdXBwb3J0c0FSSUFTZXRTaXplKCkgY29uc3Q7CiAgICAgYm9vbCBz
dXBwb3J0c0FSSUFQb3NJblNldCgpIGNvbnN0OwogICAgIGludCBhcmlhU2V0U2l6ZSgpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHJldmlz
aW9uIDE5MTU4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIGFyaWEtbGFiZWxlZGJ5CiBhcmlhLWxh
YmVsbGVkYnkKIGFyaWEtbGV2ZWwKIGFyaWEtbGl2ZQorYXJpYS1tb2RhbAogYXJpYS1tdWx0aWxp
bmUKIGFyaWEtbXVsdGlzZWxlY3RhYmxlCiBhcmlhLW9yaWVudGF0aW9uCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxOTE1ODYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxNS0xMS0wMiAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgor
CisgICAgICAgIEFYOiBBZGQgc3VwcG9ydCBmb3IgQVJJQSAxLjEgYXR0cmlidXRlICdhcmlhLW1v
ZGFsJyBmb3IgZGlhbG9nIGFuZCBhbGVydGRpYWxvZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4NTY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtbXVsdGlw
bGUtZGlhbG9ncy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
YXJpYS1tb2RhbC1tdWx0aXBsZS1kaWFsb2dzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvYXJpYS1tb2RhbC5odG1sOiBBZGRlZC4KKwogMjAxNS0xMC0yNiAgWGFiaWVyIFJv
ZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTdHJlYW1z
IEFQSV0gSW1wbGVtZW50IGFib3J0IG1ldGhvZCBvbiB3cml0YWJsZSBzdHJlYW1zCkluZGV4OiBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1tb2RhbC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK1RoaXMgdGVzdHMgdGhh
dCBhcmlhLW1vZGFsIG9uIGRpYWxvZyBtYWtlcyBvdGhlciBlbGVtZW50cyBpbmVydC4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBp
cyBmYWxzZQorUEFTUyBiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIGlzIHRydWUKK1BBU1MgYmFja2dy
b3VuZEFjY2Vzc2libGUoKSBpcyBmYWxzZQorUEFTUyBva0J0bi5pc0lnbm9yZWQgaXMgZmFsc2UK
K1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyB0cnVlCitQQVNTIGJhY2tncm91bmRBY2Nl
c3NpYmxlKCkgaXMgdHJ1ZQorUEFTUyBiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIGlzIGZhbHNlCitQ
QVNTIGJhY2tncm91bmRBY2Nlc3NpYmxlKCkgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitPdGhlciBwYWdlIGNvbnRlbnQgd2l0aCBhIGR1
bW15IGZvY3VzYWJsZSBlbGVtZW50CisKK0Rpc3BsYXkgYSBkaWFsb2cKSW5kZXg6IExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1tb2RhbC1tdWx0aXBsZS1kaWFsb2dzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtbXVs
dGlwbGUtZGlhbG9ncy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L2FyaWEtbW9kYWwtbXVsdGlwbGUtZGlhbG9ncy1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAorVGhpcyB0ZXN0cyB0aGF0IGFyaWEtbW9kYWwg
d29ya3MgY29ycmVjdGx5IG9uIG11bHRpcGxlIGRpYWxvZ3MKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyB0cnVlCitQQVNTIGJh
Y2tncm91bmRBY2Nlc3NpYmxlKCkgaXMgZmFsc2UKK1BBU1MgZGlhbG9nMUFjY2Vzc2libGUoKSBp
cyB0cnVlCitQQVNTIGJhY2tncm91bmRBY2Nlc3NpYmxlKCkgaXMgZmFsc2UKK1BBU1MgZGlhbG9n
MUFjY2Vzc2libGUoKSBpcyBmYWxzZQorUEFTUyBjbG9zZUJ0bi5pc0lnbm9yZWQgaXMgZmFsc2UK
K1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyBmYWxzZQorUEFTUyBkaWFsb2cxQWNjZXNz
aWJsZSgpIGlzIHRydWUKK1BBU1MgYmFja2dyb3VuZEFjY2Vzc2libGUoKSBpcyB0cnVlCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK090aGVyIHBhZ2Ug
Y29udGVudCB3aXRoIGEgZHVtbXkgZm9jdXNhYmxlIGVsZW1lbnQKKworRGlzcGxheSBhIGRpYWxv
ZwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLW11bHRpcGxlLWRp
YWxvZ3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEt
bW9kYWwtbXVsdGlwbGUtZGlhbG9ncy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLW11bHRpcGxlLWRpYWxvZ3MuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDk0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RU
RCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxzdHlsZT4KKy5ib3gtaGlkZGVu
IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorPC9zdHlsZT4KKworPGJvZHkgaWQ9ImJvZHkiPgor
Cis8ZGl2IGlkPSJiZyI+Cis8cCBpZD0iYmdDb250ZW50Ij5PdGhlciBwYWdlIGNvbnRlbnQgd2l0
aCA8YSBocmVmPSIjIj5hIGR1bW15IGZvY3VzYWJsZSBlbGVtZW50PC9hPjwvcD4KKzxwPjxhIG9u
Y2xpY2s9InRvZ2dsZURpYWxvZyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm94JyksJ3Nob3cn
KTsgcmV0dXJuIGZhbHNlOyIgaHJlZj0iIyIgcm9sZT0iYnV0dG9uIiBpZD0iZGlzcGxheUJ0biI+
RGlzcGxheSBhIGRpYWxvZzwvYT48L3A+Cis8L2Rpdj4KKworPGRpdiByb2xlPSJkaWFsb2ciIGFy
aWEtbGFiZWxsZWRieT0ibXlEaWFsb2ciIGlkPSJib3giIGNsYXNzPSJib3gtaGlkZGVuIiB0YWJp
bmRleD0iLTEiPgorICAgIDxoMyBpZD0ibXlEaWFsb2ciPkp1c3QgYW4gZXhhbXBsZS48L2gzPgor
ICAgIDxidXR0b24gaWQ9Im9rIiBvbmNsaWNrPSJ0b2dnbGVEaWFsb2coZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2JveCcpLCdoaWRlJyk7IiBjbGFzcz0iY2xvc2UtYnV0dG9uIj5PSzwvYnV0dG9u
PgorICAgIDxidXR0b24gb25jbGljaz0idG9nZ2xlRGlhbG9nKGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdib3gyJyksJ3Nob3cnKTsiIGlkPSJuZXciPk5ldzwvYnV0dG9uPgorPC9kaXY+CisKKzxk
aXYgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9Im15RGlhbG9nMiIgaWQ9ImJveDIiIGNs
YXNzPSJib3gtaGlkZGVuIiB0YWJpbmRleD0iLTEiPgorICAgIDxoMyBpZD0ibXlEaWFsb2cyIj5B
bm90aGVyIGRpYWxvZy48L2gzPgorICAgIDxidXR0b24gaWQ9ImNsb3NlIiBvbmNsaWNrPSJ0b2dn
bGVEaWFsb2coZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JveDInKSwnaGlkZScpOyIgY2xhc3M9
ImNsb3NlLWJ1dHRvbiI+Q2xvc2U8L2J1dHRvbj4KKzwvZGl2PgorCisKKzxzY3JpcHQ+CisKKyAg
ICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGFyaWEtbW9kYWwgd29ya3MgY29ycmVjdGx5
IG9uIG11bHRpcGxlIGRpYWxvZ3MiKTsKKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIpIHsKKyAgICAgICAgLy8gQmFja2dyb3VuZCBzaG91bGQgYmUgYWNjZXNzaWJsZSBh
ZnRlciBsb2FkaW5nLgorICAgICAgICBzaG91bGRCZVRydWUoImJhY2tncm91bmRBY2Nlc3NpYmxl
KCkiKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsaWNrIHRoZSBkaXNwbGF5IGJ1dHRvbiwgZGlh
bG9nMSBzaG93cyBhbmQgYmFja2dyb3VuZCBiZWNvbWVzIHVuYWNjZXNzaWJsZS4KKyAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpc3BsYXlCdG4iKS5jbGljaygpOworICAgICAgICBz
aG91bGRCZUZhbHNlKCJiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIik7CisgICAgICAgIHNob3VsZEJl
VHJ1ZSgiZGlhbG9nMUFjY2Vzc2libGUoKSIpOworICAgICAgICAKKyAgICAgICAgLy8gQ2xpY2sg
dGhlIG5ldyBidXR0b24sIGRpYWxvZzIgc2hvd3MgYW5kIGJhY2tncm91bmQvZGlhbG9nMSBzaG91
bGQgYm90aCBiZSB1bmFjY2Vzc2libGUuCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJuZXciKS5jbGljaygpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJiYWNrZ3JvdW5kQWNjZXNz
aWJsZSgpIik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoImRpYWxvZzFBY2Nlc3NpYmxlKCkiKTsK
KyAgICAgICAgdmFyIGNsb3NlQnRuID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJs
ZUVsZW1lbnRCeUlkKCJjbG9zZSIpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJjbG9zZUJ0bi5p
c0lnbm9yZWQiKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsb3NlIGRpYWxvZzIsIGRpYWxvZzEg
c2hvdWxkIGJlY29tZSBhY2Nlc3NpYmxlIGJ1dCBub3QgdGhlIGJhY2tncm91bmQKKyAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsb3NlIikuY2xpY2soKTsKKyAgICAgICAgc2hvdWxk
QmVGYWxzZSgiYmFja2dyb3VuZEFjY2Vzc2libGUoKSIpOworICAgICAgICBzaG91bGRCZVRydWUo
ImRpYWxvZzFBY2Nlc3NpYmxlKCkiKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsb3NlIGRpYWxv
ZzEsIGJhY2tncm91bmQgc2hvdWxkIGJlIGFjY2Vzc2libGUuCisgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJvayIpLmNsaWNrKCk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiYmFja2dy
b3VuZEFjY2Vzc2libGUoKSIpOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBiYWNrZ3JvdW5k
QWNjZXNzaWJsZSgpIHsKKyAgICAgICAgdmFyIGRpc3BsYXlCdG4gPSBhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRpc3BsYXlCdG4iKTsKKyAgICAgICAgdmFy
IGJnQ29udGVudCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJ
ZCgiYmdDb250ZW50Iik7CisgICAgICAgIGlmICghZGlzcGxheUJ0biB8fCAhYmdDb250ZW50KQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gIWRpc3BsYXlCdG4uaXNJ
Z25vcmVkICYmICFiZ0NvbnRlbnQuaXNJZ25vcmVkOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlv
biBkaWFsb2cxQWNjZXNzaWJsZSgpIHsKKyAgICAgICAgIHZhciBva0J0biA9IGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgib2siKTsKKyAgICAgICAgIHZhciBu
ZXdCdG4gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoIm5l
dyIpOworICAgICAgICAgaWYgKCFva0J0biB8fCAhbmV3QnRuKQorICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgIHJldHVybiAhb2tCdG4uaXNJZ25vcmVkICYmICFuZXdCdG4uaXNJ
Z25vcmVkOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiB0b2dnbGVEaWFsb2coZGlhbG9nLCBz
aCkgeworICAgIGlmIChzaCA9PSAic2hvdyIpIHsKKyAgICAgICAgLy8gc2hvdyB0aGUgZGlhbG9n
IAorICAgICAgICBkaWFsb2cuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CisgICAgICAgIGRpYWxv
Zy5zZXRBdHRyaWJ1dGUoImFyaWEtbW9kYWwiLCAidHJ1ZSIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICBkaWFsb2cuc2V0QXR0
cmlidXRlKCJhcmlhLW1vZGFsIiwgImZhbHNlIik7IAorICAgIH0KK30KKworPC9zY3JpcHQ+CisK
KworPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1tb2RhbC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1tb2RhbC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLW1vZGFsLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBpZD0iYm9keSI+CisKKzxkaXYgaWQ9
ImJnIj4KKzxwIGlkPSJiZ0NvbnRlbnQiPk90aGVyIHBhZ2UgY29udGVudCB3aXRoIDxhIGhyZWY9
IiMiPmEgZHVtbXkgZm9jdXNhYmxlIGVsZW1lbnQ8L2E+PC9wPgorPHA+PGEgb25jbGljaz0idG9n
Z2xlRGlhbG9nKCdzaG93Jyk7IHJldHVybiBmYWxzZTsiIGhyZWY9IiMiIHJvbGU9ImJ1dHRvbiIg
aWQ9ImRpc3BsYXlCdG4iPkRpc3BsYXkgYSBkaWFsb2c8L2E+PC9wPgorPC9kaXY+CisKKzxkaXYg
cm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9Im15RGlhbG9n
IiBpZD0iYm94IiBjbGFzcz0iYm94LWhpZGRlbiIgdGFiaW5kZXg9Ii0xIj4KKyAgICA8aDMgaWQ9
Im15RGlhbG9nIj5KdXN0IGFuIGV4YW1wbGUuPC9oMz4KKyAgICA8YnV0dG9uIGlkPSJvayIgb25j
bGljaz0idG9nZ2xlRGlhbG9nKCdoaWRlJyk7IiBjbGFzcz0iY2xvc2UtYnV0dG9uIj5PSzwvYnV0
dG9uPgorICAgIDxidXR0b24gb25jbGljaz0idG9nZ2xlRGlhbG9nKCdoaWRlJyk7IiBjbGFzcz0i
Y2xvc2UtYnV0dG9uIj5DYW5jZWw8L2J1dHRvbj4KKzwvZGl2PgorCisKKzxzY3JpcHQ+CisKKyAg
ICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGFyaWEtbW9kYWwgb24gZGlhbG9nIG1ha2Vz
IG90aGVyIGVsZW1lbnRzIGluZXJ0LiIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikgeworICAgICAgICAvLyBCYWNrZ3JvdW5kIHNob3VsZCBiZSB1bmFjY2Vzc2li
bGUgYWZ0ZXIgbG9hZGluZywgc2luY2UgdGhlIAorICAgICAgICAvLyBkaWFsb2cgaXMgZGlzcGxh
eWVkIGFuZCBhcmlhLW1vZGFsPXRydWUuCisgICAgICAgIHNob3VsZEJlRmFsc2UoImJhY2tncm91
bmRBY2Nlc3NpYmxlKCkiKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsb3NlIHRoZSBkaWFsb2cs
IGJhY2tncm91bmQgc2hvdWxkIGJlIGFjY2Vzc2libGUuCisgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJvayIpLmNsaWNrKCk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiYmFja2dyb3Vu
ZEFjY2Vzc2libGUoKSIpOworICAgICAgICAKKyAgICAgICAgLy8gQ2xpY2sgdGhlIGRpc3BsYXkg
YnV0dG9uLCBkaWFsb2cgc2hvd3MgYW5kIGJhY2tncm91bmQgYmVjb21lcyB1bmFjY2Vzc2libGUu
CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXNwbGF5QnRuIikuY2xpY2soKTsK
KyAgICAgICAgc2hvdWxkQmVGYWxzZSgiYmFja2dyb3VuZEFjY2Vzc2libGUoKSIpOworICAgICAg
ICB2YXIgb2tCdG4gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5
SWQoIm9rIik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoIm9rQnRuLmlzSWdub3JlZCIpOworICAg
ICAgICAKKyAgICAgICAgLy8gVGVzdCB0aGUgY2FzZSB0aGF0IGFyaWEtbW9kYWw9dHJ1ZSB3aGVu
IGRpYWxvZyBpcyBoaWRkZW4gd29uJ3QgYWZmZWN0IG90aGVyIG9iamVjdHMuCisgICAgICAgIC8v
IDEuIERpYWxvZyBub3QgcmVuZGVyZWQKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Im9rIikuY2xpY2soKTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJveCIpLnNl
dEF0dHJpYnV0ZSgiYXJpYS1tb2RhbCIsICJ0cnVlIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgi
YmFja2dyb3VuZEFjY2Vzc2libGUoKSIpOworICAgICAgICAvLyAyLiBEaWFsb2cgaXMgYXJpYSBo
aWRkZW4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpc3BsYXlCdG4iKS5jbGlj
aygpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm94Iikuc2V0QXR0cmlidXRl
KCJhcmlhLWhpZGRlbiIsICJ0cnVlIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiYmFja2dyb3Vu
ZEFjY2Vzc2libGUoKSIpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm94Iiku
c2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsICJmYWxzZSIpOworICAgICAgICBzaG91bGRCZUZh
bHNlKCJiYWNrZ3JvdW5kQWNjZXNzaWJsZSgpIik7CisgICAgICAgIAorICAgICAgICAvLyBUZXN0
IG1vZGFsIGRpYWxvZyBpcyByZW1vdmVkIGZyb20gRE9NIHRyZWUuCisgICAgICAgIHZhciBkaWFs
b2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm94Iik7CisgICAgICAgIGRpYWxvZy5wYXJl
bnROb2RlLnJlbW92ZUNoaWxkKGRpYWxvZyk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiYmFja2dy
b3VuZEFjY2Vzc2libGUoKSIpOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBiYWNrZ3JvdW5k
QWNjZXNzaWJsZSgpIHsKKyAgICAgICAgdmFyIGRpc3BsYXlCdG4gPSBhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRpc3BsYXlCdG4iKTsKKyAgICAgICAgdmFy
IGJnQ29udGVudCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJ
ZCgiYmdDb250ZW50Iik7CisgICAgICAgIAorICAgICAgICBpZiAoIWRpc3BsYXlCdG4gfHwgIWJn
Q29udGVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiAhZGlzcGxheUJ0bi5pc0lnbm9yZWQgJiYgIWJnQ29udGVudC5pc0lnbm9yZWQ7CisgICAg
fQorICAgIAorICAgIGZ1bmN0aW9uIHRvZ2dsZURpYWxvZyhzaCkgeworICAgICAgICBkaWFsb2cg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm94Iik7CisgICAgaWYgKHNoID09ICJzaG93Iikg
eworICAgICAgICAvLyBzaG93IHRoZSBkaWFsb2cgCisgICAgICAgIGRpYWxvZy5zdHlsZS5kaXNw
bGF5ID0gJ2Jsb2NrJzsKKyAgICAgICAgZGlhbG9nLnNldEF0dHJpYnV0ZSgiYXJpYS1tb2RhbCIs
ICJ0cnVlIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGlhbG9nLnN0eWxlLmRpc3BsYXkgPSAn
bm9uZSc7CisgICAgICAgIGRpYWxvZy5zZXRBdHRyaWJ1dGUoImFyaWEtbW9kYWwiLCAiZmFsc2Ui
KTsgCisgICAgfQorfQorCis8L3NjcmlwdD4KKworCis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264702</attachid>
            <date>2015-11-03 11:29:48 -0800</date>
            <delta_ts>2015-11-03 13:29:48 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>1514</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE5MTk2MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE1LTExLTAzICBOYW4gV2FuZyAgPG5fd2Fu
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFkZCBzdXBwb3J0IGZvciBBUklBIDEuMSBhdHRy
aWJ1dGUgJ2FyaWEtbW9kYWwnIGZvciBkaWFsb2cgYW5kIGFsZXJ0ZGlhbG9nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg1NjYKKworICAgICAgICBT
a2lwIGZhaWxpbmcgdGVzdHMgb24gd2luZG93cyBwbGF0Zm9ybS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9UZXN0RXhwZWN0
YXRpb25zOgorCiAyMDE1LTExLTAyICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUu
Y29tPgogCiAgICAgICAgIFRhcHBpbmcgKmJlbG93KiBzb21lIDxpbnB1dD5zIGNhbiBmb2N1cyB0
aGVtIGluIE1vYmlsZSBTYWZhcmkKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0
RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0
RXhwZWN0YXRpb25zCShyZXZpc2lvbiAxOTE5NTgpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW4vVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtMTcwMiw2ICsxNzAyLDEwIEBA
IHdlYmtpdC5vcmcvYi8xNDA4NjkgWyBEZWJ1ZyBdIGFjY2Vzc2liaWwKIHdlYmtpdC5vcmcvYi8x
NDY5MDMgYWNjZXNzaWJpbGl0eS9hcmlhLXRhYmxlLWhpZXJhcmNoeS5odG1sIFsgU2tpcCBdCiB3
ZWJraXQub3JnL2IvMTQ2OTAzIGFjY2Vzc2liaWxpdHkvcm9sZXMtdGFibGUtYW5kLWNlbGwuaHRt
bCBbIFNraXAgXQogCisjIFNraXAgYXJpYS1tb2RhbCB0ZXN0cyBmb3Igd2luCit3ZWJraXQub3Jn
L2IvMTM4NTY2IGFjY2Vzc2liaWxpdHkvYXJpYS1tb2RhbC5odG1sIFsgU2tpcCBdCit3ZWJraXQu
b3JnL2IvMTM4NTY2IGFjY2Vzc2liaWxpdHkvYXJpYS1tb2RhbC1tdWx0aXBsZS1kaWFsb2dzLmh0
bWwgWyBTa2lwIF0KKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjICAgRW5kIEFjY2Vzc2liaWxpdHkgSXNzdWVzICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>