<?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>126915</bug_id>
          
          <creation_ts>2014-01-13 10:10:26 -0800</creation_ts>
          <short_desc>AX: Modernize AccessibilityChildrenVector loops</short_desc>
          <delta_ts>2014-10-30 23:29:39 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mario</cc>
    
    <cc>rniwa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>967384</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-01-13 10:10:26 -0800</bug_when>
    <thetext>We can use auto and modern style loops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967386</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-01-13 10:12:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/15805367&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967463</commentid>
    <comment_count>2</comment_count>
      <attachid>221076</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-01-13 13:02:40 -0800</bug_when>
    <thetext>Created attachment 221076
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967467</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-13 13:04:19 -0800</bug_when>
    <thetext>Attachment 221076 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/accessibility/AXObjectCache.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityARIAGrid.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityARIAGridCell.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityListBox.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityListBoxOption.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityMenuList.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityMenuListPopup.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityNodeObject.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityObject.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityRenderObject.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityTable.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityTableColumn.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityTableHeaderContainer.cpp&apos;, u&apos;Source/WebCore/accessibility/AccessibilityTableRow.cpp&apos;, u&apos;Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm&apos;, u&apos;Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm&apos;, u&apos;Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/accessibility/AccessibilityTable.cpp:508:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967470</commentid>
    <comment_count>4</comment_count>
      <attachid>221077</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-01-13 13:06:30 -0800</bug_when>
    <thetext>Created attachment 221077
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967846</commentid>
    <comment_count>5</comment_count>
      <attachid>221166</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-01-14 08:44:36 -0800</bug_when>
    <thetext>Created attachment 221166
patch

Change from auto to auto&amp; where appropriate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967853</commentid>
    <comment_count>6</comment_count>
      <attachid>221166</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-01-14 09:05:50 -0800</bug_when>
    <thetext>Comment on attachment 221166
patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:127
&gt; +    for (const auto&amp; object : m_objects) {
&gt; +        AccessibilityObject* axObject = object.value.get();
&gt; +        detachWrapper(axObject, CacheDestroyed);
&gt; +        axObject-&gt;detach(CacheDestroyed);
&gt; +        removeAXID(axObject);
&gt;      }

This can just iterate over m_objects.values(), then you don&apos;t need the object.value.get().

&gt; Source/WebCore/accessibility/AccessibilityARIAGridCell.cpp:87
&gt; +        auto&amp; siblings = parent-&gt;children();

I think this can be const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityListBoxOption.cpp:223
&gt; +    auto&amp; listItems = selectElement-&gt;listItems();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityMenuList.cpp:111
&gt; +    auto&amp; childObjects = children();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:338
&gt; +        auto&amp; children = child-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:420
&gt; +    auto&amp; searchChildren = object-&gt;isAccessibilityTable() ? toAccessibilityTable(object)-&gt;rows() : object-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:3553
&gt; +    auto&amp; children = this-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:3566
&gt; +    auto&amp; children = this-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:3580
&gt; +    auto&amp; children = this-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:3604
&gt; +    auto&amp; children = this-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:3619
&gt; +    auto&amp; children = this-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:3636
&gt; +    auto&amp; children = this-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:3649
&gt; +    auto&amp; children = this-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:3664
&gt; +    auto&amp; children = this-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityTable.cpp:508
&gt; +        auto&amp; children = m_rows[rowIndex]-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/AccessibilityTableRow.cpp:120
&gt; +    auto&amp; rowChildren = children();

const auto&amp;.

&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:350
&gt; +    auto&amp; children = m_object-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:370
&gt; +    auto&amp; children = m_object-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:1076
&gt; +    auto&amp; children = m_object-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:82
&gt; +    for (auto&amp; pair : pairs) {

It looks like this can be const auto&amp;.

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:166
&gt; +    for (auto text : textOrder) {

const auto&amp;.

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:195
&gt; +    for (auto text : textOrder) {

const auto&amp;.

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:221
&gt; +    for (auto text : textOrder) {

const auto&amp;.

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2378
&gt; +            auto&amp; children = m_object-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:3612
&gt; +    auto&amp; children = m_object-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:3638
&gt; +        auto&amp; children = m_object-&gt;children();

const auto&amp;.

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:3670
&gt; +        auto&amp; children = m_object-&gt;children();

const auto&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967857</commentid>
    <comment_count>7</comment_count>
      <attachid>221166</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-01-14 09:09:55 -0800</bug_when>
    <thetext>Comment on attachment 221166
patch

Attachment 221166 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/6323373109936128</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967867</commentid>
    <comment_count>8</comment_count>
      <attachid>221166</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-01-14 09:35:46 -0800</bug_when>
    <thetext>Comment on attachment 221166
patch

Attachment 221166 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/5036550979059712</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967881</commentid>
    <comment_count>9</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-01-14 10:07:57 -0800</bug_when>
    <thetext>Thanks Anders

http://trac.webkit.org/changeset/161979</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045233</commentid>
    <comment_count>10</comment_count>
      <attachid>221166</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-30 23:17:45 -0700</bug_when>
    <thetext>Comment on attachment 221166
patch

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

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1650
&gt; +    for (const auto&amp; selectedRow : selectedRows)

I don&apos;t believe this change is correct. It ignores the count variable that is set above depending on isMultiSelectable() so I am assuming we can now select more than 1 row even if it is not multiSelectable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045234</commentid>
    <comment_count>11</comment_count>
      <attachid>221166</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-10-30 23:19:12 -0700</bug_when>
    <thetext>Comment on attachment 221166
patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1650
&gt;&gt; +    for (const auto&amp; selectedRow : selectedRows)
&gt; 
&gt; I don&apos;t believe this change is correct. It ignores the count variable that is set above depending on isMultiSelectable() so I am assuming we can now select more than 1 row even if it is not multiSelectable.

I think you&apos;re right too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045235</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-30 23:22:27 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 221166 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=221166&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1650
&gt; &gt;&gt; +    for (const auto&amp; selectedRow : selectedRows)
&gt; &gt; 
&gt; &gt; I don&apos;t believe this change is correct. It ignores the count variable that is set above depending on isMultiSelectable() so I am assuming we can now select more than 1 row even if it is not multiSelectable.
&gt; 
&gt; I think you&apos;re right too

This was reported by clang static analyzer.
Would you mind making the fix? I don&apos;t feel like writing the layout test for this :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045238</commentid>
    <comment_count>13</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-10-30 23:24:56 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Comment on attachment 221166 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=221166&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1650
&gt; &gt; &gt;&gt; +    for (const auto&amp; selectedRow : selectedRows)
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t believe this change is correct. It ignores the count variable that is set above depending on isMultiSelectable() so I am assuming we can now select more than 1 row even if it is not multiSelectable.
&gt; &gt; 
&gt; &gt; I think you&apos;re right too
&gt; 
&gt; This was reported by clang static analyzer.
&gt; Would you mind making the fix? I don&apos;t feel like writing the layout test for
&gt; this :)

https://bugs.webkit.org/show_bug.cgi?id=138241</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045240</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-30 23:29:39 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; Comment on attachment 221166 [details]
&gt; &gt; &gt; patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=221166&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1650
&gt; &gt; &gt; &gt;&gt; +    for (const auto&amp; selectedRow : selectedRows)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I don&apos;t believe this change is correct. It ignores the count variable that is set above depending on isMultiSelectable() so I am assuming we can now select more than 1 row even if it is not multiSelectable.
&gt; &gt; &gt; 
&gt; &gt; &gt; I think you&apos;re right too
&gt; &gt; 
&gt; &gt; This was reported by clang static analyzer.
&gt; &gt; Would you mind making the fix? I don&apos;t feel like writing the layout test for
&gt; &gt; this :)
&gt; 
&gt; https://bugs.webkit.org/show_bug.cgi?id=138241

Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221076</attachid>
            <date>2014-01-13 13:02:40 -0800</date>
            <delta_ts>2014-01-13 13:06:30 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>43194</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTkwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDE0LTAxLTEzICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IE1vZGVybml6ZSBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbG9vcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjkxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZSBhcHByb3ByaWF0ZSBmb3IgbG9vcHMgdG8g
dXNlIHRoZSBuZXcgc3R5bGUuCisgICAgICAgIFVzZSBhdXRvIHdoZXJlIGFwcHJvcHJpYXRlLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRJbWFnZU1hcFVJRWxlbWVudCk6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRSb3dEZXNjZW5kYW50KToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cm93SW5kZXhSYW5nZSk6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRSb3dzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkQnlSb3cp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpwYXJlbnRUYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OmhlYWRlck9i
amVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveDo6YWRkQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6OnNldFNlbGVjdGVkQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6OnNlbGVjdGVkQ2hp
bGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246Omxp
c3RCb3hPcHRpb25JbmRleCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0Ojpk
aWRVcGRhdGVBY3RpdmVPcHRpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU1lbnVMaXN0UG9wdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1l
bnVMaXN0UG9wdXA6OmFkZENoaWxkcmVuKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjppbnNlcnRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6c2VsZWN0ZWRSYWRpb0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRUYWJJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphcmlhTGFiZWxlZEJ5VGV4dCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGVuZENoaWxkcmVuVG9BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpjbGVhckNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmFyaWFUcmVlUm93cyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjphcmlhVHJlZUl0ZW1Db250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OmFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVudEFjY2Vzc2liaWxpdHlIaXRUZXN0KToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkUmFkaW9CdXR0b25Hcm91
cE1lbWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
YXJpYUZsb3dUb0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzVGFiSXRlbVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkUm93cyk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhT3duc0VsZW1lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlJbWFnZU1hcEhp
dFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
UmVtb3RlU1ZHQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6dXBkYXRlQXR0YWNobWVudFZpZXdQYXJlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZEhpZGRlbkNoaWxkcmVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFTZWxlY3RlZFJvd3MpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJpYUxpc3Rib3hT
ZWxlY3RlZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmFyaWFMaXN0Ym94VmlzaWJsZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRhYkNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhSYWRpY2FuZE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoUm9vdEluZGV4T2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhOdW1l
cmF0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6bWF0aERlbm9taW5hdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6Om1hdGhVbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoT3Zlck9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoQmFzZU9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoU3Vic2NyaXB0T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhTdXBlcnNj
cmlwdE9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpjb2x1bW5IZWFkZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6cm93SGVhZGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnZpc2libGVSb3dzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpjZWxsRm9yQ29sdW1uQW5kUm93KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46OmhlYWRlck9iamVjdCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyOjphZGRDaGls
ZHJlbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlUm93OjpoZWFkZXJPYmplY3Qp
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nl
c3NpYmlsaXR5RWxlbWVudEF0SW5kZXg6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGluZGV4T2ZBY2Nlc3NpYmlsaXR5RWxlbWVudDpdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgY29udGFpbnNVbm5hdHVyYWxseVNlZ21lbnRl
ZENoaWxkcmVuXSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJCYXNlLm1tOgorICAgICAgICAoY29udmVydE1hdGhQYWlyc1RvTlNBcnJh
eSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBhY2Nlc3Np
YmlsaXR5VGl0bGVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJC
YXNlIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckJhc2UgYWNjZXNzaWJpbGl0eUhlbHBUZXh0XSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06Cisg
ICAgICAgIChjb252ZXJ0VG9OU0FycmF5KToKKyAgICAgICAgKGNvbnZlcnRTdHJpbmdzVG9OU0Fy
cmF5KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxkOl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVDb3VudDpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUFycmF5QXR0cmlidXRlVmFsdWVzOmluZGV4Om1heENvdW50Ol0pOgorCiAyMDE0LTAxLTEzICBE
YW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgdWludDhfdCBz
cGVjaWFsaXphdGlvbiBmb3IgV2ViQ29yZTo6d3JpdGVMaXR0bGVFbmRpYW4oKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lv
biAxNjE4OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTUgKzE0MiwxMiBAQAogICAgIGlmICghYXhSZW5k
ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBpbWFnZUNoaWxkcmVuID0gYXhS
ZW5kZXJJbWFnZS0+Y2hpbGRyZW4oKTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IGltYWdlQ2hpbGRy
ZW4uc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBjb3VudDsgKytrKSB7Ci0g
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkID0gaW1hZ2VDaGlsZHJlbltrXS5nZXQo
KTsKKyAgICBmb3IgKGF1dG8gY2hpbGQgOiBheFJlbmRlckltYWdlLT5jaGlsZHJlbigpKSB7CiAg
ICAgICAgIGlmICghY2hpbGQtPmlzSW1hZ2VNYXBMaW5rKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgCi0gICAgICAgIGlmICh0b0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsoY2hp
bGQpLT5hcmVhRWxlbWVudCgpID09IGFyZWFFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIGNo
aWxkOworICAgICAgICBpZiAodG9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rKGNoaWxkLmdldCgp
KS0+YXJlYUVsZW1lbnQoKSA9PSBhcmVhRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBjaGls
ZC5nZXQoKTsKICAgICB9ICAgIAogICAgIAogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNw
cAkocmV2aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5QVJJQUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMCArODgsOCBAQAog
ICAgIGlmICghcm93Q2hpbGQtPmlzVGFibGVSb3coKSkgewogICAgICAgICAvLyBBbHRob3VnaCBh
ICJncmlkIiBzaG91bGQgaGF2ZSByb3dzIGFzIGl0cyBkaXJlY3QgZGVzY2VuZGFudHMsIGlmIHRo
aXMgaXMgbm90IGEgdGFibGUgcm93LAogICAgICAgICAvLyBkaXZlIGRlZXBlciBpbnRvIHRoZSBk
ZXNjZW5kYW50cyB0byB0cnkgdG8gZmluZCBhIHZhbGlkIHJvdy4KLSAgICAgICAgY29uc3QgQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IHJvd0NoaWxkLT5jaGlsZHJlbigp
OwotICAgICAgICBzaXplX3QgbGVuZ3RoID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgYWRkUm93RGVzY2Vu
ZGFudChjaGlsZHJlbltpXS5nZXQoKSwgYXBwZW5kZWRSb3dzLCBjb2x1bW5Db3VudCk7CisgICAg
ICAgIGZvciAoYXV0byBjaGlsZCA6IHJvd0NoaWxkLT5jaGlsZHJlbigpKQorICAgICAgICAgICAg
YWRkUm93RGVzY2VuZGFudChjaGlsZC5nZXQoKSwgYXBwZW5kZWRSb3dzLCBjb2x1bW5Db3VudCk7
CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFRhYmxlQ2VsbENoaWxkKHJvd0NoaWxkLCBhcHBlbmRl
ZFJvd3MsIGNvbHVtbkNvdW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcAkocmV2aXNp
b24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQAogICAgICAg
ICBpZiAoIWNvbHVtbkNvdW50KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvbnN0
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgc2libGluZ3MgPSBwYXJlbnQtPmNoaWxkcmVu
KCk7CisgICAgICAgIGF1dG8mIHNpYmxpbmdzID0gcGFyZW50LT5jaGlsZHJlbigpOwogICAgICAg
ICB1bnNpZ25lZCBjaGlsZHJlblNpemUgPSBzaWJsaW5ncy5zaXplKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgayA9IDA7IGsgPCBjaGlsZHJlblNpemU7ICsraykgewogICAgICAgICAgICAgaWYg
KHNpYmxpbmdzW2tdLmdldCgpID09IHRoaXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAJKHJl
dmlzaW9uIDE2MTg5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQAogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgdW5zaWduZWQgbGV2ZWwgPSBoaWVyYXJjaGljYWxMZXZl
bCgpOwotICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgYWxsUm93cyA9IHRvQWNjZXNz
aWJpbGl0eVRhYmxlKHBhcmVudCktPnJvd3MoKTsKKyAgICBhdXRvJiBhbGxSb3dzID0gdG9BY2Nl
c3NpYmlsaXR5VGFibGUocGFyZW50KS0+cm93cygpOwogICAgIGludCByb3dDb3VudCA9IGFsbFJv
d3Muc2l6ZSgpOwogICAgIGZvciAoaW50IGsgPSBpbmRleCArIDE7IGsgPCByb3dDb3VudDsgKytr
KSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvdyA9IGFsbFJvd3Nba10uZ2V0KCk7
CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAKICAgICAvLyBTZWFyY2ggZm9yIHRoZSBwcmV2aW91
cyByb3cgdGhhdCBtYXRjaGVzIHRoZSBjb3JyZWN0IGxldmVsLgogICAgIGludCBpbmRleCA9IHJv
d0luZGV4KCk7Ci0gICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBhbGxSb3dzID0gdG9B
Y2Nlc3NpYmlsaXR5VGFibGUocGFyZW50KS0+cm93cygpOworICAgIGF1dG8mIGFsbFJvd3MgPSB0
b0FjY2Vzc2liaWxpdHlUYWJsZShwYXJlbnQpLT5yb3dzKCk7CiAgICAgaW50IHJvd0NvdW50ID0g
YWxsUm93cy5zaXplKCk7CiAgICAgaWYgKGluZGV4ID49IHJvd0NvdW50KQogICAgICAgICByZXR1
cm4gMDsKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHJvdzsKICAgICB9
CiAgICAgCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAgICAgCiBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OnBhcmVudFRhYmxlKCkg
Y29uc3QKQEAgLTEyNCwyMCArMTI0LDE3IEBACiAgICAgICAgICAgICByZXR1cm4gcGFyZW50Owog
ICAgIH0KICAgICAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogQWNj
ZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpoZWFkZXJPYmplY3Qo
KQogewotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgcm93Q2hpbGRyZW4g
PSBjaGlsZHJlbigpOwotICAgIHVuc2lnbmVkIGNoaWxkcmVuQ291bnQgPSByb3dDaGlsZHJlbi5z
aXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkcmVuQ291bnQ7ICsraSkg
ewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjZWxsID0gcm93Q2hpbGRyZW5baV0uZ2V0
KCk7Ci0gICAgICAgIGlmIChjZWxsLT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IFJvd0hlYWRlclJv
bGUpCi0gICAgICAgICAgICByZXR1cm4gY2VsbDsKKyAgICBmb3IgKGF1dG8gY2hpbGQgOiBjaGls
ZHJlbigpKSB7CisgICAgICAgIGlmIChjaGlsZC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBSb3dI
ZWFkZXJSb2xlKQorICAgICAgICAgICAgcmV0dXJuIGNoaWxkLmdldCgpOwogICAgIH0KICAgICAK
LSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAJKHJldmlzaW9uIDE2MTg5OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MiwxMiArNzIsMTAgQEAKICAgICAKICAgICBtX2hhdmVDaGlsZHJlbiA9IHRydWU7CiAg
ICAgCi0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvSFRNTFNl
bGVjdEVsZW1lbnQoc2VsZWN0Tm9kZSktPmxpc3RJdGVtcygpOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGxpc3RJdGVtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgZm9yIChhdXRvIGxpc3RJdGVtIDogdG9IVE1MU2VsZWN0RWxlbWVudChz
ZWxlY3ROb2RlKS0+bGlzdEl0ZW1zKCkpIHsKICAgICAgICAgLy8gVGhlIGNhc3QgdG8gSFRNTEVs
ZW1lbnQgYmVsb3cgaXMgc2FmZSBiZWNhdXNlIHRoZSBvbmx5IG90aGVyIHBvc3NpYmxlIGxpc3RJ
dGVtIHR5cGUKICAgICAgICAgLy8gd291bGQgYmUgYSBXTUxFbGVtZW50LCBidXQgV01MIGJ1aWxk
cyBkb24ndCB1c2UgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcyBhdCBhbGwuCi0gICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGxpc3RPcHRpb24gPSBsaXN0Qm94T3B0aW9uQWNjZXNzaWJpbGl0eU9i
amVjdChsaXN0SXRlbXNbaV0pOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0T3B0
aW9uID0gbGlzdEJveE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3QobGlzdEl0ZW0pOwogICAgICAg
ICBpZiAobGlzdE9wdGlvbiAmJiAhbGlzdE9wdGlvbi0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
KQogICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQobGlzdE9wdGlvbik7CiAgICAgfQpAQCAt
OTMsMjAgKzkxLDE3IEBACiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBkaXNhYmxlIGFu
eSBzZWxlY3RlZCBvcHRpb25zCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gbV9jaGlsZHJlbi5zaXpl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKiBsaXN0Qm94T3B0aW9uID0gdG9BY2Nlc3NpYmls
aXR5TGlzdEJveE9wdGlvbihtX2NoaWxkcmVuW2ldLmdldCgpKTsKKyAgICBmb3IgKGF1dG8gY2hp
bGQgOiBtX2NoaWxkcmVuKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKiBs
aXN0Qm94T3B0aW9uID0gdG9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbihjaGlsZC5nZXQoKSk7
CiAgICAgICAgIGlmIChsaXN0Qm94T3B0aW9uLT5pc1NlbGVjdGVkKCkpCiAgICAgICAgICAgICBs
aXN0Qm94T3B0aW9uLT5zZXRTZWxlY3RlZChmYWxzZSk7CiAgICAgfQogICAgIAotICAgIGxlbmd0
aCA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gY2hpbGRyZW5baV0u
Z2V0KCk7CisgICAgZm9yIChhdXRvIG9iaiA6IGNoaWxkcmVuKSB7CiAgICAgICAgIGlmIChvYmot
PnJvbGVWYWx1ZSgpICE9IExpc3RCb3hPcHRpb25Sb2xlKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgIHRvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24o
b2JqKS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CisgICAgICAgIHRvQWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb24ob2JqLmdldCgpKS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CiAgICAgfQogfQogICAgIApAQCAt
MTE3LDEwICsxMTIsOSBAQAogICAgIGlmICghaGFzQ2hpbGRyZW4oKSkKICAgICAgICAgYWRkQ2hp
bGRyZW4oKTsKICAgICAgICAgCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gbV9jaGlsZHJlbi5zaXpl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IGlmICh0b0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKG1fY2hpbGRyZW5baV0uZ2V0KCkpLT5p
c1NlbGVjdGVkKCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fY2hpbGRyZW5baV0pOwor
ICAgIGZvciAoYXV0byBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgaWYgKHRvQWNjZXNz
aWJpbGl0eUxpc3RCb3hPcHRpb24oY2hpbGQuZ2V0KCkpLT5pc1NlbGVjdGVkKCkpCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGNoaWxkLmdldCgpKTsKICAgICB9ICAgIAogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlMaXN0Qm94T3B0aW9uLmNwcAkocmV2aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgIGlmICghc2VsZWN0RWxlbWVudCkgCiAgICAgICAg
IHJldHVybiAtMTsKICAgICAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0
ZW1zID0gc2VsZWN0RWxlbWVudC0+bGlzdEl0ZW1zKCk7CisgICAgYXV0byYgbGlzdEl0ZW1zID0g
c2VsZWN0RWxlbWVudC0+bGlzdEl0ZW1zKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdEl0
ZW1zLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAg
ICAgICAgIGlmIChsaXN0SXRlbXNbaV0gPT0gbV9vcHRpb25FbGVtZW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0
LmNwcAkocmV2aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcg
QEAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50KG1fcmVuZGVyZXItPmRvY3VtZW50KCkpOwog
ICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKTsKIAot
ICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRPYmplY3RzID0gY2hp
bGRyZW4oKTsKKyAgICBhdXRvJiBjaGlsZE9iamVjdHMgPSBjaGlsZHJlbigpOwogICAgIGlmICgh
Y2hpbGRPYmplY3RzLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQoY2hpbGRPYmplY3RzLnNp
emUoKSA9PSAxKTsKICAgICAgICAgQVNTRVJUKGNoaWxkT2JqZWN0c1swXS0+aXNNZW51TGlzdFBv
cHVwKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3RQb3B1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAJKHJldmlzaW9uIDE2MTg5OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTAgKzEwMiw4IEBACiAKICAgICBtX2hhdmVDaGls
ZHJlbiA9IHRydWU7CiAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1z
ID0gdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3ROb2RlKS0+bGlzdEl0ZW1zKCk7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gbGlzdEl0ZW1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9u
KiBvcHRpb24gPSBtZW51TGlzdE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3QobGlzdEl0ZW1zW2ld
KTsKKyAgICBmb3IgKGF1dG8gbGlzdEl0ZW0gOiB0b0hUTUxTZWxlY3RFbGVtZW50KHNlbGVjdE5v
ZGUpLT5saXN0SXRlbXMoKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24q
IG9wdGlvbiA9IG1lbnVMaXN0T3B0aW9uQWNjZXNzaWJpbGl0eU9iamVjdChsaXN0SXRlbSk7CiAg
ICAgICAgIGlmIChvcHRpb24pIHsKICAgICAgICAgICAgIG9wdGlvbi0+c2V0UGFyZW50KHRoaXMp
OwogICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob3B0aW9uKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxNjE4OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDcgKzMz
NSw3IEBACiAgICAgY2hpbGQtPmNsZWFyQ2hpbGRyZW4oKTsKICAgICAKICAgICBpZiAoY2hpbGQt
PmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgewotICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gY2hpbGQtPmNoaWxkcmVuKCk7CisgICAgICAgIGF1
dG8mIGNoaWxkcmVuID0gY2hpbGQtPmNoaWxkcmVuKCk7CiAgICAgICAgIHNpemVfdCBsZW5ndGgg
PSBjaGlsZHJlbi5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCiAgICAgICAgICAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCArIGksIGNoaWxkcmVu
W2ldKTsKQEAgLTkwOSwzNyArOTA5LDMwIEBACiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRSYWRpb0J1dHRvbigpCiB7CiAgICAgaWYgKCFpc1Jh
ZGlvR3JvdXAoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0KICAgICAvLyBGaW5kIHRoZSBjaGls
ZCByYWRpbyBidXR0b24gdGhhdCBpcyBzZWxlY3RlZCAoaWUuIHRoZSBpbnRWYWx1ZSA9PSAxKS4K
LSAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3Qg
PSBjaGlsZHJlbltpXS5nZXQoKTsKLSAgICAgICAgaWYgKG9iamVjdC0+cm9sZVZhbHVlKCkgPT0g
UmFkaW9CdXR0b25Sb2xlICYmIG9iamVjdC0+Y2hlY2tib3hPclJhZGlvVmFsdWUoKSA9PSBCdXR0
b25TdGF0ZU9uKQotICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICBmb3IgKGF1dG8gY2hp
bGQgOiBjaGlsZHJlbigpKSB7CisgICAgICAgIGlmIChjaGlsZC0+cm9sZVZhbHVlKCkgPT0gUmFk
aW9CdXR0b25Sb2xlICYmIGNoaWxkLT5jaGVja2JveE9yUmFkaW9WYWx1ZSgpID09IEJ1dHRvblN0
YXRlT24pCisgICAgICAgICAgICByZXR1cm4gY2hpbGQuZ2V0KCk7CiAgICAgfQotICAgIHJldHVy
biAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRUYWJJdGVtKCkKIHsKICAgICBpZiAoIWlzVGFi
TGlzdCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICAvLyBGaW5kIHRoZSBjaGlsZCB0YWIgaXRlbSB0aGF0IGlzIHNlbGVjdGVkIChpZS4gdGhlIGlu
dFZhbHVlID09IDEpLgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciB0YWJzOwogICAgIHRhYkNoaWxkcmVuKHRhYnMpOwogCi0gICAgY29uc3QgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9
IHRoaXMtPmNoaWxkcmVuKCk7Ci0gICAgc2l6ZV90IHNpemUgPSB0YWJzLnNpemUoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmplY3QgPSBjaGlsZHJlbltpXS5nZXQoKTsKLSAgICAgICAgaWYgKG9iamVjdC0+
aXNUYWJJdGVtKCkgJiYgb2JqZWN0LT5pc0NoZWNrZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBv
YmplY3Q7CisgICAgZm9yIChhdXRvIGNoaWxkIDogY2hpbGRyZW4oKSkgeworICAgICAgICBpZiAo
Y2hpbGQtPmlzVGFiSXRlbSgpICYmIGNoaWxkLT5pc0NoZWNrZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBjaGlsZC5nZXQoKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6Y2hlY2tib3hPclJhZGlvVmFsdWUoKSBjb25zdApAQCAtMTQzMyw5ICsxNDI2LDggQEAKICAg
ICAgICAgYXJpYUxhYmVsZWRCeUVsZW1lbnRzKGVsZW1lbnRzKTsKICAgICAgICAgCiAgICAgICAg
IFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4+IGF4RWxlbWVudHM7Ci0gICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGVsZW1lbnRzLnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBrID0gMDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgICBSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdD4gYXhFbGVtZW50ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShlbGVt
ZW50c1trXSk7CisgICAgICAgIGZvciAoYXV0byBlbGVtZW50IDogZWxlbWVudHMpIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBheEVsZW1lbnQgPSBheE9iamVjdENh
Y2hlKCktPmdldE9yQ3JlYXRlKGVsZW1lbnQpOwogICAgICAgICAgICAgYXhFbGVtZW50cy5hcHBl
bmQoYXhFbGVtZW50KTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNp
b24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE3LDcgKzQxNyw3IEBACiB7CiAgICAgLy8g
QSB0YWJsZSdzIGNoaWxkcmVuIGluY2x1ZGVzIGVsZW1lbnRzIHdob3NlIG93biBjaGlsZHJlbiBh
cmUgYWxzbyB0aGUgdGFibGUncyBjaGlsZHJlbiAoZHVlIHRvIHRoZSB3YXkgdGhlIE1hYyBleHBv
c2VzIHRhYmxlcykuCiAgICAgLy8gVGhlIHJvd3MgZnJvbSB0aGUgdGFibGUgc2hvdWxkIGJlIHF1
ZXJpZWQsIHNpbmNlIHRob3NlIGFyZSBkaXJlY3QgZGVzY2VuZGFudHMgb2YgdGhlIHRhYmxlLCBh
bmQgdGhleSBjb250YWluIGNvbnRlbnQuCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBzZWFyY2hDaGlsZHJlbiA9IG9iamVjdC0+aXNB
Y2Nlc3NpYmlsaXR5VGFibGUoKSA/IHRvQWNjZXNzaWJpbGl0eVRhYmxlKG9iamVjdCktPnJvd3Mo
KSA6IG9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICBhdXRvJiBzZWFyY2hDaGlsZHJlbiA9IG9iamVj
dC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSA/IHRvQWNjZXNzaWJpbGl0eVRhYmxlKG9iamVjdCkt
PnJvd3MoKSA6IG9iamVjdC0+Y2hpbGRyZW4oKTsKIAogICAgIHNpemVfdCBjaGlsZHJlblNpemUg
PSBzZWFyY2hDaGlsZHJlbi5zaXplKCk7CiAKQEAgLTEyNzcsOSArMTI3Nyw4IEBACiB2b2lkIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmNsZWFyQ2hpbGRyZW4oKQogewogICAgIC8vIFNvbWUgb2JqZWN0
cyBoYXZlIHdlYWsgcG9pbnRlcnMgdG8gdGhlaXIgcGFyZW50cyBhbmQgdGhvc2UgYXNzb2NpYXRp
b25zIG5lZWQgdG8gYmUgZGV0YWNoZWQuCi0gICAgc2l6ZV90IGxlbmd0aCA9IG1fY2hpbGRyZW4u
c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAg
IG1fY2hpbGRyZW5baV0tPmRldGFjaEZyb21QYXJlbnQoKTsKKyAgICBmb3IgKGF1dG8gY2hpbGQg
OiBtX2NoaWxkcmVuKQorICAgICAgICBjaGlsZC0+ZGV0YWNoRnJvbVBhcmVudCgpOwogICAgIAog
ICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKICAgICBtX2hhdmVDaGlsZHJlbiA9IGZhbHNlOwpAQCAt
MTMyMCw0MiArMTMxOSwzMSBAQAogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFUcmVl
Um93cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJlc3VsdCkKIHsKLSAgICBjb25zdCBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGF4Q2hpbGRyZW4gPSBjaGlsZHJlbigpOwotICAg
IHVuc2lnbmVkIGNvdW50ID0gYXhDaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGNvdW50OyArK2spIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
ID0gYXhDaGlsZHJlbltrXS5nZXQoKTsKLSAgICAgICAgCisgICAgZm9yIChhdXRvIGNoaWxkIDog
Y2hpbGRyZW4oKSkgewogICAgICAgICAvLyBBZGQgdHJlZSBpdGVtcyBhcyB0aGUgcm93cy4KLSAg
ICAgICAgaWYgKG9iai0+cm9sZVZhbHVlKCkgPT0gVHJlZUl0ZW1Sb2xlKSAKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQob2JqKTsKKyAgICAgICAgaWYgKGNoaWxkLT5yb2xlVmFsdWUoKSA9PSBU
cmVlSXRlbVJvbGUpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNoaWxkKTsKIAogICAgICAg
ICAvLyBOb3cgc2VlIGlmIHRoaXMgaXRlbSBhbHNvIGhhcyByb3dzIGhpZGluZyBpbnNpZGUgb2Yg
aXQuCi0gICAgICAgIG9iai0+YXJpYVRyZWVSb3dzKHJlc3VsdCk7CisgICAgICAgIGNoaWxkLT5h
cmlhVHJlZVJvd3MocmVzdWx0KTsKICAgICB9CiB9CiAgICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmFyaWFUcmVlSXRlbUNvbnRlbnQoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBy
ZXN1bHQpCiB7CiAgICAgLy8gVGhlIEFSSUEgdHJlZSBpdGVtIGNvbnRlbnQgYXJlIHRoZSBpdGVt
IHRoYXQgYXJlIG5vdCBvdGhlciB0cmVlIGl0ZW1zIG9yIHRoZWlyIGNvbnRhaW5pbmcgZ3JvdXBz
LgotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgYXhDaGlsZHJlbiA9IGNo
aWxkcmVuKCk7Ci0gICAgdW5zaWduZWQgY291bnQgPSBheENoaWxkcmVuLnNpemUoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY291bnQ7ICsraykgewotICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmogPSBheENoaWxkcmVuW2tdLmdldCgpOwotICAgICAgICBBY2Nlc3NpYmls
aXR5Um9sZSByb2xlID0gb2JqLT5yb2xlVmFsdWUoKTsKKyAgICBmb3IgKGF1dG8gY2hpbGQgOiBj
aGlsZHJlbigpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBjaGlsZC0+cm9s
ZVZhbHVlKCk7CiAgICAgICAgIGlmIChyb2xlID09IFRyZWVJdGVtUm9sZSB8fCByb2xlID09IEdy
b3VwUm9sZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0
LmFwcGVuZChvYmopOworICAgICAgICByZXN1bHQuYXBwZW5kKGNoaWxkKTsKICAgICB9CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93cyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJlc3VsdCkKIHsKLSAgICBjb25zdCBBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImIGF4Q2hpbGRyZW4gPSBjaGlsZHJlbigpOwotICAgIHVuc2lnbmVk
IGNvdW50ID0gYXhDaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8
IGNvdW50OyArK2spIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gYXhDaGls
ZHJlbltrXS5nZXQoKTsKLSAgICAgICAgCisgICAgZm9yIChhdXRvIG9iaiA6IGNoaWxkcmVuKCkp
IHsKICAgICAgICAgLy8gQWRkIHRyZWUgaXRlbXMgYXMgdGhlIHJvd3MuCiAgICAgICAgIGlmIChv
YmotPnJvbGVWYWx1ZSgpID09IFRyZWVJdGVtUm9sZSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQob2JqKTsKQEAgLTE2NzcsMTAgKzE2NjUsOSBAQAogICAgIH0KICAgICAKICAgICAvLyBDaGVj
ayBpZiB0aGVyZSBhcmUgYW55IG1vY2sgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGJlIGhhbmRsZWQu
Ci0gICAgc2l6ZV90IGNvdW50ID0gbV9jaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yIChzaXplX3Qg
ayA9IDA7IGsgPCBjb3VudDsgaysrKSB7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuW2tdLT5pc01v
Y2tPYmplY3QoKSAmJiBtX2NoaWxkcmVuW2tdLT5lbGVtZW50UmVjdCgpLmNvbnRhaW5zKHBvaW50
KSkKLSAgICAgICAgICAgIHJldHVybiBtX2NoaWxkcmVuW2tdLT5lbGVtZW50QWNjZXNzaWJpbGl0
eUhpdFRlc3QocG9pbnQpOworICAgIGZvciAoYXV0byBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAg
ICAgICAgaWYgKGNoaWxkLT5pc01vY2tPYmplY3QoKSAmJiBjaGlsZC0+ZWxlbWVudFJlY3QoKS5j
b250YWlucyhwb2ludCkpCisgICAgICAgICAgICByZXR1cm4gY2hpbGQtPmVsZW1lbnRBY2Nlc3Np
YmlsaXR5SGl0VGVzdChwb2ludCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8QWNj
ZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMpOyAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2
aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYyLDEwICs5NjIsOCBAQAog
ICAgICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBmb3JtRWxlbWVudHM7CiAgICAgICAgIGlucHV0
LT5mb3JtKCktPmdldE5hbWVkRWxlbWVudHMoaW5wdXQtPm5hbWUoKSwgZm9ybUVsZW1lbnRzKTsK
ICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxlbiA9IGZvcm1FbGVtZW50cy5zaXplKCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAg
RWxlbWVudCYgYXNzb2NpYXRlRWxlbWVudCA9IGZvcm1FbGVtZW50c1tpXS5nZXQoKTsKLSAgICAg
ICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBheE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKCZhc3NvY2lhdGVFbGVtZW50KSkKKyAgICAgICAgZm9yIChhdXRvJiBhc3Nv
Y2lhdGVFbGVtZW50IDogZm9ybUVsZW1lbnRzKSB7CisgICAgICAgICAgICBpZiAoQWNjZXNzaWJp
bGl0eU9iamVjdCogb2JqZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSgmYXNzb2Np
YXRlRWxlbWVudC5nZXQoKSkpCiAgICAgICAgICAgICAgICAgbGlua2VkVUlFbGVtZW50cy5hcHBl
bmQob2JqZWN0KTsgICAgICAgIAogICAgICAgICB9IAogICAgIH0gZWxzZSB7CkBAIC0xMDIyLDkg
KzEwMjAsNyBAQAogICAgIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShlbGVtZW50cywgYXJpYV9mbG93
dG9BdHRyKTsKICAgICAKICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUo
KTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IGVsZW1lbnRzLnNpemUoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGsgPSAwOyBrIDwgY291bnQ7ICsraykgewotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0g
ZWxlbWVudHNba107CisgICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVtZW50cykgewogICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmbG93VG9FbGVtZW50ID0gY2FjaGUtPmdldE9yQ3JlYXRl
KGVsZW1lbnQpOwogICAgICAgICBpZiAoZmxvd1RvRWxlbWVudCkKICAgICAgICAgICAgIGZsb3dU
by5hcHBlbmQoZmxvd1RvRWxlbWVudCk7CkBAIC0xNTc4LDkgKzE1NzQsNyBAQAogICAgIFZlY3Rv
cjxFbGVtZW50Kj4gZWxlbWVudHM7CiAgICAgZWxlbWVudHNGcm9tQXR0cmlidXRlKGVsZW1lbnRz
LCBhcmlhX2NvbnRyb2xzQXR0cik7CiAgICAgCi0gICAgdW5zaWduZWQgY291bnQgPSBlbGVtZW50
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsKLSAg
ICAgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRzW2tdOworICAgIGZvciAoYXV0byBlbGVt
ZW50IDogZWxlbWVudHMpIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdGFiUGFuZWwg
PSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGVsZW1lbnQpOwogCiAgICAgICAgIC8vIEEg
dGFiIGl0ZW0gc2hvdWxkIG9ubHkgY29udHJvbCB0YWIgcGFuZWxzLgpAQCAtMTY1Myw4ICsxNjQ3
LDggQEAKICAgICBpZiAoY291bnQgPiAxICYmICFpc011bHRpKQogICAgICAgICBjb3VudCA9IDE7
CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spCi0gICAgICAg
IHNlbGVjdGVkUm93c1trXS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CisgICAgZm9yIChhdXRvIHNlbGVj
dGVkUm93IDogc2VsZWN0ZWRSb3dzKQorICAgICAgICBzZWxlY3RlZFJvdy0+c2V0U2VsZWN0ZWQo
dHJ1ZSk7CiB9CiAgICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFZhbHVl
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQpAQCAtMTY4Miw5ICsxNjc2LDggQEAKICAgICBWZWN0b3I8
RWxlbWVudCo+IGVsZW1lbnRzOwogICAgIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShlbGVtZW50cywg
YXJpYV9vd25zQXR0cik7CiAgICAgCi0gICAgdW5zaWduZWQgY291bnQgPSBlbGVtZW50cy5zaXpl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXIgPSBlbGVtZW50c1trXS0+cmVuZGVyZXIoKTsKKyAgICBmb3Ig
KGF1dG8gZWxlbWVudCA6IGVsZW1lbnRzKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXIpOwogICAgICAgICBpZiAob2Jq
KQogICAgICAgICAgICAgYXhPYmplY3RzLmFwcGVuZChvYmopOwpAQCAtMjE1NSwxMiArMjE0OCw5
IEBACiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGNvbnN0
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRy
ZW4gPSBwYXJlbnQtPmNoaWxkcmVuKCk7Ci0gICAgCi0gICAgdW5zaWduZWQgY291bnQgPSBjaGls
ZHJlbi5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsK
LSAgICAgICAgaWYgKGNoaWxkcmVuW2tdLT5lbGVtZW50UmVjdCgpLmNvbnRhaW5zKHBvaW50KSkK
LSAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltrXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8gY2hp
bGQgOiBwYXJlbnQtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5lbGVtZW50UmVj
dCgpLmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjaGlsZC5nZXQoKTsKICAg
ICB9CiAgICAgCiAgICAgcmV0dXJuIDA7CkBAIC0yODU5LDEwICsyODQ5LDggQEAKICAgICByb290
LT5zZXRQYXJlbnQodGhpcyk7CiAgICAgCiAgICAgaWYgKHJvb3QtPmFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQoKSkgewotICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNo
aWxkcmVuID0gcm9vdC0+Y2hpbGRyZW4oKTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gY2hp
bGRyZW4uc2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZHJlbltpXSk7CisgICAgICAg
IGZvciAoYXV0byBjaGlsZCA6IHJvb3QtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICBtX2NoaWxk
cmVuLmFwcGVuZChjaGlsZCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5k
KHJvb3QpOwogfQpAQCAtMjkwNCwxMCArMjg5Miw5IEBACiAgICAgaWYgKGFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHNpemVfdCBsZW5ndGggPSBt
X2NoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGxlbmd0aDsgaysr
KSB7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuW2tdLT5pc0F0dGFjaG1lbnQoKSkKLSAgICAgICAg
ICAgIG1fY2hpbGRyZW5ba10tPm92ZXJyaWRlQXR0YWNobWVudFBhcmVudCh0aGlzKTsKKyAgICBm
b3IgKGF1dG8gY2hpbGQgOiBtX2NoaWxkcmVuKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNBdHRh
Y2htZW50KCkpCisgICAgICAgICAgICBjaGlsZC0+b3ZlcnJpZGVBdHRhY2htZW50UGFyZW50KHRo
aXMpOwogICAgIH0KIH0KICNlbmRpZgpAQCAtMjk0MSw3ICsyOTI4LDcgQEAKICAgICAgICAgICAg
IC8vIEZpbmQgb3V0IHdoZXJlIHRoZSBsYXN0IHJlbmRlciBzaWJsaW5nIGlzIGxvY2F0ZWQgd2l0
aGluIG1fY2hpbGRyZW4uCiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZE9i
amVjdCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0KGNoaWxkLT5yZW5kZXJlcigpKTsKICAgICAgICAg
ICAgIGlmIChjaGlsZE9iamVjdCAmJiBjaGlsZE9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JiBjaGlsZHJlbiA9IGNoaWxkT2JqZWN0LT5jaGlsZHJlbigpOworICAgICAgICAgICAgICAgIGF1
dG8mIGNoaWxkcmVuID0gY2hpbGRPYmplY3QtPmNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAg
aWYgKGNoaWxkcmVuLnNpemUoKSkKICAgICAgICAgICAgICAgICAgICAgY2hpbGRPYmplY3QgPSBj
aGlsZHJlbi5sYXN0KCkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMzA2OCwxMCAr
MzA1NSw5IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWduZWQgY291
bnQgPSBhbGxSb3dzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY291bnQ7
ICsraykgewotICAgICAgICBpZiAoYWxsUm93c1trXS0+aXNTZWxlY3RlZCgpKSB7Ci0gICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGFsbFJvd3Nba10pOworICAgIGZvciAoYXV0byByb3cgOiBhbGxS
b3dzKSB7CisgICAgICAgIGlmIChyb3ctPmlzU2VsZWN0ZWQoKSkgeworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChyb3cpOwogICAgICAgICAgICAgaWYgKCFpc011bHRpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zMDgyLDExICszMDY4LDggQEAKIHsKICAgICBib29s
IGlzTXVsdGkgPSBpc011bHRpU2VsZWN0YWJsZSgpOwogCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJiBjaGlsZE9iamVjdHMgPSBjaGlsZHJlbigpOwotICAgIHVuc2lnbmVk
IGNoaWxkcmVuU2l6ZSA9IGNoaWxkT2JqZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGNoaWxkcmVuU2l6ZTsgKytrKSB7CisgICAgZm9yIChhdXRvIGNoaWxkIDogY2hp
bGRyZW4oKSkgewogICAgICAgICAvLyBFdmVyeSBjaGlsZCBzaG91bGQgaGF2ZSBhcmlhLXJvbGUg
b3B0aW9uLCBhbmQgaWYgc28sIGNoZWNrIGZvciBzZWxlY3RlZCBhdHRyaWJ1dGUvc3RhdGUuCi0g
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkID0gY2hpbGRPYmplY3RzW2tdLmdldCgp
OwogICAgICAgICBpZiAoY2hpbGQtPmlzU2VsZWN0ZWQoKSAmJiBjaGlsZC0+YXJpYVJvbGVBdHRy
aWJ1dGUoKSA9PSBMaXN0Qm94T3B0aW9uUm9sZSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChjaGlsZCk7CiAgICAgICAgICAgICBpZiAoIWlzTXVsdGkpCkBAIC0zMTEyLDExICszMDk1LDkg
QEAKICAgICBpZiAoIWhhc0NoaWxkcmVuKCkpCiAgICAgICAgIGFkZENoaWxkcmVuKCk7CiAgICAg
Ci0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBjaGls
ZHJlbi5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAg
ICAgICAgaWYgKCFjaGlsZHJlbltpXS0+aXNPZmZTY3JlZW4oKSkKLSAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoY2hpbGRyZW5baV0pOworICAgIGZvciAoYXV0byBjaGlsZCA6IGNoaWxkcmVuKCkp
IHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc09mZlNjcmVlbigpKQorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChjaGlsZCk7CiAgICAgfQogfQogCkBAIC0zMTM2LDExICszMTE3LDkgQEAKIHsKICAg
ICBBU1NFUlQocm9sZVZhbHVlKCkgPT0gVGFiTGlzdFJvbGUpOwogICAgIAotICAgIGNvbnN0IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4g
PSB0aGlzLT5jaGlsZHJlbigpOwotICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChjaGls
ZHJlbltpXS0+aXNUYWJJdGVtKCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNoaWxkcmVu
W2ldKTsKKyAgICBmb3IgKGF1dG8gY2hpbGQgOiBjaGlsZHJlbigpKSB7CisgICAgICAgIGlmIChj
aGlsZC0+aXNUYWJJdGVtKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNoaWxkKTsKICAg
ICB9CiB9CiAgICAgCkBAIC0zNTcxLDcgKzM1NTAsNyBAQAogICAgIGlmICghaXNNYXRoUm9vdCgp
KQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4o
KTsKKyAgICBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CiAgICAgaWYgKGNoaWxk
cmVuLnNpemUoKSA8IDEpCiAgICAgICAgIHJldHVybiAwOwogICAgIApAQCAtMzU4NCw3ICszNTYz
LDcgQEAKICAgICBpZiAoIWlzTWF0aFJvb3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0g
ICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgYXV0byYgY2hpbGRyZW4gPSB0aGlz
LT5jaGlsZHJlbigpOwogICAgIGlmIChjaGlsZHJlbi5zaXplKCkgIT0gMikKICAgICAgICAgcmV0
dXJuIDA7CiAKQEAgLTM1OTgsNyArMzU3Nyw3IEBACiAgICAgaWYgKCFpc01hdGhGcmFjdGlvbigp
KQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4o
KTsKKyAgICBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CiAgICAgaWYgKGNoaWxk
cmVuLnNpemUoKSAhPSAyKQogICAgICAgICByZXR1cm4gMDsKICAgICAKQEAgLTM2MTAsNyArMzU4
OSw3IEBACiAgICAgaWYgKCFpc01hdGhGcmFjdGlvbigpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIGF1dG8mIGNoaWxkcmVuID0gdGhp
cy0+Y2hpbGRyZW4oKTsKICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpICE9IDIpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIApAQCAtMzYyMiw3ICszNjAxLDcgQEAKICAgICBpZiAoIWlzTWF0aFVuZGVy
T3ZlcigpIHx8ICFub2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGNvbnN0IEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwor
ICAgIGF1dG8mIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKICAgICBpZiAoY2hpbGRyZW4u
c2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkBAIC0zNjM3LDcgKzM2MTYsNyBA
QAogICAgIGlmICghaXNNYXRoVW5kZXJPdmVyKCkgfHwgIW5vZGUoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJl
biA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJl
bigpOwogICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPCAyKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAKQEAgLTM2NTQsNyArMzYzMyw3IEBACiAgICAgaWYgKCFpc01hdGhTdWJzY3JpcHRTdXBlcnNj
cmlwdCgpICYmICFpc01hdGhVbmRlck92ZXIoKSAmJiAhaXNNYXRoTXVsdGlzY3JpcHQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgYXV0byYgY2hpbGRyZW4gPSB0
aGlzLT5jaGlsZHJlbigpOwogICAgIC8vIFRoZSBiYXNlIG9iamVjdCBpbiBxdWVzdGlvbiBpcyBh
bHdheXMgdGhlIGZpcnN0IGNoaWxkLgogICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPiAwKQogICAg
ICAgICByZXR1cm4gY2hpbGRyZW5bMF0uZ2V0KCk7CkBAIC0zNjY3LDcgKzM2NDYsNyBAQAogICAg
IGlmICghaXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSB8fCAhbm9kZSgpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNo
aWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKKyAgICBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNo
aWxkcmVuKCk7CiAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA8IDIpCiAgICAgICAgIHJldHVybiAw
OwogCkBAIC0zNjgyLDcgKzM2NjEsNyBAQAogICAgIGlmICghaXNNYXRoU3Vic2NyaXB0U3VwZXJz
Y3JpcHQoKSB8fCAhbm9kZSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBjb25zdCBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsK
KyAgICBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CiAgICAgdW5zaWduZWQgY291
bnQgPSBjaGlsZHJlbi5zaXplKCk7CiAKICAgICBpZiAoY291bnQgPj0gMiAmJiBub2RlKCktPmhh
c1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1zdXBUYWcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAkocmV2aXNpb24gMTYx
ODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjgsOSArNDI4LDggQEAKICAgICAKICAgICB1cGRhdGVD
aGlsZHJlbklmTmVjZXNzYXJ5KCk7CiAgICAgCi0gICAgc2l6ZV90IGNvbHVtbkNvdW50ID0gbV9j
b2x1bW5zLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyAr
K2kpIHsKLSAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlciA9IHRvQWNjZXNz
aWJpbGl0eVRhYmxlQ29sdW1uKG1fY29sdW1uc1tpXS5nZXQoKSktPmhlYWRlck9iamVjdCgpKQor
ICAgIGZvciAoYXV0byBjb2x1bW4gOiBtX2NvbHVtbnMpIHsKKyAgICAgICAgaWYgKEFjY2Vzc2li
aWxpdHlPYmplY3QqIGhlYWRlciA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uKGNvbHVtbi5n
ZXQoKSktPmhlYWRlck9iamVjdCgpKQogICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQoaGVhZGVy
KTsKICAgICB9CiB9CkBAIC00NDIsOSArNDQxLDggQEAKICAgICAKICAgICB1cGRhdGVDaGlsZHJl
bklmTmVjZXNzYXJ5KCk7CiAgICAgCi0gICAgc2l6ZV90IHJvd0NvdW50ID0gbV9yb3dzLnNpemUo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvd0NvdW50OyArK2kpIHsKLSAgICAgICAg
aWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlciA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlUm93
KG1fcm93c1tpXS5nZXQoKSktPmhlYWRlck9iamVjdCgpKQorICAgIGZvciAoYXV0byByb3cgOiBt
X3Jvd3MpIHsKKyAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlciA9IHRvQWNj
ZXNzaWJpbGl0eVRhYmxlUm93KHJvdy5nZXQoKSktPmhlYWRlck9iamVjdCgpKQogICAgICAgICAg
ICAgaGVhZGVycy5hcHBlbmQoaGVhZGVyKTsKICAgICB9CiB9CkBAIC00NTYsOSArNDU0LDcgQEAK
ICAgICAKICAgICB1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CiAgICAgCi0gICAgc2l6ZV90
IHJvd0NvdW50ID0gbV9yb3dzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJv
d0NvdW50OyArK2kpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcm93ID0gbV9yb3dz
W2ldLmdldCgpOworICAgIGZvciAoYXV0byByb3cgOiBtX3Jvd3MpIHsKICAgICAgICAgaWYgKHJv
dyAmJiAhcm93LT5pc09mZlNjcmVlbigpKQogICAgICAgICAgICAgcm93cy5hcHBlbmQocm93KTsK
ICAgICB9CkBAIC00NzEsOCArNDY3LDggQEAKICAgICAKICAgICB1cGRhdGVDaGlsZHJlbklmTmVj
ZXNzYXJ5KCk7CiAgICAgCi0gICAgZm9yIChzaXplX3Qgcm93ID0gMDsgcm93IDwgbV9yb3dzLnNp
emUoKTsgKytyb3cpCi0gICAgICAgIGNlbGxzLmFwcGVuZFZlY3RvcihtX3Jvd3Nbcm93XS0+Y2hp
bGRyZW4oKSk7CisgICAgZm9yIChhdXRvIHJvdyA6IG1fcm93cykKKyAgICAgICAgY2VsbHMuYXBw
ZW5kVmVjdG9yKHJvdy0+Y2hpbGRyZW4oKSk7CiB9CiAgICAgCiB1bnNpZ25lZCBBY2Nlc3NpYmls
aXR5VGFibGU6OmNvbHVtbkNvdW50KCkKQEAgLTUwOSw3ICs1MDUsNyBAQAogICAgIC8vIEl0ZXJh
dGUgYmFja3dhcmRzIHRocm91Z2ggdGhlIHJvd3MgaW4gY2FzZSB0aGUgZGVzaXJlZCBjZWxsIGhh
cyBhIHJvd3NwYW4gYW5kIGV4aXN0cyBpbiBhIHByZXZpb3VzIHJvdy4KICAgICBmb3IgKHVuc2ln
bmVkIHJvd0luZGV4Q291bnRlciA9IHJvdyArIDE7IHJvd0luZGV4Q291bnRlciA+IDA7IC0tcm93
SW5kZXhDb3VudGVyKSB7CiAgICAgICAgIHVuc2lnbmVkIHJvd0luZGV4ID0gcm93SW5kZXhDb3Vu
dGVyIC0gMTsKLSAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGls
ZHJlbiA9IG1fcm93c1tyb3dJbmRleF0tPmNoaWxkcmVuKCk7CisgICAgICAgYXV0byYgY2hpbGRy
ZW4gPSBtX3Jvd3Nbcm93SW5kZXhdLT5jaGlsZHJlbigpOwogICAgICAgICAvLyBTaW5jZSBzb21l
IGNlbGxzIG1heSBoYXZlIGNvbHNwYW5zLCB3ZSBoYXZlIHRvIGNoZWNrIHRoZSBhY3R1YWwgcmFu
Z2Ugb2YgZWFjaAogICAgICAgICAvLyBjZWxsIHRvIGRldGVybWluZSB3aGljaCBpcyB0aGUgcmln
aHQgb25lLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbEluZGV4Q291bnRlciA9IHN0ZDo6bWlu
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGlsZHJlbi5zaXplKCkpLCBjb2x1bW4gKyAxKTsgY29s
SW5kZXhDb3VudGVyID4gMDsgLS1jb2xJbmRleENvdW50ZXIpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVt
bi5jcHAJKHJldmlzaW9uIDE2MTg5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTIgKzgw
LDkgQEAKICAgICAKICAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIHBhcmVudFRhYmxlID0gdG9BY2Nl
c3NpYmlsaXR5VGFibGUobV9wYXJlbnQpOwogICAgIGlmIChwYXJlbnRUYWJsZS0+aXNBcmlhVGFi
bGUoKSkgewotICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJvd0No
aWxkcmVuID0gY2hpbGRyZW4oKTsKLSAgICAgICAgdW5zaWduZWQgY2hpbGRyZW5Db3VudCA9IHJv
d0NoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxk
cmVuQ291bnQ7ICsraSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2VsbCA9
IHJvd0NoaWxkcmVuW2ldLmdldCgpOworICAgICAgICBmb3IgKGF1dG8gY2VsbCA6IGNoaWxkcmVu
KCkpIHsKICAgICAgICAgICAgIGlmIChjZWxsLT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IENvbHVt
bkhlYWRlclJvbGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNlbGw7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNlbGwuZ2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVy
biAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVIZWFkZXJDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmNwcAkocmV2aXNpb24g
MTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVIZWFkZXJDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw5ICs3NSw4IEBACiAg
ICAgCiAgICAgdG9BY2Nlc3NpYmlsaXR5VGFibGUobV9wYXJlbnQpLT5jb2x1bW5IZWFkZXJzKG1f
Y2hpbGRyZW4pOwogICAgIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fY2hpbGRyZW4uc2l6ZSgp
OwotICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7ICsraykKLSAgICAgICAgbV9o
ZWFkZXJSZWN0LnVuaXRlKG1fY2hpbGRyZW5ba10tPmVsZW1lbnRSZWN0KCkpOworICAgIGZvciAo
YXV0byBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgIG1faGVhZGVyUmVjdC51bml0ZShjaGls
ZC0+ZWxlbWVudFJlY3QoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZVJvdy5jcHAJKHJldmlzaW9uIDE2MTg5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzEx
Nyw3IEBACiAgICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVyLT5pc1RhYmxlUm93KCkp
CiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYgcm93Q2hpbGRyZW4gPSBjaGlsZHJlbigpOworICAgIGF1dG8mIHJvd0NoaWxkcmVu
ID0gY2hpbGRyZW4oKTsKICAgICBpZiAoIXJvd0NoaWxkcmVuLnNpemUoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5t
bQkocmV2aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0
Nyw3ICszNDcsNyBAQAogICAgIGlmIChbc2VsZiBpc0F0dGFjaG1lbnRdKQogICAgICAgICByZXR1
cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5RWxlbWVudEF0SW5kZXg6aW5k
ZXhdOwogICAgIAotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICBhdXRv
JiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwogICAgIGlmIChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5kZXgpID49IGNoaWxkcmVuLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICAKQEAgLTM2Nyw3ICszNjcsNyBAQAogICAgIGlmIChbc2VsZiBpc0F0dGFjaG1lbnRdKQog
ICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBpbmRleE9mQWNjZXNzaWJpbGl0
eUVsZW1lbnQ6ZWxlbWVudF07CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJl
bigpOworICAgIGF1dG8mIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CiAgICAgdW5z
aWduZWQgY291bnQgPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsg
ayA8IGNvdW50OyArK2spIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdy
YXBwZXIgPSBjaGlsZHJlbltrXS0+d3JhcHBlcigpOwpAQCAtMTA3Myw3ICsxMDczLDcgQEAKICAg
ICBpZiAocm9sZSAhPSBMaW5rUm9sZSAmJiByb2xlICE9IFdlYkNvcmVMaW5rUm9sZSkKICAgICAg
ICAgcmV0dXJuIE5POwogICAgIAotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsK
KyAgICBhdXRvJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwogICAgIHVuc2lnbmVk
IGNoaWxkcmVuU2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKIAogICAgIC8vIElmIHRoZXJlJ3Mgb25s
eSBvbmUgY2hpbGQsIHRoZW4gaXQgZG9lc24ndCBoYXZlIHNlZ21lbnRlZCBjaGlsZHJlbi4gCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlckJhc2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCShyZXZpc2lvbiAx
NjE4OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckJhc2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTc4LDExICs3OCw5IEBA
CiAKIHN0YXRpYyBOU0FycmF5ICpjb252ZXJ0TWF0aFBhaXJzVG9OU0FycmF5KGNvbnN0IEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyYgcGFpcnMs
IE5TU3RyaW5nICpzdWJzY3JpcHRLZXksIE5TU3RyaW5nICpzdXBlcnNjcmlwdEtleSkKIHsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBwYWlycy5zaXplKCk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmFy
cmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Omxlbmd0aF07Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgTlNNdXRhYmxlQXJyYXkg
KmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnBhaXJzLnNpemUoKV07
CisgICAgZm9yIChhdXRvIHBhaXIgOiBwYWlycykgewogICAgICAgICBOU011dGFibGVEaWN0aW9u
YXJ5ICpwYWlyRGljdGlvbmFyeSA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwot
ICAgICAgICBzdGQ6OnBhaXI8QWNjZXNzaWJpbGl0eU9iamVjdCosIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqPiBwYWlyID0gcGFpcnNbaV07CiAgICAgICAgIGlmIChwYWlyLmZpcnN0ICYmIHBhaXIuZmly
c3QtPndyYXBwZXIoKSAmJiAhcGFpci5maXJzdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQog
ICAgICAgICAgICAgW3BhaXJEaWN0aW9uYXJ5IHNldE9iamVjdDpwYWlyLmZpcnN0LT53cmFwcGVy
KCkgZm9yS2V5OnN1YnNjcmlwdEtleV07CiAgICAgICAgIGlmIChwYWlyLnNlY29uZCAmJiBwYWly
LnNlY29uZC0+d3JhcHBlcigpICYmICFwYWlyLnNlY29uZC0+YWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZCgpKQpAQCAtMTY1LDEwICsxNjMsNyBAQAogICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4g
dGV4dE9yZGVyOwogICAgIG1fb2JqZWN0LT5hY2Nlc3NpYmlsaXR5VGV4dCh0ZXh0T3JkZXIpOwog
ICAgIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHRPcmRlci5zaXplKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgIGNvbnN0IEFjY2Vzc2li
aWxpdHlUZXh0JiB0ZXh0ID0gdGV4dE9yZGVyW2tdOwotICAgICAgICAKKyAgICBmb3IgKGF1dG8g
dGV4dCA6IHRleHRPcmRlcikgewogICAgICAgICAvLyBJZiB3ZSBoYXZlIGFsdGVybmF0aXZlIHRl
eHQsIHRoZW4gd2Ugc2hvdWxkIG5vdCBleHBvc2UgYSB0aXRsZS4KICAgICAgICAgaWYgKHRleHQu
dGV4dFNvdXJjZSA9PSBBbHRlcm5hdGl2ZVRleHQpCiAgICAgICAgICAgICBicmVhazsKQEAgLTE5
NiwxMSArMTkxLDggQEAKICAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+IHRleHRPcmRlcjsK
ICAgICBtX29iamVjdC0+YWNjZXNzaWJpbGl0eVRleHQodGV4dE9yZGVyKTsKICAgICAKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSB0ZXh0T3JkZXIuc2l6ZSgpOwogICAgIGJvb2wgdmlzaWJsZVRleHRB
dmFpbGFibGUgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBr
KyspIHsKLSAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eVRleHQmIHRleHQgPSB0ZXh0T3JkZXJb
a107Ci0gICAgICAgIAorICAgIGZvciAoYXV0byB0ZXh0IDogdGV4dE9yZGVyKSB7CiAgICAgICAg
IGlmICh0ZXh0LnRleHRTb3VyY2UgPT0gQWx0ZXJuYXRpdmVUZXh0KQogICAgICAgICAgICAgcmV0
dXJuIHRleHQudGV4dDsKICAgICAgICAgCkBAIC0yMjUsMTEgKzIxNyw4IEBACiAgICAgVmVjdG9y
PEFjY2Vzc2liaWxpdHlUZXh0PiB0ZXh0T3JkZXI7CiAgICAgbV9vYmplY3QtPmFjY2Vzc2liaWxp
dHlUZXh0KHRleHRPcmRlcik7CiAgICAgCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dE9yZGVy
LnNpemUoKTsKICAgICBib29sIGRlc2NyaXB0aXZlVGV4dEF2YWlsYWJsZSA9IGZhbHNlOwotICAg
IGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICBjb25zdCBB
Y2Nlc3NpYmlsaXR5VGV4dCYgdGV4dCA9IHRleHRPcmRlcltrXTsKLSAgICAgICAgCisgICAgZm9y
IChhdXRvIHRleHQgOiB0ZXh0T3JkZXIpIHsKICAgICAgICAgaWYgKHRleHQudGV4dFNvdXJjZSA9
PSBIZWxwVGV4dCB8fCB0ZXh0LnRleHRTb3VyY2UgPT0gU3VtbWFyeVRleHQpCiAgICAgICAgICAg
ICByZXR1cm4gdGV4dC50ZXh0OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tCShyZXZpc2lvbiAxNjE4OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTU2MiwxNSArMTU2MiwxNCBAQAogCiBzdGF0aWMgTlNNdXRhYmxlQXJy
YXkqIGNvbnZlcnRUb05TQXJyYXkoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiB2ZWN0b3IpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdmVj
dG9yLnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXlXaXRoQ2FwYWNpdHk6IGxlbmd0aF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3
cmFwcGVyID0gdmVjdG9yW2ldLT53cmFwcGVyKCk7CisgICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5
ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnZlY3Rvci5zaXplKCldOworICAg
IGZvciAoYXV0byBjaGlsZCA6IHZlY3RvcikgeworICAgICAgICBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciogd3JhcHBlciA9IGNoaWxkLT53cmFwcGVyKCk7CiAgICAgICAgIEFTU0VSVCh3
cmFwcGVyKTsKICAgICAgICAgaWYgKHdyYXBwZXIpIHsKICAgICAgICAgICAgIC8vIHdlIHdhbnQg
dG8gcmV0dXJuIHRoZSBhdHRhY2htZW50IHZpZXcgaW5zdGVhZCBvZiB0aGUgb2JqZWN0IHJlcHJl
c2VudGluZyB0aGUgYXR0YWNobWVudC4KICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgd2UgZ2V0
IHBhbGluZHJvbWUgZXJyb3JzIGluIHRoZSBBWCBoaWVyYXJjaHkKLSAgICAgICAgICAgIGlmICh2
ZWN0b3JbaV0tPmlzQXR0YWNobWVudCgpICYmIFt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XSkKKyAg
ICAgICAgICAgIGlmIChjaGlsZC0+aXNBdHRhY2htZW50KCkgJiYgW3dyYXBwZXIgYXR0YWNobWVu
dFZpZXddKQogICAgICAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W3dyYXBwZXIgYXR0YWNo
bWVudFZpZXddXTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBbYXJyYXkgYWRk
T2JqZWN0OndyYXBwZXJdOwpAQCAtMTU4MSwxMCArMTU4MCw5IEBACiAKIHN0YXRpYyBOU011dGFi
bGVBcnJheSAqY29udmVydFN0cmluZ3NUb05TQXJyYXkoY29uc3QgVmVjdG9yPFN0cmluZz4mIHZl
Y3RvcikKIHsKLSAgICBzaXplX3QgbGVuZ3RoID0gdmVjdG9yLnNpemUoKTsKLSAgICBOU011dGFi
bGVBcnJheSAqYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bGVuZ3Ro
XTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0OnZlY3RvcltpXV07CisgICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnZlY3Rvci5zaXplKCldOworICAgIGZvciAo
YXV0byBzdHJpbmcgOiB2ZWN0b3IpCisgICAgICAgIFthcnJheSBhZGRPYmplY3Q6c3RyaW5nXTsK
ICAgICByZXR1cm4gYXJyYXk7CiB9CiAKQEAgLTIzNzcsNyArMjM3NSw3IEBACiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb250ZW50c0F0dHJp
YnV0ZV0pIHsKICAgICAgICAgLy8gVGhlIGNvbnRlbnRzIG9mIGEgdGFiIGxpc3QgYXJlIGFsbCB0
aGUgY2hpbGRyZW4gZXhjZXB0IHRoZSB0YWJzLgogICAgICAgICBpZiAobV9vYmplY3QtPmlzVGFi
TGlzdCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7Cisg
ICAgICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwogICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHRh
YnNDaGlsZHJlbjsKICAgICAgICAgICAgIG1fb2JqZWN0LT50YWJDaGlsZHJlbih0YWJzQ2hpbGRy
ZW4pOwogICAgICAgICAgICAgCkBAIC0yMzg5LDE0ICsyMzg3LDExIEBACiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjb250ZW50cyk7CiAgICAgICAg
IH0gZWxzZSBpZiAobV9vYmplY3QtPmlzU2Nyb2xsVmlldygpKSB7Ci0gICAgICAgICAgICBjb25z
dCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxk
cmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIC8v
IEEgc2Nyb2xsVmlldydzIGNvbnRlbnRzIGFyZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgc2Nyb2xs
IGJhcnMuCiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgY29udGVudHM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGlsZHJlblNpemUg
PSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwg
Y2hpbGRyZW5TaXplOyArK2spIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuW2tdLT5p
c1Njcm9sbGJhcigpKQotICAgICAgICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoY2hpbGRy
ZW5ba10pOworICAgICAgICAgICAgZm9yIChhdXRvIGNoaWxkIDogbV9vYmplY3QtPmNoaWxkcmVu
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLT5pc1Njcm9sbGJhcigpKQorICAgICAg
ICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoY2hpbGQpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudHMpOwogICAgICAgICB9CkBA
IC0zNjE0LDcgKzM2MDksNyBAQAogICAgIGlmIChtX29iamVjdC0+aXNUcmVlKCkpCiAgICAgICAg
IHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDpjaGlsZF07CiAgICAgCi0g
ICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOworICAgIGF1dG8mIGNoaWxkcmVuID0g
bV9vYmplY3QtPmNoaWxkcmVuKCk7CiAgICAgCiAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIFtbc2VsZiByZW5kZXJXaWRnZXRDaGlsZHJlbl0gaW5kZXhPZk9iamVj
dDpjaGlsZF07CkBAIC0zNjQwLDcgKzM2MzUsNyBAQAogICAgICAgICBpZiAobV9vYmplY3QtPmlz
VHJlZSgpIHx8IG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpCiAgICAgICAgICAgICByZXR1cm4gW1tz
ZWxmIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0
dHJpYnV0ZV0gY291bnRdOwogICAgICAgICAKLSAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5j
aGlsZHJlbigpOworICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigp
OwogICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIFtb
c2VsZiByZW5kZXJXaWRnZXRDaGlsZHJlbl0gY291bnRdOwogICAgICAgICAKQEAgLTM2NzIsNyAr
MzY2Nyw3IEBACiAgICAgICAgICAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBcnJheUF0
dHJpYnV0ZVZhbHVlczphdHRyaWJ1dGUgaW5kZXg6aW5kZXggbWF4Q291bnQ6bWF4Q291bnRdOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVu
KCk7CisgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CiAgICAg
ICAgIHVuc2lnbmVkIGNoaWxkQ291bnQgPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgICAgIGlmIChp
bmRleCA+PSBjaGlsZENvdW50KQogICAgICAgICAgICAgcmV0dXJuIG5pbDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221077</attachid>
            <date>2014-01-13 13:06:30 -0800</date>
            <delta_ts>2014-01-14 08:44:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>43195</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTkwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDE0LTAxLTEzICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IE1vZGVybml6ZSBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbG9vcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjkxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZSBhcHByb3ByaWF0ZSBmb3IgbG9vcHMgdG8g
dXNlIHRoZSBuZXcgc3R5bGUuCisgICAgICAgIFVzZSBhdXRvIHdoZXJlIGFwcHJvcHJpYXRlLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRJbWFnZU1hcFVJRWxlbWVudCk6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRSb3dEZXNjZW5kYW50KToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cm93SW5kZXhSYW5nZSk6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRSb3dzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkQnlSb3cp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpwYXJlbnRUYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OmhlYWRlck9i
amVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveDo6YWRkQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6OnNldFNlbGVjdGVkQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6OnNlbGVjdGVkQ2hp
bGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246Omxp
c3RCb3hPcHRpb25JbmRleCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0Ojpk
aWRVcGRhdGVBY3RpdmVPcHRpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU1lbnVMaXN0UG9wdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1l
bnVMaXN0UG9wdXA6OmFkZENoaWxkcmVuKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjppbnNlcnRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6c2VsZWN0ZWRSYWRpb0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRUYWJJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphcmlhTGFiZWxlZEJ5VGV4dCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGVuZENoaWxkcmVuVG9BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpjbGVhckNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmFyaWFUcmVlUm93cyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjphcmlhVHJlZUl0ZW1Db250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OmFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVudEFjY2Vzc2liaWxpdHlIaXRUZXN0KToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkUmFkaW9CdXR0b25Hcm91
cE1lbWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
YXJpYUZsb3dUb0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzVGFiSXRlbVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkUm93cyk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhT3duc0VsZW1lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlJbWFnZU1hcEhp
dFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
UmVtb3RlU1ZHQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6dXBkYXRlQXR0YWNobWVudFZpZXdQYXJlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZEhpZGRlbkNoaWxkcmVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFTZWxlY3RlZFJvd3MpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJpYUxpc3Rib3hT
ZWxlY3RlZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmFyaWFMaXN0Ym94VmlzaWJsZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRhYkNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhSYWRpY2FuZE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoUm9vdEluZGV4T2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhOdW1l
cmF0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6bWF0aERlbm9taW5hdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6Om1hdGhVbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoT3Zlck9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoQmFzZU9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoU3Vic2NyaXB0T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhTdXBlcnNj
cmlwdE9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpjb2x1bW5IZWFkZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6cm93SGVhZGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnZpc2libGVSb3dzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpjZWxsRm9yQ29sdW1uQW5kUm93KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46OmhlYWRlck9iamVjdCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyOjphZGRDaGls
ZHJlbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlUm93OjpoZWFkZXJPYmplY3Qp
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nl
c3NpYmlsaXR5RWxlbWVudEF0SW5kZXg6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGluZGV4T2ZBY2Nlc3NpYmlsaXR5RWxlbWVudDpdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgY29udGFpbnNVbm5hdHVyYWxseVNlZ21lbnRl
ZENoaWxkcmVuXSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJCYXNlLm1tOgorICAgICAgICAoY29udmVydE1hdGhQYWlyc1RvTlNBcnJh
eSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBhY2Nlc3Np
YmlsaXR5VGl0bGVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJC
YXNlIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckJhc2UgYWNjZXNzaWJpbGl0eUhlbHBUZXh0XSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06Cisg
ICAgICAgIChjb252ZXJ0VG9OU0FycmF5KToKKyAgICAgICAgKGNvbnZlcnRTdHJpbmdzVG9OU0Fy
cmF5KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxkOl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVDb3VudDpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUFycmF5QXR0cmlidXRlVmFsdWVzOmluZGV4Om1heENvdW50Ol0pOgorCiAyMDE0LTAxLTEzICBE
YW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgdWludDhfdCBz
cGVjaWFsaXphdGlvbiBmb3IgV2ViQ29yZTo6d3JpdGVMaXR0bGVFbmRpYW4oKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lv
biAxNjE4OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTUgKzE0MiwxMiBAQAogICAgIGlmICghYXhSZW5k
ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBpbWFnZUNoaWxkcmVuID0gYXhS
ZW5kZXJJbWFnZS0+Y2hpbGRyZW4oKTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IGltYWdlQ2hpbGRy
ZW4uc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBjb3VudDsgKytrKSB7Ci0g
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkID0gaW1hZ2VDaGlsZHJlbltrXS5nZXQo
KTsKKyAgICBmb3IgKGF1dG8gY2hpbGQgOiBheFJlbmRlckltYWdlLT5jaGlsZHJlbigpKSB7CiAg
ICAgICAgIGlmICghY2hpbGQtPmlzSW1hZ2VNYXBMaW5rKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgCi0gICAgICAgIGlmICh0b0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsoY2hp
bGQpLT5hcmVhRWxlbWVudCgpID09IGFyZWFFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIGNo
aWxkOworICAgICAgICBpZiAodG9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rKGNoaWxkLmdldCgp
KS0+YXJlYUVsZW1lbnQoKSA9PSBhcmVhRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBjaGls
ZC5nZXQoKTsKICAgICB9ICAgIAogICAgIAogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNw
cAkocmV2aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5QVJJQUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMCArODgsOCBAQAog
ICAgIGlmICghcm93Q2hpbGQtPmlzVGFibGVSb3coKSkgewogICAgICAgICAvLyBBbHRob3VnaCBh
ICJncmlkIiBzaG91bGQgaGF2ZSByb3dzIGFzIGl0cyBkaXJlY3QgZGVzY2VuZGFudHMsIGlmIHRo
aXMgaXMgbm90IGEgdGFibGUgcm93LAogICAgICAgICAvLyBkaXZlIGRlZXBlciBpbnRvIHRoZSBk
ZXNjZW5kYW50cyB0byB0cnkgdG8gZmluZCBhIHZhbGlkIHJvdy4KLSAgICAgICAgY29uc3QgQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IHJvd0NoaWxkLT5jaGlsZHJlbigp
OwotICAgICAgICBzaXplX3QgbGVuZ3RoID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgYWRkUm93RGVzY2Vu
ZGFudChjaGlsZHJlbltpXS5nZXQoKSwgYXBwZW5kZWRSb3dzLCBjb2x1bW5Db3VudCk7CisgICAg
ICAgIGZvciAoYXV0byBjaGlsZCA6IHJvd0NoaWxkLT5jaGlsZHJlbigpKQorICAgICAgICAgICAg
YWRkUm93RGVzY2VuZGFudChjaGlsZC5nZXQoKSwgYXBwZW5kZWRSb3dzLCBjb2x1bW5Db3VudCk7
CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFRhYmxlQ2VsbENoaWxkKHJvd0NoaWxkLCBhcHBlbmRl
ZFJvd3MsIGNvbHVtbkNvdW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcAkocmV2aXNp
b24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQAogICAgICAg
ICBpZiAoIWNvbHVtbkNvdW50KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvbnN0
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgc2libGluZ3MgPSBwYXJlbnQtPmNoaWxkcmVu
KCk7CisgICAgICAgIGF1dG8mIHNpYmxpbmdzID0gcGFyZW50LT5jaGlsZHJlbigpOwogICAgICAg
ICB1bnNpZ25lZCBjaGlsZHJlblNpemUgPSBzaWJsaW5ncy5zaXplKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgayA9IDA7IGsgPCBjaGlsZHJlblNpemU7ICsraykgewogICAgICAgICAgICAgaWYg
KHNpYmxpbmdzW2tdLmdldCgpID09IHRoaXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAJKHJl
dmlzaW9uIDE2MTg5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQAogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgdW5zaWduZWQgbGV2ZWwgPSBoaWVyYXJjaGljYWxMZXZl
bCgpOwotICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgYWxsUm93cyA9IHRvQWNjZXNz
aWJpbGl0eVRhYmxlKHBhcmVudCktPnJvd3MoKTsKKyAgICBhdXRvJiBhbGxSb3dzID0gdG9BY2Nl
c3NpYmlsaXR5VGFibGUocGFyZW50KS0+cm93cygpOwogICAgIGludCByb3dDb3VudCA9IGFsbFJv
d3Muc2l6ZSgpOwogICAgIGZvciAoaW50IGsgPSBpbmRleCArIDE7IGsgPCByb3dDb3VudDsgKytr
KSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvdyA9IGFsbFJvd3Nba10uZ2V0KCk7
CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAKICAgICAvLyBTZWFyY2ggZm9yIHRoZSBwcmV2aW91
cyByb3cgdGhhdCBtYXRjaGVzIHRoZSBjb3JyZWN0IGxldmVsLgogICAgIGludCBpbmRleCA9IHJv
d0luZGV4KCk7Ci0gICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBhbGxSb3dzID0gdG9B
Y2Nlc3NpYmlsaXR5VGFibGUocGFyZW50KS0+cm93cygpOworICAgIGF1dG8mIGFsbFJvd3MgPSB0
b0FjY2Vzc2liaWxpdHlUYWJsZShwYXJlbnQpLT5yb3dzKCk7CiAgICAgaW50IHJvd0NvdW50ID0g
YWxsUm93cy5zaXplKCk7CiAgICAgaWYgKGluZGV4ID49IHJvd0NvdW50KQogICAgICAgICByZXR1
cm4gMDsKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHJvdzsKICAgICB9
CiAgICAgCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAgICAgCiBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OnBhcmVudFRhYmxlKCkg
Y29uc3QKQEAgLTEyNCwyMCArMTI0LDE3IEBACiAgICAgICAgICAgICByZXR1cm4gcGFyZW50Owog
ICAgIH0KICAgICAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogQWNj
ZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpoZWFkZXJPYmplY3Qo
KQogewotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgcm93Q2hpbGRyZW4g
PSBjaGlsZHJlbigpOwotICAgIHVuc2lnbmVkIGNoaWxkcmVuQ291bnQgPSByb3dDaGlsZHJlbi5z
aXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkcmVuQ291bnQ7ICsraSkg
ewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjZWxsID0gcm93Q2hpbGRyZW5baV0uZ2V0
KCk7Ci0gICAgICAgIGlmIChjZWxsLT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IFJvd0hlYWRlclJv
bGUpCi0gICAgICAgICAgICByZXR1cm4gY2VsbDsKKyAgICBmb3IgKGF1dG8gY2hpbGQgOiBjaGls
ZHJlbigpKSB7CisgICAgICAgIGlmIChjaGlsZC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBSb3dI
ZWFkZXJSb2xlKQorICAgICAgICAgICAgcmV0dXJuIGNoaWxkLmdldCgpOwogICAgIH0KICAgICAK
LSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAJKHJldmlzaW9uIDE2MTg5OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MiwxMiArNzIsMTAgQEAKICAgICAKICAgICBtX2hhdmVDaGlsZHJlbiA9IHRydWU7CiAg
ICAgCi0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvSFRNTFNl
bGVjdEVsZW1lbnQoc2VsZWN0Tm9kZSktPmxpc3RJdGVtcygpOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGxpc3RJdGVtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgZm9yIChhdXRvIGxpc3RJdGVtIDogdG9IVE1MU2VsZWN0RWxlbWVudChz
ZWxlY3ROb2RlKS0+bGlzdEl0ZW1zKCkpIHsKICAgICAgICAgLy8gVGhlIGNhc3QgdG8gSFRNTEVs
ZW1lbnQgYmVsb3cgaXMgc2FmZSBiZWNhdXNlIHRoZSBvbmx5IG90aGVyIHBvc3NpYmxlIGxpc3RJ
dGVtIHR5cGUKICAgICAgICAgLy8gd291bGQgYmUgYSBXTUxFbGVtZW50LCBidXQgV01MIGJ1aWxk
cyBkb24ndCB1c2UgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcyBhdCBhbGwuCi0gICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGxpc3RPcHRpb24gPSBsaXN0Qm94T3B0aW9uQWNjZXNzaWJpbGl0eU9i
amVjdChsaXN0SXRlbXNbaV0pOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0T3B0
aW9uID0gbGlzdEJveE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3QobGlzdEl0ZW0pOwogICAgICAg
ICBpZiAobGlzdE9wdGlvbiAmJiAhbGlzdE9wdGlvbi0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
KQogICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQobGlzdE9wdGlvbik7CiAgICAgfQpAQCAt
OTMsMjAgKzkxLDE3IEBACiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBkaXNhYmxlIGFu
eSBzZWxlY3RlZCBvcHRpb25zCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gbV9jaGlsZHJlbi5zaXpl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKiBsaXN0Qm94T3B0aW9uID0gdG9BY2Nlc3NpYmls
aXR5TGlzdEJveE9wdGlvbihtX2NoaWxkcmVuW2ldLmdldCgpKTsKKyAgICBmb3IgKGF1dG8gY2hp
bGQgOiBtX2NoaWxkcmVuKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKiBs
aXN0Qm94T3B0aW9uID0gdG9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbihjaGlsZC5nZXQoKSk7
CiAgICAgICAgIGlmIChsaXN0Qm94T3B0aW9uLT5pc1NlbGVjdGVkKCkpCiAgICAgICAgICAgICBs
aXN0Qm94T3B0aW9uLT5zZXRTZWxlY3RlZChmYWxzZSk7CiAgICAgfQogICAgIAotICAgIGxlbmd0
aCA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gY2hpbGRyZW5baV0u
Z2V0KCk7CisgICAgZm9yIChhdXRvIG9iaiA6IGNoaWxkcmVuKSB7CiAgICAgICAgIGlmIChvYmot
PnJvbGVWYWx1ZSgpICE9IExpc3RCb3hPcHRpb25Sb2xlKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgIHRvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24o
b2JqKS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CisgICAgICAgIHRvQWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb24ob2JqLmdldCgpKS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CiAgICAgfQogfQogICAgIApAQCAt
MTE3LDEwICsxMTIsOSBAQAogICAgIGlmICghaGFzQ2hpbGRyZW4oKSkKICAgICAgICAgYWRkQ2hp
bGRyZW4oKTsKICAgICAgICAgCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gbV9jaGlsZHJlbi5zaXpl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IGlmICh0b0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKG1fY2hpbGRyZW5baV0uZ2V0KCkpLT5p
c1NlbGVjdGVkKCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fY2hpbGRyZW5baV0pOwor
ICAgIGZvciAoYXV0byBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgaWYgKHRvQWNjZXNz
aWJpbGl0eUxpc3RCb3hPcHRpb24oY2hpbGQuZ2V0KCkpLT5pc1NlbGVjdGVkKCkpCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGNoaWxkLmdldCgpKTsKICAgICB9ICAgIAogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlMaXN0Qm94T3B0aW9uLmNwcAkocmV2aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgIGlmICghc2VsZWN0RWxlbWVudCkgCiAgICAgICAg
IHJldHVybiAtMTsKICAgICAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0
ZW1zID0gc2VsZWN0RWxlbWVudC0+bGlzdEl0ZW1zKCk7CisgICAgYXV0byYgbGlzdEl0ZW1zID0g
c2VsZWN0RWxlbWVudC0+bGlzdEl0ZW1zKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdEl0
ZW1zLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAg
ICAgICAgIGlmIChsaXN0SXRlbXNbaV0gPT0gbV9vcHRpb25FbGVtZW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0
LmNwcAkocmV2aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcg
QEAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50KG1fcmVuZGVyZXItPmRvY3VtZW50KCkpOwog
ICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKTsKIAot
ICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRPYmplY3RzID0gY2hp
bGRyZW4oKTsKKyAgICBhdXRvJiBjaGlsZE9iamVjdHMgPSBjaGlsZHJlbigpOwogICAgIGlmICgh
Y2hpbGRPYmplY3RzLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQoY2hpbGRPYmplY3RzLnNp
emUoKSA9PSAxKTsKICAgICAgICAgQVNTRVJUKGNoaWxkT2JqZWN0c1swXS0+aXNNZW51TGlzdFBv
cHVwKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3RQb3B1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAJKHJldmlzaW9uIDE2MTg5OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTAgKzEwMiw4IEBACiAKICAgICBtX2hhdmVDaGls
ZHJlbiA9IHRydWU7CiAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1z
ID0gdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3ROb2RlKS0+bGlzdEl0ZW1zKCk7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gbGlzdEl0ZW1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9u
KiBvcHRpb24gPSBtZW51TGlzdE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3QobGlzdEl0ZW1zW2ld
KTsKKyAgICBmb3IgKGF1dG8gbGlzdEl0ZW0gOiB0b0hUTUxTZWxlY3RFbGVtZW50KHNlbGVjdE5v
ZGUpLT5saXN0SXRlbXMoKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24q
IG9wdGlvbiA9IG1lbnVMaXN0T3B0aW9uQWNjZXNzaWJpbGl0eU9iamVjdChsaXN0SXRlbSk7CiAg
ICAgICAgIGlmIChvcHRpb24pIHsKICAgICAgICAgICAgIG9wdGlvbi0+c2V0UGFyZW50KHRoaXMp
OwogICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob3B0aW9uKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxNjE4OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDcgKzMz
NSw3IEBACiAgICAgY2hpbGQtPmNsZWFyQ2hpbGRyZW4oKTsKICAgICAKICAgICBpZiAoY2hpbGQt
PmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgewotICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gY2hpbGQtPmNoaWxkcmVuKCk7CisgICAgICAgIGF1
dG8mIGNoaWxkcmVuID0gY2hpbGQtPmNoaWxkcmVuKCk7CiAgICAgICAgIHNpemVfdCBsZW5ndGgg
PSBjaGlsZHJlbi5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCiAgICAgICAgICAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCArIGksIGNoaWxkcmVu
W2ldKTsKQEAgLTkwOSwzNyArOTA5LDMwIEBACiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRSYWRpb0J1dHRvbigpCiB7CiAgICAgaWYgKCFpc1Jh
ZGlvR3JvdXAoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0KICAgICAvLyBGaW5kIHRoZSBjaGls
ZCByYWRpbyBidXR0b24gdGhhdCBpcyBzZWxlY3RlZCAoaWUuIHRoZSBpbnRWYWx1ZSA9PSAxKS4K
LSAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3Qg
PSBjaGlsZHJlbltpXS5nZXQoKTsKLSAgICAgICAgaWYgKG9iamVjdC0+cm9sZVZhbHVlKCkgPT0g
UmFkaW9CdXR0b25Sb2xlICYmIG9iamVjdC0+Y2hlY2tib3hPclJhZGlvVmFsdWUoKSA9PSBCdXR0
b25TdGF0ZU9uKQotICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICBmb3IgKGF1dG8gY2hp
bGQgOiBjaGlsZHJlbigpKSB7CisgICAgICAgIGlmIChjaGlsZC0+cm9sZVZhbHVlKCkgPT0gUmFk
aW9CdXR0b25Sb2xlICYmIGNoaWxkLT5jaGVja2JveE9yUmFkaW9WYWx1ZSgpID09IEJ1dHRvblN0
YXRlT24pCisgICAgICAgICAgICByZXR1cm4gY2hpbGQuZ2V0KCk7CiAgICAgfQotICAgIHJldHVy
biAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRUYWJJdGVtKCkKIHsKICAgICBpZiAoIWlzVGFi
TGlzdCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICAvLyBGaW5kIHRoZSBjaGlsZCB0YWIgaXRlbSB0aGF0IGlzIHNlbGVjdGVkIChpZS4gdGhlIGlu
dFZhbHVlID09IDEpLgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciB0YWJzOwogICAgIHRhYkNoaWxkcmVuKHRhYnMpOwogCi0gICAgY29uc3QgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9
IHRoaXMtPmNoaWxkcmVuKCk7Ci0gICAgc2l6ZV90IHNpemUgPSB0YWJzLnNpemUoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmplY3QgPSBjaGlsZHJlbltpXS5nZXQoKTsKLSAgICAgICAgaWYgKG9iamVjdC0+
aXNUYWJJdGVtKCkgJiYgb2JqZWN0LT5pc0NoZWNrZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBv
YmplY3Q7CisgICAgZm9yIChhdXRvIGNoaWxkIDogY2hpbGRyZW4oKSkgeworICAgICAgICBpZiAo
Y2hpbGQtPmlzVGFiSXRlbSgpICYmIGNoaWxkLT5pc0NoZWNrZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBjaGlsZC5nZXQoKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6Y2hlY2tib3hPclJhZGlvVmFsdWUoKSBjb25zdApAQCAtMTQzMyw5ICsxNDI2LDggQEAKICAg
ICAgICAgYXJpYUxhYmVsZWRCeUVsZW1lbnRzKGVsZW1lbnRzKTsKICAgICAgICAgCiAgICAgICAg
IFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4+IGF4RWxlbWVudHM7Ci0gICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGVsZW1lbnRzLnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBrID0gMDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgICBSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdD4gYXhFbGVtZW50ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShlbGVt
ZW50c1trXSk7CisgICAgICAgIGZvciAoYXV0byBlbGVtZW50IDogZWxlbWVudHMpIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBheEVsZW1lbnQgPSBheE9iamVjdENh
Y2hlKCktPmdldE9yQ3JlYXRlKGVsZW1lbnQpOwogICAgICAgICAgICAgYXhFbGVtZW50cy5hcHBl
bmQoYXhFbGVtZW50KTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNp
b24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE3LDcgKzQxNyw3IEBACiB7CiAgICAgLy8g
QSB0YWJsZSdzIGNoaWxkcmVuIGluY2x1ZGVzIGVsZW1lbnRzIHdob3NlIG93biBjaGlsZHJlbiBh
cmUgYWxzbyB0aGUgdGFibGUncyBjaGlsZHJlbiAoZHVlIHRvIHRoZSB3YXkgdGhlIE1hYyBleHBv
c2VzIHRhYmxlcykuCiAgICAgLy8gVGhlIHJvd3MgZnJvbSB0aGUgdGFibGUgc2hvdWxkIGJlIHF1
ZXJpZWQsIHNpbmNlIHRob3NlIGFyZSBkaXJlY3QgZGVzY2VuZGFudHMgb2YgdGhlIHRhYmxlLCBh
bmQgdGhleSBjb250YWluIGNvbnRlbnQuCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBzZWFyY2hDaGlsZHJlbiA9IG9iamVjdC0+aXNB
Y2Nlc3NpYmlsaXR5VGFibGUoKSA/IHRvQWNjZXNzaWJpbGl0eVRhYmxlKG9iamVjdCktPnJvd3Mo
KSA6IG9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICBhdXRvJiBzZWFyY2hDaGlsZHJlbiA9IG9iamVj
dC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSA/IHRvQWNjZXNzaWJpbGl0eVRhYmxlKG9iamVjdCkt
PnJvd3MoKSA6IG9iamVjdC0+Y2hpbGRyZW4oKTsKIAogICAgIHNpemVfdCBjaGlsZHJlblNpemUg
PSBzZWFyY2hDaGlsZHJlbi5zaXplKCk7CiAKQEAgLTEyNzcsOSArMTI3Nyw4IEBACiB2b2lkIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmNsZWFyQ2hpbGRyZW4oKQogewogICAgIC8vIFNvbWUgb2JqZWN0
cyBoYXZlIHdlYWsgcG9pbnRlcnMgdG8gdGhlaXIgcGFyZW50cyBhbmQgdGhvc2UgYXNzb2NpYXRp
b25zIG5lZWQgdG8gYmUgZGV0YWNoZWQuCi0gICAgc2l6ZV90IGxlbmd0aCA9IG1fY2hpbGRyZW4u
c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAg
IG1fY2hpbGRyZW5baV0tPmRldGFjaEZyb21QYXJlbnQoKTsKKyAgICBmb3IgKGF1dG8gY2hpbGQg
OiBtX2NoaWxkcmVuKQorICAgICAgICBjaGlsZC0+ZGV0YWNoRnJvbVBhcmVudCgpOwogICAgIAog
ICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKICAgICBtX2hhdmVDaGlsZHJlbiA9IGZhbHNlOwpAQCAt
MTMyMCw0MiArMTMxOSwzMSBAQAogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFUcmVl
Um93cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJlc3VsdCkKIHsKLSAgICBjb25zdCBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGF4Q2hpbGRyZW4gPSBjaGlsZHJlbigpOwotICAg
IHVuc2lnbmVkIGNvdW50ID0gYXhDaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGNvdW50OyArK2spIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
ID0gYXhDaGlsZHJlbltrXS5nZXQoKTsKLSAgICAgICAgCisgICAgZm9yIChhdXRvIGNoaWxkIDog
Y2hpbGRyZW4oKSkgewogICAgICAgICAvLyBBZGQgdHJlZSBpdGVtcyBhcyB0aGUgcm93cy4KLSAg
ICAgICAgaWYgKG9iai0+cm9sZVZhbHVlKCkgPT0gVHJlZUl0ZW1Sb2xlKSAKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQob2JqKTsKKyAgICAgICAgaWYgKGNoaWxkLT5yb2xlVmFsdWUoKSA9PSBU
cmVlSXRlbVJvbGUpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNoaWxkKTsKIAogICAgICAg
ICAvLyBOb3cgc2VlIGlmIHRoaXMgaXRlbSBhbHNvIGhhcyByb3dzIGhpZGluZyBpbnNpZGUgb2Yg
aXQuCi0gICAgICAgIG9iai0+YXJpYVRyZWVSb3dzKHJlc3VsdCk7CisgICAgICAgIGNoaWxkLT5h
cmlhVHJlZVJvd3MocmVzdWx0KTsKICAgICB9CiB9CiAgICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmFyaWFUcmVlSXRlbUNvbnRlbnQoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBy
ZXN1bHQpCiB7CiAgICAgLy8gVGhlIEFSSUEgdHJlZSBpdGVtIGNvbnRlbnQgYXJlIHRoZSBpdGVt
IHRoYXQgYXJlIG5vdCBvdGhlciB0cmVlIGl0ZW1zIG9yIHRoZWlyIGNvbnRhaW5pbmcgZ3JvdXBz
LgotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgYXhDaGlsZHJlbiA9IGNo
aWxkcmVuKCk7Ci0gICAgdW5zaWduZWQgY291bnQgPSBheENoaWxkcmVuLnNpemUoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY291bnQ7ICsraykgewotICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmogPSBheENoaWxkcmVuW2tdLmdldCgpOwotICAgICAgICBBY2Nlc3NpYmls
aXR5Um9sZSByb2xlID0gb2JqLT5yb2xlVmFsdWUoKTsKKyAgICBmb3IgKGF1dG8gY2hpbGQgOiBj
aGlsZHJlbigpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBjaGlsZC0+cm9s
ZVZhbHVlKCk7CiAgICAgICAgIGlmIChyb2xlID09IFRyZWVJdGVtUm9sZSB8fCByb2xlID09IEdy
b3VwUm9sZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0
LmFwcGVuZChvYmopOworICAgICAgICByZXN1bHQuYXBwZW5kKGNoaWxkKTsKICAgICB9CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93cyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJlc3VsdCkKIHsKLSAgICBjb25zdCBBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImIGF4Q2hpbGRyZW4gPSBjaGlsZHJlbigpOwotICAgIHVuc2lnbmVk
IGNvdW50ID0gYXhDaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8
IGNvdW50OyArK2spIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gYXhDaGls
ZHJlbltrXS5nZXQoKTsKLSAgICAgICAgCisgICAgZm9yIChhdXRvIG9iaiA6IGNoaWxkcmVuKCkp
IHsKICAgICAgICAgLy8gQWRkIHRyZWUgaXRlbXMgYXMgdGhlIHJvd3MuCiAgICAgICAgIGlmIChv
YmotPnJvbGVWYWx1ZSgpID09IFRyZWVJdGVtUm9sZSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQob2JqKTsKQEAgLTE2NzcsMTAgKzE2NjUsOSBAQAogICAgIH0KICAgICAKICAgICAvLyBDaGVj
ayBpZiB0aGVyZSBhcmUgYW55IG1vY2sgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGJlIGhhbmRsZWQu
Ci0gICAgc2l6ZV90IGNvdW50ID0gbV9jaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yIChzaXplX3Qg
ayA9IDA7IGsgPCBjb3VudDsgaysrKSB7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuW2tdLT5pc01v
Y2tPYmplY3QoKSAmJiBtX2NoaWxkcmVuW2tdLT5lbGVtZW50UmVjdCgpLmNvbnRhaW5zKHBvaW50
KSkKLSAgICAgICAgICAgIHJldHVybiBtX2NoaWxkcmVuW2tdLT5lbGVtZW50QWNjZXNzaWJpbGl0
eUhpdFRlc3QocG9pbnQpOworICAgIGZvciAoYXV0byBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAg
ICAgICAgaWYgKGNoaWxkLT5pc01vY2tPYmplY3QoKSAmJiBjaGlsZC0+ZWxlbWVudFJlY3QoKS5j
b250YWlucyhwb2ludCkpCisgICAgICAgICAgICByZXR1cm4gY2hpbGQtPmVsZW1lbnRBY2Nlc3Np
YmlsaXR5SGl0VGVzdChwb2ludCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8QWNj
ZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMpOyAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2
aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYyLDEwICs5NjIsOCBAQAog
ICAgICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBmb3JtRWxlbWVudHM7CiAgICAgICAgIGlucHV0
LT5mb3JtKCktPmdldE5hbWVkRWxlbWVudHMoaW5wdXQtPm5hbWUoKSwgZm9ybUVsZW1lbnRzKTsK
ICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxlbiA9IGZvcm1FbGVtZW50cy5zaXplKCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAg
RWxlbWVudCYgYXNzb2NpYXRlRWxlbWVudCA9IGZvcm1FbGVtZW50c1tpXS5nZXQoKTsKLSAgICAg
ICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBheE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKCZhc3NvY2lhdGVFbGVtZW50KSkKKyAgICAgICAgZm9yIChhdXRvJiBhc3Nv
Y2lhdGVFbGVtZW50IDogZm9ybUVsZW1lbnRzKSB7CisgICAgICAgICAgICBpZiAoQWNjZXNzaWJp
bGl0eU9iamVjdCogb2JqZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSgmYXNzb2Np
YXRlRWxlbWVudC5nZXQoKSkpCiAgICAgICAgICAgICAgICAgbGlua2VkVUlFbGVtZW50cy5hcHBl
bmQob2JqZWN0KTsgICAgICAgIAogICAgICAgICB9IAogICAgIH0gZWxzZSB7CkBAIC0xMDIyLDkg
KzEwMjAsNyBAQAogICAgIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShlbGVtZW50cywgYXJpYV9mbG93
dG9BdHRyKTsKICAgICAKICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUo
KTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IGVsZW1lbnRzLnNpemUoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGsgPSAwOyBrIDwgY291bnQ7ICsraykgewotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0g
ZWxlbWVudHNba107CisgICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVtZW50cykgewogICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmbG93VG9FbGVtZW50ID0gY2FjaGUtPmdldE9yQ3JlYXRl
KGVsZW1lbnQpOwogICAgICAgICBpZiAoZmxvd1RvRWxlbWVudCkKICAgICAgICAgICAgIGZsb3dU
by5hcHBlbmQoZmxvd1RvRWxlbWVudCk7CkBAIC0xNTc4LDkgKzE1NzQsNyBAQAogICAgIFZlY3Rv
cjxFbGVtZW50Kj4gZWxlbWVudHM7CiAgICAgZWxlbWVudHNGcm9tQXR0cmlidXRlKGVsZW1lbnRz
LCBhcmlhX2NvbnRyb2xzQXR0cik7CiAgICAgCi0gICAgdW5zaWduZWQgY291bnQgPSBlbGVtZW50
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsKLSAg
ICAgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRzW2tdOworICAgIGZvciAoYXV0byBlbGVt
ZW50IDogZWxlbWVudHMpIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdGFiUGFuZWwg
PSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGVsZW1lbnQpOwogCiAgICAgICAgIC8vIEEg
dGFiIGl0ZW0gc2hvdWxkIG9ubHkgY29udHJvbCB0YWIgcGFuZWxzLgpAQCAtMTY1Myw4ICsxNjQ3
LDggQEAKICAgICBpZiAoY291bnQgPiAxICYmICFpc011bHRpKQogICAgICAgICBjb3VudCA9IDE7
CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spCi0gICAgICAg
IHNlbGVjdGVkUm93c1trXS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CisgICAgZm9yIChhdXRvIHNlbGVj
dGVkUm93IDogc2VsZWN0ZWRSb3dzKQorICAgICAgICBzZWxlY3RlZFJvdy0+c2V0U2VsZWN0ZWQo
dHJ1ZSk7CiB9CiAgICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFZhbHVl
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQpAQCAtMTY4Miw5ICsxNjc2LDggQEAKICAgICBWZWN0b3I8
RWxlbWVudCo+IGVsZW1lbnRzOwogICAgIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShlbGVtZW50cywg
YXJpYV9vd25zQXR0cik7CiAgICAgCi0gICAgdW5zaWduZWQgY291bnQgPSBlbGVtZW50cy5zaXpl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXIgPSBlbGVtZW50c1trXS0+cmVuZGVyZXIoKTsKKyAgICBmb3Ig
KGF1dG8gZWxlbWVudCA6IGVsZW1lbnRzKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXIpOwogICAgICAgICBpZiAob2Jq
KQogICAgICAgICAgICAgYXhPYmplY3RzLmFwcGVuZChvYmopOwpAQCAtMjE1NSwxMiArMjE0OCw5
IEBACiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGNvbnN0
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRy
ZW4gPSBwYXJlbnQtPmNoaWxkcmVuKCk7Ci0gICAgCi0gICAgdW5zaWduZWQgY291bnQgPSBjaGls
ZHJlbi5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsK
LSAgICAgICAgaWYgKGNoaWxkcmVuW2tdLT5lbGVtZW50UmVjdCgpLmNvbnRhaW5zKHBvaW50KSkK
LSAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltrXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8gY2hp
bGQgOiBwYXJlbnQtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5lbGVtZW50UmVj
dCgpLmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjaGlsZC5nZXQoKTsKICAg
ICB9CiAgICAgCiAgICAgcmV0dXJuIDA7CkBAIC0yODU5LDEwICsyODQ5LDggQEAKICAgICByb290
LT5zZXRQYXJlbnQodGhpcyk7CiAgICAgCiAgICAgaWYgKHJvb3QtPmFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQoKSkgewotICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNo
aWxkcmVuID0gcm9vdC0+Y2hpbGRyZW4oKTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gY2hp
bGRyZW4uc2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZHJlbltpXSk7CisgICAgICAg
IGZvciAoYXV0byBjaGlsZCA6IHJvb3QtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICBtX2NoaWxk
cmVuLmFwcGVuZChjaGlsZCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5k
KHJvb3QpOwogfQpAQCAtMjkwNCwxMCArMjg5Miw5IEBACiAgICAgaWYgKGFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHNpemVfdCBsZW5ndGggPSBt
X2NoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGxlbmd0aDsgaysr
KSB7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuW2tdLT5pc0F0dGFjaG1lbnQoKSkKLSAgICAgICAg
ICAgIG1fY2hpbGRyZW5ba10tPm92ZXJyaWRlQXR0YWNobWVudFBhcmVudCh0aGlzKTsKKyAgICBm
b3IgKGF1dG8gY2hpbGQgOiBtX2NoaWxkcmVuKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNBdHRh
Y2htZW50KCkpCisgICAgICAgICAgICBjaGlsZC0+b3ZlcnJpZGVBdHRhY2htZW50UGFyZW50KHRo
aXMpOwogICAgIH0KIH0KICNlbmRpZgpAQCAtMjk0MSw3ICsyOTI4LDcgQEAKICAgICAgICAgICAg
IC8vIEZpbmQgb3V0IHdoZXJlIHRoZSBsYXN0IHJlbmRlciBzaWJsaW5nIGlzIGxvY2F0ZWQgd2l0
aGluIG1fY2hpbGRyZW4uCiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZE9i
amVjdCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0KGNoaWxkLT5yZW5kZXJlcigpKTsKICAgICAgICAg
ICAgIGlmIChjaGlsZE9iamVjdCAmJiBjaGlsZE9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JiBjaGlsZHJlbiA9IGNoaWxkT2JqZWN0LT5jaGlsZHJlbigpOworICAgICAgICAgICAgICAgIGF1
dG8mIGNoaWxkcmVuID0gY2hpbGRPYmplY3QtPmNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAg
aWYgKGNoaWxkcmVuLnNpemUoKSkKICAgICAgICAgICAgICAgICAgICAgY2hpbGRPYmplY3QgPSBj
aGlsZHJlbi5sYXN0KCkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMzA2OCwxMCAr
MzA1NSw5IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWduZWQgY291
bnQgPSBhbGxSb3dzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY291bnQ7
ICsraykgewotICAgICAgICBpZiAoYWxsUm93c1trXS0+aXNTZWxlY3RlZCgpKSB7Ci0gICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGFsbFJvd3Nba10pOworICAgIGZvciAoYXV0byByb3cgOiBhbGxS
b3dzKSB7CisgICAgICAgIGlmIChyb3ctPmlzU2VsZWN0ZWQoKSkgeworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChyb3cpOwogICAgICAgICAgICAgaWYgKCFpc011bHRpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zMDgyLDExICszMDY4LDggQEAKIHsKICAgICBib29s
IGlzTXVsdGkgPSBpc011bHRpU2VsZWN0YWJsZSgpOwogCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJiBjaGlsZE9iamVjdHMgPSBjaGlsZHJlbigpOwotICAgIHVuc2lnbmVk
IGNoaWxkcmVuU2l6ZSA9IGNoaWxkT2JqZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGNoaWxkcmVuU2l6ZTsgKytrKSB7CisgICAgZm9yIChhdXRvIGNoaWxkIDogY2hp
bGRyZW4oKSkgewogICAgICAgICAvLyBFdmVyeSBjaGlsZCBzaG91bGQgaGF2ZSBhcmlhLXJvbGUg
b3B0aW9uLCBhbmQgaWYgc28sIGNoZWNrIGZvciBzZWxlY3RlZCBhdHRyaWJ1dGUvc3RhdGUuCi0g
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkID0gY2hpbGRPYmplY3RzW2tdLmdldCgp
OwogICAgICAgICBpZiAoY2hpbGQtPmlzU2VsZWN0ZWQoKSAmJiBjaGlsZC0+YXJpYVJvbGVBdHRy
aWJ1dGUoKSA9PSBMaXN0Qm94T3B0aW9uUm9sZSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChjaGlsZCk7CiAgICAgICAgICAgICBpZiAoIWlzTXVsdGkpCkBAIC0zMTEyLDExICszMDk1LDkg
QEAKICAgICBpZiAoIWhhc0NoaWxkcmVuKCkpCiAgICAgICAgIGFkZENoaWxkcmVuKCk7CiAgICAg
Ci0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBjaGls
ZHJlbi5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAg
ICAgICAgaWYgKCFjaGlsZHJlbltpXS0+aXNPZmZTY3JlZW4oKSkKLSAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoY2hpbGRyZW5baV0pOworICAgIGZvciAoYXV0byBjaGlsZCA6IGNoaWxkcmVuKCkp
IHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc09mZlNjcmVlbigpKQorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChjaGlsZCk7CiAgICAgfQogfQogCkBAIC0zMTM2LDExICszMTE3LDkgQEAKIHsKICAg
ICBBU1NFUlQocm9sZVZhbHVlKCkgPT0gVGFiTGlzdFJvbGUpOwogICAgIAotICAgIGNvbnN0IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4g
PSB0aGlzLT5jaGlsZHJlbigpOwotICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChjaGls
ZHJlbltpXS0+aXNUYWJJdGVtKCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNoaWxkcmVu
W2ldKTsKKyAgICBmb3IgKGF1dG8gY2hpbGQgOiBjaGlsZHJlbigpKSB7CisgICAgICAgIGlmIChj
aGlsZC0+aXNUYWJJdGVtKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNoaWxkKTsKICAg
ICB9CiB9CiAgICAgCkBAIC0zNTcxLDcgKzM1NTAsNyBAQAogICAgIGlmICghaXNNYXRoUm9vdCgp
KQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4o
KTsKKyAgICBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CiAgICAgaWYgKGNoaWxk
cmVuLnNpemUoKSA8IDEpCiAgICAgICAgIHJldHVybiAwOwogICAgIApAQCAtMzU4NCw3ICszNTYz
LDcgQEAKICAgICBpZiAoIWlzTWF0aFJvb3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0g
ICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgYXV0byYgY2hpbGRyZW4gPSB0aGlz
LT5jaGlsZHJlbigpOwogICAgIGlmIChjaGlsZHJlbi5zaXplKCkgIT0gMikKICAgICAgICAgcmV0
dXJuIDA7CiAKQEAgLTM1OTgsNyArMzU3Nyw3IEBACiAgICAgaWYgKCFpc01hdGhGcmFjdGlvbigp
KQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4o
KTsKKyAgICBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CiAgICAgaWYgKGNoaWxk
cmVuLnNpemUoKSAhPSAyKQogICAgICAgICByZXR1cm4gMDsKICAgICAKQEAgLTM2MTAsNyArMzU4
OSw3IEBACiAgICAgaWYgKCFpc01hdGhGcmFjdGlvbigpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIGF1dG8mIGNoaWxkcmVuID0gdGhp
cy0+Y2hpbGRyZW4oKTsKICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpICE9IDIpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIApAQCAtMzYyMiw3ICszNjAxLDcgQEAKICAgICBpZiAoIWlzTWF0aFVuZGVy
T3ZlcigpIHx8ICFub2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGNvbnN0IEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwor
ICAgIGF1dG8mIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKICAgICBpZiAoY2hpbGRyZW4u
c2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkBAIC0zNjM3LDcgKzM2MTYsNyBA
QAogICAgIGlmICghaXNNYXRoVW5kZXJPdmVyKCkgfHwgIW5vZGUoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJl
biA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJl
bigpOwogICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPCAyKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAKQEAgLTM2NTQsNyArMzYzMyw3IEBACiAgICAgaWYgKCFpc01hdGhTdWJzY3JpcHRTdXBlcnNj
cmlwdCgpICYmICFpc01hdGhVbmRlck92ZXIoKSAmJiAhaXNNYXRoTXVsdGlzY3JpcHQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgYXV0byYgY2hpbGRyZW4gPSB0
aGlzLT5jaGlsZHJlbigpOwogICAgIC8vIFRoZSBiYXNlIG9iamVjdCBpbiBxdWVzdGlvbiBpcyBh
bHdheXMgdGhlIGZpcnN0IGNoaWxkLgogICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPiAwKQogICAg
ICAgICByZXR1cm4gY2hpbGRyZW5bMF0uZ2V0KCk7CkBAIC0zNjY3LDcgKzM2NDYsNyBAQAogICAg
IGlmICghaXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSB8fCAhbm9kZSgpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNo
aWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKKyAgICBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNo
aWxkcmVuKCk7CiAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA8IDIpCiAgICAgICAgIHJldHVybiAw
OwogCkBAIC0zNjgyLDcgKzM2NjEsNyBAQAogICAgIGlmICghaXNNYXRoU3Vic2NyaXB0U3VwZXJz
Y3JpcHQoKSB8fCAhbm9kZSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBjb25zdCBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsK
KyAgICBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CiAgICAgdW5zaWduZWQgY291
bnQgPSBjaGlsZHJlbi5zaXplKCk7CiAKICAgICBpZiAoY291bnQgPj0gMiAmJiBub2RlKCktPmhh
c1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1zdXBUYWcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAkocmV2aXNpb24gMTYx
ODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjgsOSArNDI4LDggQEAKICAgICAKICAgICB1cGRhdGVD
aGlsZHJlbklmTmVjZXNzYXJ5KCk7CiAgICAgCi0gICAgc2l6ZV90IGNvbHVtbkNvdW50ID0gbV9j
b2x1bW5zLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyAr
K2kpIHsKLSAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlciA9IHRvQWNjZXNz
aWJpbGl0eVRhYmxlQ29sdW1uKG1fY29sdW1uc1tpXS5nZXQoKSktPmhlYWRlck9iamVjdCgpKQor
ICAgIGZvciAoYXV0byBjb2x1bW4gOiBtX2NvbHVtbnMpIHsKKyAgICAgICAgaWYgKEFjY2Vzc2li
aWxpdHlPYmplY3QqIGhlYWRlciA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uKGNvbHVtbi5n
ZXQoKSktPmhlYWRlck9iamVjdCgpKQogICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQoaGVhZGVy
KTsKICAgICB9CiB9CkBAIC00NDIsOSArNDQxLDggQEAKICAgICAKICAgICB1cGRhdGVDaGlsZHJl
bklmTmVjZXNzYXJ5KCk7CiAgICAgCi0gICAgc2l6ZV90IHJvd0NvdW50ID0gbV9yb3dzLnNpemUo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvd0NvdW50OyArK2kpIHsKLSAgICAgICAg
aWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlciA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlUm93
KG1fcm93c1tpXS5nZXQoKSktPmhlYWRlck9iamVjdCgpKQorICAgIGZvciAoYXV0byByb3cgOiBt
X3Jvd3MpIHsKKyAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlciA9IHRvQWNj
ZXNzaWJpbGl0eVRhYmxlUm93KHJvdy5nZXQoKSktPmhlYWRlck9iamVjdCgpKQogICAgICAgICAg
ICAgaGVhZGVycy5hcHBlbmQoaGVhZGVyKTsKICAgICB9CiB9CkBAIC00NTYsOSArNDU0LDcgQEAK
ICAgICAKICAgICB1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CiAgICAgCi0gICAgc2l6ZV90
IHJvd0NvdW50ID0gbV9yb3dzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJv
d0NvdW50OyArK2kpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcm93ID0gbV9yb3dz
W2ldLmdldCgpOworICAgIGZvciAoYXV0byByb3cgOiBtX3Jvd3MpIHsKICAgICAgICAgaWYgKHJv
dyAmJiAhcm93LT5pc09mZlNjcmVlbigpKQogICAgICAgICAgICAgcm93cy5hcHBlbmQocm93KTsK
ICAgICB9CkBAIC00NzEsOCArNDY3LDggQEAKICAgICAKICAgICB1cGRhdGVDaGlsZHJlbklmTmVj
ZXNzYXJ5KCk7CiAgICAgCi0gICAgZm9yIChzaXplX3Qgcm93ID0gMDsgcm93IDwgbV9yb3dzLnNp
emUoKTsgKytyb3cpCi0gICAgICAgIGNlbGxzLmFwcGVuZFZlY3RvcihtX3Jvd3Nbcm93XS0+Y2hp
bGRyZW4oKSk7CisgICAgZm9yIChhdXRvIHJvdyA6IG1fcm93cykKKyAgICAgICAgY2VsbHMuYXBw
ZW5kVmVjdG9yKHJvdy0+Y2hpbGRyZW4oKSk7CiB9CiAgICAgCiB1bnNpZ25lZCBBY2Nlc3NpYmls
aXR5VGFibGU6OmNvbHVtbkNvdW50KCkKQEAgLTUwOSw3ICs1MDUsNyBAQAogICAgIC8vIEl0ZXJh
dGUgYmFja3dhcmRzIHRocm91Z2ggdGhlIHJvd3MgaW4gY2FzZSB0aGUgZGVzaXJlZCBjZWxsIGhh
cyBhIHJvd3NwYW4gYW5kIGV4aXN0cyBpbiBhIHByZXZpb3VzIHJvdy4KICAgICBmb3IgKHVuc2ln
bmVkIHJvd0luZGV4Q291bnRlciA9IHJvdyArIDE7IHJvd0luZGV4Q291bnRlciA+IDA7IC0tcm93
SW5kZXhDb3VudGVyKSB7CiAgICAgICAgIHVuc2lnbmVkIHJvd0luZGV4ID0gcm93SW5kZXhDb3Vu
dGVyIC0gMTsKLSAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGls
ZHJlbiA9IG1fcm93c1tyb3dJbmRleF0tPmNoaWxkcmVuKCk7CisgICAgICAgIGF1dG8mIGNoaWxk
cmVuID0gbV9yb3dzW3Jvd0luZGV4XS0+Y2hpbGRyZW4oKTsKICAgICAgICAgLy8gU2luY2Ugc29t
ZSBjZWxscyBtYXkgaGF2ZSBjb2xzcGFucywgd2UgaGF2ZSB0byBjaGVjayB0aGUgYWN0dWFsIHJh
bmdlIG9mIGVhY2gKICAgICAgICAgLy8gY2VsbCB0byBkZXRlcm1pbmUgd2hpY2ggaXMgdGhlIHJp
Z2h0IG9uZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBjb2xJbmRleENvdW50ZXIgPSBzdGQ6Om1p
bihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hpbGRyZW4uc2l6ZSgpKSwgY29sdW1uICsgMSk7IGNv
bEluZGV4Q291bnRlciA+IDA7IC0tY29sSW5kZXhDb3VudGVyKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1
bW4uY3BwCShyZXZpc2lvbiAxNjE4OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEyICs4
MCw5IEBACiAgICAgCiAgICAgQWNjZXNzaWJpbGl0eVRhYmxlKiBwYXJlbnRUYWJsZSA9IHRvQWNj
ZXNzaWJpbGl0eVRhYmxlKG1fcGFyZW50KTsKICAgICBpZiAocGFyZW50VGFibGUtPmlzQXJpYVRh
YmxlKCkpIHsKLSAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByb3dD
aGlsZHJlbiA9IGNoaWxkcmVuKCk7Ci0gICAgICAgIHVuc2lnbmVkIGNoaWxkcmVuQ291bnQgPSBy
b3dDaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGls
ZHJlbkNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNlbGwg
PSByb3dDaGlsZHJlbltpXS5nZXQoKTsKKyAgICAgICAgZm9yIChhdXRvIGNlbGwgOiBjaGlsZHJl
bigpKSB7CiAgICAgICAgICAgICBpZiAoY2VsbC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBDb2x1
bW5IZWFkZXJSb2xlKQotICAgICAgICAgICAgICAgIHJldHVybiBjZWxsOworICAgICAgICAgICAg
ICAgIHJldHVybiBjZWxsLmdldCgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlSGVhZGVyQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAJKHJldmlzaW9u
IDE2MTg5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlSGVhZGVyQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsOCBAQAog
ICAgIAogICAgIHRvQWNjZXNzaWJpbGl0eVRhYmxlKG1fcGFyZW50KS0+Y29sdW1uSGVhZGVycyht
X2NoaWxkcmVuKTsKICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2NoaWxkcmVuLnNpemUo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyArK2spCi0gICAgICAgIG1f
aGVhZGVyUmVjdC51bml0ZShtX2NoaWxkcmVuW2tdLT5lbGVtZW50UmVjdCgpKTsKKyAgICBmb3Ig
KGF1dG8gY2hpbGQgOiBtX2NoaWxkcmVuKQorICAgICAgICBtX2hlYWRlclJlY3QudW5pdGUoY2hp
bGQtPmVsZW1lbnRSZWN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVSb3cuY3BwCShyZXZpc2lvbiAxNjE4OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsx
MTcsNyBAQAogICAgIGlmICghbV9yZW5kZXJlciB8fCAhbV9yZW5kZXJlci0+aXNUYWJsZVJvdygp
KQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3ImIHJvd0NoaWxkcmVuID0gY2hpbGRyZW4oKTsKKyAgICBhdXRvJiByb3dDaGlsZHJl
biA9IGNoaWxkcmVuKCk7CiAgICAgaWYgKCFyb3dDaGlsZHJlbi5zaXplKCkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1Mu
bW0JKHJldmlzaW9uIDE2MTg5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9z
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDcsNyArMzQ3LDcgQEAKICAgICBpZiAoW3NlbGYgaXNBdHRhY2htZW50XSkKICAgICAgICAgcmV0
dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUVsZW1lbnRBdEluZGV4Omlu
ZGV4XTsKICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CisgICAgYXV0
byYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGluZGV4KSA+PSBjaGlsZHJlbi5zaXplKCkpCiAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgCkBAIC0zNjcsNyArMzY3LDcgQEAKICAgICBpZiAoW3NlbGYgaXNBdHRhY2htZW50XSkK
ICAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gaW5kZXhPZkFjY2Vzc2liaWxp
dHlFbGVtZW50OmVsZW1lbnRdOwogICAgIAotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRy
ZW4oKTsKKyAgICBhdXRvJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwogICAgIHVu
c2lnbmVkIGNvdW50ID0gY2hpbGRyZW4uc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgayA9IDA7
IGsgPCBjb3VudDsgKytrKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3
cmFwcGVyID0gY2hpbGRyZW5ba10tPndyYXBwZXIoKTsKQEAgLTEwNzMsNyArMTA3Myw3IEBACiAg
ICAgaWYgKHJvbGUgIT0gTGlua1JvbGUgJiYgcm9sZSAhPSBXZWJDb3JlTGlua1JvbGUpCiAgICAg
ICAgIHJldHVybiBOTzsKICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7
CisgICAgYXV0byYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKICAgICB1bnNpZ25l
ZCBjaGlsZHJlblNpemUgPSBjaGlsZHJlbi5zaXplKCk7CiAKICAgICAvLyBJZiB0aGVyZSdzIG9u
bHkgb25lIGNoaWxkLCB0aGVuIGl0IGRvZXNuJ3QgaGF2ZSBzZWdtZW50ZWQgY2hpbGRyZW4uIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQkocmV2aXNpb24g
MTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMSArNzgsOSBA
QAogCiBzdGF0aWMgTlNBcnJheSAqY29udmVydE1hdGhQYWlyc1RvTlNBcnJheShjb25zdCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0UGFpcnMmIHBhaXJz
LCBOU1N0cmluZyAqc3Vic2NyaXB0S2V5LCBOU1N0cmluZyAqc3VwZXJzY3JpcHRLZXkpCiB7Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gcGFpcnMuc2l6ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5ICph
cnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpsZW5ndGhdOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgIE5TTXV0YWJsZUFycmF5
ICphcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpwYWlycy5zaXplKCld
OworICAgIGZvciAoYXV0byBwYWlyIDogcGFpcnMpIHsKICAgICAgICAgTlNNdXRhYmxlRGljdGlv
bmFyeSAqcGFpckRpY3Rpb25hcnkgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsK
LSAgICAgICAgc3RkOjpwYWlyPEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Kj4gcGFpciA9IHBhaXJzW2ldOwogICAgICAgICBpZiAocGFpci5maXJzdCAmJiBwYWlyLmZp
cnN0LT53cmFwcGVyKCkgJiYgIXBhaXIuZmlyc3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkK
ICAgICAgICAgICAgIFtwYWlyRGljdGlvbmFyeSBzZXRPYmplY3Q6cGFpci5maXJzdC0+d3JhcHBl
cigpIGZvcktleTpzdWJzY3JpcHRLZXldOwogICAgICAgICBpZiAocGFpci5zZWNvbmQgJiYgcGFp
ci5zZWNvbmQtPndyYXBwZXIoKSAmJiAhcGFpci5zZWNvbmQtPmFjY2Vzc2liaWxpdHlJc0lnbm9y
ZWQoKSkKQEAgLTE2NSwxMCArMTYzLDcgQEAKICAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+
IHRleHRPcmRlcjsKICAgICBtX29iamVjdC0+YWNjZXNzaWJpbGl0eVRleHQodGV4dE9yZGVyKTsK
ICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0T3JkZXIuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICBjb25zdCBBY2Nlc3Np
YmlsaXR5VGV4dCYgdGV4dCA9IHRleHRPcmRlcltrXTsKLSAgICAgICAgCisgICAgZm9yIChhdXRv
IHRleHQgOiB0ZXh0T3JkZXIpIHsKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbHRlcm5hdGl2ZSB0
ZXh0LCB0aGVuIHdlIHNob3VsZCBub3QgZXhwb3NlIGEgdGl0bGUuCiAgICAgICAgIGlmICh0ZXh0
LnRleHRTb3VyY2UgPT0gQWx0ZXJuYXRpdmVUZXh0KQogICAgICAgICAgICAgYnJlYWs7CkBAIC0x
OTYsMTEgKzE5MSw4IEBACiAgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiB0ZXh0T3JkZXI7
CiAgICAgbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlUZXh0KHRleHRPcmRlcik7CiAgICAgCi0gICAg
dW5zaWduZWQgbGVuZ3RoID0gdGV4dE9yZGVyLnNpemUoKTsKICAgICBib29sIHZpc2libGVUZXh0
QXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0aDsg
aysrKSB7Ci0gICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlUZXh0JiB0ZXh0ID0gdGV4dE9yZGVy
W2tdOwotICAgICAgICAKKyAgICBmb3IgKGF1dG8gdGV4dCA6IHRleHRPcmRlcikgewogICAgICAg
ICBpZiAodGV4dC50ZXh0U291cmNlID09IEFsdGVybmF0aXZlVGV4dCkKICAgICAgICAgICAgIHJl
dHVybiB0ZXh0LnRleHQ7CiAgICAgICAgIApAQCAtMjI1LDExICsyMTcsOCBAQAogICAgIFZlY3Rv
cjxBY2Nlc3NpYmlsaXR5VGV4dD4gdGV4dE9yZGVyOwogICAgIG1fb2JqZWN0LT5hY2Nlc3NpYmls
aXR5VGV4dCh0ZXh0T3JkZXIpOwogICAgIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHRPcmRl
ci5zaXplKCk7CiAgICAgYm9vbCBkZXNjcmlwdGl2ZVRleHRBdmFpbGFibGUgPSBmYWxzZTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBrKyspIHsKLSAgICAgICAgY29uc3Qg
QWNjZXNzaWJpbGl0eVRleHQmIHRleHQgPSB0ZXh0T3JkZXJba107Ci0gICAgICAgIAorICAgIGZv
ciAoYXV0byB0ZXh0IDogdGV4dE9yZGVyKSB7CiAgICAgICAgIGlmICh0ZXh0LnRleHRTb3VyY2Ug
PT0gSGVscFRleHQgfHwgdGV4dC50ZXh0U291cmNlID09IFN1bW1hcnlUZXh0KQogICAgICAgICAg
ICAgcmV0dXJuIHRleHQudGV4dDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE1NjIsMTUgKzE1NjIsMTQgQEAKIAogc3RhdGljIE5TTXV0YWJsZUFy
cmF5KiBjb252ZXJ0VG9OU0FycmF5KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYgdmVjdG9yKQogewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHZl
Y3Rvci5zaXplKCk7Ci0gICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW05TTXV0YWJsZUFycmF5
IGFycmF5V2l0aENhcGFjaXR5OiBsZW5ndGhdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciog
d3JhcHBlciA9IHZlY3RvcltpXS0+d3JhcHBlcigpOworICAgIE5TTXV0YWJsZUFycmF5KiBhcnJh
eSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp2ZWN0b3Iuc2l6ZSgpXTsKKyAg
ICBmb3IgKGF1dG8gY2hpbGQgOiB2ZWN0b3IpIHsKKyAgICAgICAgV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIHdyYXBwZXIgPSBjaGlsZC0+d3JhcHBlcigpOwogICAgICAgICBBU1NFUlQo
d3JhcHBlcik7CiAgICAgICAgIGlmICh3cmFwcGVyKSB7CiAgICAgICAgICAgICAvLyB3ZSB3YW50
IHRvIHJldHVybiB0aGUgYXR0YWNobWVudCB2aWV3IGluc3RlYWQgb2YgdGhlIG9iamVjdCByZXBy
ZXNlbnRpbmcgdGhlIGF0dGFjaG1lbnQuCiAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHdlIGdl
dCBwYWxpbmRyb21lIGVycm9ycyBpbiB0aGUgQVggaGllcmFyY2h5Ci0gICAgICAgICAgICBpZiAo
dmVjdG9yW2ldLT5pc0F0dGFjaG1lbnQoKSAmJiBbd3JhcHBlciBhdHRhY2htZW50Vmlld10pCisg
ICAgICAgICAgICBpZiAoY2hpbGQtPmlzQXR0YWNobWVudCgpICYmIFt3cmFwcGVyIGF0dGFjaG1l
bnRWaWV3XSkKICAgICAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0Olt3cmFwcGVyIGF0dGFj
aG1lbnRWaWV3XV07CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgW2FycmF5IGFk
ZE9iamVjdDp3cmFwcGVyXTsKQEAgLTE1ODEsMTAgKzE1ODAsOSBAQAogCiBzdGF0aWMgTlNNdXRh
YmxlQXJyYXkgKmNvbnZlcnRTdHJpbmdzVG9OU0FycmF5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2
ZWN0b3IpCiB7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHZlY3Rvci5zaXplKCk7Ci0gICAgTlNNdXRh
YmxlQXJyYXkgKmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Omxlbmd0
aF07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgW2Fy
cmF5IGFkZE9iamVjdDp2ZWN0b3JbaV1dOworICAgIE5TTXV0YWJsZUFycmF5ICphcnJheSA9IFtO
U011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp2ZWN0b3Iuc2l6ZSgpXTsKKyAgICBmb3Ig
KGF1dG8gc3RyaW5nIDogdmVjdG9yKQorICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OnN0cmluZ107
CiAgICAgcmV0dXJuIGFycmF5OwogfQogCkBAIC0yMzc3LDcgKzIzNzUsNyBAQAogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29udGVudHNBdHRy
aWJ1dGVdKSB7CiAgICAgICAgIC8vIFRoZSBjb250ZW50cyBvZiBhIHRhYiBsaXN0IGFyZSBhbGwg
dGhlIGNoaWxkcmVuIGV4Y2VwdCB0aGUgdGFicy4KICAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1Rh
Ykxpc3QoKSkgewotICAgICAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwor
ICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKICAgICAg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB0
YWJzQ2hpbGRyZW47CiAgICAgICAgICAgICBtX29iamVjdC0+dGFiQ2hpbGRyZW4odGFic0NoaWxk
cmVuKTsKICAgICAgICAgICAgIApAQCAtMjM4OSwxNCArMjM4NywxMSBAQAogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudHMpOwogICAgICAg
ICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgewotICAgICAgICAgICAgY29u
c3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGls
ZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICAv
LyBBIHNjcm9sbFZpZXcncyBjb250ZW50cyBhcmUgZXZlcnl0aGluZyBleGNlcHQgdGhlIHNjcm9s
bCBiYXJzLgogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGNvbnRlbnRzOwotICAgICAgICAgICAgdW5zaWduZWQgY2hpbGRyZW5TaXpl
ID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8
IGNoaWxkcmVuU2l6ZTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGlsZHJlbltrXS0+
aXNTY3JvbGxiYXIoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGVudHMuYXBwZW5kKGNoaWxk
cmVuW2tdKTsKKyAgICAgICAgICAgIGZvciAoYXV0byBjaGlsZCA6IG1fb2JqZWN0LT5jaGlsZHJl
bigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjaGlsZC0+aXNTY3JvbGxiYXIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGVudHMuYXBwZW5kKGNoaWxkKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNvbnRlbnRzKTsKICAgICAgICAgfQpA
QCAtMzYxNCw3ICszNjA5LDcgQEAKICAgICBpZiAobV9vYmplY3QtPmlzVHJlZSgpKQogICAgICAg
ICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlJbmRleE9mQ2hpbGQ6Y2hpbGRdOwogICAgIAot
ICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICBhdXRvJiBjaGlsZHJlbiA9
IG1fb2JqZWN0LT5jaGlsZHJlbigpOwogICAgIAogICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBbW3NlbGYgcmVuZGVyV2lkZ2V0Q2hpbGRyZW5dIGluZGV4T2ZPYmpl
Y3Q6Y2hpbGRdOwpAQCAtMzY0MCw3ICszNjM1LDcgQEAKICAgICAgICAgaWYgKG1fb2JqZWN0LT5p
c1RyZWUoKSB8fCBtX29iamVjdC0+aXNUcmVlSXRlbSgpKQogICAgICAgICAgICAgcmV0dXJuIFtb
c2VsZiBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5B
dHRyaWJ1dGVdIGNvdW50XTsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBtX29iamVjdC0+
Y2hpbGRyZW4oKTsKKyAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4o
KTsKICAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBb
W3NlbGYgcmVuZGVyV2lkZ2V0Q2hpbGRyZW5dIGNvdW50XTsKICAgICAgICAgCkBAIC0zNjcyLDcg
KzM2NjcsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXJyYXlB
dHRyaWJ1dGVWYWx1ZXM6YXR0cmlidXRlIGluZGV4OmluZGV4IG1heENvdW50Om1heENvdW50XTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJl
bigpOworICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwogICAg
ICAgICB1bnNpZ25lZCBjaGlsZENvdW50ID0gY2hpbGRyZW4uc2l6ZSgpOwogICAgICAgICBpZiAo
aW5kZXggPj0gY2hpbGRDb3VudCkKICAgICAgICAgICAgIHJldHVybiBuaWw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221166</attachid>
            <date>2014-01-14 08:44:36 -0800</date>
            <delta_ts>2014-01-14 09:35:46 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>44466</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTkwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDE0LTAxLTEzICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IE1vZGVybml6ZSBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbG9vcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjkxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZSBhcHByb3ByaWF0ZSBmb3IgbG9vcHMgdG8g
dXNlIHRoZSBuZXcgc3R5bGUuCisgICAgICAgIFVzZSBhdXRvIHdoZXJlIGFwcHJvcHJpYXRlLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRJbWFnZU1hcFVJRWxlbWVudCk6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRSb3dEZXNjZW5kYW50KToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cm93SW5kZXhSYW5nZSk6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRSb3dzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkQnlSb3cp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpwYXJlbnRUYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OmhlYWRlck9i
amVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveDo6YWRkQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6OnNldFNlbGVjdGVkQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6OnNlbGVjdGVkQ2hp
bGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246Omxp
c3RCb3hPcHRpb25JbmRleCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0Ojpk
aWRVcGRhdGVBY3RpdmVPcHRpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU1lbnVMaXN0UG9wdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1l
bnVMaXN0UG9wdXA6OmFkZENoaWxkcmVuKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjppbnNlcnRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6c2VsZWN0ZWRSYWRpb0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRUYWJJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphcmlhTGFiZWxlZEJ5VGV4dCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGVuZENoaWxkcmVuVG9BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpjbGVhckNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmFyaWFUcmVlUm93cyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjphcmlhVHJlZUl0ZW1Db250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OmFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVudEFjY2Vzc2liaWxpdHlIaXRUZXN0KToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkUmFkaW9CdXR0b25Hcm91
cE1lbWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
YXJpYUZsb3dUb0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzVGFiSXRlbVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkUm93cyk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhT3duc0VsZW1lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlJbWFnZU1hcEhp
dFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
UmVtb3RlU1ZHQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6dXBkYXRlQXR0YWNobWVudFZpZXdQYXJlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZEhpZGRlbkNoaWxkcmVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFTZWxlY3RlZFJvd3MpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJpYUxpc3Rib3hT
ZWxlY3RlZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmFyaWFMaXN0Ym94VmlzaWJsZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRhYkNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhSYWRpY2FuZE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoUm9vdEluZGV4T2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhOdW1l
cmF0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6bWF0aERlbm9taW5hdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6Om1hdGhVbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoT3Zlck9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoQmFzZU9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoU3Vic2NyaXB0T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhTdXBlcnNj
cmlwdE9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpjb2x1bW5IZWFkZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6cm93SGVhZGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnZpc2libGVSb3dzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpjZWxsRm9yQ29sdW1uQW5kUm93KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46OmhlYWRlck9iamVjdCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyOjphZGRDaGls
ZHJlbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlUm93OjpoZWFkZXJPYmplY3Qp
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nl
c3NpYmlsaXR5RWxlbWVudEF0SW5kZXg6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGluZGV4T2ZBY2Nlc3NpYmlsaXR5RWxlbWVudDpdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgY29udGFpbnNVbm5hdHVyYWxseVNlZ21lbnRl
ZENoaWxkcmVuXSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJCYXNlLm1tOgorICAgICAgICAoY29udmVydE1hdGhQYWlyc1RvTlNBcnJh
eSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBhY2Nlc3Np
YmlsaXR5VGl0bGVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJC
YXNlIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckJhc2UgYWNjZXNzaWJpbGl0eUhlbHBUZXh0XSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06Cisg
ICAgICAgIChjb252ZXJ0VG9OU0FycmF5KToKKyAgICAgICAgKGNvbnZlcnRTdHJpbmdzVG9OU0Fy
cmF5KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxkOl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVDb3VudDpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUFycmF5QXR0cmlidXRlVmFsdWVzOmluZGV4Om1heENvdW50Ol0pOgorCiAyMDE0LTAxLTEzICBE
YW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgdWludDhfdCBz
cGVjaWFsaXphdGlvbiBmb3IgV2ViQ29yZTo6d3JpdGVMaXR0bGVFbmRpYW4oKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lv
biAxNjE4OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksMTEgKzExOSwxMSBAQAogICAgIG1fbm90aWZpY2F0
aW9uUG9zdFRpbWVyLnN0b3AoKTsKIAogICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2li
aWxpdHlPYmplY3Q+Pjo6aXRlcmF0b3IgZW5kID0gbV9vYmplY3RzLmVuZCgpOwotICAgIGZvciAo
SGFzaE1hcDxBWElELCBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4+OjppdGVyYXRvciBpdCA9
IG1fb2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogb2JqID0gKCppdCkudmFsdWUuZ2V0KCk7Ci0gICAgICAgIGRldGFjaFdyYXBw
ZXIob2JqLCBDYWNoZURlc3Ryb3llZCk7Ci0gICAgICAgIG9iai0+ZGV0YWNoKENhY2hlRGVzdHJv
eWVkKTsKLSAgICAgICAgcmVtb3ZlQVhJRChvYmopOworICAgIGZvciAoY29uc3QgYXV0byYgb2Jq
ZWN0IDogbV9vYmplY3RzKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4T2JqZWN0
ID0gb2JqZWN0LnZhbHVlLmdldCgpOworICAgICAgICBkZXRhY2hXcmFwcGVyKGF4T2JqZWN0LCBD
YWNoZURlc3Ryb3llZCk7CisgICAgICAgIGF4T2JqZWN0LT5kZXRhY2goQ2FjaGVEZXN0cm95ZWQp
OworICAgICAgICByZW1vdmVBWElEKGF4T2JqZWN0KTsKICAgICB9CiB9CiAKQEAgLTE0MiwxNSAr
MTQyLDEyIEBACiAgICAgaWYgKCFheFJlbmRlckltYWdlKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3ImIGltYWdlQ2hpbGRyZW4gPSBheFJlbmRlckltYWdlLT5jaGlsZHJlbigpOwotICAgIHVu
c2lnbmVkIGNvdW50ID0gaW1hZ2VDaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGNvdW50OyArK2spIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2hp
bGQgPSBpbWFnZUNoaWxkcmVuW2tdLmdldCgpOworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQg
OiBheFJlbmRlckltYWdlLT5jaGlsZHJlbigpKSB7CiAgICAgICAgIGlmICghY2hpbGQtPmlzSW1h
Z2VNYXBMaW5rKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIGlm
ICh0b0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsoY2hpbGQpLT5hcmVhRWxlbWVudCgpID09IGFy
ZWFFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgICAgICBpZiAodG9BY2Nl
c3NpYmlsaXR5SW1hZ2VNYXBMaW5rKGNoaWxkLmdldCgpKS0+YXJlYUVsZW1lbnQoKSA9PSBhcmVh
RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBjaGlsZC5nZXQoKTsKICAgICB9ICAgIAogICAg
IAogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5QVJJQUdyaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcAkocmV2aXNpb24gMTYxODk5KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCwxMCArODgsOCBAQAogICAgIGlmICghcm93Q2hpbGQtPmlzVGFi
bGVSb3coKSkgewogICAgICAgICAvLyBBbHRob3VnaCBhICJncmlkIiBzaG91bGQgaGF2ZSByb3dz
IGFzIGl0cyBkaXJlY3QgZGVzY2VuZGFudHMsIGlmIHRoaXMgaXMgbm90IGEgdGFibGUgcm93LAog
ICAgICAgICAvLyBkaXZlIGRlZXBlciBpbnRvIHRoZSBkZXNjZW5kYW50cyB0byB0cnkgdG8gZmlu
ZCBhIHZhbGlkIHJvdy4KLSAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JiBjaGlsZHJlbiA9IHJvd0NoaWxkLT5jaGlsZHJlbigpOwotICAgICAgICBzaXplX3QgbGVuZ3Ro
ID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKQotICAgICAgICAgICAgYWRkUm93RGVzY2VuZGFudChjaGlsZHJlbltpXS5nZXQoKSwg
YXBwZW5kZWRSb3dzLCBjb2x1bW5Db3VudCk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgY2hp
bGQgOiByb3dDaGlsZC0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgIGFkZFJvd0Rlc2NlbmRhbnQo
Y2hpbGQuZ2V0KCksIGFwcGVuZGVkUm93cywgY29sdW1uQ291bnQpOwogICAgIH0gZWxzZQogICAg
ICAgICBhZGRUYWJsZUNlbGxDaGlsZChyb3dDaGlsZCwgYXBwZW5kZWRSb3dzLCBjb2x1bW5Db3Vu
dCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlB
UklBR3JpZENlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAJKHJldmlzaW9uIDE2MTg5OSkKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgaWYgKCFjb2x1bW5Db3Vu
dCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImIHNpYmxpbmdzID0gcGFyZW50LT5jaGlsZHJlbigpOworICAgICAgICBhdXRv
JiBzaWJsaW5ncyA9IHBhcmVudC0+Y2hpbGRyZW4oKTsKICAgICAgICAgdW5zaWduZWQgY2hpbGRy
ZW5TaXplID0gc2libGluZ3Muc2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBr
IDwgY2hpbGRyZW5TaXplOyArK2spIHsKICAgICAgICAgICAgIGlmIChzaWJsaW5nc1trXS5nZXQo
KSA9PSB0aGlzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZFJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCShyZXZpc2lvbiAxNjE4OTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIHVuc2lnbmVkIGxldmVsID0gaGllcmFyY2hpY2FsTGV2ZWwoKTsKLSAgICBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGFsbFJvd3MgPSB0b0FjY2Vzc2liaWxpdHlUYWJsZShwYXJl
bnQpLT5yb3dzKCk7CisgICAgYXV0byYgYWxsUm93cyA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlKHBh
cmVudCktPnJvd3MoKTsKICAgICBpbnQgcm93Q291bnQgPSBhbGxSb3dzLnNpemUoKTsKICAgICBm
b3IgKGludCBrID0gaW5kZXggKyAxOyBrIDwgcm93Q291bnQ7ICsraykgewogICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiByb3cgPSBhbGxSb3dzW2tdLmdldCgpOwpAQCAtMTAwLDcgKzEwMCw3
IEBACiAgICAgCiAgICAgLy8gU2VhcmNoIGZvciB0aGUgcHJldmlvdXMgcm93IHRoYXQgbWF0Y2hl
cyB0aGUgY29ycmVjdCBsZXZlbC4KICAgICBpbnQgaW5kZXggPSByb3dJbmRleCgpOwotICAgIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgYWxsUm93cyA9IHRvQWNjZXNzaWJpbGl0eVRhYmxl
KHBhcmVudCktPnJvd3MoKTsKKyAgICBhdXRvJiBhbGxSb3dzID0gdG9BY2Nlc3NpYmlsaXR5VGFi
bGUocGFyZW50KS0+cm93cygpOwogICAgIGludCByb3dDb3VudCA9IGFsbFJvd3Muc2l6ZSgpOwog
ICAgIGlmIChpbmRleCA+PSByb3dDb3VudCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTEsNyAr
MTExLDcgQEAKICAgICAgICAgICAgIHJldHVybiByb3c7CiAgICAgfQogICAgIAotICAgIHJldHVy
biAwOworICAgIHJldHVybiBudWxscHRyOwogfQogICAgIAogQWNjZXNzaWJpbGl0eU9iamVjdCog
QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpwYXJlbnRUYWJsZSgpIGNvbnN0CkBAIC0xMjQsMjAg
KzEyNCwxNyBAQAogICAgICAgICAgICAgcmV0dXJuIHBhcmVudDsKICAgICB9CiAgICAgCi0gICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6aGVhZGVyT2JqZWN0KCkKIHsKLSAgICBjb25zdCBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJvd0NoaWxkcmVuID0gY2hpbGRyZW4oKTsKLSAg
ICB1bnNpZ25lZCBjaGlsZHJlbkNvdW50ID0gcm93Q2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZHJlbkNvdW50OyArK2kpIHsKLSAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogY2VsbCA9IHJvd0NoaWxkcmVuW2ldLmdldCgpOwotICAgICAgICBpZiAo
Y2VsbC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBSb3dIZWFkZXJSb2xlKQotICAgICAgICAgICAg
cmV0dXJuIGNlbGw7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKCkpIHsK
KyAgICAgICAgaWYgKGNoaWxkLT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IFJvd0hlYWRlclJvbGUp
CisgICAgICAgICAgICByZXR1cm4gY2hpbGQuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIHJldHVy
biAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlMaXN0Qm94LmNwcAkocmV2aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEy
ICs3MiwxMCBAQAogICAgIAogICAgIG1faGF2ZUNoaWxkcmVuID0gdHJ1ZTsKICAgICAKLSAgICBj
b25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gdG9IVE1MU2VsZWN0RWxlbWVu
dChzZWxlY3ROb2RlKS0+bGlzdEl0ZW1zKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdEl0
ZW1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpc3RJdGVtIDogdG9IVE1MU2VsZWN0RWxlbWVudChzZWxl
Y3ROb2RlKS0+bGlzdEl0ZW1zKCkpIHsKICAgICAgICAgLy8gVGhlIGNhc3QgdG8gSFRNTEVsZW1l
bnQgYmVsb3cgaXMgc2FmZSBiZWNhdXNlIHRoZSBvbmx5IG90aGVyIHBvc3NpYmxlIGxpc3RJdGVt
IHR5cGUKICAgICAgICAgLy8gd291bGQgYmUgYSBXTUxFbGVtZW50LCBidXQgV01MIGJ1aWxkcyBk
b24ndCB1c2UgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcyBhdCBhbGwuCi0gICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGxpc3RPcHRpb24gPSBsaXN0Qm94T3B0aW9uQWNjZXNzaWJpbGl0eU9iamVj
dChsaXN0SXRlbXNbaV0pOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0T3B0aW9u
ID0gbGlzdEJveE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3QobGlzdEl0ZW0pOwogICAgICAgICBp
ZiAobGlzdE9wdGlvbiAmJiAhbGlzdE9wdGlvbi0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQog
ICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQobGlzdE9wdGlvbik7CiAgICAgfQpAQCAtOTMs
MjAgKzkxLDE3IEBACiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBkaXNhYmxlIGFueSBz
ZWxlY3RlZCBvcHRpb25zCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gbV9jaGlsZHJlbi5zaXplKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEFj
Y2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKiBsaXN0Qm94T3B0aW9uID0gdG9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbihtX2NoaWxkcmVuW2ldLmdldCgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGNoaWxkIDogbV9jaGlsZHJlbikgeworICAgICAgICBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlv
biogbGlzdEJveE9wdGlvbiA9IHRvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24oY2hpbGQuZ2V0
KCkpOwogICAgICAgICBpZiAobGlzdEJveE9wdGlvbi0+aXNTZWxlY3RlZCgpKQogICAgICAgICAg
ICAgbGlzdEJveE9wdGlvbi0+c2V0U2VsZWN0ZWQoZmFsc2UpOwogICAgIH0KICAgICAKLSAgICBs
ZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IGNoaWxkcmVu
W2ldLmdldCgpOworICAgIGZvciAoY29uc3QgYXV0byYgb2JqIDogY2hpbGRyZW4pIHsKICAgICAg
ICAgaWYgKG9iai0+cm9sZVZhbHVlKCkgIT0gTGlzdEJveE9wdGlvblJvbGUpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgdG9BY2Nlc3NpYmlsaXR5TGlz
dEJveE9wdGlvbihvYmopLT5zZXRTZWxlY3RlZCh0cnVlKTsKKyAgICAgICAgdG9BY2Nlc3NpYmls
aXR5TGlzdEJveE9wdGlvbihvYmouZ2V0KCkpLT5zZXRTZWxlY3RlZCh0cnVlKTsKICAgICB9CiB9
CiAgICAgCkBAIC0xMTcsMTAgKzExMiw5IEBACiAgICAgaWYgKCFoYXNDaGlsZHJlbigpKQogICAg
ICAgICBhZGRDaGlsZHJlbigpOwogICAgICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2No
aWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgaWYgKHRvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24obV9jaGlsZHJlbltp
XS5nZXQoKSktPmlzU2VsZWN0ZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9jaGls
ZHJlbltpXSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAg
ICAgICAgaWYgKHRvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24oY2hpbGQuZ2V0KCkpLT5pc1Nl
bGVjdGVkKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNoaWxkLmdldCgpKTsKICAgICB9
ICAgIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlMaXN0Qm94T3B0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAkocmV2aXNpb24gMTYxODk5KQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgIGlmICghc2VsZWN0
RWxlbWVudCkgCiAgICAgICAgIHJldHVybiAtMTsKICAgICAKLSAgICBjb25zdCBWZWN0b3I8SFRN
TEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudC0+bGlzdEl0ZW1zKCk7CisgICAg
YXV0byYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudC0+bGlzdEl0ZW1zKCk7CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbGlzdEl0ZW1zLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspCiAgICAgICAgIGlmIChsaXN0SXRlbXNbaV0gPT0gbV9vcHRpb25FbGVt
ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU1lbnVMaXN0LmNwcAkocmV2aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50KG1fcmVuZGVy
ZXItPmRvY3VtZW50KCkpOwogICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQtPmF4
T2JqZWN0Q2FjaGUoKTsKIAotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYg
Y2hpbGRPYmplY3RzID0gY2hpbGRyZW4oKTsKKyAgICBhdXRvJiBjaGlsZE9iamVjdHMgPSBjaGls
ZHJlbigpOwogICAgIGlmICghY2hpbGRPYmplY3RzLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NF
UlQoY2hpbGRPYmplY3RzLnNpemUoKSA9PSAxKTsKICAgICAgICAgQVNTRVJUKGNoaWxkT2JqZWN0
c1swXS0+aXNNZW51TGlzdFBvcHVwKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAJKHJl
dmlzaW9uIDE2MTg5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU1lbnVMaXN0UG9wdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTAgKzEwMiw4IEBA
CiAKICAgICBtX2hhdmVDaGlsZHJlbiA9IHRydWU7CiAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVs
ZW1lbnQqPiYgbGlzdEl0ZW1zID0gdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3ROb2RlKS0+bGlz
dEl0ZW1zKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdEl0ZW1zLnNpemUoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgQWNjZXNzaWJp
bGl0eU1lbnVMaXN0T3B0aW9uKiBvcHRpb24gPSBtZW51TGlzdE9wdGlvbkFjY2Vzc2liaWxpdHlP
YmplY3QobGlzdEl0ZW1zW2ldKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpc3RJdGVtIDogdG9I
VE1MU2VsZWN0RWxlbWVudChzZWxlY3ROb2RlKS0+bGlzdEl0ZW1zKCkpIHsKKyAgICAgICAgQWNj
ZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uKiBvcHRpb24gPSBtZW51TGlzdE9wdGlvbkFjY2Vzc2li
aWxpdHlPYmplY3QobGlzdEl0ZW0pOwogICAgICAgICBpZiAob3B0aW9uKSB7CiAgICAgICAgICAg
ICBvcHRpb24tPnNldFBhcmVudCh0aGlzKTsKICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5k
KG9wdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkocmV2aXNpb24gMTYxODk5KQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzNSw3ICszMzUsNyBAQAogICAgIGNoaWxkLT5jbGVhckNoaWxkcmVu
KCk7CiAgICAgCiAgICAgaWYgKGNoaWxkLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpIHsKLSAg
ICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IGNoaWxk
LT5jaGlsZHJlbigpOworICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IGNoaWxkLT5jaGlsZHJlbigp
OwogICAgICAgICBzaXplX3QgbGVuZ3RoID0gY2hpbGRyZW4uc2l6ZSgpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICAgbV9jaGlsZHJlbi5p
bnNlcnQoaW5kZXggKyBpLCBjaGlsZHJlbltpXSk7CkBAIC05MDksMzcgKzkwOSwzMCBAQAogQWNj
ZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnNlbGVjdGVkUmFkaW9C
dXR0b24oKQogewogICAgIGlmICghaXNSYWRpb0dyb3VwKCkpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigp
OwotCiAgICAgLy8gRmluZCB0aGUgY2hpbGQgcmFkaW8gYnV0dG9uIHRoYXQgaXMgc2VsZWN0ZWQg
KGllLiB0aGUgaW50VmFsdWUgPT0gMSkuCi0gICAgc2l6ZV90IHNpemUgPSBjaGlsZHJlbi5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gY2hpbGRyZW5baV0uZ2V0KCk7Ci0gICAgICAgIGlm
IChvYmplY3QtPnJvbGVWYWx1ZSgpID09IFJhZGlvQnV0dG9uUm9sZSAmJiBvYmplY3QtPmNoZWNr
Ym94T3JSYWRpb1ZhbHVlKCkgPT0gQnV0dG9uU3RhdGVPbikKLSAgICAgICAgICAgIHJldHVybiBv
YmplY3Q7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKCkpIHsKKyAgICAg
ICAgaWYgKGNoaWxkLT5yb2xlVmFsdWUoKSA9PSBSYWRpb0J1dHRvblJvbGUgJiYgY2hpbGQtPmNo
ZWNrYm94T3JSYWRpb1ZhbHVlKCkgPT0gQnV0dG9uU3RhdGVPbikKKyAgICAgICAgICAgIHJldHVy
biBjaGlsZC5nZXQoKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzZWxl
Y3RlZFRhYkl0ZW0oKQogewogICAgIGlmICghaXNUYWJMaXN0KCkpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZpbmQgdGhlIGNoaWxkIHRhYiBp
dGVtIHRoYXQgaXMgc2VsZWN0ZWQgKGllLiB0aGUgaW50VmFsdWUgPT0gMSkuCiAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHRhYnM7CiAgICAgdGFi
Q2hpbGRyZW4odGFicyk7CiAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKLSAgICBz
aXplX3Qgc2l6ZSA9IHRhYnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGNoaWxkcmVu
W2ldLmdldCgpOwotICAgICAgICBpZiAob2JqZWN0LT5pc1RhYkl0ZW0oKSAmJiBvYmplY3QtPmlz
Q2hlY2tlZCgpKQotICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGNoaWxkIDogY2hpbGRyZW4oKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzVGFiSXRlbSgp
ICYmIGNoaWxkLT5pc0NoZWNrZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBjaGlsZC5nZXQoKTsK
ICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEFjY2Vzc2li
aWxpdHlCdXR0b25TdGF0ZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2hlY2tib3hPclJhZGlv
VmFsdWUoKSBjb25zdApAQCAtMTQzMyw5ICsxNDI2LDggQEAKICAgICAgICAgYXJpYUxhYmVsZWRC
eUVsZW1lbnRzKGVsZW1lbnRzKTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxSZWZQdHI8QWNj
ZXNzaWJpbGl0eU9iamVjdD4+IGF4RWxlbWVudHM7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGVsZW1lbnRzLnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0
aDsgaysrKSB7Ci0gICAgICAgICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gYXhFbGVt
ZW50ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShlbGVtZW50c1trXSk7CisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKSB7CisgICAgICAgICAgICBSZWZQ
dHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gYXhFbGVtZW50ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRP
ckNyZWF0ZShlbGVtZW50KTsKICAgICAgICAgICAgIGF4RWxlbWVudHMuYXBwZW5kKGF4RWxlbWVu
dCk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDE2MTg5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxNyw3ICs0MTcsNyBAQAogewogICAgIC8vIEEgdGFibGUncyBj
aGlsZHJlbiBpbmNsdWRlcyBlbGVtZW50cyB3aG9zZSBvd24gY2hpbGRyZW4gYXJlIGFsc28gdGhl
IHRhYmxlJ3MgY2hpbGRyZW4gKGR1ZSB0byB0aGUgd2F5IHRoZSBNYWMgZXhwb3NlcyB0YWJsZXMp
LgogICAgIC8vIFRoZSByb3dzIGZyb20gdGhlIHRhYmxlIHNob3VsZCBiZSBxdWVyaWVkLCBzaW5j
ZSB0aG9zZSBhcmUgZGlyZWN0IGRlc2NlbmRhbnRzIG9mIHRoZSB0YWJsZSwgYW5kIHRoZXkgY29u
dGFpbiBjb250ZW50LgotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgc2VhcmNoQ2hpbGRyZW4gPSBvYmplY3QtPmlzQWNjZXNzaWJpbGl0
eVRhYmxlKCkgPyB0b0FjY2Vzc2liaWxpdHlUYWJsZShvYmplY3QpLT5yb3dzKCkgOiBvYmplY3Qt
PmNoaWxkcmVuKCk7CisgICAgYXV0byYgc2VhcmNoQ2hpbGRyZW4gPSBvYmplY3QtPmlzQWNjZXNz
aWJpbGl0eVRhYmxlKCkgPyB0b0FjY2Vzc2liaWxpdHlUYWJsZShvYmplY3QpLT5yb3dzKCkgOiBv
YmplY3QtPmNoaWxkcmVuKCk7CiAKICAgICBzaXplX3QgY2hpbGRyZW5TaXplID0gc2VhcmNoQ2hp
bGRyZW4uc2l6ZSgpOwogCkBAIC0xMjc3LDkgKzEyNzcsOCBAQAogdm9pZCBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpjbGVhckNoaWxkcmVuKCkKIHsKICAgICAvLyBTb21lIG9iamVjdHMgaGF2ZSB3ZWFr
IHBvaW50ZXJzIHRvIHRoZWlyIHBhcmVudHMgYW5kIHRob3NlIGFzc29jaWF0aW9ucyBuZWVkIHRv
IGJlIGRldGFjaGVkLgotICAgIHNpemVfdCBsZW5ndGggPSBtX2NoaWxkcmVuLnNpemUoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICBtX2NoaWxkcmVu
W2ldLT5kZXRhY2hGcm9tUGFyZW50KCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG1f
Y2hpbGRyZW4pCisgICAgICAgIGNoaWxkLT5kZXRhY2hGcm9tUGFyZW50KCk7CiAgICAgCiAgICAg
bV9jaGlsZHJlbi5jbGVhcigpOwogICAgIG1faGF2ZUNoaWxkcmVuID0gZmFsc2U7CkBAIC0xMzIw
LDQyICsxMzE5LDMxIEBACiAKIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVRyZWVSb3dz
KEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgcmVzdWx0KQogewotICAgIGNvbnN0IEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYgYXhDaGlsZHJlbiA9IGNoaWxkcmVuKCk7Ci0gICAgdW5z
aWduZWQgY291bnQgPSBheENoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSAw
OyBrIDwgY291bnQ7ICsraykgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBh
eENoaWxkcmVuW2tdLmdldCgpOwotICAgICAgICAKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxk
IDogY2hpbGRyZW4oKSkgewogICAgICAgICAvLyBBZGQgdHJlZSBpdGVtcyBhcyB0aGUgcm93cy4K
LSAgICAgICAgaWYgKG9iai0+cm9sZVZhbHVlKCkgPT0gVHJlZUl0ZW1Sb2xlKSAKLSAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQob2JqKTsKKyAgICAgICAgaWYgKGNoaWxkLT5yb2xlVmFsdWUoKSA9
PSBUcmVlSXRlbVJvbGUpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNoaWxkKTsKIAogICAg
ICAgICAvLyBOb3cgc2VlIGlmIHRoaXMgaXRlbSBhbHNvIGhhcyByb3dzIGhpZGluZyBpbnNpZGUg
b2YgaXQuCi0gICAgICAgIG9iai0+YXJpYVRyZWVSb3dzKHJlc3VsdCk7CisgICAgICAgIGNoaWxk
LT5hcmlhVHJlZVJvd3MocmVzdWx0KTsKICAgICB9CiB9CiAgICAgCiB2b2lkIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmFyaWFUcmVlSXRlbUNvbnRlbnQoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JiByZXN1bHQpCiB7CiAgICAgLy8gVGhlIEFSSUEgdHJlZSBpdGVtIGNvbnRlbnQgYXJlIHRoZSBp
dGVtIHRoYXQgYXJlIG5vdCBvdGhlciB0cmVlIGl0ZW1zIG9yIHRoZWlyIGNvbnRhaW5pbmcgZ3Jv
dXBzLgotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgYXhDaGlsZHJlbiA9
IGNoaWxkcmVuKCk7Ci0gICAgdW5zaWduZWQgY291bnQgPSBheENoaWxkcmVuLnNpemUoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY291bnQ7ICsraykgewotICAgICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvYmogPSBheENoaWxkcmVuW2tdLmdldCgpOwotICAgICAgICBBY2Nlc3Np
YmlsaXR5Um9sZSByb2xlID0gb2JqLT5yb2xlVmFsdWUoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGNoaWxkIDogY2hpbGRyZW4oKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0g
Y2hpbGQtPnJvbGVWYWx1ZSgpOwogICAgICAgICBpZiAocm9sZSA9PSBUcmVlSXRlbVJvbGUgfHwg
cm9sZSA9PSBHcm91cFJvbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAg
ICAgIHJlc3VsdC5hcHBlbmQob2JqKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjaGlsZCk7CiAg
ICAgfQogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFUcmVlSXRlbURpc2Nsb3Nl
ZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByZXN1bHQpCiB7Ci0gICAgY29uc3Qg
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBheENoaWxkcmVuID0gY2hpbGRyZW4oKTsKLSAg
ICB1bnNpZ25lZCBjb3VudCA9IGF4Q2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQg
ayA9IDA7IGsgPCBjb3VudDsgKytrKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
aiA9IGF4Q2hpbGRyZW5ba10uZ2V0KCk7Ci0gICAgICAgIAorICAgIGZvciAoY29uc3QgYXV0byYg
b2JqIDogY2hpbGRyZW4oKSkgewogICAgICAgICAvLyBBZGQgdHJlZSBpdGVtcyBhcyB0aGUgcm93
cy4KICAgICAgICAgaWYgKG9iai0+cm9sZVZhbHVlKCkgPT0gVHJlZUl0ZW1Sb2xlKQogICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChvYmopOwpAQCAtMTY3NywxMCArMTY2NSw5IEBACiAgICAgfQog
ICAgIAogICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbW9jayBlbGVtZW50cyB0aGF0IG5l
ZWQgdG8gYmUgaGFuZGxlZC4KLSAgICBzaXplX3QgY291bnQgPSBtX2NoaWxkcmVuLnNpemUoKTsK
LSAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGNvdW50OyBrKyspIHsKLSAgICAgICAgaWYgKG1f
Y2hpbGRyZW5ba10tPmlzTW9ja09iamVjdCgpICYmIG1fY2hpbGRyZW5ba10tPmVsZW1lbnRSZWN0
KCkuY29udGFpbnMocG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW5ba10tPmVs
ZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdChwb2ludCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBj
aGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc01vY2tPYmplY3QoKSAm
JiBjaGlsZC0+ZWxlbWVudFJlY3QoKS5jb250YWlucyhwb2ludCkpCisgICAgICAgICAgICByZXR1
cm4gY2hpbGQtPmVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdChwb2ludCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMpOyAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTYyLDEwICs5NjIsOCBAQAogICAgICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBmb3Jt
RWxlbWVudHM7CiAgICAgICAgIGlucHV0LT5mb3JtKCktPmdldE5hbWVkRWxlbWVudHMoaW5wdXQt
Pm5hbWUoKSwgZm9ybUVsZW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxlbiA9
IGZvcm1FbGVtZW50cy5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW47ICsraSkgewotICAgICAgICAgICAgRWxlbWVudCYgYXNzb2NpYXRlRWxlbWVudCA9IGZvcm1F
bGVtZW50c1tpXS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmplY3QgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCZhc3NvY2lhdGVFbGVtZW50KSkK
KyAgICAgICAgZm9yIChhdXRvJiBhc3NvY2lhdGVFbGVtZW50IDogZm9ybUVsZW1lbnRzKSB7Cisg
ICAgICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gYXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZSgmYXNzb2NpYXRlRWxlbWVudC5nZXQoKSkpCiAgICAgICAgICAgICAg
ICAgbGlua2VkVUlFbGVtZW50cy5hcHBlbmQob2JqZWN0KTsgICAgICAgIAogICAgICAgICB9IAog
ICAgIH0gZWxzZSB7CkBAIC0xMDIyLDkgKzEwMjAsNyBAQAogICAgIGVsZW1lbnRzRnJvbUF0dHJp
YnV0ZShlbGVtZW50cywgYXJpYV9mbG93dG9BdHRyKTsKICAgICAKICAgICBBWE9iamVjdENhY2hl
KiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IGVsZW1lbnRz
LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY291bnQ7ICsraykgewotICAg
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudHNba107CisgICAgZm9yIChjb25zdCBhdXRv
JiBlbGVtZW50IDogZWxlbWVudHMpIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZmxv
d1RvRWxlbWVudCA9IGNhY2hlLT5nZXRPckNyZWF0ZShlbGVtZW50KTsKICAgICAgICAgaWYgKGZs
b3dUb0VsZW1lbnQpCiAgICAgICAgICAgICBmbG93VG8uYXBwZW5kKGZsb3dUb0VsZW1lbnQpOwpA
QCAtMTU3OCw5ICsxNTc0LDcgQEAKICAgICBWZWN0b3I8RWxlbWVudCo+IGVsZW1lbnRzOwogICAg
IGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShlbGVtZW50cywgYXJpYV9jb250cm9sc0F0dHIpOwogICAg
IAotICAgIHVuc2lnbmVkIGNvdW50ID0gZWxlbWVudHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWdu
ZWQgayA9IDA7IGsgPCBjb3VudDsgKytrKSB7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBl
bGVtZW50c1trXTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykgewog
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0YWJQYW5lbCA9IGF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUoZWxlbWVudCk7CiAKICAgICAgICAgLy8gQSB0YWIgaXRlbSBzaG91bGQgb25s
eSBjb250cm9sIHRhYiBwYW5lbHMuCkBAIC0xNjUzLDggKzE2NDcsOCBAQAogICAgIGlmIChjb3Vu
dCA+IDEgJiYgIWlzTXVsdGkpCiAgICAgICAgIGNvdW50ID0gMTsKICAgICAKLSAgICBmb3IgKHVu
c2lnbmVkIGsgPSAwOyBrIDwgY291bnQ7ICsraykKLSAgICAgICAgc2VsZWN0ZWRSb3dzW2tdLT5z
ZXRTZWxlY3RlZCh0cnVlKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHNlbGVjdGVkUm93IDogc2Vs
ZWN0ZWRSb3dzKQorICAgICAgICBzZWxlY3RlZFJvdy0+c2V0U2VsZWN0ZWQodHJ1ZSk7CiB9CiAg
ICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQpAQCAtMTY4Miw5ICsxNjc2LDggQEAKICAgICBWZWN0b3I8RWxlbWVudCo+IGVs
ZW1lbnRzOwogICAgIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShlbGVtZW50cywgYXJpYV9vd25zQXR0
cik7CiAgICAgCi0gICAgdW5zaWduZWQgY291bnQgPSBlbGVtZW50cy5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXIgPSBlbGVtZW50c1trXS0+cmVuZGVyZXIoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGVsZW1lbnQgOiBlbGVtZW50cykgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlciA9IGVs
ZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IGF4
T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocmVuZGVyKTsKICAgICAgICAgaWYgKG9iaikKICAg
ICAgICAgICAgIGF4T2JqZWN0cy5hcHBlbmQob2JqKTsKQEAgLTIxNTUsMTIgKzIxNDgsOSBAQAog
ICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBjb25zdCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0g
cGFyZW50LT5jaGlsZHJlbigpOwotICAgIAotICAgIHVuc2lnbmVkIGNvdW50ID0gY2hpbGRyZW4u
c2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBjb3VudDsgKytrKSB7Ci0gICAg
ICAgIGlmIChjaGlsZHJlbltrXS0+ZWxlbWVudFJlY3QoKS5jb250YWlucyhwb2ludCkpCi0gICAg
ICAgICAgICByZXR1cm4gY2hpbGRyZW5ba10uZ2V0KCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBj
aGlsZCA6IHBhcmVudC0+Y2hpbGRyZW4oKSkgeworICAgICAgICBpZiAoY2hpbGQtPmVsZW1lbnRS
ZWN0KCkuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGNoaWxkLmdldCgpOwog
ICAgIH0KICAgICAKICAgICByZXR1cm4gMDsKQEAgLTI4NTksMTAgKzI4NDksOCBAQAogICAgIHJv
b3QtPnNldFBhcmVudCh0aGlzKTsKICAgICAKICAgICBpZiAocm9vdC0+YWNjZXNzaWJpbGl0eUlz
SWdub3JlZCgpKSB7Ci0gICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYg
Y2hpbGRyZW4gPSByb290LT5jaGlsZHJlbigpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBj
aGlsZHJlbi5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkcmVuW2ldKTsKKyAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IHJvb3QtPmNoaWxkcmVuKCkpCisgICAgICAgICAg
ICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fY2hpbGRy
ZW4uYXBwZW5kKHJvb3QpOwogfQpAQCAtMjkwNCwxMCArMjg5Miw5IEBACiAgICAgaWYgKGFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHNpemVfdCBs
ZW5ndGggPSBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGxl
bmd0aDsgaysrKSB7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuW2tdLT5pc0F0dGFjaG1lbnQoKSkK
LSAgICAgICAgICAgIG1fY2hpbGRyZW5ba10tPm92ZXJyaWRlQXR0YWNobWVudFBhcmVudCh0aGlz
KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgeworICAgICAgICBp
ZiAoY2hpbGQtPmlzQXR0YWNobWVudCgpKQorICAgICAgICAgICAgY2hpbGQtPm92ZXJyaWRlQXR0
YWNobWVudFBhcmVudCh0aGlzKTsKICAgICB9CiB9CiAjZW5kaWYKQEAgLTI5NDEsNyArMjkyOCw3
IEBACiAgICAgICAgICAgICAvLyBGaW5kIG91dCB3aGVyZSB0aGUgbGFzdCByZW5kZXIgc2libGlu
ZyBpcyBsb2NhdGVkIHdpdGhpbiBtX2NoaWxkcmVuLgogICAgICAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY2hpbGRPYmplY3QgPSBheE9iamVjdENhY2hlKCktPmdldChjaGlsZC0+cmVuZGVy
ZXIoKSk7CiAgICAgICAgICAgICBpZiAoY2hpbGRPYmplY3QgJiYgY2hpbGRPYmplY3QtPmFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBjaGlsZE9iamVjdC0+Y2hpbGRyZW4oKTsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IGNoaWxkT2JqZWN0LT5jaGlsZHJlbigpOwog
ICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAg
IGNoaWxkT2JqZWN0ID0gY2hpbGRyZW4ubGFzdCgpLmdldCgpOwogICAgICAgICAgICAgICAgIGVs
c2UKQEAgLTMwNjgsMTAgKzMwNTUsOSBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIHVuc2lnbmVkIGNvdW50ID0gYWxsUm93cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGNvdW50OyArK2spIHsKLSAgICAgICAgaWYgKGFsbFJvd3Nba10tPmlzU2VsZWN0
ZWQoKSkgewotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChhbGxSb3dzW2tdKTsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIHJvdyA6IGFsbFJvd3MpIHsKKyAgICAgICAgaWYgKHJvdy0+aXNTZWxlY3Rl
ZCgpKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJvdyk7CiAgICAgICAgICAgICBpZiAo
IWlzTXVsdGkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTMwODIsMTEg
KzMwNjgsOCBAQAogewogICAgIGJvb2wgaXNNdWx0aSA9IGlzTXVsdGlTZWxlY3RhYmxlKCk7CiAK
LSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkT2JqZWN0cyA9IGNo
aWxkcmVuKCk7Ci0gICAgdW5zaWduZWQgY2hpbGRyZW5TaXplID0gY2hpbGRPYmplY3RzLnNpemUo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY2hpbGRyZW5TaXplOyArK2spIHsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW4oKSkgewogICAgICAgICAvLyBFdmVy
eSBjaGlsZCBzaG91bGQgaGF2ZSBhcmlhLXJvbGUgb3B0aW9uLCBhbmQgaWYgc28sIGNoZWNrIGZv
ciBzZWxlY3RlZCBhdHRyaWJ1dGUvc3RhdGUuCi0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNoaWxkID0gY2hpbGRPYmplY3RzW2tdLmdldCgpOwogICAgICAgICBpZiAoY2hpbGQtPmlzU2Vs
ZWN0ZWQoKSAmJiBjaGlsZC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBMaXN0Qm94T3B0aW9uUm9s
ZSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjaGlsZCk7CiAgICAgICAgICAgICBpZiAo
IWlzTXVsdGkpCkBAIC0zMTEyLDExICszMDk1LDkgQEAKICAgICBpZiAoIWhhc0NoaWxkcmVuKCkp
CiAgICAgICAgIGFkZENoaWxkcmVuKCk7CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxk
cmVuKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgaWYgKCFjaGlsZHJlbltpXS0+aXNP
ZmZTY3JlZW4oKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hpbGRyZW5baV0pOworICAg
IGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBjaGlsZHJlbigpKSB7CisgICAgICAgIGlmIChjaGls
ZC0+aXNPZmZTY3JlZW4oKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hpbGQpOwogICAg
IH0KIH0KIApAQCAtMzEzNiwxMSArMzExNyw5IEBACiB7CiAgICAgQVNTRVJUKHJvbGVWYWx1ZSgp
ID09IFRhYkxpc3RSb2xlKTsKICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsK
LSAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoY2hpbGRyZW5baV0tPmlzVGFiSXRlbSgp
KQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjaGlsZHJlbltpXSk7CisgICAgZm9yIChjb25z
dCBhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1RhYkl0
ZW0oKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hpbGQpOwogICAgIH0KIH0KICAgICAK
QEAgLTM1NzEsNyArMzU1MCw3IEBACiAgICAgaWYgKCFpc01hdGhSb290KCkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIAotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIGF1dG8m
IGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpIDwg
MSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkBAIC0zNTg0LDcgKzM1NjMsNyBAQAogICAgIGlm
ICghaXNNYXRoUm9vdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBjb25zdCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0g
dGhpcy0+Y2hpbGRyZW4oKTsKKyAgICBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7
CiAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSAhPSAyKQogICAgICAgICByZXR1cm4gMDsKIApAQCAt
MzU5OCw3ICszNTc3LDcgQEAKICAgICBpZiAoIWlzTWF0aEZyYWN0aW9uKCkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIAotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIGF1dG8m
IGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpICE9
IDIpCiAgICAgICAgIHJldHVybiAwOwogICAgIApAQCAtMzYxMCw3ICszNTg5LDcgQEAKICAgICBp
ZiAoIWlzTWF0aEZyYWN0aW9uKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3QgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9
IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigp
OwogICAgIGlmIChjaGlsZHJlbi5zaXplKCkgIT0gMikKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
CkBAIC0zNjIyLDcgKzM2MDEsNyBAQAogICAgIGlmICghaXNNYXRoVW5kZXJPdmVyKCkgfHwgIW5v
ZGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgYXV0byYgY2hp
bGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwogICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPCAyKQog
ICAgICAgICByZXR1cm4gMDsKICAgICAKQEAgLTM2MzcsNyArMzYxNiw3IEBACiAgICAgaWYgKCFp
c01hdGhVbmRlck92ZXIoKSB8fCAhbm9kZSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAg
ICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gdGhpcy0+Y2hp
bGRyZW4oKTsKKyAgICBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CiAgICAgaWYg
KGNoaWxkcmVuLnNpemUoKSA8IDIpCiAgICAgICAgIHJldHVybiAwOwogICAgIApAQCAtMzY1NCw3
ICszNjMzLDcgQEAKICAgICBpZiAoIWlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkgJiYgIWlz
TWF0aFVuZGVyT3ZlcigpICYmICFpc01hdGhNdWx0aXNjcmlwdCgpKQogICAgICAgICByZXR1cm4g
MDsKICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVu
ID0gdGhpcy0+Y2hpbGRyZW4oKTsKKyAgICBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVu
KCk7CiAgICAgLy8gVGhlIGJhc2Ugb2JqZWN0IGluIHF1ZXN0aW9uIGlzIGFsd2F5cyB0aGUgZmly
c3QgY2hpbGQuCiAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA+IDApCiAgICAgICAgIHJldHVybiBj
aGlsZHJlblswXS5nZXQoKTsKQEAgLTM2NjcsNyArMzY0Niw3IEBACiAgICAgaWYgKCFpc01hdGhT
dWJzY3JpcHRTdXBlcnNjcmlwdCgpIHx8ICFub2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IAotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSB0aGlz
LT5jaGlsZHJlbigpOworICAgIGF1dG8mIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKICAg
ICBpZiAoY2hpbGRyZW4uc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTM2ODIs
NyArMzY2MSw3IEBACiAgICAgaWYgKCFpc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpIHx8ICFu
b2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIGF1dG8mIGNo
aWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKICAgICB1bnNpZ25lZCBjb3VudCA9IGNoaWxkcmVu
LnNpemUoKTsKIAogICAgIGlmIChjb3VudCA+PSAyICYmIG5vZGUoKS0+aGFzVGFnTmFtZShNYXRo
TUxOYW1lczo6bXN1cFRhZykpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCShyZXZpc2lvbiAxNjE4OTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgICByZXR1cm4gdHJ1ZTsgICAgCiAKICAg
ICAvLyBpZiB0aGVyZSdzIGEgY29sZ3JvdXAgb3IgY29sIGVsZW1lbnQsIGl0J3MgcHJvYmFibHkg
YSBkYXRhIHRhYmxlLgotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxFbGVt
ZW50PigqdGFibGVFbGVtZW50KSkgeworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBjaGls
ZHJlbk9mVHlwZTxFbGVtZW50PigqdGFibGVFbGVtZW50KSkgewogICAgICAgICBpZiAoY2hpbGQu
aGFzVGFnTmFtZShjb2xUYWcpIHx8IGNoaWxkLmhhc1RhZ05hbWUoY29sZ3JvdXBUYWcpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNDI4LDkgKzQyOCw4IEBACiAgICAgCiAg
ICAgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwogICAgIAotICAgIHNpemVfdCBjb2x1bW5D
b3VudCA9IG1fY29sdW1ucy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2x1
bW5Db3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXIg
PSB0b0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbihtX2NvbHVtbnNbaV0uZ2V0KCkpLT5oZWFkZXJP
YmplY3QoKSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbHVtbiA6IG1fY29sdW1ucykgeworICAg
ICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyID0gdG9BY2Nlc3NpYmlsaXR5VGFi
bGVDb2x1bW4oY29sdW1uLmdldCgpKS0+aGVhZGVyT2JqZWN0KCkpCiAgICAgICAgICAgICBoZWFk
ZXJzLmFwcGVuZChoZWFkZXIpOwogICAgIH0KIH0KQEAgLTQ0Miw5ICs0NDEsOCBAQAogICAgIAog
ICAgIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKICAgICAKLSAgICBzaXplX3Qgcm93Q291
bnQgPSBtX3Jvd3Muc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm93Q291bnQ7
ICsraSkgewotICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyID0gdG9BY2Nl
c3NpYmlsaXR5VGFibGVSb3cobV9yb3dzW2ldLmdldCgpKS0+aGVhZGVyT2JqZWN0KCkpCisgICAg
Zm9yIChjb25zdCBhdXRvJiByb3cgOiBtX3Jvd3MpIHsKKyAgICAgICAgaWYgKEFjY2Vzc2liaWxp
dHlPYmplY3QqIGhlYWRlciA9IHRvQWNjZXNzaWJpbGl0eVRhYmxlUm93KHJvdy5nZXQoKSktPmhl
YWRlck9iamVjdCgpKQogICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQoaGVhZGVyKTsKICAgICB9
CiB9CkBAIC00NTYsOSArNDU0LDcgQEAKICAgICAKICAgICB1cGRhdGVDaGlsZHJlbklmTmVjZXNz
YXJ5KCk7CiAgICAgCi0gICAgc2l6ZV90IHJvd0NvdW50ID0gbV9yb3dzLnNpemUoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJvd0NvdW50OyArK2kpIHsKLSAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogcm93ID0gbV9yb3dzW2ldLmdldCgpOworICAgIGZvciAoY29uc3QgYXV0byYg
cm93IDogbV9yb3dzKSB7CiAgICAgICAgIGlmIChyb3cgJiYgIXJvdy0+aXNPZmZTY3JlZW4oKSkK
ICAgICAgICAgICAgIHJvd3MuYXBwZW5kKHJvdyk7CiAgICAgfQpAQCAtNDcxLDggKzQ2Nyw4IEBA
CiAgICAgCiAgICAgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwogICAgIAotICAgIGZvciAo
c2l6ZV90IHJvdyA9IDA7IHJvdyA8IG1fcm93cy5zaXplKCk7ICsrcm93KQotICAgICAgICBjZWxs
cy5hcHBlbmRWZWN0b3IobV9yb3dzW3Jvd10tPmNoaWxkcmVuKCkpOworICAgIGZvciAoY29uc3Qg
YXV0byYgcm93IDogbV9yb3dzKQorICAgICAgICBjZWxscy5hcHBlbmRWZWN0b3Iocm93LT5jaGls
ZHJlbigpKTsKIH0KICAgICAKIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlUYWJsZTo6Y29sdW1uQ291
bnQoKQpAQCAtNTA5LDcgKzUwNSw3IEBACiAgICAgLy8gSXRlcmF0ZSBiYWNrd2FyZHMgdGhyb3Vn
aCB0aGUgcm93cyBpbiBjYXNlIHRoZSBkZXNpcmVkIGNlbGwgaGFzIGEgcm93c3BhbiBhbmQgZXhp
c3RzIGluIGEgcHJldmlvdXMgcm93LgogICAgIGZvciAodW5zaWduZWQgcm93SW5kZXhDb3VudGVy
ID0gcm93ICsgMTsgcm93SW5kZXhDb3VudGVyID4gMDsgLS1yb3dJbmRleENvdW50ZXIpIHsKICAg
ICAgICAgdW5zaWduZWQgcm93SW5kZXggPSByb3dJbmRleENvdW50ZXIgLSAxOwotICAgICAgICBj
b25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gbV9yb3dzW3Jvd0lu
ZGV4XS0+Y2hpbGRyZW4oKTsKKyAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBtX3Jvd3Nbcm93SW5k
ZXhdLT5jaGlsZHJlbigpOwogICAgICAgICAvLyBTaW5jZSBzb21lIGNlbGxzIG1heSBoYXZlIGNv
bHNwYW5zLCB3ZSBoYXZlIHRvIGNoZWNrIHRoZSBhY3R1YWwgcmFuZ2Ugb2YgZWFjaAogICAgICAg
ICAvLyBjZWxsIHRvIGRldGVybWluZSB3aGljaCBpcyB0aGUgcmlnaHQgb25lLgogICAgICAgICBm
b3IgKHVuc2lnbmVkIGNvbEluZGV4Q291bnRlciA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihjaGlsZHJlbi5zaXplKCkpLCBjb2x1bW4gKyAxKTsgY29sSW5kZXhDb3VudGVyID4gMDsg
LS1jb2xJbmRleENvdW50ZXIpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAJKHJldmlzaW9uIDE2
MTg5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
Q29sdW1uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTIgKzgwLDkgQEAKICAgICAKICAgICBB
Y2Nlc3NpYmlsaXR5VGFibGUqIHBhcmVudFRhYmxlID0gdG9BY2Nlc3NpYmlsaXR5VGFibGUobV9w
YXJlbnQpOwogICAgIGlmIChwYXJlbnRUYWJsZS0+aXNBcmlhVGFibGUoKSkgewotICAgICAgICBj
b25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJvd0NoaWxkcmVuID0gY2hpbGRyZW4o
KTsKLSAgICAgICAgdW5zaWduZWQgY2hpbGRyZW5Db3VudCA9IHJvd0NoaWxkcmVuLnNpemUoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkcmVuQ291bnQ7ICsraSkgewot
ICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2VsbCA9IHJvd0NoaWxkcmVuW2ldLmdl
dCgpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNlbGwgOiBjaGlsZHJlbigpKSB7CiAgICAg
ICAgICAgICBpZiAoY2VsbC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBDb2x1bW5IZWFkZXJSb2xl
KQotICAgICAgICAgICAgICAgIHJldHVybiBjZWxsOworICAgICAgICAgICAgICAgIHJldHVybiBj
ZWxsLmdldCgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gMDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29u
dGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDE2MTg5OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29u
dGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsOCBAQAogICAgIAogICAgIHRv
QWNjZXNzaWJpbGl0eVRhYmxlKG1fcGFyZW50KS0+Y29sdW1uSGVhZGVycyhtX2NoaWxkcmVuKTsK
ICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyArK2spCi0gICAgICAgIG1faGVhZGVyUmVjdC51
bml0ZShtX2NoaWxkcmVuW2tdLT5lbGVtZW50UmVjdCgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAgICAgbV9oZWFkZXJSZWN0LnVuaXRlKGNoaWxkLT5l
bGVtZW50UmVjdCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93
LmNwcAkocmV2aXNpb24gMTYxODk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcg
QEAKICAgICBpZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPmlzVGFibGVSb3coKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yJiByb3dDaGlsZHJlbiA9IGNoaWxkcmVuKCk7CisgICAgYXV0byYgcm93Q2hpbGRyZW4gPSBj
aGlsZHJlbigpOwogICAgIGlmICghcm93Q2hpbGRyZW4uc2l6ZSgpKQogICAgICAgICByZXR1cm4g
MDsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShy
ZXZpc2lvbiAxNjE4OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDcg
KzM0Nyw3IEBACiAgICAgaWYgKFtzZWxmIGlzQXR0YWNobWVudF0pCiAgICAgICAgIHJldHVybiBb
W3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlFbGVtZW50QXRJbmRleDppbmRleF07
CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOworICAgIGF1dG8mIGNo
aWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmRleCkgPj0gY2hpbGRyZW4uc2l6ZSgpKQogICAgICAgICByZXR1cm4gbmlsOwogICAg
IApAQCAtMzY3LDcgKzM2Nyw3IEBACiAgICAgaWYgKFtzZWxmIGlzQXR0YWNobWVudF0pCiAgICAg
ICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGluZGV4T2ZBY2Nlc3NpYmlsaXR5RWxl
bWVudDplbGVtZW50XTsKICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7
CisgICAgYXV0byYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKICAgICB1bnNpZ25l
ZCBjb3VudCA9IGNoaWxkcmVuLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwg
Y291bnQ7ICsraykgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3JhcHBl
ciA9IGNoaWxkcmVuW2tdLT53cmFwcGVyKCk7CkBAIC0xMDczLDcgKzEwNzMsNyBAQAogICAgIGlm
IChyb2xlICE9IExpbmtSb2xlICYmIHJvbGUgIT0gV2ViQ29yZUxpbmtSb2xlKQogICAgICAgICBy
ZXR1cm4gTk87CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOworICAg
IGF1dG8mIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CiAgICAgdW5zaWduZWQgY2hp
bGRyZW5TaXplID0gY2hpbGRyZW4uc2l6ZSgpOwogCiAgICAgLy8gSWYgdGhlcmUncyBvbmx5IG9u
ZSBjaGlsZCwgdGhlbiBpdCBkb2Vzbid0IGhhdmUgc2VnbWVudGVkIGNoaWxkcmVuLiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQmFzZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0JKHJldmlzaW9uIDE2MTg5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQmFzZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzgsMTEgKzc4LDkgQEAKIAog
c3RhdGljIE5TQXJyYXkgKmNvbnZlcnRNYXRoUGFpcnNUb05TQXJyYXkoY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJiBwYWlycywgTlNT
dHJpbmcgKnN1YnNjcmlwdEtleSwgTlNTdHJpbmcgKnN1cGVyc2NyaXB0S2V5KQogewotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHBhaXJzLnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSAqYXJyYXkg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bGVuZ3RoXTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICBOU011dGFibGVBcnJheSAqYXJy
YXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6cGFpcnMuc2l6ZSgpXTsKKyAg
ICBmb3IgKGF1dG8mIHBhaXIgOiBwYWlycykgewogICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICpwYWlyRGljdGlvbmFyeSA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwotICAg
ICAgICBzdGQ6OnBhaXI8QWNjZXNzaWJpbGl0eU9iamVjdCosIEFjY2Vzc2liaWxpdHlPYmplY3Qq
PiBwYWlyID0gcGFpcnNbaV07CiAgICAgICAgIGlmIChwYWlyLmZpcnN0ICYmIHBhaXIuZmlyc3Qt
PndyYXBwZXIoKSAmJiAhcGFpci5maXJzdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQogICAg
ICAgICAgICAgW3BhaXJEaWN0aW9uYXJ5IHNldE9iamVjdDpwYWlyLmZpcnN0LT53cmFwcGVyKCkg
Zm9yS2V5OnN1YnNjcmlwdEtleV07CiAgICAgICAgIGlmIChwYWlyLnNlY29uZCAmJiBwYWlyLnNl
Y29uZC0+d3JhcHBlcigpICYmICFwYWlyLnNlY29uZC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
KQpAQCAtMTY1LDEwICsxNjMsNyBAQAogICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4gdGV4
dE9yZGVyOwogICAgIG1fb2JqZWN0LT5hY2Nlc3NpYmlsaXR5VGV4dCh0ZXh0T3JkZXIpOwogICAg
IAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHRPcmRlci5zaXplKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBrID0gMDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgIGNvbnN0IEFjY2Vzc2liaWxp
dHlUZXh0JiB0ZXh0ID0gdGV4dE9yZGVyW2tdOwotICAgICAgICAKKyAgICBmb3IgKGF1dG8gdGV4
dCA6IHRleHRPcmRlcikgewogICAgICAgICAvLyBJZiB3ZSBoYXZlIGFsdGVybmF0aXZlIHRleHQs
IHRoZW4gd2Ugc2hvdWxkIG5vdCBleHBvc2UgYSB0aXRsZS4KICAgICAgICAgaWYgKHRleHQudGV4
dFNvdXJjZSA9PSBBbHRlcm5hdGl2ZVRleHQpCiAgICAgICAgICAgICBicmVhazsKQEAgLTE5Niwx
MSArMTkxLDggQEAKICAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+IHRleHRPcmRlcjsKICAg
ICBtX29iamVjdC0+YWNjZXNzaWJpbGl0eVRleHQodGV4dE9yZGVyKTsKICAgICAKLSAgICB1bnNp
Z25lZCBsZW5ndGggPSB0ZXh0T3JkZXIuc2l6ZSgpOwogICAgIGJvb2wgdmlzaWJsZVRleHRBdmFp
bGFibGUgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBrKysp
IHsKLSAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eVRleHQmIHRleHQgPSB0ZXh0T3JkZXJba107
Ci0gICAgICAgIAorICAgIGZvciAoYXV0byB0ZXh0IDogdGV4dE9yZGVyKSB7CiAgICAgICAgIGlm
ICh0ZXh0LnRleHRTb3VyY2UgPT0gQWx0ZXJuYXRpdmVUZXh0KQogICAgICAgICAgICAgcmV0dXJu
IHRleHQudGV4dDsKICAgICAgICAgCkBAIC0yMjUsMTEgKzIxNyw4IEBACiAgICAgVmVjdG9yPEFj
Y2Vzc2liaWxpdHlUZXh0PiB0ZXh0T3JkZXI7CiAgICAgbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlU
ZXh0KHRleHRPcmRlcik7CiAgICAgCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dE9yZGVyLnNp
emUoKTsKICAgICBib29sIGRlc2NyaXB0aXZlVGV4dEF2YWlsYWJsZSA9IGZhbHNlOwotICAgIGZv
ciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICBjb25zdCBBY2Nl
c3NpYmlsaXR5VGV4dCYgdGV4dCA9IHRleHRPcmRlcltrXTsKLSAgICAgICAgCisgICAgZm9yIChh
dXRvIHRleHQgOiB0ZXh0T3JkZXIpIHsKICAgICAgICAgaWYgKHRleHQudGV4dFNvdXJjZSA9PSBI
ZWxwVGV4dCB8fCB0ZXh0LnRleHRTb3VyY2UgPT0gU3VtbWFyeVRleHQpCiAgICAgICAgICAgICBy
ZXR1cm4gdGV4dC50ZXh0OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyTWFjLm1tCShyZXZpc2lvbiAxNjE4OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTU2MiwxNSArMTU2MiwxNCBAQAogCiBzdGF0aWMgTlNNdXRhYmxlQXJyYXkq
IGNvbnZlcnRUb05TQXJyYXkoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJiB2ZWN0b3IpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdmVjdG9y
LnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJy
YXlXaXRoQ2FwYWNpdHk6IGxlbmd0aF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7Ci0gICAgICAgIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFw
cGVyID0gdmVjdG9yW2ldLT53cmFwcGVyKCk7CisgICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0g
W05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnZlY3Rvci5zaXplKCldOworICAgIGZv
ciAoY29uc3QgYXV0byYgY2hpbGQgOiB2ZWN0b3IpIHsKKyAgICAgICAgV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBjaGlsZC0+d3JhcHBlcigpOwogICAgICAgICBBU1NF
UlQod3JhcHBlcik7CiAgICAgICAgIGlmICh3cmFwcGVyKSB7CiAgICAgICAgICAgICAvLyB3ZSB3
YW50IHRvIHJldHVybiB0aGUgYXR0YWNobWVudCB2aWV3IGluc3RlYWQgb2YgdGhlIG9iamVjdCBy
ZXByZXNlbnRpbmcgdGhlIGF0dGFjaG1lbnQuCiAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHdl
IGdldCBwYWxpbmRyb21lIGVycm9ycyBpbiB0aGUgQVggaGllcmFyY2h5Ci0gICAgICAgICAgICBp
ZiAodmVjdG9yW2ldLT5pc0F0dGFjaG1lbnQoKSAmJiBbd3JhcHBlciBhdHRhY2htZW50Vmlld10p
CisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQXR0YWNobWVudCgpICYmIFt3cmFwcGVyIGF0dGFj
aG1lbnRWaWV3XSkKICAgICAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0Olt3cmFwcGVyIGF0
dGFjaG1lbnRWaWV3XV07CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgW2FycmF5
IGFkZE9iamVjdDp3cmFwcGVyXTsKQEAgLTE1ODEsMTAgKzE1ODAsOSBAQAogCiBzdGF0aWMgTlNN
dXRhYmxlQXJyYXkgKmNvbnZlcnRTdHJpbmdzVG9OU0FycmF5KGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiB2ZWN0b3IpCiB7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHZlY3Rvci5zaXplKCk7Ci0gICAgTlNN
dXRhYmxlQXJyYXkgKmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Omxl
bmd0aF07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAg
W2FycmF5IGFkZE9iamVjdDp2ZWN0b3JbaV1dOworICAgIE5TTXV0YWJsZUFycmF5ICphcnJheSA9
IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp2ZWN0b3Iuc2l6ZSgpXTsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6IHZlY3RvcikKKyAgICAgICAgW2FycmF5IGFkZE9iamVj
dDpzdHJpbmddOwogICAgIHJldHVybiBhcnJheTsKIH0KIApAQCAtMjM3Nyw3ICsyMzc1LDcgQEAK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNv
bnRlbnRzQXR0cmlidXRlXSkgewogICAgICAgICAvLyBUaGUgY29udGVudHMgb2YgYSB0YWIgbGlz
dCBhcmUgYWxsIHRoZSBjaGlsZHJlbiBleGNlcHQgdGhlIHRhYnMuCiAgICAgICAgIGlmIChtX29i
amVjdC0+aXNUYWJMaXN0KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hp
bGRyZW4oKTsKKyAgICAgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVu
KCk7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3IgdGFic0NoaWxkcmVuOwogICAgICAgICAgICAgbV9vYmplY3QtPnRhYkNoaWxkcmVu
KHRhYnNDaGlsZHJlbik7CiAgICAgICAgICAgICAKQEAgLTIzODksMTQgKzIzODcsMTEgQEAKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNvbnRlbnRz
KTsKICAgICAgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNTY3JvbGxWaWV3KCkpIHsKLSAgICAg
ICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKLSAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gQSBzY3JvbGxWaWV3J3MgY29udGVudHMgYXJlIGV2ZXJ5dGhpbmcgZXhjZXB0
IHRoZSBzY3JvbGwgYmFycy4KICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciBjb250ZW50czsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNo
aWxkcmVuU2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
ayA9IDA7IGsgPCBjaGlsZHJlblNpemU7ICsraykgewotICAgICAgICAgICAgICAgIGlmICghY2hp
bGRyZW5ba10tPmlzU2Nyb2xsYmFyKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzLmFw
cGVuZChjaGlsZHJlbltrXSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDog
bV9vYmplY3QtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLT5pc1Nj
cm9sbGJhcigpKQorICAgICAgICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoY2hpbGQpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVu
dHMpOwogICAgICAgICB9CkBAIC0zNjE0LDcgKzM2MDksNyBAQAogICAgIGlmIChtX29iamVjdC0+
aXNUcmVlKCkpCiAgICAgICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGls
ZDpjaGlsZF07CiAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOworICAg
IGF1dG8mIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CiAgICAgCiAgICAgaWYgKGNo
aWxkcmVuLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFtbc2VsZiByZW5kZXJXaWRnZXRDaGls
ZHJlbl0gaW5kZXhPZk9iamVjdDpjaGlsZF07CkBAIC0zNjQwLDcgKzM2MzUsNyBAQAogICAgICAg
ICBpZiAobV9vYmplY3QtPmlzVHJlZSgpIHx8IG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpCiAgICAg
ICAgICAgICByZXR1cm4gW1tzZWxmIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vz
c2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV0gY291bnRdOwogICAgICAgICAKLSAgICAgICAgY29u
c3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGls
ZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOworICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG1f
b2JqZWN0LT5jaGlsZHJlbigpOwogICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQogICAg
ICAgICAgICAgcmV0dXJuIFtbc2VsZiByZW5kZXJXaWRnZXRDaGlsZHJlbl0gY291bnRdOwogICAg
ICAgICAKQEAgLTM2NzIsNyArMzY2Nyw3IEBACiAgICAgICAgICAgICByZXR1cm4gW3N1cGVyIGFj
Y2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZVZhbHVlczphdHRyaWJ1dGUgaW5kZXg6aW5kZXggbWF4
Q291bnQ6bWF4Q291bnRdOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjb25zdCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0g
bV9vYmplY3QtPmNoaWxkcmVuKCk7CisgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gbV9vYmplY3Qt
PmNoaWxkcmVuKCk7CiAgICAgICAgIHVuc2lnbmVkIGNoaWxkQ291bnQgPSBjaGlsZHJlbi5zaXpl
KCk7CiAgICAgICAgIGlmIChpbmRleCA+PSBjaGlsZENvdW50KQogICAgICAgICAgICAgcmV0dXJu
IG5pbDsK
</data>
<flag name="review"
          id="245033"
          type_id="1"
          status="+"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="245037"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>